From 5313ecfbed66538dd7b1d01ac3db0a9a0c13f0b5 Mon Sep 17 00:00:00 2001 From: linfaxin Date: Mon, 13 Feb 2017 16:21:53 +0800 Subject: [PATCH] 0.7.0 --- dist/android-ui.d.ts | 1425 +- dist/android-ui.es5.js | 6 +- dist/android-ui.es5.js.map | 2 +- dist/android-ui.js | 30892 ++++++++++++++++++----------------- package.json | 2 +- 5 files changed, 16740 insertions(+), 15587 deletions(-) diff --git a/dist/android-ui.d.ts b/dist/android-ui.d.ts index 7229509..95df4bb 100644 --- a/dist/android-ui.d.ts +++ b/dist/android-ui.d.ts @@ -555,8 +555,8 @@ declare module androidui.image { protected createImage(): void; protected loadImage(): void; src: string; - width: number; - height: number; + readonly width: number; + readonly height: number; getImageRatio(): number; isImageLoaded(): boolean; private fireOnLoad(); @@ -873,7 +873,7 @@ declare module android.graphics.drawable { } declare module java.lang { class JavaObject { - static class: Class; + static readonly class: Class; private hash; hashCode(): number; getClass(): Class; @@ -1048,6 +1048,7 @@ declare module android.content { getApplicationContext(): android.app.Application; getResources(): android.content.res.Resources; getLayoutInflater(): LayoutInflater; + obtainStyledAttributes(attrs: HTMLElement, defStyleAttr?: Map): res.TypedArray; } } declare module android.R { @@ -1084,14 +1085,19 @@ declare module androidui.attr { declare module android.content.res { import Drawable = android.graphics.drawable.Drawable; class TypedArray { - static obtain(res: android.content.res.Resources, xml: HTMLElement): TypedArray; + static obtain(res: android.content.res.Resources, xml: HTMLElement, defStyleAttr?: Map): TypedArray; private mResources; - private mXml; + private attrMap; + private attrMapKeysCache; private mRecycled; - constructor(res: android.content.res.Resources, xml: HTMLElement); + constructor(res: android.content.res.Resources, attrMap: Map); private checkRecycled(); length(): number; + getIndex(keyIndex: number): string; + getLowerCaseNoNamespaceAttrNames(): Array; getResources(): android.content.res.Resources; + getAttrValue(attrName: string): string; + getResourceId(attrName: string, defaultResourceId: string): string; getText(attrName: string): string; getString(attrName: string): string; getBoolean(attrName: string, defValue: boolean): boolean; @@ -1100,6 +1106,7 @@ declare module android.content.res { getColor(attrName: string, defValue: number): number; getColorStateList(attrName: string): android.content.res.ColorStateList; getInteger(attrName: string, defValue: number): number; + getLayoutDimension(attrName: string, defValue: number): number; getDimension(attrName: string, defValue: number): number; getDimensionPixelOffset(attrName: string, defValue: number): number; getDimensionPixelSize(attrName: string, defValue: number): number; @@ -1113,9 +1120,10 @@ declare module android.content.res { declare module android.content.res { import DisplayMetrics = android.util.DisplayMetrics; import Drawable = android.graphics.drawable.Drawable; + import SynchronizedPool = android.util.Pools.SynchronizedPool; class Resources { private static instance; - private mTypedArrayPool; + mTypedArrayPool: SynchronizedPool; private displayMetrics; private context; static _AppBuildImageFileFinder: (refString: string) => Drawable; @@ -1127,7 +1135,7 @@ declare module android.content.res { static getDisplayMetrics(): DisplayMetrics; getDisplayMetrics(): DisplayMetrics; private fillDisplayMetrics(displayMetrics); - private getDefStyle(refString); + getDefStyle(refString: string): any; getDrawable(refString: string): Drawable; getColor(refString: string): number; getColorStateList(refString: string): ColorStateList; @@ -1141,13 +1149,12 @@ declare module android.content.res { getString(refString: string): string; getStringArray(refString: string): string[]; getLayout(refString: string): HTMLElement; + getAnimation(refString: string): android.view.animation.Animation; private getStyleAsMap(refString); getXml(refString: string): HTMLElement; getValue(refString: string, resolveRefs?: boolean): HTMLElement; obtainAttributes(attrs: HTMLElement): TypedArray; - static buildDrawableFinder: any; - static buildLayoutFinder: any; - static buildResourcesElement: void; + obtainStyledAttributes(attrs: HTMLElement, defStyleAttr: Map): TypedArray; } } declare module android.view { @@ -1453,6 +1460,7 @@ declare module android.view.animation { declare module android.view.animation { class AnimationUtils { static currentAnimationTimeMillis(): number; + static loadAnimation(context: android.content.Context, id: string): Animation; } } declare module android.util { @@ -1487,23 +1495,24 @@ declare module androidui.attr { createDiffKeyAsNullValueAttrMap(another: StateAttr): Map; } } +declare let STATE_MAP: Map; declare module androidui.attr { import View = android.view.View; class StateAttrList { - private static CacheMap; - private list; - private matchedAttrCache; + private originStateAttrList; + private matchedStateAttrList; private mView; constructor(view: View); - private _initStyleAttributes(attrMap, inParseState); - private _initStyleAttr(attrName, attrValue, inParseState); - getDefaultStateAttr(): StateAttr; + static getViewStateValue(attrName: string): number; + addStatedAttr(attrName: string, attrValue: string): void; + private addStatedAttrImpl(attrName, attrValue, inParseState); private getStateAttr(state); - private optStateAttr(state); + private getOrCreateStateAttr(state); getMatchedStateAttr(state: number[]): StateAttr; removeAttrAllState(attrName: string): void; } } +declare function fixDefaultNamespaceAndLowerCase(key: any): any; declare module androidui.attr { import View = android.view.View; import ViewGroup = android.view.ViewGroup; @@ -1514,17 +1523,17 @@ declare module androidui.attr { private host; private attrChangeMap; private attrStashMap; - private classAttrBindList; + private classAttrBindMap; private objectRefs; private mContext; constructor(host: View | ViewGroup.LayoutParams); - addClassAttrBind(classAttrBind: AttrBinder.ClassBinderMap): void; + setClassAttrBind(classAttrBind: AttrBinder.ClassBinderMap): void; addAttr(attrName: string, onAttrChange: (newValue: any) => void, stashAttrValueWhenStateChange?: () => any): void; onAttrChange(attrName: string, attrValue: any, context: Context): void; getAttrValue(attrName: string): string; private getRefObject(ref); private setRefObject(obj); - parsePaddingMarginLTRB(value: any): string[]; + parsePaddingMarginTRBL(value: any): number[]; parseEnum(value: any, enumMap: Map, defaultValue: number): number; parseBoolean(value: any, defaultValue?: boolean): boolean; parseGravity(s: string, defaultValue?: number): number; @@ -1542,13 +1551,14 @@ declare module androidui.attr { module AttrBinder { class ClassBinderMap { binderMap: Map; + constructor(copyBinderMap?: Map); set(key: string, value?: androidui.attr.AttrBinder.ClassBinderValue): ClassBinderMap; get(key: string): androidui.attr.AttrBinder.ClassBinderValue; - private callSetter(attrName, host, attrValue); + private callSetter(attrName, host, attrValue, attrBinder); private callGetter(attrName, host); } interface ClassBinderValue { - setter: (host: android.view.View | android.view.ViewGroup.LayoutParams, attrValue: any) => void; + setter: (host: android.view.View | android.view.ViewGroup.LayoutParams, attrValue: any, attrBinder: AttrBinder) => void; getter?: (host: android.view.View | android.view.ViewGroup.LayoutParams) => any; } } @@ -1565,8 +1575,8 @@ declare module androidui.image { class NetDrawable extends Drawable { private mState; private mLoadListener; - private mImageWidth; - private mImageHeight; + protected mImageWidth: number; + protected mImageHeight: number; private mTileModeX; private mTileModeY; private mTmpTileBound; @@ -2058,7 +2068,7 @@ declare module android.graphics.drawable { mOwner: DrawableContainer; private mDrawableFutures; mDrawables: Array; - mNumChildren: number; + readonly mNumChildren: number; mVariablePadding: boolean; mPaddingChecked: boolean; mConstantPadding: Rect; @@ -2203,31 +2213,31 @@ declare module android.R { import InsetDrawable = android.graphics.drawable.InsetDrawable; import StateListDrawable = android.graphics.drawable.StateListDrawable; class drawable { - static btn_default: Drawable; - static editbox_background: Drawable; - static btn_check: Drawable; - static btn_radio: Drawable; - static progress_small_holo: Drawable; - static progress_medium_holo: Drawable; - static progress_large_holo: Drawable; - static progress_horizontal_holo: Drawable; - static progress_indeterminate_horizontal_holo: Drawable; - static ratingbar_full_empty_holo_light: Drawable; - static ratingbar_full_filled_holo_light: Drawable; - static ratingbar_full_holo_light: Drawable; - static ratingbar_holo_light: Drawable; - static ratingbar_small_holo_light: Drawable; - static scrubber_control_selector_holo: Drawable; - static scrubber_progress_horizontal_holo_light: Drawable; - static scrubber_primary_holo: Drawable; - static scrubber_secondary_holo: Drawable; - static scrubber_track_holo_light: Drawable; - static list_selector_background: Drawable; - static list_divider: Drawable; - static divider_vertical: Drawable; - static divider_horizontal: Drawable; - static item_background: StateListDrawable; - static toast_frame: InsetDrawable; + static readonly btn_default: Drawable; + static readonly editbox_background: Drawable; + static readonly btn_check: Drawable; + static readonly btn_radio: Drawable; + static readonly progress_small_holo: Drawable; + static readonly progress_medium_holo: Drawable; + static readonly progress_large_holo: Drawable; + static readonly progress_horizontal_holo: Drawable; + static readonly progress_indeterminate_horizontal_holo: Drawable; + static readonly ratingbar_full_empty_holo_light: Drawable; + static readonly ratingbar_full_filled_holo_light: Drawable; + static readonly ratingbar_full_holo_light: Drawable; + static readonly ratingbar_holo_light: Drawable; + static readonly ratingbar_small_holo_light: Drawable; + static readonly scrubber_control_selector_holo: Drawable; + static readonly scrubber_progress_horizontal_holo_light: Drawable; + static readonly scrubber_primary_holo: Drawable; + static readonly scrubber_secondary_holo: Drawable; + static readonly scrubber_track_holo_light: Drawable; + static readonly list_selector_background: Drawable; + static readonly list_divider: Drawable; + static readonly divider_vertical: Drawable; + static readonly divider_horizontal: Drawable; + static readonly item_background: StateListDrawable; + static readonly toast_frame: InsetDrawable; } } declare module androidui.image { @@ -2277,63 +2287,63 @@ declare module androidui.image { } declare module android.R { class image_base64 { - static actionbar_ic_back_white: any; - static btn_check_off_disabled_focused_holo_light: any; - static btn_check_off_disabled_holo_light: any; - static btn_check_off_focused_holo_light: any; - static btn_check_off_holo_light: any; - static btn_check_off_pressed_holo_light: any; - static btn_check_on_disabled_focused_holo_light: any; - static btn_check_on_disabled_holo_light: any; - static btn_check_on_focused_holo_light: any; - static btn_check_on_holo_light: any; - static btn_check_on_pressed_holo_light: any; - static btn_default_disabled_focused_holo_light: any; - static btn_default_disabled_holo_light: any; - static btn_default_focused_holo_light: any; - static btn_default_normal_holo_light: any; - static btn_default_pressed_holo_light: any; - static btn_radio_off_disabled_focused_holo_light: any; - static btn_radio_off_disabled_holo_light: any; - static btn_radio_off_focused_holo_light: any; - static btn_radio_off_holo_light: any; - static btn_radio_off_pressed_holo_light: any; - static btn_radio_on_disabled_focused_holo_light: any; - static btn_radio_on_disabled_holo_light: any; - static btn_radio_on_focused_holo_light: any; - static btn_radio_on_holo_light: any; - static btn_radio_on_pressed_holo_light: any; - static btn_rating_star_off_normal_holo_light: any; - static btn_rating_star_off_pressed_holo_light: any; - static btn_rating_star_on_normal_holo_light: any; - static btn_rating_star_on_pressed_holo_light: any; - static dropdown_background_dark: any; - static editbox_background_focus_yellow: any; - static editbox_background_normal: any; - static ic_menu_moreoverflow_normal_holo_dark: any; - static menu_panel_holo_dark: any; - static menu_panel_holo_light: any; - static popup_bottom_bright: any; - static popup_center_bright: any; - static popup_full_bright: any; - static popup_top_bright: any; - static progressbar_indeterminate_holo1: any; - static progressbar_indeterminate_holo2: any; - static progressbar_indeterminate_holo3: any; - static progressbar_indeterminate_holo4: any; - static progressbar_indeterminate_holo5: any; - static progressbar_indeterminate_holo6: any; - static progressbar_indeterminate_holo7: any; - static progressbar_indeterminate_holo8: any; - static rate_star_big_half_holo_light: any; - static rate_star_big_off_holo_light: any; - static rate_star_big_on_holo_light: any; - static scrubber_control_disabled_holo: any; - static scrubber_control_focused_holo: any; - static scrubber_control_normal_holo: any; - static scrubber_control_pressed_holo: any; - static spinner_76_inner_holo: any; - static spinner_76_outer_holo: any; + static readonly actionbar_ic_back_white: any; + static readonly btn_check_off_disabled_focused_holo_light: any; + static readonly btn_check_off_disabled_holo_light: any; + static readonly btn_check_off_focused_holo_light: any; + static readonly btn_check_off_holo_light: any; + static readonly btn_check_off_pressed_holo_light: any; + static readonly btn_check_on_disabled_focused_holo_light: any; + static readonly btn_check_on_disabled_holo_light: any; + static readonly btn_check_on_focused_holo_light: any; + static readonly btn_check_on_holo_light: any; + static readonly btn_check_on_pressed_holo_light: any; + static readonly btn_default_disabled_focused_holo_light: any; + static readonly btn_default_disabled_holo_light: any; + static readonly btn_default_focused_holo_light: any; + static readonly btn_default_normal_holo_light: any; + static readonly btn_default_pressed_holo_light: any; + static readonly btn_radio_off_disabled_focused_holo_light: any; + static readonly btn_radio_off_disabled_holo_light: any; + static readonly btn_radio_off_focused_holo_light: any; + static readonly btn_radio_off_holo_light: any; + static readonly btn_radio_off_pressed_holo_light: any; + static readonly btn_radio_on_disabled_focused_holo_light: any; + static readonly btn_radio_on_disabled_holo_light: any; + static readonly btn_radio_on_focused_holo_light: any; + static readonly btn_radio_on_holo_light: any; + static readonly btn_radio_on_pressed_holo_light: any; + static readonly btn_rating_star_off_normal_holo_light: any; + static readonly btn_rating_star_off_pressed_holo_light: any; + static readonly btn_rating_star_on_normal_holo_light: any; + static readonly btn_rating_star_on_pressed_holo_light: any; + static readonly dropdown_background_dark: any; + static readonly editbox_background_focus_yellow: any; + static readonly editbox_background_normal: any; + static readonly ic_menu_moreoverflow_normal_holo_dark: any; + static readonly menu_panel_holo_dark: any; + static readonly menu_panel_holo_light: any; + static readonly popup_bottom_bright: any; + static readonly popup_center_bright: any; + static readonly popup_full_bright: any; + static readonly popup_top_bright: any; + static readonly progressbar_indeterminate_holo1: any; + static readonly progressbar_indeterminate_holo2: any; + static readonly progressbar_indeterminate_holo3: any; + static readonly progressbar_indeterminate_holo4: any; + static readonly progressbar_indeterminate_holo5: any; + static readonly progressbar_indeterminate_holo6: any; + static readonly progressbar_indeterminate_holo7: any; + static readonly progressbar_indeterminate_holo8: any; + static readonly rate_star_big_half_holo_light: any; + static readonly rate_star_big_off_holo_light: any; + static readonly rate_star_big_on_holo_light: any; + static readonly scrubber_control_disabled_holo: any; + static readonly scrubber_control_focused_holo: any; + static readonly scrubber_control_normal_holo: any; + static readonly scrubber_control_pressed_holo: any; + static readonly spinner_76_inner_holo: any; + static readonly spinner_76_outer_holo: any; } } declare module android.R { @@ -2341,78 +2351,78 @@ declare module android.R { import ChangeImageSizeDrawable = androidui.image.ChangeImageSizeDrawable; import NinePatchDrawable = androidui.image.NinePatchDrawable; class image { - static actionbar_ic_back_white: NetDrawable; - static btn_check_off_disabled_focused_holo_light: NetDrawable; - static btn_check_off_disabled_holo_light: NetDrawable; - static btn_check_off_focused_holo_light: NetDrawable; - static btn_check_off_holo_light: NetDrawable; - static btn_check_off_pressed_holo_light: NetDrawable; - static btn_check_on_disabled_focused_holo_light: NetDrawable; - static btn_check_on_disabled_holo_light: NetDrawable; - static btn_check_on_focused_holo_light: NetDrawable; - static btn_check_on_holo_light: NetDrawable; - static btn_check_on_pressed_holo_light: NetDrawable; - static btn_default_disabled_focused_holo_light: NinePatchDrawable; - static btn_default_disabled_holo_light: NinePatchDrawable; - static btn_default_focused_holo_light: NinePatchDrawable; - static btn_default_normal_holo_light: NinePatchDrawable; - static btn_default_pressed_holo_light: NinePatchDrawable; - static btn_radio_off_disabled_focused_holo_light: NetDrawable; - static btn_radio_off_disabled_holo_light: NetDrawable; - static btn_radio_off_focused_holo_light: NetDrawable; - static btn_radio_off_holo_light: NetDrawable; - static btn_radio_off_pressed_holo_light: NetDrawable; - static btn_radio_on_disabled_focused_holo_light: NetDrawable; - static btn_radio_on_disabled_holo_light: NetDrawable; - static btn_radio_on_focused_holo_light: NetDrawable; - static btn_radio_on_holo_light: NetDrawable; - static btn_radio_on_pressed_holo_light: NetDrawable; - static btn_rating_star_off_normal_holo_light: NetDrawable; - static btn_rating_star_off_pressed_holo_light: NetDrawable; - static btn_rating_star_on_normal_holo_light: NetDrawable; - static btn_rating_star_on_pressed_holo_light: NetDrawable; - static dropdown_background_dark: NinePatchDrawable; - static editbox_background_focus_yellow: NinePatchDrawable; - static editbox_background_normal: NinePatchDrawable; - static ic_menu_moreoverflow_normal_holo_dark: NetDrawable; - static menu_panel_holo_dark: NinePatchDrawable; - static menu_panel_holo_light: NinePatchDrawable; - static popup_bottom_bright: NinePatchDrawable; - static popup_center_bright: NinePatchDrawable; - static popup_full_bright: NinePatchDrawable; - static popup_top_bright: NinePatchDrawable; - static progressbar_indeterminate_holo1: NetDrawable; - static progressbar_indeterminate_holo2: NetDrawable; - static progressbar_indeterminate_holo3: NetDrawable; - static progressbar_indeterminate_holo4: NetDrawable; - static progressbar_indeterminate_holo5: NetDrawable; - static progressbar_indeterminate_holo6: NetDrawable; - static progressbar_indeterminate_holo7: NetDrawable; - static progressbar_indeterminate_holo8: NetDrawable; - static rate_star_big_half_holo_light: NetDrawable; - static rate_star_big_off_holo_light: NetDrawable; - static rate_star_big_on_holo_light: NetDrawable; - static scrubber_control_disabled_holo: NetDrawable; - static scrubber_control_focused_holo: NetDrawable; - static scrubber_control_normal_holo: NetDrawable; - static scrubber_control_pressed_holo: NetDrawable; - static spinner_76_inner_holo: NetDrawable; - static spinner_76_outer_holo: NetDrawable; - static spinner_48_outer_holo: ChangeImageSizeDrawable; - static spinner_48_inner_holo: ChangeImageSizeDrawable; - static spinner_16_outer_holo: ChangeImageSizeDrawable; - static spinner_16_inner_holo: ChangeImageSizeDrawable; - static rate_star_small_off_holo_light: ChangeImageSizeDrawable; - static rate_star_small_half_holo_light: ChangeImageSizeDrawable; - static rate_star_small_on_holo_light: ChangeImageSizeDrawable; + static readonly actionbar_ic_back_white: NetDrawable; + static readonly btn_check_off_disabled_focused_holo_light: NetDrawable; + static readonly btn_check_off_disabled_holo_light: NetDrawable; + static readonly btn_check_off_focused_holo_light: NetDrawable; + static readonly btn_check_off_holo_light: NetDrawable; + static readonly btn_check_off_pressed_holo_light: NetDrawable; + static readonly btn_check_on_disabled_focused_holo_light: NetDrawable; + static readonly btn_check_on_disabled_holo_light: NetDrawable; + static readonly btn_check_on_focused_holo_light: NetDrawable; + static readonly btn_check_on_holo_light: NetDrawable; + static readonly btn_check_on_pressed_holo_light: NetDrawable; + static readonly btn_default_disabled_focused_holo_light: NinePatchDrawable; + static readonly btn_default_disabled_holo_light: NinePatchDrawable; + static readonly btn_default_focused_holo_light: NinePatchDrawable; + static readonly btn_default_normal_holo_light: NinePatchDrawable; + static readonly btn_default_pressed_holo_light: NinePatchDrawable; + static readonly btn_radio_off_disabled_focused_holo_light: NetDrawable; + static readonly btn_radio_off_disabled_holo_light: NetDrawable; + static readonly btn_radio_off_focused_holo_light: NetDrawable; + static readonly btn_radio_off_holo_light: NetDrawable; + static readonly btn_radio_off_pressed_holo_light: NetDrawable; + static readonly btn_radio_on_disabled_focused_holo_light: NetDrawable; + static readonly btn_radio_on_disabled_holo_light: NetDrawable; + static readonly btn_radio_on_focused_holo_light: NetDrawable; + static readonly btn_radio_on_holo_light: NetDrawable; + static readonly btn_radio_on_pressed_holo_light: NetDrawable; + static readonly btn_rating_star_off_normal_holo_light: NetDrawable; + static readonly btn_rating_star_off_pressed_holo_light: NetDrawable; + static readonly btn_rating_star_on_normal_holo_light: NetDrawable; + static readonly btn_rating_star_on_pressed_holo_light: NetDrawable; + static readonly dropdown_background_dark: NinePatchDrawable; + static readonly editbox_background_focus_yellow: NinePatchDrawable; + static readonly editbox_background_normal: NinePatchDrawable; + static readonly ic_menu_moreoverflow_normal_holo_dark: NetDrawable; + static readonly menu_panel_holo_dark: NinePatchDrawable; + static readonly menu_panel_holo_light: NinePatchDrawable; + static readonly popup_bottom_bright: NinePatchDrawable; + static readonly popup_center_bright: NinePatchDrawable; + static readonly popup_full_bright: NinePatchDrawable; + static readonly popup_top_bright: NinePatchDrawable; + static readonly progressbar_indeterminate_holo1: NetDrawable; + static readonly progressbar_indeterminate_holo2: NetDrawable; + static readonly progressbar_indeterminate_holo3: NetDrawable; + static readonly progressbar_indeterminate_holo4: NetDrawable; + static readonly progressbar_indeterminate_holo5: NetDrawable; + static readonly progressbar_indeterminate_holo6: NetDrawable; + static readonly progressbar_indeterminate_holo7: NetDrawable; + static readonly progressbar_indeterminate_holo8: NetDrawable; + static readonly rate_star_big_half_holo_light: NetDrawable; + static readonly rate_star_big_off_holo_light: NetDrawable; + static readonly rate_star_big_on_holo_light: NetDrawable; + static readonly scrubber_control_disabled_holo: NetDrawable; + static readonly scrubber_control_focused_holo: NetDrawable; + static readonly scrubber_control_normal_holo: NetDrawable; + static readonly scrubber_control_pressed_holo: NetDrawable; + static readonly spinner_76_inner_holo: NetDrawable; + static readonly spinner_76_outer_holo: NetDrawable; + static readonly spinner_48_outer_holo: ChangeImageSizeDrawable; + static readonly spinner_48_inner_holo: ChangeImageSizeDrawable; + static readonly spinner_16_outer_holo: ChangeImageSizeDrawable; + static readonly spinner_16_inner_holo: ChangeImageSizeDrawable; + static readonly rate_star_small_off_holo_light: ChangeImageSizeDrawable; + static readonly rate_star_small_half_holo_light: ChangeImageSizeDrawable; + static readonly rate_star_small_on_holo_light: ChangeImageSizeDrawable; } } declare module android.R { import ColorStateList = android.content.res.ColorStateList; class color { - static textView_textColor: ColorStateList; - static primary_text_light_disable_only: ColorStateList; - static primary_text_dark_disable_only: ColorStateList; + static readonly textView_textColor: ColorStateList; + static readonly primary_text_light_disable_only: ColorStateList; + static readonly primary_text_dark_disable_only: ColorStateList; static white: number; static black: number; static transparent: number; @@ -2629,270 +2639,34 @@ declare module android.view.animation { } } declare module android.R { - import Drawable = android.graphics.drawable.Drawable; - import ColorDrawable = android.graphics.drawable.ColorDrawable; - import StateListDrawable = android.graphics.drawable.StateListDrawable; class attr { - static _viewStyle: any; - static viewStyle: any; - static textViewStyle: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - }; - static buttonStyle: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: Drawable; - focusable: boolean; - clickable: boolean; - minHeight: string; - minWidth: string; - textSize: string; - gravity: number; - }; - static editTextStyle: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: Drawable; - focusable: boolean; - focusableInTouchMode: boolean; - clickable: boolean; - textSize: string; - gravity: number; - }; - static imageButtonStyle: { - background: Drawable; - focusable: boolean; - clickable: boolean; - gravity: number; - }; - static checkboxStyle: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: Drawable; - focusable: boolean; - clickable: boolean; - minHeight: string; - minWidth: string; - textSize: string; - gravity: number; - } & { - background: any; - button: Drawable; - }; - static radiobuttonStyle: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: Drawable; - focusable: boolean; - clickable: boolean; - minHeight: string; - minWidth: string; - textSize: string; - gravity: number; - } & { - background: any; - button: Drawable; - }; - static checkedTextViewStyle: { - textAlignment: string; - }; - static progressBarStyle: { - indeterminateOnly: boolean; - indeterminateDrawable: Drawable; - indeterminateBehavior: string; - indeterminateDuration: number; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - mirrorForRtl: boolean; - }; - static progressBarStyleHorizontal: { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - indeterminateBehavior: string; - indeterminateDuration: number; - minHeight: string; - maxHeight: string; - mirrorForRtl: boolean; - }; - static progressBarStyleSmall: { - indeterminateOnly: boolean; - indeterminateDrawable: Drawable; - indeterminateBehavior: string; - indeterminateDuration: number; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - mirrorForRtl: boolean; - } & { - indeterminateDrawable: Drawable; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - }; - static progressBarStyleLarge: { - indeterminateOnly: boolean; - indeterminateDrawable: Drawable; - indeterminateBehavior: string; - indeterminateDuration: number; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - mirrorForRtl: boolean; - } & { - indeterminateDrawable: Drawable; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - }; - static seekBarStyle: { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - thumb: Drawable; - thumbOffset: string; - focusable: boolean; - paddingLeft: string; - paddingRight: string; - mirrorForRtl: boolean; - }; - static ratingBarStyle: { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - numStars: string; - stepSize: string; - thumb: any; - mirrorForRtl: boolean; - }; - static ratingBarStyleIndicator: { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - numStars: string; - stepSize: string; - thumb: any; - mirrorForRtl: boolean; - } & { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - thumb: any; - isIndicator: boolean; - }; - static ratingBarStyleSmall: { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - numStars: string; - stepSize: string; - thumb: any; - mirrorForRtl: boolean; - } & { - indeterminateOnly: boolean; - progressDrawable: Drawable; - indeterminateDrawable: Drawable; - minHeight: string; - maxHeight: string; - thumb: any; - isIndicator: boolean; - }; - static gridViewStyle: { - listSelector: Drawable; - numColumns: number; - }; - static listViewStyle: { - divider: Drawable; - listSelector: Drawable; - dividerHeight: number; - }; - static expandableListViewStyle: { - divider: Drawable; - listSelector: Drawable; - dividerHeight: number; - } & { - childDivider: Drawable; - }; - static numberPickerStyle: { - orientation: string; - solidColor: string; - selectionDivider: ColorDrawable; - selectionDividerHeight: string; - selectionDividersDistance: string; - internalMinWidth: string; - internalMaxHeight: string; - virtualButtonPressedDrawable: StateListDrawable; - }; - static popupWindowStyle: { - popupBackground: androidui.image.NinePatchDrawable; - popupEnterAnimation: view.animation.Animation; - popupExitAnimation: view.animation.Animation; - }; - static listPopupWindowStyle: { - popupBackground: androidui.image.NinePatchDrawable; - popupEnterAnimation: view.animation.Animation; - popupExitAnimation: view.animation.Animation; - }; - static popupMenuStyle: { - popupBackground: androidui.image.NinePatchDrawable; - }; - static dropDownListViewStyle: { - divider: Drawable; - listSelector: Drawable; - dividerHeight: number; - }; - static spinnerStyle: { - clickable: boolean; - spinnerMode: string; - gravity: number; - disableChildrenWhenDisabled: boolean; - background: Drawable; - popupBackground: androidui.image.NinePatchDrawable; - dropDownVerticalOffset: string; - dropDownHorizontalOffset: string; - dropDownWidth: number; - }; - static actionBarStyle: { - background: ColorDrawable; - }; - } - module attr { - interface popupWindowStyleType { - popupBackground?: Drawable; - popupEnterAnimation?: android.view.animation.Animation; - popupExitAnimation?: android.view.animation.Animation; - } + static textViewStyle: Map; + static buttonStyle: Map; + static editTextStyle: Map; + static imageButtonStyle: Map; + static checkboxStyle: Map; + static radiobuttonStyle: Map; + static checkedTextViewStyle: Map; + static progressBarStyle: Map; + static progressBarStyleHorizontal: Map; + static progressBarStyleSmall: Map; + static progressBarStyleLarge: Map; + static seekBarStyle: Map; + static ratingBarStyle: Map; + static ratingBarStyleIndicator: Map; + static ratingBarStyleSmall: Map; + static absListViewStyle: Map; + static gridViewStyle: Map; + static listViewStyle: Map; + static expandableListViewStyle: Map; + static numberPickerStyle: Map; + static popupWindowStyle: Map; + static listPopupWindowStyle: Map; + static popupMenuStyle: Map; + static dropDownListViewStyle: Map; + static spinnerStyle: Map; + static actionBarStyle: Map; + static scrollViewStyle: Map; } } declare module android.view { @@ -2911,8 +2685,9 @@ declare module android.view { import Resources = android.content.res.Resources; import AttrBinder = androidui.attr.AttrBinder; import KeyEvent = android.view.KeyEvent; - import Animation = animation.Animation; - import Transformation = animation.Transformation; + import Animation = android.view.animation.Animation; + import Transformation = android.view.animation.Transformation; + import TypedArray = android.content.res.TypedArray; class View extends JavaObject implements Drawable.Callback, KeyEvent.Callback { static DBG: boolean; static VIEW_LOG_TAG: string; @@ -3025,7 +2800,6 @@ declare module android.view { static VIEW_STATE_SELECTED: number; static VIEW_STATE_FOCUSED: number; static VIEW_STATE_ENABLED: number; - static VIEW_STATE_DISABLE: number; static VIEW_STATE_PRESSED: number; static VIEW_STATE_ACTIVATED: number; static VIEW_STATE_HOVERED: number; @@ -3070,7 +2844,7 @@ declare module android.view { protected mPrivateFlags: number; private mPrivateFlags2; private mPrivateFlags3; - private mContext; + protected mContext: Context; protected mCurrentAnimation: Animation; private mOldWidthMeasureSpec; private mOldHeightMeasureSpec; @@ -3130,18 +2904,17 @@ declare module android.view { private _mScrollY; mScrollX: number; mScrollY: number; - private mPaddingLeft; - private mPaddingRight; - private mPaddingTop; - private mPaddingBottom; + protected mPaddingLeft: number; + protected mPaddingRight: number; + protected mPaddingTop: number; + protected mPaddingBottom: number; private mCornerRadiusTopLeft; private mCornerRadiusTopRight; private mCornerRadiusBottomRight; private mCornerRadiusBottomLeft; private mShadowPaint; private mShadowDrawable; - constructor(context?: Context, bindElement?: HTMLElement, defStyle?: any); - protected initBindAttr(): void; + constructor(context: Context, bindElement?: HTMLElement, defStyleAttr?: Map); getContext(): Context; getWidth(): number; getHeight(): number; @@ -3154,7 +2927,6 @@ declare module android.view { setPaddingRight(right: number): void; setPaddingBottom(bottom: number): void; setPadding(left: number, top: number, right: number, bottom: number): void; - private _setPaddingWithUnit(left, top, right, bottom); resolvePadding(): void; setScrollX(value: number): void; setScrollY(value: number): void; @@ -3168,6 +2940,10 @@ declare module android.view { private updateMatrix(); getRotation(): number; setRotation(rotation: number): void; + getRotationY(): number; + setRotationY(rotationY: number): void; + getRotationX(): number; + setRotationX(rotationX: number): void; getScaleX(): number; setScaleX(scaleX: number): void; getScaleY(): number; @@ -3302,6 +3078,7 @@ declare module android.view { removeOnLayoutChangeListener(listener: View.OnLayoutChangeListener): void; addOnAttachStateChangeListener(listener: View.OnAttachStateChangeListener): void; removeOnAttachStateChangeListener(listener: View.OnAttachStateChangeListener): void; + private setOnClickListenerByAttrValueString(onClickAttrString); setOnClickListener(l: View.OnClickListener | ((v: View) => void)): void; hasOnClickListeners(): boolean; setOnLongClickListener(l: View.OnLongClickListener | ((v: View) => boolean)): void; @@ -3473,7 +3250,7 @@ declare module android.view { getHorizontalFadingEdgeLength(): number; getVerticalScrollbarWidth(): number; getHorizontalScrollbarHeight(): number; - initializeScrollbars(a?: any): void; + initializeScrollbars(a?: TypedArray): void; initScrollCache(): void; private getScrollCache(); isHorizontalScrollBarEnabled(): boolean; @@ -3534,11 +3311,13 @@ declare module android.view { bindElement: HTMLElement; private _AttrObserver; private _stateAttrList; - protected _attrBinder: AttrBinder; - private static ViewClassAttrBinder; + private _attrBinder; + private static ViewClassAttrBinderClazzMap; static AndroidViewProperty: string; - private _AttrObserverCallBack(arr, observer); + private static _AttrObserverCallBack(arr, observer); protected initBindElement(bindElement?: HTMLElement): void; + protected initBindAttr(): void; + protected createClassAttrBinder(): AttrBinder.ClassBinderMap; private _syncToElementLock; private _syncToElementImmediatelyLock; private _syncToElementRun; @@ -3556,22 +3335,20 @@ declare module android.view { syncVisibleToElement(): void; protected dependOnDebugLayout(): boolean; private _initAttrObserver(); - private _fireInitedAttributeChange(); private _fireStateChangeToAttribute(oldState, newState); private _getBinderAttrValue(key); private onBindElementAttributeChanged(attributeName, oldVal, newVal); - applyDefaultAttributes(attrs: any): void; tagName(): string; } module View { class TransformationInfo { - private mMatrix; + mMatrix: Matrix; private mInverseMatrix; mMatrixDirty: boolean; - private mInverseMatrixDirty; - private mMatrixIsIdentity; - private mPrevWidth; - private mPrevHeight; + mInverseMatrixDirty: boolean; + mMatrixIsIdentity: boolean; + mPrevWidth: number; + mPrevHeight: number; mRotation: number; mTranslationX: number; mTranslationY: number; @@ -3907,8 +3684,9 @@ declare module android.view { import RectF = android.graphics.RectF; import Context = android.content.Context; import ArrayList = java.util.ArrayList; - import Animation = animation.Animation; - import Transformation = animation.Transformation; + import Animation = android.view.animation.Animation; + import Transformation = android.view.animation.Transformation; + import AttrBinder = androidui.attr.AttrBinder; abstract class ViewGroup extends View implements ViewParent { static FLAG_CLIP_CHILDREN: number; static FLAG_CLIP_TO_PADDING: number; @@ -3957,14 +3735,15 @@ declare module android.view { mGroupFlags: number; mLayoutMode: number; mChildren: Array; - mChildrenCount: number; + readonly mChildrenCount: number; mSuppressLayout: boolean; private mLayoutCalledWhileSuppressed; private mChildCountWithTransientState; private static ViewGroupClassAttrBind; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); - protected initBindAttr(): void; + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); private initViewGroup(); + private initFromAttributes(context, attrs, defStyle?); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; getDescendantFocusability(): number; setDescendantFocusability(focusability: number): void; handleFocusGainInternal(direction: number, previouslyFocusedRect: Rect): void; @@ -4058,6 +3837,7 @@ declare module android.view { isChildrenDrawingOrderEnabled(): boolean; setChildrenDrawingOrderEnabled(enabled: boolean): void; getChildDrawingOrder(childCount: number, i: number): number; + generateLayoutParamsFromAttr(attrs: HTMLElement): ViewGroup.LayoutParams; protected generateLayoutParams(p: ViewGroup.LayoutParams): ViewGroup.LayoutParams; protected generateDefaultLayoutParams(): ViewGroup.LayoutParams; measureChildren(widthMeasureSpec: number, heightMeasureSpec: number): void; @@ -4114,46 +3894,37 @@ declare module android.view { onSetLayoutParams(child: View, layoutParams: ViewGroup.LayoutParams): void; } module ViewGroup { - class LayoutParams { + class LayoutParams extends java.lang.JavaObject { + private static ClassAttrBinderClazzMap; static FILL_PARENT: number; static MATCH_PARENT: number; static WRAP_CONTENT: number; - private _width; - private _widthOrig; - private _height; - private _heightOrig; width: number; height: number; - _measuringParentWidthMeasureSpec: number; - _measuringParentHeightMeasureSpec: number; - _measuringMeasureSpec: android.util.DisplayMetrics; - _attrBinder: androidui.attr.AttrBinder; - private static ViewGroupParamClassAttrBind; - constructor(); - constructor(src: LayoutParams); + private _attrBinder; + constructor(context: Context, attrs: HTMLElement); constructor(width: number, height: number); + constructor(src: LayoutParams); constructor(...args: any[]); - parseAttributeFrom(node: Node, context: Context): void; + protected setBaseAttributes(a: android.content.res.TypedArray, widthAttr: string, heightAttr: string): void; + getAttrBinder(): AttrBinder; + private initBindAttr(); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; } class MarginLayoutParams extends LayoutParams { - private _leftMargin; - private _topMargin; - private _rightMargin; - private _bottomMargin; - private _leftMarginOrig; - private _topMarginOrig; - private _rightMarginOrig; - private _bottomMarginOrig; static DEFAULT_MARGIN_RELATIVE: number; - private static MarginLayoutParamsClassAttrBind; + static DEFAULT_MARGIN_RESOLVED: number; + static UNDEFINED_MARGIN: number; leftMargin: number; topMargin: number; rightMargin: number; bottomMargin: number; - constructor(); + constructor(context: Context, attrs: HTMLElement); + constructor(src: MarginLayoutParams); constructor(src: LayoutParams); constructor(width: number, height: number); constructor(...args: any[]); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setMargins(left: number, top: number, right: number, bottom: number): void; setLayoutDirection(layoutDirection: number): void; getLayoutDirection(): number; @@ -4196,6 +3967,7 @@ declare module android.widget { import ViewGroup = android.view.ViewGroup; import Drawable = android.graphics.drawable.Drawable; import Canvas = android.graphics.Canvas; + import Context = android.content.Context; class FrameLayout extends ViewGroup { static DEFAULT_CHILD_GRAVITY: number; mMeasureAllChildren: boolean; @@ -4210,7 +3982,8 @@ declare module android.widget { mForegroundInPadding: boolean; mForegroundBoundsChanged: boolean; private mMatchParentChildren; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; getForegroundGravity(): number; setForegroundGravity(foregroundGravity: number): void; protected verifyDrawable(who: Drawable): boolean; @@ -4230,6 +4003,7 @@ declare module android.widget { draw(canvas: Canvas): void; setMeasureAllChildren(measureAll: boolean): void; getMeasureAllChildren(): boolean; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; shouldDelayChildPressedState(): boolean; protected checkLayoutParams(p: ViewGroup.LayoutParams): boolean; protected generateLayoutParams(p: ViewGroup.LayoutParams): FrameLayout.LayoutParams; @@ -4237,9 +4011,11 @@ declare module android.widget { module FrameLayout { class LayoutParams extends ViewGroup.MarginLayoutParams { gravity: number; + constructor(context: Context, attrs: HTMLElement); constructor(); constructor(source: ViewGroup.LayoutParams); constructor(width: number, height: number, gravity?: number); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; } } } @@ -4296,8 +4072,7 @@ declare module android.text.style { abstract class CharacterStyle { static type: symbol; mType: symbol; - abstract: any; - updateDrawState(tp: TextPaint): void; + abstract updateDrawState(tp: TextPaint): void; static wrap(cs: CharacterStyle): CharacterStyle; getUnderlying(): CharacterStyle; } @@ -4798,6 +4573,8 @@ declare module android.view { dispatchKeyEvent(event: android.view.KeyEvent): boolean; protected isTransformedTouchPointInView(x: number, y: number, child: android.view.View, outLocalPoint: android.graphics.Point): boolean; onChildVisibilityChanged(child: android.view.View, oldVisibility: number, newVisibility: number): void; + protected onLayout(changed: boolean, left: number, top: number, right: number, bottom: number): void; + layoutChildren(left: number, top: number, right: number, bottom: number, forceLeftGravity: boolean): void; tagName(): string; } class LayoutParams extends android.widget.FrameLayout.LayoutParams { @@ -4852,10 +4629,6 @@ declare module android.view { static ALPHA_CHANGED: number; copyFrom(o: LayoutParams): number; private mTitle; - leftMargin: number; - topMargin: number; - rightMargin: number; - bottomMargin: number; private isFocusable(); private isTouchable(); private isTouchModal(); @@ -5044,26 +4817,26 @@ declare module android.R { declare module android.R { import Animation = android.view.animation.Animation; class anim { - static activity_close_enter: Animation; - static activity_close_exit: Animation; - static activity_open_enter: Animation; - static activity_open_exit: Animation; - static activity_close_enter_ios: Animation; - static activity_close_exit_ios: Animation; - static activity_open_enter_ios: Animation; - static activity_open_exit_ios: Animation; - static dialog_enter: Animation; - static dialog_exit: Animation; - static fade_in: Animation; - static fade_out: Animation; - static toast_enter: Animation; - static toast_exit: Animation; - static grow_fade_in: Animation; - static grow_fade_in_center: Animation; - static grow_fade_in_from_bottom: Animation; - static shrink_fade_out: Animation; - static shrink_fade_out_center: Animation; - static shrink_fade_out_from_bottom: Animation; + static readonly activity_close_enter: Animation; + static readonly activity_close_exit: Animation; + static readonly activity_open_enter: Animation; + static readonly activity_open_exit: Animation; + static readonly activity_close_enter_ios: Animation; + static readonly activity_close_exit_ios: Animation; + static readonly activity_open_enter_ios: Animation; + static readonly activity_open_exit_ios: Animation; + static readonly dialog_enter: Animation; + static readonly dialog_exit: Animation; + static readonly fade_in: Animation; + static readonly fade_out: Animation; + static readonly toast_enter: Animation; + static readonly toast_exit: Animation; + static readonly grow_fade_in: Animation; + static readonly grow_fade_in_center: Animation; + static readonly grow_fade_in_from_bottom: Animation; + static readonly shrink_fade_out: Animation; + static readonly shrink_fade_out_center: Animation; + static readonly shrink_fade_out_from_bottom: Animation; } } declare module android.view { @@ -5257,7 +5030,7 @@ declare module androidui { static BindToElementName: string; androidUIElement: AndroidUIElement; private _canvas; - windowManager: android.view.WindowManager; + readonly windowManager: android.view.WindowManager; private mActivityThread; private _viewRootImpl; private mApplication; @@ -5267,7 +5040,7 @@ declare module androidui { private showDebugLayoutDefault; private _windowBound; private tempRect; - windowBound: android.graphics.Rect; + readonly windowBound: android.graphics.Rect; private touchEvent; private ketEvent; constructor(androidUIElement: AndroidUIElement); @@ -5626,136 +5399,12 @@ declare module android.view { } } } -declare module androidui.util { - class NumberChecker { - static warnNotNumber(...n: number[]): boolean; - static assetNotNumber(...ns: number[]): void; - static checkIsNumber(...ns: number[]): boolean; - } -} -declare module android.widget { - import Interpolator = android.view.animation.Interpolator; - class OverScroller { - private mMode; - private mScrollerX; - private mScrollerY; - private mInterpolator; - private mFlywheel; - static DEFAULT_DURATION: number; - static SCROLL_MODE: number; - static FLING_MODE: number; - constructor(interpolator?: Interpolator, flywheel?: boolean); - setInterpolator(interpolator: Interpolator): void; - setFriction(friction: number): void; - isFinished(): boolean; - forceFinished(finished: boolean): void; - getCurrX(): number; - getCurrY(): number; - getCurrVelocity(): number; - getStartX(): number; - getStartY(): number; - getFinalX(): number; - getFinalY(): number; - getDuration(): number; - computeScrollOffset(): boolean; - startScroll(startX: number, startY: number, dx: number, dy: number, duration?: number): void; - springBack(startX: number, startY: number, minX: number, maxX: number, minY: number, maxY: number): boolean; - fling(startX: number, startY: number, velocityX: number, velocityY: number, minX: number, maxX: number, minY: number, maxY: number, overX?: number, overY?: number): void; - notifyHorizontalEdgeReached(startX: number, finalX: number, overX: number): void; - notifyVerticalEdgeReached(startY: number, finalY: number, overY: number): void; - isOverScrolled(): boolean; - abortAnimation(): void; - timePassed(): number; - isScrollingInDirection(xvel: number, yvel: number): boolean; - } -} -declare module android.widget { - import View = android.view.View; - import MotionEvent = android.view.MotionEvent; - import Rect = android.graphics.Rect; - import KeyEvent = android.view.KeyEvent; - class ScrollView extends FrameLayout { - static ANIMATED_SCROLL_GAP: number; - static MAX_SCROLL_FACTOR: number; - private static TAG; - private static INVALID_POINTER; - private mLastScroll; - private mTempRect; - private mScroller; - private mLastMotionY; - private mIsLayoutDirty; - private mChildToScrollTo; - private mIsBeingDragged; - private mVelocityTracker; - private mFillViewport; - private mSmoothScrollingEnabled; - private mMinimumVelocity; - private mMaximumVelocity; - private mOverscrollDistance; - private _mOverflingDistance; - private mOverflingDistance; - private mActivePointerId; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); - shouldDelayChildPressedState(): boolean; - getMaxScrollAmount(): number; - private initScrollView(); - addView(...args: any[]): any; - private canScroll(); - isFillViewport(): boolean; - setFillViewport(fillViewport: boolean): void; - isSmoothScrollingEnabled(): boolean; - setSmoothScrollingEnabled(smoothScrollingEnabled: boolean): void; - protected onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void; - dispatchKeyEvent(event: KeyEvent): boolean; - executeKeyEvent(event: KeyEvent): boolean; - private inChild(x, y); - private initOrResetVelocityTracker(); - private initVelocityTrackerIfNotExists(); - private recycleVelocityTracker(); - requestDisallowInterceptTouchEvent(disallowIntercept: boolean): void; - onInterceptTouchEvent(ev: MotionEvent): boolean; - onTouchEvent(ev: MotionEvent): boolean; - private onSecondaryPointerUp(ev); - onGenericMotionEvent(event: MotionEvent): boolean; - protected onOverScrolled(scrollX: number, scrollY: number, clampedX: boolean, clampedY: boolean): void; - private getScrollRange(); - private findFocusableViewInBounds(topFocus, top, bottom); - pageScroll(direction: number): boolean; - fullScroll(direction: number): boolean; - private scrollAndFocus(direction, top, bottom); - arrowScroll(direction: number): boolean; - private isOffScreen(descendant); - private isWithinDeltaOfScreen(descendant, delta, height); - private doScrollY(delta); - smoothScrollBy(dx: number, dy: number): void; - smoothScrollTo(x: number, y: number): void; - protected computeVerticalScrollRange(): number; - protected computeVerticalScrollOffset(): number; - protected measureChild(child: View, parentWidthMeasureSpec: number, parentHeightMeasureSpec: number): void; - protected measureChildWithMargins(child: View, parentWidthMeasureSpec: number, widthUsed: number, parentHeightMeasureSpec: number, heightUsed: number): void; - computeScroll(): void; - private scrollToChild(child); - private scrollToChildRect(rect, immediate); - computeScrollDeltaToGetChildRectOnScreen(rect: Rect): number; - requestChildFocus(child: View, focused: View): void; - protected onRequestFocusInDescendants(direction: number, previouslyFocusedRect: Rect): boolean; - requestChildRectangleOnScreen(child: View, rectangle: Rect, immediate: boolean): boolean; - requestLayout(): void; - protected onLayout(changed: boolean, l: number, t: number, r: number, b: number): void; - protected onSizeChanged(w: number, h: number, oldw: number, oldh: number): void; - private static isViewDescendantOf(child, parent); - fling(velocityY: number): void; - private endDrag(); - scrollTo(x: number, y: number): void; - private static clamp(n, my, child); - canScrollVertically(direction: number): boolean; - } -} declare module android.widget { import View = android.view.View; import ViewGroup = android.view.ViewGroup; import Drawable = android.graphics.drawable.Drawable; import Canvas = android.graphics.Canvas; + import Context = android.content.Context; class LinearLayout extends ViewGroup { static HORIZONTAL: number; static VERTICAL: number; @@ -5783,7 +5432,8 @@ declare module android.widget { private mDividerHeight; private mShowDividers; private mDividerPadding; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setShowDividers(showDividers: number): void; shouldDelayChildPressedState(): boolean; getShowDividers(): number; @@ -5828,6 +5478,7 @@ declare module android.widget { setGravity(gravity: number): void; setHorizontalGravity(horizontalGravity: number): void; setVerticalGravity(verticalGravity: number): void; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; protected generateDefaultLayoutParams(): android.view.ViewGroup.LayoutParams; protected generateLayoutParams(p: android.view.ViewGroup.LayoutParams): android.view.ViewGroup.LayoutParams; protected checkLayoutParams(p: android.view.ViewGroup.LayoutParams): boolean; @@ -5836,61 +5487,14 @@ declare module android.widget { class LayoutParams extends android.view.ViewGroup.MarginLayoutParams { weight: number; gravity: number; - constructor(); + constructor(context: Context, attrs: HTMLElement); + constructor(width: number, height: number); constructor(source: ViewGroup.LayoutParams); constructor(width: number, height: number, weight?: number); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; } } } -declare module android.util { - class ArrayMap { - private map; - constructor(capacity?: number); - clear(): void; - erase(): void; - ensureCapacity(minimumCapacity: number): void; - containsKey(key: K): boolean; - indexOfValue(value: V): number; - containsValue(value: V): boolean; - get(key: K): V; - keyAt(index: number): K; - valueAt(index: number): V; - setValueAt(index: number, value: V): V; - isEmpty(): boolean; - put(key: K, value: V): V; - append(key: K, value: V): void; - remove(key: K): V; - removeAt(index: number): V; - keySet(): Set; - size(): number; - } -} -declare module java.util { - class ArrayDeque extends ArrayList { - addFirst(e: E): void; - addLast(e: E): void; - offerFirst(e: E): boolean; - offerLast(e: E): boolean; - removeFirst(): E; - removeLast(): E; - pollFirst(): E; - pollLast(): E; - getFirst(): E; - getLast(): E; - peekFirst(): E; - peekLast(): E; - removeFirstOccurrence(o: any): boolean; - removeLastOccurrence(o: any): boolean; - offer(e: E): boolean; - remove(): E; - poll(): E; - element(): E; - peek(): E; - push(e: E): void; - pop(): E; - private delete(i); - } -} declare module android.util { class MathUtils { private static DEG_TO_RAD; @@ -6514,6 +6118,49 @@ declare module android.text.method { private static sInstance; } } +declare module androidui.util { + class NumberChecker { + static warnNotNumber(...n: number[]): boolean; + static assetNotNumber(...ns: number[]): void; + static checkIsNumber(...ns: number[]): boolean; + } +} +declare module android.widget { + import Interpolator = android.view.animation.Interpolator; + class OverScroller { + private mMode; + private mScrollerX; + private mScrollerY; + private mInterpolator; + private mFlywheel; + static DEFAULT_DURATION: number; + static SCROLL_MODE: number; + static FLING_MODE: number; + constructor(interpolator?: Interpolator, flywheel?: boolean); + setInterpolator(interpolator: Interpolator): void; + setFriction(friction: number): void; + isFinished(): boolean; + forceFinished(finished: boolean): void; + getCurrX(): number; + getCurrY(): number; + getCurrVelocity(): number; + getStartX(): number; + getStartY(): number; + getFinalX(): number; + getFinalY(): number; + getDuration(): number; + computeScrollOffset(): boolean; + startScroll(startX: number, startY: number, dx: number, dy: number, duration?: number): void; + springBack(startX: number, startY: number, minX: number, maxX: number, minY: number, maxY: number): boolean; + fling(startX: number, startY: number, velocityX: number, velocityY: number, minX: number, maxX: number, minY: number, maxY: number, overX?: number, overY?: number): void; + notifyHorizontalEdgeReached(startX: number, finalX: number, overX: number): void; + notifyVerticalEdgeReached(startY: number, finalY: number, overY: number): void; + isOverScrolled(): boolean; + abortAnimation(): void; + timePassed(): number; + isScrollingInDirection(xvel: number, yvel: number): boolean; + } +} declare module android.widget { import ColorStateList = android.content.res.ColorStateList; import Canvas = android.graphics.Canvas; @@ -6633,9 +6280,8 @@ declare module android.widget { mTextEditSuggestionItemLayout: number; private mEditor; protected mSkipDrawText: boolean; - private static TextViewClassAttrBind; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); - protected initBindAttr(): void; + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex); private setRelativeDrawablesIfNeeded(start, end); setEnabled(enabled: boolean): void; @@ -6711,6 +6357,8 @@ declare module android.widget { setHintTextColor(colors: ColorStateList | number): void; getHintTextColors(): ColorStateList; getCurrentHintTextColor(): number; + setLinkTextColor(colors: number | ColorStateList): void; + getLinkTextColors(): ColorStateList; setGravity(gravity: number): void; getGravity(): number; getPaintFlags(): number; @@ -7007,7 +6655,7 @@ declare module android.widget { } declare module android.widget { class Button extends TextView { - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); } } declare module android.widget { @@ -7157,8 +6805,9 @@ declare module android.widget { private mLastHandledItemCount; static sLinearInterpolator: Interpolator; private mPendingSync; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); private initAbsListView(); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setOverScrollMode(mode: number): void; setAdapter(adapter: ListAdapter): void; getCheckedItemCount(): number; @@ -7303,6 +6952,7 @@ declare module android.widget { onGlobalLayout(): void; protected generateDefaultLayoutParams(): ViewGroup.LayoutParams; protected generateLayoutParams(p: ViewGroup.LayoutParams): ViewGroup.LayoutParams; + generateLayoutParamsFromAttr(attrs: HTMLElement): ViewGroup.LayoutParams; protected checkLayoutParams(p: ViewGroup.LayoutParams): boolean; setTranscriptMode(mode: number): void; getTranscriptMode(): number; @@ -7408,7 +7058,7 @@ declare module android.widget { forceAdd: boolean; scrappedFromPosition: number; itemId: number; - constructor(); + constructor(context: android.content.Context, attrs: HTMLElement); constructor(w: number, h: number); constructor(w: number, h: number, viewType: number); constructor(source: ViewGroup.LayoutParams); @@ -7569,7 +7219,8 @@ declare module android.widget { private mDividerPaint; private mArrowScrollFocusResult; private mFocusSelector; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; getMaxScrollAmount(): number; private adjustViewsUpOrDown(); addHeaderView(v: View, data?: any, isSelectable?: boolean): void; @@ -7697,6 +7348,145 @@ declare module android.widget { } } } +declare module android.widget { + class Scroller extends OverScroller { + } +} +declare module android.widget { + import Canvas = android.graphics.Canvas; + import Rect = android.graphics.Rect; + import KeyEvent = android.view.KeyEvent; + import MotionEvent = android.view.MotionEvent; + import View = android.view.View; + import FrameLayout = android.widget.FrameLayout; + class ScrollView extends FrameLayout { + static ANIMATED_SCROLL_GAP: number; + static MAX_SCROLL_FACTOR: number; + private static TAG; + private mLastScroll; + private mTempRect; + private mScroller; + private mLastMotionY; + private mIsLayoutDirty; + private mChildToScrollTo; + private mIsBeingDragged; + private mVelocityTracker; + private mFillViewport; + private mSmoothScrollingEnabled; + private mMinimumVelocity; + private mMaximumVelocity; + private mOverscrollDistance; + private mOverflingDistance; + private mActivePointerId; + private static INVALID_POINTER; + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; + shouldDelayChildPressedState(): boolean; + protected getTopFadingEdgeStrength(): number; + protected getBottomFadingEdgeStrength(): number; + getMaxScrollAmount(): number; + private initScrollView(); + addView(...args: any[]): void; + private canScroll(); + isFillViewport(): boolean; + setFillViewport(fillViewport: boolean): void; + isSmoothScrollingEnabled(): boolean; + setSmoothScrollingEnabled(smoothScrollingEnabled: boolean): void; + protected onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void; + dispatchKeyEvent(event: KeyEvent): boolean; + executeKeyEvent(event: KeyEvent): boolean; + private inChild(x, y); + private initOrResetVelocityTracker(); + private initVelocityTrackerIfNotExists(); + private recycleVelocityTracker(); + requestDisallowInterceptTouchEvent(disallowIntercept: boolean): void; + onInterceptTouchEvent(ev: MotionEvent): boolean; + onTouchEvent(ev: MotionEvent): boolean; + private onSecondaryPointerUp(ev); + onGenericMotionEvent(event: MotionEvent): boolean; + protected onOverScrolled(scrollX: number, scrollY: number, clampedX: boolean, clampedY: boolean): void; + private getScrollRange(); + private findFocusableViewInBounds(topFocus, top, bottom); + pageScroll(direction: number): boolean; + fullScroll(direction: number): boolean; + private scrollAndFocus(direction, top, bottom); + arrowScroll(direction: number): boolean; + private isOffScreen(descendant); + private isWithinDeltaOfScreen(descendant, delta, height); + private doScrollY(delta); + smoothScrollBy(dx: number, dy: number): void; + smoothScrollTo(x: number, y: number): void; + protected computeVerticalScrollRange(): number; + protected computeVerticalScrollOffset(): number; + protected measureChild(child: View, parentWidthMeasureSpec: number, parentHeightMeasureSpec: number): void; + protected measureChildWithMargins(child: View, parentWidthMeasureSpec: number, widthUsed: number, parentHeightMeasureSpec: number, heightUsed: number): void; + computeScroll(): void; + private scrollToChild(child); + private scrollToChildRect(rect, immediate); + protected computeScrollDeltaToGetChildRectOnScreen(rect: Rect): number; + requestChildFocus(child: View, focused: View): void; + protected onRequestFocusInDescendants(direction: number, previouslyFocusedRect: Rect): boolean; + requestChildRectangleOnScreen(child: View, rectangle: Rect, immediate: boolean): boolean; + requestLayout(): void; + protected onLayout(changed: boolean, l: number, t: number, r: number, b: number): void; + protected onSizeChanged(w: number, h: number, oldw: number, oldh: number): void; + private static isViewDescendantOf(child, parent); + fling(velocityY: number): void; + private endDrag(); + scrollTo(x: number, y: number): void; + draw(canvas: Canvas): void; + private static clamp(n, my, child); + } +} +declare module android.util { + class ArrayMap { + private map; + constructor(capacity?: number); + clear(): void; + erase(): void; + ensureCapacity(minimumCapacity: number): void; + containsKey(key: K): boolean; + indexOfValue(value: V): number; + containsValue(value: V): boolean; + get(key: K): V; + keyAt(index: number): K; + valueAt(index: number): V; + setValueAt(index: number, value: V): V; + isEmpty(): boolean; + put(key: K, value: V): V; + append(key: K, value: V): void; + remove(key: K): V; + removeAt(index: number): V; + keySet(): Set; + size(): number; + } +} +declare module java.util { + class ArrayDeque extends ArrayList { + addFirst(e: E): void; + addLast(e: E): void; + offerFirst(e: E): boolean; + offerLast(e: E): boolean; + removeFirst(): E; + removeLast(): E; + pollFirst(): E; + pollLast(): E; + getFirst(): E; + getLast(): E; + peekFirst(): E; + peekLast(): E; + removeFirstOccurrence(o: any): boolean; + removeLastOccurrence(o: any): boolean; + offer(e: E): boolean; + remove(): E; + poll(): E; + element(): E; + peek(): E; + push(e: E): void; + pop(): E; + private delete(i); + } +} declare module android.widget { import Canvas = android.graphics.Canvas; import Rect = android.graphics.Rect; @@ -7725,7 +7515,8 @@ declare module android.widget { private mOverflingDistance; private mActivePointerId; private static INVALID_POINTER; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; protected getLeftFadingEdgeStrength(): number; protected getRightFadingEdgeStrength(): number; getMaxScrollAmount(): number; @@ -7789,8 +7580,9 @@ declare module android.widget { import SparseMap = android.util.SparseMap; import View = android.view.View; import ViewGroup = android.view.ViewGroup; + import Context = android.content.Context; class RelativeLayout extends ViewGroup { - static TRUE: number; + static TRUE: string; static LEFT_OF: number; static RIGHT_OF: number; static ABOVE: number; @@ -7813,7 +7605,7 @@ declare module android.widget { static ALIGN_END: number; static ALIGN_PARENT_START: number; static ALIGN_PARENT_END: number; - private static VERB_COUNT; + static VERB_COUNT: number; private static RULES_VERTICAL; private static RULES_HORIZONTAL; private mBaselineView; @@ -7829,7 +7621,8 @@ declare module android.widget { private mAllowBrokenMeasureSpecs; private mMeasureVerticalWithPaddingMargin; private static DEFAULT_WIDTH; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private queryCompatibilityModes(); shouldDelayChildPressedState(): boolean; setIgnoreGravity(viewId: string): void; @@ -7855,6 +7648,7 @@ declare module android.widget { private static centerHorizontal(child, params, myWidth); private static centerVertical(child, params, myHeight); protected onLayout(changed: boolean, l: number, t: number, r: number, b: number): void; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; protected generateDefaultLayoutParams(): ViewGroup.LayoutParams; protected checkLayoutParams(p: ViewGroup.LayoutParams): boolean; protected generateLayoutParams(p: ViewGroup.LayoutParams): ViewGroup.LayoutParams; @@ -7863,18 +7657,21 @@ declare module android.widget { class LayoutParams extends ViewGroup.MarginLayoutParams { private mRules; private mInitialRules; - private mLeft; - private mTop; - private mRight; - private mBottom; + mLeft: number; + mTop: number; + mRight: number; + mBottom: number; private mStart; private mEnd; private mRulesChanged; private mIsRtlCompatibilityMode; alignWithParent: boolean; + constructor(context: Context, attrs: HTMLElement); constructor(w: number, h: number); + constructor(source: RelativeLayout.LayoutParams); constructor(source: ViewGroup.LayoutParams); - constructor(...args: any[]); + constructor(source: ViewGroup.MarginLayoutParams); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; addRule(verb: number, anchor?: string): void; removeRule(verb: number): void; private hasRelativeRules(); @@ -7884,7 +7681,7 @@ declare module android.widget { } class DependencyGraph { private mNodes; - private mKeyNodes; + mKeyNodes: SparseMap; private mRoots; clear(): void; add(view: View): void; @@ -7923,6 +7720,7 @@ declare module android.widget { private mForceDisableDraw; private mMaxLength; constructor(context: Context, bindElement?: HTMLElement, defStyle?: any); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; protected initBindElement(bindElement: HTMLElement): void; protected onInputValueChange(e: any): void; private onDomTextInput(e); @@ -7950,6 +7748,7 @@ declare module android.widget { protected onLayout(changed: boolean, left: number, top: number, right: number, bottom: number): void; setGravity(gravity: number): void; setSingleLine(singleLine?: boolean): void; + _setInputType(value: string): void; setInputType(type: number): void; getInputType(): number; private syncTextBoundInfoToInputElement(); @@ -7986,9 +7785,8 @@ declare module android.widget { private mBaseline; private mBaselineAlignBottom; private mAdjustViewBoundsCompat; - private static ImageViewClassAttrBind; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); - protected initBindAttr(): void; + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private initImageView(); protected verifyDrawable(dr: Drawable): boolean; jumpDrawablesToCurrentState(): void; @@ -8052,12 +7850,7 @@ declare module android.widget { } declare module android.widget { class ImageButton extends ImageView { - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - background: graphics.drawable.Drawable; - focusable: boolean; - clickable: boolean; - gravity: number; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); } } declare module android.widget { @@ -8083,10 +7876,8 @@ declare module android.widget { private mReferenceViewInSelectedRow; private mGravity; private mTempRect; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - listSelector: graphics.drawable.Drawable; - numColumns: number; - }); + constructor(context: android.content.Context, attrs: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; getAdapter(): ListAdapter; setAdapter(adapter: ListAdapter): void; lookForSelectablePosition(position: number, lookDown: boolean): number; @@ -8237,7 +8028,8 @@ declare module android.widget { private mDecrementVirtualButtonPressed; private mPressedStateHelper; private mLastHandledDownDpadKeyCode; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; protected onLayout(changed: boolean, left: number, top: number, right: number, bottom: number): void; protected onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void; private moveToFinalScrollerPosition(scroller); @@ -8344,7 +8136,7 @@ declare module android.widget { _NumberPicker_this: NumberPicker; constructor(arg: NumberPicker); private mIncrement; - private setStep(increment); + setStep(increment: boolean): void; run(): void; } class BeginSoftInputOnLongPressCommand implements Runnable { @@ -8434,17 +8226,8 @@ declare module android.widget { private mRefreshIsPosted; mMirrorForRtl: boolean; private mRefreshData; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - indeterminateOnly: boolean; - indeterminateDrawable: Drawable; - indeterminateBehavior: string; - indeterminateDuration: number; - minWidth: string; - maxWidth: string; - minHeight: string; - maxHeight: string; - mirrorForRtl: boolean; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private tileify(drawable, clip); private tileifyIndeterminate(drawable); private initProgressBar(); @@ -8510,7 +8293,8 @@ declare module android.widget { private mOnCheckedChangeListener; private mOnCheckedChangeWidgetListener; private static CHECKED_STATE_SET; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; toggle(): void; performClick(): boolean; isChecked(): boolean; @@ -8537,45 +8321,13 @@ declare module android.widget { declare module android.widget { import CompoundButton = android.widget.CompoundButton; class CheckBox extends CompoundButton { - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: graphics.drawable.Drawable; - focusable: boolean; - clickable: boolean; - minHeight: string; - minWidth: string; - textSize: string; - gravity: number; - } & { - background: any; - button: graphics.drawable.Drawable; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); } } declare module android.widget { import CompoundButton = android.widget.CompoundButton; class RadioButton extends CompoundButton { - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - textSize: string; - layerType: string; - textColor: content.res.ColorStateList; - textColorHint: number; - } & { - background: graphics.drawable.Drawable; - focusable: boolean; - clickable: boolean; - minHeight: string; - minWidth: string; - textSize: string; - gravity: number; - } & { - background: any; - button: graphics.drawable.Drawable; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); toggle(): void; } } @@ -8590,9 +8342,8 @@ declare module android.widget { private mProtectFromCheckedChange; private mOnCheckedChangeListener; private mPassThroughListener; - private static RadioGroupClassAttrBind; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); - protected initBindAttr(): void; + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private init(); setOnHierarchyChangeListener(listener: ViewGroup.OnHierarchyChangeListener): void; protected onFinishInflate(): void; @@ -8603,11 +8354,13 @@ declare module android.widget { getCheckedRadioButtonId(): string; clearCheck(): void; setOnCheckedChangeListener(listener: RadioGroup.OnCheckedChangeListener): void; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; protected checkLayoutParams(p: ViewGroup.LayoutParams): boolean; protected generateDefaultLayoutParams(): LinearLayout.LayoutParams; } module RadioGroup { class LayoutParams extends LinearLayout.LayoutParams { + protected setBaseAttributes(a: android.content.res.TypedArray, widthAttr: string, heightAttr: string): void; } interface OnCheckedChangeListener { onCheckedChanged(group: RadioGroup, checkedId: string): void; @@ -8640,9 +8393,8 @@ declare module android.widget { private mCheckMarkWidth; private mNeedRequestlayout; private static CHECKED_STATE_SET; - constructor(context: Context, bindElement?: HTMLElement, defStyle?: { - textAlignment: string; - }); + constructor(context: Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; toggle(): void; isChecked(): boolean; setChecked(checked: boolean): void; @@ -8672,7 +8424,8 @@ declare module android.widget { private mDisabledAlpha; private mTouchDownX; private mIsDragging; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setThumb(thumb: Drawable): void; getThumb(): Drawable; getThumbOffset(): number; @@ -8702,19 +8455,7 @@ declare module android.widget { import AbsSeekBar = android.widget.AbsSeekBar; class SeekBar extends AbsSeekBar { private mOnSeekBarChangeListener; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - indeterminateOnly: boolean; - progressDrawable: graphics.drawable.Drawable; - indeterminateDrawable: graphics.drawable.Drawable; - minHeight: string; - maxHeight: string; - thumb: graphics.drawable.Drawable; - thumbOffset: string; - focusable: boolean; - paddingLeft: string; - paddingRight: string; - mirrorForRtl: boolean; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); onProgressRefresh(scale: number, fromUser: boolean): void; setOnSeekBarChangeListener(l: SeekBar.OnSeekBarChangeListener): void; onStartTrackingTouch(): void; @@ -8734,17 +8475,8 @@ declare module android.widget { private mNumStars; private mProgressOnStartTracking; private mOnRatingBarChangeListener; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - indeterminateOnly: boolean; - progressDrawable: graphics.drawable.Drawable; - indeterminateDrawable: graphics.drawable.Drawable; - minHeight: string; - maxHeight: string; - numStars: string; - stepSize: string; - thumb: any; - mirrorForRtl: boolean; - }); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setOnRatingBarChangeListener(listener: RatingBar.OnRatingBarChangeListener): void; getOnRatingBarChangeListener(): RatingBar.OnRatingBarChangeListener; setIsIndicator(isIndicator: boolean): void; @@ -8943,13 +8675,8 @@ declare module android.widget { private static CHILD_LAST_STATE_SET; private mChildDivider; private mIndicatorRect; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: { - divider: Drawable; - listSelector: Drawable; - dividerHeight: number; - } & { - childDivider: Drawable; - }); + constructor(context: android.content.Context, attrs?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private isRtlCompatibilityMode(); private hasRtlSupport(); onRtlPropertiesChanged(layoutDirection: number): void; @@ -9237,6 +8964,9 @@ declare module android.widget { private mNotifyOnChange; private mContext; private mInflater; + constructor(context: Context, resource: string); + constructor(context: Context, resource: string, textViewResourceId: string); + constructor(context: Context, resource: string, objects: T[]); constructor(context: Context, resource: string, textViewResourceId: string, objects: T[] | List); add(object: T): void; addAll(collection: List): void; @@ -9342,7 +9072,7 @@ declare module android.app { } class RecycleListView extends ListView { mRecycleOnMeasure: boolean; - constructor(context: Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: Context, bindElement?: HTMLElement, defStyle?: Map); protected recycleOnMeasure(): boolean; } class AlertParams { @@ -9475,7 +9205,8 @@ declare module android.widget { mRecycler: AbsSpinner.RecycleBin; private mDataSetObserver; private mTouchFrame; - constructor(context: Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private initAbsSpinner(); setAdapter(adapter: SpinnerAdapter): void; resetList(): void; @@ -9486,8 +9217,7 @@ declare module android.widget { recycleAllViews(): void; setSelection(position: number, animate?: boolean): void; setSelectionInt(position: number, animate: boolean): void; - abstract: any; - layoutSpinner(delta: number, animate: boolean): void; + abstract layoutSpinner(delta: number, animate: boolean): void; getSelectedView(): View; requestLayout(): void; getAdapter(): SpinnerAdapter; @@ -9506,7 +9236,6 @@ declare module android.widget { } } declare module android.widget { - import R = android.R; import Context = android.content.Context; import Drawable = android.graphics.drawable.Drawable; import KeyEvent = android.view.KeyEvent; @@ -9567,7 +9296,7 @@ declare module android.widget { private mAnchoredGravity; private mPopupViewInitialLayoutDirectionInherited; constructor(contentView: View, width?: number, height?: number, focusable?: boolean); - constructor(context: Context, styleAttr?: R.attr.popupWindowStyleType); + constructor(context: Context, styleAttr?: Map); getBackground(): Drawable; setBackgroundDrawable(background: Drawable): void; getEnterAnimation(): Animation; @@ -9642,10 +9371,6 @@ declare module android.widget { } } } -declare module android.widget { - class Scroller extends OverScroller { - } -} declare module android.widget { import DataSetObserver = android.database.DataSetObserver; import Drawable = android.graphics.drawable.Drawable; @@ -9701,7 +9426,7 @@ declare module android.widget { static INPUT_METHOD_FROM_FOCUSABLE: number; static INPUT_METHOD_NEEDED: number; static INPUT_METHOD_NOT_NEEDED: number; - constructor(context: Context, styleAttr?: android.R.attr.popupWindowStyleType); + constructor(context: Context, styleAttr?: Map); setAdapter(adapter: ListAdapter): void; setPromptPosition(position: number): void; getPromptPosition(): number; @@ -9839,9 +9564,8 @@ declare module android.widget { import ListPopupWindow = android.widget.ListPopupWindow; import SpinnerAdapter = android.widget.SpinnerAdapter; import Context = android.content.Context; - import R = android.R; class Spinner extends AbsSpinner implements OnClickListener { - private static TAG; + static TAG: string; private static MAX_ITEMS_MEASURED; static MODE_DIALOG: number; static MODE_DROPDOWN: number; @@ -9852,17 +9576,8 @@ declare module android.widget { private mGravity; private mDisableChildrenWhenDisabled; private mTempRect; - constructor(context: Context, bindElement?: HTMLElement, defStyle?: { - clickable: boolean; - spinnerMode: string; - gravity: number; - disableChildrenWhenDisabled: boolean; - background: Drawable; - popupBackground: androidui.image.NinePatchDrawable; - dropDownVerticalOffset: string; - dropDownHorizontalOffset: string; - dropDownWidth: number; - }, mode?: number); + constructor(context: Context, bindElement?: HTMLElement, defStyle?: Map, mode?: number); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; setPopupBackgroundDrawable(background: Drawable): void; getPopupBackground(): Drawable; setDropDownVerticalOffset(pixels: number): void; @@ -9946,7 +9661,7 @@ declare module android.widget { class DropdownPopup extends ListPopupWindow implements Spinner.SpinnerPopup { _Spinner_this: Spinner; private mHintText; - constructor(context: Context, defStyleRes: R.attr.popupWindowStyleType, arg: Spinner); + constructor(context: Context, defStyleRes: Map, arg: Spinner); setAdapter(adapter: ListAdapter): void; getHintText(): string; setPromptText(hintText: string): void; @@ -9959,7 +9674,7 @@ declare module androidui.widget { import View = android.view.View; class HtmlBaseView extends View { private mHtmlTouchAble; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); onTouchEvent(event: android.view.MotionEvent): boolean; setHtmlTouchAble(enable: boolean): void; isHtmlTouchAble(): boolean; @@ -9978,7 +9693,7 @@ declare module android.webkit { private iFrameElement; protected mClient: WebViewClient; private initIFrameHistoryLength; - constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); private initIFrameElement(url); private checkActivityResume(); goBack(): void; @@ -10250,7 +9965,7 @@ declare module android.support.v4.view { static SCROLL_STATE_SETTLING: number; private mEndScrollRunnable; private mScrollState; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: any); private initViewPager(); protected onDetachedFromWindow(): void; private setScrollState(newState); @@ -10339,6 +10054,7 @@ declare module android.support.v4.view { protected generateDefaultLayoutParams(): android.view.ViewGroup.LayoutParams; protected generateLayoutParams(p: android.view.ViewGroup.LayoutParams): android.view.ViewGroup.LayoutParams; protected checkLayoutParams(p: android.view.ViewGroup.LayoutParams): boolean; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; private static isImplDecor(view); static setClassImplDecor(clazz: Function): void; } @@ -10367,6 +10083,8 @@ declare module android.support.v4.view { position: number; childIndex: number; constructor(); + constructor(context: android.content.Context, attrs: HTMLElement); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; } } } @@ -10490,6 +10208,7 @@ declare module android.support.v4.widget { import View = android.view.View; import ViewGroup = android.view.ViewGroup; import ViewDragHelper = android.support.v4.widget.ViewDragHelper; + import Context = android.content.Context; class DrawerLayout extends ViewGroup { private static TAG; static STATE_IDLE: number; @@ -10500,9 +10219,9 @@ declare module android.support.v4.widget { static LOCK_MODE_LOCKED_OPEN: number; private static MIN_DRAWER_MARGIN; private static DEFAULT_SCRIM_COLOR; - private static PEEK_DELAY; + static PEEK_DELAY: number; private static MIN_FLING_VELOCITY; - private static ALLOW_EDGE_LOCK; + static ALLOW_EDGE_LOCK: boolean; private static CHILDREN_DISALLOW_INTERCEPT; private static TOUCH_SLOP_SENSITIVITY; private mMinDrawerMargin; @@ -10525,7 +10244,7 @@ declare module android.support.v4.widget { private mInitialMotionY; private mShadowLeft; private mShadowRight; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); setDrawerShadow(shadowDrawable: Drawable, gravity: number): void; setScrimColor(color: number): void; setDrawerListener(listener: DrawerLayout.DrawerListener): void; @@ -10577,6 +10296,7 @@ declare module android.support.v4.widget { protected generateDefaultLayoutParams(): ViewGroup.LayoutParams; protected generateLayoutParams(p: ViewGroup.LayoutParams): ViewGroup.LayoutParams; protected checkLayoutParams(p: ViewGroup.LayoutParams): boolean; + generateLayoutParamsFromAttr(attrs: HTMLElement): android.view.ViewGroup.LayoutParams; private hasVisibleDrawer(); private findVisibleDrawer(); cancelChildViewTouch(): void; @@ -10623,12 +10343,13 @@ declare module android.support.v4.widget { onScreen: number; isPeeking: boolean; knownOpen: boolean; - constructor(); + constructor(context: Context, attrs: HTMLElement); constructor(width: number, height: number); constructor(width: number, height: number, gravity: number); constructor(source: ViewGroup.LayoutParams); constructor(source: ViewGroup.MarginLayoutParams); constructor(source: LayoutParams); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; } } } @@ -10914,7 +10635,7 @@ declare module uk.co.senab.photoview { class PhotoView extends ImageView implements IPhotoView { private mAttacher; private mPendingScaleType; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); protected init(): void; setPhotoViewRotation(rotationDegree: number): void; setRotationTo(rotationDegree: number): void; @@ -11007,14 +10728,13 @@ declare module android.app { } declare module androidui.widget { class HtmlView extends HtmlBaseView { - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); protected onMeasure(widthMeasureSpec: any, heightMeasureSpec: any): void; setHtml(html: string): void; getHtml(): string; } } declare module androidui.widget { - import ImageView = android.widget.ImageView; class HtmlImageView extends HtmlBaseView { private mScaleType; private mHaveFrame; @@ -11026,7 +10746,8 @@ declare module androidui.widget { private mDrawableHeight; private mAdjustViewBoundsCompat; private mImgElement; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); + protected createClassAttrBinder(): androidui.attr.AttrBinder.ClassBinderMap; private initImageView(); getAdjustViewBounds(): boolean; setAdjustViewBounds(adjustViewBounds: boolean): void; @@ -11035,8 +10756,8 @@ declare module androidui.widget { getMaxHeight(): number; setMaxHeight(maxHeight: number): void; setImageURI(uri: string): void; - setScaleType(scaleType: ImageView.ScaleType): void; - getScaleType(): ImageView.ScaleType; + setScaleType(scaleType: android.widget.ImageView.ScaleType): void; + getScaleType(): android.widget.ImageView.ScaleType; protected onMeasure(widthMeasureSpec: any, heightMeasureSpec: any): void; private resolveAdjustedSize(desiredSize, maxSize, measureSpec); protected setFrame(left: number, top: number, right: number, bottom: number): boolean; @@ -11124,7 +10845,9 @@ declare module androidui.widget { static State_Footer_ReadyToLoad: number; static State_Footer_LoadFail: number; static State_Footer_NoMoreToLoad: number; - static StateChangeLimit: {}; + static StateChangeLimit: { + [x: number]: number[]; + }; private autoLoadScrollAtBottom; private headerView; private footerView; @@ -11133,7 +10856,7 @@ declare module androidui.widget { private contentOverY; private overScrollLocker; private refreshLoadListener; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); protected onViewAdded(child: View): void; private configHeaderView(); private configFooterView(); @@ -11178,13 +10901,13 @@ declare module androidui.widget { class DefaultHeaderView extends HeaderView { textView: TextView; progressBar: ProgressBar; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); onStateChange(newState: number, oldState: number): void; } class DefaultFooterView extends FooterView { textView: TextView; progressBar: ProgressBar; - constructor(context?: android.content.Context, bindElement?: HTMLElement, defStyle?: any); + constructor(context: android.content.Context, bindElement?: HTMLElement, defStyle?: Map); onStateChange(newState: number, oldState: number): void; } } diff --git a/dist/android-ui.es5.js b/dist/android-ui.es5.js index 00cedd6..ad5be46 100644 --- a/dist/android-ui.es5.js +++ b/dist/android-ui.es5.js @@ -1,6 +1,6 @@ -'use strict';var _set2=function set(object,property,value,receiver){var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent!==null){set(parent,property,value,receiver);}}else if("value" in desc&&desc.writable){desc.value=value;}else {var setter=desc.set;if(setter!==undefined){setter.call(receiver,value);}}return value;};var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol?"symbol":typeof obj;};var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally {try{if(!_n&&_i["return"])_i["return"]();}finally {if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _get2=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null){return undefined;}else {return get(parent,property,receiver);}}else if("value" in desc){return desc.value;}else {var getter=desc.get;if(getter===undefined){return undefined;}return getter.call(receiver);}};var _createClass=function(){function defineProperties(target,props){for(var i=0;i=0;}},{key:'indexOf',value:function indexOf(o){return this.array.indexOf(o);}},{key:'lastIndexOf',value:function lastIndexOf(o){return this.array.lastIndexOf(o);}},{key:'clone',value:function clone(){var _arrayList$array;var arrayList=new ArrayList();(_arrayList$array=arrayList.array).push.apply(_arrayList$array,_toConsumableArray(this.array));return arrayList;}},{key:'toArray',value:function toArray(){var a=arguments.length<=0||arguments[0]===undefined?new Array(this.size()):arguments[0];var size=this.size();for(var i=0;i=this.right||this.top>=this.bottom;}},{key:'width',value:function width(){return this.right-this.left;}},{key:'height',value:function height(){return this.bottom-this.top;}},{key:'centerX',value:function centerX(){return this.left+this.right>>1;}},{key:'centerY',value:function centerY(){return this.top+this.bottom>>1;}},{key:'exactCenterX',value:function exactCenterX(){return (this.left+this.right)*0.5;}},{key:'exactCenterY',value:function exactCenterY(){return (this.top+this.bottom)*0.5;}},{key:'setEmpty',value:function setEmpty(){this.left=this.right=this.top=this.bottom=0;}},{key:'set',value:function set(){for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}if(args.length===1){var rect=args[0];var _ref=[rect.left,rect.top,rect.right,rect.bottom];this.left=_ref[0];this.top=_ref[1];this.right=_ref[2];this.bottom=_ref[3];}else {var _args$5=args[0];var left=_args$5===undefined?0:_args$5;var _args$6=args[1];var t=_args$6===undefined?0:_args$6;var _args$7=args[2];var right=_args$7===undefined?0:_args$7;var _args$8=args[3];var bottom=_args$8===undefined?0:_args$8;this.left=left||0;this.top=t||0;this.right=right||0;this.bottom=bottom||0;}}},{key:'offset',value:function offset(dx,dy){this.left+=dx;this.top+=dy;this.right+=dx;this.bottom+=dy;}},{key:'offsetTo',value:function offsetTo(newLeft,newTop){this.right+=newLeft-this.left;this.bottom+=newTop-this.top;this.left=newLeft;this.top=newTop;}},{key:'inset',value:function inset(dx,dy){this.left+=dx;this.top+=dy;this.right-=dx;this.bottom-=dy;}},{key:'contains',value:function contains(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3<_len3;_key3++){args[_key3]=arguments[_key3];}if(args.length===1){var r=args[0];return this.left=r.right&&this.bottom>=r.bottom;}else if(args.length===2){var x=args[0];var y=args[1];return this.left=this.left&&x=this.top&&y=right&&this.bottom>=bottom;}}},{key:'intersect',value:function intersect(){for(var _len4=arguments.length,args=Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}if(args.length===1){var rect=args[0];return this.intersect(rect.left,rect.top,rect.right,rect.bottom);}else {var _args$13=args[0];var left=_args$13===undefined?0:_args$13;var _args$14=args[1];var t=_args$14===undefined?0:_args$14;var _args$15=args[2];var right=_args$15===undefined?0:_args$15;var _args$16=args[3];var bottom=_args$16===undefined?0:_args$16;if(this.leftright)this.right=right;if(this.bottom>bottom)this.bottom=bottom;return true;}return false;}}},{key:'setIntersect',value:function setIntersect(a,b){if(a.leftthis.right){this.right=x;}if(ythis.bottom){this.bottom=y;}}else {var left=args[0];var top=args[1];var right=args[2];var bottom=args[3];if(leftleft)this.left=left;if(this.top>top)this.top=top;if(this.rightthis.right){var _ref2=[this.right,this.left];this.left=_ref2[0];this.right=_ref2[1];}if(this.top>this.bottom){var _ref3=[this.bottom,this.top];this.top=_ref3[0];this.bottom=_ref3[1];}}},{key:'scale',value:function scale(_scale){if(_scale!=1){this.left=this.left*_scale;this.top=this.top*_scale;this.right=this.right*_scale;this.bottom=this.bottom*_scale;}}}],[{key:'unflattenFromString',value:function unflattenFromString(str){var parts=str.split(" ");return new Rect(Number.parseInt(parts[0]),Number.parseInt(parts[1]),Number.parseInt(parts[2]),Number.parseInt(parts[3]));}},{key:'intersects',value:function intersects(a,b){return a.leftcontainer.right){outRect.right=container.right;}}break;case Gravity.AXIS_PULL_BEFORE<container.right){outRect.right=container.right;}}break;case Gravity.AXIS_PULL_AFTER<container.bottom){outRect.bottom=container.bottom;}}break;case Gravity.AXIS_PULL_BEFORE<container.bottom){outRect.bottom=container.bottom;}}break;case Gravity.AXIS_PULL_AFTER<Log.PriorityString.length)return "";return Log.PriorityString[priority-2];}},{key:'v',value:function v(tag,msg,tr){console.log(Log.getLogMsg(Log.VERBOSE,tag,msg));if(tr)console.log(tr);}},{key:'d',value:function d(tag,msg){console.debug(Log.getLogMsg(Log.DEBUG,tag,msg));}},{key:'i',value:function i(tag,msg,tr){console.info(Log.getLogMsg(Log.INFO,tag,msg));if(tr)console.info(tr);}},{key:'w',value:function w(tag,msg,tr){console.warn(Log.getLogMsg(Log.WARN,tag,msg));if(tr)console.warn(tr);}},{key:'e',value:function e(tag,msg,tr){console.error(Log.getLogMsg(Log.ERROR,tag,msg));if(tr)console.error(tr);}},{key:'getLogMsg',value:function getLogMsg(priority,tag,msg){var d=new Date();var dateFormat=d.toLocaleTimeString()+'.'+d.getUTCMilliseconds();return "["+Log.getPriorityString(priority)+"] "+dateFormat+" \t "+tag+" \t "+msg;}}]);return Log;}();Log.View_DBG=false;Log.VelocityTracker_DBG=false;Log.DBG_DrawableContainer=false;Log.DBG_StateListDrawable=false;Log.VERBOSE=2;Log.DEBUG=3;Log.INFO=4;Log.WARN=5;Log.ERROR=6;Log.ASSERT=7;Log.PriorityString=["VERBOSE","DEBUG","INFO","WARN","ERROR","ASSERT"];util.Log=Log;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var PixelFormat=function PixelFormat(){_classCallCheck(this,PixelFormat);};PixelFormat.UNKNOWN=0;PixelFormat.TRANSLUCENT=-3;PixelFormat.TRANSPARENT=-2;PixelFormat.OPAQUE=-1;PixelFormat.RGBA_8888=1;PixelFormat.RGBX_8888=2;PixelFormat.RGB_888=3;PixelFormat.RGB_565=4;graphics.PixelFormat=PixelFormat;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var ref;(function(ref){var WeakReference=function(){function WeakReference(referent){_classCallCheck(this,WeakReference);this.weakMap=new WeakMap();this.weakMap.set(this,referent);}_createClass(WeakReference,[{key:'get',value:function get(){return this.weakMap.get(this);}},{key:'set',value:function set(value){this.weakMap.set(this,value);}},{key:'clear',value:function clear(){this.weakMap.delete(this);}}]);return WeakReference;}();ref.WeakReference=WeakReference;})(ref=lang.ref||(lang.ref={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var Runnable;(function(Runnable){function of(func){return {run:func};}Runnable.of=of;})(Runnable=lang.Runnable||(lang.Runnable={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var System=function(){function System(){_classCallCheck(this,System);}_createClass(System,null,[{key:'currentTimeMillis',value:function currentTimeMillis(){return new Date().getTime();}},{key:'arraycopy',value:function arraycopy(src,srcPos,dest,destPos,length){var srcLength=src.length;var destLength=dest.length;for(var i=0;i=srcLength)return;var destIndex=i+destPos;if(destIndex>=destLength)return;dest[destIndex]=src[srcIndex];}}}]);return System;}();System.out={println:function println(any){console.log('\n');console.log(any);},print:function print(any){console.log(any);}};lang.System=System;})(lang=java.lang||(java.lang={}));})(java||(java={}));var androidui;(function(androidui){var util;(function(util){var ArrayCreator=function(){function ArrayCreator(){_classCallCheck(this,ArrayCreator);}_createClass(ArrayCreator,null,[{key:'newNumberArray',value:function newNumberArray(size){var array=new Array(size);if(size>0)ArrayCreator.fillArray(array,0);return array;}},{key:'newBooleanArray',value:function newBooleanArray(size){var array=new Array(size);ArrayCreator.fillArray(array,false);return array;}},{key:'fillArray',value:function fillArray(array,value){for(var i=0,length=array.length;i0){mustMatch=true;}else {mustMatch=false;stateSpecState=-stateSpecState;}var found=false;for(var j=0;j0){if(state!=stateSpecState){return false;}}else {if(state==-stateSpecState){return false;}}}return true;}},{key:'trimStateSet',value:function trimStateSet(states,newSize){if(states.length==newSize){return states;}var trimmedStates=androidui.util.ArrayCreator.newNumberArray(newSize);System.arraycopy(states,0,trimmedStates,0,newSize);return trimmedStates;}}]);return StateSet;}();StateSet.WILD_CARD=[];StateSet.NOTHING=[0];util.StateSet=StateSet;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var util;(function(util){var Pools=function Pools(){_classCallCheck(this,Pools);};util.Pools=Pools;(function(Pools){var SimplePool=function(){function SimplePool(maxPoolSize){_classCallCheck(this,SimplePool);this.mPoolSize=0;if(maxPoolSize<=0){throw new Error("The max pool size must be > 0");}this.mPool=new Array(maxPoolSize);}_createClass(SimplePool,[{key:'acquire',value:function acquire(){if(this.mPoolSize>0){var lastPooledIndex=this.mPoolSize-1;var instance=this.mPool[lastPooledIndex];this.mPool[lastPooledIndex]=null;this.mPoolSize--;return instance;}return null;}},{key:'release',value:function release(instance){if(this.isInPool(instance)){throw new Error("Already in the pool!");}if(this.mPoolSize>>24;}},{key:'red',value:function red(color){return color>>16&0xFF;}},{key:'green',value:function green(color){return color>>8&0xFF;}},{key:'blue',value:function blue(color){return color&0xFF;}},{key:'rgb',value:function rgb(red,green,blue){return 0xFF<<24|red<<16|green<<8|blue;}},{key:'argb',value:function argb(alpha,red,green,blue){return alpha<<24|red<<16|green<<8|blue;}},{key:'rgba',value:function rgba(red,green,blue,alpha){return alpha<<24|red<<16|green<<8|blue;}},{key:'parseColor',value:function parseColor(colorString,defaultColor){if(colorString.charAt(0)=='#'){if(colorString.length===4){colorString='#'+colorString[1]+colorString[1]+colorString[2]+colorString[2]+colorString[3]+colorString[3];}var color=parseInt(colorString.substring(1),16);if(colorString.length==7){color|=0x00000000ff000000;}else if(colorString.length!=9){if(defaultColor!=null)return defaultColor;throw new Error("Unknown color : "+colorString);}return color;}else if(colorString.startsWith('rgb(')){colorString=colorString.substring(colorString.indexOf('(')+1,colorString.lastIndexOf(')'));var parts=colorString.split(',');return Color.rgb(Number.parseInt(parts[0]),Number.parseInt(parts[1]),Number.parseInt(parts[2]));}else if(colorString.startsWith('rgba(')){colorString=colorString.substring(colorString.indexOf('(')+1,colorString.lastIndexOf(')'));var _parts=colorString.split(',');return Color.rgba(Number.parseInt(_parts[0]),Number.parseInt(_parts[1]),Number.parseInt(_parts[2]),Number.parseFloat(_parts[3])*255);}else {var _color=Color.sColorNameMap.get(colorString.toLowerCase());if(_color!=null){return _color;}}if(defaultColor!=null)return defaultColor;throw new Error("Unknown color : "+colorString);}},{key:'toARGBHex',value:function toARGBHex(color){var r=Color.red(color);var g=Color.green(color);var b=Color.blue(color);var a=Color.alpha(color);var hR=r<16?'0'+r.toString(16):r.toString(16);var hG=g<16?'0'+g.toString(16):g.toString(16);var hB=b<16?'0'+b.toString(16):b.toString(16);var hA=a<16?'0'+a.toString(16):a.toString(16);return "#"+hA+hR+hG+hB;}},{key:'toRGBAFunc',value:function toRGBAFunc(color){var r=Color.red(color);var g=Color.green(color);var b=Color.blue(color);var a=Color.alpha(color);return 'rgba('+r+','+g+','+b+','+a/255+')';}},{key:'getHtmlColor',value:function getHtmlColor(color){var i=Color.sColorNameMap.get(color.toLowerCase());return i;}}]);return Color;}();Color.BLACK=0xFF000000;Color.DKGRAY=0xFF444444;Color.GRAY=0xFF888888;Color.LTGRAY=0xFFCCCCCC;Color.WHITE=0xFFFFFFFF;Color.RED=0xFFFF0000;Color.GREEN=0xFF00FF00;Color.BLUE=0xFF0000FF;Color.YELLOW=0xFFFFFF00;Color.CYAN=0xFF00FFFF;Color.MAGENTA=0xFFFF00FF;Color.TRANSPARENT=0;Color.sColorNameMap=new Map();graphics.Color=Color;Color.sColorNameMap=new Map();Color.sColorNameMap.set("black",Color.BLACK);Color.sColorNameMap.set("darkgray",Color.DKGRAY);Color.sColorNameMap.set("gray",Color.GRAY);Color.sColorNameMap.set("lightgray",Color.LTGRAY);Color.sColorNameMap.set("white",Color.WHITE);Color.sColorNameMap.set("red",Color.RED);Color.sColorNameMap.set("green",Color.GREEN);Color.sColorNameMap.set("blue",Color.BLUE);Color.sColorNameMap.set("yellow",Color.YELLOW);Color.sColorNameMap.set("cyan",Color.CYAN);Color.sColorNameMap.set("magenta",Color.MAGENTA);Color.sColorNameMap.set("aqua",0xFF00FFFF);Color.sColorNameMap.set("fuchsia",0xFFFF00FF);Color.sColorNameMap.set("darkgrey",Color.DKGRAY);Color.sColorNameMap.set("grey",Color.GRAY);Color.sColorNameMap.set("lightgrey",Color.LTGRAY);Color.sColorNameMap.set("lime",0xFF00FF00);Color.sColorNameMap.set("maroon",0xFF800000);Color.sColorNameMap.set("navy",0xFF000080);Color.sColorNameMap.set("olive",0xFF808000);Color.sColorNameMap.set("purple",0xFF800080);Color.sColorNameMap.set("silver",0xFFC0C0C0);Color.sColorNameMap.set("teal",0xFF008080);Color.sColorNameMap.set("transparent",Color.TRANSPARENT);})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Paint=function(){function Paint(){var flag=arguments.length<=0||arguments[0]===undefined?0:arguments[0];_classCallCheck(this,Paint);this.mTextStyle=Paint.Style.FILL;this.textScaleX=1;this.mFlag=0;this.shadowDx=0;this.shadowDy=0;this.shadowRadius=0;this.shadowColor=0;this.mFlag=flag;}_createClass(Paint,[{key:'set',value:function set(src){if(this!=src){this.setClassVariablesFrom(src);}}},{key:'setClassVariablesFrom',value:function setClassVariablesFrom(paint){this.mTextStyle=paint.mTextStyle;this.mColor=paint.mColor;this.mStrokeWidth=paint.mStrokeWidth;this.align=paint.align;this.mStrokeCap=paint.mStrokeCap;this.mStrokeJoin=paint.mStrokeJoin;this.textSize=paint.textSize;this.textScaleX=paint.textScaleX;this.mFlag=paint.mFlag;this.hasShadow=paint.hasShadow;this.shadowDx=paint.shadowDx;this.shadowDy=paint.shadowDy;this.shadowRadius=paint.shadowRadius;this.shadowColor=paint.shadowColor;this.drawableState=paint.drawableState;}},{key:'getStyle',value:function getStyle(){return this.mTextStyle;}},{key:'setStyle',value:function setStyle(style){this.mTextStyle=style;}},{key:'getFlags',value:function getFlags(){return this.mFlag;}},{key:'setFlags',value:function setFlags(flags){this.mFlag=flags;}},{key:'getTextScaleX',value:function getTextScaleX(){return this.textScaleX;}},{key:'setTextScaleX',value:function setTextScaleX(scaleX){this.textScaleX=scaleX;}},{key:'getColor',value:function getColor(){return this.mColor;}},{key:'setColor',value:function setColor(color){this.mColor=color;}},{key:'setARGB',value:function setARGB(a,r,g,b){this.setColor(a<<24|r<<16|g<<8|b);}},{key:'getAlpha',value:function getAlpha(){return graphics.Color.alpha(this.mColor);}},{key:'setAlpha',value:function setAlpha(alpha){this.setColor(graphics.Color.argb(alpha,graphics.Color.red(this.mColor),graphics.Color.green(this.mColor),graphics.Color.blue(this.mColor)));}},{key:'getStrokeWidth',value:function getStrokeWidth(){return this.mStrokeWidth;}},{key:'setStrokeWidth',value:function setStrokeWidth(width){this.mStrokeWidth=width;}},{key:'getStrokeCap',value:function getStrokeCap(){return this.mStrokeCap;}},{key:'setStrokeCap',value:function setStrokeCap(cap){this.mStrokeCap=cap;}},{key:'getStrokeJoin',value:function getStrokeJoin(){return this.mStrokeJoin;}},{key:'setStrokeJoin',value:function setStrokeJoin(join){this.mStrokeJoin=join;}},{key:'setAntiAlias',value:function setAntiAlias(enable){}},{key:'isAntiAlias',value:function isAntiAlias(){return true;}},{key:'setShadowLayer',value:function setShadowLayer(radius,dx,dy,color){this.hasShadow=radius>0.0;this.shadowRadius=radius;this.shadowDx=dx;this.shadowDy=dy;this.shadowColor=color;}},{key:'clearShadowLayer',value:function clearShadowLayer(){this.hasShadow=false;}},{key:'getTextAlign',value:function getTextAlign(){return this.align;}},{key:'setTextAlign',value:function setTextAlign(align){this.align=align;}},{key:'getTextSize',value:function getTextSize(){return this.textSize;}},{key:'setTextSize',value:function setTextSize(textSize){this.textSize=textSize;}},{key:'ascent',value:function ascent(){return this.textSize*Paint.FontMetrics_Size_Ascent;}},{key:'descent',value:function descent(){return this.textSize*Paint.FontMetrics_Size_Descent;}},{key:'getFontMetricsInt',value:function getFontMetricsInt(fmi){if(this.textSize==null){console.warn('call Paint.getFontMetricsInt but textSize not init');return 0;}if(fmi==null){return Math.floor((Paint.FontMetrics_Size_Descent-Paint.FontMetrics_Size_Ascent)*this.textSize);}fmi.ascent=Math.floor(Paint.FontMetrics_Size_Ascent*this.textSize);fmi.bottom=Math.floor(Paint.FontMetrics_Size_Bottom*this.textSize);fmi.descent=Math.floor(Paint.FontMetrics_Size_Descent*this.textSize);fmi.leading=Math.floor(Paint.FontMetrics_Size_Leading*this.textSize);fmi.top=Math.floor(Paint.FontMetrics_Size_Top*this.textSize);return fmi.descent-fmi.ascent;}},{key:'getFontMetrics',value:function getFontMetrics(metrics){if(this.textSize==null){console.warn('call Paint.getFontMetrics but textSize not init');return 0;}if(metrics==null){return (Paint.FontMetrics_Size_Descent-Paint.FontMetrics_Size_Ascent)*this.textSize;}metrics.ascent=Paint.FontMetrics_Size_Ascent*this.textSize;metrics.bottom=Paint.FontMetrics_Size_Bottom*this.textSize;metrics.descent=Paint.FontMetrics_Size_Descent*this.textSize;metrics.leading=Paint.FontMetrics_Size_Leading*this.textSize;metrics.top=Paint.FontMetrics_Size_Top*this.textSize;return metrics.descent-metrics.ascent;}},{key:'measureText',value:function measureText(text){var index=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var count=arguments.length<=2||arguments[2]===undefined?text.length:arguments[2];return graphics.Canvas.measureText(text.substr(index,count),this.textSize)*this.textScaleX;}},{key:'getTextWidths_count',value:function getTextWidths_count(text,index,count,widths){return this.getTextWidths_end(text,index,index+count,widths);}},{key:'getTextWidths_end',value:function getTextWidths_end(text,start,end,widths){if(text==null){throw Error('new IllegalArgumentException("text cannot be null")');}if((start|end|end-start|text.length-end)<0){throw Error('new IndexOutOfBoundsException()');}if(end-start>widths.length){throw Error('new ArrayIndexOutOfBoundsException()');}if(text.length==0||start==end){return 0;}for(var i=start;iPaint.CURSOR_OPT_MAX_VALUE){throw Error('new IndexOutOfBoundsException()');}var scalarArray=androidui.util.ArrayCreator.newNumberArray(contextLength);this.getTextRunAdvances_count(text,contextStart,contextLength,contextStart,contextLength,flags,scalarArray,0);var pos=offset-contextStart;switch(cursorOpt){case Paint.CURSOR_AFTER:if(pos0){--pos;}case Paint.CURSOR_AT_OR_BEFORE:while(pos>0&&scalarArray[pos]==0){--pos;}break;case Paint.CURSOR_AT:default:if(scalarArray[pos]==0){pos=-1;}break;}if(pos!=-1){pos+=contextStart;}return pos;}},{key:'getTextRunCursor_end',value:function getTextRunCursor_end(text,contextStart,contextEnd,flags,offset,cursorOpt){if((contextStart|contextEnd|offset|contextEnd-contextStart|offset-contextStart|contextEnd-offset|text.length-contextEnd|cursorOpt)<0||cursorOpt>Paint.CURSOR_OPT_MAX_VALUE){throw Error('new IndexOutOfBoundsException()');}var contextLen=contextEnd-contextStart;return this.getTextRunCursor_len(text,0,contextLen,flags,offset-contextStart,cursorOpt);}},{key:'isEmpty',value:function isEmpty(){return this.mColor==null&&this.align==null&&this.mStrokeWidth==null&&this.mStrokeCap==null&&this.mStrokeJoin==null&&!this.hasShadow&&this.textSize==null;}},{key:'applyToCanvas',value:function applyToCanvas(canvas){if(this.mColor!=null){canvas.setColor(this.mColor,this.getStyle());}if(this.align!=null){canvas.setTextAlign(Paint.Align[this.align].toLowerCase());}if(this.mStrokeWidth!=null){canvas.setLineWidth(this.mStrokeWidth);}if(this.mStrokeCap!=null){canvas.setLineCap(Paint.Cap[this.mStrokeCap].toLowerCase());}if(this.mStrokeJoin!=null){canvas.setLineJoin(Paint.Join[this.mStrokeJoin].toLowerCase());}if(this.hasShadow){canvas.setShadow(this.shadowRadius,this.shadowDx,this.shadowDy,this.shadowColor);}if(this.textSize!=null){canvas.setFontSize(this.textSize);}if(this.textScaleX!=1){canvas.scale(this.textScaleX,1);}}}]);return Paint;}();Paint.FontMetrics_Size_Ascent=-0.9277344;Paint.FontMetrics_Size_Bottom=0.2709961;Paint.FontMetrics_Size_Descent=0.24414062;Paint.FontMetrics_Size_Leading=0;Paint.FontMetrics_Size_Top=-1.05615234;Paint.DIRECTION_LTR=0;Paint.DIRECTION_RTL=1;Paint.CURSOR_AFTER=0;Paint.CURSOR_AT_OR_AFTER=1;Paint.CURSOR_BEFORE=2;Paint.CURSOR_AT_OR_BEFORE=3;Paint.CURSOR_AT=4;Paint.CURSOR_OPT_MAX_VALUE=Paint.CURSOR_AT;Paint.ANTI_ALIAS_FLAG=0x01;Paint.FILTER_BITMAP_FLAG=0x02;Paint.DITHER_FLAG=0x04;Paint.UNDERLINE_TEXT_FLAG=0x08;Paint.STRIKE_THRU_TEXT_FLAG=0x10;Paint.FAKE_BOLD_TEXT_FLAG=0x20;Paint.LINEAR_TEXT_FLAG=0x40;Paint.SUBPIXEL_TEXT_FLAG=0x80;Paint.DEV_KERN_TEXT_FLAG=0x100;Paint.LCD_RENDER_TEXT_FLAG=0x200;Paint.EMBEDDED_BITMAP_TEXT_FLAG=0x400;Paint.AUTO_HINTING_TEXT_FLAG=0x800;Paint.VERTICAL_TEXT_FLAG=0x1000;Paint.DEFAULT_PAINT_FLAGS=Paint.DEV_KERN_TEXT_FLAG|Paint.EMBEDDED_BITMAP_TEXT_FLAG;graphics.Paint=Paint;(function(Paint){(function(Align){Align[Align["LEFT"]=0]="LEFT";Align[Align["CENTER"]=1]="CENTER";Align[Align["RIGHT"]=2]="RIGHT";})(Paint.Align||(Paint.Align={}));var Align=Paint.Align;var FontMetrics=function FontMetrics(){_classCallCheck(this,FontMetrics);this.top=0;this.ascent=0;this.descent=0;this.bottom=0;this.leading=0;};Paint.FontMetrics=FontMetrics;var FontMetricsInt=function(){function FontMetricsInt(){_classCallCheck(this,FontMetricsInt);this.top=0;this.ascent=0;this.descent=0;this.bottom=0;this.leading=0;}_createClass(FontMetricsInt,[{key:'toString',value:function toString(){return "FontMetricsInt: top="+this.top+" ascent="+this.ascent+" descent="+this.descent+" bottom="+this.bottom+" leading="+this.leading;}}]);return FontMetricsInt;}();Paint.FontMetricsInt=FontMetricsInt;(function(Style){Style[Style["FILL"]=0]="FILL";Style[Style["STROKE"]=1]="STROKE";Style[Style["FILL_AND_STROKE"]=2]="FILL_AND_STROKE";})(Paint.Style||(Paint.Style={}));var Style=Paint.Style;(function(Cap){Cap[Cap["BUTT"]=0]="BUTT";Cap[Cap["ROUND"]=1]="ROUND";Cap[Cap["SQUARE"]=2]="SQUARE";})(Paint.Cap||(Paint.Cap={}));var Cap=Paint.Cap;(function(Join){Join[Join["MITER"]=0]="MITER";Join[Join["ROUND"]=1]="ROUND";Join[Join["BEVEL"]=2]="BEVEL";})(Paint.Join||(Paint.Join={}));var Join=Paint.Join;})(Paint=graphics.Paint||(graphics.Paint={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Path=function(){function Path(){_classCallCheck(this,Path);}_createClass(Path,[{key:'reset',value:function reset(){}}]);return Path;}();graphics.Path=Path;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Point=function(){function Point(){_classCallCheck(this,Point);this.x=0;this.y=0;for(var _len7=arguments.length,args=Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}if(args.length===1){var src=args[0];this.x=src.x;this.y=src.y;}else {var _args$23=args[0];var x=_args$23===undefined?0:_args$23;var _args$24=args[1];var y=_args$24===undefined?0:_args$24;this.x=x;this.y=y;}}_createClass(Point,[{key:'set',value:function set(x,y){this.x=x;this.y=y;}},{key:'negate',value:function negate(){this.x=-this.x;this.y=-this.y;}},{key:'offset',value:function offset(dx,dy){this.x+=dx;this.y+=dy;}},{key:'equals',value:function equals(){for(var _len8=arguments.length,args=Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}if(args.length===2){var _args$25=args[0];var x=_args$25===undefined?0:_args$25;var _args$26=args[1];var y=_args$26===undefined?0:_args$26;return this.x==x&&this.y==y;}else {var o=args[0];if(this===o)return true;if(!o||!(o instanceof Point))return false;var point=o;if(this.x!=point.x)return false;if(this.y!=point.y)return false;return true;}}},{key:'toString',value:function toString(){return "Point("+this.x+", "+this.y+")";}}]);return Point;}();graphics.Point=Point;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var RectF=function(_graphics$Rect){_inherits(RectF,_graphics$Rect);function RectF(){_classCallCheck(this,RectF);return _possibleConstructorReturn(this,Object.getPrototypeOf(RectF).apply(this,arguments));}return RectF;}(graphics.Rect);graphics.RectF=RectF;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var System=java.lang.System;var StringBuilder=java.lang.StringBuilder;var Matrix=function(){function Matrix(values){_classCallCheck(this,Matrix);this.mValues=androidui.util.ArrayCreator.newNumberArray(Matrix.MATRIX_SIZE);if(values instanceof Matrix)this.set(values);else if(values instanceof Array){System.arraycopy(values,0,this.mValues,0,Matrix.MATRIX_SIZE);}else {Matrix.reset(this.mValues);}}_createClass(Matrix,[{key:'isIdentity',value:function isIdentity(){for(var i=0,k=0;i<3;i++){for(var j=0;j<3;j++,k++){if(this.mValues[k]!=(i==j?1:0)){return false;}}}return true;}},{key:'hasPerspective',value:function hasPerspective(){return this.mValues[6]!=0||this.mValues[7]!=0||this.mValues[8]!=1;}},{key:'rectStaysRect',value:function rectStaysRect(){return (this.computeTypeMask()&Matrix.kRectStaysRect_Mask)!=0;}},{key:'set',value:function set(src){if(src==null){this.reset();}else {System.arraycopy(src.mValues,0,this.mValues,0,Matrix.MATRIX_SIZE);}}},{key:'equals',value:function equals(obj){if(!(obj instanceof Matrix))return false;var another=obj;for(var i=0;isy){xLarger=true;sx=sy;}else {sy=sx;}}tx=dst.left-src.left*sx;ty=dst.top-src.top*sy;if(stf==Matrix.ScaleToFit.CENTER||stf==Matrix.ScaleToFit.END){var diff=undefined;if(xLarger){diff=dst.width()-src.width()*sy;}else {diff=dst.height()-src.height()*sy;}if(stf==Matrix.ScaleToFit.CENTER){diff=diff/2;}if(xLarger){tx+=diff;}else {ty+=diff;}}d.mValues[0]=sx;d.mValues[4]=sy;d.mValues[2]=tx;d.mValues[5]=ty;d.mValues[1]=d.mValues[3]=d.mValues[6]=d.mValues[7]=0;}d.mValues[8]=1;return true;}},{key:'mapPoints',value:function mapPoints(dst){var dstIndex=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var src=arguments.length<=2||arguments[2]===undefined?dst:arguments[2];var srcIndex=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var pointCount=arguments.length<=4||arguments[4]===undefined?dst.length>>1:arguments[4];Matrix.checkPointArrays(src,srcIndex,dst,dstIndex,pointCount);var count=pointCount*2;var tmpDest=dst;var inPlace=dst==src;if(inPlace){tmpDest=androidui.util.ArrayCreator.newNumberArray(dstIndex+count);}for(var i=0;i>1:arguments[4];Matrix.checkPointArrays(src,srcIndex,dst,dstIndex,ptCount);if(this.hasPerspective()){var origin=[0.,0.];this.mapPoints(origin);this.mapPoints(dst,dstIndex,src,srcIndex,ptCount);var count=ptCount*2;for(var i=0;isrc.length||dstStop>dst.length){throw Error('new ArrayIndexOutOfBoundsException()');}}},{key:'getPointLength',value:function getPointLength(src,index){return Math.sqrt(src[index]*src[index]+src[index+1]*src[index+1]);}},{key:'multiply',value:function multiply(dest,a,b){dest[0]=b[0]*a[0]+b[1]*a[3]+b[2]*a[6];dest[1]=b[0]*a[1]+b[1]*a[4]+b[2]*a[7];dest[2]=b[0]*a[2]+b[1]*a[5]+b[2]*a[8];dest[3]=b[3]*a[0]+b[4]*a[3]+b[5]*a[6];dest[4]=b[3]*a[1]+b[4]*a[4]+b[5]*a[7];dest[5]=b[3]*a[2]+b[4]*a[5]+b[5]*a[8];dest[6]=b[6]*a[0]+b[7]*a[3]+b[8]*a[6];dest[7]=b[6]*a[1]+b[7]*a[4]+b[8]*a[7];dest[8]=b[6]*a[2]+b[7]*a[5]+b[8]*a[8];}},{key:'getTranslate',value:function getTranslate(dx,dy){return this.setTranslate(androidui.util.ArrayCreator.newNumberArray(9),dx,dy);}},{key:'setTranslate',value:function setTranslate(dest,dx,dy){dest[0]=1;dest[1]=0;dest[2]=dx;dest[3]=0;dest[4]=1;dest[5]=dy;dest[6]=0;dest[7]=0;dest[8]=1;return dest;}},{key:'getScale',value:function getScale(sx,sy,px,py){if(px==null||py==null){return [sx,0,0,0,sy,0,0,0,1];}var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);Matrix.multiply(tmp2,tmp,Matrix.getScale(sx,sy));Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'getRotate_1',value:function getRotate_1(degrees){var rad=Math_toRadians(degrees);var sin=Math.sin(rad);var cos=Math.cos(rad);return Matrix.getRotate_2(sin,cos);}},{key:'getRotate_2',value:function getRotate_2(sin,cos){return this.setRotate_2(androidui.util.ArrayCreator.newNumberArray(9),sin,cos);}},{key:'setRotate_1',value:function setRotate_1(dest,degrees){var rad=Math_toRadians(degrees);var sin=Math.sin(rad);var cos=Math.cos(rad);return Matrix.setRotate_2(dest,sin,cos);}},{key:'setRotate_2',value:function setRotate_2(dest,sin,cos){dest[0]=cos;dest[1]=-sin;dest[2]=0;dest[3]=sin;dest[4]=cos;dest[5]=0;dest[6]=0;dest[7]=0;dest[8]=1;return dest;}},{key:'getRotate_3',value:function getRotate_3(degrees,px,py){var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);var rad=Math_toRadians(degrees);var cos=Math.cos(rad);var sin=Math.sin(rad);Matrix.multiply(tmp2,tmp,Matrix.getRotate_2(sin,cos));Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'getSkew',value:function getSkew(kx,ky,px,py){if(px==null||py==null){return [1,kx,0,ky,1,0,0,0,1];}var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);Matrix.multiply(tmp2,tmp,[1,kx,0,ky,1,0,0,0,1]);Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'reset',value:function reset(mtx){mtx[0]=1;mtx[1]=0;mtx[2]=0;mtx[3]=0;mtx[4]=1;mtx[5]=0;mtx[6]=0;mtx[7]=0;mtx[8]=1;}}]);return Matrix;}();Matrix.MSCALE_X=0;Matrix.MSKEW_X=1;Matrix.MTRANS_X=2;Matrix.MSKEW_Y=3;Matrix.MSCALE_Y=4;Matrix.MTRANS_Y=5;Matrix.MPERSP_0=6;Matrix.MPERSP_1=7;Matrix.MPERSP_2=8;Matrix.MATRIX_SIZE=9;Matrix.IDENTITY_MATRIX=function(){var _Inner=function(_Matrix){_inherits(_Inner,_Matrix);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,Object.getPrototypeOf(_Inner).apply(this,arguments));}_createClass(_Inner,[{key:'oops',value:function oops(){throw Error('new IllegalStateException("Matrix can not be modified")');}},{key:'set',value:function set(src){this.oops();}},{key:'reset',value:function reset(){this.oops();}},{key:'setTranslate',value:function setTranslate(dx,dy){this.oops();}},{key:'setScale',value:function setScale(sx,sy,px,py){this.oops();}},{key:'setRotate',value:function setRotate(degrees,px,py){this.oops();}},{key:'setSinCos',value:function setSinCos(sinValue,cosValue,px,py){this.oops();}},{key:'setSkew',value:function setSkew(kx,ky,px,py){this.oops();}},{key:'setConcat',value:function setConcat(a,b){this.oops();return false;}},{key:'preTranslate',value:function preTranslate(dx,dy){this.oops();return false;}},{key:'preScale',value:function preScale(sx,sy,px,py){this.oops();return false;}},{key:'preRotate',value:function preRotate(degrees,px,py){this.oops();return false;}},{key:'preSkew',value:function preSkew(kx,ky,px,py){this.oops();return false;}},{key:'preConcat',value:function preConcat(other){this.oops();return false;}},{key:'postTranslate',value:function postTranslate(dx,dy){this.oops();return false;}},{key:'postScale',value:function postScale(sx,sy,px,py){this.oops();return false;}},{key:'postRotate',value:function postRotate(degrees,px,py){this.oops();return false;}},{key:'postSkew',value:function postSkew(kx,ky,px,py){this.oops();return false;}},{key:'postConcat',value:function postConcat(other){this.oops();return false;}},{key:'setRectToRect',value:function setRectToRect(src,dst,stf){this.oops();return false;}},{key:'setPolyToPoly',value:function setPolyToPoly(src,srcIndex,dst,dstIndex,pointCount){this.oops();return false;}},{key:'setValues',value:function setValues(values){this.oops();}}]);return _Inner;}(Matrix);return new _Inner();}();Matrix.kIdentity_Mask=0;Matrix.kTranslate_Mask=0x01;Matrix.kScale_Mask=0x02;Matrix.kAffine_Mask=0x04;Matrix.kPerspective_Mask=0x08;Matrix.kRectStaysRect_Mask=0x10;Matrix.kUnknown_Mask=0x80;Matrix.kAllMasks=Matrix.kTranslate_Mask|Matrix.kScale_Mask|Matrix.kAffine_Mask|Matrix.kPerspective_Mask|Matrix.kRectStaysRect_Mask;Matrix.kTranslate_Shift=0;Matrix.kScale_Shift=1;Matrix.kAffine_Shift=2;Matrix.kPerspective_Shift=3;Matrix.kRectStaysRect_Shift=4;graphics.Matrix=Matrix;(function(Matrix){(function(ScaleToFit){ScaleToFit[ScaleToFit["FILL"]=0]="FILL";ScaleToFit[ScaleToFit["START"]=1]="START";ScaleToFit[ScaleToFit["CENTER"]=2]="CENTER";ScaleToFit[ScaleToFit["END"]=3]="END";})(Matrix.ScaleToFit||(Matrix.ScaleToFit={}));var ScaleToFit=Matrix.ScaleToFit;})(Matrix=graphics.Matrix||(graphics.Matrix={}));function Math_toRadians(angdeg){return angdeg/180.0*Math.PI;}})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var androidui;(function(androidui){var image;(function(image){var Rect=android.graphics.Rect;var Color=android.graphics.Color;var NetImage=function(){function NetImage(src,overrideImageRatio){_classCallCheck(this,NetImage);this.mImageWidth=0;this.mImageHeight=0;this.mOnLoads=new Set();this.mOnErrors=new Set();this.mImageLoaded=false;this.init(src);this.mOverrideImageRatio=overrideImageRatio;}_createClass(NetImage,[{key:'init',value:function init(src){this.createImage();this.src=src;}},{key:'createImage',value:function createImage(){this.browserImage=new Image();}},{key:'loadImage',value:function loadImage(){var _this7=this;this.browserImage.src=this.mSrc;this.browserImage.onload=function(){_this7.mImageWidth=_this7.browserImage.width;_this7.mImageHeight=_this7.browserImage.height;_this7.fireOnLoad();};this.browserImage.onerror=function(){_this7.mImageWidth=_this7.mImageHeight=0;_this7.fireOnError();};}},{key:'getImageRatio',value:function getImageRatio(){if(this.mOverrideImageRatio)return this.mOverrideImageRatio;var url=this.src;if(!url)return 1;if(url.startsWith('data:'))return 1;var idx=url.lastIndexOf('.');if(idx>0){url=url.substring(0,idx);}if(url.endsWith('.9'))url=url.substring(0,url.length-2);if(url.endsWith('@2x'))return 2;if(url.endsWith('@3x'))return 3;if(url.endsWith('@4x'))return 4;if(url.endsWith('@5x'))return 5;if(url.endsWith('@6x'))return 6;return 1;}},{key:'isImageLoaded',value:function isImageLoaded(){return this.mImageLoaded;}},{key:'fireOnLoad',value:function fireOnLoad(){this.mImageLoaded=true;var _arr=[].concat(_toConsumableArray(this.mOnLoads));for(var _i=0;_i<_arr.length;_i++){var load=_arr[_i];load();}}},{key:'fireOnError',value:function fireOnError(){this.mImageLoaded=false;var _arr2=[].concat(_toConsumableArray(this.mOnErrors));for(var _i2=0;_i2<_arr2.length;_i2++){var error=_arr2[_i2];error();}}},{key:'addLoadListener',value:function addLoadListener(onload,onerror){if(onload){this.mOnLoads.add(onload);}if(onerror){this.mOnErrors.add(onerror);}}},{key:'removeLoadListener',value:function removeLoadListener(onload,onerror){if(onload){this.mOnLoads.delete(onload);}if(onerror){this.mOnErrors.delete(onerror);}}},{key:'recycle',value:function recycle(){}},{key:'getBorderPixels',value:function getBorderPixels(callBack){var _this8=this;if(!callBack)return;var mTmpRect=new Rect();mTmpRect.set(0,1,1,this.height-1);this.getPixels(mTmpRect,function(leftBorder){mTmpRect.set(1,0,_this8.width-1,1);_this8.getPixels(mTmpRect,function(topBorder){mTmpRect.set(_this8.width-1,1,_this8.width,_this8.height-1);_this8.getPixels(mTmpRect,function(rightBorder){mTmpRect.set(1,_this8.height-1,_this8.width-1,_this8.height);_this8.getPixels(mTmpRect,function(bottomBorder){callBack(leftBorder,topBorder,rightBorder,bottomBorder);});});});});}},{key:'getPixels',value:function getPixels(bound,callBack){if(!callBack)return;var canvasEle=document.createElement('canvas');if(!bound)bound=new Rect(0,0,this.width,this.height);if(bound.isEmpty()){callBack([]);return;}var w=bound.width();var h=bound.height();canvasEle.width=w;canvasEle.height=h;var canvas=canvasEle.getContext('2d');canvas.drawImage(this.browserImage,bound.left,bound.top,w,h,0,0,w,h);var data=canvas.getImageData(0,0,w,h).data;var colorData=[];for(var i=0;i0){this.setShadowImpl(radius,dx,dy,color);}}},{key:'setShadowImpl',value:function setShadowImpl(radius,dx,dy,color){this._mCanvasContent.shadowBlur=radius;this._mCanvasContent.shadowOffsetX=dx;this._mCanvasContent.shadowOffsetY=dy;this._mCanvasContent.shadowColor=Color.toRGBAFunc(color);}},{key:'setFontSize',value:function setFontSize(size){if(size!=null){this.setFontSizeImpl(size);}}},{key:'setFontSizeImpl',value:function setFontSizeImpl(size){var cFont=this._mCanvasContent.font;var fontParts=cFont.split(' ');if(Number.parseFloat(fontParts[fontParts.length-2])==size)return;fontParts[fontParts.length-2]=size+'px';this._mCanvasContent.font=fontParts.join(' ');}},{key:'setFont',value:function setFont(fontName){if(fontName!=null){this.setFontImpl(fontName);}}},{key:'setFontImpl',value:function setFontImpl(fontName){var cFont=this._mCanvasContent.font;var fontParts=cFont.split(' ');fontParts[fontParts.length-1]=fontName;var font=fontParts.join(' ');if(font!=cFont)this._mCanvasContent.font=font;}},{key:'isImageSmoothingEnabled',value:function isImageSmoothingEnabled(){return this.isImageSmoothingEnabledImpl();}},{key:'isImageSmoothingEnabledImpl',value:function isImageSmoothingEnabledImpl(){return this._mCanvasContent['imageSmoothingEnabled']||this._mCanvasContent['webkitImageSmoothingEnabled'];}},{key:'setImageSmoothingEnabled',value:function setImageSmoothingEnabled(enable){this.setImageSmoothingEnabledImpl(enable);}},{key:'setImageSmoothingEnabledImpl',value:function setImageSmoothingEnabledImpl(enable){if('imageSmoothingEnabled' in this._mCanvasContent){this._mCanvasContent['imageSmoothingEnabled']=enable;}else if('webkitImageSmoothingEnabled' in this._mCanvasContent){this._mCanvasContent['webkitImageSmoothingEnabled']=enable;}}}],[{key:'obtainRect',value:function obtainRect(copy){var rect=Canvas.sRectPool.acquire();if(!rect)rect=new Rect();if(copy)rect.set(copy);return rect;}},{key:'recycleRect',value:function recycleRect(rect){rect.setEmpty();Canvas.sRectPool.release(rect);}},{key:'measureText',value:function measureText(text,textSize){if(textSize==null||textSize===0)return 0;return Canvas.measureTextImpl(text,textSize);}},{key:'measureTextImpl',value:function measureTextImpl(text,textSize){var width=0;for(var i=0,length=text.length;i0?intrinsicWidth:0;}},{key:'getMinimumHeight',value:function getMinimumHeight(){var intrinsicHeight=this.getIntrinsicHeight();return intrinsicHeight>0?intrinsicHeight:0;}},{key:'getPadding',value:function getPadding(padding){padding.set(0,0,0,0);return false;}},{key:'mutate',value:function mutate(){return this;}},{key:'getConstantState',value:function getConstantState(){return null;}},{key:'inflate',value:function inflate(r,parser){this.mVisible=parser.getAttribute('android:visible')!=='false';}}],[{key:'resolveOpacity',value:function resolveOpacity(op1,op2){if(op1==op2){return op1;}if(op1==PixelFormat.UNKNOWN||op2==PixelFormat.UNKNOWN){return PixelFormat.UNKNOWN;}if(op1==PixelFormat.TRANSLUCENT||op2==PixelFormat.TRANSLUCENT){return PixelFormat.TRANSLUCENT;}if(op1==PixelFormat.TRANSPARENT||op2==PixelFormat.TRANSPARENT){return PixelFormat.TRANSPARENT;}return PixelFormat.OPAQUE;}},{key:'createFromXml',value:function createFromXml(r,parser){var drawable=undefined;var name=parser.tagName.toLowerCase();switch(name){case "selector":drawable=new drawable_1.StateListDrawable();break;case "layer-list":drawable=new drawable_1.LayerDrawable(null);break;case "color":drawable=new drawable_1.ColorDrawable();break;case "scale":drawable=new drawable_1.ScaleDrawable();break;case "clip":drawable=new drawable_1.ClipDrawable();break;case "rotate":drawable=new drawable_1.RotateDrawable();break;case "animation-list":drawable=new drawable_1.AnimationDrawable();break;case "inset":drawable=new drawable_1.InsetDrawable(null,0);break;case "bitmap":var srcAttr=parser.getAttribute('src');if(!srcAttr)throw Error("XmlPullParserException: bitmap tag must have 'src' attribute");drawable=r.getDrawable(srcAttr);break;default:throw Error("XmlPullParserException: invalid drawable tag "+name);}drawable.inflate(r,parser);return drawable;}}]);return Drawable;}();Drawable.ZERO_BOUNDS_RECT=new Rect();drawable_1.Drawable=Drawable;})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var ColorDrawable=function(_drawable$Drawable){_inherits(ColorDrawable,_drawable$Drawable);function ColorDrawable(color){_classCallCheck(this,ColorDrawable);var _this9=_possibleConstructorReturn(this,Object.getPrototypeOf(ColorDrawable).call(this));_this9.mMutated=false;_this9.mPaint=new graphics.Paint();_this9.mState=new ColorState();if(color!==undefined){_this9.setColor(color);}return _this9;}_createClass(ColorDrawable,[{key:'_setStateCopyFrom',value:function _setStateCopyFrom(state){this.mState=new ColorState(state);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(ColorDrawable.prototype),'mutate',this).call(this)==this){this.mState=new ColorState(this.mState);this.mMutated=true;}return this;}},{key:'draw',value:function draw(canvas){if(this.mState.mUseColor>>>24!=0){this.mPaint.setColor(this.mState.mUseColor);canvas.drawRect(this.getBounds(),this.mPaint);}}},{key:'getColor',value:function getColor(){return this.mState.mUseColor;}},{key:'setColor',value:function setColor(color){if(this.mState.mBaseColor!=color||this.mState.mUseColor!=color){this.invalidateSelf();this.mState.mBaseColor=this.mState.mUseColor=color;}}},{key:'getAlpha',value:function getAlpha(){return this.mState.mUseColor>>>24;}},{key:'setAlpha',value:function setAlpha(alpha){alpha+=alpha>>7;var baseAlpha=this.mState.mBaseColor>>>24;var useAlpha=baseAlpha*alpha>>8;var oldUseColor=this.mState.mUseColor;this.mState.mUseColor=this.mState.mBaseColor<<8>>>8|useAlpha<<24;if(oldUseColor!=this.mState.mUseColor){this.invalidateSelf();}}},{key:'getOpacity',value:function getOpacity(){switch(this.mState.mUseColor>>>24){case 255:return graphics.PixelFormat.OPAQUE;case 0:return graphics.PixelFormat.TRANSPARENT;}return graphics.PixelFormat.TRANSLUCENT;}},{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(ColorDrawable.prototype),'inflate',this).call(this,r,parser);var state=this.mState;state.mBaseColor=androidui.attr.AttrValueParser.parseColor(r,parser.innerText,state.mBaseColor);state.mUseColor=state.mBaseColor;}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return ColorDrawable;}(drawable.Drawable);drawable.ColorDrawable=ColorDrawable;var ColorState=function(){function ColorState(state){_classCallCheck(this,ColorState);this.mBaseColor=0;this.mUseColor=0;if(state!=null){this.mBaseColor=state.mBaseColor;this.mUseColor=state.mUseColor;}}_createClass(ColorState,[{key:'newDrawable',value:function newDrawable(){var c=new ColorDrawable();c._setStateCopyFrom(this);return c;}}]);return ColorState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Drawable=android.graphics.drawable.Drawable;var ScrollBarDrawable=function(_Drawable){_inherits(ScrollBarDrawable,_Drawable);function ScrollBarDrawable(){var _Object$getPrototypeO;_classCallCheck(this,ScrollBarDrawable);for(var _len13=arguments.length,args=Array(_len13),_key13=0;_key13<_len13;_key13++){args[_key13]=arguments[_key13];}var _this10=_possibleConstructorReturn(this,(_Object$getPrototypeO=Object.getPrototypeOf(ScrollBarDrawable)).call.apply(_Object$getPrototypeO,[this].concat(args)));_this10.mRange=0;_this10.mOffset=0;_this10.mExtent=0;_this10.mVertical=false;_this10.mChanged=false;_this10.mRangeChanged=false;_this10.mTempBounds=new graphics.Rect();_this10.mAlwaysDrawHorizontalTrack=false;_this10.mAlwaysDrawVerticalTrack=false;return _this10;}_createClass(ScrollBarDrawable,[{key:'setAlwaysDrawHorizontalTrack',value:function setAlwaysDrawHorizontalTrack(alwaysDrawTrack){this.mAlwaysDrawHorizontalTrack=alwaysDrawTrack;}},{key:'setAlwaysDrawVerticalTrack',value:function setAlwaysDrawVerticalTrack(alwaysDrawTrack){this.mAlwaysDrawVerticalTrack=alwaysDrawTrack;}},{key:'getAlwaysDrawVerticalTrack',value:function getAlwaysDrawVerticalTrack(){return this.mAlwaysDrawVerticalTrack;}},{key:'getAlwaysDrawHorizontalTrack',value:function getAlwaysDrawHorizontalTrack(){return this.mAlwaysDrawHorizontalTrack;}},{key:'setParameters',value:function setParameters(range,offset,extent,vertical){if(this.mVertical!=vertical){this.mChanged=true;}if(this.mRange!=range||this.mOffset!=offset||this.mExtent!=extent){this.mRangeChanged=true;}this.mRange=range;this.mOffset=offset;this.mExtent=extent;this.mVertical=vertical;}},{key:'draw',value:function draw(canvas){var vertical=this.mVertical;var extent=this.mExtent;var range=this.mRange;var drawTrack=true;var drawThumb=true;if(extent<=0||range<=extent){drawTrack=vertical?this.mAlwaysDrawVerticalTrack:this.mAlwaysDrawHorizontalTrack;drawThumb=false;}var r=this.getBounds();if(drawTrack){this.drawTrack(canvas,r,vertical);}if(drawThumb){var size=vertical?r.height():r.width();var thickness=vertical?r.width():r.height();var length=Math.round(size*extent/range);var offset=Math.round((size-length)*this.mOffset/(range-extent));var minLength=thickness*2;if(lengthsize){offset=size-length;}this.drawThumb(canvas,r,offset,length,vertical);}}},{key:'onBoundsChange',value:function onBoundsChange(bounds){_get2(Object.getPrototypeOf(ScrollBarDrawable.prototype),'onBoundsChange',this).call(this,bounds);this.mChanged=true;}},{key:'drawTrack',value:function drawTrack(canvas,bounds,vertical){var track=undefined;if(vertical){track=this.mVerticalTrack;}else {track=this.mHorizontalTrack;}if(track!=null){if(this.mChanged){track.setBounds(bounds);}track.draw(canvas);}}},{key:'drawThumb',value:function drawThumb(canvas,bounds,offset,length,vertical){var thumbRect=this.mTempBounds;var changed=this.mRangeChanged||this.mChanged;if(changed){if(vertical){thumbRect.set(bounds.left,bounds.top+offset,bounds.right,bounds.top+offset+length);}else {thumbRect.set(bounds.left+offset,bounds.top,bounds.left+offset+length,bounds.bottom);}}if(vertical){var thumb=this.mVerticalThumb;if(changed)thumb.setBounds(thumbRect);thumb.draw(canvas);}else {var _thumb=this.mHorizontalThumb;if(changed)_thumb.setBounds(thumbRect);_thumb.draw(canvas);}}},{key:'setVerticalThumbDrawable',value:function setVerticalThumbDrawable(thumb){if(thumb!=null){this.mVerticalThumb=thumb;}}},{key:'setVerticalTrackDrawable',value:function setVerticalTrackDrawable(track){this.mVerticalTrack=track;}},{key:'setHorizontalThumbDrawable',value:function setHorizontalThumbDrawable(thumb){if(thumb!=null){this.mHorizontalThumb=thumb;}}},{key:'setHorizontalTrackDrawable',value:function setHorizontalTrackDrawable(track){this.mHorizontalTrack=track;}},{key:'getSize',value:function getSize(vertical){if(vertical){return (this.mVerticalTrack!=null?this.mVerticalTrack:this.mVerticalThumb).getIntrinsicWidth();}else {return (this.mHorizontalTrack!=null?this.mHorizontalTrack:this.mHorizontalThumb).getIntrinsicHeight();}}},{key:'setAlpha',value:function setAlpha(alpha){if(this.mVerticalTrack!=null){this.mVerticalTrack.setAlpha(alpha);}this.mVerticalThumb.setAlpha(alpha);if(this.mHorizontalTrack!=null){this.mHorizontalTrack.setAlpha(alpha);}this.mHorizontalThumb.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mVerticalThumb.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return graphics.PixelFormat.TRANSLUCENT;}},{key:'toString',value:function toString(){return "ScrollBarDrawable: range="+this.mRange+" offset="+this.mOffset+" extent="+this.mExtent+(this.mVertical?" V":" H");}}]);return ScrollBarDrawable;}(Drawable);drawable.ScrollBarDrawable=ScrollBarDrawable;})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_2){var Integer=java.lang.Integer;var InsetDrawable=function(_drawable_2$Drawable){_inherits(InsetDrawable,_drawable_2$Drawable);function InsetDrawable(drawable,insetLeft){var insetTop=arguments.length<=2||arguments[2]===undefined?insetLeft:arguments[2];var insetRight=arguments.length<=3||arguments[3]===undefined?insetTop:arguments[3];var insetBottom=arguments.length<=4||arguments[4]===undefined?insetRight:arguments[4];_classCallCheck(this,InsetDrawable);var _this11=_possibleConstructorReturn(this,Object.getPrototypeOf(InsetDrawable).call(this));_this11.mTmpRect=new graphics.Rect();_this11.mMutated=false;_this11.mInsetState=new InsetState(null,_this11);_this11.mInsetState.mDrawable=drawable;_this11.mInsetState.mInsetLeft=insetLeft;_this11.mInsetState.mInsetTop=insetTop;_this11.mInsetState.mInsetRight=insetRight;_this11.mInsetState.mInsetBottom=insetBottom;if(drawable!=null){drawable.setCallback(_this11);}return _this11;}_createClass(InsetDrawable,[{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(InsetDrawable.prototype),'inflate',this).call(this,r,parser);this.mInsetState.mDrawable=null;var state=this.mInsetState;var a=r.obtainAttributes(parser);var dr=a.getDrawable("android:drawable");if(!dr&&parser.children[0] instanceof HTMLElement){dr=drawable_2.Drawable.createFromXml(r,parser.children[0]);}if(!dr){throw Error(" tag requires a 'drawable' attribute or child tag defining a drawable");}var inset=a.getDimensionPixelOffset("android:inset",Integer.MIN_VALUE);if(inset!=Integer.MIN_VALUE){state.mInsetLeft=inset;state.mInsetTop=inset;state.mInsetRight=inset;state.mInsetBottom=inset;}state.mInsetLeft=a.getDimensionPixelOffset("android:insetLeft",state.mInsetLeft);state.mInsetTop=a.getDimensionPixelOffset("android:insetTop",state.mInsetTop);state.mInsetRight=a.getDimensionPixelOffset("android:insetRight",state.mInsetRight);state.mInsetBottom=a.getDimensionPixelOffset("android:insetBottom",state.mInsetBottom);}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){this.mInsetState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){var pad=this.mInsetState.mDrawable.getPadding(padding);padding.left+=this.mInsetState.mInsetLeft;padding.right+=this.mInsetState.mInsetRight;padding.top+=this.mInsetState.mInsetTop;padding.bottom+=this.mInsetState.mInsetBottom;if(pad||(this.mInsetState.mInsetLeft|this.mInsetState.mInsetRight|this.mInsetState.mInsetTop|this.mInsetState.mInsetBottom)!=0){return true;}else {return false;}}},{key:'setVisible',value:function setVisible(visible,restart){this.mInsetState.mDrawable.setVisible(visible,restart);return _get2(Object.getPrototypeOf(InsetDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mInsetState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mInsetState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mInsetState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mInsetState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mInsetState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){var r=this.mTmpRect;r.set(bounds);r.left+=this.mInsetState.mInsetLeft;r.top+=this.mInsetState.mInsetTop;r.right-=this.mInsetState.mInsetRight;r.bottom-=this.mInsetState.mInsetBottom;this.mInsetState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mInsetState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mInsetState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mInsetState.canConstantState()){return this.mInsetState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(InsetDrawable.prototype),'mutate',this).call(this)==this){this.mInsetState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mInsetState.mDrawable;}}]);return InsetDrawable;}(drawable_2.Drawable);drawable_2.InsetDrawable=InsetDrawable;var InsetState=function(){function InsetState(orig,owner){_classCallCheck(this,InsetState);this.mInsetLeft=0;this.mInsetTop=0;this.mInsetRight=0;this.mInsetBottom=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mInsetLeft=orig.mInsetLeft;this.mInsetTop=orig.mInsetTop;this.mInsetRight=orig.mInsetRight;this.mInsetBottom=orig.mInsetBottom;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(InsetState,[{key:'newDrawable',value:function newDrawable(){var drawable=new InsetDrawable(null,0);drawable.mInsetState=new InsetState(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return InsetState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_3){var ShadowDrawable=function(_drawable_3$Drawable){_inherits(ShadowDrawable,_drawable_3$Drawable);function ShadowDrawable(drawable,radius,dx,dy,color){_classCallCheck(this,ShadowDrawable);var _this12=_possibleConstructorReturn(this,Object.getPrototypeOf(ShadowDrawable).call(this));_this12.mMutated=false;_this12.mState=new DrawableState(null,_this12);_this12.mState.mDrawable=drawable;_this12.mState.shadowDx=dx;_this12.mState.shadowDy=dy;_this12.mState.shadowRadius=radius;_this12.mState.shadowColor=color;if(drawable!=null){drawable.setCallback(_this12);}return _this12;}_createClass(ShadowDrawable,[{key:'setShadow',value:function setShadow(radius,dx,dy,color){this.mState.shadowDx=dx;this.mState.shadowDy=dy;this.mState.shadowRadius=radius;this.mState.shadowColor=color;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){if(!this.mState.shadowRadius||graphics.Color.alpha(this.mState.shadowColor)===0){this.mState.mDrawable.draw(canvas);return;}var saveCount=canvas.save();canvas.setShadow(this.mState.shadowRadius,this.mState.shadowDx,this.mState.shadowDy,this.mState.shadowColor);this.mState.mDrawable.draw(canvas);canvas.restoreToCount(saveCount);}},{key:'getPadding',value:function getPadding(padding){return this.mState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mState.mDrawable.setVisible(visible,restart);return _get2(Object.getPrototypeOf(ShadowDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return graphics.PixelFormat.TRANSPARENT;}},{key:'isStateful',value:function isStateful(){return this.mState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){this.mState.mDrawable.setBounds(bounds.left,bounds.top,bounds.right,bounds.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mState.canConstantState()){return this.mState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(ShadowDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mState.mDrawable;}}]);return ShadowDrawable;}(drawable_3.Drawable);drawable_3.ShadowDrawable=ShadowDrawable;var DrawableState=function(){function DrawableState(orig,owner){_classCallCheck(this,DrawableState);this.shadowDx=0;this.shadowDy=0;this.shadowRadius=0;this.shadowColor=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.shadowDx=orig.shadowDx;this.shadowDy=orig.shadowDy;this.shadowRadius=orig.shadowRadius;this.shadowColor=orig.shadowColor;}}_createClass(DrawableState,[{key:'newDrawable',value:function newDrawable(){var drawable=new ShadowDrawable(null,0,0,0,0);drawable.mState=new DrawableState(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return DrawableState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var RoundRectDrawable=function(_drawable$Drawable2){_inherits(RoundRectDrawable,_drawable$Drawable2);function RoundRectDrawable(color,radiusTopLeft){var radiusTopRight=arguments.length<=2||arguments[2]===undefined?radiusTopLeft:arguments[2];var radiusBottomRight=arguments.length<=3||arguments[3]===undefined?radiusTopRight:arguments[3];var radiusBottomLeft=arguments.length<=4||arguments[4]===undefined?radiusBottomRight:arguments[4];_classCallCheck(this,RoundRectDrawable);var _this13=_possibleConstructorReturn(this,Object.getPrototypeOf(RoundRectDrawable).call(this));_this13.mMutated=false;_this13.mPaint=new graphics.Paint();_this13.mState=new State();_this13.setColor(color);_this13.mState.mRadiusTopLeft=radiusTopLeft;_this13.mState.mRadiusTopRight=radiusTopRight;_this13.mState.mRadiusBottomRight=radiusBottomRight;_this13.mState.mRadiusBottomLeft=radiusBottomLeft;return _this13;}_createClass(RoundRectDrawable,[{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(RoundRectDrawable.prototype),'mutate',this).call(this)==this){this.mState=new State(this.mState);this.mMutated=true;}return this;}},{key:'draw',value:function draw(canvas){if(this.mState.mUseColor>>>24!=0){this.mPaint.setColor(this.mState.mUseColor);canvas.drawRoundRect(this.getBounds(),this.mState.mRadiusTopLeft,this.mState.mRadiusTopRight,this.mState.mRadiusBottomRight,this.mState.mRadiusBottomLeft,this.mPaint);}}},{key:'getColor',value:function getColor(){return this.mState.mUseColor;}},{key:'setColor',value:function setColor(color){if(this.mState.mBaseColor!=color||this.mState.mUseColor!=color){this.invalidateSelf();this.mState.mBaseColor=this.mState.mUseColor=color;}}},{key:'getAlpha',value:function getAlpha(){return this.mState.mUseColor>>>24;}},{key:'setAlpha',value:function setAlpha(alpha){alpha+=alpha>>7;var baseAlpha=this.mState.mBaseColor>>>24;var useAlpha=baseAlpha*alpha>>8;var oldUseColor=this.mState.mUseColor;this.mState.mUseColor=this.mState.mBaseColor<<8>>>8|useAlpha<<24;if(oldUseColor!=this.mState.mUseColor){this.invalidateSelf();}}},{key:'getOpacity',value:function getOpacity(){switch(this.mState.mUseColor>>>24){case 255:return graphics.PixelFormat.OPAQUE;case 0:return graphics.PixelFormat.TRANSPARENT;}return graphics.PixelFormat.TRANSLUCENT;}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return RoundRectDrawable;}(drawable.Drawable);drawable.RoundRectDrawable=RoundRectDrawable;var State=function(){function State(state){_classCallCheck(this,State);this.mBaseColor=0;this.mUseColor=0;this.mRadiusTopLeft=0;this.mRadiusTopRight=0;this.mRadiusBottomRight=0;this.mRadiusBottomLeft=0;if(state!=null){this.mBaseColor=state.mBaseColor;this.mUseColor=state.mUseColor;this.mRadiusTopLeft=state.mRadiusTopLeft;this.mRadiusTopRight=state.mRadiusTopRight;this.mRadiusBottomRight=state.mRadiusBottomRight;this.mRadiusBottomLeft=state.mRadiusBottomLeft;}}_createClass(State,[{key:'newDrawable',value:function newDrawable(){var c=new RoundRectDrawable(0,0,0,0,0);c.mState=new State(this);return c;}}]);return State;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var hashCodeGenerator=0;var JavaObject=function(){function JavaObject(){_classCallCheck(this,JavaObject);this.hash=hashCodeGenerator++;}_createClass(JavaObject,[{key:'hashCode',value:function hashCode(){return this.hash;}},{key:'getClass',value:function getClass(){return Class.getClass(this.constructor);}},{key:'equals',value:function equals(o){return this===o;}}],[{key:'class',get:function get(){return Class.getClass(this);}}]);return JavaObject;}();lang.JavaObject=JavaObject;var Class=function(){function Class(clazz){_classCallCheck(this,Class);this.clazz=clazz;}_createClass(Class,[{key:'getName',value:function getName(){return this.clazz.name;}},{key:'getSimpleName',value:function getSimpleName(){return this.clazz.name;}}],[{key:'getClass',value:function getClass(clazz){var c=Class.classCache.get(clazz);if(!c){c=new Class(clazz);Class.classCache.set(clazz,c);}return c;}}]);return Class;}();Class.classCache=new Map();lang.Class=Class;})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var util;(function(util){var concurrent;(function(concurrent){var CopyOnWriteArrayList=function(){function CopyOnWriteArrayList(){_classCallCheck(this,CopyOnWriteArrayList);this.mData=[];this.isDataNew=true;}_createClass(CopyOnWriteArrayList,[{key:'iterator',value:function iterator(){this.isDataNew=false;return this.mData;}},{key:Symbol.iterator,value:function value(){this.isDataNew=false;return this.mData[Symbol.iterator]();}},{key:'checkNewData',value:function checkNewData(){if(!this.isDataNew){this.isDataNew=true;this.mData=[].concat(_toConsumableArray(this.mData));}}},{key:'size',value:function size(){return this.mData.length;}},{key:'add',value:function add(){var _mData;this.checkNewData();(_mData=this.mData).push.apply(_mData,arguments);}},{key:'addAll',value:function addAll(array){var _mData2;this.checkNewData();(_mData2=this.mData).push.apply(_mData2,_toConsumableArray(array.mData));}},{key:'remove',value:function remove(item){this.checkNewData();this.mData.splice(this.mData.indexOf(item),1);}}]);return CopyOnWriteArrayList;}();concurrent.CopyOnWriteArrayList=CopyOnWriteArrayList;})(concurrent=util.concurrent||(util.concurrent={}));})(util=lang.util||(lang.util={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var util;(function(util){var Access=function(){function Access(){_classCallCheck(this,Access);}_createClass(Access,[{key:'get',value:function get(index){return this.mData[index];}},{key:'size',value:function size(){return this.mSize;}}]);return Access;}();var CopyOnWriteArray=function(){function CopyOnWriteArray(){_classCallCheck(this,CopyOnWriteArray);this.mData=[];this.mAccess=new Access();}_createClass(CopyOnWriteArray,[{key:'getArray',value:function getArray(){if(this.mStart){if(this.mDataCopy==null)this.mDataCopy=[].concat(_toConsumableArray(this.mData));return this.mDataCopy;}return this.mData;}},{key:'start',value:function start(){if(this.mStart)throw new Error("Iteration already started");this.mStart=true;this.mDataCopy=null;this.mAccess.mData=this.mData;this.mAccess.mSize=this.mData.length;return this.mAccess.mData;}},{key:'end',value:function end(){if(!this.mStart)throw new Error("Iteration not started");this.mStart=false;if(this.mDataCopy!=null){this.mData=this.mDataCopy;this.mAccess.mData=[];this.mAccess.mSize=0;}this.mDataCopy=null;}},{key:'size',value:function size(){return this.getArray().length;}},{key:'add',value:function add(){var _getArray;(_getArray=this.getArray()).push.apply(_getArray,arguments);}},{key:'addAll',value:function addAll(array){var _getArray2;(_getArray2=this.getArray()).push.apply(_getArray2,_toConsumableArray(array.mData));}},{key:'remove',value:function remove(item){this.getArray().splice(this.getArray().indexOf(item),1);}}]);return CopyOnWriteArray;}();util.CopyOnWriteArray=CopyOnWriteArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var CopyOnWriteArrayList=java.lang.util.concurrent.CopyOnWriteArrayList;var CopyOnWriteArray=android.util.CopyOnWriteArray;var ViewTreeObserver=function(){function ViewTreeObserver(){_classCallCheck(this,ViewTreeObserver);this.mAlive=true;}_createClass(ViewTreeObserver,[{key:'addOnGlobalLayoutListener',value:function addOnGlobalLayoutListener(listener){this.checkIsAlive();if(this.mOnGlobalLayoutListeners==null){this.mOnGlobalLayoutListeners=new CopyOnWriteArray();}this.mOnGlobalLayoutListeners.add(listener);}},{key:'removeGlobalOnLayoutListener',value:function removeGlobalOnLayoutListener(victim){this.removeOnGlobalLayoutListener(victim);}},{key:'removeOnGlobalLayoutListener',value:function removeOnGlobalLayoutListener(victim){this.checkIsAlive();if(this.mOnGlobalLayoutListeners==null){return;}this.mOnGlobalLayoutListeners.remove(victim);}},{key:'dispatchOnGlobalLayout',value:function dispatchOnGlobalLayout(){var listeners=this.mOnGlobalLayoutListeners;if(listeners!=null&&listeners.size()>0){var access=listeners.start();try{var count=access.length;for(var i=0;i0){var access=listeners.start();try{var count=access.length;for(var i=0;i0){var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=listeners[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var listener=_step3.value;listener.onTouchModeChanged(inTouchMode);}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally {try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally {if(_didIteratorError3){throw _iteratorError3;}}}}}},{key:'addOnScrollChangedListener',value:function addOnScrollChangedListener(listener){this.checkIsAlive();if(this.mOnScrollChangedListeners==null){this.mOnScrollChangedListeners=new CopyOnWriteArray();}this.mOnScrollChangedListeners.add(listener);}},{key:'removeOnScrollChangedListener',value:function removeOnScrollChangedListener(victim){this.checkIsAlive();if(this.mOnScrollChangedListeners==null){return;}this.mOnScrollChangedListeners.remove(victim);}},{key:'dispatchOnScrollChanged',value:function dispatchOnScrollChanged(){var listeners=this.mOnScrollChangedListeners;if(listeners!=null&&listeners.size()>0){var access=listeners.start();try{var count=access.length;for(var i=0;i\n \n \n \n \n \n \n","alert_dialog":"\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n","alert_dialog_progress":"\n \n \n \n","popup_menu_item_layout":"\n\n \n \n \n \n\n \n\n \n\n \n\n \n \n","select_dialog":"","select_dialog_item":"","select_dialog_multichoice":"","select_dialog_singlechoice":"","simple_spinner_dropdown_item":"","simple_spinner_item":"","transient_notification":"\n\n \n\n"};var _tempDiv=document.createElement('div');var layout=function(){function layout(){_classCallCheck(this,layout);}_createClass(layout,null,[{key:'getLayoutData',value:function getLayoutData(layoutName){if(!layoutName)return null;if(!_layout_data[layoutName])return null;_tempDiv.innerHTML=_layout_data[layoutName];var data=_tempDiv.firstElementChild;_tempDiv.removeChild(data);return data;}}]);return layout;}();layout.action_bar='@android:layout/action_bar';layout.alert_dialog='@android:layout/alert_dialog';layout.alert_dialog_progress='@android:layout/alert_dialog_progress';layout.popup_menu_item_layout='@android:layout/popup_menu_item_layout';layout.select_dialog='@android:layout/select_dialog';layout.select_dialog_item='@android:layout/select_dialog_item';layout.select_dialog_multichoice='@android:layout/select_dialog_multichoice';layout.select_dialog_singlechoice='@android:layout/select_dialog_singlechoice';layout.simple_spinner_dropdown_item='@android:layout/simple_spinner_dropdown_item';layout.simple_spinner_item='@android:layout/simple_spinner_item';layout.transient_notification='@android:layout/transient_notification';R.layout=layout;})(R=android.R||(android.R={}));})(android||(android={}));var androidui;(function(androidui){var attr;(function(attr){var AttrValueParser=function(){function AttrValueParser(){_classCallCheck(this,AttrValueParser);}_createClass(AttrValueParser,null,[{key:'parseString',value:function parseString(r,value){var defValue=arguments.length<=2||arguments[2]===undefined?value:arguments[2];if(value==null)return defValue;if(value.startsWith('@')){try{return r.getString(value);}catch(e){console.warn(e);}}return defValue;}},{key:'parseBoolean',value:function parseBoolean(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getBoolean(value);}catch(e){console.warn(e);}}if(value==='false'||value==='0')return false;else if(value==='true'||value==='1'||value==='')return true;return defValue;}},{key:'parseInt',value:function(_parseInt){function parseInt(_x30,_x31,_x32){return _parseInt.apply(this,arguments);}parseInt.toString=function(){return _parseInt.toString();};return parseInt;}(function(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getInteger(value);}catch(e){console.warn(e);}}var v=parseInt(value);if(isNaN(v))return defValue;return v;})},{key:'parseFloat',value:function(_parseFloat){function parseFloat(_x33,_x34,_x35){return _parseFloat.apply(this,arguments);}parseFloat.toString=function(){return _parseFloat.toString();};return parseFloat;}(function(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getFloat(value);}catch(e){console.warn(e);}}var v=parseFloat(value);if(isNaN(v))return defValue;if(value.endsWith('%'))v/=100;return v;})},{key:'parseColor',value:function parseColor(r,value,defValue){if(value==null)return defValue;try{if(value.startsWith('@')){return r.getColor(value);}else {return android.graphics.Color.parseColor(value);}}catch(e){console.warn(e);}return defValue;}},{key:'parseColorStateList',value:function parseColorStateList(r,value){if(value==null)return null;if(value.startsWith('@')){return r.getColorStateList(value);}else {try{var color=android.graphics.Color.parseColor(value);return android.content.res.ColorStateList.valueOf(color);}catch(e){console.warn(e);}}return null;}},{key:'parseDimension',value:function parseDimension(r,value,defValue){var baseValue=arguments.length<=3||arguments[3]===undefined?0:arguments[3];if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimension(value,baseValue);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimension(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDimensionPixelOffset',value:function parseDimensionPixelOffset(r,value,defValue){var baseValue=arguments.length<=3||arguments[3]===undefined?0:arguments[3];if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimensionPixelOffset(value,baseValue);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimensionPixelOffset(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDimensionPixelSize',value:function parseDimensionPixelSize(r,value,defValue){var baseValue=arguments.length<=3||arguments[3]===undefined?0:arguments[3];if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimensionPixelSize(value);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimensionPixelSize(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDrawable',value:function parseDrawable(r,value){if(value==null)return null;if(value.startsWith('@')){try{return r.getDrawable(value);}catch(e){console.warn(e);}}else if(value.startsWith('url(')){value=value.substring('url('.length);if(value.endsWith(')'))value=value.substring(0,value.length-1);return new androidui.image.NetDrawable(value);}else {try{var color=android.graphics.Color.parseColor(value);return new android.graphics.drawable.ColorDrawable(color);}catch(e){}}return null;}},{key:'parseTextArray',value:function parseTextArray(r,value){if(value==null)return null;if(value.startsWith('@')){return r.getStringArray(value);}else {try{var json=JSON.parse(value);if(json instanceof Array)return json;}catch(e){}}return null;}}]);return AttrValueParser;}();attr.AttrValueParser=AttrValueParser;})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));var android;(function(android){var content;(function(content){var res;(function(res_1){var AttrValueParser=androidui.attr.AttrValueParser;var TypedArray=function(){function TypedArray(res,xml){_classCallCheck(this,TypedArray);this.mResources=res;this.mXml=xml;}_createClass(TypedArray,[{key:'checkRecycled',value:function checkRecycled(){if(this.mRecycled){throw new Error("RuntimeException : Cannot make calls to a recycled instance!");}}},{key:'length',value:function length(){this.checkRecycled();return this.mXml.attributes.length;}},{key:'getResources',value:function getResources(){return this.mResources;}},{key:'getText',value:function getText(attrName){return this.getString(attrName);}},{key:'getString',value:function getString(attrName){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseString(this.mResources,value,null);}},{key:'getBoolean',value:function getBoolean(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseBoolean(this.mResources,value,defValue);}},{key:'getInt',value:function getInt(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseInt(this.mResources,value,defValue);}},{key:'getFloat',value:function getFloat(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseFloat(this.mResources,value,defValue);}},{key:'getColor',value:function getColor(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseColor(this.mResources,value,defValue);}},{key:'getColorStateList',value:function getColorStateList(attrName){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseColorStateList(this.mResources,value);}},{key:'getInteger',value:function getInteger(attrName,defValue){return this.getInt(attrName,defValue);}},{key:'getDimension',value:function getDimension(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseDimension(this.mResources,value,defValue);}},{key:'getDimensionPixelOffset',value:function getDimensionPixelOffset(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseDimensionPixelOffset(this.mResources,value,defValue);}},{key:'getDimensionPixelSize',value:function getDimensionPixelSize(attrName,defValue){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseDimensionPixelSize(this.mResources,value,defValue);}},{key:'getDrawable',value:function getDrawable(attrName){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseDrawable(this.mResources,value);}},{key:'getTextArray',value:function getTextArray(attrName){this.checkRecycled();var value=this.mXml.getAttribute(attrName);return AttrValueParser.parseTextArray(this.mResources,value);}},{key:'hasValue',value:function hasValue(attrName){this.checkRecycled();return this.mXml.getAttribute(attrName)!=null;}},{key:'hasValueOrEmpty',value:function hasValueOrEmpty(attrName){this.checkRecycled();return this.mXml.hasAttribute(attrName);}},{key:'recycle',value:function recycle(){this.mRecycled=true;this.mXml=null;this.mResources.mTypedArrayPool.release(this);}}],[{key:'obtain',value:function obtain(res,xml){var attrs=res.mTypedArrayPool.acquire();if(attrs!=null){attrs.mRecycled=false;attrs.mXml=xml;return attrs;}return new TypedArray(res,xml);}}]);return TypedArray;}();res_1.TypedArray=TypedArray;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var content;(function(content){var res;(function(res){var DisplayMetrics=android.util.DisplayMetrics;var Drawable=android.graphics.drawable.Drawable;var Color=android.graphics.Color;var SynchronizedPool=android.util.Pools.SynchronizedPool;var ColorDrawable=android.graphics.drawable.ColorDrawable;var Resources=function(){function Resources(context){var _this15=this;_classCallCheck(this,Resources);this.mTypedArrayPool=new SynchronizedPool(5);this.context=context;window.addEventListener('resize',function(){if(_this15.displayMetrics){_this15.fillDisplayMetrics(_this15.displayMetrics);}});}_createClass(Resources,[{key:'getDisplayMetrics',value:function getDisplayMetrics(){if(this.displayMetrics)return this.displayMetrics;this.displayMetrics=new DisplayMetrics();this.fillDisplayMetrics(this.displayMetrics);return this.displayMetrics;}},{key:'fillDisplayMetrics',value:function fillDisplayMetrics(displayMetrics){var density=window.devicePixelRatio;displayMetrics.xdpi=window.screen.deviceXDPI||DisplayMetrics.DENSITY_DEFAULT;displayMetrics.ydpi=window.screen.deviceYDPI||DisplayMetrics.DENSITY_DEFAULT;displayMetrics.density=density;displayMetrics.densityDpi=density*DisplayMetrics.DENSITY_DEFAULT;displayMetrics.scaledDensity=density;var contentEle=this.context?this.context.androidUI.androidUIElement:document.documentElement;displayMetrics.widthPixels=contentEle.offsetWidth*density;displayMetrics.heightPixels=contentEle.offsetHeight*density;}},{key:'getDefStyle',value:function getDefStyle(refString){if(refString.startsWith('@android:attr/')){refString=refString.substring('@android:attr/'.length);return android.R.attr[refString];}}},{key:'getDrawable',value:function getDrawable(refString){if(refString.startsWith('@android:drawable/')){refString=refString.substring('@android:drawable/'.length);return android.R.drawable[refString]||android.R.image[refString];}if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(color instanceof res.ColorStateList){color=color.getDefaultColor();}return new ColorDrawable(color);}if(Resources._AppBuildImageFileFinder){var drawable=Resources._AppBuildImageFileFinder(refString);if(drawable)return drawable;}if(!refString.startsWith('@')){refString='@drawable/'+refString;}var ele=this.getXml(refString);if(ele){return Drawable.createFromXml(this,ele);}ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:drawable/')||text.startsWith('@drawable/')||text.startsWith('@android:color/')||text.startsWith('@color/')){return this.getDrawable(text);}return Drawable.createFromXml(this,ele);}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getColor',value:function getColor(refString){if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(color instanceof res.ColorStateList){color=color.getDefaultColor();}return color;}else {if(!refString.startsWith('@color/')){refString='@color/'+refString;}var ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:color/')||text.startsWith('@color/')){return this.getColor(text);}return Color.parseColor(text);}ele=this.getXml(refString);if(ele){var colorList=res.ColorStateList.createFromXml(this,ele);if(colorList)return colorList.getDefaultColor();}}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getColorStateList',value:function getColorStateList(refString){if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(typeof color==="number"){color=res.ColorStateList.valueOf(color);}return color;}else {if(!refString.startsWith('@color/')){refString='@color/'+refString;}var ele=this.getXml(refString);if(ele){return res.ColorStateList.createFromXml(this,ele);}ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:color/')||text.startsWith('@color/')){return this.getColorStateList(text);}return res.ColorStateList.valueOf(Color.parseColor(text));}}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimension',value:function getDimension(refString){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimension(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimensionPixelOffset',value:function getDimensionPixelOffset(refString){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimensionPixelOffset(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimensionPixelSize',value:function getDimensionPixelSize(refString){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimensionPixelSize(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getBoolean',value:function getBoolean(refString){if(!refString.startsWith('@bool/'))refString='@bool/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return text=='true';}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getInteger',value:function getInteger(refString){if(!refString.startsWith('@integer/'))refString='@integer/'+refString;var ele=this.getValue(refString);if(ele){return parseInt(ele.innerText);}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getIntArray',value:function getIntArray(refString){if(!refString.startsWith('@array/'))refString='@array/'+refString;var ele=this.getValue(refString);if(ele){var intArray=[];var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=Array.from(ele.children)[Symbol.iterator](),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var child=_step7.value;intArray.push(parseInt(child.innerText));}}catch(err){_didIteratorError7=true;_iteratorError7=err;}finally {try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return();}}finally {if(_didIteratorError7){throw _iteratorError7;}}}return intArray;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getFloat',value:function getFloat(refString){return this.getDimension(refString);}},{key:'getString',value:function getString(refString){if(refString.startsWith('@android:string/')){refString=refString.substring('@android:string/'.length);return android.R.string_[refString];}if(!refString.startsWith('@string/'))refString='@string/'+refString;var ele=this.getValue(refString);if(ele){return ele.innerText;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getStringArray',value:function getStringArray(refString){if(!refString.startsWith('@array/'))refString='@array/'+refString;var ele=this.getValue(refString);if(ele){var stringArray=[];var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=Array.from(ele.children)[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var child=_step8.value;stringArray.push(child.innerText);}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally {try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally {if(_didIteratorError8){throw _iteratorError8;}}}return stringArray;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getLayout',value:function getLayout(refString){if(!refString||!refString.trim().startsWith('@'))return null;if(refString.startsWith('@android:layout/')){refString=refString.substring('@android:layout/'.length);return android.R.layout.getLayoutData(refString);}if(!refString.startsWith('@layout/'))refString='@layout/'+refString;var ele=this.getXml(refString);if(ele)return ele;throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getStyleAsMap',value:function getStyleAsMap(refString){var _this16=this;if(!refString.startsWith('@style/')){refString='@style/'+refString;}var styleMap=new Map();var parseStyle=function parseStyle(refString){var styleXml=_this16.getValue(refString);if(!styleXml)return;var parent=styleXml.getAttribute('parent');if(parent){if(!parent.startsWith('@style/')){parent='@style/'+parent;}parseStyle(parent);}var styleName=refString.substring('@style/'.length);if(styleName.includes('.')){var parts=styleName.split('.');parts.shift();var nameParent=parts.join('.');parseStyle('@style/'+nameParent);}var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=Array.from(styleXml.children)[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var item=_step9.value;var name=item.getAttribute('name');if(name){styleMap.set(name,item.innerText);}}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally {try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally {if(_didIteratorError9){throw _iteratorError9;}}}};parseStyle(refString);return styleMap;}},{key:'getXml',value:function getXml(refString){if(Resources._AppBuildXmlFinder)return Resources._AppBuildXmlFinder(refString);}},{key:'getValue',value:function getValue(refString){var resolveRefs=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(Resources._AppBuildValueFinder){var ele=Resources._AppBuildValueFinder(refString);if(!ele)return null;if(resolveRefs&&ele.children.length==0){var str=ele.innerText;if(str.startsWith('@')){return this.getValue(refString,true)||ele;}}return ele;}}},{key:'obtainAttributes',value:function obtainAttributes(attrs){return res.TypedArray.obtain(this,attrs);}}],[{key:'getSystem',value:function getSystem(){return Resources.instance;}},{key:'from',value:function from(context){return context.getResources();}},{key:'getDisplayMetrics',value:function getDisplayMetrics(){return Resources.instance.getDisplayMetrics();}},{key:'buildDrawableFinder',set:function set(value){throw Error('Error: old build tool not support. Please update your build_res.js file.');}},{key:'buildLayoutFinder',set:function set(value){throw Error('Error: old build tool not support. Please update your build_res.js file.');}},{key:'buildResourcesElement',get:function get(){throw Error('Error: old build tool not support. Please update your build_res.js file.');}}]);return Resources;}();Resources.instance=new Resources();Resources._AppBuildImageFileFinder=null;Resources._AppBuildXmlFinder=null;Resources._AppBuildValueFinder=null;res.Resources=Resources;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var view;(function(view){var ViewConfiguration=function(){function ViewConfiguration(){_classCallCheck(this,ViewConfiguration);this.density=android.content.res.Resources.getDisplayMetrics().density;this.sizeAndDensity=this.density;this.mEdgeSlop=this.sizeAndDensity*ViewConfiguration.EDGE_SLOP;this.mFadingEdgeLength=this.sizeAndDensity*ViewConfiguration.FADING_EDGE_LENGTH;this.mMinimumFlingVelocity=this.density*ViewConfiguration.MINIMUM_FLING_VELOCITY;this.mMaximumFlingVelocity=this.density*ViewConfiguration.MAXIMUM_FLING_VELOCITY;this.mScrollbarSize=this.density*ViewConfiguration.SCROLL_BAR_SIZE;this.mTouchSlop=this.density*ViewConfiguration.TOUCH_SLOP;this.mDoubleTapTouchSlop=this.sizeAndDensity*ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP;this.mPagingTouchSlop=this.density*ViewConfiguration.PAGING_TOUCH_SLOP;this.mDoubleTapSlop=this.density*ViewConfiguration.DOUBLE_TAP_SLOP;this.mWindowTouchSlop=this.sizeAndDensity*ViewConfiguration.WINDOW_TOUCH_SLOP;this.mOverscrollDistance=this.sizeAndDensity*ViewConfiguration.OVERSCROLL_DISTANCE;this.mOverflingDistance=this.sizeAndDensity*ViewConfiguration.OVERFLING_DISTANCE;this.mMaximumDrawingCacheSize=android.content.res.Resources.getDisplayMetrics().widthPixels*android.content.res.Resources.getDisplayMetrics().heightPixels*4*2;}_createClass(ViewConfiguration,[{key:'getScaledScrollBarSize',value:function getScaledScrollBarSize(){return this.mScrollbarSize;}},{key:'getScaledFadingEdgeLength',value:function getScaledFadingEdgeLength(){return this.mFadingEdgeLength;}},{key:'getScaledEdgeSlop',value:function getScaledEdgeSlop(){return this.mEdgeSlop;}},{key:'getScaledTouchSlop',value:function getScaledTouchSlop(){return this.mTouchSlop;}},{key:'getScaledDoubleTapTouchSlop',value:function getScaledDoubleTapTouchSlop(){return this.mDoubleTapTouchSlop;}},{key:'getScaledPagingTouchSlop',value:function getScaledPagingTouchSlop(){return this.mPagingTouchSlop;}},{key:'getScaledDoubleTapSlop',value:function getScaledDoubleTapSlop(){return this.mDoubleTapSlop;}},{key:'getScaledWindowTouchSlop',value:function getScaledWindowTouchSlop(){return this.mWindowTouchSlop;}},{key:'getScaledMinimumFlingVelocity',value:function getScaledMinimumFlingVelocity(){return this.mMinimumFlingVelocity;}},{key:'getScaledMaximumFlingVelocity',value:function getScaledMaximumFlingVelocity(){return this.mMaximumFlingVelocity;}},{key:'getScaledMaximumDrawingCacheSize',value:function getScaledMaximumDrawingCacheSize(){return this.mMaximumDrawingCacheSize;}},{key:'getScaledOverscrollDistance',value:function getScaledOverscrollDistance(){return this.mOverscrollDistance;}},{key:'getScaledOverflingDistance',value:function getScaledOverflingDistance(){return this.mOverflingDistance;}}],[{key:'get',value:function get(arg){if(!ViewConfiguration.instance){ViewConfiguration.instance=new ViewConfiguration();}return ViewConfiguration.instance;}},{key:'getScrollBarFadeDuration',value:function getScrollBarFadeDuration(){return ViewConfiguration.SCROLL_BAR_FADE_DURATION;}},{key:'getScrollDefaultDelay',value:function getScrollDefaultDelay(){return ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY;}},{key:'getPressedStateDuration',value:function getPressedStateDuration(){return ViewConfiguration.PRESSED_STATE_DURATION;}},{key:'getLongPressTimeout',value:function getLongPressTimeout(){return ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;}},{key:'getKeyRepeatDelay',value:function getKeyRepeatDelay(){return ViewConfiguration.KEY_REPEAT_DELAY;}},{key:'getTapTimeout',value:function getTapTimeout(){return ViewConfiguration.TAP_TIMEOUT;}},{key:'getJumpTapTimeout',value:function getJumpTapTimeout(){return ViewConfiguration.JUMP_TAP_TIMEOUT;}},{key:'getDoubleTapTimeout',value:function getDoubleTapTimeout(){return ViewConfiguration.DOUBLE_TAP_TIMEOUT;}},{key:'getDoubleTapMinTime',value:function getDoubleTapMinTime(){return ViewConfiguration.DOUBLE_TAP_MIN_TIME;}},{key:'getScrollFriction',value:function getScrollFriction(){return ViewConfiguration.SCROLL_FRICTION;}}]);return ViewConfiguration;}();ViewConfiguration.SCROLL_BAR_SIZE=8;ViewConfiguration.SCROLL_BAR_FADE_DURATION=250;ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY=300;ViewConfiguration.FADING_EDGE_LENGTH=12;ViewConfiguration.PRESSED_STATE_DURATION=64;ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT=500;ViewConfiguration.KEY_REPEAT_DELAY=50;ViewConfiguration.GLOBAL_ACTIONS_KEY_TIMEOUT=500;ViewConfiguration.TAP_TIMEOUT=180;ViewConfiguration.JUMP_TAP_TIMEOUT=500;ViewConfiguration.DOUBLE_TAP_TIMEOUT=300;ViewConfiguration.DOUBLE_TAP_MIN_TIME=40;ViewConfiguration.HOVER_TAP_TIMEOUT=150;ViewConfiguration.HOVER_TAP_SLOP=20;ViewConfiguration.ZOOM_CONTROLS_TIMEOUT=3000;ViewConfiguration.EDGE_SLOP=12;ViewConfiguration.TOUCH_SLOP=8;ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP=ViewConfiguration.TOUCH_SLOP;ViewConfiguration.PAGING_TOUCH_SLOP=ViewConfiguration.TOUCH_SLOP*2;ViewConfiguration.DOUBLE_TAP_SLOP=100;ViewConfiguration.WINDOW_TOUCH_SLOP=16;ViewConfiguration.MINIMUM_FLING_VELOCITY=50;ViewConfiguration.MAXIMUM_FLING_VELOCITY=8000;ViewConfiguration.SCROLL_FRICTION=0.015;ViewConfiguration.OVERSCROLL_DISTANCE=800;ViewConfiguration.OVERFLING_DISTANCE=100;view.ViewConfiguration=ViewConfiguration;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var SystemClock=function(){function SystemClock(){_classCallCheck(this,SystemClock);}_createClass(SystemClock,null,[{key:'uptimeMillis',value:function uptimeMillis(){return new Date().getTime();}}]);return SystemClock;}();os.SystemClock=SystemClock;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var ViewConfiguration=android.view.ViewConfiguration;var tempBound=new Rect();var ID_FixID_Cache=[];function fixEventId(e){for(var i=0,length=e.changedTouches.length;i=0)return;for(var i=0,length=ID_FixID_Cache.length+1;iMotionEvent.HistoryMaxSize)moveHistory.shift();}break;}this.mTouchingPointers=Array.from(e.touches);if(baseAction===MotionEvent.ACTION_UP||baseAction===MotionEvent.ACTION_CANCEL){this.mTouchingPointers.splice(actionIndex,0,activeTouch);}if(this.mTouchingPointers.length>1){switch(action){case MotionEvent.ACTION_DOWN:action=MotionEvent.ACTION_POINTER_DOWN;action=actionIndex<>MotionEvent.ACTION_POINTER_INDEX_SHIFT;}},{key:'getDownTime',value:function getDownTime(){return this.mDownTime;}},{key:'getEventTime',value:function getEventTime(){return this.mEventTime;}},{key:'getX',value:function getX(){var pointerIndex=arguments.length<=0||arguments[0]===undefined?0:arguments[0];var density=android.content.res.Resources.getDisplayMetrics().density;return this.mTouchingPointers[pointerIndex].pageX*density+this.mXOffset;}},{key:'getY',value:function getY(){var pointerIndex=arguments.length<=0||arguments[0]===undefined?0:arguments[0];var density=android.content.res.Resources.getDisplayMetrics().density;return this.mTouchingPointers[pointerIndex].pageY*density+this.mYOffset;}},{key:'getPointerCount',value:function getPointerCount(){return this.mTouchingPointers.length;}},{key:'getPointerId',value:function getPointerId(pointerIndex){return this.mTouchingPointers[pointerIndex].id_fix;}},{key:'findPointerIndex',value:function findPointerIndex(pointerId){for(var i=0,length=this.mTouchingPointers.length;i=0;});return ev;}},{key:'getAxisValue',value:function getAxisValue(axis){var value=this._axisValues.get(axis);return value?value:0;}},{key:'toString',value:function toString(){return "MotionEvent{action="+this.getAction()+" x="+this.getX()+" y="+this.getY()+"}";}}],[{key:'obtainWithTouchEvent',value:function obtainWithTouchEvent(e,action){var event=new MotionEvent();event.initWithTouch(e,action);return event;}},{key:'obtain',value:function obtain(event){var newEv=new MotionEvent();Object.assign(newEv,event);return newEv;}},{key:'obtainWithAction',value:function obtainWithAction(downTime,eventTime,action,x,y){var metaState=arguments.length<=5||arguments[5]===undefined?0:arguments[5];var newEv=new MotionEvent();newEv.mAction=action;newEv.mDownTime=downTime;newEv.mEventTime=eventTime;var touch={id_fix:0,target:null,screenX:x,screenY:y,clientX:x,clientY:y,pageX:x,pageY:y};newEv.mTouchingPointers=[touch];return newEv;}}]);return MotionEvent;}();MotionEvent.INVALID_POINTER_ID=-1;MotionEvent.ACTION_MASK=0xff;MotionEvent.ACTION_DOWN=0;MotionEvent.ACTION_UP=1;MotionEvent.ACTION_MOVE=2;MotionEvent.ACTION_CANCEL=3;MotionEvent.ACTION_OUTSIDE=4;MotionEvent.ACTION_POINTER_DOWN=5;MotionEvent.ACTION_POINTER_UP=6;MotionEvent.ACTION_HOVER_MOVE=7;MotionEvent.ACTION_SCROLL=8;MotionEvent.ACTION_HOVER_ENTER=9;MotionEvent.ACTION_HOVER_EXIT=10;MotionEvent.EDGE_TOP=0x00000001;MotionEvent.EDGE_BOTTOM=0x00000002;MotionEvent.EDGE_LEFT=0x00000004;MotionEvent.EDGE_RIGHT=0x00000008;MotionEvent.ACTION_POINTER_INDEX_MASK=0xff00;MotionEvent.ACTION_POINTER_INDEX_SHIFT=8;MotionEvent.AXIS_VSCROLL=9;MotionEvent.AXIS_HSCROLL=10;MotionEvent.HistoryMaxSize=10;MotionEvent.TouchMoveRecord=new Map();MotionEvent.IdIndexCache=new Map();view.MotionEvent=MotionEvent;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var TouchDelegate=function(){function TouchDelegate(bounds,delegateView){_classCallCheck(this,TouchDelegate);this.mDelegateTargeted=false;this.mSlop=0;this.mBounds=bounds;this.mSlop=view.ViewConfiguration.get().getScaledTouchSlop();this.mSlopBounds=new Rect(bounds);this.mSlopBounds.inset(-this.mSlop,-this.mSlop);this.mDelegateView=delegateView;}_createClass(TouchDelegate,[{key:'onTouchEvent',value:function onTouchEvent(event){var x=event.getX();var y=event.getY();var sendToDelegate=false;var hit=true;var handled=false;switch(event.getAction()){case view.MotionEvent.ACTION_DOWN:var bounds=this.mBounds;if(bounds.contains(x,y)){this.mDelegateTargeted=true;sendToDelegate=true;}break;case view.MotionEvent.ACTION_UP:case view.MotionEvent.ACTION_MOVE:sendToDelegate=this.mDelegateTargeted;if(sendToDelegate){var slopBounds=this.mSlopBounds;if(!slopBounds.contains(x,y)){hit=false;}}break;case view.MotionEvent.ACTION_CANCEL:sendToDelegate=this.mDelegateTargeted;this.mDelegateTargeted=false;break;}if(sendToDelegate){var delegateView=this.mDelegateView;if(hit){event.setLocation(delegateView.getWidth()/2,delegateView.getHeight()/2);}else {var slop=this.mSlop;event.setLocation(-(slop*2),-(slop*2));}handled=delegateView.dispatchTouchEvent(event);}return handled;}}]);return TouchDelegate;}();view.TouchDelegate=TouchDelegate;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var StringBuilder=java.lang.StringBuilder;var Pools=android.util.Pools;var Message=function(){function Message(){_classCallCheck(this,Message);this.mType=Message.Type_Normal;this.what=0;this.arg1=0;this.arg2=0;this.when=0;}_createClass(Message,[{key:'recycle',value:function recycle(){this.clearForRecycle();Message.sPool.release(this);}},{key:'copyFrom',value:function copyFrom(o){this.mType=o.mType;this.what=o.what;this.arg1=o.arg1;this.arg2=o.arg2;this.obj=o.obj;}},{key:'setTarget',value:function setTarget(target){this.target=target;}},{key:'getTarget',value:function getTarget(){return this.target;}},{key:'sendToTarget',value:function sendToTarget(){this.target.sendMessage(this);}},{key:'clearForRecycle',value:function clearForRecycle(){this.mType=Message.Type_Normal;this.what=0;this.arg1=0;this.arg2=0;this.obj=null;this.when=0;this.target=null;this.callback=null;}},{key:'toString',value:function toString(){var now=arguments.length<=0||arguments[0]===undefined?os.SystemClock.uptimeMillis():arguments[0];var b=new StringBuilder();b.append("{ what=");b.append(this.what);b.append(" when=");b.append(this.when-now).append("ms");if(this.arg1!=0){b.append(" arg1=");b.append(this.arg1);}if(this.arg2!=0){b.append(" arg2=");b.append(this.arg2);}if(this.obj!=null){b.append(" obj=");b.append(this.obj);}b.append(" }");return b.toString();}}],[{key:'obtain',value:function obtain(){var m=Message.sPool.acquire();m=m||new Message();for(var _len14=arguments.length,args=Array(_len14),_key14=0;_key14<_len14;_key14++){args[_key14]=arguments[_key14];}if(args.length===1){if(args[0] instanceof Message){var orig=args[0];var _ref4=[orig.target,orig.what,orig.arg1,orig.arg2,orig.obj,orig.callback];m.target=_ref4[0];m.what=_ref4[1];m.arg1=_ref4[2];m.arg2=_ref4[3];m.obj=_ref4[4];m.callback=_ref4[5];}else if(args[0] instanceof os.Handler){m.target=args[0];}else {throw new Error('unknown args');}}else if(args.length===2){m.target=args[0];if(typeof args[1]==='number')m.what=args[1];else m.callback=args[1];}else if(args.length===3){m.target=args[0];m.what=args[1];m.obj=args[2];}else if(args.length===4){m.target=args[0];m.what=args[1];m.arg1=args[2];m.arg2=args[3];}else {m.target=args[0];m.what=args[1];var _args$39=args[2];m.arg1=_args$39===undefined?0:_args$39;m.arg2=args[3];m.obj=args[4];m.callback=args[5];}return m;}}]);return Message;}();Message.Type_Normal=0;Message.Type_Traversal=1;Message.sPool=new Pools.SynchronizedPool(10);os.Message=Message;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var os;(function(os){var requestAnimationFrame=window["requestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["oRequestAnimationFrame"]||window["msRequestAnimationFrame"];if(!requestAnimationFrame){requestAnimationFrame=function requestAnimationFrame(callback){return window.setTimeout(callback,1000/60);};}if(!window.requestAnimationFrame)window.requestAnimationFrame=requestAnimationFrame;var MessageQueue=function(){function MessageQueue(){_classCallCheck(this,MessageQueue);}_createClass(MessageQueue,null,[{key:'getMessages',value:function getMessages(h,args,object){var msgs=[];if(h==null){return msgs;}if(typeof args==="number"){var what=args;var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{for(var _iterator10=MessageQueue.messages[Symbol.iterator](),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){var p=_step10.value;if(p.target==h&&p.what==what&&(object==null||p.obj==object)){msgs.push(p);}}}catch(err){_didIteratorError10=true;_iteratorError10=err;}finally {try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return();}}finally {if(_didIteratorError10){throw _iteratorError10;}}}}else {var r=args;var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=MessageQueue.messages[Symbol.iterator](),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var _p=_step11.value;if(_p.target==h&&_p.callback==r&&(object==null||_p.obj==object)){msgs.push(_p);}}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally {try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally {if(_didIteratorError11){throw _iteratorError11;}}}}return msgs;}},{key:'hasMessages',value:function hasMessages(h,args,object){return MessageQueue.getMessages(h,args,object).length>0;}},{key:'enqueueMessage',value:function enqueueMessage(msg,when){if(msg.target==null){throw new Error("Message must have a target.");}msg.when=when;MessageQueue.messages.add(msg);MessageQueue.checkLoop();return true;}},{key:'recycleMessage',value:function recycleMessage(handler,message){message.recycle();MessageQueue.messages.delete(message);}},{key:'removeMessages',value:function removeMessages(h,args,object){var p=MessageQueue.getMessages(h,args,object);if(p&&p.length>0){var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=p[Symbol.iterator](),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var item=_step12.value;MessageQueue.recycleMessage(h,item);}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally {try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally {if(_didIteratorError12){throw _iteratorError12;}}}}}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(h,object){if(h==null){return;}var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=MessageQueue.messages[Symbol.iterator](),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var p=_step13.value;if(p!=null&&p.target==h&&(object==null||p.obj==object)){MessageQueue.recycleMessage(h,p);}}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally {try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally {if(_didIteratorError13){throw _iteratorError13;}}}}},{key:'checkLoop',value:function checkLoop(){if(!MessageQueue._loopActive){MessageQueue._loopActive=true;MessageQueue.requestNextLoop();}}},{key:'requestNextLoop',value:function requestNextLoop(){requestAnimationFrame(MessageQueue.loop);}},{key:'loop',value:function loop(){var normalMessages=[];var traversalMessages=[];var now=os.SystemClock.uptimeMillis();var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=MessageQueue.messages[Symbol.iterator](),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var msg=_step14.value;if(msg.when<=now){if(msg.mType===os.Message.Type_Traversal)traversalMessages.push(msg);else normalMessages.push(msg);}}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally {try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally {if(_didIteratorError14){throw _iteratorError14;}}}for(var i=0,length=normalMessages.length;i0)MessageQueue.requestNextLoop();else MessageQueue._loopActive=false;}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(MessageQueue.messages.has(msg)){MessageQueue.messages.delete(msg);msg.target.dispatchMessage(msg);MessageQueue.recycleMessage(msg.target,msg);}}}]);return MessageQueue;}();MessageQueue.messages=new Set();MessageQueue._loopActive=false;os.MessageQueue=MessageQueue;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var os;(function(os){var Handler=function(){function Handler(callback){_classCallCheck(this,Handler);this.mCallback=callback;}_createClass(Handler,[{key:'handleMessage',value:function handleMessage(msg){}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(msg.callback!=null){msg.callback.run();}else {if(this.mCallback!=null){if(this.mCallback.handleMessage(msg)){return;}}this.handleMessage(msg);}}},{key:'obtainMessage',value:function obtainMessage(){for(var _len15=arguments.length,args=Array(_len15),_key15=0;_key15<_len15;_key15++){args[_key15]=arguments[_key15];}if(args.length===2){var what=args[0];var obj=args[1];return os.Message.obtain(this,what,obj);}else {var _what=args[0];var arg1=args[1];var arg2=args[2];var _obj=args[3];return os.Message.obtain(this,_what,arg1,arg2,_obj);}}},{key:'post',value:function post(r){return this.sendMessageDelayed(Handler.getPostMessage(r),0);}},{key:'postAsTraversal',value:function postAsTraversal(r){var msg=Handler.getPostMessage(r);msg.mType=os.Message.Type_Traversal;return this.sendMessageDelayed(msg,0);}},{key:'postAtTime',value:function postAtTime(){for(var _len16=arguments.length,args=Array(_len16),_key16=0;_key16<_len16;_key16++){args[_key16]=arguments[_key16];}if(args.length===2){var r=args[0];var uptimeMillis=args[1];return this.sendMessageAtTime(Handler.getPostMessage(r),uptimeMillis);}else {var _r=args[0];var token=args[1];var _uptimeMillis=args[2];return this.sendMessageAtTime(Handler.getPostMessage(_r,token),_uptimeMillis);}}},{key:'postDelayed',value:function postDelayed(r,delayMillis){return this.sendMessageDelayed(Handler.getPostMessage(r),delayMillis);}},{key:'postAtFrontOfQueue',value:function postAtFrontOfQueue(r){return this.post(r);}},{key:'removeCallbacks',value:function removeCallbacks(r,token){os.MessageQueue.removeMessages(this,r,token);}},{key:'sendMessage',value:function sendMessage(msg){return this.sendMessageDelayed(msg,0);}},{key:'sendEmptyMessage',value:function sendEmptyMessage(what){return this.sendEmptyMessageDelayed(what,0);}},{key:'sendEmptyMessageDelayed',value:function sendEmptyMessageDelayed(what,delayMillis){var msg=os.Message.obtain();msg.what=what;return this.sendMessageDelayed(msg,delayMillis);}},{key:'sendEmptyMessageAtTime',value:function sendEmptyMessageAtTime(what,uptimeMillis){var msg=os.Message.obtain();msg.what=what;return this.sendMessageAtTime(msg,uptimeMillis);}},{key:'sendMessageDelayed',value:function sendMessageDelayed(msg,delayMillis){if(delayMillis<0){delayMillis=0;}return this.sendMessageAtTime(msg,os.SystemClock.uptimeMillis()+delayMillis);}},{key:'sendMessageAtTime',value:function sendMessageAtTime(msg,uptimeMillis){msg.target=this;return os.MessageQueue.enqueueMessage(msg,uptimeMillis);}},{key:'sendMessageAtFrontOfQueue',value:function sendMessageAtFrontOfQueue(msg){return this.sendMessage(msg);}},{key:'removeMessages',value:function removeMessages(what,object){os.MessageQueue.removeMessages(this,what,object);}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(token){os.MessageQueue.removeCallbacksAndMessages(this,token);}},{key:'hasMessages',value:function hasMessages(what,object){return os.MessageQueue.hasMessages(this,what,object);}}],[{key:'getPostMessage',value:function getPostMessage(r,token){var m=os.Message.obtain();m.obj=token;m.callback=r;return m;}}]);return Handler;}();os.Handler=Handler;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var content;(function(content){var res;(function(res){var SparseArray=android.util.SparseArray;var StateSet=android.util.StateSet;var WeakReference=java.lang.ref.WeakReference;var Color=android.graphics.Color;var ColorStateList=function(){function ColorStateList(states,colors){_classCallCheck(this,ColorStateList);this.mDefaultColor=0xffff0000;this.mStateSpecs=states;this.mColors=colors;if(states&&states.length>0){this.mDefaultColor=colors[0];for(var i=0;i1;}},{key:'getColorForState',value:function getColorForState(stateSet,defaultColor){var setLength=this.mStateSpecs.length;for(var i=0;i tag requires a \'android:color\' attribute.');}var alphaMod=Math.floor(Color.alpha(color)*alpha);alphaMod=Math.min(alphaMod,255);alphaMod=Math.max(alphaMod,0);color=color&0xFFFFFF|alphaMod<<24;colorList.push(color);stateSpecList.push(stateSpec);}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally {try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally {if(_didIteratorError15){throw _iteratorError15;}}}colorStateList=new ColorStateList(stateSpecList,colorList);}else {throw new Error('XmlPullParserException(invalid drawable tag: '+name);}return colorStateList;}}]);return ColorStateList;}();ColorStateList.EMPTY=[[]];ColorStateList.sCache=new SparseArray();res.ColorStateList=ColorStateList;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var util;(function(util){var TypedValue=function(){function TypedValue(){_classCallCheck(this,TypedValue);}_createClass(TypedValue,null,[{key:'initUnit',value:function initUnit(){this.initUnit=null;var temp=document.createElement('div');document.body.appendChild(temp);temp.style.height=100+TypedValue.COMPLEX_UNIT_PT;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_PT,temp.offsetHeight/100);temp.style.height=1+TypedValue.COMPLEX_UNIT_IN;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_IN,temp.offsetHeight);temp.style.height=100+TypedValue.COMPLEX_UNIT_MM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_MM,temp.offsetHeight/100);temp.style.height=10+TypedValue.COMPLEX_UNIT_EM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_EM,temp.offsetHeight/10);temp.style.height=10+TypedValue.COMPLEX_UNIT_REM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_REM,temp.offsetHeight/10);document.body.removeChild(temp);}},{key:'applyDimension',value:function applyDimension(unit,size,dm){var scale=1;if(unit===TypedValue.COMPLEX_UNIT_DP||unit===TypedValue.COMPLEX_UNIT_DIP||unit===TypedValue.COMPLEX_UNIT_SP){scale=dm.density;}else {scale=TypedValue.UNIT_SCALE_MAP.get(unit)||1;}return size*scale;}},{key:'isDynamicUnitValue',value:function isDynamicUnitValue(valueWithUnit){if(typeof valueWithUnit!="string")return false;return valueWithUnit.match(TypedValue.COMPLEX_UNIT_VH+'$|'+TypedValue.COMPLEX_UNIT_VW+'$|'+TypedValue.COMPLEX_UNIT_FRACTION+'$')!=null;}},{key:'complexToDimension',value:function complexToDimension(valueWithUnit){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var metrics=arguments.length<=2||arguments[2]===undefined?android.content.res.Resources.getDisplayMetrics():arguments[2];if(this.initUnit)this.initUnit();if(valueWithUnit===undefined||valueWithUnit===null){throw Error('complexToDimensionPixelSize error: valueWithUnit is '+valueWithUnit);}if(valueWithUnit===''+Number.parseFloat(valueWithUnit))return Number.parseFloat(valueWithUnit);if(typeof valueWithUnit!=='string')valueWithUnit=valueWithUnit+"";var scale=1;if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PX)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PX,"");}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DP,"");scale=metrics.density;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DIP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DIP,"");scale=metrics.density;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_SP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_SP,"");scale=metrics.density*(TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_SP)||1);}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PT)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PT,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_PT)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_IN)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_IN,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_IN)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_MM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_MM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_MM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_EM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_EM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_EM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_REM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_REM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_REM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VH)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VH,"");scale=metrics.heightPixels/100;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VW)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VW,"");scale=metrics.widthPixels/100;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_FRACTION)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_FRACTION,"");scale=Number.parseFloat(valueWithUnit)/100;if(Number.isNaN(scale))return 0;valueWithUnit=baseValue;}var value=Number.parseFloat(valueWithUnit);if(Number.isNaN(value))throw Error('complexToDimensionPixelSize error: '+valueWithUnit);return value*scale;}},{key:'complexToDimensionPixelOffset',value:function complexToDimensionPixelOffset(valueWithUnit){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var metrics=arguments.length<=2||arguments[2]===undefined?android.content.res.Resources.getDisplayMetrics():arguments[2];var value=this.complexToDimension(valueWithUnit,baseValue,metrics);return Math.floor(value);}},{key:'complexToDimensionPixelSize',value:function complexToDimensionPixelSize(valueWithUnit){var baseValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var metrics=arguments.length<=2||arguments[2]===undefined?android.content.res.Resources.getDisplayMetrics():arguments[2];var value=this.complexToDimension(valueWithUnit,baseValue,metrics);var res=Math.ceil(value);if(res!=0)return res;if(value==0)return 0;if(value>0)return 1;return -1;}}]);return TypedValue;}();TypedValue.COMPLEX_UNIT_PX='px';TypedValue.COMPLEX_UNIT_DP='dp';TypedValue.COMPLEX_UNIT_DIP='dip';TypedValue.COMPLEX_UNIT_SP='sp';TypedValue.COMPLEX_UNIT_PT='pt';TypedValue.COMPLEX_UNIT_IN='in';TypedValue.COMPLEX_UNIT_MM='mm';TypedValue.COMPLEX_UNIT_EM='em';TypedValue.COMPLEX_UNIT_REM='rem';TypedValue.COMPLEX_UNIT_VH='vh';TypedValue.COMPLEX_UNIT_VW='vw';TypedValue.COMPLEX_UNIT_FRACTION='%';TypedValue.UNIT_SCALE_MAP=new Map();util.TypedValue=TypedValue;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var LinearInterpolator=function(){function LinearInterpolator(){_classCallCheck(this,LinearInterpolator);}_createClass(LinearInterpolator,[{key:'getInterpolation',value:function getInterpolation(input){return input;}}]);return LinearInterpolator;}();animation.LinearInterpolator=LinearInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var SystemClock=android.os.SystemClock;var AnimationUtils=function(){function AnimationUtils(){_classCallCheck(this,AnimationUtils);}_createClass(AnimationUtils,null,[{key:'currentAnimationTimeMillis',value:function currentAnimationTimeMillis(){return SystemClock.uptimeMillis();}}]);return AnimationUtils;}();animation.AnimationUtils=AnimationUtils;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var util;(function(util){var LayoutDirection=function LayoutDirection(){_classCallCheck(this,LayoutDirection);};LayoutDirection.LTR=0;LayoutDirection.RTL=1;LayoutDirection.INHERIT=2;LayoutDirection.LOCALE=3;util.LayoutDirection=LayoutDirection;})(util=android.util||(android.util={}));})(android||(android={}));var java;(function(java){var util;(function(util){var Arrays=function(){function Arrays(){_classCallCheck(this,Arrays);}_createClass(Arrays,null,[{key:'sort',value:function sort(a,fromIndex,toIndex){Arrays.rangeCheck(a.length,fromIndex,toIndex);var sort=androidui.util.ArrayCreator.newNumberArray(toIndex-fromIndex);for(var i=fromIndex;ib?1:-1;});for(var _i5=fromIndex;_i5toIndex){throw new Error("ArrayIndexOutOfBoundsException:fromIndex("+fromIndex+") > toIndex("+toIndex+")");}if(fromIndex<0){throw new Error('ArrayIndexOutOfBoundsException:'+fromIndex);}if(toIndex>arrayLength){throw new Error('ArrayIndexOutOfBoundsException:'+toIndex);}}},{key:'asList',value:function asList(array){var _list$array;var list=new util.ArrayList();(_list$array=list.array).push.apply(_list$array,_toConsumableArray(array));return list;}},{key:'equals',value:function equals(a,a2){if(a==a2)return true;if(a==null||a2==null)return false;var length=a.length;if(a2.length!=length)return false;for(var i=0;i0){this._initStyleAttributes(styleMap,inParseState);}}else {var _iteratorNormalCompletion25=true;var _didIteratorError25=false;var _iteratorError25=undefined;try{for(var _iterator25=attrValue.split(';')[Symbol.iterator](),_step25;!(_iteratorNormalCompletion25=(_step25=_iterator25.next()).done);_iteratorNormalCompletion25=true){var part=_step25.value;var _part$split=part.split(':');var _part$split2=_slicedToArray(_part$split,2);var name=_part$split2[0];var value=_part$split2[1];if(name)_stateAttr.setAttr(name.trim().toLowerCase(),value);}}catch(err){_didIteratorError25=true;_iteratorError25=err;}finally {try{if(!_iteratorNormalCompletion25&&_iterator25.return){_iterator25.return();}}finally {if(_didIteratorError25){throw _iteratorError25;}}}}}else {_stateAttr.setAttr(attrName,attrValue);}}},{key:'getDefaultStateAttr',value:function getDefaultStateAttr(){var _iteratorNormalCompletion26=true;var _didIteratorError26=false;var _iteratorError26=undefined;try{for(var _iterator26=this.list[Symbol.iterator](),_step26;!(_iteratorNormalCompletion26=(_step26=_iterator26.next()).done);_iteratorNormalCompletion26=true){var stateAttr=_step26.value;if(stateAttr.isDefaultState())return stateAttr;}}catch(err){_didIteratorError26=true;_iteratorError26=err;}finally {try{if(!_iteratorNormalCompletion26&&_iterator26.return){_iterator26.return();}}finally {if(_didIteratorError26){throw _iteratorError26;}}}}},{key:'getStateAttr',value:function getStateAttr(state){var _iteratorNormalCompletion27=true;var _didIteratorError27=false;var _iteratorError27=undefined;try{for(var _iterator27=this.list[Symbol.iterator](),_step27;!(_iteratorNormalCompletion27=(_step27=_iterator27.next()).done);_iteratorNormalCompletion27=true){var stateAttr=_step27.value;if(stateAttr.isStateEquals(state))return stateAttr;}}catch(err){_didIteratorError27=true;_iteratorError27=err;}finally {try{if(!_iteratorNormalCompletion27&&_iterator27.return){_iterator27.return();}}finally {if(_didIteratorError27){throw _iteratorError27;}}}}},{key:'optStateAttr',value:function optStateAttr(state){var stateAttr=this.getStateAttr(state);if(!stateAttr){stateAttr=new attr_1.StateAttr(state);this.list.push(stateAttr);}return stateAttr;}},{key:'getMatchedStateAttr',value:function getMatchedStateAttr(state){if(state==null)return null;var _iteratorNormalCompletion28=true;var _didIteratorError28=false;var _iteratorError28=undefined;try{for(var _iterator28=this.matchedAttrCache[Symbol.iterator](),_step28;!(_iteratorNormalCompletion28=(_step28=_iterator28.next()).done);_iteratorNormalCompletion28=true){var stateAttr=_step28.value;if(stateAttr.isStateEquals(state))return stateAttr;}}catch(err){_didIteratorError28=true;_iteratorError28=err;}finally {try{if(!_iteratorNormalCompletion28&&_iterator28.return){_iterator28.return();}}finally {if(_didIteratorError28){throw _iteratorError28;}}}var matchedAttr=new attr_1.StateAttr(state);var _iteratorNormalCompletion29=true;var _didIteratorError29=false;var _iteratorError29=undefined;try{for(var _iterator29=this.list[Symbol.iterator](),_step29;!(_iteratorNormalCompletion29=(_step29=_iterator29.next()).done);_iteratorNormalCompletion29=true){var _stateAttr3=_step29.value;if(_stateAttr3.isDefaultState())continue;if(_stateAttr3.isStateMatch(state)){matchedAttr.putAll(_stateAttr3);}}}catch(err){_didIteratorError29=true;_iteratorError29=err;}finally {try{if(!_iteratorNormalCompletion29&&_iterator29.return){_iterator29.return();}}finally {if(_didIteratorError29){throw _iteratorError29;}}}this.matchedAttrCache.push(matchedAttr);return matchedAttr;}},{key:'removeAttrAllState',value:function removeAttrAllState(attrName){var _iteratorNormalCompletion30=true;var _didIteratorError30=false;var _iteratorError30=undefined;try{for(var _iterator30=this.list[Symbol.iterator](),_step30;!(_iteratorNormalCompletion30=(_step30=_iterator30.next()).done);_iteratorNormalCompletion30=true){var stateAttr=_step30.value;stateAttr.getAttrMap().delete(attrName);}}catch(err){_didIteratorError30=true;_iteratorError30=err;}finally {try{if(!_iteratorNormalCompletion30&&_iterator30.return){_iterator30.return();}}finally {if(_didIteratorError30){throw _iteratorError30;}}}var _iteratorNormalCompletion31=true;var _didIteratorError31=false;var _iteratorError31=undefined;try{for(var _iterator31=this.matchedAttrCache[Symbol.iterator](),_step31;!(_iteratorNormalCompletion31=(_step31=_iterator31.next()).done);_iteratorNormalCompletion31=true){var _stateAttr4=_step31.value;_stateAttr4.getAttrMap().delete(attrName);}}catch(err){_didIteratorError31=true;_iteratorError31=err;}finally {try{if(!_iteratorNormalCompletion31&&_iterator31.return){_iterator31.return();}}finally {if(_didIteratorError31){throw _iteratorError31;}}}}}]);return StateAttrList;}();StateAttrList.CacheMap=new Map();attr_1.StateAttrList=StateAttrList;})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));var androidui;(function(androidui){var attr;(function(attr){var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var Color=android.graphics.Color;var ColorStateList=android.content.res.ColorStateList;var Resources=android.content.res.Resources;var AttrBinder=function(){function AttrBinder(host){_classCallCheck(this,AttrBinder);this.classAttrBindList=[];this.objectRefs=[];this.host=host;}_createClass(AttrBinder,[{key:'addClassAttrBind',value:function addClassAttrBind(classAttrBind){if(classAttrBind){this.classAttrBindList.push(classAttrBind);}}},{key:'addAttr',value:function addAttr(attrName,onAttrChange,stashAttrValueWhenStateChange){if(!attrName)return;attrName=attrName.toLowerCase();if(onAttrChange){if(!this.attrChangeMap){this.attrChangeMap=new Map();}this.attrChangeMap.set(attrName,onAttrChange);}if(stashAttrValueWhenStateChange){this.attrStashMap=new Map();this.attrStashMap.set(attrName,stashAttrValueWhenStateChange);}}},{key:'onAttrChange',value:function onAttrChange(attrName,attrValue,context){this.mContext=context;if(!attrName)return;attrName=attrName.toLowerCase();var onAttrChangeCall=this.attrChangeMap&&this.attrChangeMap.get(attrName);if(onAttrChangeCall){onAttrChangeCall.call(this.host,attrValue,this.host);}var _iteratorNormalCompletion32=true;var _didIteratorError32=false;var _iteratorError32=undefined;try{for(var _iterator32=this.classAttrBindList[Symbol.iterator](),_step32;!(_iteratorNormalCompletion32=(_step32=_iterator32.next()).done);_iteratorNormalCompletion32=true){var classAttrBind=_step32.value;classAttrBind.callSetter(attrName,this.host,attrValue);}}catch(err){_didIteratorError32=true;_iteratorError32=err;}finally {try{if(!_iteratorNormalCompletion32&&_iterator32.return){_iterator32.return();}}finally {if(_didIteratorError32){throw _iteratorError32;}}}}},{key:'getAttrValue',value:function getAttrValue(attrName){if(!attrName)return undefined;attrName=attrName.toLowerCase();var getAttrCall=this.attrStashMap&&this.attrStashMap.get(attrName);var value=undefined;if(getAttrCall){value=getAttrCall.call(this.host);}else {var _iteratorNormalCompletion33=true;var _didIteratorError33=false;var _iteratorError33=undefined;try{for(var _iterator33=this.classAttrBindList[Symbol.iterator](),_step33;!(_iteratorNormalCompletion33=(_step33=_iterator33.next()).done);_iteratorNormalCompletion33=true){var classAttrBind=_step33.value;value=classAttrBind.callGetter(attrName,this.host);if(value)break;}}catch(err){_didIteratorError33=true;_iteratorError33=err;}finally {try{if(!_iteratorNormalCompletion33&&_iterator33.return){_iterator33.return();}}finally {if(_didIteratorError33){throw _iteratorError33;}}}}if(value==null)return null;if(typeof value==="number"||typeof value==="boolean"||typeof value==="string")return value+'';return this.setRefObject(value);}},{key:'getRefObject',value:function getRefObject(ref){if(ref&&ref.startsWith('@ref/')){ref=ref.substring('@ref/'.length);var index=Number.parseInt(ref);if(Number.isInteger(index)){return this.objectRefs[index];}}}},{key:'setRefObject',value:function setRefObject(obj){var index=this.objectRefs.indexOf(obj);if(index>=0)return '@ref/'+index;this.objectRefs.push(obj);return '@ref/'+(this.objectRefs.length-1);}},{key:'parsePaddingMarginLTRB',value:function parsePaddingMarginLTRB(value){var _this17=this;value=value+'';var parts=[];var _iteratorNormalCompletion34=true;var _didIteratorError34=false;var _iteratorError34=undefined;try{for(var _iterator34=value.split(' ')[Symbol.iterator](),_step34;!(_iteratorNormalCompletion34=(_step34=_iterator34.next()).done);_iteratorNormalCompletion34=true){var part=_step34.value;if(part)parts.push(part);}}catch(err){_didIteratorError34=true;_iteratorError34=err;}finally {try{if(!_iteratorNormalCompletion34&&_iterator34.return){_iterator34.return();}}finally {if(_didIteratorError34){throw _iteratorError34;}}}var ltrb=undefined;switch(parts.length){case 1:ltrb=[parts[0],parts[0],parts[0],parts[0]];break;case 2:ltrb=[parts[1],parts[0],parts[1],parts[0]];break;case 3:ltrb=[parts[1],parts[0],parts[1],parts[2]];break;case 4:ltrb=[parts[3],parts[0],parts[1],parts[2]];break;}if(ltrb){ltrb=ltrb.map(function(v){return _this17.parseDimension(v);});return ltrb;}throw Error('not a padding or margin value : '+value);}},{key:'parseEnum',value:function parseEnum(value,enumMap,defaultValue){if(Number.isInteger(value)){return value;}if(enumMap.has(value)){return enumMap.get(value);}return defaultValue;}},{key:'parseBoolean',value:function parseBoolean(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(value===false)return false;else if(value===true)return true;var res=this.mContext?this.mContext.getResources():Resources.getSystem();if(typeof value==="string"){return attr.AttrValueParser.parseBoolean(res,value,defaultValue);}return defaultValue;}},{key:'parseGravity',value:function parseGravity(s){var defaultValue=arguments.length<=1||arguments[1]===undefined?Gravity.NO_GRAVITY:arguments[1];var gravity=Number.parseInt(s);if(Number.isInteger(gravity))return gravity;return Gravity.parseGravity(s,defaultValue);}},{key:'parseDrawable',value:function parseDrawable(s){if(!s)return null;if(s instanceof Drawable)return s;if(s.startsWith('@ref/')){var refObj=this.getRefObject(s);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();s=(s+'').trim();return attr.AttrValueParser.parseDrawable(res,s);}},{key:'parseColor',value:function parseColor(value,defaultValue){var color=Number.parseInt(value);if(Number.isInteger(color))return color;var res=this.mContext?this.mContext.getResources():Resources.getSystem();color=attr.AttrValueParser.parseColor(res,value,defaultValue);if(isNaN(color)){return Color.BLACK;}return color;}},{key:'parseColorList',value:function parseColorList(value){if(!value)return null;if(value instanceof ColorStateList)return value;if(typeof value=='number')return ColorStateList.valueOf(value);if(value.startsWith('@ref/')){var refObj=this.getRefObject(value);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseColorStateList(res,value);}},{key:'parseInt',value:function parseInt(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseInt(res,value,defaultValue);}},{key:'parseFloat',value:function parseFloat(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseFloat(res,value,defaultValue);}},{key:'parseDimension',value:function parseDimension(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var baseValue=arguments.length<=2||arguments[2]===undefined?0:arguments[2];if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimension(res,value,defaultValue,baseValue);}},{key:'parseNumberPixelOffset',value:function parseNumberPixelOffset(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var baseValue=arguments.length<=2||arguments[2]===undefined?0:arguments[2];if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimensionPixelOffset(res,value,defaultValue,baseValue);}},{key:'parseNumberPixelSize',value:function parseNumberPixelSize(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var baseValue=arguments.length<=2||arguments[2]===undefined?0:arguments[2];if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimensionPixelSize(res,value,defaultValue,baseValue);}},{key:'parseString',value:function parseString(value,defaultValue){var res=this.mContext?this.mContext.getResources():Resources.getSystem();if(typeof value==='string'){return attr.AttrValueParser.parseString(res,value,defaultValue);}return defaultValue;}},{key:'parseStringArray',value:function parseStringArray(value){if(typeof value==='string'){if(value.startsWith('@ref/')){var refObj=this.getRefObject(value);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseTextArray(res,value);}return null;}}]);return AttrBinder;}();attr.AttrBinder=AttrBinder;(function(AttrBinder){var ClassBinderMap=function(){function ClassBinderMap(){_classCallCheck(this,ClassBinderMap);this.binderMap=new Map();}_createClass(ClassBinderMap,[{key:'set',value:function set(key,value){this.binderMap.set(key.toLowerCase(),value);return this;}},{key:'get',value:function get(key){return this.binderMap.get(key.toLowerCase());}},{key:'callSetter',value:function callSetter(attrName,host,attrValue){if(!attrName)return;var value=this.get(attrName);if(value){value.setter(host,attrValue);}}},{key:'callGetter',value:function callGetter(attrName,host){if(!attrName)return;var value=this.get(attrName);if(value){return value.getter(host);}}}]);return ClassBinderMap;}();AttrBinder.ClassBinderMap=ClassBinderMap;})(AttrBinder=attr.AttrBinder||(attr.AttrBinder={}));})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));var androidui;(function(androidui){var util;(function(util){var ColorDrawable=android.graphics.drawable.ColorDrawable;var Color=android.graphics.Color;var PerformanceAdjuster=function(){function PerformanceAdjuster(){_classCallCheck(this,PerformanceAdjuster);}_createClass(PerformanceAdjuster,null,[{key:'noCanvasMode',value:function noCanvasMode(){android.graphics.Canvas.prototype=HackCanvas.prototype;android.view.View.prototype.onDrawVerticalScrollBar=function(canvas,scrollBar,l,t,r,b){var scrollBarEl=this.bindElement['VerticalScrollBar'];if(!scrollBarEl){scrollBarEl=document.createElement('div');this.bindElement['VerticalScrollBar']=scrollBarEl;scrollBarEl.style.zIndex='9';scrollBarEl.style.position='absolute';scrollBarEl.style.background='black';scrollBarEl.style.left='0px';scrollBarEl.style.top='0px';this.bindElement.appendChild(scrollBarEl);}var height=b-t;var width=r-l;var size=height;var thickness=width;var extent=this.mScrollCache.scrollBar.mExtent;var range=this.mScrollCache.scrollBar.mRange;var length=Math.round(size*extent/range);var offset=Math.round((size-length)*this.mScrollCache.scrollBar.mOffset/(range-extent));if(t<0)t=0;if(offset<0)offset=0;scrollBarEl.style.transform=scrollBarEl.style.webkitTransform='translate('+l+'px, '+(t+offset)+'px)';scrollBarEl.style.width=(r-l)/2+'px';scrollBarEl.style.height=length+'px';scrollBarEl.style.opacity=this.mScrollCache.scrollBar.mVerticalThumb.getAlpha()/255+'';};var oldSetBackground=android.view.View.prototype.setBackground;android.view.View.prototype.setBackground=function(drawable){oldSetBackground.call(this,drawable);if(drawable instanceof ColorDrawable){this.bindElement.style.background=Color.toRGBAFunc(this.mBackground.getColor());}};}}]);return PerformanceAdjuster;}();util.PerformanceAdjuster=PerformanceAdjuster;var HackCanvas=function(_android$graphics$Can){_inherits(HackCanvas,_android$graphics$Can);function HackCanvas(){_classCallCheck(this,HackCanvas);return _possibleConstructorReturn(this,Object.getPrototypeOf(HackCanvas).apply(this,arguments));}_createClass(HackCanvas,[{key:'init',value:function init(){}},{key:'recycle',value:function recycle(){}},{key:'translate',value:function translate(dx,dy){}},{key:'scale',value:function scale(sx,sy,px,py){}},{key:'rotate',value:function rotate(degrees,px,py){}},{key:'drawRGB',value:function drawRGB(r,g,b){}},{key:'drawARGB',value:function drawARGB(a,r,g,b){}},{key:'drawColor',value:function drawColor(color){}},{key:'clearColor',value:function clearColor(){}},{key:'save',value:function save(){return 1;}},{key:'restore',value:function restore(){}},{key:'restoreToCount',value:function restoreToCount(saveCount){}},{key:'getSaveCount',value:function getSaveCount(){return 1;}},{key:'clipRect',value:function clipRect(){return false;}},{key:'getClipBounds',value:function getClipBounds(bounds){return null;}},{key:'quickReject',value:function quickReject(){return false;}},{key:'drawCanvas',value:function drawCanvas(canvas,offsetX,offsetY){}},{key:'drawRect',value:function drawRect(){}},{key:'drawText',value:function drawText(text,x,y,paint){}}]);return HackCanvas;}(android.graphics.Canvas);})(util=androidui.util||(androidui.util={}));})(androidui||(androidui={}));var androidui;(function(androidui){var image;(function(image_1){var Paint=android.graphics.Paint;var Rect=android.graphics.Rect;var Drawable=android.graphics.drawable.Drawable;var NetDrawable=function(_Drawable2){_inherits(NetDrawable,_Drawable2);function NetDrawable(src,paint,overrideImageRatio){_classCallCheck(this,NetDrawable);var _this19=_possibleConstructorReturn(this,Object.getPrototypeOf(NetDrawable).call(this));_this19.mImageWidth=0;_this19.mImageHeight=0;var image=undefined;if(src instanceof image_1.NetImage){image=src;if(overrideImageRatio)image.mOverrideImageRatio=overrideImageRatio;}else {image=new image_1.NetImage(src,overrideImageRatio);}image.addLoadListener(function(){return _this19.onLoad();},function(){return _this19.onError();});_this19.mState=new State(image,paint);if(image.isImageLoaded())_this19.initBoundWithLoadedImage(image);return _this19;}_createClass(NetDrawable,[{key:'initBoundWithLoadedImage',value:function initBoundWithLoadedImage(image){var imageRatio=image.getImageRatio();this.mImageWidth=Math.floor(image.width/imageRatio*android.content.res.Resources.getDisplayMetrics().density);this.mImageHeight=Math.floor(image.height/imageRatio*android.content.res.Resources.getDisplayMetrics().density);}},{key:'setURL',value:function setURL(url){var hiddenWhenLoading=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(hiddenWhenLoading){this.mImageWidth=this.mImageHeight=0;}this.mState.mImage.src=url;}},{key:'draw',value:function draw(canvas){if(!this.isImageSizeEmpty()){var emptyTileX=this.mTileModeX==null||this.mTileModeX==NetDrawable.TileMode.DEFAULT;var emptyTileY=this.mTileModeY==null||this.mTileModeY==NetDrawable.TileMode.DEFAULT;if(emptyTileX&&emptyTileY){canvas.drawImage(this.mState.mImage,null,this.getBounds(),this.mState.paint);}else {this.drawTile(canvas);}}}},{key:'drawTile',value:function drawTile(canvas){var imageWidth=this.mImageWidth;var imageHeight=this.mImageHeight;if(imageHeight<=0||imageWidth<=0)return;var tileX=this.mTileModeX;var tileY=this.mTileModeY;var bound=this.getBounds();if(this.mTmpTileBound==null)this.mTmpTileBound=new Rect();var tmpBound=this.mTmpTileBound;tmpBound.setEmpty();function drawColumn(){if(tileY===NetDrawable.TileMode.REPEAT){tmpBound.bottom=imageHeight;while(tmpBound.isEmpty()||tmpBound.intersects(bound)){canvas.drawImage(this.mState.mImage,null,tmpBound,this.mState.paint);tmpBound.offset(0,imageHeight);}}else {tmpBound.bottom=bound.height();canvas.drawImage(this.mState.mImage,null,tmpBound,this.mState.paint);}}if(tileX===NetDrawable.TileMode.REPEAT){tmpBound.right=imageWidth;while(tmpBound.isEmpty()||tmpBound.intersects(bound)){drawColumn.call(this);tmpBound.offset(imageWidth,-tmpBound.top);}}else {tmpBound.right=bound.width();drawColumn.call(this);}}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.paint.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.paint.getAlpha();}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mImageWidth;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mImageHeight;}},{key:'onLoad',value:function onLoad(){this.initBoundWithLoadedImage(this.mState.mImage);if(this.mLoadListener)this.mLoadListener.onLoad(this);this.invalidateSelf();this.notifySizeChangeSelf();}},{key:'onError',value:function onError(){this.mImageWidth=this.mImageHeight=0;if(this.mLoadListener)this.mLoadListener.onError(this);this.invalidateSelf();this.notifySizeChangeSelf();}},{key:'isImageSizeEmpty',value:function isImageSizeEmpty(){return this.mImageWidth<=0||this.mImageHeight<=0;}},{key:'getImage',value:function getImage(){return this.mState.mImage;}},{key:'setLoadListener',value:function setLoadListener(loadListener){this.mLoadListener=loadListener;}},{key:'setTileMode',value:function setTileMode(tileX,tileY){this.mTileModeX=tileX;this.mTileModeY=tileY;this.invalidateSelf();}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return NetDrawable;}(Drawable);image_1.NetDrawable=NetDrawable;(function(NetDrawable){(function(TileMode){TileMode[TileMode["DEFAULT"]=0]="DEFAULT";TileMode[TileMode["REPEAT"]=1]="REPEAT";})(NetDrawable.TileMode||(NetDrawable.TileMode={}));var TileMode=NetDrawable.TileMode;})(NetDrawable=image_1.NetDrawable||(image_1.NetDrawable={}));var State=function(){function State(image){var paint=arguments.length<=1||arguments[1]===undefined?new Paint():arguments[1];_classCallCheck(this,State);this.mImage=image;this.paint=new Paint();if(paint!=null)this.paint.set(paint);}_createClass(State,[{key:'newDrawable',value:function newDrawable(){return new NetDrawable(this.mImage.src,this.paint);}}]);return State;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var androidui;(function(androidui){var util;(function(util){var Platform=function Platform(){_classCallCheck(this,Platform);};Platform.isIOS=navigator.userAgent.match(/(iPhone|iPad|iPod|ios)/i)?true:false;Platform.isAndroid=navigator.userAgent.match('Android')?true:false;Platform.isWeChat=navigator.userAgent.match(/MicroMessenger/i)?true:false;util.Platform=Platform;})(util=androidui.util||(androidui.util={}));})(androidui||(androidui={}));var android;(function(android){var view;(function(view){var SystemClock=android.os.SystemClock;var Log=android.util.Log;var Platform=androidui.util.Platform;var DEBUG=false;var TAG="KeyEvent";var KeyEvent=function(){function KeyEvent(){_classCallCheck(this,KeyEvent);this._downingKeyEventMap=new Map();}_createClass(KeyEvent,[{key:'initKeyEvent',value:function initKeyEvent(keyEvent,action){this.mEventTime=SystemClock.uptimeMillis();this.mKeyCode=keyEvent.keyCode;this.mAltKey=keyEvent.altKey;this.mShiftKey=keyEvent.shiftKey;this.mCtrlKey=keyEvent.ctrlKey;this.mMetaKey=keyEvent.metaKey;var keyIdentifier=keyEvent['keyIdentifier']+'';if(keyIdentifier){this.mIsTypingKey=keyIdentifier.startsWith('U+');if(this.mIsTypingKey){this.mKeyCode=Number.parseInt(keyIdentifier.substr(2),16)||this.mKeyCode;}}if(this.mKeyCode>=KeyEvent.KEYCODE_Key_a&&this.mKeyCode<=KeyEvent.KEYCODE_Key_z&&this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode-=32;}if(this.mKeyCode>=KeyEvent.KEYCODE_KeyA&&this.mKeyCode<=KeyEvent.KEYCODE_KeyZ&&!this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode+=32;}if(Platform.isAndroid){if(!this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.noMeta[this.mKeyCode]||this.mKeyCode;}else if(this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.shift[this.mKeyCode]||this.mKeyCode;}else if(!this.mShiftKey&&this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.ctrl[this.mKeyCode]||this.mKeyCode;}else if(!this.mShiftKey&&!this.mCtrlKey&&this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.alt[this.mKeyCode]||this.mKeyCode;}}this.mKeyCode=KeyEvent.FIX_MAP_KEYCODE[this.mKeyCode]||this.mKeyCode;if(action===KeyEvent.ACTION_DOWN){this.mDownTime=SystemClock.uptimeMillis();var keyEvents=this._downingKeyEventMap.get(keyEvent.keyCode);if(keyEvents==null){keyEvents=[];this._downingKeyEventMap.set(keyEvent.keyCode,keyEvents);}keyEvents.push(keyEvent);}else if(action===KeyEvent.ACTION_UP){this._downingKeyEventMap.delete(keyEvent.keyCode);}this.mAction=action;}},{key:'isAltPressed',value:function isAltPressed(){return this.mAltKey;}},{key:'isShiftPressed',value:function isShiftPressed(){return this.mShiftKey;}},{key:'isCtrlPressed',value:function isCtrlPressed(){return this.mCtrlKey;}},{key:'isMetaPressed',value:function isMetaPressed(){return this.mMetaKey;}},{key:'getAction',value:function getAction(){return this.mAction;}},{key:'startTracking',value:function startTracking(){this.mFlags|=KeyEvent.FLAG_START_TRACKING;}},{key:'isTracking',value:function isTracking(){return (this.mFlags&KeyEvent.FLAG_TRACKING)!=0;}},{key:'isLongPress',value:function isLongPress(){return this.getRepeatCount()===1;}},{key:'getKeyCode',value:function getKeyCode(){return this.mKeyCode;}},{key:'getRepeatCount',value:function getRepeatCount(){var downArray=this._downingKeyEventMap.get(this.mKeyCode);return downArray?downArray.length-1:0;}},{key:'getDownTime',value:function getDownTime(){return this.mDownTime;}},{key:'getEventTime',value:function getEventTime(){return this.mEventTime;}},{key:'dispatch',value:function dispatch(receiver,state,target){switch(this.mAction){case KeyEvent.ACTION_DOWN:{this.mFlags&=~KeyEvent.FLAG_START_TRACKING;if(DEBUG)Log.v(TAG,"Key down to "+target+" in "+state+": "+this);var res=receiver.onKeyDown(this.getKeyCode(),this);if(state!=null){if(res&&this.getRepeatCount()==0&&(this.mFlags&KeyEvent.FLAG_START_TRACKING)!=0){if(DEBUG)Log.v(TAG," Start tracking!");state.startTracking(this,target);}else if(this.isLongPress()&&state.isTracking(this)){if(receiver.onKeyLongPress(this.getKeyCode(),this)){if(DEBUG)Log.v(TAG," Clear from long press!");state.performedLongPress(this);res=true;}}}return res;}case KeyEvent.ACTION_UP:if(DEBUG)Log.v(TAG,"Key up to "+target+" in "+state+": "+this);if(state!=null){state.handleUpEvent(this);}return receiver.onKeyUp(this.getKeyCode(),this);}return false;}},{key:'hasNoModifiers',value:function hasNoModifiers(){if(this.isAltPressed())return false;if(this.isShiftPressed())return false;if(this.isCtrlPressed())return false;if(this.isMetaPressed())return false;return true;}},{key:'hasModifiers',value:function hasModifiers(modifiers){if((modifiers&KeyEvent.META_ALT_ON)===KeyEvent.META_ALT_ON&&this.isAltPressed())return true;if((modifiers&KeyEvent.META_SHIFT_ON)===KeyEvent.META_SHIFT_ON&&this.isShiftPressed())return true;if((modifiers&KeyEvent.META_META_ON)===KeyEvent.META_META_ON&&this.isMetaPressed())return true;if((modifiers&KeyEvent.META_CTRL_ON)===KeyEvent.META_CTRL_ON&&this.isCtrlPressed())return true;}},{key:'getMetaState',value:function getMetaState(){var meta=0;if(this.isAltPressed())meta|=KeyEvent.META_ALT_ON;if(this.isShiftPressed())meta|=KeyEvent.META_SHIFT_ON;if(this.isCtrlPressed())meta|=KeyEvent.META_CTRL_ON;if(this.isMetaPressed())meta|=KeyEvent.META_META_ON;return meta;}},{key:'toString',value:function toString(){return JSON.stringify(this);}},{key:'isCanceled',value:function isCanceled(){return false;}}],[{key:'obtain',value:function obtain(action,code){var ev=new KeyEvent();ev.mDownTime=SystemClock.uptimeMillis();ev.mEventTime=SystemClock.uptimeMillis();ev.mAction=action;ev.mKeyCode=code;return ev;}},{key:'isConfirmKey',value:function isConfirmKey(keyCode){switch(keyCode){case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:return true;default:return false;}}},{key:'actionToString',value:function actionToString(action){switch(action){case KeyEvent.ACTION_DOWN:return "ACTION_DOWN";case KeyEvent.ACTION_UP:return "ACTION_UP";default:return ''+action;}}},{key:'keyCodeToString',value:function keyCodeToString(keyCode){return String.fromCharCode(keyCode);}}]);return KeyEvent;}();KeyEvent.KEYCODE_DPAD_UP=38;KeyEvent.KEYCODE_DPAD_DOWN=40;KeyEvent.KEYCODE_DPAD_LEFT=37;KeyEvent.KEYCODE_DPAD_RIGHT=39;KeyEvent.KEYCODE_DPAD_CENTER=13;KeyEvent.KEYCODE_ENTER=13;KeyEvent.KEYCODE_TAB=9;KeyEvent.KEYCODE_SPACE=32;KeyEvent.KEYCODE_ESCAPE=27;KeyEvent.KEYCODE_Backspace=8;KeyEvent.KEYCODE_PAGE_UP=33;KeyEvent.KEYCODE_PAGE_DOWN=34;KeyEvent.KEYCODE_MOVE_HOME=36;KeyEvent.KEYCODE_MOVE_END=35;KeyEvent.KEYCODE_Digit0=48;KeyEvent.KEYCODE_Digit1=49;KeyEvent.KEYCODE_Digit2=50;KeyEvent.KEYCODE_Digit3=51;KeyEvent.KEYCODE_Digit4=52;KeyEvent.KEYCODE_Digit5=53;KeyEvent.KEYCODE_Digit6=54;KeyEvent.KEYCODE_Digit7=55;KeyEvent.KEYCODE_Digit8=56;KeyEvent.KEYCODE_Digit9=57;KeyEvent.KEYCODE_Key_a=65;KeyEvent.KEYCODE_Key_b=66;KeyEvent.KEYCODE_Key_c=67;KeyEvent.KEYCODE_Key_d=68;KeyEvent.KEYCODE_Key_e=69;KeyEvent.KEYCODE_Key_f=70;KeyEvent.KEYCODE_Key_g=71;KeyEvent.KEYCODE_Key_h=72;KeyEvent.KEYCODE_Key_i=73;KeyEvent.KEYCODE_Key_j=74;KeyEvent.KEYCODE_Key_k=75;KeyEvent.KEYCODE_Key_l=76;KeyEvent.KEYCODE_Key_m=77;KeyEvent.KEYCODE_Key_n=78;KeyEvent.KEYCODE_Key_o=79;KeyEvent.KEYCODE_Key_p=80;KeyEvent.KEYCODE_Key_q=81;KeyEvent.KEYCODE_Key_r=82;KeyEvent.KEYCODE_Key_s=83;KeyEvent.KEYCODE_Key_t=84;KeyEvent.KEYCODE_Key_u=85;KeyEvent.KEYCODE_Key_v=86;KeyEvent.KEYCODE_Key_w=87;KeyEvent.KEYCODE_Key_x=88;KeyEvent.KEYCODE_Key_y=89;KeyEvent.KEYCODE_Key_z=90;KeyEvent.KEYCODE_KeyA=0x41;KeyEvent.KEYCODE_KeyB=0x42;KeyEvent.KEYCODE_KeyC=0x43;KeyEvent.KEYCODE_KeyD=0x44;KeyEvent.KEYCODE_KeyE=0x45;KeyEvent.KEYCODE_KeyF=0x46;KeyEvent.KEYCODE_KeyG=0x47;KeyEvent.KEYCODE_KeyH=0x48;KeyEvent.KEYCODE_KeyI=0x49;KeyEvent.KEYCODE_KeyJ=0x4a;KeyEvent.KEYCODE_KeyK=0x4b;KeyEvent.KEYCODE_KeyL=0x4c;KeyEvent.KEYCODE_KeyM=0x4d;KeyEvent.KEYCODE_KeyN=0x4e;KeyEvent.KEYCODE_KeyO=0x4f;KeyEvent.KEYCODE_KeyP=0x50;KeyEvent.KEYCODE_KeyQ=0x51;KeyEvent.KEYCODE_KeyR=0x52;KeyEvent.KEYCODE_KeyS=0x53;KeyEvent.KEYCODE_KeyT=0x54;KeyEvent.KEYCODE_KeyU=0x55;KeyEvent.KEYCODE_KeyV=0x56;KeyEvent.KEYCODE_KeyW=0x57;KeyEvent.KEYCODE_KeyX=0x58;KeyEvent.KEYCODE_KeyY=0x59;KeyEvent.KEYCODE_KeyZ=0x5a;KeyEvent.KEYCODE_Semicolon=0x3b;KeyEvent.KEYCODE_LessThan=0x3c;KeyEvent.KEYCODE_Equal=0x3d;KeyEvent.KEYCODE_MoreThan=0x3e;KeyEvent.KEYCODE_Question=0x3f;KeyEvent.KEYCODE_Comma=0x2c;KeyEvent.KEYCODE_Period=0x2e;KeyEvent.KEYCODE_Slash=0x2f;KeyEvent.KEYCODE_Quotation=0x27;KeyEvent.KEYCODE_LeftBracket=0x5b;KeyEvent.KEYCODE_Backslash=0x5c;KeyEvent.KEYCODE_RightBracket=0x5d;KeyEvent.KEYCODE_Minus=0x2d;KeyEvent.KEYCODE_Colon=0x3a;KeyEvent.KEYCODE_Double_Quotation=0x22;KeyEvent.KEYCODE_Backquote=0x60;KeyEvent.KEYCODE_Tilde=0x7e;KeyEvent.KEYCODE_Left_Brace=0x7b;KeyEvent.KEYCODE_Or=0x7c;KeyEvent.KEYCODE_Right_Brace=0x7d;KeyEvent.KEYCODE_Del=0x7f;KeyEvent.KEYCODE_Exclamation=0x21;KeyEvent.KEYCODE_Right_Parenthesis=0x29;KeyEvent.KEYCODE_AT=0x40;KeyEvent.KEYCODE_Sharp=0x23;KeyEvent.KEYCODE_Dollar=0x24;KeyEvent.KEYCODE_Percent=0x25;KeyEvent.KEYCODE_Power=0x5e;KeyEvent.KEYCODE_And=0x26;KeyEvent.KEYCODE_Asterisk=0x2a;KeyEvent.KEYCODE_Left_Parenthesis=0x28;KeyEvent.KEYCODE_Underline=0x5f;KeyEvent.KEYCODE_Add=0x2b;KeyEvent.KEYCODE_BACK=-1;KeyEvent.KEYCODE_MENU=-2;KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME={noMeta:{186:KeyEvent.KEYCODE_Semicolon,187:KeyEvent.KEYCODE_Equal,188:KeyEvent.KEYCODE_Comma,189:KeyEvent.KEYCODE_Minus,190:KeyEvent.KEYCODE_Period,191:KeyEvent.KEYCODE_Slash,192:KeyEvent.KEYCODE_Quotation,219:KeyEvent.KEYCODE_LeftBracket,220:KeyEvent.KEYCODE_Backslash,221:KeyEvent.KEYCODE_RightBracket},shift:{186:KeyEvent.KEYCODE_Colon,187:KeyEvent.KEYCODE_Add,188:KeyEvent.KEYCODE_LessThan,189:KeyEvent.KEYCODE_Underline,190:KeyEvent.KEYCODE_MoreThan,191:KeyEvent.KEYCODE_Question,192:KeyEvent.KEYCODE_Double_Quotation,219:KeyEvent.KEYCODE_Left_Brace,220:KeyEvent.KEYCODE_Or,221:KeyEvent.KEYCODE_Right_Brace},ctrl:{},alt:{}};KeyEvent.FIX_MAP_KEYCODE={186:KeyEvent.KEYCODE_Semicolon,187:KeyEvent.KEYCODE_Equal,188:KeyEvent.KEYCODE_Comma,189:KeyEvent.KEYCODE_Minus,190:KeyEvent.KEYCODE_Period,191:KeyEvent.KEYCODE_Slash,192:KeyEvent.KEYCODE_Backquote,219:KeyEvent.KEYCODE_LeftBracket,220:KeyEvent.KEYCODE_Backslash,221:KeyEvent.KEYCODE_RightBracket,222:KeyEvent.KEYCODE_Quotation,96:KeyEvent.KEYCODE_Digit0,97:KeyEvent.KEYCODE_Digit1,98:KeyEvent.KEYCODE_Digit2,99:KeyEvent.KEYCODE_Digit3,100:KeyEvent.KEYCODE_Digit4,101:KeyEvent.KEYCODE_Digit5,102:KeyEvent.KEYCODE_Digit6,103:KeyEvent.KEYCODE_Digit7,104:KeyEvent.KEYCODE_Digit8,105:KeyEvent.KEYCODE_Digit9};KeyEvent.ACTION_DOWN=0;KeyEvent.ACTION_UP=1;KeyEvent.META_MASK_SHIFT=16;KeyEvent.META_ALT_ON=0x02;KeyEvent.META_SHIFT_ON=0x1;KeyEvent.META_CTRL_ON=0x1000;KeyEvent.META_META_ON=0x10000;KeyEvent.FLAG_CANCELED=0x20;KeyEvent.FLAG_CANCELED_LONG_PRESS=0x100;KeyEvent.FLAG_LONG_PRESS=0x80;KeyEvent.FLAG_TRACKING=0x200;KeyEvent.FLAG_START_TRACKING=0x40000000;view.KeyEvent=KeyEvent;(function(KeyEvent){var DispatcherState=function(){function DispatcherState(){_classCallCheck(this,DispatcherState);this.mActiveLongPresses=new android.util.SparseArray();}_createClass(DispatcherState,[{key:'reset',value:function reset(target){if(target==null){if(DEBUG)Log.v(TAG,"Reset: "+this);this.mDownKeyCode=0;this.mDownTarget=null;this.mActiveLongPresses.clear();}else {if(this.mDownTarget==target){if(DEBUG)Log.v(TAG,"Reset in "+target+": "+this);this.mDownKeyCode=0;this.mDownTarget=null;}}}},{key:'startTracking',value:function startTracking(event,target){if(event.getAction()!=KeyEvent.ACTION_DOWN){throw new Error("Can only start tracking on a down event");}if(DEBUG)Log.v(TAG,"Start trackingt in "+target+": "+this);this.mDownKeyCode=event.getKeyCode();this.mDownTarget=target;}},{key:'isTracking',value:function isTracking(event){return this.mDownKeyCode==event.getKeyCode();}},{key:'performedLongPress',value:function performedLongPress(event){this.mActiveLongPresses.put(event.getKeyCode(),1);}},{key:'handleUpEvent',value:function handleUpEvent(event){var keyCode=event.getKeyCode();if(DEBUG)Log.v(TAG,"Handle key up "+event+": "+this);var index=this.mActiveLongPresses.indexOfKey(keyCode);if(index>=0){if(DEBUG)Log.v(TAG," Index: "+index);event.mFlags|=KeyEvent.FLAG_CANCELED|KeyEvent.FLAG_CANCELED_LONG_PRESS;this.mActiveLongPresses.removeAt(index);}if(this.mDownKeyCode==keyCode){if(DEBUG)Log.v(TAG," Tracking!");event.mFlags|=KeyEvent.FLAG_TRACKING;this.mDownKeyCode=0;this.mDownTarget=null;}}}]);return DispatcherState;}();KeyEvent.DispatcherState=DispatcherState;})(KeyEvent=view.KeyEvent||(view.KeyEvent={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_4){var PixelFormat=android.graphics.PixelFormat;var Rect=android.graphics.Rect;var System=java.lang.System;var Drawable=android.graphics.drawable.Drawable;var LayerDrawable=function(_Drawable3){_inherits(LayerDrawable,_Drawable3);function LayerDrawable(layers){var state=arguments.length<=1||arguments[1]===undefined?null:arguments[1];_classCallCheck(this,LayerDrawable);var _this20=_possibleConstructorReturn(this,Object.getPrototypeOf(LayerDrawable).call(this));_this20.mOpacityOverride=PixelFormat.UNKNOWN;_this20.mTmpRect=new Rect();var _as=_this20.createConstantState(state);_this20.mLayerState=_as;if(_as.mNum>0){_this20.ensurePadding();}if(layers!=null){var length=layers.length;var r=new Array(length);for(var i=0;i tag requires a \'drawable\' attribute or child tag defining a drawable)');}this.addLayer(dr,id,left,top,right,bottom);}}catch(err){_didIteratorError35=true;_iteratorError35=err;}finally {try{if(!_iteratorNormalCompletion35&&_iterator35.return){_iterator35.return();}}finally {if(_didIteratorError35){throw _iteratorError35;}}}this.ensurePadding();this.onStateChange(this.getState());}},{key:'addLayer',value:function addLayer(layer,id){var left=arguments.length<=2||arguments[2]===undefined?0:arguments[2];var top=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var right=arguments.length<=4||arguments[4]===undefined?0:arguments[4];var bottom=arguments.length<=5||arguments[5]===undefined?0:arguments[5];var st=this.mLayerState;var N=st.mChildren!=null?st.mChildren.length:0;var i=st.mNum;if(i>=N){var nu=new Array(N+10);if(i>0){System.arraycopy(st.mChildren,0,nu,0,i);}st.mChildren=nu;}var childDrawable=new LayerDrawable.ChildDrawable();st.mChildren[i]=childDrawable;childDrawable.mId=id;childDrawable.mDrawable=layer;childDrawable.mDrawable.setAutoMirrored(this.isAutoMirrored());childDrawable.mInsetL=left;childDrawable.mInsetT=top;childDrawable.mInsetR=right;childDrawable.mInsetB=bottom;st.mNum++;layer.setCallback(this);}},{key:'findDrawableByLayerId',value:function findDrawableByLayerId(id){var layers=this.mLayerState.mChildren;for(var i=this.mLayerState.mNum-1;i>=0;i--){if(layers[i].mId==id){return layers[i].mDrawable;}}return null;}},{key:'setId',value:function setId(index,id){this.mLayerState.mChildren[index].mId=id;}},{key:'getNumberOfLayers',value:function getNumberOfLayers(){return this.mLayerState.mNum;}},{key:'getDrawable',value:function getDrawable(index){return this.mLayerState.mChildren[index].mDrawable;}},{key:'getId',value:function getId(index){return this.mLayerState.mChildren[index].mId;}},{key:'setDrawableByLayerId',value:function setDrawableByLayerId(id,drawable){var layers=this.mLayerState.mChildren;for(var i=this.mLayerState.mNum-1;i>=0;i--){if(layers[i].mId==id){if(layers[i].mDrawable!=null){if(drawable!=null){var bounds=layers[i].mDrawable.getBounds();drawable.setBounds(bounds);}layers[i].mDrawable.setCallback(null);}if(drawable!=null){drawable.setCallback(this);}layers[i].mDrawable=drawable;return true;}}return false;}},{key:'setLayerInset',value:function setLayerInset(index,l,t,r,b){var childDrawable=this.mLayerState.mChildren[index];childDrawable.mInsetL=l;childDrawable.mInsetT=t;childDrawable.mInsetR=r;childDrawable.mInsetB=b;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;i0){return array[0].mDrawable.getAlpha();}else {return _get2(Object.getPrototypeOf(LayerDrawable.prototype),'getAlpha',this).call(this);}}},{key:'setOpacity',value:function setOpacity(opacity){this.mOpacityOverride=opacity;}},{key:'getOpacity',value:function getOpacity(){if(this.mOpacityOverride!=PixelFormat.UNKNOWN){return this.mOpacityOverride;}return this.mLayerState.getOpacity();}},{key:'setAutoMirrored',value:function setAutoMirrored(mirrored){this.mLayerState.mAutoMirrored=mirrored;var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;iwidth){width=w;}padL+=this.mPaddingL[i];padR+=this.mPaddingR[i];}return width;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){var height=-1;var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;var padT=0,padB=0;for(var i=0;iheight){height=h;}padT+=this.mPaddingT[i];padB+=this.mPaddingB[i];}return height;}},{key:'reapplyPadding',value:function reapplyPadding(i,r){var rect=this.mTmpRect;r.mDrawable.getPadding(rect);if(rect.left!=this.mPaddingL[i]||rect.top!=this.mPaddingT[i]||rect.right!=this.mPaddingR[i]||rect.bottom!=this.mPaddingB[i]){this.mPaddingL[i]=rect.left;this.mPaddingT[i]=rect.top;this.mPaddingR[i]=rect.right;this.mPaddingB[i]=rect.bottom;return true;}return false;}},{key:'ensurePadding',value:function ensurePadding(){var N=this.mLayerState.mNum;if(this.mPaddingL!=null&&this.mPaddingL.length>=N){return;}this.mPaddingL=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingT=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingR=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingB=androidui.util.ArrayCreator.newNumberArray(N);for(var i=0;i0?this.mChildren[0].mDrawable.getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i");}this.mState.mDrawable=drawable;this.mState.mPivotXRel=pivotXRel;this.mState.mPivotX=pivotX;this.mState.mPivotYRel=pivotYRel;this.mState.mPivotY=pivotY;this.mState.mFromDegrees=this.mState.mCurrentDegrees=fromDegrees;this.mState.mToDegrees=toDegrees;if(drawable!=null){drawable.setCallback(this);}}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(RotateDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}}]);return RotateDrawable;}(Drawable);RotateDrawable.MAX_LEVEL=10000.0;drawable_5.RotateDrawable=RotateDrawable;(function(RotateDrawable){var RotateState=function(){function RotateState(source,owner){_classCallCheck(this,RotateState);this.mPivotX=0;this.mPivotY=0;this.mFromDegrees=0;this.mToDegrees=0;this.mCurrentDegrees=0;if(source!=null){this.mDrawable=source.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mPivotXRel=source.mPivotXRel;this.mPivotX=source.mPivotX;this.mPivotYRel=source.mPivotYRel;this.mPivotY=source.mPivotY;this.mFromDegrees=this.mCurrentDegrees=source.mFromDegrees;this.mToDegrees=source.mToDegrees;this.mCanConstantState=this.mCheckedConstantState=true;}}_createClass(RotateState,[{key:'newDrawable',value:function newDrawable(){return new RotateDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return RotateState;}();RotateDrawable.RotateState=RotateState;})(RotateDrawable=drawable_5.RotateDrawable||(drawable_5.RotateDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Float=function(){function Float(){_classCallCheck(this,Float);}_createClass(Float,null,[{key:'parseFloat',value:function parseFloat(value){return Number.parseFloat(value);}}]);return Float;}();Float.MIN_VALUE=Number.MIN_VALUE;Float.MAX_VALUE=Number.MAX_VALUE;lang.Float=Float;})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_6){var Rect=android.graphics.Rect;var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var ScaleDrawable=function(_Drawable5){_inherits(ScaleDrawable,_Drawable5);function ScaleDrawable(){_classCallCheck(this,ScaleDrawable);var _this22=_possibleConstructorReturn(this,Object.getPrototypeOf(ScaleDrawable).call(this));_this22.mTmpRect=new Rect();if(arguments.length<=1){_this22.mScaleState=new ScaleDrawable.ScaleState(arguments.length<=0?undefined:arguments[0],_this22);return _possibleConstructorReturn(_this22);}var drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var scaleWidth=arguments.length<=2?undefined:arguments[2];var scaleHeight=arguments.length<=3?undefined:arguments[3];_this22.mScaleState=new ScaleDrawable.ScaleState(null,_this22);_this22.mScaleState.mDrawable=drawable;_this22.mScaleState.mGravity=gravity;_this22.mScaleState.mScaleWidth=scaleWidth;_this22.mScaleState.mScaleHeight=scaleHeight;if(drawable!=null){drawable.setCallback(_this22);}return _this22;}_createClass(ScaleDrawable,[{key:'getDrawable',value:function getDrawable(){return this.mScaleState.mDrawable;}},{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(ScaleDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var sw=a.getFloat("android:scaleWidth",1);var sh=a.getFloat("android:scaleHeight",1);var gStr=a.getString("android:scaleGravity");var g=Gravity.parseGravity(gStr,Gravity.LEFT);var min=a.getBoolean("android:useIntrinsicSizeAsMinimum",false);var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&parser.children[0] instanceof HTMLElement){dr=Drawable.createFromXml(r,parser.children[0]);}if(dr==null){throw Error('new IllegalArgumentException("No drawable specified for ")');}this.mScaleState.mDrawable=dr;this.mScaleState.mScaleWidth=sw;this.mScaleState.mScaleHeight=sh;this.mScaleState.mGravity=g;this.mScaleState.mUseIntrinsicSizeAsMin=min;if(dr!=null){dr.setCallback(this);}}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){if(this.getCallback()!=null){this.getCallback().invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(this.getCallback()!=null){this.getCallback().scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(this.getCallback()!=null){this.getCallback().unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){if(this.mScaleState.mDrawable.getLevel()!=0)this.mScaleState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){return this.mScaleState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mScaleState.mDrawable.setVisible(visible,restart);return _get2(Object.getPrototypeOf(ScaleDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mScaleState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mScaleState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mScaleState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mScaleState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mScaleState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onLevelChange',value:function onLevelChange(level){this.mScaleState.mDrawable.setLevel(level);this.onBoundsChange(this.getBounds());this.invalidateSelf();return true;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){var r=this.mTmpRect;var min=this.mScaleState.mUseIntrinsicSizeAsMin;var level=this.getLevel();var w=bounds.width();if(this.mScaleState.mScaleWidth>0){var iw=min?this.mScaleState.mDrawable.getIntrinsicWidth():0;w-=Math.floor((w-iw)*(10000-level)*this.mScaleState.mScaleWidth/10000);}var h=bounds.height();if(this.mScaleState.mScaleHeight>0){var ih=min?this.mScaleState.mDrawable.getIntrinsicHeight():0;h-=Math.floor((h-ih)*(10000-level)*this.mScaleState.mScaleHeight/10000);}Gravity.apply(this.mScaleState.mGravity,w,h,bounds,r);if(w>0&&h>0){this.mScaleState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mScaleState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mScaleState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mScaleState.canConstantState()){return this.mScaleState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(ScaleDrawable.prototype),'mutate',this).call(this)==this){this.mScaleState.mDrawable.mutate();this.mMutated=true;}return this;}}]);return ScaleDrawable;}(Drawable);drawable_6.ScaleDrawable=ScaleDrawable;(function(ScaleDrawable){var ScaleState=function(){function ScaleState(orig,owner){_classCallCheck(this,ScaleState);this.mScaleWidth=0;this.mScaleHeight=0;this.mGravity=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mScaleWidth=orig.mScaleWidth;this.mScaleHeight=orig.mScaleHeight;this.mGravity=orig.mGravity;this.mUseIntrinsicSizeAsMin=orig.mUseIntrinsicSizeAsMin;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(ScaleState,[{key:'newDrawable',value:function newDrawable(){return new ScaleDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return ScaleState;}();ScaleDrawable.ScaleState=ScaleState;})(ScaleDrawable=drawable_6.ScaleDrawable||(drawable_6.ScaleDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Animatable;(function(Animatable){function isImpl(obj){return obj&&obj['start']&&obj['stop']&&obj['isRunning'];}Animatable.isImpl=isImpl;})(Animatable=drawable.Animatable||(drawable.Animatable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Rect=android.graphics.Rect;var PixelFormat=android.graphics.PixelFormat;var Log=android.util.Log;var SparseArray=android.util.SparseArray;var SystemClock=android.os.SystemClock;var DrawableContainer=function(_drawable$Drawable3){_inherits(DrawableContainer,_drawable$Drawable3);function DrawableContainer(){var _Object$getPrototypeO2;_classCallCheck(this,DrawableContainer);for(var _len17=arguments.length,args=Array(_len17),_key18=0;_key18<_len17;_key18++){args[_key18]=arguments[_key18];}var _this23=_possibleConstructorReturn(this,(_Object$getPrototypeO2=Object.getPrototypeOf(DrawableContainer)).call.apply(_Object$getPrototypeO2,[this].concat(args)));_this23.mAlpha=0xFF;_this23.mCurIndex=-1;_this23.mMutated=false;_this23.mEnterAnimationEnd=0;_this23.mExitAnimationEnd=0;return _this23;}_createClass(DrawableContainer,[{key:'draw',value:function draw(canvas){if(this.mCurrDrawable!=null){this.mCurrDrawable.draw(canvas);}if(this.mLastDrawable!=null){this.mLastDrawable.draw(canvas);}}},{key:'needsMirroring',value:function needsMirroring(){return false&&this.isAutoMirrored();}},{key:'getPadding',value:function getPadding(padding){var r=this.mDrawableContainerState.getConstantPadding();var result=undefined;if(r!=null){padding.set(r);result=(r.left|r.top|r.bottom|r.right)!=0;}else {if(this.mCurrDrawable!=null){result=this.mCurrDrawable.getPadding(padding);}else {result=_get2(Object.getPrototypeOf(DrawableContainer.prototype),'getPadding',this).call(this,padding);}}if(this.needsMirroring()){var left=padding.left;var right=padding.right;padding.left=right;padding.right=left;}return result;}},{key:'setAlpha',value:function setAlpha(alpha){if(this.mAlpha!=alpha){this.mAlpha=alpha;if(this.mCurrDrawable!=null){if(this.mEnterAnimationEnd==0){this.mCurrDrawable.mutate().setAlpha(alpha);}else {this.animate(false);}}}}},{key:'getAlpha',value:function getAlpha(){return this.mAlpha;}},{key:'setDither',value:function setDither(dither){if(this.mDrawableContainerState.mDither!=dither){this.mDrawableContainerState.mDither=dither;if(this.mCurrDrawable!=null){this.mCurrDrawable.mutate().setDither(this.mDrawableContainerState.mDither);}}}},{key:'setEnterFadeDuration',value:function setEnterFadeDuration(ms){this.mDrawableContainerState.mEnterFadeDuration=ms;}},{key:'setExitFadeDuration',value:function setExitFadeDuration(ms){this.mDrawableContainerState.mExitFadeDuration=ms;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){if(this.mLastDrawable!=null){this.mLastDrawable.setBounds(bounds);}if(this.mCurrDrawable!=null){this.mCurrDrawable.setBounds(bounds);}}},{key:'isStateful',value:function isStateful(){return this.mDrawableContainerState.isStateful();}},{key:'setAutoMirrored',value:function setAutoMirrored(mirrored){this.mDrawableContainerState.mAutoMirrored=mirrored;if(this.mCurrDrawable!=null){this.mCurrDrawable.mutate().setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);}}},{key:'isAutoMirrored',value:function isAutoMirrored(){return this.mDrawableContainerState.mAutoMirrored;}},{key:'jumpToCurrentState',value:function jumpToCurrentState(){var changed=false;if(this.mLastDrawable!=null){this.mLastDrawable.jumpToCurrentState();this.mLastDrawable=null;changed=true;}if(this.mCurrDrawable!=null){this.mCurrDrawable.jumpToCurrentState();this.mCurrDrawable.mutate().setAlpha(this.mAlpha);}if(this.mExitAnimationEnd!=0){this.mExitAnimationEnd=0;changed=true;}if(this.mEnterAnimationEnd!=0){this.mEnterAnimationEnd=0;changed=true;}if(changed){this.invalidateSelf();}}},{key:'onStateChange',value:function onStateChange(state){if(this.mLastDrawable!=null){return this.mLastDrawable.setState(state);}if(this.mCurrDrawable!=null){return this.mCurrDrawable.setState(state);}return false;}},{key:'onLevelChange',value:function onLevelChange(level){if(this.mLastDrawable!=null){return this.mLastDrawable.setLevel(level);}if(this.mCurrDrawable!=null){return this.mCurrDrawable.setLevel(level);}return false;}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantWidth();}return this.mCurrDrawable!=null?this.mCurrDrawable.getIntrinsicWidth():-1;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantHeight();}return this.mCurrDrawable!=null?this.mCurrDrawable.getIntrinsicHeight():-1;}},{key:'getMinimumWidth',value:function getMinimumWidth(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantMinimumWidth();}return this.mCurrDrawable!=null?this.mCurrDrawable.getMinimumWidth():0;}},{key:'getMinimumHeight',value:function getMinimumHeight(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantMinimumHeight();}return this.mCurrDrawable!=null?this.mCurrDrawable.getMinimumHeight():0;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(who==this.mCurrDrawable&&callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().unscheduleDrawable(this,what);}}},{key:'setVisible',value:function setVisible(visible,restart){var changed=_get2(Object.getPrototypeOf(DrawableContainer.prototype),'setVisible',this).call(this,visible,restart);if(this.mLastDrawable!=null){this.mLastDrawable.setVisible(visible,restart);}if(this.mCurrDrawable!=null){this.mCurrDrawable.setVisible(visible,restart);}return changed;}},{key:'getOpacity',value:function getOpacity(){return this.mCurrDrawable==null||!this.mCurrDrawable.isVisible()?PixelFormat.TRANSPARENT:this.mDrawableContainerState.getOpacity();}},{key:'selectDrawable',value:function selectDrawable(idx){var _this24=this;if(idx==this.mCurIndex){return false;}var now=SystemClock.uptimeMillis();if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" from "+this.mCurIndex+" to "+idx+": exit="+this.mDrawableContainerState.mExitFadeDuration+" enter="+this.mDrawableContainerState.mEnterFadeDuration);if(this.mDrawableContainerState.mExitFadeDuration>0){if(this.mLastDrawable!=null){this.mLastDrawable.setVisible(false,false);}if(this.mCurrDrawable!=null){this.mLastDrawable=this.mCurrDrawable;this.mExitAnimationEnd=now+this.mDrawableContainerState.mExitFadeDuration;}else {this.mLastDrawable=null;this.mExitAnimationEnd=0;}}else if(this.mCurrDrawable!=null){this.mCurrDrawable.setVisible(false,false);}if(idx>=0&&idx0){this.mEnterAnimationEnd=now+this.mDrawableContainerState.mEnterFadeDuration;}else {d.setAlpha(this.mAlpha);}d.setVisible(this.isVisible(),true);d.setDither(this.mDrawableContainerState.mDither);d.setState(this.getState());d.setLevel(this.getLevel());d.setBounds(this.getBounds());d.setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);}else {}}else {this.mCurrDrawable=null;this.mCurIndex=-1;}if(this.mEnterAnimationEnd!=0||this.mExitAnimationEnd!=0){if(this.mAnimationRunnable==null){(function(){var t=_this24;_this24.mAnimationRunnable={run:function run(){t.animate(true);t.invalidateSelf();}};})();}else {this.unscheduleSelf(this.mAnimationRunnable);}this.animate(true);}this.invalidateSelf();return true;}},{key:'animate',value:function animate(schedule){var now=SystemClock.uptimeMillis();var animating=false;if(this.mCurrDrawable!=null){if(this.mEnterAnimationEnd!=0){if(this.mEnterAnimationEnd<=now){this.mCurrDrawable.mutate().setAlpha(this.mAlpha);this.mEnterAnimationEnd=0;}else {var animAlpha=(this.mEnterAnimationEnd-now)*255/this.mDrawableContainerState.mEnterFadeDuration;if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" cur alpha "+animAlpha);this.mCurrDrawable.mutate().setAlpha((255-animAlpha)*this.mAlpha/255);animating=true;}}}else {this.mEnterAnimationEnd=0;}if(this.mLastDrawable!=null){if(this.mExitAnimationEnd!=0){if(this.mExitAnimationEnd<=now){this.mLastDrawable.setVisible(false,false);this.mLastDrawable=null;this.mExitAnimationEnd=0;}else {var _animAlpha=(this.mExitAnimationEnd-now)*255/this.mDrawableContainerState.mExitFadeDuration;if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" last alpha "+_animAlpha);this.mLastDrawable.mutate().setAlpha(_animAlpha*this.mAlpha/255);animating=true;}}}else {this.mExitAnimationEnd=0;}if(schedule&&animating){this.scheduleSelf(this.mAnimationRunnable,now+1000/60);}}},{key:'getCurrent',value:function getCurrent(){return this.mCurrDrawable;}},{key:'getConstantState',value:function getConstantState(){if(this.mDrawableContainerState.canConstantState()){return this.mDrawableContainerState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(DrawableContainer.prototype),'mutate',this).call(this)==this){this.mDrawableContainerState.mutate();this.mMutated=true;}return this;}},{key:'setConstantState',value:function setConstantState(state){this.mDrawableContainerState=state;}}]);return DrawableContainer;}(drawable.Drawable);DrawableContainer.DEBUG=Log.DBG_DrawableContainer;DrawableContainer.TAG="DrawableContainer";DrawableContainer.DEFAULT_DITHER=true;drawable.DrawableContainer=DrawableContainer;(function(DrawableContainer){var DrawableContainerState=function(){function DrawableContainerState(orig,owner){_classCallCheck(this,DrawableContainerState);this.mVariablePadding=false;this.mPaddingChecked=false;this.mConstantSize=false;this.mComputedConstantSize=false;this.mConstantWidth=0;this.mConstantHeight=0;this.mConstantMinimumWidth=0;this.mConstantMinimumHeight=0;this.mCheckedOpacity=false;this.mOpacity=0;this.mCheckedStateful=false;this.mStateful=false;this.mCheckedConstantState=false;this.mCanConstantState=false;this.mDither=DrawableContainer.DEFAULT_DITHER;this.mMutated=false;this.mEnterFadeDuration=0;this.mExitFadeDuration=0;this.mAutoMirrored=false;this.mOwner=owner;if(orig!=null){this.mCheckedConstantState=true;this.mCanConstantState=true;this.mVariablePadding=orig.mVariablePadding;this.mConstantSize=orig.mConstantSize;this.mDither=orig.mDither;this.mMutated=orig.mMutated;this.mEnterFadeDuration=orig.mEnterFadeDuration;this.mExitFadeDuration=orig.mExitFadeDuration;this.mAutoMirrored=orig.mAutoMirrored;this.mConstantPadding=orig.getConstantPadding();this.mPaddingChecked=true;this.mConstantWidth=orig.getConstantWidth();this.mConstantHeight=orig.getConstantHeight();this.mConstantMinimumWidth=orig.getConstantMinimumWidth();this.mConstantMinimumHeight=orig.getConstantMinimumHeight();this.mComputedConstantSize=true;this.mOpacity=orig.getOpacity();this.mCheckedOpacity=true;this.mStateful=orig.isStateful();this.mCheckedStateful=true;var origDr=orig.mDrawables;this.mDrawables=new Array(0);var origDf=orig.mDrawableFutures;if(origDf!=null){this.mDrawableFutures=origDf.clone();}else {this.mDrawableFutures=new SparseArray(this.mNumChildren);}var N=this.mNumChildren;for(var i=0;i=0){var prepared=this.mDrawableFutures.valueAt(keyIndex).get(this);this.mDrawables[index]=prepared;this.mDrawableFutures.removeAt(keyIndex);return prepared;}}return null;}},{key:'mutate',value:function mutate(){var N=this.mNumChildren;var drawables=this.mDrawables;for(var i=0;ir.left)r.left=t.left;if(t.top>r.top)r.top=t.top;if(t.right>r.right)r.right=t.right;if(t.bottom>r.bottom)r.bottom=t.bottom;}}this.mPaddingChecked=true;return this.mConstantPadding=r;}},{key:'setConstantSize',value:function setConstantSize(constant){this.mConstantSize=constant;}},{key:'isConstantSize',value:function isConstantSize(){return this.mConstantSize;}},{key:'getConstantWidth',value:function getConstantWidth(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantWidth;}},{key:'getConstantHeight',value:function getConstantHeight(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantHeight;}},{key:'getConstantMinimumWidth',value:function getConstantMinimumWidth(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantMinimumWidth;}},{key:'getConstantMinimumHeight',value:function getConstantMinimumHeight(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantMinimumHeight;}},{key:'computeConstantSize',value:function computeConstantSize(){this.mComputedConstantSize=true;this.createAllFutures();var N=this.mNumChildren;var drawables=this.mDrawables;this.mConstantWidth=this.mConstantHeight=-1;this.mConstantMinimumWidth=this.mConstantMinimumHeight=0;for(var i=0;ithis.mConstantWidth)this.mConstantWidth=s;s=dr.getIntrinsicHeight();if(s>this.mConstantHeight)this.mConstantHeight=s;s=dr.getMinimumWidth();if(s>this.mConstantMinimumWidth)this.mConstantMinimumWidth=s;s=dr.getMinimumHeight();if(s>this.mConstantMinimumHeight)this.mConstantMinimumHeight=s;}}},{key:'setEnterFadeDuration',value:function setEnterFadeDuration(duration){this.mEnterFadeDuration=duration;}},{key:'getEnterFadeDuration',value:function getEnterFadeDuration(){return this.mEnterFadeDuration;}},{key:'setExitFadeDuration',value:function setExitFadeDuration(duration){this.mExitFadeDuration=duration;}},{key:'getExitFadeDuration',value:function getExitFadeDuration(){return this.mExitFadeDuration;}},{key:'getOpacity',value:function getOpacity(){if(this.mCheckedOpacity){return this.mOpacity;}this.createAllFutures();this.mCheckedOpacity=true;var N=this.mNumChildren;var drawables=this.mDrawables;var op=N>0?drawables[0].getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i-1;}},{key:'run',value:function run(){this.nextFrame(false);}},{key:'unscheduleSelf',value:function unscheduleSelf(what){this.mCurFrame=-1;_get2(Object.getPrototypeOf(AnimationDrawable.prototype),'unscheduleSelf',this).call(this,what);}},{key:'getNumberOfFrames',value:function getNumberOfFrames(){return this.mAnimationState.getChildCount();}},{key:'getFrame',value:function getFrame(index){return this.mAnimationState.getChild(index);}},{key:'getDuration',value:function getDuration(i){return this.mAnimationState.mDurations[i];}},{key:'isOneShot',value:function isOneShot(){return this.mAnimationState.mOneShot;}},{key:'setOneShot',value:function setOneShot(oneShot){this.mAnimationState.mOneShot=oneShot;}},{key:'addFrame',value:function addFrame(frame,duration){this.mAnimationState.addFrame(frame,duration);if(this.mCurFrame<0){this.setFrame(0,true,false);}}},{key:'nextFrame',value:function nextFrame(unschedule){var next=this.mCurFrame+1;var N=this.mAnimationState.getChildCount();if(next>=N){next=0;}this.setFrame(next,unschedule,!this.mAnimationState.mOneShot||next=this.mAnimationState.getChildCount()){return;}this.mCurFrame=frame;this.selectDrawable(frame);if(unschedule){this.unscheduleSelf(this);}if(animate){this.mCurFrame=frame;this.scheduleSelf(this,SystemClock.uptimeMillis()+this.mAnimationState.mDurations[frame]);}}},{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(AnimationDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);this.mAnimationState.setVariablePadding(a.getBoolean("android:variablePadding",false));this.mAnimationState.mOneShot=a.getBoolean("android:oneshot",false);a.recycle();var _iteratorNormalCompletion36=true;var _didIteratorError36=false;var _iteratorError36=undefined;try{for(var _iterator36=Array.from(parser.children)[Symbol.iterator](),_step36;!(_iteratorNormalCompletion36=(_step36=_iterator36.next()).done);_iteratorNormalCompletion36=true){var child=_step36.value;var item=child;if(item.tagName.toLowerCase()!=='item'){continue;}a=r.obtainAttributes(item);var duration=a.getInt("android:duration",-1);if(duration<0){throw Error('new XmlPullParserException(parser.getPositionDescription() + ": tag requires a \'duration\' attribute")');}var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&item.children[0] instanceof HTMLElement){dr=Drawable.createFromXml(r,item.children[0]);}if(!dr){throw Error('new XmlPullParserException( tag requires a \'drawable\' attribute or child tag defining a drawable)');}this.mAnimationState.addFrame(dr,duration);if(dr!=null){dr.setCallback(this);}}}catch(err){_didIteratorError36=true;_iteratorError36=err;}finally {try{if(!_iteratorNormalCompletion36&&_iterator36.return){_iterator36.return();}}finally {if(_didIteratorError36){throw _iteratorError36;}}}this.setFrame(0,true,false);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(AnimationDrawable.prototype),'mutate',this).call(this)==this){this.mAnimationState.mDurations=[].concat(_toConsumableArray(this.mAnimationState.mDurations));this.mMutated=true;}return this;}}]);return AnimationDrawable;}(DrawableContainer);drawable.AnimationDrawable=AnimationDrawable;(function(AnimationDrawable){var AnimationState=function(_DrawableContainer$Dr){_inherits(AnimationState,_DrawableContainer$Dr);function AnimationState(orig,owner){_classCallCheck(this,AnimationState);var _this26=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationState).call(this,orig,owner));if(orig!=null){_this26.mDurations=orig.mDurations;_this26.mOneShot=orig.mOneShot;}else {_this26.mDurations=androidui.util.ArrayCreator.newNumberArray(_this26.getCapacity());_this26.mOneShot=true;}return _this26;}_createClass(AnimationState,[{key:'newDrawable',value:function newDrawable(){return new AnimationDrawable(this);}},{key:'addFrame',value:function addFrame(dr,dur){var pos=_get2(Object.getPrototypeOf(AnimationState.prototype),'addChild',this).call(this,dr);this.mDurations[pos]=dur;}}]);return AnimationState;}(DrawableContainer.DrawableContainerState);AnimationDrawable.AnimationState=AnimationState;})(AnimationDrawable=drawable.AnimationDrawable||(drawable.AnimationDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_7){var DEBUG=android.util.Log.DBG_StateListDrawable;var TAG="StateListDrawable";var DEFAULT_DITHER=true;var StateListDrawable=function(_drawable_7$DrawableC){_inherits(StateListDrawable,_drawable_7$DrawableC);function StateListDrawable(){_classCallCheck(this,StateListDrawable);var _this27=_possibleConstructorReturn(this,Object.getPrototypeOf(StateListDrawable).call(this));_this27.initWithState(null);return _this27;}_createClass(StateListDrawable,[{key:'initWithState',value:function initWithState(state){var _as=new StateListState(state,this);this.mStateListState=_as;this.setConstantState(_as);this.onStateChange(this.getState());}},{key:'addState',value:function addState(stateSet,drawable){if(drawable!=null){this.mStateListState.addStateSet(stateSet,drawable);this.onStateChange(this.getState());}}},{key:'isStateful',value:function isStateful(){return true;}},{key:'onStateChange',value:function onStateChange(stateSet){var idx=this.mStateListState.indexOfStateSet(stateSet);if(DEBUG)android.util.Log.i(TAG,"onStateChange "+this+" states "+stateSet+" found "+idx);if(idx<0){idx=this.mStateListState.indexOfStateSet(android.util.StateSet.WILD_CARD);}if(this.selectDrawable(idx)){return true;}return _get2(Object.getPrototypeOf(StateListDrawable.prototype),'onStateChange',this).call(this,stateSet);}},{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(StateListDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var state=this.mStateListState;state.mVariablePadding=a.getBoolean("android:variablePadding",state.mVariablePadding);state.mConstantSize=a.getBoolean("android:constantSize",state.mConstantSize);state.mEnterFadeDuration=a.getInt("android:enterFadeDuration",state.mEnterFadeDuration);state.mExitFadeDuration=a.getInt("android:exitFadeDuration",state.mExitFadeDuration);state.mDither=a.getBoolean("android:dither",state.mDither);state.mAutoMirrored=a.getBoolean("android:autoMirrored",state.mAutoMirrored);a.recycle();var _iteratorNormalCompletion37=true;var _didIteratorError37=false;var _iteratorError37=undefined;try{for(var _iterator37=Array.from(parser.children)[Symbol.iterator](),_step37;!(_iteratorNormalCompletion37=(_step37=_iterator37.next()).done);_iteratorNormalCompletion37=true){var child=_step37.value;var item=child;if(item.tagName.toLowerCase()!=='item'){continue;}var dr=undefined;var stateSpec=[];var typedArray=r.obtainAttributes(item);var _iteratorNormalCompletion38=true;var _didIteratorError38=false;var _iteratorError38=undefined;try{for(var _iterator38=Array.from(item.attributes)[Symbol.iterator](),_step38;!(_iteratorNormalCompletion38=(_step38=_iterator38.next()).done);_iteratorNormalCompletion38=true){var attr=_step38.value;var attrName=attr.name;if(attrName==='android:drawable'){dr=typedArray.getDrawable(attrName);}else if(attrName.startsWith('android:state_')){var _state=attrName.substring('android:state_'.length);var stateValue=android.view.View['VIEW_STATE_'+_state.toUpperCase()];if(typeof stateValue==="number"){stateSpec.push(typedArray.getBoolean(attrName,true)?stateValue:-stateValue);}}}}catch(err){_didIteratorError38=true;_iteratorError38=err;}finally {try{if(!_iteratorNormalCompletion38&&_iterator38.return){_iterator38.return();}}finally {if(_didIteratorError38){throw _iteratorError38;}}}if(!dr&&item.children[0] instanceof HTMLElement){dr=drawable_7.Drawable.createFromXml(r,item.children[0]);}if(!dr){throw new Error(": tag requires a 'drawable' attribute or child tag defining a drawable");}state.addStateSet(stateSpec,dr);}}catch(err){_didIteratorError37=true;_iteratorError37=err;}finally {try{if(!_iteratorNormalCompletion37&&_iterator37.return){_iterator37.return();}}finally {if(_didIteratorError37){throw _iteratorError37;}}}this.onStateChange(this.getState());}},{key:'getStateListState',value:function getStateListState(){return this.mStateListState;}},{key:'getStateCount',value:function getStateCount(){return this.mStateListState.getChildCount();}},{key:'getStateSet',value:function getStateSet(index){return this.mStateListState.mStateSets[index];}},{key:'getStateDrawable',value:function getStateDrawable(index){return this.mStateListState.getChild(index);}},{key:'getStateDrawableIndex',value:function getStateDrawableIndex(stateSet){return this.mStateListState.indexOfStateSet(stateSet);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(StateListDrawable.prototype),'mutate',this).call(this)==this){var sets=this.mStateListState.mStateSets;var count=sets.length;this.mStateListState.mStateSets=new Array(count);for(var i=0;idrawingCacheSize)return null;cache=this.mNinePatchDrawCache=new Canvas(bound.width(),bound.height());this.drawNinePatch(cache);return cache;}},{key:'drawNinePatch',value:function drawNinePatch(canvas){var _this32=this;var smoothEnableBak=canvas.isImageSmoothingEnabled();canvas.setImageSmoothingEnabled(false);var imageWidth=this.mImageWidth;var imageHeight=this.mImageHeight;if(imageHeight<=0||imageWidth<=0)return;var image=this.mState.mImage;var bound=this.getBounds();var staticWidthSum=this.mNinePatchBorderInfo.getHorizontalStaticLengthSum();var staticHeightSum=this.mNinePatchBorderInfo.getVerticalStaticLengthSum();var extraWidth=bound.width()-staticWidthSum;var extraHeight=bound.height()-staticHeightSum;var staticWidthPartScale=extraWidth>=0||staticWidthSum==0?1:bound.width()/staticWidthSum;var staticHeightPartScale=extraHeight>=0||staticHeightSum==0?1:bound.height()/staticHeightSum;var scaleHorizontalWeightSum=this.mNinePatchBorderInfo.getHorizontalScaleLengthSum();var scaleVerticalWeightSum=this.mNinePatchBorderInfo.getVerticalScaleLengthSum();var drawColumn=function drawColumn(srcFromX,srcToX,dstFromX,dstToX){var heightParts=_this32.mNinePatchBorderInfo.getVerticalTypedValues();var srcFromY=1;var dstFromY=0;for(var i=0,size=heightParts.length;i=3){this.paddingLeft=Math.max(0,this.horizontalTypedValues[0]);this.paddingRight=Math.max(0,this.horizontalTypedValues[this.horizontalTypedValues.length-1]);}if(this.verticalTypedValues.length>=3){this.paddingTop=Math.max(0,this.verticalTypedValues[0]);this.paddingBottom=Math.max(0,this.verticalTypedValues[this.verticalTypedValues.length-1]);}for(var i=0,length=rightBorder.length;i200&&Color.red(color)<50&&Color.green(color)<50&&Color.blue(color)<50;}},{key:'isScaleType',value:function isScaleType(typedValue){return typedValue<0;}},{key:'getValueUnpack',value:function getValueUnpack(typedValue){return Math.abs(typedValue);}}]);return NinePatchBorderInfo;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var androidui;(function(androidui){var image;(function(image){var Drawable=android.graphics.drawable.Drawable;var Rect=android.graphics.Rect;var ChangeImageSizeDrawable=function(_Drawable6){_inherits(ChangeImageSizeDrawable,_Drawable6);function ChangeImageSizeDrawable(drawable,overrideWidth){var overrideHeight=arguments.length<=2||arguments[2]===undefined?overrideWidth:arguments[2];_classCallCheck(this,ChangeImageSizeDrawable);var _this33=_possibleConstructorReturn(this,Object.getPrototypeOf(ChangeImageSizeDrawable).call(this));_this33.mTmpRect=new Rect();_this33.mMutated=false;_this33.mState=new State(null,_this33);_this33.mState.mDrawable=drawable;_this33.mState.mOverrideWidth=overrideWidth;_this33.mState.mOverrideHeight=overrideHeight;if(drawable!=null){drawable.setCallback(_this33);}return _this33;}_createClass(ChangeImageSizeDrawable,[{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){this.mState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){return this.mState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mState.mDrawable.setVisible(visible,restart);return _get2(Object.getPrototypeOf(ChangeImageSizeDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(r){this.mState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mState.mOverrideWidth;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mState.mOverrideHeight;}},{key:'getConstantState',value:function getConstantState(){if(this.mState.canConstantState()){return this.mState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(ChangeImageSizeDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mState.mDrawable;}}]);return ChangeImageSizeDrawable;}(Drawable);image.ChangeImageSizeDrawable=ChangeImageSizeDrawable;var State=function(){function State(orig,owner){_classCallCheck(this,State);this.mOverrideWidth=0;this.mOverrideHeight=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mOverrideWidth=orig.mOverrideWidth;this.mOverrideHeight=orig.mOverrideHeight;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(State,[{key:'newDrawable',value:function newDrawable(){var drawable=new ChangeImageSizeDrawable(null,0);drawable.mState=new State(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return State;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var android;(function(android){var R;(function(R){var NetImage=androidui.image.NetImage;var data={"actionbar_ic_back_white":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAzCAMAAABR9YM8AAAAclBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9eWEHEAAAAJXRSTlMA+wjy9g/JaUDVsqZONr6IFePdmHhbJBzr6c4tVEm9o5OCcF0v6lgICQAAALZJREFUOMu11EcSgzAQRFEZRBbZJjtb97+iS1PFrpuV+Nu3UphRpFq3KSNr7cLJdpCu1pVweiNKhGpOL0S3i6Me0Sb0RGSECkR3oRxRqoUCShWiMqT0E4ojQOtEaRDKGkQtpVGoGxF1lJrMUTtQmhFFi6NpRRQ7ChGpQqhUKHkVo2DZfmh6+0t0gLFvTLVgcICVBwTf9oHRCOa+cdtHhQ9m4Ru/9gATwf4crBVfdlpxnBXpE87mD+wlJVcMMSJcAAAAAElFTkSuQmCC"],"btn_check_off_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAFVBMVEUAAAAAmcwzMzMAmcwAmcwAmcwAmcySYuXAAAAAB3RSTlMAZk1gRhAMJ+/C7AAAAGhJREFUWMPt1rEJgFAMBuE02gedwA0EtRcXEFxAcP8dXCDvb14gzV3/9WdEVNJwebPtDsDnoiMApwJzAFYFpgC4WzP3JLA0SgQWBgAAAAAAANAJ8m+m5Mj0JGZs6KPAHoBRrfRrRFTRD3MwONmn2VynAAAAAElFTkSuQmCC"],"btn_check_off_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMATX7+8BUAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII="],"btn_check_off_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcwAmcwAmcwxNTcAmcwAmcwAmcwAmcwAmcwAmcwvOT0AmcwAmcwAmcwAmczmhCwqAAAAEHRSTlMAmRIfzgUJGg4WJtCScyQtx2HoRgAAAORJREFUWMNjGAWjYEgC1lAcIACr8tDQNJwgNBSL8WEdSjhBR2oApgVN04uNcQDzSo1QDAsi9O8I4gRnP7ViaEj6I4gHnFcLQNfQeRGfBtkZ6BpC2w/i0yBTga6BTV1QcNVj7H62WyUoWJSApiFMWVBwcSX2QJ1uJSholIpFw/PdLljB7jocGiy3YNfgPRmHBiMX7GnMRXlUw6iGUQ2jGkY1jGoY1TCqgRINhBsnlDd/CDewKG3CsRJqJJLeDKW0ocsQpoWvKb0oFbOxnoSvsa4WSn53AKEDX4cjgNQuzSgYBUMRAABvBwmfTLNSCwAAAABJRU5ErkJggg=="],"btn_check_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMAzORBQ6MAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII="],"btn_check_off_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAGFBMVEVPT080NDQ0NDRHR0cAAABPT09PT09PT0+86ZyxAAAACHRSTlMm1MgyABYeBtShLDEAAAB4SURBVFjD7dixDYAwEATBSzAxLdACLbxzAkukLoGE/qEAXmIlZ9ym1uTvU8TV9bFyRCiqQO0BnYASqkI1nQzM2hmY1Bkocs4Nak1KwZKUg+21HCQvBgYGBgYGBv8A+HRI4uePc25M+IuPRwQ8U+AhhE4tfMzBc9ENzCYkZWqWtP8AAAAASUVORK5CYII="],"btn_check_on_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcw9PT09PT09PT09PT09PT0AmcwAmcwAmcw9PT09PT09PT09PT0Amcw9PT1vR1UqAAAAEHRSTlMAZoBNQTg7Xj8IR0pEMVYjBJa89wAAASlJREFUWMPt1rFJBEEYhuENVsE7DSbS+GfPyEC4BhYrGKxA7OBCQxsQM/MrQazgSrAKQ7ECXZnzRdmd7x84OIT50uWZN5mFaerq6vayo4cwuknwFArBfSlYlYLMp1lfCNbdBFiO7PIrYNYXgY1ZNwGasR2bkfCAzQAu/KC17727wZUNO/cVCNwIIAIAFdDgloALHBIQQAQAIqDANQEXOEgBBV5cAcDc+r+BEHLg2brfAQHm6fYTEGCdTiWQB7PtsSc/gWUWfGzPfbVhiyYLuJ4xBWIe8AMsCGQBiRRQgAQBCVpAlIAEAQlIRA1IEFCARHQAEgQEIBE9gEQKSEAiugAJAj7QRidgFfwjML4dgqntCKxCZqe+Zyg78z102Z3rKc3eHpu6urp97BNIunQiihmctwAAAABJRU5ErkJggg=="],"btn_check_on_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAG1BMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT1gyl+KAAAACXRSTlMAgE05QT1HMyNi/YIlAAAA6ElEQVRYw+3TwQ2CQBRFUaOo6x/AtRILGDvADrQESrAD7VwxQ+4G/I/EhSb/bcmZGzKwiMVise9v084EXTXxoBnZ/hUwa2eBzqyaAONvYEZCAV0Pdjoo7L27DM7Wr9YKBC4yuBKQwJqAAghIgECSAIFyoYIVAQ2cCLjADwCOUgCwtFYJAA5WCwHAcrjYbQ54oBtu9pYDDtgM3w6B5iN45HMJOKDIBxNwQP7DSgIeyIkc8AAJAi4oAMkFJAi4gETyAQkCLuAuBECCgANIJAWQyAEXkEgSIEFAA0USAQvwR2Bi80EsFov98J52GzL3vLeyTQAAAABJRU5ErkJggg=="],"btn_check_on_focused_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_check_on_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_check_on_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAANlBMVEVPT08+Pj4+Pj5KSkpAQEAAAAA/Pz9PT08/Pz9PT09PT08/Pz9AQEBAQEBPT09PT09CQkI9PT36oQq5AAAAEXRSTlMm1MgyiACTFp4eAZeNggYHXQY8LIYAAAExSURBVGje7drBbsJAFENRtx0YJlAg//+zTaRWruQNU+NFxfMa3SOxSBZ5OGy79oGnb/Tb3t6ApSO0vuzAMhDbWDagI7h+wBXR3dARXcdAdAO1Wq1We6mdjojutK6Twtuj++lTCABbn8LDwNT/I4IPaH/bOQGc11+7PxXQfoMBGH0DOErfBPw+gVCfgNv3gYv2fcDvE7D6PtCk7wCns99XQN8mfl8Bvk3svgLsU3D7CvBpf8H3Pu0+AfYpaJ+/ngfuUpO+AejzRvomoIL0PUAF6dsABe3bgAra9wEK2vcBCtr3ARG07wMUpO8DIrCfACg0JAAKDQmAQkMCoNCQACg0ZACugAJeC/iY2F+Auc0D75NDrVar1Wqz+0/fxEf8aCB+9pA+3IifnuSPZ5LnP9e9/QXc5ydUPu9cjgAAAABJRU5ErkJggg=="],"btn_default_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAM1BMVEUAAAAzteUAmcwAAAAAAAAAkMAAmcwAjbwAmMsAM0UAAAAAgq4AfqgAbpMAgawAAAD/AAA0FdE+AAAAD3RSTlMAHz4TD0I5PSkZCjIyDQj2gUbVAAAAn0lEQVRYw+3ZSw6DMAxFUZq2zodP2P9qKzGqGFjYqkoC9y7gjDLJ83CoujWc0QoICHgJcN+SJJiStGjeLMGczAqYgqOkgOIBRQGDq/+Dj8MBdgFWQEBAQEBAQD9YAW8Atv8OAQEBAQE3sPkPOGAvYMvrnPwaHD3eqIA52r2YFbDkKb5NxSkXbRh/OtKX9vIyVnq7BQAC+sD1K8/Beid8AI8uHiWs1BycAAAAAElFTkSuQmCC"],"btn_default_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAbFBMVEUAAACZmZl5eXl0dHQAAAAAAACHh4dsbGyWlpZbW1uNjY1kZGQjIyOWlpZwcHAAAAAAAAB4eHhubm6Li4teXl5aWlqUlJSIiIhzc3NgYGBTU1N6enqMjIyXl5eIiIiXl5eMjIwAAAAAAAD/AADhocx4AAAAInRSTlMAJ4CAJh6AgICAgIAwJxUUAnp6eHh2dGNjX15cWjIxMDADER06CAAAAMlJREFUWMPt2TkOgzAQhWHALIltMPu+Be5/x0hUUYoRQxOjvP8An1y4mRnnVNuR84t2gAAB2gAmY/1gVY8J5SeFlCErKQtKHMJmcllNTTgQYOYtLrPFywhQeC47TwAEaBu4AQQIECBAgACvgxvAPwDt/4cAAQIECPAArR/AAd4BjLleTIK5WLngKnIC7KJ2jlnvm9uoI0BdKhWxUqrUBOjrvnqyqnrtE6DxL2SIxfgr4HtBSoBOagJmJr35cQEgwHPg/tGVg/WX8AZv3Su8QPHBAAAAAABJRU5ErkJggg=="],"btn_default_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAS1BMVEUAAAAzteUAmcwAAAAAiLUAAAAAmcwAHigAmcwAAAAAgasAhLEAk8QAksIAa44AcpgAmcwAAAAAAAAAAAAAAAAAmcwAmcwAAAD/AAAMZPkMAAAAF3RSTlMAZsyA5mbAiYgH3NvUy8S8tm5fSz8gFpzXpUMAAACoSURBVFjD7dk5DsMwDABBR0l0+L7l/780gKsgBWGxiGV49wFTsSFZHCruFWe0AQIC5gCuvjdJ9X6V/MWa5OwigN4o8gJoNaAVQKPq/+DjcID3BCMgICAgICCgHoyANwDzn0NAQEBAwB3MfgEH1IGXvs41Gq8RwE4DdgLoqjqVqysngJNry1dSZesmAQzDM7khSIfxMI/vpMY5XPwXAAh4Erh9pXlY/wgfdZAio63fx68AAAAASUVORK5CYII="],"btn_default_normal_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAflBMVEUAAACZmZkAAAB3d3eTk5MsLCzb29sAAABZWVnAwMAAAAAAAACYmJijo6OLi4sAAAAAAAA0NDRSUlLIyMhvb28WFhagoKAAAAAqKirY2NhISEjNzc0mJibDw8NfX1+5ubmzs7NBQUF+fn7R0dGRkZGioqIAAAAAAAAAAAD/AAAgdn43AAAAKHRSTlMAZhB2aLOnMIiEBAFnbWwOCqONino4FxOolZWTi4d+fXlzcW1kVSwjhumNDwAAAOlJREFUWMPt2ckOgjAUhWEFnFpoC4I4Mo/v/4ISVsakxIsaMJ5/3y9p0k3vXbxU07eYohYgQIAzAPkhP61JnfID19i9t7/sbztCt+7AgMjKOHGWpJwkLpkWVIXTeUTRKZQWlNlyRJnUgoZp0T3LNAACfA9sAAIECBAgQIDjwQbgH4Dzf4cAAQIECLAHZ/8BB/gF0P4s6AsyaAt/AIxMYVM9M9KDMvV8Qbm1bQnfS6UWVIHrnr0tIe/suoHSgiwMrscVqeM1CJkW5Cysqw2pqg4ZHxiMMyUNUlIx/tO7AIAApwLbh8YsrJ+EOyFWMqRTaWfwAAAAAElFTkSuQmCC"],"btn_default_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAclBMVEUAAABmZmYAAABkZGRaWlo3NzcAAAC7u7tNTU2Xl5cAAAAAAABycnIAAAA8PDyioqJISEiJiYlXV1eGhoYAAABcXFy6urqnp6eamppPT08uLi6xsbE9PT0VFRUaGhoAAABiYmJiYmJ4eHh3d3cAAAD/AAABlB2hAAAAJHRSTlMAZg9nbowwmnd+BAFrCoSCe3ZwFxRskomAcXFoYzkyI2RjU1NCIACPAAAA10lEQVRYw+3ZyQ6DIBSF4Sp2AlFRtM520Pd/xRpXTROI1400Pf+eLyzYcO9hVePSYY8mgAABOgCKrCnOpIomE2ZeZPEtLq+EyvmAReQvpUKPVKjUkxtB+QhnjyiGd2kE/dzbUO5bQEb3WGABA4AAV4AjQIAAAQIECHA7OAL8A9D9dwgQIECAABfQ+Q84QPfBlDGyx1ILWAV0MKgsYJukjBHvl7RmUPZRlFxIJVHUSyPIdVcfidWd5kZQcD2ciA2aC8tgnEufmOTip3cBAAHuBU4fbVlYfwlvr34uoI6kYcYAAAAASUVORK5CYII="],"btn_radio_off_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAAzteU9PT0zteU9PT09PT0zteUzteUzteU9PT0zteUzteU9PT09PT0zteU9PT0zteUzteU9PT0zteU9PT0zteUzteU9PT09PT09PT09PT0zteUzteUzteU9PT0zteUzteUzteU9PT3dmb2uAAAAI3RSTlMAZkxgRwQ4EkgOBiARPFMuWyYXTTYyLEAgCioMFkMyGxg/J0SE03YAAAMlSURBVGje7VnXltsgEEUDqlbv1Wv7/z8yoS2J4zVgmc0+6D75mIEpd4YyQgcOHDhw4DuxVMGW557n4TzfumpBb8VpK707lNcTehPCK/YeAgch2o9L5D1BtO61Xi3fBH0Ysv/WPmiUij1sJIEMRlQld0NVJMe6183P+RL5KXmo/iTGmxedqDi3ZfVEpOROvJRQHZ/bI4FpLNoMAEjWFuMkvei4FT2yRsApFMGJZwJ/gcyxUMG56F5YXxlWU8uhHevYR8iP67GF38hqPtoLDfbxwR/c+gyAnGv/z3G/PhOAjHvxga2jdGLrh2ypAgBuanWlYwaAmQ2sTIMF0yH+XD8eAAr/sdhUAGTTpwa8GNcXy28Wn5TAEH8tmQ5A0k+XGyuCe8YuQOs/E/VboaG3IHqhshszEKDQCPtnAKYhMg9SQ8s3ofEndH0dzkAmGldKQ4QM8EEdqKhxA7SIQxOljIaxovNCEwckXQUMPjLRQODGJpq5cKGGrJyAFOnBJWPput6Fq3RggBkZooBMuhBoawCLEqiBqADpg5SKYsAaUUZVSX9kMCJj3Hg6YIMNYxNupswBCxdiUaFXjSgWFM+cAXMWbiJBSs02J8NIo2qBFAZJ4PNq7kUux0CQFQjQco60JARiyxrhjKzQwqimP4E0oaDyNrjBLBJ1eyqXi2LMoEZWqFmirtpTgd5zEhFSK8QwiJ0+12Yp58xHVphYViTaPPWEAgBkBx+ImI//rwJMOXATIkXyspNk52nqptBGVWgut4qOTne+2Zlu17GL7VodOIWjAwdFzo5M94e++2uLunhFOy5eDq+OF7Oro7rDFkAmwwDNaqLd9T3zLa/vq+0D5Gz+ACmFA3qETp9Q9o9A0D0C9z9jJXH5j3mIi3d1ucpWAtG0Ei68lWDfLKoQd0LTDKlkZ8a+nRPctXPYgnftHCnqrCHVqHbR7pZaNjDLM9VSQ71oqf3EpuCfbc0vck2OL7sbs2Vw+WdPDLAY7NAOhI0ngKOgEq3lsA8iLP+Pwr3N8cZRc1xh/bK9fw3Re5A8+kCxndBbEcpPLF6eb0G1oAMHDhw48I34BUmSKxG/3YRpAAAAAElFTkSuQmCC"],"btn_radio_off_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1STLyxAAAAEHRSTlMATAUMRyoWMBA7P0MhNh49I5b3UAAAAXZJREFUWMNjGAWjYBSMAsoB8/NZgiJr6wyIVW/qKAgGIsHEqc8UFLyTwcDUdlZQcBox6u0F3ZMgLLUSwcmE1asKiirA2EyBggEE/btQXAHBYyqUIuTzFmkUFRwbPfCrZxO8hCqgK5iAV0OjOLpIoQReHzgWoAuxi+DzBZcsptjFBXg0BG7CFNMWxeMiwQZMQQ5B3G7iFMVq7QScGhKdsImqiOHUMPEANlEeSZxeEFHAJszkiMsTrKI4wg5XCuSWwBH9G3BoMHTALs4ijEPDwwLs4uxyuOL5AHZxHlFcoZqAI83L4tCw0QBHcEvj0OCogF2cSQSHBkEGXBKUaiDsJAo9TThYJSmNOMJJg9LERzh5U5qBCGdRcgsByosZfuwF2QfKi0qEYU5YXCSKr7iXUsAIo4ULSKtQeEUMyKqyKK8UEdVuA1q1S1nFTrjpEMRAEHQhN05WENv8SWZgMIM3fyhvYGH6/PgsQcGVNQYMo2AUjIJRQDEAAKdsRGG19ZMWAAAAAElFTkSuQmCC"],"btn_radio_off_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAwFBMVEUAAAAzteU9PT0zteUzteUzteU9PT0zteUzteUzteUzteUzteUzteU9PT0zteUzteUzteUzteU9PT09PT09PT0zteUzteU9PT09PT09PT0zteU9PT0zteU9PT09PT0zteU9PT09PT0zteUzteU9PT09PT09PT09PT09PT09PT0zteUzteU9PT09PT09PT09PT09PT0zteU9PT09PT09PT0zteUzteU9PT0zteUzteU9PT09PT0zteU9PT09PT09PT2npJ6rAAAAQHRSTlMAmcwElCDAN48ValInxnBLPVclpJCHMQy1nnorizK6dGo6CYB9VhkKhHBkQz8eBwV5X6yYdR0PXSwaKRR3TCKGCl/ORQAAA8lJREFUaN7tWNl6qjAQxmErIIq74r4r7kvtqT3tef+3OkwCtLYWEii94r9Rv0xmnCWTyS9kyJAhQ4bfhKYajm1LuZxk205R1X5UuVh3arlPqB3q4g+plw8Pubt4KD0LyZEv5EKgy0kj/66+YFiyLLrxkmWr1H83oSWJvSFRLZKuXm6XLpburxVj50KzqQr7fjpH6piu/43phCrRclG/F7FqNNv1OPpXdO/K//eb6f5UMQGUymn/OvODuKIVZvHrL9EUjuiv8rIJN2gOyl4ydCJYjKVfWtEfwxYAmNXp8LoThO11OK2aANAaeq5KMSwUif48+X6tACiL9fbj+ny9UFwT1Is/EneUVNzRIYdoewYwB42vMo2lCbDckbNOEvGHoz4lTO8jSW0FYPJyX2w2AajMiAWygblaxXEQn64Cx/L3ku0m9NpBlPqsJ84IQjo0oToPE21UQekGRV3kCJBD/r8Jkwjh3QJM4oOOXl+YDGAjq40w/grqj8ICepiHESZaZ+rP6KyK9VOBKoP87gStnV95LN27gK0Zv5yh2RAY0GjCwPdcZ3RAxgoBaAtM6IJZ9ndG33EH34EKLAVG7OHku1CKPAOSdybX0JuzGmgogLVax+MvMjSJmkgceBKYMSAuiB13c9TV4LgyBsmAgg6wu7DBFhwdI/HBS/EZzgIHJjDw0lwLF3zEpoUR6vklxFpIRz+B4S3P8mq5DIrABQVm3hlSI/ocbVlT+MdnoAqvwfYw6F4d7LGGePAES68GD6FyeBPgRdOCIZ+BNelbMk5JoXJYyReS4w2fgTLJ8sXdPg6VwzIQSc7mfAZeoIk9O7JOcy7wE0DgQwMUb/9DmgZENBAZolHCEKWT5DeSZA2TnHqZMh20CUxjHzTGVrGI0yqKuD31Zsfarq987boZtGvWC2eZyoUj6EmvzEMql/5T+KWffGzp3YwtzIPXgH3wagWDF/vo2GUeHdsAHKOj0P8w/L5wD79c4/sRWluG8b3KOb6/P0DeFFiwP0A6xAEWPMd/QmlpPAJNrkcg/zNWaZPEode2yPcQJxW3OQLsOR/i/FSCMpjfic4goBLylErgJ0PUgAzpTW7JkO1HMsSiZEgcusigUV37dA5RWL6lc0RPNB4hVYgkpEYFfkKKoviVUmtVwIVLqU1DKDVuUnCshojEJQUptLFPa37DaPu0pxafmM1RdEr5z0v5UicZMUvxGHDIElLLhASTZcsoSAHjnJQgz/dzISjI6dL7VH1yiKrT+ay95tRF4SehWYZuk7KybcdQNSFDhgwZMvwi/gPvHkn+qOIQ7AAAAABJRU5ErkJggg=="],"btn_radio_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1Pag0XAAAAI3RSTlMAzL8LJcV8OyqQpLpwhGsbtp0zFwcFsZd3VFovqkEfoWEPTH3CfAwAAAGvSURBVGje7ZjpboMwEIR3bHxwhisQyJ33f8hKVSo1akS8hkRU8veXEWgZH7tDgUAgEAgEAh9mM+g+UYBIen3b0MJEWYkHyiKi5TAVABUPxm6JWmvGWAGoDC2DTQCRm5Z+IY+5AKolqmh3gCok/UFmCsi2NJNTAuiGntJoIJlp916giyYed0jtLHcVYjklkDFETd7UCvqFZJtDeddwEtCvVTlSTx/aA2IH2bbH2W8t7dBJF921ROG1gADrqlQR8UmQudfaE5sjUumqvQrUHgWM7uILvwQLId3VUuBEPDJkHLlmL6QUlrXn0RGLCIJYCDQs/YCcWMS4sfQaI7G4IGPpKxhiYRAzPd5wTTswPZPEokHJ0gPEQ0Ks6wM+v2hdJvss03VttNHjqFjXYff245p27AtnbVcm+9J/b9uSovZpvAp3wyq/1nHv6hciv+a3bHjNL799P7cO7Xvs275TJJC7DSBrHaHchkBV0wzq6THWdhB25iB+4A/i/ChBPI0SiokogR2GpNq0D591CEMYHM/3OOf7hZEZ7nHO/wmkfiK1KgGApNfDhgKBQCAQCAQ+yxdkJhHOkHWlWgAAAABJRU5ErkJggg=="],"btn_radio_off_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAb1BMVEVPT08AAAA+Pj5PT09PT09PT09PT09PT09PT09KSkpPT09PT08+Pj5EREQ+Pj5GRkY+Pj5PT08+Pj5AQEBAQEBBQUE+Pj4+Pj4/Pz9FRUVMTExAQEBAQEA/Pz9DQ0M/Pz9HR0dDQ0NEREQ+Pj5DQ0Mt5iyXAAAAJXRSTlMmANQNAyQiHxswCRfIS8NBvhHMhYxtsayTRiuJdp9XpDxaULhc1kjPGwAAAu5JREFUaN7M1cmS4jAQRdFHavY8gDHGjF3//41NrWiilLJU9qLPmuDaSmUYuygya3NrtFaA0trYvM3kLkpEQIrcwMPkQq4PyNYiwAq5KiCswgJlxa8DrUYUE0og4e95WiQHhEYSkyUFpEUyK+MDQoGRfk7gHz9dHhWQBr9m5HIg01hBZ0sBobCKEuGAwFpKhAICGxB8QGALKuMCmcJGBX9AKmxES2/AYDPWF8ixofZnQGBT4h1gBrDNGN4BiyX1YX9rOqKuue0PNZbkn4EMYae+og9Nf0JY9hEwCHkciai4zNfaAa5+zON37nhFiPk30CKgHIiKvsSH8ly8EqfwnN8BDdZ0Jqpmhx/cXBH1E1j6HWjBqgei3sHLvdrDfeEVEH6BZ0FNCVbZUFGGp4Dgjl07ujgEuBt11+BFQmgHnh2NCJtG6srQLiCwxHVBeywaqeLmoOQrwI94GuiCCBcaJn7M4JdsT41DBNdQDz/7HZDwKz2Hy/2STuwZgb1DA/WItKcje0bgPjRfVDlEcgU9uHsEbssGOiDaTEdu1yC5cy0mRHMFN4UdMu5Yz0gwcgPL0MKrohIJntTASyCHT00VkhRUw6eFhc+BRiS5MHfCwjAjOCDJTGcmoOFzpCuSfNENPgYKPg3dkaSmP/DR7MwcktyZW6HgR4Q0jrr/K/C3WTNKQRgGgmg1oQlN8KPgRxUEzf3vqCD+yXR182gv0EDa7s7Mm35XhL9k/DPFfzR8VODDDh/X+MKhVya+9HHZ0kd4XYXwktJx8UtHWvxq+d46yfc4cAbEb6EGZaHyqgm8O03guo291WNbtI19CBtrMeLNYcTtUcL54ogS4DDEHuecPHEOH0gdii1Sq/Nc/4jU+FCQjzXFwHDClkGgFQdq+R6Oj0Q4zsf7AuA4ns8iFhoS0ZiLBnXbo8bXCQWFpZpWa9zLAusSf0PuqSty997TGPZYe7AWN8rkq56ErGshce/lmc8hUyg5pXf9J+VcgrX+8wRytCpX/RrehwAAAABJRU5ErkJggg=="],"btn_radio_on_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAAzMzP///////89PT3///////89PT09PT09PT0+Pj49PT09PT1aWlo6OjoaGhogICA9PT09PT09PT04ODhFRUU9PT09PT1NTU09PT0uLi4dHR09PT1jY2NYWFg9PT08PDy6urpDQ0MxMTEmJiZoaGgUFBQYGBgjIyMlJSV3d3eYmJjr6+tfX19CQkJpaWlhYWEoKCgvLy8hISEWFhYrKysuLi5WVlZBQUEnJydHR0eJLZnuAAAAO3RSTlMAgAIFTQkMSSoDLw4WJDVSSCALPoAsOxGAf3hiQwV/RjIRgH1iH1lURUIcFQ54CICAbWdnVz48eHdubc5A5usAAAMCSURBVGje7VjZcuIwEIRkEskHMsY2+MQO933m/v8PWxGfIng3ltlUUqV+g3J1qzUjaWYaAgICAgICAgLfjI4udw0EgAwi651rsys4BAYhVq5Ir3YBABFdVaRGQ1JUnQBFV73W6g3KHqmU+yYBVVEjRCWu4ULClB4HN58QYCqBpdqhNQDkzc1FbGQAo2a4ewh8JWO8TZD9ofiAerWii4AELDurERBAaq31ywX2uwwFDbmGh07GH7PfZ6A/MoUIQs44SAaQnJ/SL8eWRYhljZcnicwEAYMvlzD4QU6/GsvPbU2bTDSt/SyPV/eZicAHzHW+AHoJP139wppNR+/r9Xa7Xr+PpjNrQV0kCj0AnhPXBRzvD+V/aM21w3q76/dtu9/fbdcHbd56yBQwdDkyFEIp52+PXnZ9e+CYzabpDOz+7mXUPinEAlIIKocBvchP1+40MzjUR1FBr25BASSlATjx2wOzWYA5sE8K6SZJqHIUMODUwGI+svPl5ybs0XyRWsCVE8mHXsx/t7K015SfVXjVrNVdrNADv+IhBtRIDIxnh0G6P+wuDQ6zcWKhgaDacdYhSgXkqZPzswrOVE4FItCrhSDOIcq/fPIcp3kRjuM9LalCnEe4YpKqiYFWe2+alwVMc99uJRZUIBVj3EkELM0tF3A1KxHoVIwyAikRiB6HDD+jMHyMEgEJUCUBgDTGZNL8CyYkjTLA/xWQAPi3qJw/36IAEH+QywWYIHOn6Vu5wFshTbv8B61cID5ot/FB478q3NIdYq4K/svuWCZwzC+7EDo1rmu3xEB+XSvg13lwvOHFHPWYB6fWk+ldjDD7ZNZ79D97GHrso1+3bPHO4uB6dcuWhnFWeB0LJobHs8LLuErp6O1d6sN19x5/6cgmUrj5SvG7CQHzlu9GwJTvLUsmRLZaTPke0M8k7gYk+ncDQgB1fmoLxTSBt2coNIE/uY39SiP+00cJ6TBEPh+GyJTeUK4+zvkQVHWCPsY5v2cglY/UgMLonkZqAgICAgICAgLfiz+OHkqDTzvSAwAAAABJRU5ErkJggg=="],"btn_radio_on_focused_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAkFBMVEVPT08AAAA+Pj5OTk5PT09PT09PT09PT09PT09PT09PT09GRkY+Pj5PT09KSkpPT08+Pj5FRUVAQEBAQEBDQ0M+Pj4+Pj5EREREREQ9PT0+Pj5PT08+Pj4+Pj4/Pz8+Pj4/Pz8/Pz9AQEBBQUFMTEw9PT1DQ0NBQUE9PT0/Pz9KSko+Pj5AQEBCQkJCQkI9PT27eu1wAAAAL3RSTlMmANQnDQMiHwkPGT/RATAVykWLhlrHvkpO9sMcsayQzp+ZeGor7Fdx4aQyuHxeYgwIBCAAAANrSURBVGjezJTJkuIwEESTkiUveGOxjcHsO9M9/v+/G0dMRMt0q4QBH/rdOKCnUmYZg05Iz08CVyk0KOUGie/JQSc6CKSTuDDgJo58XyD9BSwsfPmWwAnwkMB5VRD5Cp1w/cgq4I/vjOIUvMBReArXe0ogAzxNILsLHLyCchjBu9fXJFEXgXTxMq58LPAU3kB5jwQO3sSxC3ygZwOY+/dmQO/nAx4n8NATnlkg0RdKmgSRi95YRAZBgh5JtIAJuLcqgQmgpxi0IMAjhvvxNU+J0vw63g87PxK6NXQ0mdMd+WTUravo0CAxXRJRtj2fhjchbsPpeZsR0fIEG25b4MNCURFlk0LcOWfjtFFYp3C0IFJgOYxDmu9i/CDeZRRODmBR0ZfAt0RbNafEMBI37mr4YATYB5hllBdgmeWUFfYUYN2x05o2MSzcrrQ+WYsE2w7M1rQSsCJWtGZnCP4LJPv+qT7fZsjYHGQj4CM+VLQReIjYUHXgY24E3JKNKY/RgVtOE5hZNAL2hYowLL4t9DY9luUx3U7FfVRhOGLfCFyHRHV/L7G71F9cPsT9rEv2jcB1aErzGJpRWN9BI2jijKbcNxUDBSMV7aH5W9bfOH5Cs6Mlt2uQzApQdmiNU9Y/KPetEVJiUojgcRUatxbiWBsoWx1YcUXy4JsjnlOhf4S1ERKtgXMY8ZHAxIjmrReuGT70HVIamlPGAibOtNV/vnCCix5hQ3uYCODCxIrOOuGa5VNPyYSwgIKJJemP8JYXbFprc4UJF2by1pOmvGDdCu0PTCiYSUmv8ZEXHHWTaY5noFYFy5pHrxqlv0vwr1lzWUEYhoKoSmoUKihYtO1CwdciiP//dwpdBCEhtzecNtl1VUib3JkzA2wR9ZHx3xQ/aPhVgV929HVtRAPn0OoHjmxkvkNvkI1M9dBvb6Khr5ctJ6ls4YVX5R/jgtBLx8/jch0lHXnxG5fvLlu+b6cxIMses1BJE3jMNIFpG/vcr1zCxp7jNlZkxF2GEZejhNc9hBK6FEqgYYgK5ywGnNMJcA4OpFRIranrRoHUWCjIY02/SQyYjUcr+mV3QTi+BuA4hPfpgIKOWOiQiI656KBu/qgRDUt9Wq2Le8sJrH/LWEXkDpYGTIG1B3lxY4NWT0xVennmr/5jh/qP7UfUf77mb6LnjEYeBwAAAABJRU5ErkJggg=="],"btn_rating_star_off_normal_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_off_pressed_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_on_normal_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_on_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACPCAMAAAAiGKLEAAABF1BMVEUAAAAzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUFExkCCgwebIgzteUzteUokLYzteURPU0zteUdZ4ILKDIzteUzteUzteUto84zteUWTmITR1ozteUzteUzteUzteUzteUzteUzteUzteUzteUmiK0sm8UgdJIRPE0IHygGFBouo88KJC4YVm0NMT0oj7UPNkUxrtwtoMslhKcqlLwzteUrm8Qjf6EieZkzteUMLDgvqdYxrt0snscplLsea4gqlr4bYn0ysuEbYXsysuIkgKITQlQwqtgjfZ4heJgyseAlhKgaXXcfcY8aXHUvp9MWT2QZV24zteUFHZYuAAAAXHRSTlMAgIACBQgNGCZTMgs2EGYVHB8SI4CAgF1OgEOaKrOAcks6gEeAgHZuYlhAPS55as2AgICAiOmOgIDTloDmyoB834CAf5KA9+PYttuvgID8xpzyw8CAgK26gO2jqAdlyAAAAAokSURBVHja7NrXetNAEAVg71n1Ysm9xiV2lLiGNEiCUyihhIQAobPv/xxYJmCt1oYIsMwF/7Uv5hvNzoxWTvz337+BUpr4Z1DJTKuqmjalfyEoKimqZnQbxUbX0FRl6TFRUzUaGx7xeRsNK7XckKhka606mfJ0Q5WXFxGVHaNDeMOuu7yIJMdKkrBBeWkRUdtIEtGgq0qJZaCm1iGzDA17KSmS3BaZrZNZxkOjaatO5mgt4aFRWSuQedYNJfYUUadM5tNTsafIrCbJfJ4Vc12LCVpdcopkjU/QFtZCKYq3imi6S4Lu5IAtPkVurCmSMvwR2weQvU8C6rEeNGo3T0jAO/guSVBDjTEgKaWToBpwDeTOuAFSlROxUQyuST8A8OQQaJOgrhNbiqjaCFfQG3YeTlEhE1tZy3xTPPYTxNhhqIpOYmuONN0jQWvAc8bYMyB7QQKKcZ18KdPhejSAPTZ2F3jIlXXfTMRCsTwScA+oMN8RUCNB5RjKWizpt1nglE0AKMVd1mJJPwQes28+gJ9oJ7EMNGr3wmf+iH3zKXzyi+6iAxK79B0AL9mNCpCPvVub/fVQSb9g3x0AOySol154iqhTDpf0U/bDLlCKYU8TFg+xpOeUdd1YeCtSrMGskg6U9f34WpHYhFaDJe07BLbia0XiLn0JvGJBm8A+CRhYSmKRqN0kQTvAMxb0EsDqghdHSiWfLJumomS4JlQCdhnvFfCRv3lIK6Ypy5Lvt69GxyGYim07jqq6biqj+ap9wzCsIrdLt/3Fg3cebkWFnmEY/WpVG8ukXFdVHSdtK6Ys0Vumw7QdN6P1rWa33GoUdb1T2EiODdfrnjcgQRdZYMQ4Yisijzyvvj5Mjm0UOrpebLTK3Z5lVDOumlZkSn8WjKw4rmb0WnohWR+QX3owbUJcK2qTXzqpDwt6o2tVU449J1dUUlzNKutJj9zWNnDFwvaA3FtyS4Nkp9WsptIypWI4KauYPCERnOWA10xw6C+OUQw7Pc2Rafg+tV/0SDR5oMJEV8A2iWij6ZqUi8ftDUlUNeCAiZ4AOCMRDRoZhQbjKXskqjsAGIfbiqLStWlEktPzSGQfp5sQ7wCokeiKP65KqdIfkuh2/OV+psn4iOxRWZW+3+8WSXTH3NjgvAcuSXTDvsItpRHd48eGOD6ia90MYv82LDpudxXHxzGJgF+e6K+e2Flp4l3+xse1sW3gLptnBdj3f3Qvf+NhaeIOEYkLr6RtkLDV0la+vbZdq9Uw3wGbZw/z7dRq42Dz+VnR9exJCRl1LpZ8u5bDLVyz+Y5wG7W1y1LoGnCytjcfcSuOYLcy8XnlxvXm2MFr9lOn/o+uVm58qUw8hqB2xl3d+lVtN/kJ7rtbebFytHkwGo3Y37Y3Gp1vbj5fmUQXulIqqnTyyLzgE8sCuVMWh70KgAfcuXdmvEiUcgBiiMiPJzz0mpOipimdCBGds0UbHSJ8+7/el2d+RznOAthki3W6y8XDvVUqhjcjomu2SM8gxOOXEJ3e+HBWawDes8W5ApB7N2+4Ulv4enrfP/2VEVuQFQBZoVP768c3ktqaNcyxu5jSHlUA7Atbrj79lk3ljE7CtnIAjtjfd+6Xc/tC2POrwaVa6YsDtpSFv6T+bUcQ2o9v3UpLiSkpbSXFkb8P4PDpAsqnJG4ePZV7f6Uz/1dy0ea3jD/3tZ2rbWoaCMJzl0JTSitpCgm11qat9g0wgrZaR0tLLSpQCii+jP//d+hl1PWydxkv23H84PPBT8Is+zx7u7e7udORkE9DZY8QELIIYSqE9HFl9jziSD7YHrBoo6Mo5Y9WR9tC0LU9ZQjtANsjLCrtdRnCiwerou10JsqfkCEUwR4ZmYLtM6aO/3uL1dCl6It4G3d0vStr3W3uM4RQ0Daj0TY/E3RNGEauWlDYA5f8XltBW4sT8//xQEPXuA5XerVF2c0O00Tb2ZxE11BB1/2Kk8f2YGljhCL/D47T0XWro6uzieSMkVm362OG8B5oS0VXg2F090pYPhhW3lEJiU0EbbfzVLlreK6Qj28X0NxBKySPYTQi2uYpctcHhnHQQ/JJ2iit+icM4VwUSddmVwvIXTI8sx1Va92pKGnj/IspYS2GceLbcPpQaNvlfGlaPA8VyavnwOlDoq1lmvtPOS9T6QLacLRFww0jDDh/RaAL0VaMMzYwjPq3cc4eosPZhLZSsI/7iqacyf1G31mzKEP6+7FOsHHSfxLrEfdIo/yC1MxqoE4whr5HDD0gygzaj418b9Pc4mtSQrXTzqlxP7QGI18DwCwGzamJWwOvYdpigiW0OaDHkXbPoynvu/JluqvqoVR0OJn0mzldqR+a7q5/BesX0CdLhzVpCPICJppmGHE+Qe3xVCj0Y5l+9DUNrjlv4b0retC3Emuhq8SaqIwDnx70ZbGuqMHzGZ9dLpISLDnwYV8RBnYDfUtMYPZOn2AvqEtFuF18oU2sz6MRgfjn40I30KvJgZ/OoK1cbJfqnVIhS2HKp/OpMGl2rD2sqct7MHKAoF/o3HMkJPL6UDu0WsqBfxKsp5PQWA76u2r3wCU5ctLoWB345OwBEtIH/ZsnkXugPomcdK0PfBARWUJHOOivzsA90EwCJ8mBHxJEBBJCtRlyzy4DgJMu8f11hyQiKD0g098q3NOCrBlz0mlc+odUEZUqsTX3l8g9cGfH/W35v88535ZXUi2ihMqcf/5tofMeuEeFHaSkkZw9ivYaLZGFUt54Du7RIIycdDP/PXvsENIZTPNBQmeQuZB7dE4avNGJqFKi1UIPoHl2ySG4EFC4LZ/+KhvLpJoIlnDlU+jNQPQLL87ZH2BSBnGLk6hBWdq1pHL6Becc2HoWMj1wO3kW8faF8wmlsM5Ix+JulMjmN1GdMTXZeqrxH7PSG84/oaORpOnF5XaUKdRi7jZz6jW2xxFvb5/GVd0zUDXeUBlyfv0kga2Dipt1Nj01b0MemRTrgtTvEINMoKY5erqiI5Yp2HW1k8Lox+NhljU0qIdWZo404mlX3OgZAiu/FXQ0Uop+wTbJoCDmodpjluCen/2tqsZJbPcw5qF6liLqcCdkWvdAwzDJSawx/UAQNaSyZMSfaLDWvjvpPtOAkMwg2SfhoOfCIxbgJAg3BEK6h3JIh/3cHmxBx166aDMdYNuM9uUohhfAGx+onbyRGzMEQusT7fAgtJs2zLoU2/Ruv5PIWDVvYAve4cFsbWR13W8QN+INbeYQ34jAbOlhiTdccvsMgDZzTGHlXTVpxQpiS8ObE3RPlH8QbOaYDV9shUUHzSqKLf1Aye17qtldyZQw2CuI6ajYrGbRM0OJUrL73ljWnw+bA2ne8oFvPcbFXF9vjt4kN/A7vzJcuxuYz+7w1zBe0ctVNqtb8IWKiUkF8WKS7xU73Xp/zymZ6xl/L+Ta7tYd8WER4U0p17adbAEcTIElPg1bwe/4lx7e+o//+Hv4BrTtIsYUPbP9AAAAAElFTkSuQmCC"],"dropdown_background_dark":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAA2CAMAAACiEHRJAAAAflBMVEVAQEAAAABBQUEAAAAAAAATExMlJSU+Pj5BQUEAAAAAAAA4ODggICAvLy8WFhYAAAAAAAAAAAAAAAAfHx8NDQ0AAAAvLy8kJCQgICAQEBAAAAA3NzcWFhYkJCQXFxcAAAASEhIAAAAjIyMAAAAwMDAjIyMAAAAAAAAAAAAAAACu+DqjAAAAKXRSTlPmCekADkqr4e4qFcCA2KhEYwUShjwb1K5/Nge9pZ2YXUxALSTIrGZVSewvjJ0AAAC8SURBVEjH7da3EsIwEEVRr5AjJig4Z5uk//9BJNFBw+zQMLO339Ns84Lde+abPq6cs6q6rnN0avWOAD10e3zdoEFYB/hcsQQfq2YO3gmjmAXYWByFHAw55JBDDjk/dgw5f/UvcsghhxyUEyQMm3f8nofweinL8oCtCsE5LTS5Gsf+iKxXDbTWETzb9OM+nXHdpjTjwjkgi7TRywnZUkhwjoeKLUXnGOs4iEuZoQPhHQeJFvBZxTk+g+8FPAE5Rz/0d6kkJAAAAABJRU5ErkJggg=="],"editbox_background_focus_yellow":[null,null,"data:image/png;base64,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"],"editbox_background_normal":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAA3CAMAAADT7y+MAAAA0lBMVEUAAAAAAACzs7Oenp7+/v6xsbGmpqYAAAAAAAAAAAAAAAAAAAD9/f36+vqvr6/+/v6Xl5fw8PBUVFTs7OypqampqamEhIQdHR3c3Nzz8/Pd3d3x8fHu7u7S0tLHx8fa2tqenp6+vr6ampqioqKgoKCBgYGSkpIAAAA3NzdSUlIAAAD39/fr6+v39/f09PTo6Ojb29vX19fk5OTf39+srKycnJympqaSkpKMjIyUlJSPj48sLCxoaGhqamoAAAD///8AAAD8/Pzz8/Pm5ub39/fl5eUurhQ7AAAAP3RSTlMAEX19/nZzGAIGCQ34/nT7avwk+GpiTCvn2tfTy7i1qX53cXBjRkMlJB8V+Ozi39/MzLezgXl4aV5ZSSgjIhntDpQOAAABGklEQVRYw+3Yx27CQBCAYTtskm3ujd5DgPTeszGB93+lHIwi2cvFYofT/C/waS4jzVi7+tk3C8PqR7mwDSc43QWxMPWfhg2DDRt+GjKqj/Tx0m9ufo22afbHmTYYO3++i4KV4YKo/ZixihT6t9HayQ3nrIP2OCyPxc96QU6U8Ui+6qW8RInXS0eB5NxMxRYpVqPtA0mKXLh2AW2p5SRXQDkV6vSEKKDy4yqloCJIIYUUUkghhRRSSNWkvg9HLScKKs8tU8JXUMl/qki8XREFknediMp9dS8VTA/vvETRr7gLYslO/Emrt/CoKz3TkCc7o4xpF/58OmhJw1JrEM851f8Wi1niHhnNTWaLYiYNM/+NYdTCsBpBfqT/AK7giup/9WGpAAAAAElFTkSuQmCC"],"ic_menu_moreoverflow_normal_holo_dark":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlMAgJsrThgAAAAdSURBVDjLYxhhoP7/kOcgwGjoEB06o0EF44wsAABBWUMn9krmtgAAAABJRU5ErkJggg=="],"menu_panel_holo_dark":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAAw1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwVFRU0NDQgICA1NTUfHx9OTk5DQ0NEREQ8PDwwMDAAAAAsLCw4ODj/AAAqKiogICAiIiIkJCRKSkpMTExHR0dFRUVOTk46OjoxMTEiZHnYAAAAMXRSTlMABA0CJBAIChgTGyAqNlAWSWc8X3aJfI8eLidAMkU5TFtWPW9Ug3nti2Dt29rj4srKKLM+WwAAA8dJREFUaN7t2dlW2zAQBuAsTqLIK06gtmRbjhPC2oUlFFoovP9TdUZGh0SmoaeVwBf5H0D6jmacyOPOq7m0lE47s+p8eHaEHWFHeJPQX0vXQNbX+xvClp0NWbYT1ObDOiNjGdZREI3QBKjdewajHE3ESgfg7rj3ADI2GFwPJehQiCZBCRCA24fPIf8VtQoyEKEMDYICjOrtQ0IpTTCugSQYWJCENWOkEE2CrMEzQG7uGIuEPCNkNV4joEACnJMv9w9a7vX8eC0/G/ml5/OJgwhpeCZcvgi6KBiE4cm3x8drY3ncyMPD15MwHKABS6EIqgzyDEJKz66fni5s5enxjNIQz0GWokGAMyA0ObImQML1UUIJnMM6QSL60Ai9HpxB4rCrC6u5Yk4C59DrQTs0CNAHics82wSPuQn0g0aoyzAm1GVpZpuQpcylZFyXYp2AvUigDJlvm+BnUAqCHblJGI6wE1wv9WPbhNhPPRe7YTRsEhIgFJVtQlUAIWkSsBmJ66RZldsm5FWWOi7Bhnwh9GsCNqPP7RO4jw1ZE/oaAZqxyCPbhCgvoCEbhCEQCHU8IAjbBAEEz6EECEOdkDDPj6PANiGIYt9jySuEMUVC9R6ECgl0rBFGAySkBRcL24SF4EWKhMGoXYSuJLgeEma2CTMkeK4kdJuEmAf2CQGPd4TWEvqKULwPAduxfQ9lKwgt+IH+0L8piPZnbdnQ/LPuaFcWcXRzYTFXR6JxZcFsXNyOz+9utufqn3Nzc368cXHrrBN69fWV5+Xx6e33t3K7NXd/zOlxmfP6+tp7IWiXeC6CcrI3ny4PDvf39z8ZCSx0eLCczvcmZSC4dolfqemCIsBjKWblXm04BIWJwEJSsFfOBDySitDdJNQ/TvBMQDcEi3ICiPl0ulweGMhyOZ3OATApFwF0AjwP9Q+TIsio11qHpVnFo2BWThABCiOZS8CknAURr7KUOeq1Vs2aXl7uiSxFwXMhFrMSGWaC25ezhRA5L2QZiHq51whyxMGgFDHPIxEgAhgGUpYICESU8xjKwOSIo0Hoq1ETnAMgiorneRQJIQIDgWWiKM95VQAAzkANm/qKoM+aoB9S348rDgpwGEgO4byKfT+FPtBnTSt97Ij94DAvTbPM94uiiA0ElvH9LEtTjznYB5uDx1Vz7kjRwDypAIeBZJnc32MooNrcUR8A4zkAAhQ4/GUgMRJYSA6BEwqA+gzaOYNGg0SoWXxICDUYQkI1h1eD+BZ+j1CfZWoFngVKjEV9HML9JaDfsm9TKy2XlqPv1/kNylczeSvTmjMAAAAASUVORK5CYII="],"menu_panel_holo_light":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAA5FBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd3d0AAADJycnMzMy6urrs7Ozu7u51dXV8fHwkJCRjY2PQ0NDb29vt7e3s7Oz39/fy8vLv7+8AAADx8fHk5OT/AAD39/f19fXm5ubr6+vo6OjHx8fKysrNzc3Pz8/R0dHT09Pz8/P5+flMDi8tAAAAOnRSTlMAAwkNFwYkEBMgHDsqNlBJGnaJfF+PZycwLUEzPk1HW1ZEb1JkgWCGaP1qY+ff3c6KiVsm+vf09OvngRpQJAAAA7pJREFUaN7t2Wl3mkAUBmBsCJEdY1qWYVUkLtnTVY1ZuqQ1////9F6QAKOx51Qm8YNvPod5zp0ZmLlyKzNhFG47M+PePDvCjrAj/JPQYJi1BHr8/ZpTKNYSirHfMUghoQg0oBh+r8YUjBKCJhTj49gHkGaNweehpFC8SMgB8F98rUHGAkERaAAOj6MbhgQRa4oEMQx0ICNH0IS8BBkgG16oLRkjQ+SFoAkoyADXo2/zu7W5/c88Pd1+HV0jAg05YVIqAgoOeH50Pp8yynx+dz7i+QM0PJdhUhU0YQrOpmOGmZ7BdDTLhkl5GrAGkvh5zDLTL6KEdSimYgJ/GQH2AtZAML+PmebBFLAOsC8oAk5DWgNTYU1QTKxDNhUFoYEEXAiiaRPWBGKbIi4HJDTKBFyLOA2WypqgWjgVsCKrhH0gNGEaFFuVWRNk1VZgKppA2F9FsGSXNcGVrZUEXIyGKNjEjVgTIpfYgmjggiwIjZwAK8HxWRN8B1ZDTmhQBMEkaqSzJuiRSkxhNUESFCL7HmuC58tEEaRVBEMyFVXWNdYETZdVxZSMZUITCLbqvgbBVW0gNKsEfDciQXa9LmtC13NlJOD7kSaIQHBeg+AAQVxNUCwghKwJIRAsZQ1BY0/QdoQdoULY1k35Bq+m7XpBlz9T9+PlsP1McfTH+hNTw8Ng+WPNVY4scqSfDMYMc3OiRzJ1ZMFUDm4Xp4+Dmw1z/0JuBqeXlYMbVybs5cfXq4vTH6vzcym/qDyW8ruUP4t8PLm8yo+vewWBPsTrWpAMO61Wr3d8eHj4vobAY457vVarM0wCTacP8TOKANvS98Ig7nda7TYgQLF5jgHQbrc6/TgIPR+2JE0o7pQG7glYDVo3OAIEVAIcdaQFFQDAUdDVYCXgfjCKOyUQMBmBxzslcR1dC4Mk7g87oKgl8KBhP06CUNMdl+Cdks8IXInQyC/3eKt0It3rhkGQJHH8oYbEcZIEQdj19MjBG2V+uW/khGqLw1QsVXYj39MAATmqIUGAAM3zI1dWLcXMWxw0AQxphwHqQADhRL6v656n1RDP03XfjxwAEKhB2l0AQUGge02CaVsqIpwIGODYND4MHzkIUC3bFOhe04xuO/IGIhTbsogKkJoCjyKWZSsIyGqQC5BA9x0zAyBQQYhaQwjB8QGQCqi+I9V9RUTW/k2bvyZIagk8KG0CSwjIO8Db2INODYjIe/HgWETaKMYifNGHBwAKtvD3CDQ8I1IHSmpL8eMQAjBb9tvUjMqEcejxuL9XNZodPDUZeAAAAABJRU5ErkJggg=="],"popup_bottom_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAjVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0BAQEAAAAAAAAAAAAAAABaWloAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAaGhpoaGhQUFAeHh5ZWVlaWlr///8AAABqampXV1fx8fGbm5tSUlJgYGBRUVH5+fljY2MLHkH2AAAAJHRSTlMAAwYME1IpDwpBITgvThvHSx0WJDP1RW48Oi0ZPUlm4pBe9LzqzGhUAAACDklEQVRYw+3S3VLbMBCG4YQkwrJsodjGjSwrP6X8lAD3f3nd3dkwTIMSK+aEQe+xNc98kifR3WPxx/jIdHo1u57rXBRKmsXi5vHh6U98Tw+PN4uFkaoQuZ5fz66mU1aSk5zkJCc5yUlOcpKTnOQkJznJ+ZlOBo77QseBkwX2uKXolPQjHS9VJ5YudG8ZO70vRzml79nJwk7dNeCUI5wSnKarTzizeUVOO9Jpyanms1OOaKw0ZoRjjLSNOOfQD+f9CMd7+t3+dyh2Dg/UtuC8XuC8gtO2h+dhhzt2rJR3b/u/l7R/u5PSnnI+Xlwvt5v988vLc1R4YL/Zyv7DtbFzPEjnMEj15XZz+/s2Mjix2Za9gjm5PswJODgIb87sduv1+ldM8P1uZ/DWaE7YQaiCFxJFY63tZeuNKYdmjG9lD+eaQsDrVMh87vAgTZBayQscuVLEaJ5DzvEghvJadCDBIrAGBgasAaUTdQ5MaA4Pel+EUqOUxVbnsphSDSrva3jOscODCMprogrABlYUhNQ5MTgn5DCEixxISMVECCgO1xCDTmAQQyQtwQJsYDkYS1KYCczBEKI3QqlyTgM2OK2dq0DBOyOGlfDV4SSkAIsICERwzIlLY4gloNBCbVAkoIEIKcyEIZaQii9jhZkBEJXFRWfOMwwhxVpMLDDCzDlrVEFjvDpJpVKp79R9fJNg/wAgGweRXaclSwAAAABJRU5ErkJggg=="],"popup_center_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAAALCAMAAABVqWPqAAAAS1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVlEREQODg4AAAAAAAAAAAAAAAD///8AAABbW1vd3d2VlZVSUlKKX/cCAAAAE3RSTlMAUAcDQjkoIRoUDwvvsGdNSTEu3NAXBQAAAEtJREFUOMtjIBWIQAHJ+iAUMzMTNxcnBzubECuLACMjr6iomDAZQFyCh4+Rn4VVkI2dg5OLm4mJGWrLqD2j9ozaQ749+HIwyQCPaQAIoTUzantFuwAAAABJRU5ErkJggg=="],"popup_full_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABnCAMAAAAqn6zLAAAAq1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSk8PDw2NjYuLi4AAAA+Pj44ODgqKio5OTlEREQwMDBhYWE0NDQTExNra2tqamppaWlFRUVqampqamr///9cXFwAAABTU1NWVlbBwcHHx8fLy8u9vb1jY2PT09OioqKZmZkZwWr6AAAALHRSTlMABgoOTSMTTxY9Kx0ZETMvHydIRkA2ODqBn5WJRJqQe3iFgf1qUOrf2pTl5E4lyI0AAAMkSURBVGje7drbctMwEAbghDhO5Pgoy1YBA06bHji0TYEA7/9k7Frd2jOtHEnN9DT6M8MNcr/5Vd9kt5OxXFlm8vIzhY/ZqanbD586xgYk5J1lzCWq0hMzw/SYkaQQAhKrKM5A6rugEYbh0irwAFokjYWUBI04jlcWgeNgAbWv0pSYBBAg8nxulTwHDCiSxtugAkXAKIoisggcBwukMEQIC2nqEIMKEFmWpRaB42ApaTZWiJhOAaOqaymZYaSs6ypFak4QFtLWUQwikgnRNE1pFDgoBJN1ilAeLxMFPRBi4nweZWnNRFNyHgTBwihwkPOyEQwkbBQmmkJYB2+tYyopJUFmIUZKBdHNaeus8NKkON20x8fHRx8tcgQPtBsOjaIip0IPBBysU0SpZKfr77tLh+wuWi7rLFKFdH1mSVenYnL97WR77ZDtycVGSlUIL+6+MumuLV7NoY5gX3fbvzcO+bfdtUzU8BuKl3RxmmuDOo34dLn988MhN9eXX0QjU+3FTTtniU4teAPOLxfnNzhNw+DiVvHQuYKPinLUtQXlY5ySiyorco2Dr0GonCbgj3E4F/U+B99qVgb8vbtzxINGwosw5qjXoFwEj3GC4PZFeCIHX+wxR/DX4pRP4yyMnPoADvOOd7zjHe94xzve8Y53vOOdV+BUB3De1vfGwffgl/C9/mDO889dDjlHeqa52B1z6xxozqd1Dj+31PS5N4f96RDNHFY/Vz5znSufbyTTzZXJGc7Jz9zm5OctZzQn3zv3r6Q4bdefIR8sgufXLRdy39x/uMdgbnsMCQ8O9xij658CIWRAWRgnCGgvE82xDl6bfjuX3EIpSqLbMnGDwDG1aKqgDTDaOlSo35ul3UpLRbCR0H/KukqhzJCZji/oYoAKWgNWRlGLwAgUtZ6jOppCg4UjUl0yg9BmE3eoPTMdX6Aqida08LDJB4NIbLCnpYUwrZ1XmNwoeBIRUEYZyv01emyUfpHer7dNFvbKgoSGwbMzRKjMvpBEmFmIIGUf1NV1+asNMowUsvAfx9w9byTRMUuBAKtgf4cnfHx8fF58ruwz0eY/HRQD4ERyIRoAAAAASUVORK5CYII="],"popup_top_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYAAAAAAAAAAAA5OTlpaWlYWFgjIyNWVlZFRUX///8AAABqampXV1fx8fFcXFxUVFTHx8e+vr5kZGQwQJg3AAAAIXRSTlMAA1IGChNMIRovKA9BOMcNF0g0JSw+HpUcOkWN9aVcv4I+EWOzAAAB1klEQVRYw+3YUU/CMBQFYJxattGpA1q3qqgIKPz/H+i5vUsmiYV2I8aHe567fDmnfdrkZNYpmSTnalzSmOshiYd64yY9vRWnsHGfGrYipE5hYzab3aYE59nqpBNMrzDxkBLGfkjnGChE5HneIDYmDYLzwFhi6AxDCgw7nU4X8cFpC4ukkxBN6stAAQKjLMtlfHB6QRRJvtIVEqrTMXa6AFEU85QUxXIJynZQqBDXIaYhBUZVta2JTdtWFSySGkAoFHT83TBTzKvWaO2cq+OCk1qbtpoXDM0YCtVhBmWggFBKZXHBSWCQUImhQCG6HVott2AwGEOQIlMzg/kA2ZyWu/6tUF+nRBu9entCHlNCH7ytNBqVXaGQQ3WwGkZbvTzvhuT5ZYXpsBwVIicwm69TGQPmc0gAGVNxIR4uMJulOlq/7g77r/TsD7tXramQDQwHhx517us4d7f5eB+Sj82dc75QjqcdcDCbd3Rdw9kOYLZw6lp7xw/XO+sjp6HZnFIjHKUcDdccOesjh6/HjHYMHHveqVU2wslUfdbpricb5WTdBQUdPDd7McfiwYWci/b5P44a6ShxxBFHHHHEEUccccQRRxxxxBFHHHHEEedv//OFs07PJJhvB2dQcPxwm8wAAAAASUVORK5CYII="],"progressbar_indeterminate_holo1":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAKlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWZdn3rAAAADXRSTlMABRAKFywhOfYnMR3v8BlJngAAAUFJREFUaN7s0D1qAlEUxfE7hBRJNc9ZgZk0IU3GZAXGzsZG0A1o4QIEewsFQURBtLHyoxURXIS9he7F8jRPEN6c7vzaPxwu10RERERERESe4R5ACYExmtgi+oXolvx6ZXGEEgBjLM4c+0L0zEofXmkcoQTAGEtmCftC9NQ+K17lnxeUABhjSa3EvhC9bNWW1yFLUAJgjKTz7/6O5AvR93aqey2LBZQAGCNp7t33jHwh+tTaXa9dsbDo5gBjJL2J+9qQL0Rf2/nmdRm/jW45wBjLwObsC9GvD/9Ve8VAAIyx9K1BvBBd/8r1X6t3DATAGMvQtsQL0fUv/evenh3bAACDMBDcf2tW4CUapLsRKBKwzevNvLz3/seDedlX277qHmr3kHu73dvynJbnyAtbXiiPbnm0vqP1Hfq02KcBAADAwgBwBEHj/3RdFwAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo2":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAALVBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUW/iK7AAAADnRSTlMABQoQITkYLCcz9hTw7fhFXIgAAAF4SURBVGje7dmxSgNBEAbgOUE03e5aWm0C9l7ExtJDlDRpUtgmcgg+QCS1KGqTQkHyAmIjKEF8Ct8iRQrvGcRrdCN7e4ObsBf+rzpuYJYZuGN3lgAAAAAAAADKkAUERdKnmdUCyy0ockdJ1e0kybpHWkTGaoHlliSdUU2Npp0m1fQoFpGxWmC5NSlnNKbd1C4WjbfUn55W5mpec6/spQzcas9i+o72aJzYvcqtxKOWVifJL4HlLq62m0dbdNq3Ot+XO1d9fy62Nw6NF0Hlzqt1RS/pqGN1fCvf7zv+PLxsXhsvgsqdV+uK3tFHZjelm8ynYS2bm+H6c8bArvYxj34W9mtCg8r0q73G6Re/2icaLLxf7dWf56r1a4p+saqdlOrXqDr9qv2/X6PiKPrF6xe+R873iP9X8P/7Zd9PYL/6Z7+K8xDvPITzNvO8PXbMMDw6mJm5BJa7W2aeg3khb16IeTRvHo37Dt59B+7TmPdpAAAAAAAAACV8AcebDMLiSs2oAAAAAElFTkSuQmCC"],"progressbar_indeterminate_holo3":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABQIKDyEsGDkm9TMU8fft+mrRFgAAAchJREFUeNrs0ttuwyAQBNBZLsYY4vL/X1sbq/CKKky16pyHJJZWuyNnQERERERERERERERERP+BaT/mQ2UUgarIA2nXH+t9uj9E7m9jZLq2WRFdiVem7cfGBw3EWrkfxb5ABBCxiogARk3ilWl7TcYHBda56/l6ctO1zYroSrwybT82PmjhQnbWGOtymO/ZHBT5eRc6LEzbajI2KHXQIXsfrIgN/gX52axItmL0JF6aNtRjo4O55kOI0TsR5+M2Xdushq7EK9P2Y+ODMcCnFLNIjmmfrm1WQ1filWn7sfHB5PEp5YhAPMobEpCKKqm+Cy1Wpj23sWO1T/5TLl+1XhuwsV6PHdj01Gtl2jONHat9ikvqtQN7UYX1mlKvjfX68z9MV9pz/2W9EpBYr5Y4qarXsrTn6LEjsV7f7dsxCoAwEATAMlb+/7m2WlgYONjFmRccKCRcdhM+WNe0H34vh2PCcdM17Xm4e1V9sK5pA6/2FhMP1dPuLCasVa1VB9eqHoWKJy54FPKk3TtxwZP2aCBn1QVyVlUgZ8UHcsQJb8QJ32zGCYWhmyfOD0OrcqhyzFU5FNGaJ84voqnRqtGO1WgBAAAAAAD4gwuJzBUuUw2jkAAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo4":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMAAwoGDyEsGDkmMxT39O9TQliZAAABzElEQVRo3u3ZP0sCcRgH8MehoCZ/6hvwDzSfNzZlRoOrIubiJAi1hHFEi6O01GJBEbgEBULQH6I3IOLSFjT5ElxFtOvH1XYafPGODvx+lpueh+89cMfvjxARERERES0tpVRYP0IK4dT5woniMecFF84hWliUaZqGEhU1EUrX+cOJ4jUjHFIL51C6iZJ0QjMkmgBgBQHonAyH0niOGU2SkspqSZXOArCCAHTOGNEUnmNGk4zsWpZ1klGpVwuhCyx/OFG8Vo9HchZg5kie49FcXV4K2qHaKEAegYIAdC7HI0dgiXskRd2kLMfVarWWVzsXVUAtbwIFWGfDh86t7Vhp4RytrVjpUvaazebptfl21wRgBf/f+f5p82rRHE6TWxna2qfc2JCxPNj+GOso3muvDWxM15Vjer4y/PqZ14ccBGVeIx3Fe41VdF59V45pZW3wO6+u7KNvdWb7YwREQeb1js7LlWNSWeW85ur9Na++dIIzr47tvcY6PC9Xjkmb88Lmxe9xvh7/Xx7877meANcTXK9i61Xuh7D9EPfb4H4bP89BCwLQuejZeQ7PC2eZf17I82jsPJr3Hdh9B+/TsPs03teC97VERERERERL6hv2rPU7MZ28hgAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo5":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAANlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteV6AHYNAAAAEXRSTlMABQoQFyw5ITIm9R889PfwHc7yYP0AAAGqSURBVHja7NLbbsQgDARQc12T7KbL//9scfqQSyshdYWFpTmPEbFHMAQAAAAAAAAAAAAAAAAA8An3y/5VwbHMIBu5Tyn1Z5Nw/ka+O+cVHMvMsZH7lFJ/9k+/fLjx8p8PCo5l5tjIfUqpPlsONCHeBC+dizpaCNeWmSOXN3/ucSn7NZEDTVwfF2uUF29fFRzLjLGR+5RSf7YcIKJ3SRdlDc6FtSQFxzJjbOQembK8O7NlORE9OF9wkf8KZw1conOxLTNmzx1mzz0wZb8mcoCIvurNqxCVV1XCRFwN4v2SZjcw5ZY6s6VHf9RrSURpqUoyUa4G5f2SZjcw5cad2UtCvWZ8OBsp/10vJmK1m3sSPatBLTfPX6+BKbfcmb0w6jXjw9lIiXp9t2/HNgDDMAzA/v+6szcDHSIZ5AUCkqGN5aHn4DpSul5Dz8F1pFxcL5/2iR/NHSn9OQ49B9eRcnO9PKsGPlh2pNw8qxoK5Y1bOlJuhkJG2qdzJ4y0FXLO5k4o5KgTphX1OlIu6oTK0LdzB5ShrXLczR2wymER7XDu94toAAAAAAAAAD98BS4GIUUirlsAAAAASUVORK5CYII="],"progressbar_indeterminate_holo6":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABAoXECA5LAb1JjENTd7cUtpBCwAAAcdJREFUeNrt291ygyAQhuFdQCVgk9z/1ZbGtkfgTH/QVd+HQ2bYb8IeGEEBAAAAAAAAAAAAgL9Q1VgZqvXJ/uOrcjzcWIJbTt4h4LJmcyq6uo8sGl1P5iqfPfgSsMeazSkXqmanIurm0JG1ymcP3iHgsmZ0c3Uqisy+LjgRF/wOglMtlY+nBBfTwXsEDFHUhWYL+aHOO1Xnh57MVT578B4Bg1Odfauc+DTVpCGohiFNPRmrfPbgPQImP2ssazbKyTBW5RRiDCmPm8vJx+hL5aN5BQ+Gg/cImIegjd3KKajcnnW3JJLK5A6ySH4eUX79ZIZ1CPgIIm/NFmq31yQy7fNbjSLj84hK8Ml0e3UI+PDt9ppoL+O7Zz7g/ZftlUUy7fXT4Nl6e/13wPvQbq9MexnfPfMBaa82+7tnPiDt1WZ/98wHXG0vHu2NPzmbD3jnn2OT/d0zH3D9xQSvVW2/tTQfcP21KodCps9czAdcPxTiSPtCwXc40uZCzoWC9wjoVy/kcJ3Q9m098wHnteuEXIa+UPDtL0PzKceVgu/wKYe2SKE9Gax89uBSbLimvGhlfNPNxyc93LCffLHVkgAAAAAAAAAAALiGdyuD+5ssDOz3AAAAAElFTkSuQmCC"],"progressbar_indeterminate_holo7":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQIKEBcsOSEm9jMd+vBmaXrxAAABc0lEQVRo3u2Zv0rDUBjFPzNEShZN4p7aJ4j6AkF9AFG3Dp0Et2wdfAFBBwe3OgtOydpdB1/A1UdwFy7xZvLDofY09HJpzm9qPw4/woGE+0cIIYQQQgghpLfsa9RgZTKRAIjjdnHq0in7c7iribPADmAAh0/21oWlMkkONXkW2EE38p0twIHbg8StS3cSy9GJ5jge2gEM4PDJ3rqwVC6nl5qLg5EdwAAOn+ytC0sVMr7VvOWJGuDgDtw+Gjt16dT9ubxfaZ6K1A5gAIdP9tYFpa5f5W6qmRfpbNqR+dke4MDt6cypS3dy8yhfjeb7YVA1HTF19AnEYfugcusyk9/Uy9++JmH3p6mjZo2UYeXWZepwvX2V2/rfRvX1zL7+xZQL+qoj7/uKKrcuo1If7Avri+/jEn3x++XV975P6wmuVxevV7kfwvZD3G9j+22e52DnOTwvhFIFz6OhVM77Duy+g/dpUCrjfS12X0sIIYQQQgghfeUH+E4C2CXdn30AAAAASUVORK5CYII="],"progressbar_indeterminate_holo8":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQMQFwksOSEy9h4L8O0G0W7OAAABgElEQVRo3u3ZsU7CUBQG4GMHlc0WuzG0TdxcDJCY6GJgKwuSvoFhwIWtcXZpZWGT8ABGpg4Y4kr0PXgMw2Jd1Jv0NjbXHG5K+L/xkvzDP9B7zyEAAAAAAICd5WU5RGR4HBy1IPV00pTz2wiRa0o88kwWlmO4Zo5ypRfniEYssgOJRW7Aonu0ZwfsRLph68kRjXSpV5csvVqdxaXlvuWdlyu9OEc00qRGW9L0em0WreuTRt55udKLc0QjLfKjrFHHfH+NOLwsa37ETqSf+npyRh3ru5E5LfqSuXnRZ3F7Vl3knZcrvThHNHJDcZh1d2+eP4YcJlfHcchOpFdjPTmikQmtUskzPaQ8xpV0g8aHiaacp59GPmmV9+sg5TE8SDdouJ9oypnRAH0p5Kz/7GtG0+3oq5JoyvmgKfpCX+hrK/rC/33WGt/Hf94ncF9Vu6/iPaT2HsJ7W+29jXmO2jwH80K1eSHm0WrzaOw71PYd2Kep7dOwr1Xb1wIAAAAAAOyqL3DZCqyBVRiEAAAAAElFTkSuQmCC"],"rate_star_big_half_holo_light":[null,null,null,"data:image/png;base64,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"],"rate_star_big_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAyVBMVEUAAAAAAAA8PDwAAAAAAAAAAAAAAABoaGhBQUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJiYkAAAAAAAAAAAA1NTUJCQkAAAAAAAAAAAChoaGPj48kJCQAAAAAAAAAAACmpqajo6Ofn5+WlpaUlJR1dXUVFRUAAACrq6uampqYmJhwcHBgYGAAAAAAAAAAAAC0tLSxsbF/f394eHgAAAAAAACMjIyFhYV9fX1tbW0sLCwAAAAAAACioqIAAACvr69YWFhUVFS3t7eP8DjqAAAAQnRSTlMAgJkyeRpOs5x+BQNzDmEWOsxaaAmVg29TLuTSjkQlHurn4tjXvIg18d3aua5kPhH7+MS+ZijPycK2klZJ5mz1qadtR87CAAAEB0lEQVRo3u2ZiVbaQBSG5wshhbCGTdZKVVQExIXW3bbz/g/VTMSGJUgWxp6ew/cA5Myd//73/oPYs2fPv2Ba/S4+g1wVcyo+gTOgKfRjm7ikhXbKUIei0E0uD8fAodBMCx7l4BNuqQqOPIdsQWjlEE6llBnoCa1U4Nb90BGYttBIIQvn0qUOKaGRS8hIRQdmQh9K20Pp0dDatF+Vtt8YgSW08QQ38o2+TjkoKfyUcwyNcigrKbzzQ6PhVeFE/gXQNJZKyhV8xnAptPAMD9JnCAdCB6qJ2nKBro5h4TeRz0BTKzXhXnrobaWaqfx0iTpoWLxSYMhl7qAidk4RfshlriFbE4od249cJQNnQqHHfnw6Gmxopuxnjd0vKVNoyHUyUE5kAmmPVmrOs1WEsVznGA4sq5yak/bYpg/3dy8tqzKbZQmkLQPoEsjrbGJZPffL9qq9NKts4U4GcdzlY/KVVG5BuyzTMDzGX+Y4zpHcRN9xRl/mZAzFKcu0ln0M93dvHWf48nIlE9N/aTvOjftl4GDxzuwiau/YNUNVu5IQq18ayd3SWf2Owq4Av+UuuVXfma73jgUY3+SuuPoFVAsb7IzTodwN7TrwZG9Ic1n8WZCMC/hoSTrMozad5NwB5kfTtzABMokvarQmt2BJNI5lEr6pNi1uHR+pLGrdic9JA7ByYivpg0TlU92TDTfga5X45Wsbyt1KoRcEVb7buGXzuydk+Yy2jMgAMKPFM/tJle8ketleSyIiZ2bE8p3g0rRj5K5o5RvNyxYDu4nLRbgm9csWh5QJXRkGZQaWnSC25lVWCQFkW0mDeF+GoAuFRBlCBfEwjKGcMEOMw2q7mCh9hVJd8lxRU+lrO8kz2Rlkwu9wlUQvqB0ZjuskbwG2CdcyJAZ8TfBWYsiw3CR4R3mOsvj3wczFf2Xqy9DUY79BHW5y1OAANYj9ut+DQVCaNDCCtHgE1diGup4ozx9QGAFZ8zSmsdaCDPX4FDCDw/M4pjm04NdqV3rHseyU6U/55ObQBGcli3SBAyWtaZH1hHMdT+C51YfAqwEL87ps+otzMoGnob6UsB+BvO8ypYl3qOQCLy+n9HtcmrXFI19mVw51FGv6VRZn3lFdHWce4VYO1VmafnacK7p+vx3vOE/+cVYO9eJPv+gOfug794kSm9kK3seqiz11A70YVzTwgyKVwqaT99ShHi/eL2kS44q8KOageuejgF0q4vKlr2oco5Py3n9SF0oE2Z69xUPyQKPzNmbTkTfHrjwf4VIsbbfFZ1zqQ/kQ2e6+w+97fBFsI+2JIuOAFVkLDVysWth2UJ6kKEZdFxSTdJRqW1mI/OeVBcyiNt+0qWotInGZt77GyVO914nYs2fPf88fm/2TZoiTETIAAAAASUVORK5CYII="],"rate_star_big_on_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAvVBMVEUAAAAAAAAAAAAAAAARPEwdZ4ISQFIAAAAAAAAtoMsAAAAAAAAAAAAAAAAmia0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqlLwONEICCQwupNAsncYnjbMjfZ4hdZMKJC0AAAAqlr4GFRoAAAAAAAAvqtcebYobX3kAAAAAAAAAAAAysuErmcIpkrklhakfcY8AAAAMLDgAAAAxr94xrtwieZkYVWwQOUkkgqQAAAAzteXrvX7WAAAAPnRSTlMAgBkzmbOcfAXmA2FzTc14Og9uVC1pWiUUfmXYlYPq4tLDvY5E24g1C/G3rlA+CPve18u6HZJJ+PbAqJjHIJaA4UwAAAP2SURBVGje7dkHduIwEAZg/YaAwdh0FkyvIfSEtE2Z+x9rPQ5ZAzbgpuzb9/gOgKPRzEijiKurq3+hXq2In5CtIl0XP+AWQFnIp+ZhUYR0BaAFaEK2bA5oAngUklWAJ9r+wC5VAYPugEZRSPUJTIgoBYyEVDVgQERdIK8KiYoN4I4sLSAhJFoCKWI9wBTycG5vyNaWWrS/OLe/zABdSFMG+vSlIzMdpg3glXbeJaZDgVPhmyGx4VWBe/oLgKTuoHBXcMyBpZDiGZiRYwOUhAxcRBnaM3QOCxlF5NhKKiWniOSW0irN/fRAC5Bw8UoASTr0AdRE7DTAoEOvQGMlWMwnER1LAbeCyWk/jp6ENmRy+3GJ/5JSB9rklgIKkZqAYqskdp51DZiTWxMo6XohsaPYpuI863eXul4zzTQ8ZcjDEJ6qpqnrI+vL6nF7KVdxwQN5aQ5xXq6WyO4dnTjUTtrmNzsPRpdO6RjG9mYnlWQT7DvsHgsA1u8ODGOTyawpsk4mYxh968sASvs1rWoAPihuY45dXYjjL20pXj3nOw61BuCN4vTb/R2WtfcpQ3FZv3GaF0+0M0w2FI9uC0BZPTHNcakacaXBuUvSZw5804nuAUC+cu7UMQGkIm/UjNNAOd9OdW4MTYoiw2WqTS/eDXij+hResw1Az4qLlFKk8HH1pP0d8Kta+PBlktzdFN8XBA7fbwruvu2qnkvhC9UmBhy2YOOZWrbDJy9sjlsO3yBI2OAKm5TwbV1hCxY+jP0dqXbY6iIkLt4h+cHNYKFGuDfmeFbxAWhUog7iHfJhGHFEL/Ig7sccKEScIeZ+c1uLNn15Z13cc8WUpy9PMc9kt0DK/x2uFukFtUf+vADp0HWkpoEX8ikJ/IrwVpIkv/oR3lGeg1we+B0lG/6VqUO+tUK/QT2e6qjrU8frSIQy8j74mu9498rFLlAN3VDdE+XdDOy9Sy6TkI116tVQmxMAee/heR6yOVTcg9mrvRxdTeSdUz56cyi7/urxEEDpk48PDe4J5yVcgmfzR4frevC1nL07ZioTQ4IrQIv2bJ4A5JwuUzftRUVP8AIwO7q7o7zaX/LyeFFdQAvVuccHEykv55BiL6p3cPqpgbdor3Ov+/ZyXKOVa1GpEB380enc98PTE6lSheXD6eCjEFs0cAZF1IqnVj7iRT2NvzfJDLFFze/5GqVzAalrsNx0OMZAOmgl5YBXojEnQXqkXughOQDt3tcxqwS+OQ7pbguLVr88jD7D0trQTeB29wt468MzCc4kRcoA9MC50IZlsfJbDoU8bFrQ6wLTggR8qjeAwP+8WgAwgxZffcGxFoEsc4swtzRlVNLE1dXVf+8PiLJs5G2Z9ooAAAAASUVORK5CYII="],"scrubber_control_disabled_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIg4st+Ci486sd5LqMtwlaJJqc0zteWzIZSAAAAAE3RSTlMATUg+Ihs3AywVCEUP4FHVmWCf15i9tgAAAYlJREFUaN7t2Itu6yAMBmD/NhBuabuT93/XI03TOm0qJXasdVK+B4iFTQyYTqfT6S/pIScRBlgk5dDpSDUkxjecQqVDLDHhgRQX++cDY4CDMURgPMGB9IpgghRtdjImZVWeqmCaVEV6GDvw7jRF7BQV33eMEAHXCAUq03WoDBWuNGURKMlCMzLUslMB7oo5QfYkBZiEpwtgmPBiWoB9CUuDUVssPcLeMRLMEg1UHKDqS2wvcwJ8c8Q4ANNDHYfoviUAgrpRX27XbbveLhjL2hq/rdu79U1bZcHIZd0+rOM1CD3SMHLbPv3DSFPu0us9wKrcpxjavsCQewD3FLkX2X2buv9ov9cqIg4R3du194HjfmS6H/ru1xbvi5f71dH98ut+ffd/gPg/ocYEBkLPdRj0V3iIG5IkLzIMIeqqCNydB0bllUZq96Gj39ixN+zQOu1WE6alShphvgEp9YQJ0kkvNjzRItlEwYBEsiuZH2zNXOgYS8ztR2pyXOhItYQsH3IolU6n0+kP+Q9bEx2UrsdzRwAAAABJRU5ErkJggg=="],"scrubber_control_focused_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVtyu1yzO1ryuxexetjx+tTwelvy+1yzO1yzO1xzO1syuxqyuxwzO1wy+1nyOxZw+pNv+hxy+1wy+wzteU1tuVOv+k9ueY4t+ZixutDu+dJvehVwelYwupSwelryuxGvOiB2w4OAAAAJXRSTlMATQYKEQ0XGh02RUkgQSwmMjvw1flze2To3M/j3IyrpYRsX62hrNdO2wAAAttJREFUaN7tWWlz2jAQrZb4Ej6wjc0dIC2+OfL//1xllxl1Wq9AVjQhGV6+BD68xx7aXa1+PPHEE5KA7k8LoMXoCmjxseSM1TCMlyvYv+yLjxJp2Rm1aZqWZXewLPaBybQa6uzQsVt24IQepYSBUi90AtvqNABAmd5k5B75Dx4TMdUkOnrLnVCCgE5cq5MYTm+6zpgIMHbcP1YM4mfO4fS4BHPUAIXOOz4ld4D6nZ+k+U03JHcidE1UAXdPQMndoAHiJpzf8okUfEtCoeWfEElMWoX7+R0iDQdRwH+/sg14/vhkEPx7cgnAMAMyEIFpANx2kEuHClCXO0kQgJAMRngrDAA8AEPDACA2wKYqAtTmJiAGOEQJDjcBifBYTWAsjDM3QM0EXQZwE3ADhDVi9mu5jqbr5XYvrBjMBPwMeARFuqhO54bhfKoWO4LCQ88CE8CLxNuyOtdFWWZZWRZ1XsUzvGAwAekQJ/NjXWaHK7KyPkaJdJhHBuqh/TQvGD1HVuTTBPWRMcJO8Rjxz5zzc4XoDckj5DTDCC1D8ZHzc4VjjBakEUgl6aaqOT9XqKuNVKKCgRXqRV4eelDmK6xoIwJIjJPOgF4TEiTKvQJopX49FYdeFMdXtGbLJNGy9VC/j2KJNAJ4sUkv5k3WL5A1EelFv8AIE5iiAu9TGQHQJ8BjoNVFoCHIymn6U5ym6gctxQ4aUouQUrFSLxXifrNDi52o46iX6/NCslzjDWcW9TacmaDhSLbMtKdlXlLBWCHd9NPon6Z/jlJB0x8wtsziKq+LMmPoxpaFeGwZMnjtVtUpb5r3Jj9V882NwWvY6LjfxuvLZR1vE9nRUf/wy6uF+vhuGZ95AeGZqmIA6L4Ear/G6r6I614laF+G6F7nfP5CSm2lpnspCA+y1hy8mNW8WoaHWo7Lr/cf74FC6onlUR+JdD1z4Q919hV/PdR9hafGG4+lX+e994knvjF+A/DCfuTfcOFvAAAAAElFTkSuQmCC"],"scrubber_control_normal_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAhFBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVKvugzteUzteUzteUzteUzteUzteU/uuczteUzteVJvehJvegzteUzteVKvug7uOZHvOhHvOhDu+dDu+czteU5t+Y8ueZAuudFvOclVTOqAAAAJ3RSTlOZAAQJDxgTITo2HSomlX0uijJC6IZuYVFMSbJmgf74kHjvp8/MvLsvv+3mAAADbElEQVRo3syU23aiQBBFz4w0NA2t3AXvmqxE8P//bxqMFip0G4W1Zr8keTmbOlUd/BmZ/0fw945hBJQ9mUwsy7Ib1C/qT7K8J2jCVTJjQjg/CMGY8jQSo8CYrr6bCcf3ZqHLf3DDmec7gqlZyPGC4PztzPFnLs+zdBcEgQSk+rFLs5y7M99h5zl0An08Eyq9WE63eGA7XRbKIZheAU28+njPjZYJekmWkeupMTRFoTffquPnUwktcjqvFVbvEOiLt0UdjyeoFcLuU6Dv8/2woHiTogj9viHQma8+n6cSTyNTroYgg1bQtB/mAX5FkIfNJsyCph43k/glMnP9LgM68j2+wwvsuNdhwEO+8KIVXmIVeeLBgI78BC+SdBjw0E8U4GWC6KEl3NxnnZ/gDRKuNn1zrbi5f+bzFd5ipQz0Hu4EE9txd3iTnevYkzsBLTjM8DZZeLNo3Cwgl3gbmXvtNaBVkM8DDEDA/VZJaBeUYhBSKqktYF4hMQiy8BgJWhc0xUBMW5cEGmCOwZjTCKABVsCAI1y2gBEGoBFIYAnawDAjCIsEzRuIJAZERvVbIIHFZksMynLGrLbAcRMYOXzG8Xodx58HGElchwR1QwVMfO1PVVUqquq0/4KJou7oKjA3dIhP1fH43XA8lqf4YO6IBOYbWmwqlU4cq83CfEdXge3wrT5/XZ7zyVCu9YYtd+yLQK0g1/ezoXwybPQt5WoJjaBZQQYdMfXTbimGjqxewlWQau/nRPltw0l7SykJLBFqd7wvvzsp99oth8K6CrTPbEED3I+w0D41EuiP6KPqE1Qf+jO6CNSVSt2Ky+8eSt2apbrT5wSbfsHmaQE0rPsFa2jQTDC8YPyKtuMsmc40GO1Mx39o4/+rMP+z+1etGeMACEIx1BuQqJPRwUQG739BHYzFEMNHfBE5AAwov+2rv3vsfOKx0wHYc80PHH5k8kPfLlvWfNmSJbx8KLy8VXhJOhr837B08zTN3TLYpaPEb7kBjP8CXL7DBoS3UKAJHOVjcRvLG3E+SuDDED7O4QMpPlLjQ0E+1lQwW3TRfasLAKNlOhyn430aUNCI5XtIdGAu9wxz1QHqAtQ4mj6eEzXWA0vzca/2Nx2gIwzAWtu/gdybfZmQe35pwF1LAy4oDdRce0gVN/5SPYlXTe2cDUmLl89GXuGIAAAAAElFTkSuQmCC"],"scrubber_control_pressed_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA1VBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVsyu0zteVuy+0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVdxOszteVpyexuy+1tyuwzteUzteVZw+pNv+huy+1xy+1lx+xgxuszteUzteVryuwzteUzteVSweluy+1uy+0zteUzteUzteUzteU1tuVOv+k8uOZVwuo4t+ZJvehCu+dgxutjx+tEu+dGvOfyQddBAAAAO3RSTlNmAHzex6Jq682mwiLmgYUv7m3hTPX14fmJNNmeY1HSvbCMmI47/e21tI+IeufcnZRyHf4Gn4DVv2BIOFolky4AAARISURBVGje5Zr9e5owEMdvIKiooCKgnS9Tu9p29r3dW0Sttv3//6Stu0BkJQlIfLY9+/5qnnzkcsld7gLvDqz/B1AbaJNSpRIQElQq1qTl1hQCbvrVOnmjerV/owJQ03TCla7VCgL6FSJRpV8AYJZJBpXNPQH9JsmoJuwBcI+Sc1RODdu2TQDTtrvGaJikH7k5AbVJws5VDd5IqybWp+TkAbgeidU2TODINNpsnOdmB2gklmWDULbFxmoZAU6JTd8AqRpWwkxyQC9e3foZZNJZvM/1nhzwPfZ9AzLLiPfEsQxwHERDu5BD3ehvBcdiQC8aWGpBLplW9Md6IoAT2f8D5NaHaB0cASDynyrsoWr08TwA8//3sJfeR/uBB3AT/7/AN7jpAMfj2D/3OnhOKqBETQgFZNE50gDfqJu1igBa1M2/pQCG+NMYCqlL48NbgCk8H3KfGuYbAEaoOhRWHSPg3W+AFoLPigPOcKbWbwBcHAsUyEJnSQK+IrahAtDAub4mABi/dVAiHTOFXUANobYagI2z1XYA+FVtUKQ22nsH0M60B85nF/7trX8xe8i0F9oMcEM3B4h0OX9ahY8/Fa6e5lcgEt20NzGgL1/iT/42fF6uFz+1Xj6H24tP8mXux4CqNAxMO6vNekGoFuvNqnMuDQzVGIC7WxPM/zFc4vQRYhl+FBA0PHcQEDlpU2CfDpufEToCKzXRUSlggBsDuPJXbH5GWF0AV7hxBxSAH3TK95/ths3PCM9bvi+dotEpwJCkEifhmqRoHfqSBMOgAEscyqb4ASmf8MRd5zEezhRwJHaiL6slSdVyNRO70RECaCy45i4xWijNRp+Bo2uMCRTgYQgCjjqPi3TA4vEEOMIA6VEADgeePr4QHqADPOEICgjwqDscoIlrcDgT6ehFh1vkIQagw7npSJwSXRXYaAWPirnsqCh22G3kh93Bj+usAechd8ApY8DJHDKv0kLmVB4yk0HfyBf0p9LEiAV9kF/OHvxtuInSlk249YVpC173AAEsNQWhLk9eE6+Xl9fE6+QShGLJaSJ1nIBY05k/v72d+7NzEGtCU0cG6KpNfvFw6+4Aeuz+oe4G0tu9gAzVX0CGiRsOKPwEjboMA7Bb7EgFYIQHQ/o1dgyFNU6/xt55qi7i6PLeHaeUcA8Fdc8rJdDITLpKiiF6SrXFJQp2m0lrtK6gIGWpL0hROYGqklrgpBcFB0WLggZBDXhlzbGasmbjjxRmUY6uqLQsL45bZk7/HBGU18tY3q/nK+/XZeV9RigTqvv8y0uaxxlaLHreFsu4zVosOZtEIw2k0kZ5mkSoRvY2V8NiYxs5GnVBxkadzsYFgzytRqckbzUapWSrsViztIzN0l9W+dUsTXaCdXePdq/pkYzyWns2rLEbIFPz+q5Ay30om37YL/pooCF6NGDXlDx7MNOfPZg19Q83XmemDzf+tacnfy/gB/s76qMkz3F7AAAAAElFTkSuQmCC"],"spinner_76_inner_holo":[null,null,null,"data:image/png;base64,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"],"spinner_76_outer_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOQAAADkCAMAAAC/iXi/AAAAsVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+3mHKcAAAAO3RSTlMABgoSH/3yGiQO7CkW9vouMkDkRTfJzjvf0+jESqBcV2Hbt66ldlLXv06yZWmBqZtxu49tl5OLfXqFiHO5Lf0AAAtLSURBVHja7NxrU9NAFMbxZzeRNk1qYmxLWyxQLhYsooKI+v0/mHshOXu8dDTNZXHyO4X3/zmbDcMwoNfr9Xq9Xq/X6/V6vV6v1+v1er2eH7bb7WmWZSn+Zy8KL6cXj8eZxPMnNJhxI6n05fzT4ys8X8KCsIXit5HGwbvLCZ4fYVCjQIEl6nmyPN8GeEaEFAqvLEOdRP1FxuPxu9Nn0imkIhgq/M0mqVFnjlaH8J2QmmCVsIOdmxzrz9hY3Hh945pEW+k2FscVPNImUqbZpbH8NoCnTCJtkkDs3iRVlg4eQniIEqmSNqnnj5ukNVLkwejOu20KGUleyTa5+3alTGpUn+VXr55NlagaI75IsnuTFFk0HujRZq/hDRkp1PhLJuzs2iQVUqW28uTMikj5tfLXh3LHJsdm3MhCfi/Qvaiw48BCwCGyLJtst9/PZ/znHdZImdMMHROBE0mZbiV2iK8/3uZ079BZpcbRwfIGnZJB4FTyREmFu4XHF8sxXyQzGt0G6IyIqJGfV9uIv3f4PWfXThloZzFBR2Sg8UyKxL96czHii3RCR6OP6ET0lEiVdF4FqohOP9kfBHif/X4RoX2BZit/PrCobnLOd2hDjaME7aJGXikV7Ce7OKBd6sCychaiVcJJ5JXYX/yhSKQDa2xStIEaEzeTEuuRHbG7tTQ/RGtEQonu3SNQm22uEmmPhfwaLZGJolfJlylRp+Dzbza5XC5P0AqZGAHvjARqNpkVbdQ4Wuav0QKRWO5jGQUS9ZMf2Fld2plnaBg18kyBRpzmJo8qtXWMJlEjP7AR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"]};var imageCache={actionbar_ic_back_white:null,btn_check_off_disabled_focused_holo_light:null,btn_check_off_disabled_holo_light:null,btn_check_off_focused_holo_light:null,btn_check_off_holo_light:null,btn_check_off_pressed_holo_light:null,btn_check_on_disabled_focused_holo_light:null,btn_check_on_disabled_holo_light:null,btn_check_on_focused_holo_light:null,btn_check_on_holo_light:null,btn_check_on_pressed_holo_light:null,btn_default_disabled_focused_holo_light:null,btn_default_disabled_holo_light:null,btn_default_focused_holo_light:null,btn_default_normal_holo_light:null,btn_default_pressed_holo_light:null,btn_radio_off_disabled_focused_holo_light:null,btn_radio_off_disabled_holo_light:null,btn_radio_off_focused_holo_light:null,btn_radio_off_holo_light:null,btn_radio_off_pressed_holo_light:null,btn_radio_on_disabled_focused_holo_light:null,btn_radio_on_disabled_holo_light:null,btn_radio_on_focused_holo_light:null,btn_radio_on_holo_light:null,btn_radio_on_pressed_holo_light:null,btn_rating_star_off_normal_holo_light:null,btn_rating_star_off_pressed_holo_light:null,btn_rating_star_on_normal_holo_light:null,btn_rating_star_on_pressed_holo_light:null,dropdown_background_dark:null,editbox_background_focus_yellow:null,editbox_background_normal:null,ic_menu_moreoverflow_normal_holo_dark:null,menu_panel_holo_dark:null,menu_panel_holo_light:null,popup_bottom_bright:null,popup_center_bright:null,popup_full_bright:null,popup_top_bright:null,progressbar_indeterminate_holo1:null,progressbar_indeterminate_holo2:null,progressbar_indeterminate_holo3:null,progressbar_indeterminate_holo4:null,progressbar_indeterminate_holo5:null,progressbar_indeterminate_holo6:null,progressbar_indeterminate_holo7:null,progressbar_indeterminate_holo8:null,rate_star_big_half_holo_light:null,rate_star_big_off_holo_light:null,rate_star_big_on_holo_light:null,scrubber_control_disabled_holo:null,scrubber_control_focused_holo:null,scrubber_control_normal_holo:null,scrubber_control_pressed_holo:null,spinner_76_inner_holo:null,spinner_76_outer_holo:null};function findRatioImage(array){if(array[window.devicePixelRatio])return new NetImage(array[window.devicePixelRatio],window.devicePixelRatio);for(var i=array.length;i>=0;i--){if(array[i]){return new NetImage(array[i],i);}}throw Error('Not find radio image. May something error in build.');}var image_base64=function(){function image_base64(){_classCallCheck(this,image_base64);}_createClass(image_base64,null,[{key:'actionbar_ic_back_white',get:function get(){return imageCache.actionbar_ic_back_white||(imageCache.actionbar_ic_back_white=findRatioImage(data.actionbar_ic_back_white));}},{key:'btn_check_off_disabled_focused_holo_light',get:function get(){return imageCache.btn_check_off_disabled_focused_holo_light||(imageCache.btn_check_off_disabled_focused_holo_light=findRatioImage(data.btn_check_off_disabled_focused_holo_light));}},{key:'btn_check_off_disabled_holo_light',get:function get(){return imageCache.btn_check_off_disabled_holo_light||(imageCache.btn_check_off_disabled_holo_light=findRatioImage(data.btn_check_off_disabled_holo_light));}},{key:'btn_check_off_focused_holo_light',get:function get(){return imageCache.btn_check_off_focused_holo_light||(imageCache.btn_check_off_focused_holo_light=findRatioImage(data.btn_check_off_focused_holo_light));}},{key:'btn_check_off_holo_light',get:function get(){return imageCache.btn_check_off_holo_light||(imageCache.btn_check_off_holo_light=findRatioImage(data.btn_check_off_holo_light));}},{key:'btn_check_off_pressed_holo_light',get:function get(){return imageCache.btn_check_off_pressed_holo_light||(imageCache.btn_check_off_pressed_holo_light=findRatioImage(data.btn_check_off_pressed_holo_light));}},{key:'btn_check_on_disabled_focused_holo_light',get:function get(){return imageCache.btn_check_on_disabled_focused_holo_light||(imageCache.btn_check_on_disabled_focused_holo_light=findRatioImage(data.btn_check_on_disabled_focused_holo_light));}},{key:'btn_check_on_disabled_holo_light',get:function get(){return imageCache.btn_check_on_disabled_holo_light||(imageCache.btn_check_on_disabled_holo_light=findRatioImage(data.btn_check_on_disabled_holo_light));}},{key:'btn_check_on_focused_holo_light',get:function get(){return imageCache.btn_check_on_focused_holo_light||(imageCache.btn_check_on_focused_holo_light=findRatioImage(data.btn_check_on_focused_holo_light));}},{key:'btn_check_on_holo_light',get:function get(){return imageCache.btn_check_on_holo_light||(imageCache.btn_check_on_holo_light=findRatioImage(data.btn_check_on_holo_light));}},{key:'btn_check_on_pressed_holo_light',get:function get(){return imageCache.btn_check_on_pressed_holo_light||(imageCache.btn_check_on_pressed_holo_light=findRatioImage(data.btn_check_on_pressed_holo_light));}},{key:'btn_default_disabled_focused_holo_light',get:function get(){return imageCache.btn_default_disabled_focused_holo_light||(imageCache.btn_default_disabled_focused_holo_light=findRatioImage(data.btn_default_disabled_focused_holo_light));}},{key:'btn_default_disabled_holo_light',get:function get(){return imageCache.btn_default_disabled_holo_light||(imageCache.btn_default_disabled_holo_light=findRatioImage(data.btn_default_disabled_holo_light));}},{key:'btn_default_focused_holo_light',get:function get(){return imageCache.btn_default_focused_holo_light||(imageCache.btn_default_focused_holo_light=findRatioImage(data.btn_default_focused_holo_light));}},{key:'btn_default_normal_holo_light',get:function get(){return imageCache.btn_default_normal_holo_light||(imageCache.btn_default_normal_holo_light=findRatioImage(data.btn_default_normal_holo_light));}},{key:'btn_default_pressed_holo_light',get:function get(){return imageCache.btn_default_pressed_holo_light||(imageCache.btn_default_pressed_holo_light=findRatioImage(data.btn_default_pressed_holo_light));}},{key:'btn_radio_off_disabled_focused_holo_light',get:function get(){return imageCache.btn_radio_off_disabled_focused_holo_light||(imageCache.btn_radio_off_disabled_focused_holo_light=findRatioImage(data.btn_radio_off_disabled_focused_holo_light));}},{key:'btn_radio_off_disabled_holo_light',get:function get(){return imageCache.btn_radio_off_disabled_holo_light||(imageCache.btn_radio_off_disabled_holo_light=findRatioImage(data.btn_radio_off_disabled_holo_light));}},{key:'btn_radio_off_focused_holo_light',get:function get(){return imageCache.btn_radio_off_focused_holo_light||(imageCache.btn_radio_off_focused_holo_light=findRatioImage(data.btn_radio_off_focused_holo_light));}},{key:'btn_radio_off_holo_light',get:function get(){return imageCache.btn_radio_off_holo_light||(imageCache.btn_radio_off_holo_light=findRatioImage(data.btn_radio_off_holo_light));}},{key:'btn_radio_off_pressed_holo_light',get:function get(){return imageCache.btn_radio_off_pressed_holo_light||(imageCache.btn_radio_off_pressed_holo_light=findRatioImage(data.btn_radio_off_pressed_holo_light));}},{key:'btn_radio_on_disabled_focused_holo_light',get:function get(){return imageCache.btn_radio_on_disabled_focused_holo_light||(imageCache.btn_radio_on_disabled_focused_holo_light=findRatioImage(data.btn_radio_on_disabled_focused_holo_light));}},{key:'btn_radio_on_disabled_holo_light',get:function get(){return imageCache.btn_radio_on_disabled_holo_light||(imageCache.btn_radio_on_disabled_holo_light=findRatioImage(data.btn_radio_on_disabled_holo_light));}},{key:'btn_radio_on_focused_holo_light',get:function get(){return imageCache.btn_radio_on_focused_holo_light||(imageCache.btn_radio_on_focused_holo_light=findRatioImage(data.btn_radio_on_focused_holo_light));}},{key:'btn_radio_on_holo_light',get:function get(){return imageCache.btn_radio_on_holo_light||(imageCache.btn_radio_on_holo_light=findRatioImage(data.btn_radio_on_holo_light));}},{key:'btn_radio_on_pressed_holo_light',get:function get(){return imageCache.btn_radio_on_pressed_holo_light||(imageCache.btn_radio_on_pressed_holo_light=findRatioImage(data.btn_radio_on_pressed_holo_light));}},{key:'btn_rating_star_off_normal_holo_light',get:function get(){return imageCache.btn_rating_star_off_normal_holo_light||(imageCache.btn_rating_star_off_normal_holo_light=findRatioImage(data.btn_rating_star_off_normal_holo_light));}},{key:'btn_rating_star_off_pressed_holo_light',get:function get(){return imageCache.btn_rating_star_off_pressed_holo_light||(imageCache.btn_rating_star_off_pressed_holo_light=findRatioImage(data.btn_rating_star_off_pressed_holo_light));}},{key:'btn_rating_star_on_normal_holo_light',get:function get(){return imageCache.btn_rating_star_on_normal_holo_light||(imageCache.btn_rating_star_on_normal_holo_light=findRatioImage(data.btn_rating_star_on_normal_holo_light));}},{key:'btn_rating_star_on_pressed_holo_light',get:function get(){return imageCache.btn_rating_star_on_pressed_holo_light||(imageCache.btn_rating_star_on_pressed_holo_light=findRatioImage(data.btn_rating_star_on_pressed_holo_light));}},{key:'dropdown_background_dark',get:function get(){return imageCache.dropdown_background_dark||(imageCache.dropdown_background_dark=findRatioImage(data.dropdown_background_dark));}},{key:'editbox_background_focus_yellow',get:function get(){return imageCache.editbox_background_focus_yellow||(imageCache.editbox_background_focus_yellow=findRatioImage(data.editbox_background_focus_yellow));}},{key:'editbox_background_normal',get:function get(){return imageCache.editbox_background_normal||(imageCache.editbox_background_normal=findRatioImage(data.editbox_background_normal));}},{key:'ic_menu_moreoverflow_normal_holo_dark',get:function get(){return imageCache.ic_menu_moreoverflow_normal_holo_dark||(imageCache.ic_menu_moreoverflow_normal_holo_dark=findRatioImage(data.ic_menu_moreoverflow_normal_holo_dark));}},{key:'menu_panel_holo_dark',get:function get(){return imageCache.menu_panel_holo_dark||(imageCache.menu_panel_holo_dark=findRatioImage(data.menu_panel_holo_dark));}},{key:'menu_panel_holo_light',get:function get(){return imageCache.menu_panel_holo_light||(imageCache.menu_panel_holo_light=findRatioImage(data.menu_panel_holo_light));}},{key:'popup_bottom_bright',get:function get(){return imageCache.popup_bottom_bright||(imageCache.popup_bottom_bright=findRatioImage(data.popup_bottom_bright));}},{key:'popup_center_bright',get:function get(){return imageCache.popup_center_bright||(imageCache.popup_center_bright=findRatioImage(data.popup_center_bright));}},{key:'popup_full_bright',get:function get(){return imageCache.popup_full_bright||(imageCache.popup_full_bright=findRatioImage(data.popup_full_bright));}},{key:'popup_top_bright',get:function get(){return imageCache.popup_top_bright||(imageCache.popup_top_bright=findRatioImage(data.popup_top_bright));}},{key:'progressbar_indeterminate_holo1',get:function get(){return imageCache.progressbar_indeterminate_holo1||(imageCache.progressbar_indeterminate_holo1=findRatioImage(data.progressbar_indeterminate_holo1));}},{key:'progressbar_indeterminate_holo2',get:function get(){return imageCache.progressbar_indeterminate_holo2||(imageCache.progressbar_indeterminate_holo2=findRatioImage(data.progressbar_indeterminate_holo2));}},{key:'progressbar_indeterminate_holo3',get:function get(){return imageCache.progressbar_indeterminate_holo3||(imageCache.progressbar_indeterminate_holo3=findRatioImage(data.progressbar_indeterminate_holo3));}},{key:'progressbar_indeterminate_holo4',get:function get(){return imageCache.progressbar_indeterminate_holo4||(imageCache.progressbar_indeterminate_holo4=findRatioImage(data.progressbar_indeterminate_holo4));}},{key:'progressbar_indeterminate_holo5',get:function get(){return imageCache.progressbar_indeterminate_holo5||(imageCache.progressbar_indeterminate_holo5=findRatioImage(data.progressbar_indeterminate_holo5));}},{key:'progressbar_indeterminate_holo6',get:function get(){return imageCache.progressbar_indeterminate_holo6||(imageCache.progressbar_indeterminate_holo6=findRatioImage(data.progressbar_indeterminate_holo6));}},{key:'progressbar_indeterminate_holo7',get:function get(){return imageCache.progressbar_indeterminate_holo7||(imageCache.progressbar_indeterminate_holo7=findRatioImage(data.progressbar_indeterminate_holo7));}},{key:'progressbar_indeterminate_holo8',get:function get(){return imageCache.progressbar_indeterminate_holo8||(imageCache.progressbar_indeterminate_holo8=findRatioImage(data.progressbar_indeterminate_holo8));}},{key:'rate_star_big_half_holo_light',get:function get(){return imageCache.rate_star_big_half_holo_light||(imageCache.rate_star_big_half_holo_light=findRatioImage(data.rate_star_big_half_holo_light));}},{key:'rate_star_big_off_holo_light',get:function get(){return imageCache.rate_star_big_off_holo_light||(imageCache.rate_star_big_off_holo_light=findRatioImage(data.rate_star_big_off_holo_light));}},{key:'rate_star_big_on_holo_light',get:function get(){return imageCache.rate_star_big_on_holo_light||(imageCache.rate_star_big_on_holo_light=findRatioImage(data.rate_star_big_on_holo_light));}},{key:'scrubber_control_disabled_holo',get:function get(){return imageCache.scrubber_control_disabled_holo||(imageCache.scrubber_control_disabled_holo=findRatioImage(data.scrubber_control_disabled_holo));}},{key:'scrubber_control_focused_holo',get:function get(){return imageCache.scrubber_control_focused_holo||(imageCache.scrubber_control_focused_holo=findRatioImage(data.scrubber_control_focused_holo));}},{key:'scrubber_control_normal_holo',get:function get(){return imageCache.scrubber_control_normal_holo||(imageCache.scrubber_control_normal_holo=findRatioImage(data.scrubber_control_normal_holo));}},{key:'scrubber_control_pressed_holo',get:function get(){return imageCache.scrubber_control_pressed_holo||(imageCache.scrubber_control_pressed_holo=findRatioImage(data.scrubber_control_pressed_holo));}},{key:'spinner_76_inner_holo',get:function get(){return imageCache.spinner_76_inner_holo||(imageCache.spinner_76_inner_holo=findRatioImage(data.spinner_76_inner_holo));}},{key:'spinner_76_outer_holo',get:function get(){return imageCache.spinner_76_outer_holo||(imageCache.spinner_76_outer_holo=findRatioImage(data.spinner_76_outer_holo));}}]);return image_base64;}();R.image_base64=image_base64;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var R;(function(R){var NetDrawable=androidui.image.NetDrawable;var ChangeImageSizeDrawable=androidui.image.ChangeImageSizeDrawable;var NinePatchDrawable=androidui.image.NinePatchDrawable;var density=android.content.res.Resources.getDisplayMetrics().density;var image=function(){function image(){_classCallCheck(this,image);}_createClass(image,null,[{key:'actionbar_ic_back_white',get:function get(){return new NetDrawable(R.image_base64.actionbar_ic_back_white);}},{key:'btn_check_off_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_disabled_focused_holo_light);}},{key:'btn_check_off_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_disabled_holo_light);}},{key:'btn_check_off_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_focused_holo_light);}},{key:'btn_check_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_holo_light);}},{key:'btn_check_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_pressed_holo_light);}},{key:'btn_check_on_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_disabled_focused_holo_light);}},{key:'btn_check_on_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_disabled_holo_light);}},{key:'btn_check_on_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_focused_holo_light);}},{key:'btn_check_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_holo_light);}},{key:'btn_check_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_pressed_holo_light);}},{key:'btn_default_disabled_focused_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_disabled_focused_holo_light);}},{key:'btn_default_disabled_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_disabled_holo_light);}},{key:'btn_default_focused_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_focused_holo_light);}},{key:'btn_default_normal_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_normal_holo_light);}},{key:'btn_default_pressed_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_pressed_holo_light);}},{key:'btn_radio_off_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_disabled_focused_holo_light);}},{key:'btn_radio_off_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_disabled_holo_light);}},{key:'btn_radio_off_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_focused_holo_light);}},{key:'btn_radio_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_holo_light);}},{key:'btn_radio_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_pressed_holo_light);}},{key:'btn_radio_on_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_disabled_focused_holo_light);}},{key:'btn_radio_on_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_disabled_holo_light);}},{key:'btn_radio_on_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_focused_holo_light);}},{key:'btn_radio_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_holo_light);}},{key:'btn_radio_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_pressed_holo_light);}},{key:'btn_rating_star_off_normal_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_off_normal_holo_light);}},{key:'btn_rating_star_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_off_pressed_holo_light);}},{key:'btn_rating_star_on_normal_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_on_normal_holo_light);}},{key:'btn_rating_star_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_on_pressed_holo_light);}},{key:'dropdown_background_dark',get:function get(){return new NinePatchDrawable(R.image_base64.dropdown_background_dark);}},{key:'editbox_background_focus_yellow',get:function get(){return new NinePatchDrawable(R.image_base64.editbox_background_focus_yellow);}},{key:'editbox_background_normal',get:function get(){return new NinePatchDrawable(R.image_base64.editbox_background_normal);}},{key:'ic_menu_moreoverflow_normal_holo_dark',get:function get(){return new NetDrawable(R.image_base64.ic_menu_moreoverflow_normal_holo_dark);}},{key:'menu_panel_holo_dark',get:function get(){return new NinePatchDrawable(R.image_base64.menu_panel_holo_dark);}},{key:'menu_panel_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.menu_panel_holo_light);}},{key:'popup_bottom_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_bottom_bright);}},{key:'popup_center_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_center_bright);}},{key:'popup_full_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_full_bright);}},{key:'popup_top_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_top_bright);}},{key:'progressbar_indeterminate_holo1',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo1);}},{key:'progressbar_indeterminate_holo2',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo2);}},{key:'progressbar_indeterminate_holo3',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo3);}},{key:'progressbar_indeterminate_holo4',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo4);}},{key:'progressbar_indeterminate_holo5',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo5);}},{key:'progressbar_indeterminate_holo6',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo6);}},{key:'progressbar_indeterminate_holo7',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo7);}},{key:'progressbar_indeterminate_holo8',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo8);}},{key:'rate_star_big_half_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_half_holo_light);}},{key:'rate_star_big_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_off_holo_light);}},{key:'rate_star_big_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_on_holo_light);}},{key:'scrubber_control_disabled_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_disabled_holo);}},{key:'scrubber_control_focused_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_focused_holo);}},{key:'scrubber_control_normal_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_normal_holo);}},{key:'scrubber_control_pressed_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_pressed_holo);}},{key:'spinner_76_inner_holo',get:function get(){return new NetDrawable(R.image_base64.spinner_76_inner_holo);}},{key:'spinner_76_outer_holo',get:function get(){return new NetDrawable(R.image_base64.spinner_76_outer_holo);}},{key:'spinner_48_outer_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_outer_holo,48*density,48*density);}},{key:'spinner_48_inner_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_inner_holo,48*density,48*density);}},{key:'spinner_16_outer_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_outer_holo,16*density,16*density);}},{key:'spinner_16_inner_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_inner_holo,16*density,16*density);}},{key:'rate_star_small_off_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_half_holo_light,16*density,16*density);}},{key:'rate_star_small_half_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_off_holo_light,16*density,16*density);}},{key:'rate_star_small_on_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_on_holo_light,16*density,16*density);}}]);return image;}();R.image=image;R.image_base64.actionbar_ic_back_white;R.image_base64.btn_default_normal_holo_light;R.image_base64.dropdown_background_dark;R.image_base64.editbox_background_normal;R.image_base64.ic_menu_moreoverflow_normal_holo_dark;R.image_base64.menu_panel_holo_dark;R.image_base64.menu_panel_holo_light;R.image_base64.popup_bottom_bright;R.image_base64.popup_center_bright;R.image_base64.popup_full_bright;R.image_base64.popup_top_bright;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var R;(function(R){var ColorStateList=android.content.res.ColorStateList;var Color=android.graphics.Color;var color=function(){function color(){_classCallCheck(this,color);}_createClass(color,null,[{key:'textView_textColor',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0xffc0c0c0,0xff333333];var DefaultStyleTextColor=function(_ColorStateList){_inherits(DefaultStyleTextColor,_ColorStateList);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,Object.getPrototypeOf(DefaultStyleTextColor).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}},{key:'primary_text_light_disable_only',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0x80000000,0xff000000];var DefaultStyleTextColor=function(_ColorStateList2){_inherits(DefaultStyleTextColor,_ColorStateList2);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,Object.getPrototypeOf(DefaultStyleTextColor).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}},{key:'primary_text_dark_disable_only',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0x80000000,0xffffffff];var DefaultStyleTextColor=function(_ColorStateList3){_inherits(DefaultStyleTextColor,_ColorStateList3);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,Object.getPrototypeOf(DefaultStyleTextColor).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}}]);return color;}();color.white=Color.WHITE;color.black=Color.BLACK;color.transparent=Color.TRANSPARENT;R.color=color;})(R=android.R||(android.R={}));})(android||(android={}));var goog;(function(goog){var math;(function(math){var Long=function(){function Long(low,high){_classCallCheck(this,Long);this.low_=low|0;this.high_=high|0;}_createClass(Long,[{key:'toInt',value:function toInt(){return this.low_;}},{key:'toNumber',value:function toNumber(){return this.high_*Long.TWO_PWR_32_DBL_+this.getLowBitsUnsigned();}},{key:'toString',value:function toString(opt_radix){var radix=opt_radix||10;if(radix<2||36=0?this.low_:Long.TWO_PWR_32_DBL_+this.low_;}},{key:'getNumBitsAbs',value:function getNumBitsAbs(){if(this.isNegative()){if(this.equals(Long.MIN_VALUE)){return 64;}else {return this.negate().getNumBitsAbs();}}else {var val=this.high_!=0?this.high_:this.low_;for(var bit=31;bit>0;bit--){if((val&1<0;}},{key:'greaterThanOrEqual',value:function greaterThanOrEqual(other){return this.compare(other)>=0;}},{key:'compare',value:function compare(other){if(this.equals(other)){return 0;}var thisNeg=this.isNegative();var otherNeg=other.isNegative();if(thisNeg&&!otherNeg){return -1;}if(!thisNeg&&otherNeg){return 1;}if(this.subtract(other).isNegative()){return -1;}else {return 1;}}},{key:'negate',value:function negate(){if(this.equals(Long.MIN_VALUE)){return Long.MIN_VALUE;}else {return this.not().add(Long.ONE);}}},{key:'add',value:function add(other){var a48=this.high_>>>16;var a32=this.high_&0xFFFF;var a16=this.low_>>>16;var a00=this.low_&0xFFFF;var b48=other.high_>>>16;var b32=other.high_&0xFFFF;var b16=other.low_>>>16;var b00=other.low_&0xFFFF;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=0xFFFF;c16+=a16+b16;c32+=c16>>>16;c16&=0xFFFF;c32+=a32+b32;c48+=c32>>>16;c32&=0xFFFF;c48+=a48+b48;c48&=0xFFFF;return Long.fromBits(c16<<16|c00,c48<<16|c32);}},{key:'subtract',value:function subtract(other){return this.add(other.negate());}},{key:'multiply',value:function multiply(other){if(this.isZero()){return Long.ZERO;}else if(other.isZero()){return Long.ZERO;}if(this.equals(Long.MIN_VALUE)){return other.isOdd()?Long.MIN_VALUE:Long.ZERO;}else if(other.equals(Long.MIN_VALUE)){return this.isOdd()?Long.MIN_VALUE:Long.ZERO;}if(this.isNegative()){if(other.isNegative()){return this.negate().multiply(other.negate());}else {return this.negate().multiply(other).negate();}}else if(other.isNegative()){return this.multiply(other.negate()).negate();}if(this.lessThan(Long.TWO_PWR_24_)&&other.lessThan(Long.TWO_PWR_24_)){return Long.fromNumber(this.toNumber()*other.toNumber());}var a48=this.high_>>>16;var a32=this.high_&0xFFFF;var a16=this.low_>>>16;var a00=this.low_&0xFFFF;var b48=other.high_>>>16;var b32=other.high_&0xFFFF;var b16=other.low_>>>16;var b00=other.low_&0xFFFF;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=0xFFFF;c16+=a16*b00;c32+=c16>>>16;c16&=0xFFFF;c16+=a00*b16;c32+=c16>>>16;c16&=0xFFFF;c32+=a32*b00;c48+=c32>>>16;c32&=0xFFFF;c32+=a16*b16;c48+=c32>>>16;c32&=0xFFFF;c32+=a00*b32;c48+=c32>>>16;c32&=0xFFFF;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=0xFFFF;return Long.fromBits(c16<<16|c00,c48<<16|c32);}},{key:'div',value:function div(other){if(other.isZero()){throw Error('division by zero');}else if(this.isZero()){return Long.ZERO;}if(this.equals(Long.MIN_VALUE)){if(other.equals(Long.ONE)||other.equals(Long.NEG_ONE)){return Long.MIN_VALUE;}else if(other.equals(Long.MIN_VALUE)){return Long.ONE;}else {var halfThis=this.shiftRight(1);var approx=halfThis.div(other).shiftLeft(1);if(approx.equals(Long.ZERO)){return other.isNegative()?Long.ONE:Long.NEG_ONE;}else {var _rem2=this.subtract(other.multiply(approx));var result=approx.add(_rem2.div(other));return result;}}}else if(other.equals(Long.MIN_VALUE)){return Long.ZERO;}if(this.isNegative()){if(other.isNegative()){return this.negate().div(other.negate());}else {return this.negate().div(other).negate();}}else if(other.isNegative()){return this.div(other.negate()).negate();}var res=Long.ZERO;var rem=this;while(rem.greaterThanOrEqual(other)){var _approx=Math.max(1,Math.floor(rem.toNumber()/other.toNumber()));var log2=Math.ceil(Math.log(_approx)/Math.LN2);var delta=log2<=48?1:Math.pow(2,log2-48);var approxRes=Long.fromNumber(_approx);var approxRem=approxRes.multiply(other);while(approxRem.isNegative()||approxRem.greaterThan(rem)){_approx-=delta;approxRes=Long.fromNumber(_approx);approxRem=approxRes.multiply(other);}if(approxRes.isZero()){approxRes=Long.ONE;}res=res.add(approxRes);rem=rem.subtract(approxRem);}return res;}},{key:'modulo',value:function modulo(other){return this.subtract(this.div(other).multiply(other));}},{key:'not',value:function not(){return Long.fromBits(~this.low_,~this.high_);}},{key:'and',value:function and(other){return Long.fromBits(this.low_&other.low_,this.high_&other.high_);}},{key:'or',value:function or(other){return Long.fromBits(this.low_|other.low_,this.high_|other.high_);}},{key:'xor',value:function xor(other){return Long.fromBits(this.low_^other.low_,this.high_^other.high_);}},{key:'shiftLeft',value:function shiftLeft(numBits){numBits&=63;if(numBits==0){return this;}else {var low=this.low_;if(numBits<32){var high=this.high_;return Long.fromBits(low<>>32-numBits);}else {return Long.fromBits(0,low<>>numBits|high<<32-numBits,high>>numBits);}else {return Long.fromBits(high>>numBits-32,high>=0?0:-1);}}}},{key:'shiftRightUnsigned',value:function shiftRightUnsigned(numBits){numBits&=63;if(numBits==0){return this;}else {var high=this.high_;if(numBits<32){var low=this.low_;return Long.fromBits(low>>>numBits|high<<32-numBits,high>>>numBits);}else if(numBits==32){return Long.fromBits(high,0);}else {return Long.fromBits(high>>>numBits-32,0);}}}}],[{key:'fromInt',value:function fromInt(value){if(-128<=value&&value<128){var cachedObj=Long.IntCache_[value];if(cachedObj){return cachedObj;}}var obj=new Long(value|0,value<0?-1:0);if(-128<=value&&value<128){Long.IntCache_[value]=obj;}return obj;}},{key:'fromNumber',value:function fromNumber(value){if(isNaN(value)||!isFinite(value)){return Long.ZERO;}else if(value<=-Long.TWO_PWR_63_DBL_){return Long.MIN_VALUE;}else if(value+1>=Long.TWO_PWR_63_DBL_){return Long.MAX_VALUE;}else if(value<0){return Long.fromNumber(-value).negate();}else {return new Long(value%Long.TWO_PWR_32_DBL_|0,value/Long.TWO_PWR_32_DBL_|0);}}},{key:'fromBits',value:function fromBits(lowBits,highBits){return new Long(lowBits,highBits);}},{key:'fromString',value:function fromString(str,opt_radix){if(str.length==0){throw Error('number format error: empty string');}var radix=opt_radix||10;if(radix<2||36=0){throw Error('number format error: interior "-" character: '+str);}var radixToPower=Long.fromNumber(Math.pow(radix,8));var result=Long.ZERO;for(var i=0;idurationMillis){this.mStartOffset=durationMillis;this.mDuration=0;this.mRepeatCount=0;return;}var dur=this.mDuration+this.mStartOffset;if(dur>durationMillis){this.mDuration=durationMillis-this.mStartOffset;dur=durationMillis;}if(this.mDuration<=0){this.mDuration=0;this.mRepeatCount=0;return;}if(this.mRepeatCount<0||this.mRepeatCount>durationMillis||dur*this.mRepeatCount>durationMillis){this.mRepeatCount=Math.floor(durationMillis/dur)-1;if(this.mRepeatCount<0){this.mRepeatCount=0;}}}},{key:'scaleCurrentDuration',value:function scaleCurrentDuration(scale){this.mDuration=Math.floor(this.mDuration*scale);this.mStartOffset=Math.floor(this.mStartOffset*scale);}},{key:'setStartTime',value:function setStartTime(startTimeMillis){this.mStartTime=startTimeMillis;this.mStarted=this.mEnded=false;this.mCycleFlip=false;this.mRepeated=0;this.mMore=true;}},{key:'start',value:function start(){this.setStartTime(-1);}},{key:'startNow',value:function startNow(){this.setStartTime(AnimationUtils.currentAnimationTimeMillis());}},{key:'setRepeatMode',value:function setRepeatMode(repeatMode){this.mRepeatMode=repeatMode;}},{key:'setRepeatCount',value:function setRepeatCount(repeatCount){if(repeatCount<0){repeatCount=Animation.INFINITE;}this.mRepeatCount=repeatCount;}},{key:'isFillEnabled',value:function isFillEnabled(){return this.mFillEnabled;}},{key:'setFillEnabled',value:function setFillEnabled(fillEnabled){this.mFillEnabled=fillEnabled;}},{key:'setFillBefore',value:function setFillBefore(fillBefore){this.mFillBefore=fillBefore;}},{key:'setFillAfter',value:function setFillAfter(fillAfter){this.mFillAfter=fillAfter;}},{key:'setZAdjustment',value:function setZAdjustment(zAdjustment){this.mZAdjustment=zAdjustment;}},{key:'setBackgroundColor',value:function setBackgroundColor(bg){this.mBackgroundColor=bg;}},{key:'getScaleFactor',value:function getScaleFactor(){return this.mScaleFactor;}},{key:'setDetachWallpaper',value:function setDetachWallpaper(detachWallpaper){this.mDetachWallpaper=detachWallpaper;}},{key:'getInterpolator',value:function getInterpolator(){return this.mInterpolator;}},{key:'getStartTime',value:function getStartTime(){return this.mStartTime;}},{key:'getDuration',value:function getDuration(){return this.mDuration;}},{key:'getStartOffset',value:function getStartOffset(){return this.mStartOffset;}},{key:'getRepeatMode',value:function getRepeatMode(){return this.mRepeatMode;}},{key:'getRepeatCount',value:function getRepeatCount(){return this.mRepeatCount;}},{key:'getFillBefore',value:function getFillBefore(){return this.mFillBefore;}},{key:'getFillAfter',value:function getFillAfter(){return this.mFillAfter;}},{key:'getZAdjustment',value:function getZAdjustment(){return this.mZAdjustment;}},{key:'getBackgroundColor',value:function getBackgroundColor(){return this.mBackgroundColor;}},{key:'getDetachWallpaper',value:function getDetachWallpaper(){return this.mDetachWallpaper;}},{key:'willChangeTransformationMatrix',value:function willChangeTransformationMatrix(){return true;}},{key:'willChangeBounds',value:function willChangeBounds(){return true;}},{key:'setAnimationListener',value:function setAnimationListener(listener){this.mListener=listener;}},{key:'ensureInterpolator',value:function ensureInterpolator(){if(this.mInterpolator==null){this.mInterpolator=new AccelerateDecelerateInterpolator();}}},{key:'computeDurationHint',value:function computeDurationHint(){return (this.getStartOffset()+this.getDuration())*(this.getRepeatCount()+1);}},{key:'getTransformation',value:function getTransformation(currentTime,outTransformation,scale){if(scale!=null)this.mScaleFactor=scale;if(this.mStartTime==-1){this.mStartTime=currentTime;}var startOffset=this.getStartOffset();var duration=this.mDuration;var normalizedTime=undefined;if(duration!=0){normalizedTime=(currentTime-(this.mStartTime+startOffset))/duration;}else {normalizedTime=currentTime=1.0;this.mMore=!expired;if(!this.mFillEnabled)normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);if((normalizedTime>=0.0||this.mFillBefore)&&(normalizedTime<=1.0||this.mFillAfter)){if(!this.mStarted){this.fireAnimationStart();this.mStarted=true;}if(this.mFillEnabled)normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);if(this.mCycleFlip){normalizedTime=1.0-normalizedTime;}var interpolatedTime=this.mInterpolator.getInterpolation(normalizedTime);this.applyTransformation(interpolatedTime,outTransformation);}if(expired){if(this.mRepeatCount==this.mRepeated){if(!this.mEnded){this.mEnded=true;this.fireAnimationEnd();}}else {if(this.mRepeatCount>0){this.mRepeated++;}if(this.mRepeatMode==Animation.REVERSE){this.mCycleFlip=!this.mCycleFlip;}this.mStartTime=-1;this.mMore=true;this.fireAnimationRepeat();}}if(!this.mMore&&this.mOneMoreTime){this.mOneMoreTime=false;return true;}return this.mMore;}},{key:'fireAnimationStart',value:function fireAnimationStart(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationStart(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnStart);}}},{key:'fireAnimationRepeat',value:function fireAnimationRepeat(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationRepeat(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnRepeat);}}},{key:'fireAnimationEnd',value:function fireAnimationEnd(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationEnd(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnEnd);}}},{key:'hasStarted',value:function hasStarted(){return this.mStarted;}},{key:'hasEnded',value:function hasEnded(){return this.mEnded;}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){}},{key:'resolveSize',value:function resolveSize(type,value,size,parentSize){switch(type){case Animation.ABSOLUTE:return value;case Animation.RELATIVE_TO_SELF:return size*value;case Animation.RELATIVE_TO_PARENT:return parentSize*value;default:return value;}}},{key:'getInvalidateRegion',value:function getInvalidateRegion(left,top,right,bottom,invalidate,transformation){var tempRegion=this.mRegion;var previousRegion=this.mPreviousRegion;invalidate.set(left,top,right,bottom);transformation.getMatrix().mapRect(invalidate);invalidate.inset(-1.0,-1.0);tempRegion.set(invalidate);invalidate.union(previousRegion);previousRegion.set(tempRegion);var tempTransformation=this.mTransformation;var previousTransformation=this.mPreviousTransformation;tempTransformation.set(transformation);transformation.set(previousTransformation);previousTransformation.set(tempTransformation);}},{key:'initializeInvalidateRegion',value:function initializeInvalidateRegion(left,top,right,bottom){var region=this.mPreviousRegion;region.set(left,top,right,bottom);region.inset(-1.0,-1.0);if(this.mFillBefore){var previousTransformation=this.mPreviousTransformation;this.applyTransformation(this.mInterpolator.getInterpolation(0.0),previousTransformation);}}},{key:'hasAlpha',value:function hasAlpha(){return false;}}]);return Animation;}();Animation.INFINITE=-1;Animation.RESTART=1;Animation.REVERSE=2;Animation.START_ON_FIRST_FRAME=-1;Animation.ABSOLUTE=0;Animation.RELATIVE_TO_SELF=1;Animation.RELATIVE_TO_PARENT=2;Animation.ZORDER_NORMAL=0;Animation.ZORDER_TOP=1;Animation.ZORDER_BOTTOM=-1;Animation.USE_CLOSEGUARD=false;animation_1.Animation=Animation;(function(Animation){var Description=function(){function Description(){_classCallCheck(this,Description);this.type=0;this.value=0;}_createClass(Description,null,[{key:'parseValue',value:function parseValue(value){var d=new Description();if(value==null){d.type=Animation.ABSOLUTE;d.value=0;}else {if(value.endsWith('%p')){d.type=Animation.RELATIVE_TO_PARENT;d.value=Number.parseFloat(value.substring(0,value.length-2));}else if(value.endsWith('%')){d.type=Animation.RELATIVE_TO_SELF;d.value=Number.parseFloat(value.substring(0,value.length-1));}else {d.type=Animation.ABSOLUTE;d.value=TypedValue.complexToDimensionPixelSize(value);}}d.type=Animation.ABSOLUTE;d.value=0.0;return d;}}]);return Description;}();Animation.Description=Description;})(Animation=animation_1.Animation||(animation_1.Animation={}));})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var R;(function(R){var Gravity=android.view.Gravity;var Color=android.graphics.Color;var ColorDrawable=android.graphics.drawable.ColorDrawable;var StateListDrawable=android.graphics.drawable.StateListDrawable;var attr=function(){function attr(){_classCallCheck(this,attr);}_createClass(attr,null,[{key:'viewStyle',get:function get(){return attr._viewStyle;}},{key:'textViewStyle',get:function get(){return {textSize:'14sp',layerType:'software',textColor:R.color.textView_textColor,textColorHint:0xff808080};}},{key:'buttonStyle',get:function get(){return Object.assign(attr.textViewStyle,{background:R.drawable.btn_default,focusable:true,clickable:true,minHeight:'48dp',minWidth:'64dp',textSize:'18sp',gravity:Gravity.CENTER});}},{key:'editTextStyle',get:function get(){return Object.assign(attr.textViewStyle,{background:R.drawable.editbox_background,focusable:true,focusableInTouchMode:true,clickable:true,textSize:'18sp',gravity:Gravity.CENTER_VERTICAL});}},{key:'imageButtonStyle',get:function get(){return {background:R.drawable.btn_default,focusable:true,clickable:true,gravity:Gravity.CENTER};}},{key:'checkboxStyle',get:function get(){return Object.assign(this.buttonStyle,{background:null,button:R.drawable.btn_check});}},{key:'radiobuttonStyle',get:function get(){return Object.assign(this.buttonStyle,{background:null,button:R.drawable.btn_radio});}},{key:'checkedTextViewStyle',get:function get(){return {textAlignment:'viewStart'};}},{key:'progressBarStyle',get:function get(){return {indeterminateOnly:true,indeterminateDrawable:R.drawable.progress_medium_holo,indeterminateBehavior:'repeat',indeterminateDuration:3500,minWidth:'48dp',maxWidth:'48dp',minHeight:'48dp',maxHeight:'48dp',mirrorForRtl:false};}},{key:'progressBarStyleHorizontal',get:function get(){return {indeterminateOnly:false,progressDrawable:R.drawable.progress_horizontal_holo,indeterminateDrawable:R.drawable.progress_indeterminate_horizontal_holo,indeterminateBehavior:'repeat',indeterminateDuration:3500,minHeight:'20dp',maxHeight:'20dp',mirrorForRtl:true};}},{key:'progressBarStyleSmall',get:function get(){return Object.assign(this.progressBarStyle,{indeterminateDrawable:R.drawable.progress_small_holo,minWidth:'16dp',maxWidth:'16dp',minHeight:'16dp',maxHeight:'16dp'});}},{key:'progressBarStyleLarge',get:function get(){return Object.assign(this.progressBarStyle,{indeterminateDrawable:R.drawable.progress_large_holo,minWidth:'76dp',maxWidth:'76dp',minHeight:'76dp',maxHeight:'76dp'});}},{key:'seekBarStyle',get:function get(){return {indeterminateOnly:false,progressDrawable:R.drawable.scrubber_progress_horizontal_holo_light,indeterminateDrawable:R.drawable.scrubber_progress_horizontal_holo_light,minHeight:'13dp',maxHeight:'13dp',thumb:R.drawable.scrubber_control_selector_holo,thumbOffset:'16dp',focusable:true,paddingLeft:'16dp',paddingRight:'16dp',mirrorForRtl:true};}},{key:'ratingBarStyle',get:function get(){return {indeterminateOnly:false,progressDrawable:R.drawable.ratingbar_full_holo_light,indeterminateDrawable:R.drawable.ratingbar_full_holo_light,minHeight:'48dip',maxHeight:'48dip',numStars:'5',stepSize:'0.5',thumb:null,mirrorForRtl:true};}},{key:'ratingBarStyleIndicator',get:function get(){return Object.assign(this.ratingBarStyle,{indeterminateOnly:false,progressDrawable:R.drawable.ratingbar_holo_light,indeterminateDrawable:R.drawable.ratingbar_holo_light,minHeight:'35dip',maxHeight:'35dip',thumb:null,isIndicator:true});}},{key:'ratingBarStyleSmall',get:function get(){return Object.assign(this.ratingBarStyle,{indeterminateOnly:false,progressDrawable:R.drawable.ratingbar_small_holo_light,indeterminateDrawable:R.drawable.ratingbar_small_holo_light,minHeight:'16dip',maxHeight:'16dip',thumb:null,isIndicator:true});}},{key:'gridViewStyle',get:function get(){return {listSelector:android.R.drawable.list_selector_background,numColumns:1};}},{key:'listViewStyle',get:function get(){return {divider:android.R.drawable.list_divider,listSelector:android.R.drawable.list_selector_background,dividerHeight:1};}},{key:'expandableListViewStyle',get:function get(){return Object.assign(this.listViewStyle,{childDivider:android.R.drawable.list_divider});}},{key:'numberPickerStyle',get:function get(){return {orientation:'vertical',solidColor:'transparent',selectionDivider:new ColorDrawable(0xcc33b5e5),selectionDividerHeight:'2dp',selectionDividersDistance:'48dp',internalMinWidth:'64dp',internalMaxHeight:'180dp',virtualButtonPressedDrawable:function(){var stateList=new StateListDrawable();stateList.addState([android.view.View.VIEW_STATE_PRESSED],new ColorDrawable(0x44888888));stateList.addState([android.view.View.VIEW_STATE_PRESSED],new ColorDrawable(0x44888888));stateList.addState([],new ColorDrawable(Color.TRANSPARENT));return stateList;}()};}},{key:'popupWindowStyle',get:function get(){return {popupBackground:R.image.dropdown_background_dark,popupEnterAnimation:R.anim.grow_fade_in_center,popupExitAnimation:R.anim.shrink_fade_out_center};}},{key:'listPopupWindowStyle',get:function get(){return {popupBackground:R.image.menu_panel_holo_light,popupEnterAnimation:R.anim.grow_fade_in_center,popupExitAnimation:R.anim.shrink_fade_out_center};}},{key:'popupMenuStyle',get:function get(){return {popupBackground:R.image.menu_panel_holo_dark};}},{key:'dropDownListViewStyle',get:function get(){return this.listViewStyle;}},{key:'spinnerStyle',get:function get(){return {clickable:true,spinnerMode:'dropdown',gravity:Gravity.START|Gravity.CENTER_VERTICAL,disableChildrenWhenDisabled:true,background:R.drawable.btn_default,popupBackground:R.image.menu_panel_holo_light,dropDownVerticalOffset:'0dp',dropDownHorizontalOffset:'0dp',dropDownWidth:-2};}},{key:'actionBarStyle',get:function get(){return {background:new ColorDrawable(0xff333333)};}}]);return attr;}();attr._viewStyle={};R.attr=attr;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var view;(function(view_2){var LayoutDirection=android.util.LayoutDirection;var ColorDrawable=android.graphics.drawable.ColorDrawable;var ScrollBarDrawable=android.graphics.drawable.ScrollBarDrawable;var InsetDrawable=android.graphics.drawable.InsetDrawable;var ShadowDrawable=android.graphics.drawable.ShadowDrawable;var RoundRectDrawable=android.graphics.drawable.RoundRectDrawable;var PixelFormat=android.graphics.PixelFormat;var Matrix=android.graphics.Matrix;var Paint=android.graphics.Paint;var StringBuilder=java.lang.StringBuilder;var JavaObject=java.lang.JavaObject;var System=java.lang.System;var SystemClock=android.os.SystemClock;var Log=android.util.Log;var Rect=android.graphics.Rect;var RectF=android.graphics.RectF;var Point=android.graphics.Point;var Canvas=android.graphics.Canvas;var CopyOnWriteArrayList=java.lang.util.concurrent.CopyOnWriteArrayList;var ArrayList=java.util.ArrayList;var Resources=android.content.res.Resources;var Pools=android.util.Pools;var LinearInterpolator=android.view.animation.LinearInterpolator;var AnimationUtils=android.view.animation.AnimationUtils;var StateAttrList=androidui.attr.StateAttrList;var AttrBinder=androidui.attr.AttrBinder;var KeyEvent=android.view.KeyEvent;var Animation=view_2.animation.Animation;var Transformation=view_2.animation.Transformation;var View=function(_JavaObject){_inherits(View,_JavaObject);function View(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.viewStyle:arguments[2];_classCallCheck(this,View);var _this38=_possibleConstructorReturn(this,Object.getPrototypeOf(View).call(this));_this38.mPrivateFlags=0;_this38.mPrivateFlags2=0;_this38.mPrivateFlags3=0;_this38.mCurrentAnimation=null;_this38.mOldWidthMeasureSpec=Number.MIN_SAFE_INTEGER;_this38.mOldHeightMeasureSpec=Number.MIN_SAFE_INTEGER;_this38.mMeasuredWidth=0;_this38.mMeasuredHeight=0;_this38.mBackgroundSizeChanged=false;_this38.mBackgroundWidth=0;_this38.mBackgroundHeight=0;_this38.mHasPerformedLongPress=false;_this38.mMinWidth=0;_this38.mMinHeight=0;_this38.mDrawingCacheBackgroundColor=0;_this38.mTouchSlop=0;_this38.mVerticalScrollFactor=0;_this38.mOverScrollMode=0;_this38.mViewFlags=0;_this38.mLayerType=View.LAYER_TYPE_NONE;_this38.mCachingFailed=false;_this38.mWindowAttachCount=0;_this38.mTransientStateCount=0;_this38.mLastIsOpaque=false;_this38._mLeft=0;_this38._mRight=0;_this38._mTop=0;_this38._mBottom=0;_this38._mScrollX=0;_this38._mScrollY=0;_this38.mPaddingLeft=0;_this38.mPaddingRight=0;_this38.mPaddingTop=0;_this38.mPaddingBottom=0;_this38.mCornerRadiusTopLeft=0;_this38.mCornerRadiusTopRight=0;_this38.mCornerRadiusBottomRight=0;_this38.mCornerRadiusBottomLeft=0;_this38._attrBinder=new AttrBinder(_this38);_this38.mContext=context;_this38.mTouchSlop=view_2.ViewConfiguration.get().getScaledTouchSlop();_this38.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);_this38.initBindAttr();_this38.initBindElement(bindElement);if(defStyle)_this38.applyDefaultAttributes(defStyle);return _this38;}_createClass(View,[{key:'initBindAttr',value:function initBindAttr(){if(!View.ViewClassAttrBinder){View.ViewClassAttrBinder=new AttrBinder.ClassBinderMap();View.ViewClassAttrBinder.set('background',{setter:function setter(v,value){v.setBackground(v._attrBinder.parseDrawable(value));},getter:function getter(v){return v.mBackground;}}).set('padding',{setter:function setter(v,value){if(value==null)value=0;var _v$_attrBinder$parseP=v._attrBinder.parsePaddingMarginLTRB(value);var _v$_attrBinder$parseP2=_slicedToArray(_v$_attrBinder$parseP,4);var left=_v$_attrBinder$parseP2[0];var top=_v$_attrBinder$parseP2[1];var right=_v$_attrBinder$parseP2[2];var bottom=_v$_attrBinder$parseP2[3];v._setPaddingWithUnit(left,top,right,bottom);},getter:function getter(v){return v.mPaddingTop+' '+v.mPaddingRight+' '+v.mPaddingBottom+' '+v.mPaddingLeft;}}).set('paddingLeft',{setter:function setter(v,value){if(value==null)value=0;v._setPaddingWithUnit(value,v.mPaddingTop,v.mPaddingRight,v.mPaddingBottom);},getter:function getter(v){return v.mPaddingLeft;}}).set('paddingTop',{setter:function setter(v,value){if(value==null)value=0;v._setPaddingWithUnit(v.mPaddingLeft,value,v.mPaddingRight,v.mPaddingBottom);},getter:function getter(v){return v.mPaddingTop;}}).set('paddingRight',{setter:function setter(v,value){if(value==null)value=0;v._setPaddingWithUnit(v.mPaddingLeft,v.mPaddingTop,value,v.mPaddingBottom);},getter:function getter(v){return v.mPaddingRight;}}).set('paddingBottom',{setter:function setter(v,value){if(value==null)value=0;v._setPaddingWithUnit(v.mPaddingLeft,v.mPaddingTop,v.mPaddingRight,value);},getter:function getter(v){return v.mPaddingBottom;}}).set('scrollX',{setter:function setter(v,value){value=v._attrBinder.parseNumberPixelOffset(value);if(Number.isInteger(value))v.scrollTo(value,v.mScrollY);},getter:function getter(v){v.getScrollX();}}).set('scrollY',{setter:function setter(v,value){value=v._attrBinder.parseNumberPixelOffset(value);if(Number.isInteger(value))v.scrollTo(v.mScrollX,value);},getter:function getter(v){return v.getScrollY();}}).set('alpha',{setter:function setter(v,value){v.setAlpha(v._attrBinder.parseFloat(value,v.getAlpha()));},getter:function getter(v){return v.getAlpha();}}).set('transformPivotX',{setter:function setter(v,value){v.setPivotX(v._attrBinder.parseNumberPixelOffset(value,v.getPivotX()));},getter:function getter(v){return v.getPivotX();}}).set('transformPivotY',{setter:function setter(v,value){v.setPivotY(v._attrBinder.parseNumberPixelOffset(value,v.getPivotY()));},getter:function getter(v){return v.getPivotY();}}).set('translationX',{setter:function setter(v,value){v.setTranslationX(v._attrBinder.parseNumberPixelOffset(value,v.getTranslationX()));},getter:function getter(v){return v.getTranslationX();}}).set('translationY',{setter:function setter(v,value){v.setTranslationY(v._attrBinder.parseNumberPixelOffset(value,v.getTranslationY()));},getter:function getter(v){return v.getTranslationY();}}).set('rotation',{setter:function setter(v,value){v.setRotation(v._attrBinder.parseFloat(value,v.getRotation()));},getter:function getter(v){return v.getRotation();}}).set('scaleX',{setter:function setter(v,value){v.setScaleX(v._attrBinder.parseFloat(value,v.getScaleX()));},getter:function getter(v){return v.getScaleX();}}).set('scaleY',{setter:function setter(v,value){v.setScaleY(v._attrBinder.parseFloat(value,v.getScaleY()));},getter:function getter(v){return v.getScaleY();}}).set('tag',{setter:function setter(v,value){v.setTag(value);},getter:function getter(v){return v.getTag();}}).set('id',{setter:function setter(v,value){v.setId(value);},getter:function getter(v){return v.getId();}}).set('focusable',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}},getter:function getter(v){return v.isFocusable();}}).set('focusableInTouchMode',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE,View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE_MASK);}},getter:function getter(v){return v.isFocusableInTouchMode();}}).set('clickable',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setFlags(View.CLICKABLE,View.CLICKABLE);}},getter:function getter(v){return v.isClickable();}}).set('longClickable',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setFlags(View.LONG_CLICKABLE,View.LONG_CLICKABLE);}},getter:function getter(v){return v.isLongClickable();}}).set('duplicateParentState',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setFlags(View.DUPLICATE_PARENT_STATE,View.DUPLICATE_PARENT_STATE);}},getter:function getter(v){return (v.mViewFlags&View.DUPLICATE_PARENT_STATE)==View.DUPLICATE_PARENT_STATE;}}).set('visibility',{setter:function setter(v,value){if(value==='gone')v.setVisibility(View.GONE);else if(value==='invisible')v.setVisibility(View.INVISIBLE);else if(value==='visible')v.setVisibility(View.VISIBLE);},getter:function getter(v){return v.getVisibility();}}).set('scrollbars',{setter:function setter(v,value){if(value==='none'){v.setHorizontalScrollBarEnabled(false);v.setVerticalScrollBarEnabled(false);}else if(value==='horizontal'){v.setHorizontalScrollBarEnabled(true);v.setVerticalScrollBarEnabled(false);}else if(value==='vertical'){v.setHorizontalScrollBarEnabled(false);v.setVerticalScrollBarEnabled(true);}}}).set('isScrollContainer',{setter:function setter(v,value){if(v._attrBinder.parseBoolean(value,false)){v.setScrollContainer(true);}},getter:function getter(v){return v.isScrollContainer();}}).set('minWidth',{setter:function setter(v,value){v.setMinimumWidth(v._attrBinder.parseNumberPixelSize(value,0));},getter:function getter(v){return v.mMinWidth;}}).set('minHeight',{setter:function setter(v,value){v.setMinimumHeight(v._attrBinder.parseNumberPixelSize(value,0));},getter:function getter(v){return v.mMinHeight;}}).set('onClick',{setter:function setter(v,value){if(value&&typeof value==='string'){v.setOnClickListener(function(view){try{var activityClickMethod=view.getContext()[value];if(typeof activityClickMethod==='function'){activityClickMethod.call(view.getContext(),view);return;}}catch(e){}try{new Function(value).call(view);}catch(e){}});}v.bindElement.removeAttribute('onclick');}}).set('overScrollMode',{setter:function setter(v,value){var scrollMode=View[('OVER_SCROLL_'+value).toUpperCase()];if(scrollMode===undefined)scrollMode=View.OVER_SCROLL_IF_CONTENT_SCROLLS;v.setOverScrollMode(scrollMode);}}).set('layerType',{setter:function setter(v,value){if((value+'').toLowerCase()=='software'){v.setLayerType(View.LAYER_TYPE_SOFTWARE);}else {v.setLayerType(View.LAYER_TYPE_NONE);}}}).set('cornerRadius',{setter:function setter(v,value){var _v$_attrBinder$parseP3=v._attrBinder.parsePaddingMarginLTRB(value);var _v$_attrBinder$parseP4=_slicedToArray(_v$_attrBinder$parseP3,4);var leftTop=_v$_attrBinder$parseP4[0];var topRight=_v$_attrBinder$parseP4[1];var rightBottom=_v$_attrBinder$parseP4[2];var bottomLeft=_v$_attrBinder$parseP4[3];v.setCornerRadius(v._attrBinder.parseNumberPixelSize(leftTop,0),v._attrBinder.parseNumberPixelSize(topRight,0),v._attrBinder.parseNumberPixelSize(rightBottom,0),v._attrBinder.parseNumberPixelSize(bottomLeft,0));},getter:function getter(v){return v.mCornerRadiusTopLeft+' '+v.mCornerRadiusTopRight+' '+v.mCornerRadiusBottomRight+' '+v.mCornerRadiusBottomLeft;}}).set('cornerRadiusTopLeft',{setter:function setter(v,value){v.setCornerRadiusTopLeft(v._attrBinder.parseNumberPixelSize(value,v.mCornerRadiusTopLeft));},getter:function getter(v){return v.mCornerRadiusTopLeft;}}).set('cornerRadiusTopRight',{setter:function setter(v,value){v.setCornerRadiusTopRight(v._attrBinder.parseNumberPixelSize(value,v.mCornerRadiusTopRight));},getter:function getter(v){return v.mCornerRadiusTopRight;}}).set('cornerRadiusBottomLeft',{setter:function setter(v,value){v.setCornerRadiusBottomLeft(v._attrBinder.parseNumberPixelSize(value,v.mCornerRadiusBottomLeft));},getter:function getter(v){return v.mCornerRadiusBottomLeft;}}).set('cornerRadiusBottomRight',{setter:function setter(v,value){v.setCornerRadiusBottomRight(v._attrBinder.parseNumberPixelSize(value,v.mCornerRadiusBottomRight));},getter:function getter(v){return v.mCornerRadiusBottomRight;}}).set('viewShadowColor',{setter:function setter(v,value){if(!v.mShadowPaint)v.mShadowPaint=new Paint();v.setShadowView(v.mShadowPaint.shadowRadius,v.mShadowPaint.shadowDx,v.mShadowPaint.shadowDy,v._attrBinder.parseColor(value,v.mShadowPaint.shadowColor));},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowColor;}}).set('viewShadowDx',{setter:function setter(v,value){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var dx=v._attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowDx);v.setShadowView(v.mShadowPaint.shadowRadius,dx,v.mShadowPaint.shadowDy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowDx;}}).set('viewShadowDy',{setter:function setter(v,value){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var dy=v._attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowDy);v.setShadowView(v.mShadowPaint.shadowRadius,v.mShadowPaint.shadowDx,dy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowDy;}}).set('viewShadowRadius',{setter:function setter(v,value){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var radius=v._attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowRadius);v.setShadowView(radius,v.mShadowPaint.shadowDx,v.mShadowPaint.shadowDy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowRadius;}});View.ViewClassAttrBinder.set('paddingStart',View.ViewClassAttrBinder.get('paddingLeft'));View.ViewClassAttrBinder.set('paddingEnd',View.ViewClassAttrBinder.get('paddingRight'));}this._attrBinder.addClassAttrBind(View.ViewClassAttrBinder);}},{key:'getContext',value:function getContext(){if(this.mContext==null&&this.mAttachInfo!=null){return this.mAttachInfo.mRootView.mContext;}return this.mContext;}},{key:'getWidth',value:function getWidth(){return this.mRight-this.mLeft;}},{key:'getHeight',value:function getHeight(){return this.mBottom-this.mTop;}},{key:'getPaddingLeft',value:function getPaddingLeft(){return this.mPaddingLeft;}},{key:'getPaddingTop',value:function getPaddingTop(){return this.mPaddingTop;}},{key:'getPaddingRight',value:function getPaddingRight(){return this.mPaddingRight;}},{key:'getPaddingBottom',value:function getPaddingBottom(){return this.mPaddingBottom;}},{key:'setPaddingLeft',value:function setPaddingLeft(left){if(this.mPaddingLeft!=left){this.mPaddingLeft=left;this.requestLayout();}}},{key:'setPaddingTop',value:function setPaddingTop(top){if(this.mPaddingTop!=top){this.mPaddingTop=top;this.requestLayout();}}},{key:'setPaddingRight',value:function setPaddingRight(right){if(this.mPaddingRight!=right){this.mPaddingRight=right;this.requestLayout();}}},{key:'setPaddingBottom',value:function setPaddingBottom(bottom){if(this.mPaddingBottom!=bottom){this.mPaddingBottom=bottom;this.requestLayout();}}},{key:'setPadding',value:function setPadding(left,top,right,bottom){var changed=false;if(this.mPaddingLeft!=left){changed=true;this.mPaddingLeft=left;}if(this.mPaddingTop!=top){changed=true;this.mPaddingTop=top;}if(this.mPaddingRight!=right){changed=true;this.mPaddingRight=right;}if(this.mPaddingBottom!=bottom){changed=true;this.mPaddingBottom=bottom;}if(changed){this.requestLayout();}}},{key:'_setPaddingWithUnit',value:function _setPaddingWithUnit(left,top,right,bottom){var view=this;var width=view.getWidth();var height=view.getHeight();var a=this._attrBinder;var padLeft=a.parseDimension(left,0,width);var padTop=a.parseDimension(top,0,height);var padRight=a.parseDimension(right,0,width);var padBottom=a.parseDimension(bottom,0,height);view.setPadding(padLeft,padTop,padRight,padBottom);var unit=android.util.TypedValue.COMPLEX_UNIT_FRACTION;if(typeof left==='string'&&left.endsWith(unit)||typeof top==='string'&&top.endsWith(unit)||typeof right==='string'&&right.endsWith(unit)||typeof bottom==='string'&&bottom.endsWith(unit)){view.post({run:function run(){var width=view.getWidth();var height=view.getHeight();var padLeftN=a.parseDimension(left,0,width);var padTopN=a.parseDimension(top,0,height);var padRightN=a.parseDimension(right,0,width);var padBottomN=a.parseDimension(bottom,0,height);view.setPadding(padLeftN,padTopN,padRightN,padBottomN);}});}}},{key:'resolvePadding',value:function resolvePadding(){}},{key:'setScrollX',value:function setScrollX(value){this.scrollTo(value,this.mScrollY);}},{key:'setScrollY',value:function setScrollY(value){this.scrollTo(this.mScrollX,value);}},{key:'getScrollX',value:function getScrollX(){return this.mScrollX;}},{key:'getScrollY',value:function getScrollY(){return this.mScrollY;}},{key:'offsetTopAndBottom',value:function offsetTopAndBottom(offset){if(offset!=0){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){var p=this.mParent;if(p!=null&&this.mAttachInfo!=null){var r=this.mAttachInfo.mTmpInvalRect;var minTop=undefined;var maxBottom=undefined;var yLoc=undefined;if(offset<0){minTop=this.mTop+offset;maxBottom=this.mBottom;yLoc=offset;}else {minTop=this.mTop;maxBottom=this.mBottom+offset;yLoc=0;}r.set(0,yLoc,this.mRight-this.mLeft,maxBottom-minTop);p.invalidateChild(this,r);}}else {this.invalidateViewProperty(false,false);}this.mTop+=offset;this.mBottom+=offset;if(!matrixIsIdentity){this.invalidateViewProperty(false,true);}this.invalidateParentIfNeeded();}}},{key:'offsetLeftAndRight',value:function offsetLeftAndRight(offset){if(offset!=0){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){var p=this.mParent;if(p!=null&&this.mAttachInfo!=null){var r=this.mAttachInfo.mTmpInvalRect;var minLeft=undefined;var maxRight=undefined;if(offset<0){minLeft=this.mLeft+offset;maxRight=this.mRight;}else {minLeft=this.mLeft;maxRight=this.mRight+offset;}r.set(0,0,maxRight-minLeft,this.mBottom-this.mTop);p.invalidateChild(this,r);}}else {this.invalidateViewProperty(false,false);}this.mLeft+=offset;this.mRight+=offset;if(!matrixIsIdentity){this.invalidateViewProperty(false,true);}this.invalidateParentIfNeeded();}}},{key:'getMatrix',value:function getMatrix(){if(this.mTransformationInfo!=null){this.updateMatrix();return this.mTransformationInfo.mMatrix;}return Matrix.IDENTITY_MATRIX;}},{key:'hasIdentityMatrix',value:function hasIdentityMatrix(){if(this.mTransformationInfo!=null){this.updateMatrix();return this.mTransformationInfo.mMatrixIsIdentity;}return true;}},{key:'ensureTransformationInfo',value:function ensureTransformationInfo(){if(this.mTransformationInfo==null){this.mTransformationInfo=new View.TransformationInfo();}}},{key:'updateMatrix',value:function updateMatrix(){var info=this.mTransformationInfo;if(info==null){this._syncMatrixToElement();return;}if(info.mMatrixDirty){if((this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==0){if(this.mRight-this.mLeft!=info.mPrevWidth||this.mBottom-this.mTop!=info.mPrevHeight){info.mPrevWidth=this.mRight-this.mLeft;info.mPrevHeight=this.mBottom-this.mTop;info.mPivotX=info.mPrevWidth/2;info.mPivotY=info.mPrevHeight/2;}}info.mMatrix.reset();info.mMatrix.setTranslate(info.mTranslationX,info.mTranslationY);info.mMatrix.preRotate(info.mRotation,info.mPivotX,info.mPivotY);info.mMatrix.preScale(info.mScaleX,info.mScaleY,info.mPivotX,info.mPivotY);info.mMatrixDirty=false;info.mMatrixIsIdentity=info.mMatrix.isIdentity();info.mInverseMatrixDirty=true;}this._syncMatrixToElement();}},{key:'getRotation',value:function getRotation(){return this.mTransformationInfo!=null?this.mTransformationInfo.mRotation:0;}},{key:'setRotation',value:function setRotation(rotation){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mRotation!=rotation){this.invalidateViewProperty(true,false);info.mRotation=rotation;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getScaleX',value:function getScaleX(){return this.mTransformationInfo!=null?this.mTransformationInfo.mScaleX:1;}},{key:'setScaleX',value:function setScaleX(scaleX){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mScaleX!=scaleX){this.invalidateViewProperty(true,false);info.mScaleX=scaleX;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getScaleY',value:function getScaleY(){return this.mTransformationInfo!=null?this.mTransformationInfo.mScaleY:1;}},{key:'setScaleY',value:function setScaleY(scaleY){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mScaleY!=scaleY){this.invalidateViewProperty(true,false);info.mScaleY=scaleY;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getPivotX',value:function getPivotX(){return this.mTransformationInfo!=null?this.mTransformationInfo.mPivotX:0;}},{key:'setPivotX',value:function setPivotX(pivotX){this.ensureTransformationInfo();var info=this.mTransformationInfo;var pivotSet=(this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==View.PFLAG_PIVOT_EXPLICITLY_SET;if(info.mPivotX!=pivotX||!pivotSet){this.mPrivateFlags|=View.PFLAG_PIVOT_EXPLICITLY_SET;this.invalidateViewProperty(true,false);info.mPivotX=pivotX;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getPivotY',value:function getPivotY(){return this.mTransformationInfo!=null?this.mTransformationInfo.mPivotY:0;}},{key:'setPivotY',value:function setPivotY(pivotY){this.ensureTransformationInfo();var info=this.mTransformationInfo;var pivotSet=(this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==View.PFLAG_PIVOT_EXPLICITLY_SET;if(info.mPivotY!=pivotY||!pivotSet){this.mPrivateFlags|=View.PFLAG_PIVOT_EXPLICITLY_SET;this.invalidateViewProperty(true,false);info.mPivotY=pivotY;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getAlpha',value:function getAlpha(){return this.mTransformationInfo!=null?this.mTransformationInfo.mAlpha:1;}},{key:'hasOverlappingRendering',value:function hasOverlappingRendering(){return true;}},{key:'setAlpha',value:function setAlpha(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mAlpha!=alpha){this.mTransformationInfo.mAlpha=alpha;if(this.onSetAlpha(Math.floor(alpha*255))){this.mPrivateFlags|=View.PFLAG_ALPHA_SET;this.invalidateParentCaches();this.invalidate(true);}else {this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;this.invalidateViewProperty(true,false);}}}},{key:'setAlphaNoInvalidation',value:function setAlphaNoInvalidation(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mAlpha!=alpha){this.mTransformationInfo.mAlpha=alpha;var subclassHandlesAlpha=this.onSetAlpha(Math.floor(alpha*255));if(subclassHandlesAlpha){this.mPrivateFlags|=View.PFLAG_ALPHA_SET;return true;}else {this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;}}return false;}},{key:'setTransitionAlpha',value:function setTransitionAlpha(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mTransitionAlpha!=alpha){this.mTransformationInfo.mTransitionAlpha=alpha;this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;this.invalidateViewProperty(true,false);}}},{key:'getFinalAlpha',value:function getFinalAlpha(){if(this.mTransformationInfo!=null){return this.mTransformationInfo.mAlpha*this.mTransformationInfo.mTransitionAlpha;}return 1;}},{key:'getTransitionAlpha',value:function getTransitionAlpha(){return this.mTransformationInfo!=null?this.mTransformationInfo.mTransitionAlpha:1;}},{key:'getTop',value:function getTop(){return this.mTop;}},{key:'setTop',value:function setTop(top){if(top!=this.mTop){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){if(this.mAttachInfo!=null){var minTop=undefined;var yLoc=undefined;if(top=-slop&&localY>=-slop&&localXthis.mTop&&this.mRight>this.mLeft){this.mParent.focusableViewAvailable(this);}}}if((changed&View.GONE)!=0){this.requestLayout();if((this.mViewFlags&View.VISIBILITY_MASK)==View.GONE){if(this.hasFocus())this.clearFocus();this.destroyDrawingCache();if(this.mParent instanceof View){this.mParent.invalidate(true);}this.mPrivateFlags|=View.PFLAG_DRAWN;}}if((changed&View.INVISIBLE)!=0){this.mPrivateFlags|=View.PFLAG_DRAWN;if((this.mViewFlags&View.VISIBILITY_MASK)==View.INVISIBLE){if(this.getRootView()!=this){if(this.hasFocus())this.clearFocus();}}}if((changed&View.VISIBILITY_MASK)!=0){if(newVisibility!=View.VISIBLE){this.cleanupDraw();}if(this.mParent instanceof view_2.ViewGroup){this.mParent.onChildVisibilityChanged(this,changed&View.VISIBILITY_MASK,newVisibility);this.mParent.invalidate(true);}else if(this.mParent!=null){this.mParent.invalidateChild(this,null);}this.dispatchVisibilityChanged(this,newVisibility);this.syncVisibleToElement();}if((changed&View.WILL_NOT_CACHE_DRAWING)!=0){this.destroyDrawingCache();}if((changed&View.DRAWING_CACHE_ENABLED)!=0){this.destroyDrawingCache();this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;this.invalidateParentCaches();}if((changed&View.DRAW_MASK)!=0){if((this.mViewFlags&View.WILL_NOT_DRAW)!=0){if(this.mBackground!=null){this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;this.mPrivateFlags|=View.PFLAG_ONLY_DRAWS_BACKGROUND;}else {this.mPrivateFlags|=View.PFLAG_SKIP_DRAW;}}else {this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;}this.requestLayout();this.invalidate(true);}}},{key:'bringToFront',value:function bringToFront(){if(this.mParent!=null){this.mParent.bringChildToFront(this);}}},{key:'onScrollChanged',value:function onScrollChanged(l,t,oldl,oldt){this.mBackgroundSizeChanged=true;var rootImpl=this.getViewRootImpl();if(rootImpl!=null){rootImpl.mViewScrollChanged=true;}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){}},{key:'getTouchables',value:function getTouchables(){var result=new ArrayList();this.addTouchables(result);return result;}},{key:'addTouchables',value:function addTouchables(views){var viewFlags=this.mViewFlags;if(((viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE)&&(viewFlags&View.ENABLED_MASK)==View.ENABLED){views.add(this);}}},{key:'requestRectangleOnScreen',value:function requestRectangleOnScreen(rectangle){var immediate=arguments.length<=1||arguments[1]===undefined?false:arguments[1];if(this.mParent==null){return false;}var child=this;var position=this.mAttachInfo!=null?this.mAttachInfo.mTmpTransformRect:new RectF();position.set(rectangle);var parent=this.mParent;var scrolled=false;while(parent!=null){rectangle.set(Math.floor(position.left),Math.floor(position.top),Math.floor(position.right),Math.floor(position.bottom));scrolled=parent.requestChildRectangleOnScreen(child,rectangle,immediate)||scrolled;if(!child.hasIdentityMatrix()){child.getMatrix().mapRect(position);}position.offset(child.mLeft,child.mTop);if(!(parent instanceof View)){break;}var parentView=parent;position.offset(-parentView.getScrollX(),-parentView.getScrollY());child=parentView;parent=child.getParent();}return scrolled;}},{key:'onFocusLost',value:function onFocusLost(){this.resetPressedState();}},{key:'resetPressedState',value:function resetPressedState(){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return;}if(this.isPressed()){this.setPressed(false);if(!this.mHasPerformedLongPress){this.removeLongPressCallback();}}}},{key:'isFocused',value:function isFocused(){return (this.mPrivateFlags&View.PFLAG_FOCUSED)!=0;}},{key:'findFocus',value:function findFocus(){return (this.mPrivateFlags&View.PFLAG_FOCUSED)!=0?this:null;}},{key:'getNextFocusLeftId',value:function getNextFocusLeftId(){return this.mNextFocusLeftId;}},{key:'setNextFocusLeftId',value:function setNextFocusLeftId(nextFocusLeftId){this.mNextFocusLeftId=nextFocusLeftId;}},{key:'getNextFocusRightId',value:function getNextFocusRightId(){return this.mNextFocusRightId;}},{key:'setNextFocusRightId',value:function setNextFocusRightId(nextFocusRightId){this.mNextFocusRightId=nextFocusRightId;}},{key:'getNextFocusUpId',value:function getNextFocusUpId(){return this.mNextFocusUpId;}},{key:'setNextFocusUpId',value:function setNextFocusUpId(nextFocusUpId){this.mNextFocusUpId=nextFocusUpId;}},{key:'getNextFocusDownId',value:function getNextFocusDownId(){return this.mNextFocusDownId;}},{key:'setNextFocusDownId',value:function setNextFocusDownId(nextFocusDownId){this.mNextFocusDownId=nextFocusDownId;}},{key:'getNextFocusForwardId',value:function getNextFocusForwardId(){return this.mNextFocusForwardId;}},{key:'setNextFocusForwardId',value:function setNextFocusForwardId(nextFocusForwardId){this.mNextFocusForwardId=nextFocusForwardId;}},{key:'setFocusable',value:function setFocusable(focusable){if(!focusable){this.setFlags(0,View.FOCUSABLE_IN_TOUCH_MODE);}this.setFlags(focusable?View.FOCUSABLE:View.NOT_FOCUSABLE,View.FOCUSABLE_MASK);}},{key:'isFocusable',value:function isFocusable(){return View.FOCUSABLE==(this.mViewFlags&View.FOCUSABLE_MASK);}},{key:'setFocusableInTouchMode',value:function setFocusableInTouchMode(focusableInTouchMode){this.setFlags(focusableInTouchMode?View.FOCUSABLE_IN_TOUCH_MODE:0,View.FOCUSABLE_IN_TOUCH_MODE);if(focusableInTouchMode){this.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}}},{key:'isFocusableInTouchMode',value:function isFocusableInTouchMode(){return View.FOCUSABLE_IN_TOUCH_MODE==(this.mViewFlags&View.FOCUSABLE_IN_TOUCH_MODE);}},{key:'hasFocusable',value:function hasFocusable(){return (this.mViewFlags&View.VISIBILITY_MASK)==View.VISIBLE&&this.isFocusable();}},{key:'clearFocus',value:function clearFocus(){if(View.DBG){System.out.println(this+" clearFocus()");}this.clearFocusInternal(true,true);}},{key:'clearFocusInternal',value:function clearFocusInternal(propagate,refocus){if((this.mPrivateFlags&View.PFLAG_FOCUSED)!=0){this.mPrivateFlags&=~View.PFLAG_FOCUSED;if(propagate&&this.mParent!=null){this.mParent.clearChildFocus(this);}this.onFocusChanged(false,0,null);this.refreshDrawableState();if(propagate&&(!refocus||!this.rootViewRequestFocus())){this.notifyGlobalFocusCleared(this);}}}},{key:'notifyGlobalFocusCleared',value:function notifyGlobalFocusCleared(oldFocus){}},{key:'rootViewRequestFocus',value:function rootViewRequestFocus(){var root=this.getRootView();return root!=null&&root.requestFocus();}},{key:'unFocus',value:function unFocus(){if(View.DBG){System.out.println(this+" unFocus()");}this.clearFocusInternal(false,false);}},{key:'hasFocus',value:function hasFocus(){return (this.mPrivateFlags&View.PFLAG_FOCUSED)!=0;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){if(!gainFocus){if(this.isPressed()){this.setPressed(false);}this.onFocusLost();}this.invalidate(true);var li=this.mListenerInfo;if(li!=null&&li.mOnFocusChangeListener!=null){li.mOnFocusChangeListener.onFocusChange(this,gainFocus);}if(this.mAttachInfo!=null){this.mAttachInfo.mKeyDispatchState.reset(this);}}},{key:'focusSearch',value:function focusSearch(direction){if(this.mParent!=null){return this.mParent.focusSearch(this,direction);}else {return null;}}},{key:'dispatchUnhandledMove',value:function dispatchUnhandledMove(focused,direction){return false;}},{key:'findUserSetNextFocus',value:function findUserSetNextFocus(root,direction){var _this39=this;switch(direction){case View.FOCUS_LEFT:if(!this.mNextFocusLeftId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusLeftId);case View.FOCUS_RIGHT:if(!this.mNextFocusRightId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusRightId);case View.FOCUS_UP:if(!this.mNextFocusUpId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusUpId);case View.FOCUS_DOWN:if(!this.mNextFocusDownId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusDownId);case View.FOCUS_FORWARD:if(!this.mNextFocusForwardId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusForwardId);case View.FOCUS_BACKWARD:{var _ret4=function(){if(!_this39.mID)return {v:null};var id=_this39.mID;return {v:root.findViewByPredicateInsideOut(_this39,{apply:function apply(t){return t.mNextFocusForwardId==id;}})};}();if((typeof _ret4==='undefined'?'undefined':_typeof(_ret4))==="object")return _ret4.v;}}return null;}},{key:'findViewInsideOutShouldExist',value:function findViewInsideOutShouldExist(root,id){if(this.mMatchIdPredicate==null){this.mMatchIdPredicate=new MatchIdPredicate();}this.mMatchIdPredicate.mId=id;var result=root.findViewByPredicateInsideOut(this,this.mMatchIdPredicate);if(result==null){Log.w(View.VIEW_LOG_TAG,"couldn't find view with id "+id);}return result;}},{key:'getFocusables',value:function getFocusables(direction){var result=new ArrayList(24);this.addFocusables(result,direction);return result;}},{key:'addFocusables',value:function addFocusables(views,direction){var focusableMode=arguments.length<=2||arguments[2]===undefined?View.FOCUSABLES_TOUCH_MODE:arguments[2];if(views==null){return;}if(!this.isFocusable()){return;}if((focusableMode&View.FOCUSABLES_TOUCH_MODE)==View.FOCUSABLES_TOUCH_MODE&&this.isInTouchMode()&&!this.isFocusableInTouchMode()){return;}views.add(this);}},{key:'setOnFocusChangeListener',value:function setOnFocusChangeListener(l){if(typeof l=="function"){l=View.OnFocusChangeListener.fromFunction(l);}this.getListenerInfo().mOnFocusChangeListener=l;}},{key:'getOnFocusChangeListener',value:function getOnFocusChangeListener(){var li=this.mListenerInfo;return li!=null?li.mOnFocusChangeListener:null;}},{key:'requestFocus',value:function requestFocus(){var direction=arguments.length<=0||arguments[0]===undefined?View.FOCUS_DOWN:arguments[0];var previouslyFocusedRect=arguments.length<=1||arguments[1]===undefined?null:arguments[1];return this.requestFocusNoSearch(direction,previouslyFocusedRect);}},{key:'requestFocusNoSearch',value:function requestFocusNoSearch(direction,previouslyFocusedRect){if((this.mViewFlags&View.FOCUSABLE_MASK)!=View.FOCUSABLE||(this.mViewFlags&View.VISIBILITY_MASK)!=View.VISIBLE){return false;}if(this.isInTouchMode()&&View.FOCUSABLE_IN_TOUCH_MODE!=(this.mViewFlags&View.FOCUSABLE_IN_TOUCH_MODE)){return false;}if(this.hasAncestorThatBlocksDescendantFocus()){return false;}this.handleFocusGainInternal(direction,previouslyFocusedRect);return true;}},{key:'requestFocusFromTouch',value:function requestFocusFromTouch(){if(this.isInTouchMode()){var viewRoot=this.getViewRootImpl();if(viewRoot!=null){viewRoot.ensureTouchMode(false);}}return this.requestFocus(View.FOCUS_DOWN);}},{key:'hasAncestorThatBlocksDescendantFocus',value:function hasAncestorThatBlocksDescendantFocus(){var ancestor=this.mParent;while(ancestor instanceof view_2.ViewGroup){var vgAncestor=ancestor;if(vgAncestor.getDescendantFocusability()==view_2.ViewGroup.FOCUS_BLOCK_DESCENDANTS){return true;}else {ancestor=vgAncestor.getParent();}}return false;}},{key:'handleFocusGainInternal',value:function handleFocusGainInternal(direction,previouslyFocusedRect){if(View.DBG){System.out.println(this+" requestFocus()");}if((this.mPrivateFlags&View.PFLAG_FOCUSED)==0){this.mPrivateFlags|=View.PFLAG_FOCUSED;var oldFocus=this.mAttachInfo!=null?this.getRootView().findFocus():null;if(this.mParent!=null){this.mParent.requestChildFocus(this,this);}this.onFocusChanged(true,direction,previouslyFocusedRect);this.refreshDrawableState();}}},{key:'hasTransientState',value:function hasTransientState(){return (this.mPrivateFlags2&View.PFLAG2_HAS_TRANSIENT_STATE)==View.PFLAG2_HAS_TRANSIENT_STATE;}},{key:'setHasTransientState',value:function setHasTransientState(hasTransientState){this.mTransientStateCount=hasTransientState?this.mTransientStateCount+1:this.mTransientStateCount-1;if(this.mTransientStateCount<0){this.mTransientStateCount=0;Log.e(View.VIEW_LOG_TAG,"hasTransientState decremented below 0: "+"unmatched pair of setHasTransientState calls");}else if(hasTransientState&&this.mTransientStateCount==1||!hasTransientState&&this.mTransientStateCount==0){this.mPrivateFlags2=this.mPrivateFlags2&~View.PFLAG2_HAS_TRANSIENT_STATE|(hasTransientState?View.PFLAG2_HAS_TRANSIENT_STATE:0);if(this.mParent!=null){this.mParent.childHasTransientStateChanged(this,hasTransientState);}}}},{key:'isScrollContainer',value:function isScrollContainer(){return (this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0;}},{key:'setScrollContainer',value:function setScrollContainer(isScrollContainer){if(isScrollContainer){if(this.mAttachInfo!=null&&(this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)==0){this.mAttachInfo.mScrollContainers.add(this);this.mPrivateFlags|=View.PFLAG_SCROLL_CONTAINER_ADDED;}this.mPrivateFlags|=View.PFLAG_SCROLL_CONTAINER;}else {if((this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0){this.mAttachInfo.mScrollContainers.delete(this);}this.mPrivateFlags&=~(View.PFLAG_SCROLL_CONTAINER|View.PFLAG_SCROLL_CONTAINER_ADDED);}}},{key:'isInTouchMode',value:function isInTouchMode(){if(this.getViewRootImpl()!=null){return this.getViewRootImpl().mInTouchMode;}else {return false;}}},{key:'isShown',value:function isShown(){var current=this;do {if((current.mViewFlags&View.VISIBILITY_MASK)!=View.VISIBLE){return false;}var parent=current.mParent;if(parent==null){return false;}if(!(parent instanceof View)){return true;}current=parent;}while(current!=null);return false;}},{key:'getVisibility',value:function getVisibility(){return this.mViewFlags&View.VISIBILITY_MASK;}},{key:'setVisibility',value:function setVisibility(visibility){this.setFlags(visibility,View.VISIBILITY_MASK);if(this.mBackground!=null)this.mBackground.setVisible(visibility==View.VISIBLE,false);}},{key:'dispatchVisibilityChanged',value:function dispatchVisibilityChanged(changedView,visibility){this.onVisibilityChanged(changedView,visibility);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){if(visibility==View.VISIBLE){if(this.mAttachInfo!=null){this.initialAwakenScrollBars();}else {this.mPrivateFlags|=View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;}}}},{key:'dispatchDisplayHint',value:function dispatchDisplayHint(hint){this.onDisplayHint(hint);}},{key:'onDisplayHint',value:function onDisplayHint(hint){}},{key:'dispatchWindowVisibilityChanged',value:function dispatchWindowVisibilityChanged(visibility){this.onWindowVisibilityChanged(visibility);}},{key:'onWindowVisibilityChanged',value:function onWindowVisibilityChanged(visibility){if(visibility==View.VISIBLE){this.initialAwakenScrollBars();}}},{key:'getWindowVisibility',value:function getWindowVisibility(){return this.mAttachInfo!=null?this.mAttachInfo.mWindowVisibility:View.GONE;}},{key:'isEnabled',value:function isEnabled(){return (this.mViewFlags&View.ENABLED_MASK)==View.ENABLED;}},{key:'setEnabled',value:function setEnabled(enabled){if(enabled==this.isEnabled())return;this.setFlags(enabled?View.ENABLED:View.DISABLED,View.ENABLED_MASK);this.refreshDrawableState();this.invalidate(true);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(event){if(event.isPointerEvent()){var action=event.getAction();if(action==view_2.MotionEvent.ACTION_HOVER_ENTER||action==view_2.MotionEvent.ACTION_HOVER_MOVE||action==view_2.MotionEvent.ACTION_HOVER_EXIT){}else if(this.dispatchGenericPointerEvent(event)){return true;}}if(this.dispatchGenericMotionEventInternal(event)){return true;}return false;}},{key:'dispatchGenericMotionEventInternal',value:function dispatchGenericMotionEventInternal(event){var li=this.mListenerInfo;if(li!=null&&li.mOnGenericMotionListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnGenericMotionListener.onGenericMotion(this,event)){return true;}if(this.onGenericMotionEvent(event)){return true;}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'dispatchGenericPointerEvent',value:function dispatchGenericPointerEvent(event){return false;}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var li=this.mListenerInfo;if(li!=null&&li.mOnKeyListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnKeyListener.onKey(this,event.getKeyCode(),event)){return true;}if(event.dispatch(this,this.mAttachInfo!=null?this.mAttachInfo.mKeyDispatchState:null,this)){return true;}return false;}},{key:'setOnKeyListener',value:function setOnKeyListener(l){if(typeof l=="function"){l=View.OnKeyListener.fromFunction(l);}this.getListenerInfo().mOnKeyListener=l;}},{key:'getKeyDispatcherState',value:function getKeyDispatcherState(){return this.mAttachInfo!=null?this.mAttachInfo.mKeyDispatchState:null;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var result=false;if(KeyEvent.isConfirmKey(keyCode)){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return true;}if(((this.mViewFlags&View.CLICKABLE)==View.CLICKABLE||(this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE)&&event.getRepeatCount()==0){this.setPressed(true);this.checkForLongClick(0);return true;}}return result;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(KeyEvent.isConfirmKey(keyCode)){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return true;}if((this.mViewFlags&View.CLICKABLE)==View.CLICKABLE&&this.isPressed()){this.setPressed(false);if(!this.mHasPerformedLongPress){this.removeLongPressCallback();return this.performClick();}}}return false;}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(event){if(this.onFilterTouchEventForSecurity(event)){var li=this.mListenerInfo;if(li!=null&&li.mOnTouchListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnTouchListener.onTouch(this,event)){return true;}if(this.onTouchEvent(event)){return true;}}return false;}},{key:'onFilterTouchEventForSecurity',value:function onFilterTouchEventForSecurity(event){return true;}},{key:'onTouchEvent',value:function onTouchEvent(event){var viewFlags=this.mViewFlags;if((viewFlags&View.ENABLED_MASK)==View.DISABLED){if(event.getAction()==view_2.MotionEvent.ACTION_UP&&(this.mPrivateFlags&View.PFLAG_PRESSED)!=0){this.setPressed(false);}return (viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE;}if(this.mTouchDelegate!=null){if(this.mTouchDelegate.onTouchEvent(event)){return true;}}if((viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE){switch(event.getAction()){case view_2.MotionEvent.ACTION_UP:var prepressed=(this.mPrivateFlags&View.PFLAG_PREPRESSED)!=0;if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0||prepressed){var focusTaken=false;if(this.isFocusable()&&this.isFocusableInTouchMode()&&!this.isFocused()){focusTaken=this.requestFocus();}if(prepressed){this.setPressed(true);}if(!this.mHasPerformedLongPress){this.removeLongPressCallback();if(!focusTaken){if(this.mPerformClick==null){this.mPerformClick=new PerformClick(this);}if(prepressed){if(this.mPerformClickAfterPressDraw==null){this.mPerformClickAfterPressDraw=new PerformClickAfterPressDraw(this);}this.post(this.mPerformClickAfterPressDraw);}else if(!this.post(this.mPerformClick)){this.performClick(event);}}}if(this.mUnsetPressedState==null){this.mUnsetPressedState=new UnsetPressedState(this);}if(prepressed){this.postDelayed(this.mUnsetPressedState,view_2.ViewConfiguration.getPressedStateDuration());}else if(!this.post(this.mUnsetPressedState)){this.mUnsetPressedState.run();}this.removeTapCallback();}break;case view_2.MotionEvent.ACTION_DOWN:this.mHasPerformedLongPress=false;var isInScrollingContainer=this.isInScrollingContainer();if(isInScrollingContainer){this.mPrivateFlags|=View.PFLAG_PREPRESSED;if(this.mPendingCheckForTap==null){this.mPendingCheckForTap=new CheckForTap(this);}this.postDelayed(this.mPendingCheckForTap,view_2.ViewConfiguration.getTapTimeout());}else {this.setPressed(true);this.checkForLongClick(0);}break;case view_2.MotionEvent.ACTION_CANCEL:this.setPressed(false);this.removeTapCallback();this.removeLongPressCallback();break;case view_2.MotionEvent.ACTION_MOVE:var x=event.getX();var y=event.getY();if(!this.pointInView(x,y,this.mTouchSlop)){this.removeTapCallback();if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0){this.removeLongPressCallback();this.setPressed(false);}}break;}return true;}return false;}},{key:'isInScrollingContainer',value:function isInScrollingContainer(){var p=this.getParent();while(p!=null&&p instanceof view_2.ViewGroup){if(p.shouldDelayChildPressedState()){return true;}p=p.getParent();}return false;}},{key:'cancelPendingInputEvents',value:function cancelPendingInputEvents(){this.dispatchCancelPendingInputEvents();}},{key:'dispatchCancelPendingInputEvents',value:function dispatchCancelPendingInputEvents(){this.mPrivateFlags3&=~View.PFLAG3_CALLED_SUPER;this.onCancelPendingInputEvents();if((this.mPrivateFlags3&View.PFLAG3_CALLED_SUPER)!=View.PFLAG3_CALLED_SUPER){throw Error('new SuperNotCalledException("View " + this.getClass().getSimpleName() + " did not call through to super.onCancelPendingInputEvents()")');}}},{key:'onCancelPendingInputEvents',value:function onCancelPendingInputEvents(){this.removePerformClickCallback();this.cancelLongPress();this.mPrivateFlags3|=View.PFLAG3_CALLED_SUPER;}},{key:'removeLongPressCallback',value:function removeLongPressCallback(){if(this.mPendingCheckForLongPress!=null){this.removeCallbacks(this.mPendingCheckForLongPress);}}},{key:'removePerformClickCallback',value:function removePerformClickCallback(){if(this.mPerformClick!=null){this.removeCallbacks(this.mPerformClick);}if(this.mPerformClickAfterPressDraw!=null){this.removeCallbacks(this.mPerformClickAfterPressDraw);}}},{key:'removeUnsetPressCallback',value:function removeUnsetPressCallback(){if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0&&this.mUnsetPressedState!=null){this.setPressed(false);this.removeCallbacks(this.mUnsetPressedState);}}},{key:'removeTapCallback',value:function removeTapCallback(){if(this.mPendingCheckForTap!=null){this.mPrivateFlags&=~View.PFLAG_PREPRESSED;this.removeCallbacks(this.mPendingCheckForTap);}}},{key:'cancelLongPress',value:function cancelLongPress(){this.removeLongPressCallback();this.removeTapCallback();}},{key:'setTouchDelegate',value:function setTouchDelegate(delegate){this.mTouchDelegate=delegate;}},{key:'getTouchDelegate',value:function getTouchDelegate(){return this.mTouchDelegate;}},{key:'getListenerInfo',value:function getListenerInfo(){if(this.mListenerInfo!=null){return this.mListenerInfo;}this.mListenerInfo=new View.ListenerInfo();return this.mListenerInfo;}},{key:'addOnLayoutChangeListener',value:function addOnLayoutChangeListener(listener){var li=this.getListenerInfo();if(li.mOnLayoutChangeListeners==null){li.mOnLayoutChangeListeners=new ArrayList();}if(!li.mOnLayoutChangeListeners.contains(listener)){li.mOnLayoutChangeListeners.add(listener);}}},{key:'removeOnLayoutChangeListener',value:function removeOnLayoutChangeListener(listener){var li=this.mListenerInfo;if(li==null||li.mOnLayoutChangeListeners==null){return;}li.mOnLayoutChangeListeners.remove(listener);}},{key:'addOnAttachStateChangeListener',value:function addOnAttachStateChangeListener(listener){var li=this.getListenerInfo();if(li.mOnAttachStateChangeListeners==null){li.mOnAttachStateChangeListeners=new CopyOnWriteArrayList();}li.mOnAttachStateChangeListeners.add(listener);}},{key:'removeOnAttachStateChangeListener',value:function removeOnAttachStateChangeListener(listener){var li=this.mListenerInfo;if(li==null||li.mOnAttachStateChangeListeners==null){return;}li.mOnAttachStateChangeListeners.remove(listener);}},{key:'setOnClickListener',value:function setOnClickListener(l){if(!this.isClickable()){this.setClickable(true);}if(typeof l=="function"){l=View.OnClickListener.fromFunction(l);}this.getListenerInfo().mOnClickListener=l;}},{key:'hasOnClickListeners',value:function hasOnClickListeners(){var li=this.mListenerInfo;return li!=null&&li.mOnClickListener!=null;}},{key:'setOnLongClickListener',value:function setOnLongClickListener(l){if(!this.isLongClickable()){this.setLongClickable(true);}if(typeof l=="function"){l=View.OnLongClickListener.fromFunction(l);}this.getListenerInfo().mOnLongClickListener=l;}},{key:'playSoundEffect',value:function playSoundEffect(soundConstant){}},{key:'performHapticFeedback',value:function performHapticFeedback(feedbackConstant){return false;}},{key:'performClick',value:function performClick(event){var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){li.mOnClickListener.onClick(this);return true;}return false;}},{key:'callOnClick',value:function callOnClick(){var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){li.mOnClickListener.onClick(this);return true;}return false;}},{key:'performLongClick',value:function performLongClick(){var handled=false;var li=this.mListenerInfo;if(li!=null&&li.mOnLongClickListener!=null){handled=li.mOnLongClickListener.onLongClick(this);}return handled;}},{key:'performButtonActionOnTouchDown',value:function performButtonActionOnTouchDown(event){return false;}},{key:'checkForLongClick',value:function checkForLongClick(){var delayOffset=arguments.length<=0||arguments[0]===undefined?0:arguments[0];if((this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE){this.mHasPerformedLongPress=false;if(this.mPendingCheckForLongPress==null){this.mPendingCheckForLongPress=new CheckForLongPress(this);}this.mPendingCheckForLongPress.rememberWindowAttachCount();this.postDelayed(this.mPendingCheckForLongPress,view_2.ViewConfiguration.getLongPressTimeout()-delayOffset);}}},{key:'setOnTouchListener',value:function setOnTouchListener(l){if(typeof l=="function"){l=View.OnTouchListener.fromFunction(l);}this.getListenerInfo().mOnTouchListener=l;}},{key:'isClickable',value:function isClickable(){return (this.mViewFlags&View.CLICKABLE)==View.CLICKABLE;}},{key:'setClickable',value:function setClickable(clickable){this.setFlags(clickable?View.CLICKABLE:0,View.CLICKABLE);}},{key:'isLongClickable',value:function isLongClickable(){return (this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE;}},{key:'setLongClickable',value:function setLongClickable(longClickable){this.setFlags(longClickable?View.LONG_CLICKABLE:0,View.LONG_CLICKABLE);}},{key:'setPressed',value:function setPressed(pressed){var needsRefresh=pressed!=((this.mPrivateFlags&View.PFLAG_PRESSED)==View.PFLAG_PRESSED);if(pressed){this.mPrivateFlags|=View.PFLAG_PRESSED;}else {this.mPrivateFlags&=~View.PFLAG_PRESSED;}if(needsRefresh){this.refreshDrawableState();}this.dispatchSetPressed(pressed);}},{key:'dispatchSetPressed',value:function dispatchSetPressed(pressed){}},{key:'isPressed',value:function isPressed(){return (this.mPrivateFlags&View.PFLAG_PRESSED)==View.PFLAG_PRESSED;}},{key:'setSelected',value:function setSelected(selected){if((this.mPrivateFlags&View.PFLAG_SELECTED)!=0!=selected){this.mPrivateFlags=this.mPrivateFlags&~View.PFLAG_SELECTED|(selected?View.PFLAG_SELECTED:0);if(!selected)this.resetPressedState();this.invalidate(true);this.refreshDrawableState();this.dispatchSetSelected(selected);}}},{key:'dispatchSetSelected',value:function dispatchSetSelected(selected){}},{key:'isSelected',value:function isSelected(){return (this.mPrivateFlags&View.PFLAG_SELECTED)!=0;}},{key:'setActivated',value:function setActivated(activated){if((this.mPrivateFlags&View.PFLAG_ACTIVATED)!=0!=activated){this.mPrivateFlags=this.mPrivateFlags&~View.PFLAG_ACTIVATED|(activated?View.PFLAG_ACTIVATED:0);this.invalidate(true);this.refreshDrawableState();this.dispatchSetActivated(activated);}}},{key:'dispatchSetActivated',value:function dispatchSetActivated(activated){}},{key:'isActivated',value:function isActivated(){return (this.mPrivateFlags&View.PFLAG_ACTIVATED)!=0;}},{key:'getViewTreeObserver',value:function getViewTreeObserver(){if(this.mAttachInfo!=null){return this.mAttachInfo.mViewRootImpl.mTreeObserver;}if(this.mFloatingTreeObserver==null){this.mFloatingTreeObserver=new view_2.ViewTreeObserver();}return this.mFloatingTreeObserver;}},{key:'setLayoutDirection',value:function setLayoutDirection(layoutDirection){}},{key:'getLayoutDirection',value:function getLayoutDirection(){return View.LAYOUT_DIRECTION_LTR;}},{key:'isLayoutRtl',value:function isLayoutRtl(){return this.getLayoutDirection()==View.LAYOUT_DIRECTION_RTL;}},{key:'getTextDirection',value:function getTextDirection(){return View.TEXT_DIRECTION_LTR;}},{key:'setTextDirection',value:function setTextDirection(textDirection){}},{key:'getTextAlignment',value:function getTextAlignment(){return View.TEXT_ALIGNMENT_DEFAULT;}},{key:'setTextAlignment',value:function setTextAlignment(textAlignment){}},{key:'getBaseline',value:function getBaseline(){return -1;}},{key:'isLayoutRequested',value:function isLayoutRequested(){return (this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT;}},{key:'getLayoutParams',value:function getLayoutParams(){return this.mLayoutParams;}},{key:'setLayoutParams',value:function setLayoutParams(params){if(params==null){throw new Error("Layout parameters cannot be null");}this.mLayoutParams=params;var p=this.mParent;if(p instanceof view_2.ViewGroup){p.onSetLayoutParams(this,params);}this.requestLayout();}},{key:'isInLayout',value:function isInLayout(){var viewRoot=this.getViewRootImpl();return viewRoot!=null&&viewRoot.isInLayout();}},{key:'requestLayout',value:function requestLayout(){if(this.mMeasureCache!=null)this.mMeasureCache.clear();if(this.mAttachInfo!=null&&this.mAttachInfo.mViewRequestingLayout==null){var viewRoot=this.getViewRootImpl();if(viewRoot!=null&&viewRoot.isInLayout()){if(!viewRoot.requestLayoutDuringLayout(this)){return;}}this.mAttachInfo.mViewRequestingLayout=this;}this.mPrivateFlags|=View.PFLAG_FORCE_LAYOUT;this.mPrivateFlags|=View.PFLAG_INVALIDATED;if(this.mParent!=null&&!this.mParent.isLayoutRequested()){this.mParent.requestLayout();}if(this.mAttachInfo!=null&&this.mAttachInfo.mViewRequestingLayout==this){this.mAttachInfo.mViewRequestingLayout=null;}}},{key:'forceLayout',value:function forceLayout(){if(this.mMeasureCache!=null)this.mMeasureCache.clear();this.mPrivateFlags|=View.PFLAG_FORCE_LAYOUT;this.mPrivateFlags|=View.PFLAG_INVALIDATED;}},{key:'isLaidOut',value:function isLaidOut(){return (this.mPrivateFlags3&View.PFLAG3_IS_LAID_OUT)==View.PFLAG3_IS_LAID_OUT;}},{key:'layout',value:function layout(l,t,r,b){if((this.mPrivateFlags3&View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT)!=0){this.onMeasure(this.mOldWidthMeasureSpec,this.mOldHeightMeasureSpec);this.mPrivateFlags3&=~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}var oldL=this.mLeft;var oldT=this.mTop;var oldB=this.mBottom;var oldR=this.mRight;var changed=this.setFrame(l,t,r,b);if(changed||(this.mPrivateFlags&View.PFLAG_LAYOUT_REQUIRED)==View.PFLAG_LAYOUT_REQUIRED){this.onLayout(changed,l,t,r,b);this.mPrivateFlags&=~View.PFLAG_LAYOUT_REQUIRED;var li=this.mListenerInfo;if(li!=null&&li.mOnLayoutChangeListeners!=null){var listenersCopy=li.mOnLayoutChangeListeners.clone();var numListeners=listenersCopy.size();for(var i=0;i0&&height>0){r.set(0,0,width,height);if(globalOffset!=null){globalOffset.set(-this.mScrollX,-this.mScrollY);}return this.mParent==null||this.mParent.getChildVisibleRect(this,r,globalOffset);}return false;}},{key:'getLocationOnScreen',value:function getLocationOnScreen(location){this.getLocationInWindow(location);var info=this.mAttachInfo;}},{key:'getLocationInWindow',value:function getLocationInWindow(location){if(location==null||location.length<2){throw Error('new IllegalArgumentException("location must be an array of two integers")');}if(this.mAttachInfo==null){location[0]=location[1]=0;return;}var position=this.mAttachInfo.mTmpTransformLocation;position[0]=position[1]=0.0;if(!this.hasIdentityMatrix()){this.getMatrix().mapPoints(position);}position[0]+=this.mLeft;position[1]+=this.mTop;var viewParent=this.mParent;while(viewParent instanceof View){var _view2=viewParent;position[0]-=_view2.mScrollX;position[1]-=_view2.mScrollY;if(!_view2.hasIdentityMatrix()){_view2.getMatrix().mapPoints(position);}position[0]+=_view2.mLeft;position[1]+=_view2.mTop;viewParent=_view2.mParent;}location[0]=Math.floor(position[0]+0.5);location[1]=Math.floor(position[1]+0.5);}},{key:'getWindowVisibleDisplayFrame',value:function getWindowVisibleDisplayFrame(outRect){if(this.mAttachInfo!=null){var rootView=this.mAttachInfo.mRootView;var xy=[0,0];rootView.getLocationOnScreen(xy);outRect.set(xy[0],xy[1],rootView.getWidth()+xy[0],rootView.getHeight()+xy[1]);return;}var dm=Resources.getSystem().getDisplayMetrics();outRect.set(0,0,dm.widthPixels,dm.heightPixels);}},{key:'isVisibleToUser',value:function isVisibleToUser(){var boundInView=arguments.length<=0||arguments[0]===undefined?null:arguments[0];if(this.mAttachInfo!=null){if(this.mAttachInfo.mWindowVisibility!=View.VISIBLE){return false;}var current=this;while(current instanceof View){var _view3=current;if(_view3.getAlpha()<=0||_view3.getTransitionAlpha()<=0||_view3.getVisibility()!=View.VISIBLE){return false;}current=_view3.mParent;}var visibleRect=this.mAttachInfo.mTmpInvalRect;var offset=this.mAttachInfo.mPoint;if(!this.getGlobalVisibleRect(visibleRect,offset)){return false;}if(boundInView!=null){visibleRect.offset(-offset.x,-offset.y);return boundInView.intersect(visibleRect);}return true;}return false;}},{key:'getMeasuredWidth',value:function getMeasuredWidth(){return this.mMeasuredWidth&View.MEASURED_SIZE_MASK;}},{key:'getMeasuredWidthAndState',value:function getMeasuredWidthAndState(){return this.mMeasuredWidth;}},{key:'getMeasuredHeight',value:function getMeasuredHeight(){return this.mMeasuredHeight&View.MEASURED_SIZE_MASK;}},{key:'getMeasuredHeightAndState',value:function getMeasuredHeightAndState(){return this.mMeasuredHeight;}},{key:'getMeasuredState',value:function getMeasuredState(){return this.mMeasuredWidth&View.MEASURED_STATE_MASK|this.mMeasuredHeight>>View.MEASURED_HEIGHT_STATE_SHIFT&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT;}},{key:'measure',value:function measure(widthMeasureSpec,heightMeasureSpec){var key=widthMeasureSpec+','+heightMeasureSpec;if(this.mMeasureCache==null)this.mMeasureCache=new Map();if((this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT||widthMeasureSpec!=this.mOldWidthMeasureSpec||heightMeasureSpec!=this.mOldHeightMeasureSpec){this.mPrivateFlags&=~View.PFLAG_MEASURED_DIMENSION_SET;var cacheValue=(this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT?null:this.mMeasureCache.get(key);if(cacheValue==null){this.onMeasure(widthMeasureSpec,heightMeasureSpec);this.mPrivateFlags3&=~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}else {this.setMeasuredDimension(cacheValue[0],cacheValue[1]);this.mPrivateFlags3|=View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}if((this.mPrivateFlags&View.PFLAG_MEASURED_DIMENSION_SET)!=View.PFLAG_MEASURED_DIMENSION_SET){throw new Error("onMeasure() did not set the"+" measured dimension by calling"+" setMeasuredDimension()");}this.mPrivateFlags|=View.PFLAG_LAYOUT_REQUIRED;}this.mOldWidthMeasureSpec=widthMeasureSpec;this.mOldHeightMeasureSpec=heightMeasureSpec;this.mMeasureCache.set(key,[this.mMeasuredWidth,this.mMeasuredHeight]);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){this.setMeasuredDimension(View.getDefaultSize(this.getSuggestedMinimumWidth(),widthMeasureSpec),View.getDefaultSize(this.getSuggestedMinimumHeight(),heightMeasureSpec));}},{key:'setMeasuredDimension',value:function setMeasuredDimension(measuredWidth,measuredHeight){this.mMeasuredWidth=measuredWidth;this.mMeasuredHeight=measuredHeight;this.mPrivateFlags|=View.PFLAG_MEASURED_DIMENSION_SET;}},{key:'getSuggestedMinimumHeight',value:function getSuggestedMinimumHeight(){return this.mBackground==null?this.mMinHeight:Math.max(this.mMinHeight,this.mBackground.getMinimumHeight());}},{key:'getSuggestedMinimumWidth',value:function getSuggestedMinimumWidth(){return this.mBackground==null?this.mMinWidth:Math.max(this.mMinWidth,this.mBackground.getMinimumWidth());}},{key:'getMinimumHeight',value:function getMinimumHeight(){return this.mMinHeight;}},{key:'setMinimumHeight',value:function setMinimumHeight(minHeight){this.mMinHeight=minHeight;this.requestLayout();}},{key:'getMinimumWidth',value:function getMinimumWidth(){return this.mMinWidth;}},{key:'setMinimumWidth',value:function setMinimumWidth(minWidth){this.mMinWidth=minWidth;this.requestLayout();}},{key:'getAnimation',value:function getAnimation(){return this.mCurrentAnimation;}},{key:'startAnimation',value:function startAnimation(animation){animation.setStartTime(Animation.START_ON_FIRST_FRAME);this.setAnimation(animation);this.invalidateParentCaches();this.invalidate(true);}},{key:'clearAnimation',value:function clearAnimation(){if(this.mCurrentAnimation!=null){this.mCurrentAnimation.detach();}this.mCurrentAnimation=null;this.invalidateParentIfNeeded();}},{key:'setAnimation',value:function setAnimation(animation){this.mCurrentAnimation=animation;if(animation!=null){animation.reset();}}},{key:'onAnimationStart',value:function onAnimationStart(){this.mPrivateFlags|=View.PFLAG_ANIMATION_STARTED;}},{key:'onAnimationEnd',value:function onAnimationEnd(){this.mPrivateFlags&=~View.PFLAG_ANIMATION_STARTED;}},{key:'onSetAlpha',value:function onSetAlpha(alpha){return false;}},{key:'_invalidateRect',value:function _invalidateRect(l,t,r,b){if(this.skipInvalidate()){return;}if((this.mPrivateFlags&(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS))==(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS)||(this.mPrivateFlags&View.PFLAG_DRAWING_CACHE_VALID)==View.PFLAG_DRAWING_CACHE_VALID||(this.mPrivateFlags&View.PFLAG_INVALIDATED)!=View.PFLAG_INVALIDATED){this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;this.mPrivateFlags|=View.PFLAG_INVALIDATED;this.mPrivateFlags|=View.PFLAG_DIRTY;var p=this.mParent;var ai=this.mAttachInfo;if(p!=null&&ai!=null&&l=1;}},{key:'computeOpaqueFlags',value:function computeOpaqueFlags(){if(this.mBackground!=null&&this.mBackground.getOpacity()==PixelFormat.OPAQUE){this.mPrivateFlags|=View.PFLAG_OPAQUE_BACKGROUND;}else {this.mPrivateFlags&=~View.PFLAG_OPAQUE_BACKGROUND;}var flags=this.mViewFlags;if((flags&View.SCROLLBARS_VERTICAL)==0&&(flags&View.SCROLLBARS_HORIZONTAL)==0){this.mPrivateFlags|=View.PFLAG_OPAQUE_SCROLLBARS;}else {this.mPrivateFlags&=~View.PFLAG_OPAQUE_SCROLLBARS;}}},{key:'setLayerType',value:function setLayerType(layerType){if(layerTypeView.LAYER_TYPE_SOFTWARE){throw Error('new IllegalArgumentException("Layer type can only be one of: LAYER_TYPE_NONE, " + "LAYER_TYPE_SOFTWARE")');}if(layerType==this.mLayerType){return;}switch(this.mLayerType){case View.LAYER_TYPE_SOFTWARE:this.destroyDrawingCache();break;default:break;}this.mLayerType=layerType;var layerDisabled=this.mLayerType==View.LAYER_TYPE_NONE;this.mLocalDirtyRect=layerDisabled?null:new Rect();this.invalidateParentCaches();this.invalidate(true);}},{key:'getLayerType',value:function getLayerType(){return this.mLayerType;}},{key:'setClipBounds',value:function setClipBounds(clipBounds){if(clipBounds!=null){if(clipBounds.equals(this.mClipBounds)){return;}if(this.mClipBounds==null){this.invalidate();this.mClipBounds=new Rect(clipBounds);}else {this.invalidate(Math.min(this.mClipBounds.left,clipBounds.left),Math.min(this.mClipBounds.top,clipBounds.top),Math.max(this.mClipBounds.right,clipBounds.right),Math.max(this.mClipBounds.bottom,clipBounds.bottom));this.mClipBounds.set(clipBounds);}}else {if(this.mClipBounds!=null){this.invalidate();this.mClipBounds=null;}}}},{key:'getClipBounds',value:function getClipBounds(){return this.mClipBounds!=null?new Rect(this.mClipBounds):null;}},{key:'setCornerRadius',value:function setCornerRadius(radiusTopLeft){var radiusTopRight=arguments.length<=1||arguments[1]===undefined?radiusTopLeft:arguments[1];var radiusBottomRight=arguments.length<=2||arguments[2]===undefined?radiusTopRight:arguments[2];var radiusBottomLeft=arguments.length<=3||arguments[3]===undefined?radiusBottomRight:arguments[3];this.setCornerRadiusTopLeft(radiusTopLeft);this.setCornerRadiusTopRight(radiusTopRight);this.setCornerRadiusBottomRight(radiusBottomRight);this.setCornerRadiusBottomLeft(radiusBottomLeft);}},{key:'setCornerRadiusTopLeft',value:function setCornerRadiusTopLeft(value){if(this.mCornerRadiusTopLeft!=value){this.mCornerRadiusTopLeft=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusTopLeft',value:function getCornerRadiusTopLeft(){return this.mCornerRadiusTopLeft;}},{key:'setCornerRadiusTopRight',value:function setCornerRadiusTopRight(value){if(this.mCornerRadiusTopRight!=value){this.mCornerRadiusTopRight=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusTopRight',value:function getCornerRadiusTopRight(){return this.mCornerRadiusTopRight;}},{key:'setCornerRadiusBottomRight',value:function setCornerRadiusBottomRight(value){if(this.mCornerRadiusBottomRight!=value){this.mCornerRadiusBottomRight=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusBottomRight',value:function getCornerRadiusBottomRight(){return this.mCornerRadiusBottomRight;}},{key:'setCornerRadiusBottomLeft',value:function setCornerRadiusBottomLeft(value){if(this.mCornerRadiusBottomLeft!=value){this.mCornerRadiusBottomLeft=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusBottomLeft',value:function getCornerRadiusBottomLeft(){return this.mCornerRadiusBottomLeft;}},{key:'setShadowView',value:function setShadowView(radius,dx,dy,color){if(!this.mShadowPaint)this.mShadowPaint=new Paint();this.mShadowPaint.setShadowLayer(radius,dx,dy,color);this.invalidate();}},{key:'getDrawingTime',value:function getDrawingTime(){return this.getViewRootImpl()!=null?this.getViewRootImpl().mDrawingTime:0;}},{key:'drawFromParent',value:function drawFromParent(canvas,parent,drawingTime){var useDisplayListProperties=false;var more=false;var childHasIdentityMatrix=this.hasIdentityMatrix();var flags=parent.mGroupFlags;if((flags&view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION)==view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION){parent.getChildTransformation().clear();parent.mGroupFlags&=~view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}var transformToApply=null;var concatMatrix=false;var scalingRequired=false;var caching=false;var layerType=this.getLayerType();var hardwareAccelerated=false;var nativeAccelerated=canvas.isNativeAccelerated();if((flags&view_2.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE)!=0||(flags&view_2.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE)!=0){caching=true;}else {caching=layerType!=View.LAYER_TYPE_NONE||hardwareAccelerated||nativeAccelerated;}var a=this.getAnimation();if(a!=null){more=this.drawAnimation(parent,drawingTime,a,scalingRequired);concatMatrix=a.willChangeTransformationMatrix();if(concatMatrix){this.mPrivateFlags3|=View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM;}transformToApply=parent.getChildTransformation();}else {if(!useDisplayListProperties&&(flags&view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS)!=0){var t=parent.getChildTransformation();var hasTransform=parent.getChildStaticTransformation(this,t);if(hasTransform){var transformType=t.getTransformationType();transformToApply=transformType!=Transformation.TYPE_IDENTITY?t:null;concatMatrix=(transformType&Transformation.TYPE_MATRIX)!=0;}}}concatMatrix=!childHasIdentityMatrix||concatMatrix;this.mPrivateFlags|=View.PFLAG_DRAWN;if(!concatMatrix&&(flags&(view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS|view_2.ViewGroup.FLAG_CLIP_CHILDREN))==view_2.ViewGroup.FLAG_CLIP_CHILDREN&&canvas.quickReject(this.mLeft,this.mTop,this.mRight,this.mBottom)&&(this.mPrivateFlags&View.PFLAG_DRAW_ANIMATION)==0){this.mPrivateFlags2|=View.PFLAG2_VIEW_QUICK_REJECTED;return more;}this.mPrivateFlags2&=~View.PFLAG2_VIEW_QUICK_REJECTED;var cache=null;if(caching){if(layerType!=View.LAYER_TYPE_NONE){layerType=View.LAYER_TYPE_SOFTWARE;this.buildDrawingCache(true);}cache=this.getDrawingCache(true);}this.computeScroll();var sx=this.mScrollX;var sy=this.mScrollY;this.requestSyncBoundToElement();var hasNoCache=cache==null;var offsetForScroll=cache==null;var restoreTo=canvas.save();if(offsetForScroll){canvas.translate(this.mLeft-sx,this.mTop-sy);}else {canvas.translate(this.mLeft,this.mTop);}var alpha=this.getAlpha()*this.getTransitionAlpha();if(transformToApply!=null||alpha<1||!this.hasIdentityMatrix()||(this.mPrivateFlags3&View.PFLAG3_VIEW_IS_ANIMATING_ALPHA)==View.PFLAG3_VIEW_IS_ANIMATING_ALPHA){if(transformToApply!=null||!childHasIdentityMatrix){var transX=0;var transY=0;if(offsetForScroll){transX=-sx;transY=-sy;}if(transformToApply!=null){if(concatMatrix){canvas.translate(-transX,-transY);canvas.concat(transformToApply.getMatrix());canvas.translate(transX,transY);parent.mGroupFlags|=view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}var transformAlpha=transformToApply.getAlpha();if(transformAlpha<1){alpha*=transformAlpha;parent.mGroupFlags|=view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}}if(!childHasIdentityMatrix&&!useDisplayListProperties){canvas.translate(-transX,-transY);canvas.concat(this.getMatrix());canvas.translate(transX,transY);}}if(alpha<1||(this.mPrivateFlags3&View.PFLAG3_VIEW_IS_ANIMATING_ALPHA)==View.PFLAG3_VIEW_IS_ANIMATING_ALPHA){if(alpha<1){this.mPrivateFlags3|=View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;}else {this.mPrivateFlags3&=~View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;}parent.mGroupFlags|=view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;if(hasNoCache){var multipliedAlpha=Math.floor(255*alpha);if(!this.onSetAlpha(multipliedAlpha)){canvas.multiplyGlobalAlpha(alpha);}else {this.mPrivateFlags|=View.PFLAG_ALPHA_SET;}}}}else if((this.mPrivateFlags&View.PFLAG_ALPHA_SET)==View.PFLAG_ALPHA_SET){this.onSetAlpha(255);this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;}if(this.mShadowPaint!=null)this.drawShadow(canvas);if((flags&view_2.ViewGroup.FLAG_CLIP_CHILDREN)==view_2.ViewGroup.FLAG_CLIP_CHILDREN&&!useDisplayListProperties&&cache==null){if(offsetForScroll){canvas.clipRect(sx,sy,sx+(this.mRight-this.mLeft),sy+(this.mBottom-this.mTop),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}else {if(!scalingRequired||cache==null){canvas.clipRect(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop,this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}else {canvas.clipRect(0,0,cache.getWidth(),cache.getHeight(),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}}}if(hasNoCache){if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)==View.PFLAG_SKIP_DRAW){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;this.dispatchDraw(canvas);}else {this.draw(canvas);}}else if(cache!=null){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;canvas.multiplyGlobalAlpha(alpha);if(layerType==View.LAYER_TYPE_NONE){if(alpha<1){parent.mGroupFlags|=view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;}else if((flags&view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE)!=0){parent.mGroupFlags&=~view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;}}canvas.clipRect(0,0,cache.getWidth(),cache.getHeight(),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);canvas.drawCanvas(cache,0,0);}if(restoreTo>=0){canvas.restoreToCount(restoreTo);}if(a!=null&&!more){if(!hardwareAccelerated&&!a.getFillAfter()){this.onSetAlpha(255);}parent.finishAnimatingView(this,a);}return more;}},{key:'drawShadow',value:function drawShadow(canvas){var shadowPaint=this.mShadowPaint;if(!shadowPaint||!shadowPaint.shadowRadius)return;var color=shadowPaint.shadowColor;if(!this.mShadowDrawable){var drawable=new RoundRectDrawable(shadowPaint.shadowColor,this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomLeft,this.mCornerRadiusBottomRight);this.mShadowDrawable=new ShadowDrawable(drawable,shadowPaint.shadowRadius,shadowPaint.shadowDx,shadowPaint.shadowDy,shadowPaint.shadowColor);}this.mShadowDrawable.draw(canvas);}},{key:'draw',value:function draw(canvas){if(this.mClipBounds!=null){canvas.clipRect(this.mClipBounds);}var privateFlags=this.mPrivateFlags;var dirtyOpaque=(privateFlags&View.PFLAG_DIRTY_MASK)==View.PFLAG_DIRTY_OPAQUE&&(this.getViewRootImpl()==null||!this.getViewRootImpl().mIgnoreDirtyState);this.mPrivateFlags=privateFlags&~View.PFLAG_DIRTY_MASK|View.PFLAG_DRAWN;if(!dirtyOpaque){var background=this.mBackground;if(background!=null){var scrollX=this.mScrollX;var scrollY=this.mScrollY;if(this.mBackgroundSizeChanged){background.setBounds(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);this.mBackgroundSizeChanged=false;}if((scrollX|scrollY)==0){background.draw(canvas);}else {canvas.translate(scrollX,scrollY);background.draw(canvas);canvas.translate(-scrollX,-scrollY);}}}if(!dirtyOpaque)this.onDraw(canvas);this.dispatchDraw(canvas);this.onDrawScrollBars(canvas);if(this.mOverlay!=null&&!this.mOverlay.isEmpty()){this.mOverlay.getOverlayView().dispatchDraw(canvas);}}},{key:'onDraw',value:function onDraw(canvas){}},{key:'dispatchDraw',value:function dispatchDraw(canvas){}},{key:'drawAnimation',value:function drawAnimation(parent,drawingTime,a,scalingRequired){var invalidationTransform=undefined;var flags=parent.mGroupFlags;var initialized=a.isInitialized();if(!initialized){a.initialize(this.mRight-this.mLeft,this.mBottom-this.mTop,parent.getWidth(),parent.getHeight());a.initializeInvalidateRegion(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);if(this.mAttachInfo!=null)a.setListenerHandler(this.mAttachInfo.mHandler);this.onAnimationStart();}var t=parent.getChildTransformation();var more=a.getTransformation(drawingTime,t,1);invalidationTransform=t;if(more){if(!a.willChangeBounds()){if((flags&(view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE|view_2.ViewGroup.FLAG_ANIMATION_DONE))==view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE){parent.mGroupFlags|=view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED;}else if((flags&view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED)==0){parent.mPrivateFlags|=View.PFLAG_DRAW_ANIMATION;parent.invalidate(this.mLeft,this.mTop,this.mRight,this.mBottom);}}else {if(parent.mInvalidateRegion==null){parent.mInvalidateRegion=new RectF();}var region=parent.mInvalidateRegion;a.getInvalidateRegion(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop,region,invalidationTransform);parent.mPrivateFlags|=View.PFLAG_DRAW_ANIMATION;var left=this.mLeft+Math.floor(region.left);var top=this.mTop+Math.floor(region.top);parent.invalidate(left,top,left+Math.floor(region.width()+.5),top+Math.floor(region.height()+.5));}}return more;}},{key:'onDrawScrollBars',value:function onDrawScrollBars(canvas){var cache=this.mScrollCache;if(cache!=null){var state=cache.state;if(state==ScrollabilityCache.OFF){return;}var invalidate=false;if(state==ScrollabilityCache.FADING){cache._computeAlphaToScrollBar();invalidate=true;}else {cache.scrollBar.setAlpha(255);}var viewFlags=this.mViewFlags;var drawHorizontalScrollBar=(viewFlags&View.SCROLLBARS_HORIZONTAL)==View.SCROLLBARS_HORIZONTAL;var drawVerticalScrollBar=(viewFlags&View.SCROLLBARS_VERTICAL)==View.SCROLLBARS_VERTICAL&&!this.isVerticalScrollBarHidden();if(drawVerticalScrollBar||drawHorizontalScrollBar){var width=this.mRight-this.mLeft;var height=this.mBottom-this.mTop;var scrollBar=cache.scrollBar;var scrollX=this.mScrollX;var scrollY=this.mScrollY;var inside=true;var left=undefined;var top=undefined;var right=undefined;var bottom=undefined;if(drawHorizontalScrollBar){var size=scrollBar.getSize(false);if(size<=0){size=cache.scrollBarSize;}scrollBar.setParameters(this.computeHorizontalScrollRange(),this.computeHorizontalScrollOffset(),this.computeHorizontalScrollExtent(),false);var verticalScrollBarGap=drawVerticalScrollBar?this.getVerticalScrollbarWidth():0;top=scrollY+height-size;left=scrollX+this.mPaddingLeft;right=scrollX+width- -verticalScrollBarGap;bottom=top+size;this.onDrawHorizontalScrollBar(canvas,scrollBar,left,top,right,bottom);if(invalidate){this.invalidate(left,top,right,bottom);}}if(drawVerticalScrollBar){var _size=scrollBar.getSize(true);if(_size<=0){_size=cache.scrollBarSize;}scrollBar.setParameters(this.computeVerticalScrollRange(),this.computeVerticalScrollOffset(),this.computeVerticalScrollExtent(),true);left=scrollX+width-_size;top=scrollY+this.mPaddingTop;right=left+_size;bottom=scrollY+height;this.onDrawVerticalScrollBar(canvas,scrollBar,left,top,right,bottom);if(invalidate){this.invalidate(left,top,right,bottom);}}}}}},{key:'isVerticalScrollBarHidden',value:function isVerticalScrollBarHidden(){return false;}},{key:'onDrawHorizontalScrollBar',value:function onDrawHorizontalScrollBar(canvas,scrollBar,l,t,r,b){scrollBar.setBounds(l,t,r,b);scrollBar.draw(canvas);}},{key:'onDrawVerticalScrollBar',value:function onDrawVerticalScrollBar(canvas,scrollBar,l,t,r,b){scrollBar.setBounds(l,t,r,b);scrollBar.draw(canvas);}},{key:'isHardwareAccelerated',value:function isHardwareAccelerated(){return false;}},{key:'setDrawingCacheEnabled',value:function setDrawingCacheEnabled(enabled){this.mCachingFailed=false;this.setFlags(enabled?View.DRAWING_CACHE_ENABLED:0,View.DRAWING_CACHE_ENABLED);}},{key:'isDrawingCacheEnabled',value:function isDrawingCacheEnabled(){return (this.mViewFlags&View.DRAWING_CACHE_ENABLED)==View.DRAWING_CACHE_ENABLED;}},{key:'getDrawingCache',value:function getDrawingCache(){var autoScale=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if((this.mViewFlags&View.WILL_NOT_CACHE_DRAWING)==View.WILL_NOT_CACHE_DRAWING){return null;}if((this.mViewFlags&View.DRAWING_CACHE_ENABLED)==View.DRAWING_CACHE_ENABLED){this.buildDrawingCache(autoScale);}return this.mUnscaledDrawingCache;}},{key:'setDrawingCacheBackgroundColor',value:function setDrawingCacheBackgroundColor(color){if(color!=this.mDrawingCacheBackgroundColor){this.mDrawingCacheBackgroundColor=color;this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;}}},{key:'getDrawingCacheBackgroundColor',value:function getDrawingCacheBackgroundColor(){return this.mDrawingCacheBackgroundColor;}},{key:'destroyDrawingCache',value:function destroyDrawingCache(){if(this.mUnscaledDrawingCache!=null){this.mUnscaledDrawingCache.recycle();this.mUnscaledDrawingCache=null;}}},{key:'buildDrawingCache',value:function buildDrawingCache(){var autoScale=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if((this.mPrivateFlags&View.PFLAG_DRAWING_CACHE_VALID)==0||this.mUnscaledDrawingCache==null){this.mCachingFailed=false;var width=this.mRight-this.mLeft;var height=this.mBottom-this.mTop;var attachInfo=this.mAttachInfo;var drawingCacheBackgroundColor=this.mDrawingCacheBackgroundColor;var opaque=drawingCacheBackgroundColor!=0||this.isOpaque();var projectedBitmapSize=width*height*4;var drawingCacheSize=view_2.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();if(width<=0||height<=0||projectedBitmapSize>drawingCacheSize){if(width>0&&height>0){Log.w(View.VIEW_LOG_TAG,"View too large to fit into drawing cache, needs "+projectedBitmapSize+" bytes, only "+drawingCacheSize+" available");}this.destroyDrawingCache();this.mCachingFailed=true;return;}if(this.mUnscaledDrawingCache&&(this.mUnscaledDrawingCache.getWidth()!==width||this.mUnscaledDrawingCache.getHeight()!==height)){this.mUnscaledDrawingCache.recycle();this.mUnscaledDrawingCache=null;}if(this.mUnscaledDrawingCache){this.mUnscaledDrawingCache.clearColor();}else {this.mUnscaledDrawingCache=new Canvas(width,height);}var canvas=this.mUnscaledDrawingCache;this.computeScroll();var restoreCount=canvas.save();canvas.translate(-this.mScrollX,-this.mScrollY);this.mPrivateFlags|=View.PFLAG_DRAWN;if(this.mAttachInfo==null||this.mLayerType!=View.LAYER_TYPE_NONE){this.mPrivateFlags|=View.PFLAG_DRAWING_CACHE_VALID;}if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)==View.PFLAG_SKIP_DRAW){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;this.dispatchDraw(canvas);if(this.mOverlay!=null&&!this.mOverlay.isEmpty()){this.mOverlay.getOverlayView().draw(canvas);}}else {this.draw(canvas);}canvas.restoreToCount(restoreCount);}}},{key:'setWillNotDraw',value:function setWillNotDraw(willNotDraw){this.setFlags(willNotDraw?View.WILL_NOT_DRAW:0,View.DRAW_MASK);}},{key:'willNotDraw',value:function willNotDraw(){return (this.mViewFlags&View.DRAW_MASK)==View.WILL_NOT_DRAW;}},{key:'setWillNotCacheDrawing',value:function setWillNotCacheDrawing(willNotCacheDrawing){this.setFlags(willNotCacheDrawing?View.WILL_NOT_CACHE_DRAWING:0,View.WILL_NOT_CACHE_DRAWING);}},{key:'willNotCacheDrawing',value:function willNotCacheDrawing(){return (this.mViewFlags&View.WILL_NOT_CACHE_DRAWING)==View.WILL_NOT_CACHE_DRAWING;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){if(who===this.mBackground){var w=who.getIntrinsicWidth();if(w<0)w=this.mBackgroundWidth;var h=who.getIntrinsicHeight();if(h<0)h=this.mBackgroundHeight;if(w!=this.mBackgroundWidth||h!=this.mBackgroundHeight){var padding=new Rect();if(who.getPadding(padding)){this.setPadding(padding.left,padding.top,padding.right,padding.bottom);}this.mBackgroundWidth=w;this.mBackgroundHeight=h;this.requestLayout();}}else if(this.verifyDrawable(who)){this.requestLayout();}}},{key:'invalidateDrawable',value:function invalidateDrawable(drawable){if(this.verifyDrawable(drawable)){var dirty=drawable.getBounds();var scrollX=this.mScrollX;var scrollY=this.mScrollY;this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(this.verifyDrawable(who)&&what!=null){var delay=when-SystemClock.uptimeMillis();if(this.mAttachInfo!=null){this.mAttachInfo.mHandler.postAtTime(what,who,when);}else {view_2.ViewRootImpl.getRunQueue().postDelayed(what,delay);}}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(this.verifyDrawable(who)&&what!=null){if(this.mAttachInfo!=null){this.mAttachInfo.mHandler.removeCallbacks(what,who);}else {view_2.ViewRootImpl.getRunQueue().removeCallbacks(what);}}else if(what===null){if(this.mAttachInfo!=null&&who!=null){this.mAttachInfo.mHandler.removeCallbacksAndMessages(who);}}}},{key:'verifyDrawable',value:function verifyDrawable(who){return who==this.mBackground;}},{key:'drawableStateChanged',value:function drawableStateChanged(){this.getDrawableState();var d=this.mBackground;if(d!=null&&d.isStateful()){d.setState(this.getDrawableState());}}},{key:'resolveDrawables',value:function resolveDrawables(){}},{key:'refreshDrawableState',value:function refreshDrawableState(){this.mPrivateFlags|=View.PFLAG_DRAWABLE_STATE_DIRTY;this.drawableStateChanged();var parent=this.mParent;if(parent!=null){parent.childDrawableStateChanged(this);}}},{key:'getDrawableState',value:function getDrawableState(){if(this.mDrawableState!=null&&(this.mPrivateFlags&View.PFLAG_DRAWABLE_STATE_DIRTY)==0){return this.mDrawableState;}else {var oldDrawableState=this.mDrawableState;this.mDrawableState=this.onCreateDrawableState(0);this.mPrivateFlags&=~View.PFLAG_DRAWABLE_STATE_DIRTY;this._fireStateChangeToAttribute(oldDrawableState,this.mDrawableState);return this.mDrawableState;}}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if((this.mViewFlags&View.DUPLICATE_PARENT_STATE)==View.DUPLICATE_PARENT_STATE&&this.mParent instanceof View){return this.mParent.onCreateDrawableState(extraSpace);}var drawableState=undefined;var privateFlags=this.mPrivateFlags;var viewStateIndex=0;if((privateFlags&View.PFLAG_PRESSED)!=0)viewStateIndex|=View.VIEW_STATE_PRESSED;if((this.mViewFlags&View.ENABLED_MASK)==View.ENABLED)viewStateIndex|=View.VIEW_STATE_ENABLED;if(this.isFocused())viewStateIndex|=View.VIEW_STATE_FOCUSED;if((privateFlags&View.PFLAG_SELECTED)!=0)viewStateIndex|=View.VIEW_STATE_SELECTED;if(this.hasWindowFocus())viewStateIndex|=View.VIEW_STATE_WINDOW_FOCUSED;if((privateFlags&View.PFLAG_ACTIVATED)!=0)viewStateIndex|=View.VIEW_STATE_ACTIVATED;var privateFlags2=this.mPrivateFlags2;drawableState=View.VIEW_STATE_SETS[viewStateIndex];if(extraSpace==0){return drawableState;}var fullState=undefined;if(drawableState!=null){fullState=androidui.util.ArrayCreator.newNumberArray(drawableState.length+extraSpace);System.arraycopy(drawableState,0,fullState,0,drawableState.length);}else {fullState=androidui.util.ArrayCreator.newNumberArray(extraSpace);}return fullState;}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){if(this.mBackground!=null){this.mBackground.jumpToCurrentState();}}},{key:'setBackgroundColor',value:function setBackgroundColor(color){if(this.mBackground instanceof ColorDrawable){this.mBackground.mutate().setColor(color);this.computeOpaqueFlags();}else {this.setBackground(new ColorDrawable(color));}}},{key:'setBackground',value:function setBackground(background){this.setBackgroundDrawable(background);}},{key:'getBackground',value:function getBackground(){return this.mBackground;}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(background){this.computeOpaqueFlags();if(background==this.mBackground){return;}var requestLayout=false;if(this.mBackground!=null){this.mBackground.setCallback(null);this.unscheduleDrawable(this.mBackground);}if(background!=null){var padding=new Rect();if(background.getPadding(padding)){this.setPadding(padding.left,padding.top,padding.right,padding.bottom);}if(this.mBackground==null||this.mBackground.getMinimumHeight()!=background.getMinimumHeight()||this.mBackground.getMinimumWidth()!=background.getMinimumWidth()){requestLayout=true;}background.setCallback(this);if(background.isStateful()){background.setState(this.getDrawableState());}background.setVisible(this.getVisibility()==View.VISIBLE,false);this.mBackground=background;this.mBackgroundWidth=background.getIntrinsicWidth();this.mBackgroundHeight=background.getIntrinsicHeight();if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)!=0){this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;this.mPrivateFlags|=View.PFLAG_ONLY_DRAWS_BACKGROUND;requestLayout=true;}}else {this.mBackground=null;this.mBackgroundWidth=this.mBackgroundHeight=-1;if((this.mPrivateFlags&View.PFLAG_ONLY_DRAWS_BACKGROUND)!=0){this.mPrivateFlags&=~View.PFLAG_ONLY_DRAWS_BACKGROUND;this.mPrivateFlags|=View.PFLAG_SKIP_DRAW;}requestLayout=true;}this.computeOpaqueFlags();if(requestLayout){this.requestLayout();}this.mBackgroundSizeChanged=true;this.mShadowDrawable=null;this.invalidate(true);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){return this.getWidth();}},{key:'computeHorizontalScrollOffset',value:function computeHorizontalScrollOffset(){return this.mScrollX;}},{key:'computeHorizontalScrollExtent',value:function computeHorizontalScrollExtent(){return this.getWidth();}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){return this.getHeight();}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return this.mScrollY;}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight();}},{key:'canScrollHorizontally',value:function canScrollHorizontally(direction){var offset=this.computeHorizontalScrollOffset();var range=this.computeHorizontalScrollRange()-this.computeHorizontalScrollExtent();if(range==0)return false;if(direction<0){return offset>0;}else {return offset0;}else {return offsetthis.computeHorizontalScrollExtent();var canScrollVertical=this.computeVerticalScrollRange()>this.computeVerticalScrollExtent();var overScrollHorizontal=overScrollMode==View.OVER_SCROLL_ALWAYS||overScrollMode==View.OVER_SCROLL_IF_CONTENT_SCROLLS&&canScrollHorizontal;var overScrollVertical=overScrollMode==View.OVER_SCROLL_ALWAYS||overScrollMode==View.OVER_SCROLL_IF_CONTENT_SCROLLS&&canScrollVertical;if(isTouchEvent){if(deltaX<0&&scrollX<=0||deltaX>0&&scrollX>=scrollRangeX){deltaX/=2;}if(deltaY<0&&scrollY<=0||deltaY>0&&scrollY>=scrollRangeY){deltaY/=2;}}var newScrollX=scrollX+deltaX;if(!overScrollHorizontal){maxOverScrollX=0;}var newScrollY=scrollY+deltaY;if(!overScrollVertical){maxOverScrollY=0;}var left=-maxOverScrollX;var right=maxOverScrollX+scrollRangeX;var top=-maxOverScrollY;var bottom=maxOverScrollY+scrollRangeY;var clampedX=false;if(newScrollX>right){newScrollX=right;clampedX=true;}else if(newScrollXbottom){newScrollY=bottom;clampedY=true;}else if(newScrollY0){var _iteratorNormalCompletion41=true;var _didIteratorError41=false;var _iteratorError41=undefined;try{for(var _iterator41=listeners[Symbol.iterator](),_step41;!(_iteratorNormalCompletion41=(_step41=_iterator41.next()).done);_iteratorNormalCompletion41=true){var listener=_step41.value;listener.onViewAttachedToWindow(this);}}catch(err){_didIteratorError41=true;_iteratorError41=err;}finally {try{if(!_iteratorNormalCompletion41&&_iterator41.return){_iterator41.return();}}finally {if(_didIteratorError41){throw _iteratorError41;}}}}var vis=info.mWindowVisibility;if(vis!=View.GONE){this.onWindowVisibilityChanged(vis);}if((this.mPrivateFlags&View.PFLAG_DRAWABLE_STATE_DIRTY)!=0){this.refreshDrawableState();}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){if((this.mPrivateFlags&View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH)!=0){this.initialAwakenScrollBars();this.mPrivateFlags&=~View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;}this.mPrivateFlags3&=~View.PFLAG3_IS_LAID_OUT;this.jumpDrawablesToCurrentState();}},{key:'dispatchDetachedFromWindow',value:function dispatchDetachedFromWindow(){var info=this.mAttachInfo;if(info!=null){var vis=info.mWindowVisibility;if(vis!=View.GONE){this.onWindowVisibilityChanged(View.GONE);}}this.onDetachedFromWindow();if(this.dependOnDebugLayout()){this.getContext().androidUI.viewDetachedDependOnDebugLayout(this);}var li=this.mListenerInfo;var listeners=li!=null?li.mOnAttachStateChangeListeners:null;if(listeners!=null&&listeners.size()>0){var _iteratorNormalCompletion42=true;var _didIteratorError42=false;var _iteratorError42=undefined;try{for(var _iterator42=listeners[Symbol.iterator](),_step42;!(_iteratorNormalCompletion42=(_step42=_iterator42.next()).done);_iteratorNormalCompletion42=true){var listener=_step42.value;listener.onViewDetachedFromWindow(this);}}catch(err){_didIteratorError42=true;_iteratorError42=err;}finally {try{if(!_iteratorNormalCompletion42&&_iterator42.return){_iterator42.return();}}finally {if(_didIteratorError42){throw _iteratorError42;}}}}if((this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0){this.mAttachInfo.mScrollContainers.delete(this);this.mPrivateFlags&=~View.PFLAG_SCROLL_CONTAINER_ADDED;}this.mAttachInfo=null;if(this.mOverlay!=null){this.mOverlay.getOverlayView().dispatchDetachedFromWindow();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){this.mPrivateFlags&=~View.PFLAG_CANCEL_NEXT_UP_EVENT;this.mPrivateFlags3&=~View.PFLAG3_IS_LAID_OUT;this.removeUnsetPressCallback();this.removeLongPressCallback();this.removePerformClickCallback();this.destroyDrawingCache();this.cleanupDraw();this.mCurrentAnimation=null;}},{key:'cleanupDraw',value:function cleanupDraw(){if(this.mAttachInfo!=null){this.mAttachInfo.mViewRootImpl.cancelInvalidate(this);}}},{key:'isInEditMode',value:function isInEditMode(){return false;}},{key:'debug',value:function debug(){var depth=arguments.length<=0||arguments[0]===undefined?0:arguments[0];console.dir(this.bindElement);}},{key:'toString',value:function toString(){return this.tagName();}},{key:'getRootView',value:function getRootView(){if(this.mAttachInfo!=null){var v=this.mAttachInfo.mRootView;if(v!=null){return v;}}var parent=this;while(parent.mParent!=null&&parent.mParent instanceof View){parent=parent.mParent;}return parent;}},{key:'findViewById',value:function findViewById(id){if(!id)return null;return this.findViewTraversal(id);}},{key:'findViewWithTag',value:function findViewWithTag(tag){if(!tag)return null;return this.findViewWithTagTraversal(tag);}},{key:'findViewTraversal',value:function findViewTraversal(id){if(id==this.mID){return this;}return null;}},{key:'findViewWithTagTraversal',value:function findViewWithTagTraversal(tag){if(tag!=null&&tag===this.mTag){return this;}return null;}},{key:'findViewByPredicate',value:function findViewByPredicate(predicate){return this.findViewByPredicateTraversal(predicate,null);}},{key:'findViewByPredicateTraversal',value:function findViewByPredicateTraversal(predicate,childToSkip){if(predicate.apply(this)){return this;}return null;}},{key:'findViewByPredicateInsideOut',value:function findViewByPredicateInsideOut(start,predicate){var childToSkip=null;for(;;){var _view4=start.findViewByPredicateTraversal(predicate,childToSkip);if(_view4!=null||start==this){return _view4;}var parent=start.getParent();if(parent==null||!(parent instanceof View)){return null;}childToSkip=start;start=parent;}}},{key:'setId',value:function setId(id){this.mID=id;}},{key:'getId',value:function getId(){return this.mID;}},{key:'getTag',value:function getTag(){return this.mTag;}},{key:'setTag',value:function setTag(tag){this.mTag=tag;}},{key:'setIsRootNamespace',value:function setIsRootNamespace(isRoot){if(isRoot){this.mPrivateFlags|=View.PFLAG_IS_ROOT_NAMESPACE;}else {this.mPrivateFlags&=~View.PFLAG_IS_ROOT_NAMESPACE;}}},{key:'isRootNamespace',value:function isRootNamespace(){return (this.mPrivateFlags&View.PFLAG_IS_ROOT_NAMESPACE)!=0;}},{key:'getResources',value:function getResources(){var context=this.getContext();if(context!=null){return context.getResources();}return Resources.getSystem();}},{key:'_AttrObserverCallBack',value:function _AttrObserverCallBack(arr,observer){arr.forEach(function(record){var target=record.target;var androidView=target[View.AndroidViewProperty];if(!androidView)return;var attrName=record.attributeName;var newValue=target.getAttribute(attrName);var oldValue=record.oldValue;if(newValue===oldValue)return;androidView.onBindElementAttributeChanged(attrName,record.oldValue,newValue);});}},{key:'initBindElement',value:function initBindElement(bindElement){if(this.bindElement){this.bindElement[View.AndroidViewProperty]=null;}this.bindElement=bindElement||document.createElement(this.tagName());this.bindElement.style.position='absolute';var oldBindView=this.bindElement[View.AndroidViewProperty];if(oldBindView){if(oldBindView._AttrObserver)oldBindView._AttrObserver.disconnect();}this.bindElement[View.AndroidViewProperty]=this;this._stateAttrList=new StateAttrList(this);this._initAttrObserver();}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?this.dependOnDebugLayout():arguments[0];var rootView=this.getRootView();if(!rootView)return;if(!rootView._syncToElementRun){rootView._syncToElementRun={run:function run(){rootView._syncToElementLock=false;rootView._syncToElementImmediatelyLock=false;rootView._syncBoundAndScrollToElement();}};}if(immediately){if(rootView._syncToElementImmediatelyLock)return;rootView._syncToElementImmediatelyLock=true;rootView._syncToElementLock=true;rootView.removeCallbacks(rootView._syncToElementRun);rootView.post(rootView._syncToElementRun);return;}if(rootView._syncToElementLock)return;rootView._syncToElementLock=true;rootView.postDelayed(rootView._syncToElementRun,1000);}},{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){if(!this.isAttachedToWindow()){return;}var left=this.mLeft;var top=this.mTop;var width=this.getWidth();var height=this.getHeight();var parent=this.getParent();var pScrollX=parent instanceof View?parent.mScrollX:0;var pScrollY=parent instanceof View?parent.mScrollY:0;if(left!==this._lastSyncLeft||top!==this._lastSyncTop||width!==this._lastSyncWidth||height!==this._lastSyncHeight||pScrollX!==this._lastSyncScrollX||pScrollY!==this._lastSyncScrollY){this._lastSyncLeft=left;this._lastSyncTop=top;this._lastSyncWidth=width;this._lastSyncHeight=height;this._lastSyncScrollX=pScrollX;this._lastSyncScrollY=pScrollY;var density=this.getResources().getDisplayMetrics().density;var bind=this.bindElement;bind.style.width=width/density+'px';bind.style.height=height/density+'px';bind.style.left=(left-pScrollX)/density+'px';bind.style.top=(top-pScrollY)/density+'px';if(bind.parentElement){bind.parentElement.scrollTop=0;}this.getMatrix();}if(this instanceof view_2.ViewGroup){var group=this;for(var i=0,count=group.getChildCount();i=0&&!baseState[i]){i--;}System.arraycopy(additionalState,0,baseState,i+1,additionalState.length);return baseState;}},{key:'inflate',value:function inflate(context,xml,root){return view_2.LayoutInflater.from(context).inflate(xml,root);}}]);return View;}(JavaObject);View.DBG=Log.View_DBG;View.VIEW_LOG_TAG="View";View.PFLAG_WANTS_FOCUS=0x00000001;View.PFLAG_FOCUSED=0x00000002;View.PFLAG_SELECTED=0x00000004;View.PFLAG_IS_ROOT_NAMESPACE=0x00000008;View.PFLAG_HAS_BOUNDS=0x00000010;View.PFLAG_DRAWN=0x00000020;View.PFLAG_DRAW_ANIMATION=0x00000040;View.PFLAG_SKIP_DRAW=0x00000080;View.PFLAG_ONLY_DRAWS_BACKGROUND=0x00000100;View.PFLAG_REQUEST_TRANSPARENT_REGIONS=0x00000200;View.PFLAG_DRAWABLE_STATE_DIRTY=0x00000400;View.PFLAG_MEASURED_DIMENSION_SET=0x00000800;View.PFLAG_FORCE_LAYOUT=0x00001000;View.PFLAG_LAYOUT_REQUIRED=0x00002000;View.PFLAG_PRESSED=0x00004000;View.PFLAG_DRAWING_CACHE_VALID=0x00008000;View.PFLAG_ANIMATION_STARTED=0x00010000;View.PFLAG_ALPHA_SET=0x00040000;View.PFLAG_SCROLL_CONTAINER=0x00080000;View.PFLAG_SCROLL_CONTAINER_ADDED=0x00100000;View.PFLAG_DIRTY=0x00200000;View.PFLAG_DIRTY_OPAQUE=0x00400000;View.PFLAG_DIRTY_MASK=0x00600000;View.PFLAG_OPAQUE_BACKGROUND=0x00800000;View.PFLAG_OPAQUE_SCROLLBARS=0x01000000;View.PFLAG_OPAQUE_MASK=0x01800000;View.PFLAG_PREPRESSED=0x02000000;View.PFLAG_CANCEL_NEXT_UP_EVENT=0x04000000;View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH=0x08000000;View.PFLAG_HOVERED=0x10000000;View.PFLAG_PIVOT_EXPLICITLY_SET=0x20000000;View.PFLAG_ACTIVATED=0x40000000;View.PFLAG_INVALIDATED=0x80000000;View.PFLAG2_VIEW_QUICK_REJECTED=0x10000000;View.PFLAG2_HAS_TRANSIENT_STATE=0x80000000;View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM=0x1;View.PFLAG3_VIEW_IS_ANIMATING_ALPHA=0x2;View.PFLAG3_IS_LAID_OUT=0x4;View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT=0x8;View.PFLAG3_CALLED_SUPER=0x10;View.NOT_FOCUSABLE=0x00000000;View.FOCUSABLE=0x00000001;View.FOCUSABLE_MASK=0x00000001;View.OVER_SCROLL_ALWAYS=0;View.OVER_SCROLL_IF_CONTENT_SCROLLS=1;View.OVER_SCROLL_NEVER=2;View.MEASURED_SIZE_MASK=0x00ffffff;View.MEASURED_STATE_MASK=0xff000000;View.MEASURED_HEIGHT_STATE_SHIFT=16;View.MEASURED_STATE_TOO_SMALL=0x01000000;View.VISIBILITY_MASK=0x0000000C;View.VISIBLE=0x00000000;View.INVISIBLE=0x00000004;View.GONE=0x00000008;View.ENABLED=0x00000000;View.DISABLED=0x00000020;View.ENABLED_MASK=0x00000020;View.WILL_NOT_DRAW=0x00000080;View.DRAW_MASK=0x00000080;View.SCROLLBARS_NONE=0x00000000;View.SCROLLBARS_HORIZONTAL=0x00000100;View.SCROLLBARS_VERTICAL=0x00000200;View.SCROLLBARS_MASK=0x00000300;View.FOCUSABLES_ALL=0x00000000;View.FOCUSABLES_TOUCH_MODE=0x00000001;View.FOCUS_BACKWARD=0x00000001;View.FOCUS_FORWARD=0x00000002;View.FOCUS_LEFT=0x00000011;View.FOCUS_UP=0x00000021;View.FOCUS_RIGHT=0x00000042;View.FOCUS_DOWN=0x00000082;View.VIEW_STATE_WINDOW_FOCUSED=1;View.VIEW_STATE_SELECTED=1<<1;View.VIEW_STATE_FOCUSED=1<<2;View.VIEW_STATE_ENABLED=1<<3;View.VIEW_STATE_DISABLE=-View.VIEW_STATE_ENABLED;View.VIEW_STATE_PRESSED=1<<4;View.VIEW_STATE_ACTIVATED=1<<5;View.VIEW_STATE_HOVERED=1<<7;View.VIEW_STATE_CHECKED=1<<10;View.VIEW_STATE_MULTILINE=1<<11;View.VIEW_STATE_EXPANDED=1<<12;View.VIEW_STATE_EMPTY=1<<13;View.VIEW_STATE_LAST=1<<14;View.VIEW_STATE_IDS=[View.VIEW_STATE_WINDOW_FOCUSED,View.VIEW_STATE_WINDOW_FOCUSED,View.VIEW_STATE_SELECTED,View.VIEW_STATE_SELECTED,View.VIEW_STATE_FOCUSED,View.VIEW_STATE_FOCUSED,View.VIEW_STATE_ENABLED,View.VIEW_STATE_ENABLED,View.VIEW_STATE_PRESSED,View.VIEW_STATE_PRESSED,View.VIEW_STATE_ACTIVATED,View.VIEW_STATE_ACTIVATED,View.VIEW_STATE_HOVERED,View.VIEW_STATE_HOVERED];View._static=function(){function Integer_bitCount(i){i=i-(i>>>1&0x55555555);i=(i&0x33333333)+(i>>>2&0x33333333);i=i+(i>>>4)&0x0f0f0f0f;i=i+(i>>>8);i=i+(i>>>16);return i&0x3f;}var orderedIds=View.VIEW_STATE_IDS;var NUM_BITS=View.VIEW_STATE_IDS.length/2;View.VIEW_STATE_SETS=new Array(1<=this.fadeStartTime){this.state=ScrollabilityCache.FADING;this.host.invalidate(true);}}},{key:'_computeAlphaToScrollBar',value:function _computeAlphaToScrollBar(){var now=AnimationUtils.currentAnimationTimeMillis();var factor=(now-this.fadeStartTime)/this.scrollBarFadeDuration;if(factor>=1){this.state=ScrollabilityCache.OFF;factor=1;}var alpha=1-this.interpolator.getInterpolation(factor);this.scrollBar.setAlpha(255*alpha);}}]);return ScrollabilityCache;}();ScrollabilityCache.OFF=0;ScrollabilityCache.ON=1;ScrollabilityCache.FADING=2;var MatchIdPredicate=function(){function MatchIdPredicate(){_classCallCheck(this,MatchIdPredicate);}_createClass(MatchIdPredicate,[{key:'apply',value:function apply(view){return view.mID===this.mId;}}]);return MatchIdPredicate;}();})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var Canvas=android.graphics.Canvas;var Surface=function(){function Surface(canvasElement,viewRoot){_classCallCheck(this,Surface);this.mLockedRect=new Rect();this.mCanvasBound=new Rect();this.mSupportDirtyDraw=true;this.mLockSaveCount=1;this.mCanvasElement=canvasElement;this.viewRoot=viewRoot;this.initImpl();}_createClass(Surface,[{key:'initImpl',value:function initImpl(){this.initCanvasBound();}},{key:'isValid',value:function isValid(){return true;}},{key:'notifyBoundChange',value:function notifyBoundChange(){this.initCanvasBound();}},{key:'initCanvasBound',value:function initCanvasBound(){var density=android.content.res.Resources.getDisplayMetrics().density;var clientRect=this.mCanvasElement.getBoundingClientRect();this.mCanvasBound.set(clientRect.left*density,clientRect.top*density,clientRect.right*density,clientRect.bottom*density);}},{key:'lockCanvas',value:function lockCanvas(dirty){var fullWidth=this.mCanvasBound.width();var fullHeight=this.mCanvasBound.height();if(!this.mSupportDirtyDraw)dirty.set(0,0,fullWidth,fullHeight);var rect=this.mLockedRect;rect.set(Math.floor(dirty.left),Math.floor(dirty.top),Math.ceil(dirty.right),Math.ceil(dirty.bottom));if(dirty.isEmpty()){rect.set(0,0,fullWidth,fullHeight);}if(rect.isEmpty())return null;return this.lockCanvasImpl(rect.left,rect.top,rect.width(),rect.height());}},{key:'lockCanvasImpl',value:function lockCanvasImpl(left,top,width,height){var canvas=undefined;if(Surface.DrawToCacheFirstMode){canvas=new Canvas(width,height);if(left!=0||top!=0)canvas.translate(-left,-top);}else {canvas=new SurfaceLockCanvas(this.mCanvasBound.width(),this.mCanvasBound.height(),this.mCanvasElement);this.mLockSaveCount=canvas.save();canvas.clipRect(left,top,left+width,top+height);}return canvas;}},{key:'unlockCanvasAndPost',value:function unlockCanvasAndPost(canvas){if(Surface.DrawToCacheFirstMode){var mCanvasContent=this.mCanvasElement.getContext('2d');if(canvas.mCanvasElement)mCanvasContent.drawImage(canvas.mCanvasElement,this.mLockedRect.left,this.mLockedRect.top);canvas.recycle();}else {canvas.restoreToCount(this.mLockSaveCount);}}},{key:'showFps',value:function showFps(fps){if(!this._showFPSNode){this._showFPSNode=document.createElement('div');this._showFPSNode.style.position='absolute';this._showFPSNode.style.top='0';this._showFPSNode.style.left='0';this._showFPSNode.style.width='60px';this._showFPSNode.style.fontSize='14px';this._showFPSNode.style.background='black';this._showFPSNode.style.color='white';this._showFPSNode.style.opacity='0.7';this._showFPSNode.style.zIndex='1';this.mCanvasElement.parentNode.appendChild(this._showFPSNode);}this._showFPSNode.innerText='FPS:'+fps.toFixed(1);}}]);return Surface;}();Surface.DrawToCacheFirstMode=false;view.Surface=Surface;var SurfaceLockCanvas=function(_Canvas){_inherits(SurfaceLockCanvas,_Canvas);function SurfaceLockCanvas(width,height,canvasElement){_classCallCheck(this,SurfaceLockCanvas);var _this40=_possibleConstructorReturn(this,Object.getPrototypeOf(SurfaceLockCanvas).call(this,width,height));_this40.mCanvasElement=canvasElement;_this40._mCanvasContent=_this40.mCanvasElement.getContext("2d");return _this40;}_createClass(SurfaceLockCanvas,[{key:'initCanvasImpl',value:function initCanvasImpl(){}}]);return SurfaceLockCanvas;}(Canvas);})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view_3){var View=android.view.View;var Rect=android.graphics.Rect;var Handler=android.os.Handler;var SystemClock=android.os.SystemClock;var System=java.lang.System;var Log=android.util.Log;var Surface=android.view.Surface;var ViewRootImpl=function(){function ViewRootImpl(){_classCallCheck(this,ViewRootImpl);this.mViewVisibility=View.GONE;this.mStopped=false;this.mWidth=-1;this.mHeight=-1;this.mDirty=new Rect();this.mIsAnimating=false;this.mTempRect=new Rect();this.mVisRect=new Rect();this.mTraversalScheduled=false;this.mWillDrawSoon=false;this.mIsInTraversal=false;this.mLayoutRequested=false;this.mFirst=true;this.mFullRedrawNeeded=false;this.mIsDrawing=false;this.mAdded=false;this.mAddedTouchMode=false;this.mInTouchMode=false;this.mWinFrame=new Rect();this.mLayoutRequesters=[];this.mHandler=new ViewRootHandler();this.mViewScrollChanged=false;this.mTreeObserver=new view_3.ViewTreeObserver();this.mIgnoreDirtyState=false;this.mSetIgnoreDirtyState=false;this.mDrawingTime=0;this.mFpsStartTime=-1;this.mFpsPrevTime=-1;this.mFpsNumFrames=0;this.mTraversalRunnable=new TraversalRunnable(this);this._continueTraversalesCount=0;this.mInvalidateOnAnimationRunnable=new InvalidateOnAnimationRunnable(this.mHandler);}_createClass(ViewRootImpl,[{key:'initSurface',value:function initSurface(canvasElement){this.mSurface=new Surface(canvasElement,this);}},{key:'notifyResized',value:function notifyResized(frame){this.mWinFrame.set(frame.left,frame.top,frame.right,frame.bottom);this.requestLayout();if(this.mSurface)this.mSurface.notifyBoundChange();}},{key:'setView',value:function setView(view){if(this.mView==null){this.mView=view;this.mAdded=true;this.requestLayout();view.assignParent(this);this.mAddedTouchMode=true;var syntheticInputStage=new SyntheticInputStage(this);var viewPostImeStage=new ViewPostImeInputStage(this,syntheticInputStage);var earlyPostImeStage=new EarlyPostImeInputStage(this,viewPostImeStage);this.mFirstInputStage=earlyPostImeStage;}}},{key:'getView',value:function getView(){return this.mView;}},{key:'getHostVisibility',value:function getHostVisibility(){return this.mView.getVisibility();}},{key:'scheduleTraversals',value:function scheduleTraversals(){if(!this.mTraversalScheduled){this.mTraversalScheduled=true;this.mHandler.postAsTraversal(this.mTraversalRunnable);}}},{key:'unscheduleTraversals',value:function unscheduleTraversals(){if(this.mTraversalScheduled){this.mTraversalScheduled=false;this.mHandler.removeCallbacks(this.mTraversalRunnable);}}},{key:'doTraversal',value:function doTraversal(){if(this.mTraversalScheduled){this.mTraversalScheduled=false;this.performTraversals();}}},{key:'measureHierarchy',value:function measureHierarchy(host,lp,desiredWindowWidth,desiredWindowHeight){var windowSizeMayChange=false;if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_LAYOUT)Log.v(ViewRootImpl.TAG,"Measuring "+host+" in display "+desiredWindowWidth+"x"+desiredWindowHeight+"...");var childWidthMeasureSpec=ViewRootImpl.getRootMeasureSpec(desiredWindowWidth,lp.width);var childHeightMeasureSpec=ViewRootImpl.getRootMeasureSpec(desiredWindowHeight,lp.height);this.performMeasure(childWidthMeasureSpec,childHeightMeasureSpec);if(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()){windowSizeMayChange=true;}if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals -- after measure");host.debug();}return windowSizeMayChange;}},{key:'performTraversals',value:function performTraversals(){var host=this.mView;if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals");host.debug();}if(host==null||!this.mAdded)return;this.mIsInTraversal=true;this.mWillDrawSoon=true;var windowSizeMayChange=false;var newSurface=false;var surfaceChanged=false;var lp=new view_3.ViewGroup.LayoutParams(view_3.ViewGroup.LayoutParams.MATCH_PARENT,view_3.ViewGroup.LayoutParams.MATCH_PARENT);var desiredWindowWidth=undefined;var desiredWindowHeight=undefined;var viewVisibility=this.getHostVisibility();var viewVisibilityChanged=this.mViewVisibility!=viewVisibility;var params=null;var frame=this.mWinFrame;desiredWindowWidth=frame.width();desiredWindowHeight=frame.height();if(this.mFirst){this.mFullRedrawNeeded=true;this.mLayoutRequested=true;viewVisibilityChanged=false;}else {if(desiredWindowWidth!=this.mWidth||desiredWindowHeight!=this.mHeight){if(ViewRootImpl.DEBUG_ORIENTATION){Log.v(ViewRootImpl.TAG,"View "+host+" resized to: "+frame);}this.mFullRedrawNeeded=true;this.mLayoutRequested=true;windowSizeMayChange=true;}}if(viewVisibilityChanged){}ViewRootImpl.getRunQueue(this).executeActions(this.mHandler);var layoutRequested=this.mLayoutRequested;if(layoutRequested){if(this.mFirst){this.mInTouchMode=!this.mAddedTouchMode;this.ensureTouchModeLocally(this.mAddedTouchMode);}else {if(lp.width<0||lp.height<0){windowSizeMayChange=true;}}windowSizeMayChange=this.measureHierarchy(host,lp,desiredWindowWidth,desiredWindowHeight)||windowSizeMayChange;}if(layoutRequested){this.mLayoutRequested=false;}var windowShouldResize=layoutRequested&&windowSizeMayChange&&(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()||lp.width<0&&frame.width()!==desiredWindowWidth&&frame.width()!==this.mWidth||lp.height<0&&frame.height()!==desiredWindowHeight&&frame.height()!==this.mHeight);if(this.mFirst||windowShouldResize||viewVisibilityChanged){if(ViewRootImpl.DEBUG_LAYOUT){Log.i(ViewRootImpl.TAG,"host=w:"+host.getMeasuredWidth()+", h:"+host.getMeasuredHeight()+", params="+params);}if(ViewRootImpl.DEBUG_ORIENTATION)Log.v(ViewRootImpl.TAG,"Relayout returned: frame="+frame);if(this.mWidth!=frame.width()||this.mHeight!=frame.height()){this.mWidth=frame.width();this.mHeight=frame.height();}if(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()){var childWidthMeasureSpec=ViewRootImpl.getRootMeasureSpec(this.mWidth,lp.width);var childHeightMeasureSpec=ViewRootImpl.getRootMeasureSpec(this.mHeight,lp.height);if(ViewRootImpl.DEBUG_LAYOUT)Log.v(ViewRootImpl.TAG,"Ooops, something changed! mWidth="+this.mWidth+" measuredWidth="+host.getMeasuredWidth()+" mHeight="+this.mHeight+" measuredHeight="+host.getMeasuredHeight());this.performMeasure(childWidthMeasureSpec,childHeightMeasureSpec);layoutRequested=true;}}else {}var didLayout=layoutRequested;var triggerGlobalLayoutListener=didLayout;if(didLayout){this.performLayout(lp,desiredWindowWidth,desiredWindowHeight);if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals -- after setFrame");host.debug();}}if(triggerGlobalLayoutListener){this.mTreeObserver.dispatchOnGlobalLayout();}var skipDraw=false;if(this.mFirst){if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: mView.hasFocus()="+this.mView.hasFocus());if(this.mView!=null){if(!this.mView.hasFocus()){this.mView.requestFocus(View.FOCUS_FORWARD);if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: requested focused view="+this.mView.findFocus());}else {if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: existing focused view="+this.mView.findFocus());}}}this.mFirst=false;this.mWillDrawSoon=false;this.mViewVisibility=viewVisibility;var cancelDraw=this.mTreeObserver.dispatchOnPreDraw()||viewVisibility!=View.VISIBLE;if(!cancelDraw){if(!skipDraw){this.performDraw();}}else {if(viewVisibility==View.VISIBLE){this.scheduleTraversals();}}this.mIsInTraversal=false;this.checkContinueTraversalsNextFrame();}},{key:'performLayout',value:function performLayout(lp,desiredWindowWidth,desiredWindowHeight){var _this41=this;this.mLayoutRequested=false;this.mInLayout=true;var host=this.mView;if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_LAYOUT){Log.v(ViewRootImpl.TAG,"Laying out "+host+" to ("+host.getMeasuredWidth()+", "+host.getMeasuredHeight()+")");}host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());this.mInLayout=false;var numViewsRequestingLayout=this.mLayoutRequesters.length;if(numViewsRequestingLayout>0){var validLayoutRequesters=this.getValidLayoutRequesters(this.mLayoutRequesters,false);if(validLayoutRequesters!=null){this.mHandlingLayoutInLayoutRequest=true;var numValidRequests=validLayoutRequesters.length;for(var i=0;i1000){var fps=this.mFpsNumFrames*1000/totalTime;Log.v(ViewRootImpl.TAG,"FPS:\t"+fps);this.mSurface.showFps(fps);this.mFpsStartTime=nowTime;this.mFpsNumFrames=0;}}}},{key:'performDraw',value:function performDraw(){var fullRedrawNeeded=this.mFullRedrawNeeded;this.mFullRedrawNeeded=false;this.mIsDrawing=true;try{this.draw(fullRedrawNeeded);}finally {this.mIsDrawing=false;}}},{key:'draw',value:function draw(fullRedrawNeeded){var surface=this.mSurface;if(!surface.isValid()){return;}if(ViewRootImpl.DEBUG_FPS){this.trackFPS();}if(this.mViewScrollChanged){this.mViewScrollChanged=false;this.mTreeObserver.dispatchOnScrollChanged();}if(fullRedrawNeeded){this.mIgnoreDirtyState=true;this.mDirty.set(0,0,this.mWidth,this.mHeight);}if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_DRAW){Log.v(ViewRootImpl.TAG,"Draw "+this.mView+", width="+this.mWidth+", height="+this.mHeight+", dirty="+this.mDirty);}this.mTreeObserver.dispatchOnDraw();this.drawSoftware();}},{key:'drawSoftware',value:function drawSoftware(){var canvas=undefined;try{canvas=this.mSurface.lockCanvas(this.mDirty);if(!canvas)return;}catch(e){return;}this.mDirty.setEmpty();this.mIsAnimating=false;this.mDrawingTime=SystemClock.uptimeMillis();this.mView.mPrivateFlags|=View.PFLAG_DRAWN;this.mSetIgnoreDirtyState=false;if(!this.mSurface['lastRenderCanvas'])this.mView.draw(canvas);if(!this.mSetIgnoreDirtyState){this.mIgnoreDirtyState=false;}this.mSurface.unlockCanvasAndPost(this.mSurface['lastRenderCanvas']||canvas);if(ViewRootImpl.LOCAL_LOGV){Log.v(ViewRootImpl.TAG,"Surface unlockCanvasAndPost");}}},{key:'checkContinueTraversalsNextFrame',value:function checkContinueTraversalsNextFrame(){var continueFrame=ViewRootImpl.DEBUG_FPS?60:5;if(!this.mTraversalScheduled&&this._continueTraversalesCountdestRect.right||srcRect.left>=destRect.right)&&srcRect.left>destRect.left;case View.FOCUS_RIGHT:return (srcRect.leftdestRect.bottom||srcRect.top>=destRect.bottom)&&srcRect.top>destRect.top;case View.FOCUS_DOWN:return (srcRect.top=rect1.top&&rect2.top<=rect1.bottom;case View.FOCUS_UP:case View.FOCUS_DOWN:return rect2.right>=rect1.left&&rect2.left<=rect1.right;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'isToDirectionOf',value:function isToDirectionOf(direction,src,dest){switch(direction){case View.FOCUS_LEFT:return src.left>=dest.right;case View.FOCUS_RIGHT:return src.right<=dest.left;case View.FOCUS_UP:return src.top>=dest.bottom;case View.FOCUS_DOWN:return src.bottom<=dest.top;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'findNearestTouchable',value:function findNearestTouchable(root,x,y,direction,deltas){var touchables=root.getTouchables();var minDistance=Number.MAX_SAFE_INTEGER;var closest=null;var numTouchables=touchables.size();var edgeSlop=view_4.ViewConfiguration.get().getScaledEdgeSlop();var closestBounds=new Rect();var touchableBounds=this.mOtherRect;for(var i=0;i=x&&destRect.top<=y&&y<=destRect.bottom;case View.FOCUS_UP:return destRect.top<=y&&destRect.left<=x&&x<=destRect.right;case View.FOCUS_DOWN:return destRect.top>=y&&destRect.left<=x&&x<=destRect.right;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}}],[{key:'getInstance',value:function getInstance(){if(!FocusFinder.sFocusFinder){FocusFinder.sFocusFinder=new FocusFinder();}return FocusFinder.sFocusFinder;}},{key:'getNextFocusable',value:function getNextFocusable(focused,focusables,count){if(focused!=null){var position=focusables.lastIndexOf(focused);if(position>=0&&position+10){return focusables.get(position-1);}}if(!focusables.isEmpty()){return focusables.get(count-1);}return null;}},{key:'majorAxisDistance',value:function majorAxisDistance(direction,source,dest){return Math.max(0,FocusFinder.majorAxisDistanceRaw(direction,source,dest));}},{key:'majorAxisDistanceRaw',value:function majorAxisDistanceRaw(direction,source,dest){switch(direction){case View.FOCUS_LEFT:return source.left-dest.right;case View.FOCUS_RIGHT:return dest.left-source.right;case View.FOCUS_UP:return source.top-dest.bottom;case View.FOCUS_DOWN:return dest.top-source.bottom;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'majorAxisDistanceToFarEdge',value:function majorAxisDistanceToFarEdge(direction,source,dest){return Math.max(1,FocusFinder.majorAxisDistanceToFarEdgeRaw(direction,source,dest));}},{key:'majorAxisDistanceToFarEdgeRaw',value:function majorAxisDistanceToFarEdgeRaw(direction,source,dest){switch(direction){case View.FOCUS_LEFT:return source.left-dest.left;case View.FOCUS_RIGHT:return dest.right-source.right;case View.FOCUS_UP:return source.top-dest.top;case View.FOCUS_DOWN:return dest.bottom-source.bottom;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'minorAxisDistance',value:function minorAxisDistance(direction,source,dest){switch(direction){case View.FOCUS_LEFT:case View.FOCUS_RIGHT:return Math.abs(source.top+source.height()/2-(dest.top+dest.height()/2));case View.FOCUS_UP:case View.FOCUS_DOWN:return Math.abs(source.left+source.width()/2-(dest.left+dest.width()/2));}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}}]);return FocusFinder;}();view_4.FocusFinder=FocusFinder;var SequentialFocusComparator=function(){function SequentialFocusComparator(){var _this47=this;_classCallCheck(this,SequentialFocusComparator);this.mFirstRect=new Rect();this.mSecondRect=new Rect();this.mIsLayoutRtl=false;this.compareFn=function(first,second){if(first==second){return 0;}_this47.getRect(first,_this47.mFirstRect);_this47.getRect(second,_this47.mSecondRect);if(_this47.mFirstRect.top<_this47.mSecondRect.top){return -1;}else if(_this47.mFirstRect.top>_this47.mSecondRect.top){return 1;}else if(_this47.mFirstRect.left<_this47.mSecondRect.left){return _this47.mIsLayoutRtl?1:-1;}else if(_this47.mFirstRect.left>_this47.mSecondRect.left){return _this47.mIsLayoutRtl?-1:1;}else if(_this47.mFirstRect.bottom<_this47.mSecondRect.bottom){return -1;}else if(_this47.mFirstRect.bottom>_this47.mSecondRect.bottom){return 1;}else if(_this47.mFirstRect.right<_this47.mSecondRect.right){return _this47.mIsLayoutRtl?1:-1;}else if(_this47.mFirstRect.right>_this47.mSecondRect.right){return _this47.mIsLayoutRtl?-1:1;}else {return 0;}};}_createClass(SequentialFocusComparator,[{key:'recycle',value:function recycle(){this.mRoot=null;}},{key:'setRoot',value:function setRoot(root){this.mRoot=root;}},{key:'getRect',value:function getRect(view,rect){view.getDrawingRect(rect);this.mRoot.offsetDescendantRectToMyCoords(view,rect);}},{key:'sort',value:function sort(array){array.sort(this.compareFn);}}]);return SequentialFocusComparator;}();})(view=android.view||(android.view={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Integer=function(){function Integer(){_classCallCheck(this,Integer);}_createClass(Integer,null,[{key:'parseInt',value:function parseInt(value){return Number.parseInt(value);}},{key:'toHexString',value:function toHexString(n){if(!n)return n+'';return n.toString(16);}}]);return Integer;}();Integer.MIN_VALUE=-0x80000000;Integer.MAX_VALUE=0x7fffffff;lang.Integer=Integer;})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var view;(function(view_5){var Rect=android.graphics.Rect;var SystemClock=android.os.SystemClock;var System=java.lang.System;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var Transformation=view_5.animation.Transformation;var AttrBinder=androidui.attr.AttrBinder;var ViewGroup=function(_view_5$View){_inherits(ViewGroup,_view_5$View);function ViewGroup(context,bindElement,defStyle){_classCallCheck(this,ViewGroup);var _this48=_possibleConstructorReturn(this,Object.getPrototypeOf(ViewGroup).call(this,context,bindElement,defStyle));_this48.mLastTouchDownTime=0;_this48.mLastTouchDownIndex=-1;_this48.mLastTouchDownX=0;_this48.mLastTouchDownY=0;_this48.mGroupFlags=0;_this48.mLayoutMode=ViewGroup.LAYOUT_MODE_UNDEFINED;_this48.mChildren=[];_this48.mSuppressLayout=false;_this48.mLayoutCalledWhileSuppressed=false;_this48.mChildCountWithTransientState=0;_this48.initViewGroup();return _this48;}_createClass(ViewGroup,[{key:'initBindAttr',value:function initBindAttr(){_get2(Object.getPrototypeOf(ViewGroup.prototype),'initBindAttr',this).call(this);if(!ViewGroup.ViewGroupClassAttrBind){ViewGroup.ViewGroupClassAttrBind=new AttrBinder.ClassBinderMap();ViewGroup.ViewGroupClassAttrBind.set('clipChildren',{setter:function setter(v,value){v.setClipChildren(v._attrBinder.parseBoolean(value));},getter:function getter(v){return v.getClipChildren();}}).set('clipToPadding',{setter:function setter(v,value){v.setClipToPadding(v._attrBinder.parseBoolean(value));},getter:function getter(v){return v.isClipToPadding();}}).set('animationCache',{setter:function setter(v,value){v.setAnimationCacheEnabled(v._attrBinder.parseBoolean(value,true));}}).set('persistentDrawingCache',{setter:function setter(v,value){if(value==='none')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);else if(value==='animation')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);else if(value==='scrolling')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);else if(value==='all')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);}}).set('addStatesFromChildren',{setter:function setter(v,value){v.setAddStatesFromChildren(v._attrBinder.parseBoolean(value,false));}}).set('alwaysDrawnWithCache',{setter:function setter(v,value){v.setAlwaysDrawnWithCacheEnabled(v._attrBinder.parseBoolean(value,true));}}).set('descendantFocusability',{setter:function setter(v,value){if(value=='beforeDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);else if(value=='afterDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);else if(value=='blocksDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);}}).set('splitMotionEvents',{setter:function setter(v,value){v.setMotionEventSplittingEnabled(v._attrBinder.parseBoolean(value,false));}});}this._attrBinder.addClassAttrBind(ViewGroup.ViewGroupClassAttrBind);}},{key:'initViewGroup',value:function initViewGroup(){this.setFlags(view_5.View.WILL_NOT_DRAW,view_5.View.DRAW_MASK);this.mGroupFlags|=ViewGroup.FLAG_CLIP_CHILDREN;this.mGroupFlags|=ViewGroup.FLAG_CLIP_TO_PADDING;this.mGroupFlags|=ViewGroup.FLAG_ANIMATION_DONE;this.mGroupFlags|=ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;this.mGroupFlags|=ViewGroup.FLAG_SPLIT_MOTION_EVENTS;this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);this.mPersistentDrawingCache=ViewGroup.PERSISTENT_SCROLLING_CACHE;}},{key:'getDescendantFocusability',value:function getDescendantFocusability(){return this.mGroupFlags&ViewGroup.FLAG_MASK_FOCUSABILITY;}},{key:'setDescendantFocusability',value:function setDescendantFocusability(focusability){switch(focusability){case ViewGroup.FOCUS_BEFORE_DESCENDANTS:case ViewGroup.FOCUS_AFTER_DESCENDANTS:case ViewGroup.FOCUS_BLOCK_DESCENDANTS:break;default:throw new Error("must be one of FOCUS_BEFORE_DESCENDANTS, "+"FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS");}this.mGroupFlags&=~ViewGroup.FLAG_MASK_FOCUSABILITY;this.mGroupFlags|=focusability&ViewGroup.FLAG_MASK_FOCUSABILITY;}},{key:'handleFocusGainInternal',value:function handleFocusGainInternal(direction,previouslyFocusedRect){if(this.mFocused!=null){this.mFocused.unFocus();this.mFocused=null;}_get2(Object.getPrototypeOf(ViewGroup.prototype),'handleFocusGainInternal',this).call(this,direction,previouslyFocusedRect);}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(view_5.View.DBG){System.out.println(this+" requestChildFocus()");}if(this.getDescendantFocusability()==ViewGroup.FOCUS_BLOCK_DESCENDANTS){return;}_get2(Object.getPrototypeOf(ViewGroup.prototype),'unFocus',this).call(this);if(this.mFocused!=child){if(this.mFocused!=null){this.mFocused.unFocus();}this.mFocused=child;}if(this.mParent!=null){this.mParent.requestChildFocus(this,focused);}}},{key:'focusableViewAvailable',value:function focusableViewAvailable(v){if(this.mParent!=null&&this.getDescendantFocusability()!=ViewGroup.FOCUS_BLOCK_DESCENDANTS&&!(this.isFocused()&&this.getDescendantFocusability()!=ViewGroup.FOCUS_AFTER_DESCENDANTS)){this.mParent.focusableViewAvailable(v);}}},{key:'focusSearch',value:function focusSearch(){for(var _len19=arguments.length,args=Array(_len19),_key20=0;_key20<_len19;_key20++){args[_key20]=arguments[_key20];}if(arguments.length===1){return _get2(Object.getPrototypeOf(ViewGroup.prototype),'focusSearch',this).call(this,args[0]);}var focused=args[0];var direction=args[1];if(this.isRootNamespace()){return view_5.FocusFinder.getInstance().findNextFocus(this,focused,direction);}else if(this.mParent!=null){return this.mParent.focusSearch(focused,direction);}return null;}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){return false;}},{key:'childHasTransientStateChanged',value:function childHasTransientStateChanged(child,childHasTransientState){var oldHasTransientState=this.hasTransientState();if(childHasTransientState){this.mChildCountWithTransientState++;}else {this.mChildCountWithTransientState--;}var newHasTransientState=this.hasTransientState();if(this.mParent!=null&&oldHasTransientState!=newHasTransientState){this.mParent.childHasTransientStateChanged(this,newHasTransientState);}}},{key:'hasTransientState',value:function hasTransientState(){return this.mChildCountWithTransientState>0||_get2(Object.getPrototypeOf(ViewGroup.prototype),'hasTransientState',this).call(this);}},{key:'dispatchUnhandledMove',value:function dispatchUnhandledMove(focused,direction){return this.mFocused!=null&&this.mFocused.dispatchUnhandledMove(focused,direction);}},{key:'clearChildFocus',value:function clearChildFocus(child){if(view_5.View.DBG){System.out.println(this+" clearChildFocus()");}this.mFocused=null;if(this.mParent!=null){this.mParent.clearChildFocus(this);}}},{key:'clearFocus',value:function clearFocus(){if(view_5.View.DBG){System.out.println(this+" clearFocus()");}if(this.mFocused==null){_get2(Object.getPrototypeOf(ViewGroup.prototype),'clearFocus',this).call(this);}else {var focused=this.mFocused;this.mFocused=null;focused.clearFocus();}}},{key:'unFocus',value:function unFocus(){if(view_5.View.DBG){System.out.println(this+" unFocus()");}if(this.mFocused==null){_get2(Object.getPrototypeOf(ViewGroup.prototype),'unFocus',this).call(this);}else {this.mFocused.unFocus();this.mFocused=null;}}},{key:'getFocusedChild',value:function getFocusedChild(){return this.mFocused;}},{key:'hasFocus',value:function hasFocus(){return (this.mPrivateFlags&view_5.View.PFLAG_FOCUSED)!=0||this.mFocused!=null;}},{key:'findFocus',value:function findFocus(){if(ViewGroup.DBG){System.out.println("Find focus in "+this+": flags="+this.isFocused()+", child="+this.mFocused);}if(this.isFocused()){return this;}if(this.mFocused!=null){return this.mFocused.findFocus();}return null;}},{key:'hasFocusable',value:function hasFocusable(){if((this.mViewFlags&view_5.View.VISIBILITY_MASK)!=view_5.View.VISIBLE){return false;}if(this.isFocusable()){return true;}var descendantFocusability=this.getDescendantFocusability();if(descendantFocusability!=ViewGroup.FOCUS_BLOCK_DESCENDANTS){var count=this.mChildrenCount;var children=this.mChildren;for(var i=0;i=0;_i12--){var _child2=disappearingChildren.get(_i12);more=this.drawChild(canvas,_child2,drawingTime)||more;}}if(clipToPadding){canvas.restoreToCount(saveCount);}flags=this.mGroupFlags;if((flags&ViewGroup.FLAG_INVALIDATE_REQUIRED)==ViewGroup.FLAG_INVALIDATE_REQUIRED){this.invalidate(true);}}},{key:'drawChild',value:function drawChild(canvas,child,drawingTime){return child.drawFromParent(canvas,this,drawingTime);}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(ViewGroup.prototype),'drawableStateChanged',this).call(this);if((this.mGroupFlags&ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE)!=0){if((this.mGroupFlags&ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN)!=0){throw new Error("addStateFromChildren cannot be enabled if a"+" child has duplicateParentState set to true");}var children=this.mChildren;var count=this.mChildrenCount;for(var i=0;i=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=size;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}break;case MeasureSpec.AT_MOST:if(childDimension>=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}break;case MeasureSpec.UNSPECIFIED:if(childDimension>=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=0;resultMode=MeasureSpec.UNSPECIFIED;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=0;resultMode=MeasureSpec.UNSPECIFIED;}break;}return MeasureSpec.makeMeasureSpec(resultSize,resultMode);}}]);return ViewGroup;}(view_5.View);ViewGroup.FLAG_CLIP_CHILDREN=0x1;ViewGroup.FLAG_CLIP_TO_PADDING=0x2;ViewGroup.FLAG_INVALIDATE_REQUIRED=0x4;ViewGroup.FLAG_RUN_ANIMATION=0x8;ViewGroup.FLAG_ANIMATION_DONE=0x10;ViewGroup.FLAG_PADDING_NOT_NULL=0x20;ViewGroup.FLAG_ANIMATION_CACHE=0x40;ViewGroup.FLAG_OPTIMIZE_INVALIDATE=0x80;ViewGroup.FLAG_CLEAR_TRANSFORMATION=0x100;ViewGroup.FLAG_NOTIFY_ANIMATION_LISTENER=0x200;ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER=0x400;ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS=0x800;ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE=0x1000;ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN=0x2000;ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE=0x4000;ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE=0x8000;ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE=0x10000;ViewGroup.FLAG_MASK_FOCUSABILITY=0x60000;ViewGroup.FOCUS_BEFORE_DESCENDANTS=0x20000;ViewGroup.FOCUS_AFTER_DESCENDANTS=0x40000;ViewGroup.FOCUS_BLOCK_DESCENDANTS=0x60000;ViewGroup.FLAG_DISALLOW_INTERCEPT=0x80000;ViewGroup.FLAG_SPLIT_MOTION_EVENTS=0x200000;ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW=0x400000;ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET=0x800000;ViewGroup.PERSISTENT_NO_CACHE=0x0;ViewGroup.PERSISTENT_ANIMATION_CACHE=0x1;ViewGroup.PERSISTENT_SCROLLING_CACHE=0x2;ViewGroup.PERSISTENT_ALL_CACHES=0x3;ViewGroup.LAYOUT_MODE_UNDEFINED=-1;ViewGroup.LAYOUT_MODE_CLIP_BOUNDS=0;ViewGroup.LAYOUT_MODE_DEFAULT=ViewGroup.LAYOUT_MODE_CLIP_BOUNDS;ViewGroup.CLIP_TO_PADDING_MASK=ViewGroup.FLAG_CLIP_TO_PADDING|ViewGroup.FLAG_PADDING_NOT_NULL;view_5.ViewGroup=ViewGroup;(function(ViewGroup){var AttrBinder=androidui.attr.AttrBinder;var LayoutParams=function(){function LayoutParams(){_classCallCheck(this,LayoutParams);this._width=0;this._height=0;this._measuringParentWidthMeasureSpec=0;this._measuringParentHeightMeasureSpec=0;for(var _len20=arguments.length,args=Array(_len20),_key21=0;_key21<_len20;_key21++){args[_key21]=arguments[_key21];}if(args.length===1){var src=args[0];this.width=src._width;this.height=src._height;}else if(args.length===2){var _args$40=args[0];var width=_args$40===undefined?0:_args$40;var _args$41=args[1];var height=_args$41===undefined?0:_args$41;this.width=width;this.height=height;}if(!this._attrBinder){this._attrBinder=new androidui.attr.AttrBinder(this);if(!LayoutParams.ViewGroupParamClassAttrBind){LayoutParams.ViewGroupParamClassAttrBind=new AttrBinder.ClassBinderMap();LayoutParams.ViewGroupParamClassAttrBind.set('width',{setter:function setter(host,value){if(value==null)value=-2;host.width=value;},getter:function getter(host){return host._widthOrig;}}).set('height',{setter:function setter(host,value){if(value==null)value=-2;host.height=value;},getter:function getter(host){return host._heightOrig;}});}this._attrBinder.addClassAttrBind(LayoutParams.ViewGroupParamClassAttrBind);}}_createClass(LayoutParams,[{key:'parseAttributeFrom',value:function parseAttributeFrom(node,context){var _this49=this;Array.from(node.attributes).forEach(function(attr){var layoutParamFiled=attr.name.startsWith('layout_')&&attr.name.substring('layout_'.length);if(layoutParamFiled){_this49._attrBinder.onAttrChange(layoutParamFiled,attr.value,context);}});}},{key:'width',get:function get(){if(typeof this._width==='number')return this._width;var up=(this._width+"").toUpperCase();if(up==='FILL_PARENT'||up==='MATCH_PARENT')this._width=-1;else if(up==='WRAP_CONTENT')this._width=-2;else {var parentWidth=view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._width,0,parentWidth);if(android.util.TypedValue.isDynamicUnitValue(this._width)){return parsedValue;}this._width=parsedValue;}catch(e){console.error(e);return -2;}}return this._width;},set:function set(value){this._width=this._widthOrig=value;}},{key:'height',get:function get(){if(typeof this._height==='number')return this._height;var up=(this._height+"").toUpperCase();if(up==='FILL_PARENT'||up==='MATCH_PARENT')this._height=-1;else if(up==='WRAP_CONTENT')this._height=-2;else {var parentHeight=view_5.View.MeasureSpec.getSize(this._measuringParentHeightMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._height,0,parentHeight);if(android.util.TypedValue.isDynamicUnitValue(this._height)){return parsedValue;}this._height=parsedValue;}catch(e){console.error(e);return -2;}}return this._height;},set:function set(value){this._height=this._heightOrig=value;}}]);return LayoutParams;}();LayoutParams.FILL_PARENT=-1;LayoutParams.MATCH_PARENT=-1;LayoutParams.WRAP_CONTENT=-2;ViewGroup.LayoutParams=LayoutParams;var MarginLayoutParams=function(_LayoutParams){_inherits(MarginLayoutParams,_LayoutParams);function MarginLayoutParams(){var _Object$getPrototypeO4;_classCallCheck(this,MarginLayoutParams);for(var _len21=arguments.length,args=Array(_len21),_key22=0;_key22<_len21;_key22++){args[_key22]=arguments[_key22];}var _this50=_possibleConstructorReturn(this,(_Object$getPrototypeO4=Object.getPrototypeOf(MarginLayoutParams)).call.apply(_Object$getPrototypeO4,[this].concat(args)));_this50._leftMargin=0;_this50._topMargin=0;_this50._rightMargin=0;_this50._bottomMargin=0;_this50._leftMarginOrig=0;_this50._topMarginOrig=0;_this50._rightMarginOrig=0;_this50._bottomMarginOrig=0;if(args.length===1){var src=args[0];if(src instanceof MarginLayoutParams){_this50.leftMargin=src._leftMargin;_this50.topMargin=src._topMargin;_this50.rightMargin=src._rightMargin;_this50.bottomMargin=src._bottomMargin;}}if(!MarginLayoutParams.MarginLayoutParamsClassAttrBind){MarginLayoutParams.MarginLayoutParamsClassAttrBind=new AttrBinder.ClassBinderMap();MarginLayoutParams.MarginLayoutParamsClassAttrBind.set('marginLeft',{setter:function setter(host,value){if(value==null)value=0;host.leftMargin=value;},getter:function getter(host){return host._leftMarginOrig;}}).set('marginStart',{setter:function setter(host,value){if(value==null)value=0;host.leftMargin=value;},getter:function getter(host){return host._leftMarginOrig;}}).set('marginTop',{setter:function setter(host,value){if(value==null)value=0;host.topMargin=value;},getter:function getter(host){return host._topMarginOrig;}}).set('marginRight',{setter:function setter(host,value){if(value==null)value=0;host.rightMargin=value;},getter:function getter(host){return host._rightMarginOrig;}}).set('marginEnd',{setter:function setter(host,value){if(value==null)value=0;host.rightMargin=value;},getter:function getter(host){return host._rightMarginOrig;}}).set('marginBottom',{setter:function setter(host,value){if(value==null)value=0;host.bottomMargin=value;},getter:function getter(host){return host._bottomMargin;}}).set('margin',{setter:function setter(host,value){if(value==null)value=0;var _host$_attrBinder$par=host._attrBinder.parsePaddingMarginLTRB(value);var _host$_attrBinder$par2=_slicedToArray(_host$_attrBinder$par,4);var left=_host$_attrBinder$par2[0];var top=_host$_attrBinder$par2[1];var right=_host$_attrBinder$par2[2];var bottom=_host$_attrBinder$par2[3];host.leftMargin=left;host.topMargin=top;host.rightMargin=right;host.bottomMargin=bottom;}});}_this50._attrBinder.addClassAttrBind(MarginLayoutParams.MarginLayoutParamsClassAttrBind);return _this50;}_createClass(MarginLayoutParams,[{key:'setMargins',value:function setMargins(left,top,right,bottom){this.leftMargin=left;this.topMargin=top;this.rightMargin=right;this.bottomMargin=bottom;}},{key:'setLayoutDirection',value:function setLayoutDirection(layoutDirection){}},{key:'getLayoutDirection',value:function getLayoutDirection(){return view_5.View.LAYOUT_DIRECTION_LTR;}},{key:'isLayoutRtl',value:function isLayoutRtl(){return this.getLayoutDirection()==view_5.View.LAYOUT_DIRECTION_RTL;}},{key:'resolveLayoutDirection',value:function resolveLayoutDirection(layoutDirection){}},{key:'leftMargin',get:function get(){if(typeof this._leftMargin==='number')return this._leftMargin;var parentWidth=view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._leftMargin,0,parentWidth);if(android.util.TypedValue.isDynamicUnitValue(this._leftMargin)){return parsedValue;}this._leftMargin=parsedValue;}catch(e){console.warn(e);return 0;}return this._leftMargin;},set:function set(value){this._leftMargin=this._leftMarginOrig=value;}},{key:'topMargin',get:function get(){if(typeof this._topMargin==='number')return this._topMargin;var parentWidth=view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._topMargin,0,parentWidth);if(android.util.TypedValue.isDynamicUnitValue(this._topMargin)){return parsedValue;}this._topMargin=parsedValue;}catch(e){console.warn(e);return 0;}return this._topMargin;},set:function set(value){this._topMargin=this._topMarginOrig=value;}},{key:'rightMargin',get:function get(){if(typeof this._rightMargin==='number')return this._rightMargin;var parentWidth=view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._rightMargin,0,parentWidth);if(android.util.TypedValue.isDynamicUnitValue(this._rightMargin)){return parsedValue;}this._rightMargin=parsedValue;}catch(e){console.warn(e);return 0;}return this._rightMargin;},set:function set(value){this._rightMargin=this._rightMarginOrig=value;}},{key:'bottomMargin',get:function get(){if(typeof this._bottomMargin==='number')return this._bottomMargin;var parentWidth=view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);try{var parsedValue=this._attrBinder.parseNumberPixelSize(this._bottomMargin,0,parentWidth);if(android.util.TypedValue.isDynamicUnitValue(this._bottomMargin)){return parsedValue;}this._bottomMargin=parsedValue;}catch(e){console.warn(e);return 0;}return this._bottomMargin;},set:function set(value){this._bottomMargin=this._bottomMarginOrig=value;}}]);return MarginLayoutParams;}(LayoutParams);MarginLayoutParams.DEFAULT_MARGIN_RELATIVE=Integer.MIN_VALUE;ViewGroup.MarginLayoutParams=MarginLayoutParams;})(ViewGroup=view_5.ViewGroup||(view_5.ViewGroup={}));var TouchTarget=function(){function TouchTarget(){_classCallCheck(this,TouchTarget);}_createClass(TouchTarget,[{key:'recycle',value:function recycle(){if(TouchTarget.sRecycledCount1){for(var _i14=0;_i140&&(this.spans==null||this.spans.length=end||this.spanEnds[i]<=start)continue;return true;}return false;}},{key:'getNextTransition',value:function getNextTransition(start,limit){for(var i=0;istart&&spanStartstart&&spanEnd0;}this.mCharsValid=hasReplacement||hasTabs||directions!=Layout.DIRS_ALL_LEFT_TO_RIGHT;if(this.mCharsValid){this.mChars=text;if(hasReplacement){var chars=this.mChars;for(var i=start,inext;ithis.mLen){runLimit=this.mLen;}var runIsRtl=(runs[i+1]&Layout.RUN_RTL_FLAG)!=0;var segstart=runStart;for(var j=this.mHasTabs?runStart:runLimit;j<=runLimit;j++){var codept=0;if(this.mHasTabs&&j=0xd800&&codept<0xdc00&&j+10xffff){++j;continue;}}}if(j==runLimit||codept=='\t'.codePointAt(0)){h+=this.drawRun(c,segstart,j,runIsRtl,x+h,top,y,bottom,i!=lastRunIndex||j!=this.mLen);if(codept=='\t'.codePointAt(0)){h=this.mDir*this.nextTab(h*this.mDir);}segstart=j+1;}}}}},{key:'metrics',value:function metrics(fmi){return this.measure(this.mLen,false,fmi);}},{key:'measure',value:function measure(offset,trailing,fmi){var target=trailing?offset-1:offset;if(target<0){return 0;}var h=0;if(!this.mHasTabs){if(this.mDirections==Layout.DIRS_ALL_LEFT_TO_RIGHT){return this.measureRun(0,offset,this.mLen,false,fmi);}if(this.mDirections==Layout.DIRS_ALL_RIGHT_TO_LEFT){return this.measureRun(0,offset,this.mLen,true,fmi);}}var chars=this.mChars;var runs=this.mDirections.mDirections;for(var i=0;ithis.mLen){runLimit=this.mLen;}var runIsRtl=(runs[i+1]&Layout.RUN_RTL_FLAG)!=0;var segstart=runStart;for(var j=this.mHasTabs?runStart:runLimit;j<=runLimit;j++){var codept=0;if(this.mHasTabs&&j=0xd800&&codept<0xdc00&&j+10xffff){++j;continue;}}}if(j==runLimit||codept=='\t'.codePointAt(0)){var inSegment=target>=segstart&&target=runStart){runLimit=runStart+(runs[runIndex+1]&Layout.RUN_LENGTH_MASK);if(runLimit>lineEnd){runLimit=lineEnd;}if(cursor>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;if(cursor==runStart){var prevRunIndex=undefined,prevRunLevel=undefined,prevRunStart=undefined,prevRunLimit=undefined;var pos=cursor-1;for(prevRunIndex=0;prevRunIndex=prevRunStart){prevRunLimit=prevRunStart+(runs[prevRunIndex+1]&Layout.RUN_LENGTH_MASK);if(prevRunLimit>lineEnd){prevRunLimit=lineEnd;}if(pos>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;if(prevRunLevel=0&&otherRunIndexlineEnd){otherRunLimit=lineEnd;}var otherRunLevel=runs[otherRunIndex+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;var otherRunIsRtl=(otherRunLevel&1)!=0;_advance=toLeft==otherRunIsRtl;if(newCaret==-1){newCaret=this.getOffsetBeforeAfter(otherRunIndex,otherRunStart,otherRunLimit,otherRunIsRtl,_advance?otherRunStart:otherRunLimit,_advance);if(newCaret==(_advance?otherRunLimit:otherRunStart)){runIndex=otherRunIndex;runLevel=otherRunLevel;continue;}break;}if(otherRunLevel=target){break;}spanStart=spanLimit;}var spans=this.mSpanned.getSpans(this.mStart+spanStart,this.mStart+spanLimit,MetricAffectingSpan.type);spans=TextUtils.removeEmptySpans(spans,this.mSpanned,MetricAffectingSpan.type);if(spans.length>0){var replacement=null;for(var j=0;j=this.mStart+_mlimit||this.mMetricAffectingSpanSpanSet.spanEnds[j]<=this.mStart+i)continue;var span=this.mMetricAffectingSpanSpanSet.spans[j];if(span instanceof ReplacementSpan){replacement=span;}else {span.updateDrawState(_wp2);}}if(replacement!=null){x+=this.handleReplacement(replacement,_wp2,i,_mlimit,runIsRtl,c,x,top,y,bottom,fmi,needWidth||_mlimit=this.mStart+jnext||this.mCharacterStyleSpanSet.spanEnds[k]<=this.mStart+_j)continue;var _span=this.mCharacterStyleSpanSet.spans[k];_span.updateDrawState(_wp2);}x+=this.handleText(_wp2,_j,jnext,i,inext,runIsRtl,c,x,top,y,bottom,fmi,needWidth||jnext=0;){if(TextLine.sCached[i]!=null){tl=TextLine.sCached[i];TextLine.sCached[i]=null;return tl;}}}tl=new TextLine();if(TextLine.DEBUG){Log.v("TLINE","new: "+tl);}return tl;}},{key:'recycle',value:function recycle(tl){tl.mText=null;tl.mPaint=null;tl.mDirections=null;tl.mMetricAffectingSpanSpanSet.recycle();tl.mCharacterStyleSpanSet.recycle();tl.mReplacementSpanSpanSet.recycle();{for(var i=0;i=spanEnd&&(i==firstLine||isFirstParaLine)){spanEnd=sp.nextSpanTransition(start,textLength,ParagraphStyle.type);spans=Layout.getParagraphSpans(sp,start,spanEnd,ParagraphStyle.type);paraAlign=this.mAlignment;tabStopsIsInitialized=false;}var length=spans.length;for(var n=0;n>1;}}var directions=this.getLineDirections(i);if(directions==Layout.DIRS_ALL_LEFT_TO_RIGHT&&!this.mSpannedText&&!hasTabOrEmoji){canvas.drawText_end(buf.toString(),start,end,x,lbaseline,paint);}else {tl.set(paint,buf,start,end,dir,directions,hasTabOrEmoji,tabStops);tl.draw(canvas,x,ltop,lbaseline,lbottom);}}TextLine.recycle(tl);}},{key:'drawBackground',value:function drawBackground(canvas,highlight,highlightPaint,cursorOffsetVertical,firstLine,lastLine){if(this.mSpannedText){if(this.mLineBackgroundSpans==null){this.mLineBackgroundSpans=new SpanSet(LineBackgroundSpan.type);}var buffer=this.mText;var textLength=buffer.length;this.mLineBackgroundSpans.init(buffer,0,textLength);if(this.mLineBackgroundSpans.numberOfSpans>0){var previousLineBottom=this.getLineTop(firstLine);var previousLineEnd=this.getLineStart(firstLine);var spans=Layout.NO_PARA_SPANS;var spansLength=0;var paint=this.mPaint;var spanEnd=0;var width=this.mWidth;for(var i=firstLine;i<=lastLine;i++){var start=previousLineEnd;var end=this.getLineStart(i+1);previousLineEnd=end;var ltop=previousLineBottom;var lbottom=this.getLineTop(i+1);previousLineBottom=lbottom;var lbaseline=lbottom-this.getLineDescent(i);if(start>=spanEnd){spanEnd=this.mLineBackgroundSpans.getNextTransition(start,textLength);spansLength=0;if(start!=end||start==0){for(var j=0;j=end||this.mLineBackgroundSpans.spanEnds[j]<=start)continue;if(spansLength==spans.length){var newSize=2*spansLength;var newSpans=new Array(newSize);System.arraycopy(spans,0,newSpans,0,spansLength);spans=newSpans;}spans[spansLength++]=this.mLineBackgroundSpans.spans[j];}}}for(var n=0;n=bottom)return TextUtils.packRangeInLong(0,-1);return TextUtils.packRangeInLong(this.getLineForVertical(top),this.getLineForVertical(bottom));}},{key:'getLineStartPos',value:function getLineStartPos(line,left,right){var align=this.getParagraphAlignment(line);var dir=this.getParagraphDirection(line);if(align==Layout.Alignment.ALIGN_LEFT){align=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_NORMAL:Layout.Alignment.ALIGN_OPPOSITE;}else if(align==Layout.Alignment.ALIGN_RIGHT){align=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_OPPOSITE:Layout.Alignment.ALIGN_NORMAL;}var x=undefined;if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_LEFT_TO_RIGHT){x=left;}else {x=right;}}else {var tabStops=null;if(this.mSpannedText&&this.getLineContainsTab(line)){var spanned=this.mText;var start=this.getLineStart(line);var spanEnd=spanned.nextSpanTransition(start,spanned.length,TabStopSpan.type);var tabSpans=Layout.getParagraphSpans(spanned,start,spanEnd,TabStopSpan.type);if(tabSpans.length>0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabSpans);}}var max=Math.floor(this.getLineExtent(line,tabStops,false));if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_LEFT_TO_RIGHT){x=right-max;}else {x=left-max;}}else {max=max&~1;x=left+right-max>>1;}}return x;}},{key:'getText',value:function getText(){return this.mText;}},{key:'getPaint',value:function getPaint(){return this.mPaint;}},{key:'getWidth',value:function getWidth(){return this.mWidth;}},{key:'getEllipsizedWidth',value:function getEllipsizedWidth(){return this.mWidth;}},{key:'increaseWidthTo',value:function increaseWidthTo(wid){if(wid>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK)!=paraLevel;}offset-=lineStart;for(var i=0;i=start){var level=runs[i+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;return (level&1)!=0;}}return false;}},{key:'primaryIsTrailingPrevious',value:function primaryIsTrailingPrevious(offset){var line=this.getLineForOffset(offset);var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var runs=this.getLineDirections(line).mDirections;var levelAt=-1;for(var i=0;ilineEnd){limit=lineEnd;}if(offset>=start&&offsetstart){return false;}levelAt=runs[i+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;break;}}if(levelAt==-1){levelAt=this.getParagraphDirection(line)==1?0:1;}var levelBefore=-1;if(offset==lineStart){levelBefore=this.getParagraphDirection(line)==1?0:1;}else {offset-=1;for(var _i15=0;_i15lineEnd){_limit=lineEnd;}if(offset>=_start&&offset<_limit){levelBefore=runs[_i15+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;break;}}}return levelBefore0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabs);}}var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabOrEmoji,tabStops);var wid=tl.measure(offset-start,trailing,null);TextLine.recycle(tl);if(clamped&&wid>this.mWidth){wid=this.mWidth;}var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);return this.getLineStartPos(line,left,right)+wid;}},{key:'getLineLeft',value:function getLineLeft(line){var dir=this.getParagraphDirection(line);var align=this.getParagraphAlignment(line);if(align==Layout.Alignment.ALIGN_LEFT){return 0;}else if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.getParagraphRight(line)-this.getLineMax(line);else return 0;}else if(align==Layout.Alignment.ALIGN_RIGHT){return this.mWidth-this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_RIGHT_TO_LEFT)return 0;else return this.mWidth-this.getLineMax(line);}else {var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);var max=Math.floor(this.getLineMax(line))&~1;return left+(right-left-max)/2;}}},{key:'getLineRight',value:function getLineRight(line){var dir=this.getParagraphDirection(line);var align=this.getParagraphAlignment(line);if(align==Layout.Alignment.ALIGN_LEFT){return this.getParagraphLeft(line)+this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.mWidth;else return this.getParagraphLeft(line)+this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_RIGHT){return this.mWidth;}else if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.getLineMax(line);else return this.mWidth;}else {var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);var max=Math.floor(this.getLineMax(line))&~1;return right-(right-left-max)/2;}}},{key:'getLineMax',value:function getLineMax(line){var margin=this.getParagraphLeadingMargin(line);var signedExtent=this.getLineExtent(line,false);return margin+signedExtent>=0?signedExtent:-signedExtent;}},{key:'getLineWidth',value:function getLineWidth(line){var margin=this.getParagraphLeadingMargin(line);var signedExtent=this.getLineExtent(line,true);return margin+signedExtent>=0?signedExtent:-signedExtent;}},{key:'getLineExtent',value:function getLineExtent(){if(arguments.length===2)return this.getLineExtent_2.apply(this,arguments);if(arguments.length===3)return this.getLineExtent_3.apply(this,arguments);}},{key:'getLineExtent_2',value:function getLineExtent_2(line,full){var start=this.getLineStart(line);var end=full?this.getLineEnd(line):this.getLineVisibleEnd(line);var hasTabsOrEmoji=this.getLineContainsTab(line);var tabStops=null;if(hasTabsOrEmoji&&Spanned.isImplements(this.mText)){var tabs=Layout.getParagraphSpans(this.mText,start,end,TabStopSpan.type);if(tabs.length>0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabs);}}var directions=this.getLineDirections(line);if(directions==null){return 0;}var dir=this.getParagraphDirection(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabsOrEmoji,tabStops);var width=tl.metrics(null);TextLine.recycle(tl);return width;}},{key:'getLineExtent_3',value:function getLineExtent_3(line,tabStops,full){var start=this.getLineStart(line);var end=full?this.getLineEnd(line):this.getLineVisibleEnd(line);var hasTabsOrEmoji=this.getLineContainsTab(line);var directions=this.getLineDirections(line);var dir=this.getParagraphDirection(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabsOrEmoji,tabStops);var width=tl.metrics(null);TextLine.recycle(tl);return width;}},{key:'getLineForVertical',value:function getLineForVertical(vertical){var high=this.getLineCount(),low=-1,guess=undefined;while(high-low>1){guess=Math.floor((high+low)/2);if(this.getLineTop(guess)>vertical)high=guess;else low=guess;}if(low<0)return 0;else return low;}},{key:'getLineForOffset',value:function getLineForOffset(offset){var high=this.getLineCount(),low=-1,guess=undefined;while(high-low>1){guess=Math.floor((high+low)/2);if(this.getLineStart(guess)>offset)high=guess;else low=guess;}if(low<0)return 0;else return low;}},{key:'getOffsetForHorizontal',value:function getOffsetForHorizontal(line,horiz){var max=this.getLineEnd(line)-1;var min=this.getLineStart(line);var dirs=this.getLineDirections(line);if(line==this.getLineCount()-1)max++;var best=min;var bestdist=Math.abs(this.getPrimaryHorizontal(best)-horiz);for(var i=0;imax)there=max;var high=there-1+1,low=here+1-1,guess=undefined;while(high-low>1){guess=Math.floor((high+low)/2);var adguess=this.getOffsetAtStartOf(guess);if(this.getPrimaryHorizontal(adguess)*swap>=horiz*swap)high=guess;else low=guess;}if(lowstart;end--){ch=text.charAt(end-1);if(ch=='\n'){return end-1;}if(ch!=' '&&ch!='\t'){break;}}return end;}},{key:'getLineBottom',value:function getLineBottom(line){return this.getLineTop(line+1);}},{key:'getLineBaseline',value:function getLineBaseline(line){return this.getLineTop(line+1)-this.getLineDescent(line);}},{key:'getLineAscent',value:function getLineAscent(line){return this.getLineTop(line)-(this.getLineTop(line+1)-this.getLineDescent(line));}},{key:'getOffsetToLeftOf',value:function getOffsetToLeftOf(offset){return this.getOffsetToLeftRightOf(offset,true);}},{key:'getOffsetToRightOf',value:function getOffsetToRightOf(offset){return this.getOffsetToLeftRightOf(offset,false);}},{key:'getOffsetToLeftRightOf',value:function getOffsetToLeftRightOf(caret,toLeft){var line=this.getLineForOffset(caret);var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var lineDir=this.getParagraphDirection(line);var lineChanged=false;var advance=toLeft==(lineDir==Layout.DIR_RIGHT_TO_LEFT);if(advance){if(caret==lineEnd){if(line0){lineChanged=true;--line;}else {return caret;}}}if(lineChanged){lineStart=this.getLineStart(line);lineEnd=this.getLineEnd(line);var newDir=this.getParagraphDirection(line);if(newDir!=lineDir){toLeft=!toLeft;lineDir=newDir;}}var directions=this.getLineDirections(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,lineStart,lineEnd,lineDir,directions,false,null);caret=lineStart+tl.getOffsetToLeftRightOf(caret-lineStart,toLeft);tl=TextLine.recycle(tl);return caret;}},{key:'getOffsetAtStartOf',value:function getOffsetAtStartOf(offset){if(offset==0)return 0;var text=this.mText;var c=text.codePointAt(offset);var questionMark='?'.codePointAt(0);if(c>=questionMark&&c<=questionMark){var c1=text.codePointAt(offset-1);if(c1>=questionMark&&c1<=questionMark)offset-=1;}if(this.mSpannedText){var spans=text.getSpans(offset,offset,ReplacementSpan.type);for(var i=0;ioffset)offset=start;}}return offset;}},{key:'shouldClampCursor',value:function shouldClampCursor(line){switch(this.getParagraphAlignment(line)){case Layout.Alignment.ALIGN_LEFT:return true;case Layout.Alignment.ALIGN_NORMAL:return this.getParagraphDirection(line)>0;default:return false;}}},{key:'getCursorPath',value:function getCursorPath(point,dest,editingBuffer){dest.reset();}},{key:'addSelection',value:function addSelection(line,start,end,top,bottom,dest){}},{key:'getSelectionPath',value:function getSelectionPath(start,end,dest){dest.reset();}},{key:'getParagraphAlignment',value:function getParagraphAlignment(line){var align=this.mAlignment;return align;}},{key:'getParagraphLeft',value:function getParagraphLeft(line){var left=0;var dir=this.getParagraphDirection(line);if(dir==Layout.DIR_RIGHT_TO_LEFT||!this.mSpannedText){return left;}return this.getParagraphLeadingMargin(line);}},{key:'getParagraphRight',value:function getParagraphRight(line){var right=this.mWidth;var dir=this.getParagraphDirection(line);if(dir==Layout.DIR_LEFT_TO_RIGHT||!this.mSpannedText){return right;}return right-this.getParagraphLeadingMargin(line);}},{key:'getParagraphLeadingMargin',value:function getParagraphLeadingMargin(line){if(!this.mSpannedText){return 0;}var spanned=this.mText;var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var spanEnd=spanned.nextSpanTransition(lineStart,lineEnd,LeadingMarginSpan.type);var spans=Layout.getParagraphSpans(spanned,lineStart,spanEnd,LeadingMarginSpan.type);if(spans.length==0){return 0;}var margin=0;var isFirstParaLine=lineStart==0||spanned.charAt(lineStart-1)=='\n';for(var i=0;i=start&&aneed)need=w;next++;}return need;}},{key:'measurePara',value:function measurePara(paint,text,start,end){var mt=MeasuredText.obtain();var tl=TextLine.obtain();try{mt.setPara(text,start,end,TextDirectionHeuristics.LTR);var directions=undefined;var dir=undefined;directions=Layout.DIRS_ALL_LEFT_TO_RIGHT;dir=Layout.DIR_LEFT_TO_RIGHT;var chars=mt.mChars;var len=mt.mLen;var hasTabs=false;var tabStops=null;for(var i=0;i0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,spans);}}break;}}tl.set(paint,text,start,end,dir,directions,hasTabs,tabStops);return tl.metrics(null);}finally {TextLine.recycle(tl);MeasuredText.recycle(mt);}}},{key:'nextTab',value:function nextTab(text,start,end,h,tabs){var nh=Float.MAX_VALUE;var alltabs=false;if(Spanned.isImplements(text)){if(tabs==null){tabs=Layout.getParagraphSpans(text,start,end,TabStopSpan.type);alltabs=true;}for(var i=0;ih)nh=where;}if(nh!=Float.MAX_VALUE)return nh;}return Math.floor((h+Layout.TAB_INCREMENT)/Layout.TAB_INCREMENT)*Layout.TAB_INCREMENT;}},{key:'getParagraphSpans',value:function getParagraphSpans(text,start,end,type){if(start==end&&start>0){return [];}return text.getSpans(start,end,type);}}]);return Layout;}();Layout.NO_PARA_SPANS=[];Layout.sTempRect=new Rect();Layout.DIR_LEFT_TO_RIGHT=1;Layout.DIR_RIGHT_TO_LEFT=-1;Layout.DIR_REQUEST_LTR=1;Layout.DIR_REQUEST_RTL=-1;Layout.DIR_REQUEST_DEFAULT_LTR=2;Layout.DIR_REQUEST_DEFAULT_RTL=-2;Layout.RUN_LENGTH_MASK=0x03ffffff;Layout.RUN_LEVEL_SHIFT=26;Layout.RUN_LEVEL_MASK=0x3f;Layout.RUN_RTL_FLAG=1<1){Arrays.sort(stops,0,ns);}if(stops!=this.mStops){this.mStops=stops;}}this.mNumStops=ns;}},{key:'nextTab',value:function nextTab(h){var ns=this.mNumStops;if(ns>0){var stops=this.mStops;for(var i=0;ih){return stop;}}}return TabStops.nextDefaultStop(h,this.mIncrement);}}],[{key:'nextDefaultStop',value:function nextDefaultStop(h,inc){return Math.floor((h+inc)/inc)*inc;}}]);return TabStops;}();Layout.TabStops=TabStops;var Directions=function Directions(dirs){_classCallCheck(this,Directions);this.mDirections=dirs;};Layout.Directions=Directions;var Ellipsizer=function(_String){_inherits(Ellipsizer,_String);function Ellipsizer(s){_classCallCheck(this,Ellipsizer);var _this61=_possibleConstructorReturn(this,Object.getPrototypeOf(Ellipsizer).call(this,s));_this61.mWidth=0;_this61.mText=s;return _this61;}_createClass(Ellipsizer,[{key:'toString',value:function toString(){var line1=this.mLayout.getLineForOffset(0);var line2=this.mLayout.getLineForOffset(this.mText.length);var dest=this.mText.split('');for(var i=line1;i<=line2;i++){this.mLayout.ellipsize(0,this.mText.length,i,dest,0,this.mMethod);}return dest.join('');}}]);return Ellipsizer;}(String);Layout.Ellipsizer=Ellipsizer;var SpannedEllipsizer=function(_Layout$Ellipsizer){_inherits(SpannedEllipsizer,_Layout$Ellipsizer);function SpannedEllipsizer(display){_classCallCheck(this,SpannedEllipsizer);var _this62=_possibleConstructorReturn(this,Object.getPrototypeOf(SpannedEllipsizer).call(this,display));_this62.mSpanned=display;return _this62;}_createClass(SpannedEllipsizer,[{key:'getSpans',value:function getSpans(start,end,type){return this.mSpanned.getSpans(start,end,type);}},{key:'getSpanStart',value:function getSpanStart(tag){return this.mSpanned.getSpanStart(tag);}},{key:'getSpanEnd',value:function getSpanEnd(tag){return this.mSpanned.getSpanEnd(tag);}},{key:'getSpanFlags',value:function getSpanFlags(tag){return this.mSpanned.getSpanFlags(tag);}},{key:'nextSpanTransition',value:function nextSpanTransition(start,limit,type){return this.mSpanned.nextSpanTransition(start,limit,type);}}]);return SpannedEllipsizer;}(Layout.Ellipsizer);Layout.SpannedEllipsizer=SpannedEllipsizer;(function(Alignment){Alignment[Alignment["ALIGN_NORMAL"]=0]="ALIGN_NORMAL";Alignment[Alignment["ALIGN_OPPOSITE"]=1]="ALIGN_OPPOSITE";Alignment[Alignment["ALIGN_CENTER"]=2]="ALIGN_CENTER";Alignment[Alignment["ALIGN_LEFT"]=3]="ALIGN_LEFT";Alignment[Alignment["ALIGN_RIGHT"]=4]="ALIGN_RIGHT";})(Layout.Alignment||(Layout.Alignment={}));var Alignment=Layout.Alignment;})(Layout=text_5.Layout||(text_5.Layout={}));Layout.DIRS_ALL_LEFT_TO_RIGHT=new Layout.Directions([0,Layout.RUN_LENGTH_MASK]);Layout.DIRS_ALL_RIGHT_TO_LEFT=new Layout.Directions([0,Layout.RUN_LENGTH_MASK|Layout.RUN_RTL_FLAG]);})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_6){var Canvas=android.graphics.Canvas;var ReplacementSpan=android.text.style.ReplacementSpan;var Log=android.util.Log;var Spanned=android.text.Spanned;var TextPaint=android.text.TextPaint;var MeasuredText=function(){function MeasuredText(){_classCallCheck(this,MeasuredText);this.mTextStart=0;this.mDir=0;this.mLen=0;this.mPos=0;this.mWorkPaint=new TextPaint();}_createClass(MeasuredText,[{key:'setPos',value:function setPos(pos){this.mPos=pos-this.mTextStart;}},{key:'setPara',value:function setPara(text,start,end,textDir){this.mText=text;this.mTextStart=start;var len=end-start;this.mLen=len;this.mPos=0;if(this.mWidths==null||this.mWidths.lengthlen)endInPara=len;for(var j=startInPara;j0&&this.mChars[i-1]==' '){i--;}return i;}else {var _i17=limit-1;while(_i17>=0){width-=w[_i17];if(width<0.0)break;_i17--;}while(_i17=0;){if(MeasuredText.sCached[i]!=null){mt=MeasuredText.sCached[i];MeasuredText.sCached[i]=null;return mt;}}}mt=new MeasuredText();if(MeasuredText.localLOGV){Log.v("MEAS","new: "+mt);}return mt;}},{key:'recycle',value:function recycle(mt){mt.mText=null;if(mt.mLen<1000){{for(var i=0;i='?'.codePointAt(0)&&c<='?'.codePointAt(0)){var c1=text.codePointAt(offset-2);if(c1>='?'.codePointAt(0)&&c1<='?'.codePointAt(0))offset-=2;else offset-=1;}else {offset-=1;}if(Spanned.isImplements(text)){var spans=text.getSpans(offset,offset,android.text.style.ReplacementSpan.type);for(var i=0;ioffset)offset=start;}}return offset;}},{key:'getOffsetAfter',value:function getOffsetAfter(text,offset){var len=text.length;if(offset==len)return len;if(offset==len-1)return len;var c=text.codePointAt(offset);if(c>='?'.codePointAt(0)&&c<='?'.codePointAt(0)){var c1=text.codePointAt(offset+1);if(c1>='?'.codePointAt(0)&&c1<='?'.codePointAt(0))offset+=2;else offset+=1;}else {offset+=1;}if(Spanned.isImplements(text)){var spans=text.getSpans(offset,offset,android.text.style.ReplacementSpan.type);for(var i=0;ioffset)offset=end;}}return offset;}},{key:'ellipsize',value:function ellipsize(text,paint,avail,where){var preserveLength=arguments.length<=4||arguments[4]===undefined?false:arguments[4];var callback=arguments.length<=5||arguments[5]===undefined?null:arguments[5];var textDir=arguments.length<=6||arguments[6]===undefined?TextDirectionHeuristics.FIRSTSTRONG_LTR:arguments[6];var ellipsis=arguments.length<=7||arguments[7]===undefined?undefined:arguments[7];ellipsis=ellipsis||(where==TextUtils.TruncateAt.END_SMALL?android.text.Layout.ELLIPSIS_TWO_DOTS[0]:android.text.Layout.ELLIPSIS_NORMAL[0]);var len=text.length;var mt=MeasuredText.obtain();try{var width=TextUtils.setPara(mt,paint,text,0,text.length,textDir);if(width<=avail){if(callback!=null){callback.ellipsized(0,0);}return text;}var ellipsiswid=paint.measureText(ellipsis);avail-=ellipsiswid;var left=0;var right=len;if(avail<0){}else if(where==TextUtils.TruncateAt.START){right=len-mt.breakText(len,false,avail);}else if(where==TextUtils.TruncateAt.END||where==TextUtils.TruncateAt.END_SMALL){left=mt.breakText(len,true,avail);}else {right=len-mt.breakText(len,false,avail/2);avail-=mt.measure(right,len);left=mt.breakText(right,true,avail);}if(callback!=null){callback.ellipsized(left,right);}var buf=mt.mChars.split('');var sp=Spanned.isImplements(text)?text:null;var remaining=len-(right-left);if(preserveLength){if(remaining>0){buf[left++]=ellipsis.charAt(0);}for(var i=left;i=0;i--){var child=this.getChildAt(i);var wparams=child.getLayoutParams();if(wparams.isFocusable()){return child;}}if(findParent){var decor=this.getParent();if(decor!=null){var windowLayout=decor.getParent();if(windowLayout instanceof Layout){return windowLayout.getTopFocusableWindowView();}}}}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var topFocusView=this.getTopFocusableWindowView(false);if(topFocusView&&topFocusView.dispatchKeyEvent(event)){return true;}return _get2(Object.getPrototypeOf(Layout.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'isTransformedTouchPointInView',value:function isTransformedTouchPointInView(x,y,child,outLocalPoint){var wparams=child.getLayoutParams();if(wparams.isFocusable()&&wparams.isTouchable()){return true;}return false;}},{key:'onChildVisibilityChanged',value:function onChildVisibilityChanged(child,oldVisibility,newVisibility){_get2(Object.getPrototypeOf(Layout.prototype),'onChildVisibilityChanged',this).call(this,child,oldVisibility,newVisibility);var wparams=child.getLayoutParams();if(newVisibility===View.VISIBLE){var resumeAnimation=child.getContext().androidUI.mActivityThread.getOverrideResumeAnimation();if(resumeAnimation===undefined)resumeAnimation=wparams.resumeAnimation;if(resumeAnimation){child.startAnimation(resumeAnimation);}}else {var hideAnimation=child.getContext().androidUI.mActivityThread.getOverrideHideAnimation();if(hideAnimation===undefined)hideAnimation=wparams.hideAnimation;if(hideAnimation){child.startAnimation(hideAnimation);child.drawAnimation(this,android.os.SystemClock.uptimeMillis(),hideAnimation);}}}},{key:'tagName',value:function tagName(){return 'windowsGroup';}}]);return Layout;}(android.widget.FrameLayout);WindowManager.Layout=Layout;var LayoutParams=function(_android$widget$Frame2){_inherits(LayoutParams,_android$widget$Frame2);function LayoutParams(){var _type=arguments.length<=0||arguments[0]===undefined?LayoutParams.TYPE_APPLICATION:arguments[0];_classCallCheck(this,LayoutParams);var _this64=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT));_this64.x=0;_this64.y=0;_this64.type=0;_this64.flags=0;_this64.exitAnimation=android.R.anim.activity_close_exit;_this64.enterAnimation=android.R.anim.activity_open_enter;_this64.resumeAnimation=android.R.anim.activity_close_enter;_this64.hideAnimation=android.R.anim.activity_open_exit;_this64.dimAmount=0;_this64.mTitle="";_this64.type=_type;return _this64;}_createClass(LayoutParams,[{key:'setTitle',value:function setTitle(title){if(null==title)title="";this.mTitle=title;}},{key:'getTitle',value:function getTitle(){return this.mTitle;}},{key:'copyFrom',value:function copyFrom(o){var changes=0;if(this.width!=o.width){this.width=o.width;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.height!=o.height){this.height=o.height;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.x!=o.x){this.x=o.x;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.y!=o.y){this.y=o.y;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.type!=o.type){this.type=o.type;changes|=LayoutParams.TYPE_CHANGED;}if(this.flags!=o.flags){var diff=this.flags^o.flags;this.flags=o.flags;changes|=LayoutParams.FLAGS_CHANGED;}if(this.gravity!=o.gravity){this.gravity=o.gravity;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.mTitle!=o.mTitle){this.mTitle=o.mTitle;changes|=LayoutParams.TITLE_CHANGED;}if(this.dimAmount!=o.dimAmount){this.dimAmount=o.dimAmount;changes|=LayoutParams.DIM_AMOUNT_CHANGED;}return changes;}},{key:'isFocusable',value:function isFocusable(){return (this.flags&LayoutParams.FLAG_NOT_FOCUSABLE)==0;}},{key:'isTouchable',value:function isTouchable(){return (this.flags&LayoutParams.FLAG_NOT_TOUCHABLE)==0;}},{key:'isTouchModal',value:function isTouchModal(){return (this.flags&LayoutParams.FLAG_NOT_TOUCH_MODAL)==0;}},{key:'isFloating',value:function isFloating(){return (this.flags&LayoutParams.FLAG_FLOATING)!=0;}},{key:'isSplitTouch',value:function isSplitTouch(){return (this.flags&LayoutParams.FLAG_SPLIT_TOUCH)!=0;}},{key:'isWatchTouchOutside',value:function isWatchTouchOutside(){return (this.flags&LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)!=0;}},{key:'leftMargin',get:function get(){if((this.gravity&Gravity.LEFT)!=0)return _get2(Object.getPrototypeOf(LayoutParams.prototype),'leftMargin',this)+this.x;return _get2(Object.getPrototypeOf(LayoutParams.prototype),'leftMargin',this);},set:function set(value){_set2(Object.getPrototypeOf(LayoutParams.prototype),'leftMargin',value,this);}},{key:'topMargin',get:function get(){if((this.gravity&Gravity.TOP)!=0)return _get2(Object.getPrototypeOf(LayoutParams.prototype),'topMargin',this)+this.y;return _get2(Object.getPrototypeOf(LayoutParams.prototype),'topMargin',this);},set:function set(value){_set2(Object.getPrototypeOf(LayoutParams.prototype),'topMargin',value,this);}},{key:'rightMargin',get:function get(){if((this.gravity&Gravity.RIGHT)!=0)return _get2(Object.getPrototypeOf(LayoutParams.prototype),'rightMargin',this)+this.x;return _get2(Object.getPrototypeOf(LayoutParams.prototype),'rightMargin',this);},set:function set(value){_set2(Object.getPrototypeOf(LayoutParams.prototype),'rightMargin',value,this);}},{key:'bottomMargin',get:function get(){if((this.gravity&Gravity.BOTTOM)!=0)return _get2(Object.getPrototypeOf(LayoutParams.prototype),'bottomMargin',this)+this.y;return _get2(Object.getPrototypeOf(LayoutParams.prototype),'bottomMargin',this);},set:function set(value){_set2(Object.getPrototypeOf(LayoutParams.prototype),'bottomMargin',value,this);}}]);return LayoutParams;}(android.widget.FrameLayout.LayoutParams);LayoutParams.FIRST_APPLICATION_WINDOW=1;LayoutParams.TYPE_BASE_APPLICATION=1;LayoutParams.TYPE_APPLICATION=2;LayoutParams.TYPE_APPLICATION_STARTING=3;LayoutParams.LAST_APPLICATION_WINDOW=99;LayoutParams.FIRST_SUB_WINDOW=1000;LayoutParams.TYPE_APPLICATION_PANEL=LayoutParams.FIRST_SUB_WINDOW;LayoutParams.TYPE_APPLICATION_MEDIA=LayoutParams.FIRST_SUB_WINDOW+1;LayoutParams.TYPE_APPLICATION_SUB_PANEL=LayoutParams.FIRST_SUB_WINDOW+2;LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG=LayoutParams.FIRST_SUB_WINDOW+3;LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY=LayoutParams.FIRST_SUB_WINDOW+4;LayoutParams.LAST_SUB_WINDOW=1999;LayoutParams.FIRST_SYSTEM_WINDOW=2000;LayoutParams.TYPE_STATUS_BAR=LayoutParams.FIRST_SYSTEM_WINDOW;LayoutParams.TYPE_SEARCH_BAR=LayoutParams.FIRST_SYSTEM_WINDOW+1;LayoutParams.TYPE_PHONE=LayoutParams.FIRST_SYSTEM_WINDOW+2;LayoutParams.TYPE_SYSTEM_ALERT=LayoutParams.FIRST_SYSTEM_WINDOW+3;LayoutParams.TYPE_KEYGUARD=LayoutParams.FIRST_SYSTEM_WINDOW+4;LayoutParams.TYPE_TOAST=LayoutParams.FIRST_SYSTEM_WINDOW+5;LayoutParams.TYPE_SYSTEM_OVERLAY=LayoutParams.FIRST_SYSTEM_WINDOW+6;LayoutParams.TYPE_PRIORITY_PHONE=LayoutParams.FIRST_SYSTEM_WINDOW+7;LayoutParams.TYPE_SYSTEM_DIALOG=LayoutParams.FIRST_SYSTEM_WINDOW+8;LayoutParams.LAST_SYSTEM_WINDOW=2999;LayoutParams.FLAG_NOT_FOCUSABLE=0x00000008;LayoutParams.FLAG_NOT_TOUCHABLE=0x00000010;LayoutParams.FLAG_NOT_TOUCH_MODAL=0x00000020;LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH=0x00040000;LayoutParams.FLAG_SPLIT_TOUCH=0x00800000;LayoutParams.FLAG_FLOATING=0x40000000;LayoutParams.LAYOUT_CHANGED=1<<0;LayoutParams.TYPE_CHANGED=1<<1;LayoutParams.FLAGS_CHANGED=1<<2;LayoutParams.FORMAT_CHANGED=1<<3;LayoutParams.ANIMATION_CHANGED=1<<4;LayoutParams.DIM_AMOUNT_CHANGED=1<<5;LayoutParams.TITLE_CHANGED=1<<6;LayoutParams.ALPHA_CHANGED=1<<7;WindowManager.LayoutParams=LayoutParams;})(WindowManager=view.WindowManager||(view.WindowManager={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var TranslateAnimation=function(_Animation){_inherits(TranslateAnimation,_Animation);function TranslateAnimation(){_classCallCheck(this,TranslateAnimation);var _this65=_possibleConstructorReturn(this,Object.getPrototypeOf(TranslateAnimation).call(this));_this65.mFromXType=TranslateAnimation.ABSOLUTE;_this65.mToXType=TranslateAnimation.ABSOLUTE;_this65.mFromYType=TranslateAnimation.ABSOLUTE;_this65.mToYType=TranslateAnimation.ABSOLUTE;_this65.mFromXValue=0.0;_this65.mToXValue=0.0;_this65.mFromYValue=0.0;_this65.mToYValue=0.0;_this65.mFromXDelta=0;_this65.mToXDelta=0;_this65.mFromYDelta=0;_this65.mToYDelta=0;if(arguments.length===4){_this65.mFromXValue=arguments.length<=0?undefined:arguments[0];_this65.mToXValue=arguments.length<=1?undefined:arguments[1];_this65.mFromYValue=arguments.length<=2?undefined:arguments[2];_this65.mToYValue=arguments.length<=3?undefined:arguments[3];_this65.mFromXType=TranslateAnimation.ABSOLUTE;_this65.mToXType=TranslateAnimation.ABSOLUTE;_this65.mFromYType=TranslateAnimation.ABSOLUTE;_this65.mToYType=TranslateAnimation.ABSOLUTE;}else {_this65.mFromXType=arguments.length<=0?undefined:arguments[0];_this65.mFromXValue=arguments.length<=1?undefined:arguments[1];_this65.mToXType=arguments.length<=2?undefined:arguments[2];_this65.mToXValue=arguments.length<=3?undefined:arguments[3];_this65.mFromYType=arguments.length<=4?undefined:arguments[4];_this65.mFromYValue=arguments.length<=5?undefined:arguments[5];_this65.mToYType=arguments.length<=6?undefined:arguments[6];_this65.mToYValue=arguments.length<=7?undefined:arguments[7];}return _this65;}_createClass(TranslateAnimation,[{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var dx=this.mFromXDelta;var dy=this.mFromYDelta;if(this.mFromXDelta!=this.mToXDelta){dx=this.mFromXDelta+(this.mToXDelta-this.mFromXDelta)*interpolatedTime;}if(this.mFromYDelta!=this.mToYDelta){dy=this.mFromYDelta+(this.mToYDelta-this.mFromYDelta)*interpolatedTime;}t.getMatrix().setTranslate(dx,dy);}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(Object.getPrototypeOf(TranslateAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mFromXDelta=this.resolveSize(this.mFromXType,this.mFromXValue,width,parentWidth);this.mToXDelta=this.resolveSize(this.mToXType,this.mToXValue,width,parentWidth);this.mFromYDelta=this.resolveSize(this.mFromYType,this.mFromYValue,height,parentHeight);this.mToYDelta=this.resolveSize(this.mToYType,this.mToYValue,height,parentHeight);}}]);return TranslateAnimation;}(Animation);animation.TranslateAnimation=TranslateAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var AlphaAnimation=function(_Animation2){_inherits(AlphaAnimation,_Animation2);function AlphaAnimation(fromAlpha,toAlpha){_classCallCheck(this,AlphaAnimation);var _this66=_possibleConstructorReturn(this,Object.getPrototypeOf(AlphaAnimation).call(this));_this66.mFromAlpha=0;_this66.mToAlpha=0;_this66.mFromAlpha=fromAlpha;_this66.mToAlpha=toAlpha;return _this66;}_createClass(AlphaAnimation,[{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var alpha=this.mFromAlpha;t.setAlpha(alpha+(this.mToAlpha-alpha)*interpolatedTime);}},{key:'willChangeTransformationMatrix',value:function willChangeTransformationMatrix(){return false;}},{key:'willChangeBounds',value:function willChangeBounds(){return false;}},{key:'hasAlpha',value:function hasAlpha(){return true;}}]);return AlphaAnimation;}(Animation);animation.AlphaAnimation=AlphaAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var ScaleAnimation=function(_Animation3){_inherits(ScaleAnimation,_Animation3);function ScaleAnimation(fromX,toX,fromY,toY){var pivotXType=arguments.length<=4||arguments[4]===undefined?ScaleAnimation.ABSOLUTE:arguments[4];var pivotXValue=arguments.length<=5||arguments[5]===undefined?0:arguments[5];var pivotYType=arguments.length<=6||arguments[6]===undefined?ScaleAnimation.ABSOLUTE:arguments[6];var pivotYValue=arguments.length<=7||arguments[7]===undefined?0:arguments[7];_classCallCheck(this,ScaleAnimation);var _this67=_possibleConstructorReturn(this,Object.getPrototypeOf(ScaleAnimation).call(this));_this67.mFromX=0;_this67.mToX=0;_this67.mFromY=0;_this67.mToY=0;_this67.mFromXData=0;_this67.mToXData=0;_this67.mFromYData=0;_this67.mToYData=0;_this67.mPivotXType=ScaleAnimation.ABSOLUTE;_this67.mPivotYType=ScaleAnimation.ABSOLUTE;_this67.mPivotXValue=0.0;_this67.mPivotYValue=0.0;_this67.mPivotX=0;_this67.mPivotY=0;_this67.mResources=null;_this67.mFromX=fromX;_this67.mToX=toX;_this67.mFromY=fromY;_this67.mToY=toY;_this67.mPivotXValue=pivotXValue;_this67.mPivotXType=pivotXType;_this67.mPivotYValue=pivotYValue;_this67.mPivotYType=pivotYType;_this67.initializePivotPoint();return _this67;}_createClass(ScaleAnimation,[{key:'initializePivotPoint',value:function initializePivotPoint(){if(this.mPivotXType==ScaleAnimation.ABSOLUTE){this.mPivotX=this.mPivotXValue;}if(this.mPivotYType==ScaleAnimation.ABSOLUTE){this.mPivotY=this.mPivotYValue;}}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var sx=1.0;var sy=1.0;var scale=this.getScaleFactor();if(this.mFromX!=1.0||this.mToX!=1.0){sx=this.mFromX+(this.mToX-this.mFromX)*interpolatedTime;}if(this.mFromY!=1.0||this.mToY!=1.0){sy=this.mFromY+(this.mToY-this.mFromY)*interpolatedTime;}if(this.mPivotX==0&&this.mPivotY==0){t.getMatrix().setScale(sx,sy);}else {t.getMatrix().setScale(sx,sy,scale*this.mPivotX,scale*this.mPivotY);}}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(Object.getPrototypeOf(ScaleAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mPivotX=this.resolveSize(this.mPivotXType,this.mPivotXValue,width,parentWidth);this.mPivotY=this.resolveSize(this.mPivotYType,this.mPivotYValue,height,parentHeight);}}]);return ScaleAnimation;}(Animation);animation.ScaleAnimation=ScaleAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var ArrayList=java.util.ArrayList;var Long=java.lang.Long;var Animation=android.view.animation.Animation;var Transformation=android.view.animation.Transformation;var AnimationSet=function(_Animation4){_inherits(AnimationSet,_Animation4);function AnimationSet(){var shareInterpolator=arguments.length<=0||arguments[0]===undefined?false:arguments[0];_classCallCheck(this,AnimationSet);var _this68=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationSet).call(this));_this68.mFlags=0;_this68.mAnimations=new ArrayList();_this68.mTempTransformation=new Transformation();_this68.mLastEnd=0;_this68.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK,shareInterpolator);_this68.init();return _this68;}_createClass(AnimationSet,[{key:'setFlag',value:function setFlag(mask,value){if(value){this.mFlags|=mask;}else {this.mFlags&=~mask;}}},{key:'init',value:function init(){this.mStartTime=0;}},{key:'setFillAfter',value:function setFillAfter(fillAfter){this.mFlags|=AnimationSet.PROPERTY_FILL_AFTER_MASK;_get2(Object.getPrototypeOf(AnimationSet.prototype),'setFillAfter',this).call(this,fillAfter);}},{key:'setFillBefore',value:function setFillBefore(fillBefore){this.mFlags|=AnimationSet.PROPERTY_FILL_BEFORE_MASK;_get2(Object.getPrototypeOf(AnimationSet.prototype),'setFillBefore',this).call(this,fillBefore);}},{key:'setRepeatMode',value:function setRepeatMode(repeatMode){this.mFlags|=AnimationSet.PROPERTY_REPEAT_MODE_MASK;_get2(Object.getPrototypeOf(AnimationSet.prototype),'setRepeatMode',this).call(this,repeatMode);}},{key:'setStartOffset',value:function setStartOffset(startOffset){this.mFlags|=AnimationSet.PROPERTY_START_OFFSET_MASK;_get2(Object.getPrototypeOf(AnimationSet.prototype),'setStartOffset',this).call(this,startOffset);}},{key:'hasAlpha',value:function hasAlpha(){if(this.mDirty){this.mDirty=this.mHasAlpha=false;var count=this.mAnimations.size();var animations=this.mAnimations;for(var i=0;i=0;--i){var d=animations.get(i).computeDurationHint();if(d>duration)duration=d;}return duration;}},{key:'initializeInvalidateRegion',value:function initializeInvalidateRegion(left,top,right,bottom){var region=this.mPreviousRegion;region.set(left,top,right,bottom);region.inset(-1.0,-1.0);if(this.mFillBefore){var count=this.mAnimations.size();var animations=this.mAnimations;var temp=this.mTempTransformation;var previousTransformation=this.mPreviousTransformation;for(var i=count-1;i>=0;--i){var a=animations.get(i);if(!a.isFillEnabled()||a.getFillBefore()||a.getStartOffset()==0){temp.clear();var interpolator=a.mInterpolator;a.applyTransformation(interpolator!=null?interpolator.getInterpolation(0.0):0.0,temp);previousTransformation.compose(temp);}}}}},{key:'getTransformation',value:function getTransformation(currentTime,t){var count=this.mAnimations.size();var animations=this.mAnimations;var temp=this.mTempTransformation;var more=false;var started=false;var ended=true;t.clear();for(var i=count-1;i>=0;--i){var a=animations.get(i);temp.clear();more=a.getTransformation(currentTime,temp,this.getScaleFactor())||more;t.compose(temp);started=started||a.hasStarted();ended=a.hasEnded()&&ended;}if(started&&!this.mStarted){if(this.mListener!=null){this.mListener.onAnimationStart(this);}this.mStarted=true;}if(ended!=this.mEnded){if(this.mListener!=null){this.mListener.onAnimationEnd(this);}this.mEnded=ended;}return more;}},{key:'scaleCurrentDuration',value:function scaleCurrentDuration(scale){var animations=this.mAnimations;var count=animations.size();for(var i=0;idecorView.getWidth()+slop||y>decorView.getHeight()+slop;}},{key:'makeActive',value:function makeActive(){if(this.mContainer!=null){if(this.mContainer.mActiveWindow!=null){this.mContainer.mActiveWindow.mIsActive=false;}this.mContainer.mActiveWindow=this;}this.mIsActive=true;this.onActive();}},{key:'isActive',value:function isActive(){return this.mIsActive;}},{key:'findViewById',value:function findViewById(id){return this.getDecorView().findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){this.mContentParent.removeAllViews();this.addContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){if(params){this.mContentParent.addView(view,params);}else {this.mContentParent.addView(view);}var cb=this.getCallback();if(cb!=null&&!this.isDestroyed()){cb.onContentChanged();}}},{key:'getContentParent',value:function getContentParent(){return this.mContentParent;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mDecor!=null?this.mDecor.findFocus():null;}},{key:'getLayoutInflater',value:function getLayoutInflater(){return this.mContext.getLayoutInflater();}},{key:'setTitle',value:function setTitle(title){this.mDecor.bindElement.setAttribute('title',title);this.getAttributes().setTitle(title);}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(drawable){if(this.mDecor!=null){this.mDecor.setBackground(drawable);}}},{key:'setBackgroundColor',value:function setBackgroundColor(color){if(this.mDecor!=null){this.mDecor.setBackgroundColor(color);}}},{key:'takeKeyEvents',value:function takeKeyEvents(_get){this.mDecor.setFocusable(_get);}},{key:'superDispatchKeyEvent',value:function superDispatchKeyEvent(event){return this.mDecor.superDispatchKeyEvent(event);}},{key:'superDispatchTouchEvent',value:function superDispatchTouchEvent(event){return this.mDecor.superDispatchTouchEvent(event);}},{key:'superDispatchGenericMotionEvent',value:function superDispatchGenericMotionEvent(event){return this.mDecor.superDispatchGenericMotionEvent(event);}},{key:'getDecorView',value:function getDecorView(){return this.mDecor;}},{key:'peekDecorView',value:function peekDecorView(){return this.mDecor;}},{key:'onActive',value:function onActive(){}}]);return Window;}();view_6.Window=Window;var DecorView=function(_FrameLayout){_inherits(DecorView,_FrameLayout);function DecorView(window){_classCallCheck(this,DecorView);var _this69=_possibleConstructorReturn(this,Object.getPrototypeOf(DecorView).call(this,window.mContext));_this69._ignoreRequestLayoutInAnimation=true;_this69._pendingRequestLayoutOnAnimationEnd=false;_this69._ignoreInvalidateInAnimation=true;_this69._pendingInvalidateOnAnimationEnd=false;_this69.Window_this=window;_this69.bindElement.classList.add(window.mContext.constructor.name);_this69.setBackgroundColor(android.graphics.Color.WHITE);_this69.setIsRootNamespace(true);return _this69;}_createClass(DecorView,[{key:'invalidate',value:function invalidate(){var _get3;if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}for(var _len26=arguments.length,args=Array(_len26),_key27=0;_key27<_len26;_key27++){args[_key27]=arguments[_key27];}(_get3=_get2(Object.getPrototypeOf(DecorView.prototype),'invalidate',this)).call.apply(_get3,[this].concat(args));}},{key:'invalidateChild',value:function invalidateChild(child,dirty){if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}_get2(Object.getPrototypeOf(DecorView.prototype),'invalidateChild',this).call(this,child,dirty);}},{key:'invalidateChildFast',value:function invalidateChildFast(child,dirty){if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}_get2(Object.getPrototypeOf(DecorView.prototype),'invalidateChildFast',this).call(this,child,dirty);}},{key:'requestLayout',value:function requestLayout(){if(this._ignoreRequestLayoutInAnimation&&this.getAnimation()){this._pendingRequestLayoutOnAnimationEnd=true;return null;}_get2(Object.getPrototypeOf(DecorView.prototype),'requestLayout',this).call(this);}},{key:'onAnimationStart',value:function onAnimationStart(){_get2(Object.getPrototypeOf(DecorView.prototype),'onAnimationStart',this).call(this);this.setDrawingCacheEnabled(true);this.buildDrawingCache(true);}},{key:'onAnimationEnd',value:function onAnimationEnd(){_get2(Object.getPrototypeOf(DecorView.prototype),'onAnimationEnd',this).call(this);this.setDrawingCacheEnabled(false);if(this._pendingInvalidateOnAnimationEnd){this._pendingInvalidateOnAnimationEnd=false;this.invalidate();}if(this._pendingRequestLayoutOnAnimationEnd){this._pendingRequestLayoutOnAnimationEnd=false;this.requestLayout();}}},{key:'buildDrawingCache',value:function buildDrawingCache(){var autoScale=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if(this.getAnimation()&&this.mUnscaledDrawingCache)return;_get2(Object.getPrototypeOf(DecorView.prototype),'buildDrawingCache',this).call(this,autoScale);}},{key:'drawFromParent',value:function drawFromParent(canvas,parent,drawingTime){var windowAnimation=this.getAnimation();var wparams=this.getLayoutParams();var shadowAlpha=wparams.dimAmount*255;if(windowAnimation!=null&&shadowAlpha){var duration=windowAnimation.getDuration();var startTime=windowAnimation.getStartTime();if(startTime<0)startTime=drawingTime;var startOffset=windowAnimation.getStartOffset();var normalizedTime=undefined;if(duration!=0){normalizedTime=(drawingTime-(startTime+startOffset))/duration;normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);}else {normalizedTime=drawingTime=0;i--){var child=this.getChildAt(i);if(child instanceof WindowManager.Layout&&child.dispatchKeyEvent(event)){return true;}}var action=event.getAction();if(!this.Window_this.isDestroyed()){var cb=this.Window_this.getCallback();var handled=cb!=null?cb.dispatchKeyEvent(event):_get2(Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);if(handled){return true;}}return _get2(Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){var wparams=this.getLayoutParams();var cb=this.Window_this.getCallback();var outside=this.Window_this.isOutOfBounds(this.getContext(),ev);if(outside&&!wparams.isTouchModal()){if(wparams.isWatchTouchOutside()&&ev.getAction()==android.view.MotionEvent.ACTION_DOWN){var action=ev.getAction();ev.setAction(android.view.MotionEvent.ACTION_OUTSIDE);if(cb!=null&&!this.Window_this.isDestroyed()){cb.dispatchTouchEvent(ev);}else {_get2(Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,ev);}ev.setAction(action);}return false;}cb!=null&&!this.Window_this.isDestroyed()?cb.dispatchTouchEvent(ev):_get2(Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,ev);return true;}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){var cb=this.Window_this.getCallback();return cb!=null&&!this.Window_this.isDestroyed()?cb.dispatchGenericMotionEvent(ev):_get2(Object.getPrototypeOf(DecorView.prototype),'dispatchGenericMotionEvent',this).call(this,ev);}},{key:'superDispatchKeyEvent',value:function superDispatchKeyEvent(event){return _get2(Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'superDispatchTouchEvent',value:function superDispatchTouchEvent(event){return _get2(Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,event);}},{key:'superDispatchGenericMotionEvent',value:function superDispatchGenericMotionEvent(event){return _get2(Object.getPrototypeOf(DecorView.prototype),'dispatchGenericMotionEvent',this).call(this,event);}},{key:'onTouchEvent',value:function onTouchEvent(event){return this.onInterceptTouchEvent(event);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){this.Window_this.mAttachInfo.mWindowVisibility=visibility;this.dispatchWindowVisibilityChanged(visibility);_get2(Object.getPrototypeOf(DecorView.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){this.Window_this.mAttachInfo.mHasWindowFocus=hasWindowFocus;_get2(Object.getPrototypeOf(DecorView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onWindowFocusChanged(hasWindowFocus);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){this.Window_this.mAttachInfo.mWindowVisibility=this.getVisibility();_get2(Object.getPrototypeOf(DecorView.prototype),'onAttachedToWindow',this).call(this);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onAttachedToWindow();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(DecorView.prototype),'onDetachedFromWindow',this).call(this);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onDetachedFromWindow();}}}]);return DecorView;}(FrameLayout);})(view=android.view||(android.view={}));})(android||(android={}));var PageStack;(function(PageStack){PageStack.DEBUG=false;var history_go=history.go;var iFrameHistoryLengthAsFake=0;var historyLocking=false;var windowLoadLocking=true;var pendingFuncLock=[];var initCalled=false;function init(){initCalled=true;_init();history.go=function(delta){PageStack.go(delta);};history.back=function(){var delta=arguments.length<=0||arguments[0]===undefined?-1:arguments[0];PageStack.go(delta);};history.forward=function(){var delta=arguments.length<=0||arguments[0]===undefined?1:arguments[0];PageStack.go(delta);};}PageStack.init=init;function checkInitCalled(){if(!initCalled)throw Error("PageStack.init() must be call first");}function _init(){PageStack.currentStack=history.state;if(PageStack.currentStack&&!PageStack.currentStack.isRoot){console.log('already has history.state when _init PageState, restore page');restorePageFromStackIfNeed();}else {PageStack.currentStack=PageStack.currentStack||{pageId:'',isRoot:true,stack:[{pageId:null}]};var initOpenUrl=location.hash;if(initOpenUrl&&initOpenUrl.indexOf('#')===0)initOpenUrl=initOpenUrl.substring(1);removeLastHistoryIfFaked();ensureLockDo(function(){history.replaceState(PageStack.currentStack,null,'#');});if(initOpenUrl&&initOpenUrl.length>0){if(firePagePush(initOpenUrl,null)){notifyNewPageOpened(initOpenUrl);}}}ensureLastHistoryFaked();if(document.readyState==='complete'){windowLoadLocking=false;setTimeout(initOnpopstate,0);}else {window.addEventListener('load',function(){windowLoadLocking=false;window.removeEventListener('popstate',onpopstateListener);setTimeout(initOnpopstate,0);});}}var onpopstateListener=function onpopstateListener(ev){var stack=ev.state;if(historyLocking){PageStack.currentStack=stack;return;}if(PageStack.DEBUG)console.log('onpopstate',stack);if(!stack){var _pageId=location.hash;if(_pageId[0]==='#')_pageId=_pageId.substring(1);historyGo(-2,false);if(firePagePush(_pageId,null)){notifyNewPageOpened(_pageId);}else {ensureLastHistoryFaked();}}else if(PageStack.currentStack.stack.length!=stack.stack.length){var delta=stack.stack.length-PageStack.currentStack.stack.length;if(delta>=0){console.warn('something error! stack: ',stack,'last stack: ',PageStack.currentStack);return;}var stackList=PageStack.currentStack.stack;PageStack.currentStack=stack;tryClosePageAfterHistoryChanged(stackList,delta);}else {PageStack.currentStack=stack;if(fireBackPressed()){ensureLastHistoryFaked();}else {var stackList=PageStack.currentStack.stack;var pageId=stackList[stackList.length-1].pageId;if(firePageClose(pageId,stackList[stackList.length-1].extra)){historyGo(-1);}else {ensureLastHistoryFaked();}}}};function initOnpopstate(){window.removeEventListener('popstate',onpopstateListener);window.addEventListener('popstate',onpopstateListener);}function go(delta){var pageAlreadyClose=arguments.length<=1||arguments[1]===undefined?false:arguments[1];checkInitCalled();if(historyLocking){ensureLockDo(function(){go(delta);});return;}var stackList=PageStack.currentStack.stack;if(delta===-1&&!pageAlreadyClose){if(!firePageClose(stackList[stackList.length-1].pageId,stackList[stackList.length-1].extra)){return;}}removeLastHistoryIfFaked();historyGo(delta);if(delta<-1&&!pageAlreadyClose){ensureLockDo(function(){tryClosePageAfterHistoryChanged(stackList,delta);});}}PageStack.go=go;function tryClosePageAfterHistoryChanged(stateListBeforeHistoryChange,delta){var historyLength=stateListBeforeHistoryChange.length;for(var i=historyLength+delta;i=0;i--){var state=stackList[i];if(state.pageId==pageId){var delta=i-historyLength;removeLastHistoryIfFaked();historyGo(delta);return;}}}PageStack.backToPage=backToPage;var releaseLockingTimeout=undefined;var requestHistoryGoWhenLocking=0;var ensureFakeAfterHistoryChange=false;function historyGo(delta){var ensureFaked=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(delta>=0)return;if(history.length===1)return;ensureFakeAfterHistoryChange=ensureFakeAfterHistoryChange||ensureFaked;if(historyLocking){requestHistoryGoWhenLocking+=delta;return;}if(PageStack.DEBUG)console.log('historyGo',delta);historyLocking=true;var state=history.state;if(releaseLockingTimeout)clearTimeout(releaseLockingTimeout);function checkRelease(){clearTimeout(releaseLockingTimeout);if(history.state===state){releaseLockingTimeout=setTimeout(checkRelease,0);}else {var continueGo=requestHistoryGoWhenLocking;if(continueGo!=0){requestHistoryGoWhenLocking=0;historyLocking=false;historyGo(continueGo,false);}else {if(ensureFakeAfterHistoryChange)ensureLastHistoryFakedImpl();ensureFakeAfterHistoryChange=false;releaseLockingTimeout=setTimeout(function(){historyLocking=false;},10);}}}releaseLockingTimeout=setTimeout(checkRelease,0);history_go.call(history,delta);}PageStack.historyGo=historyGo;function restorePageFromStackIfNeed(){if(PageStack.currentStack){var copy=PageStack.currentStack.stack.concat();copy.shift();var _iteratorNormalCompletion50=true;var _didIteratorError50=false;var _iteratorError50=undefined;try{for(var _iterator50=copy[Symbol.iterator](),_step50;!(_iteratorNormalCompletion50=(_step50=_iterator50.next()).done);_iteratorNormalCompletion50=true){var saveState=_step50.value;firePageOpen(saveState.pageId,saveState.extra,true);}}catch(err){_didIteratorError50=true;_iteratorError50=err;}finally {try{if(!_iteratorNormalCompletion50&&_iterator50.return){_iterator50.return();}}finally {if(_didIteratorError50){throw _iteratorError50;}}}}}function fireBackPressed(){if(PageStack.backListener){try{return PageStack.backListener();}catch(e){console.error(e);}}}function firePageOpen(pageId,pageExtra){var isRestore=arguments.length<=2||arguments[2]===undefined?false:arguments[2];if(PageStack.pageOpenHandler){try{return PageStack.pageOpenHandler(pageId,pageExtra,isRestore);}catch(e){console.error(e);}}}function firePagePush(pageId,pageExtra){if(PageStack.pagePushHandler){try{return PageStack.pagePushHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function firePageClose(pageId,pageExtra){if(PageStack.pageCloseHandler){try{return PageStack.pageCloseHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function notifyPageClosed(pageId){checkInitCalled();if(PageStack.DEBUG)console.log('notifyPageClosed',pageId);if(historyLocking){ensureLockDo(function(){notifyPageClosed(pageId);});return;}var stackList=PageStack.currentStack.stack;var historyLength=stackList.length;for(var i=historyLength-1;i>=0;i--){var state=stackList[i];if(state.pageId==pageId){if(i===historyLength-1){removeLastHistoryIfFaked();historyGo(-1);}else {var delta=i-historyLength;(function(delta){removeLastHistoryIfFaked();historyGo(delta);ensureLockDoAtFront(function(){var historyLength=stackList.length;var pageStartAddIndex=historyLength+delta+1;for(var j=pageStartAddIndex;j=0;i--){var state=stackList[i];if(state.pageId==pageId){return state.extra;}}}}PageStack.getPageExtra=getPageExtra;function setPageExtra(extra,pageId){checkInitCalled();removeLastHistoryIfFaked();ensureLockDo(function(){var stackList=PageStack.currentStack.stack;var historyLength=stackList.length;if(!pageId){stackList[historyLength-1].extra=extra;history.replaceState(PageStack.currentStack,null,'');}else {for(var i=historyLength-1;i>=0;i--){var state=stackList[i];if(state.pageId==pageId){state.extra=extra;history.replaceState(PageStack.currentStack,null,'');break;}}}ensureLastHistoryFakedImpl();});}PageStack.setPageExtra=setPageExtra;function ensureLockDo(func){checkInitCalled();if(!historyLocking&&!windowLoadLocking){func();return;}pendingFuncLock.push(func);_queryLockDo();}function ensureLockDoAtFront(func){var runNowIfNotLock=arguments.length<=1||arguments[1]===undefined?false:arguments[1];checkInitCalled();if(!historyLocking&&!windowLoadLocking&&runNowIfNotLock){func();return;}pendingFuncLock.splice(0,0,func);_queryLockDo();}var execLockedTimeoutId=undefined;function _queryLockDo(){if(execLockedTimeoutId)clearTimeout(execLockedTimeoutId);function execLockedFunctions(){if(historyLocking||windowLoadLocking){clearTimeout(execLockedTimeoutId);execLockedTimeoutId=setTimeout(execLockedFunctions,0);}else {var f=undefined;while(f=pendingFuncLock.shift()){f();if(historyLocking||windowLoadLocking){clearTimeout(execLockedTimeoutId);execLockedTimeoutId=setTimeout(execLockedFunctions,0);break;}}}}execLockedTimeoutId=setTimeout(execLockedFunctions,0);}function preClosePageHasIFrame(historyLengthWhenInitIFrame){history.pushState({isFake:true},null,null);iFrameHistoryLengthAsFake=history.length-historyLengthWhenInitIFrame;}PageStack.preClosePageHasIFrame=preClosePageHasIFrame;function removeLastHistoryIfFaked(){ensureLockDo(removeLastHistoryIfFakedImpl);}function removeLastHistoryIfFakedImpl(){if(history.state&&history.state.isFake){if(PageStack.DEBUG)console.log('remove Fake History');history.replaceState(null,null,'');historyGo(-1-iFrameHistoryLengthAsFake,false);iFrameHistoryLengthAsFake=0;}}function ensureLastHistoryFaked(){ensureLockDo(ensureLastHistoryFakedImpl);}function ensureLastHistoryFakedImpl(){if(!history.state.isFake){if(PageStack.DEBUG)console.log('append Fake History');history.pushState({isFake:true,isRoot:PageStack.currentStack.isRoot,stack:PageStack.currentStack.stack},null,'');}}})(PageStack||(PageStack={}));var android;(function(android){var app;(function(app){var Bundle=android.os.Bundle;var Intent=android.content.Intent;var View=android.view.View;var ActivityThread=function(){function ActivityThread(androidUI){_classCallCheck(this,ActivityThread);this.mLaunchedActivities=new Set();this.androidUI=androidUI;}_createClass(ActivityThread,[{key:'initWithPageStack',value:function initWithPageStack(){var _this70=this;var backKeyDownEvent=android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_DOWN,android.view.KeyEvent.KEYCODE_BACK);var backKeyUpEvent=android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_UP,android.view.KeyEvent.KEYCODE_BACK);PageStack.backListener=function(){var handleDown=_this70.androidUI._viewRootImpl.dispatchInputEvent(backKeyDownEvent);var handleUp=_this70.androidUI._viewRootImpl.dispatchInputEvent(backKeyUpEvent);return handleDown||handleUp;};PageStack.pageOpenHandler=function(pageId,pageExtra,isRestore){var intent=new Intent(pageId);if(pageExtra)intent.mExtras=new Bundle(pageExtra.mExtras);if(isRestore)_this70.overrideNextWindowAnimation(null,null,null,null);var activity=_this70.handleLaunchActivity(intent);return activity&&!activity.mFinished;};PageStack.pageCloseHandler=function(pageId,pageExtra){if(_this70.mLaunchedActivities.size===1){var rootActivity=Array.from(_this70.mLaunchedActivities)[0];if(pageId==null||rootActivity.getIntent().activityName==pageId){_this70.handleDestroyActivity(rootActivity,true);return true;}return false;}var _iteratorNormalCompletion51=true;var _didIteratorError51=false;var _iteratorError51=undefined;try{for(var _iterator51=Array.from(_this70.mLaunchedActivities).reverse()[Symbol.iterator](),_step51;!(_iteratorNormalCompletion51=(_step51=_iterator51.next()).done);_iteratorNormalCompletion51=true){var activity=_step51.value;var intent=activity.getIntent();if(intent.activityName==pageId){_this70.handleDestroyActivity(activity,true);return true;}}}catch(err){_didIteratorError51=true;_iteratorError51=err;}finally {try{if(!_iteratorNormalCompletion51&&_iterator51.return){_iterator51.return();}}finally {if(_didIteratorError51){throw _iteratorError51;}}}};PageStack.init();}},{key:'overrideNextWindowAnimation',value:function overrideNextWindowAnimation(enterAnimation,exitAnimation,resumeAnimation,hideAnimation){this.overrideEnterAnimation=enterAnimation;this.overrideExitAnimation=exitAnimation;this.overrideResumeAnimation=resumeAnimation;this.overrideHideAnimation=hideAnimation;}},{key:'getOverrideEnterAnimation',value:function getOverrideEnterAnimation(){return this.overrideEnterAnimation;}},{key:'getOverrideExitAnimation',value:function getOverrideExitAnimation(){return this.overrideExitAnimation;}},{key:'getOverrideResumeAnimation',value:function getOverrideResumeAnimation(){return this.overrideResumeAnimation;}},{key:'getOverrideHideAnimation',value:function getOverrideHideAnimation(){return this.overrideHideAnimation;}},{key:'scheduleApplicationHide',value:function scheduleApplicationHide(){var _this71=this;if(this.scheduleApplicationHideTimeout)clearTimeout(this.scheduleApplicationHideTimeout);this.scheduleApplicationHideTimeout=setTimeout(function(){var visibleActivities=_this71.getVisibleToUserActivities();if(visibleActivities.length==0)return;_this71.handlePauseActivity(visibleActivities[visibleActivities.length-1]);var _iteratorNormalCompletion52=true;var _didIteratorError52=false;var _iteratorError52=undefined;try{for(var _iterator52=visibleActivities[Symbol.iterator](),_step52;!(_iteratorNormalCompletion52=(_step52=_iterator52.next()).done);_iteratorNormalCompletion52=true){var visibleActivity=_step52.value;_this71.handleStopActivity(visibleActivity,true);}}catch(err){_didIteratorError52=true;_iteratorError52=err;}finally {try{if(!_iteratorNormalCompletion52&&_iterator52.return){_iterator52.return();}}finally {if(_didIteratorError52){throw _iteratorError52;}}}},0);}},{key:'scheduleApplicationShow',value:function scheduleApplicationShow(){this.scheduleActivityResume();}},{key:'execStartActivity',value:function execStartActivity(callActivity,intent,options){if((intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_TOP)!=0){if(this.scheduleBackTo(intent))return;}this.scheduleLaunchActivity(callActivity,intent,options);}},{key:'scheduleActivityResume',value:function scheduleActivityResume(){var _this72=this;if(this.activityResumeTimeout)clearTimeout(this.activityResumeTimeout);this.activityResumeTimeout=setTimeout(function(){var visibleActivities=_this72.getVisibleToUserActivities();if(visibleActivities.length==0)return;var _iteratorNormalCompletion53=true;var _didIteratorError53=false;var _iteratorError53=undefined;try{for(var _iterator53=visibleActivities[Symbol.iterator](),_step53;!(_iteratorNormalCompletion53=(_step53=_iterator53.next()).done);_iteratorNormalCompletion53=true){var _visibleActivity=_step53.value;_visibleActivity.performRestart();}}catch(err){_didIteratorError53=true;_iteratorError53=err;}finally {try{if(!_iteratorNormalCompletion53&&_iterator53.return){_iterator53.return();}}finally {if(_didIteratorError53){throw _iteratorError53;}}}var activity=visibleActivities.pop();_this72.handleResumeActivity(activity,false);if(activity.getWindow().isFloating()){var _iteratorNormalCompletion54=true;var _didIteratorError54=false;var _iteratorError54=undefined;try{for(var _iterator54=visibleActivities.reverse()[Symbol.iterator](),_step54;!(_iteratorNormalCompletion54=(_step54=_iterator54.next()).done);_iteratorNormalCompletion54=true){var visibleActivity=_step54.value;if(visibleActivity.mVisibleFromClient){visibleActivity.makeVisible();if(!visibleActivity.getWindow().isFloating()){break;}}}}catch(err){_didIteratorError54=true;_iteratorError54=err;}finally {try{if(!_iteratorNormalCompletion54&&_iterator54.return){_iterator54.return();}}finally {if(_didIteratorError54){throw _iteratorError54;}}}}},0);}},{key:'scheduleLaunchActivity',value:function scheduleLaunchActivity(callActivity,intent,options){var activity=this.handleLaunchActivity(intent);activity.mCallActivity=callActivity;if(activity&&!activity.mFinished){PageStack.notifyNewPageOpened(intent.activityName,intent);}}},{key:'scheduleDestroyActivityByRequestCode',value:function scheduleDestroyActivityByRequestCode(requestCode){var _iteratorNormalCompletion55=true;var _didIteratorError55=false;var _iteratorError55=undefined;try{for(var _iterator55=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step55;!(_iteratorNormalCompletion55=(_step55=_iterator55.next()).done);_iteratorNormalCompletion55=true){var activity=_step55.value;if(activity.getIntent()&&requestCode==activity.getIntent().mRequestCode){this.scheduleDestroyActivity(activity);}}}catch(err){_didIteratorError55=true;_iteratorError55=err;}finally {try{if(!_iteratorNormalCompletion55&&_iterator55.return){_iterator55.return();}}finally {if(_didIteratorError55){throw _iteratorError55;}}}}},{key:'scheduleDestroyActivity',value:function scheduleDestroyActivity(activity){var _this73=this;var finishing=arguments.length<=1||arguments[1]===undefined?true:arguments[1];setTimeout(function(){var isCreateSuc=_this73.mLaunchedActivities.has(activity);if(activity.mCallActivity&&activity.getIntent()&&activity.getIntent().mRequestCode>=0){activity.mCallActivity.dispatchActivityResult(null,activity.getIntent().mRequestCode,activity.mResultCode,activity.mResultData);}_this73.handleDestroyActivity(activity,finishing);if(!isCreateSuc)return;if(_this73.mLaunchedActivities.size==0){if(history.length<=2){_this73.androidUI.showAppClosed();}else {PageStack.back(true);}}else if(activity.getIntent()){PageStack.notifyPageClosed(activity.getIntent().activityName);}},0);}},{key:'scheduleBackTo',value:function scheduleBackTo(intent){var destroyList=[];var findActivity=false;var _iteratorNormalCompletion56=true;var _didIteratorError56=false;var _iteratorError56=undefined;try{for(var _iterator56=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step56;!(_iteratorNormalCompletion56=(_step56=_iterator56.next()).done);_iteratorNormalCompletion56=true){var _activity=_step56.value;if(_activity.getIntent()&&_activity.getIntent().activityName==intent.activityName){findActivity=true;break;}destroyList.push(_activity);}}catch(err){_didIteratorError56=true;_iteratorError56=err;}finally {try{if(!_iteratorNormalCompletion56&&_iterator56.return){_iterator56.return();}}finally {if(_didIteratorError56){throw _iteratorError56;}}}if(findActivity){var _iteratorNormalCompletion57=true;var _didIteratorError57=false;var _iteratorError57=undefined;try{for(var _iterator57=destroyList[Symbol.iterator](),_step57;!(_iteratorNormalCompletion57=(_step57=_iterator57.next()).done);_iteratorNormalCompletion57=true){var activity=_step57.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError57=true;_iteratorError57=err;}finally {try{if(!_iteratorNormalCompletion57&&_iterator57.return){_iterator57.return();}}finally {if(_didIteratorError57){throw _iteratorError57;}}}return true;}return false;}},{key:'canBackTo',value:function canBackTo(intent){var _iteratorNormalCompletion58=true;var _didIteratorError58=false;var _iteratorError58=undefined;try{for(var _iterator58=this.mLaunchedActivities[Symbol.iterator](),_step58;!(_iteratorNormalCompletion58=(_step58=_iterator58.next()).done);_iteratorNormalCompletion58=true){var activity=_step58.value;if(activity.getIntent().activityName==intent.activityName){return true;}}}catch(err){_didIteratorError58=true;_iteratorError58=err;}finally {try{if(!_iteratorNormalCompletion58&&_iterator58.return){_iterator58.return();}}finally {if(_didIteratorError58){throw _iteratorError58;}}}return false;}},{key:'scheduleBackToRoot',value:function scheduleBackToRoot(){var destroyList=Array.from(this.mLaunchedActivities).reverse();destroyList.shift();var _iteratorNormalCompletion59=true;var _didIteratorError59=false;var _iteratorError59=undefined;try{for(var _iterator59=destroyList[Symbol.iterator](),_step59;!(_iteratorNormalCompletion59=(_step59=_iterator59.next()).done);_iteratorNormalCompletion59=true){var activity=_step59.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError59=true;_iteratorError59=err;}finally {try{if(!_iteratorNormalCompletion59&&_iterator59.return){_iterator59.return();}}finally {if(_didIteratorError59){throw _iteratorError59;}}}}},{key:'handlePauseActivity',value:function handlePauseActivity(activity){this.performPauseActivity(activity);}},{key:'performPauseActivity',value:function performPauseActivity(activity){activity.performPause();}},{key:'handleStopActivity',value:function handleStopActivity(activity){var show=arguments.length<=1||arguments[1]===undefined?false:arguments[1];this.performStopActivity(activity,true);this.updateVisibility(activity,show);}},{key:'performStopActivity',value:function performStopActivity(activity,saveState){if(!activity.mFinished&&saveState){var state=new Bundle();activity.performSaveInstanceState(state);}activity.performStop();}},{key:'handleResumeActivity',value:function handleResumeActivity(a,launching){this.performResumeActivity(a,launching);var willBeVisible=!a.mStartedActivity&&!a.mFinished;if(willBeVisible&&a.mVisibleFromClient){a.makeVisible();this.overrideEnterAnimation=undefined;this.overrideExitAnimation=undefined;this.overrideResumeAnimation=undefined;this.overrideHideAnimation=undefined;}}},{key:'performResumeActivity',value:function performResumeActivity(a,launching){if(!launching){a.mStartedActivity=false;}a.performResume();}},{key:'handleLaunchActivity',value:function handleLaunchActivity(intent){var visibleActivities=this.getVisibleToUserActivities();var a=this.performLaunchActivity(intent);if(a){this.handleResumeActivity(a,true);if(!a.mFinished&&visibleActivities.length>0){this.handlePauseActivity(visibleActivities[visibleActivities.length-1]);if(!a.getWindow().getAttributes().isFloating()){var _iteratorNormalCompletion60=true;var _didIteratorError60=false;var _iteratorError60=undefined;try{for(var _iterator60=visibleActivities[Symbol.iterator](),_step60;!(_iteratorNormalCompletion60=(_step60=_iterator60.next()).done);_iteratorNormalCompletion60=true){var visibleActivity=_step60.value;this.handleStopActivity(visibleActivity);}}catch(err){_didIteratorError60=true;_iteratorError60=err;}finally {try{if(!_iteratorNormalCompletion60&&_iterator60.return){_iterator60.return();}}finally {if(_didIteratorError60){throw _iteratorError60;}}}}}}return a;}},{key:'performLaunchActivity',value:function performLaunchActivity(intent){var activity=undefined;var clazz=intent.activityName;try{if(typeof clazz==='string')clazz=eval(clazz);}catch(e){}if(typeof clazz==='function')activity=new clazz(this.androidUI);if(activity instanceof app.Activity){try{var savedInstanceState=null;activity.mIntent=intent;activity.mStartedActivity=false;activity.mCalled=false;activity.performCreate(savedInstanceState);if(!activity.mCalled){throw new Error("Activity "+intent.activityName+" did not call through to super.onCreate()");}if(!activity.mFinished){activity.performStart();activity.performRestoreInstanceState(savedInstanceState);activity.mCalled=false;activity.onPostCreate(savedInstanceState);if(!activity.mCalled){throw new Error("Activity "+intent.activityName+" did not call through to super.onPostCreate()");}}}catch(e){console.error(e);return null;}if(!activity.mFinished){this.mLaunchedActivities.add(activity);}return activity;}return null;}},{key:'handleDestroyActivity',value:function handleDestroyActivity(activity,finishing){var visibleActivities=this.getVisibleToUserActivities();var isTopVisibleActivity=activity==visibleActivities[visibleActivities.length-1];var isRootActivity=this.isRootActivity(activity);this.performDestroyActivity(activity,finishing);if(isRootActivity)activity.getWindow().setWindowAnimations(null,null);this.androidUI.windowManager.removeWindow(activity.getWindow());if(isTopVisibleActivity&&!isRootActivity){this.scheduleActivityResume();}}},{key:'performDestroyActivity',value:function performDestroyActivity(activity,finishing){if(finishing){activity.mFinished=true;}activity.performPause();activity.performStop();activity.mCalled=false;activity.performDestroy();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onDestroy()");}this.mLaunchedActivities.delete(activity);}},{key:'updateVisibility',value:function updateVisibility(activity,show){if(show){if(activity.mVisibleFromClient){activity.makeVisible();}}else {activity.getWindow().getDecorView().setVisibility(View.INVISIBLE);}}},{key:'getVisibleToUserActivities',value:function getVisibleToUserActivities(){var list=[];var _iteratorNormalCompletion61=true;var _didIteratorError61=false;var _iteratorError61=undefined;try{for(var _iterator61=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step61;!(_iteratorNormalCompletion61=(_step61=_iterator61.next()).done);_iteratorNormalCompletion61=true){var activity=_step61.value;list.push(activity);if(!activity.getWindow().getAttributes().isFloating())break;}}catch(err){_didIteratorError61=true;_iteratorError61=err;}finally {try{if(!_iteratorNormalCompletion61&&_iterator61.return){_iterator61.return();}}finally {if(_didIteratorError61){throw _iteratorError61;}}}list.reverse();return list;}},{key:'isRootActivity',value:function isRootActivity(activity){return this.mLaunchedActivities.values().next().value==activity;}}],[{key:'getActivityName',value:function getActivityName(activity){if(activity.getIntent())return activity.getIntent().activityName;return activity.constructor.name;}}]);return ActivityThread;}();app.ActivityThread=ActivityThread;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var R;(function(R){var string_=function(){function string_(){_classCallCheck(this,string_);}_createClass(string_,null,[{key:'zh',value:function zh(){this.ok='确定';this.cancel='取消';this.close='关闭';this.back='返回';this.crash_catch_alert='程序发生错误, 即将重载网页:';this.prll_header_state_normal='下拉以刷新';this.prll_header_state_ready='松开马上刷新';this.prll_header_state_loading='正在刷新...';this.prll_header_state_fail='刷新失败';this.prll_footer_state_normal='点击加载更多';this.prll_footer_state_loading='正在加载...';this.prll_footer_state_ready='松开加载更多';this.prll_footer_state_no_more='加载完毕';this.prll_footer_state_fail='加载失败,点击重试';}}]);return string_;}();string_.ok='OK';string_.cancel='Cancel';string_.close='Close';string_.back='Back';string_.crash_catch_alert='Some error happen, will refresh page:';string_.prll_header_state_normal='Pull to refresh';string_.prll_header_state_ready='Release to refresh';string_.prll_header_state_loading='Loading';string_.prll_header_state_fail='Refresh fail';string_.prll_footer_state_normal='Load more';string_.prll_footer_state_loading='Loading';string_.prll_footer_state_ready='Pull to load more';string_.prll_footer_state_fail='Click to reload';string_.prll_footer_state_no_more='Load Finish';R.string_=string_;var lang=navigator.language.split('-')[0].toLowerCase();if(typeof string_[lang]==='function')string_[lang].call(string_);})(R=android.R||(android.R={}));})(android||(android={}));var androidui;(function(androidui){if(typeof HTMLDivElement!=='function'){var _HTMLDivElement=function _HTMLDivElement(){};_HTMLDivElement.prototype=HTMLDivElement.prototype;HTMLDivElement=_HTMLDivElement;}var AndroidUIElement=function(_HTMLDivElement2){_inherits(AndroidUIElement,_HTMLDivElement2);function AndroidUIElement(){_classCallCheck(this,AndroidUIElement);return _possibleConstructorReturn(this,Object.getPrototypeOf(AndroidUIElement).apply(this,arguments));}_createClass(AndroidUIElement,[{key:'createdCallback',value:function createdCallback(){var _this75=this;$domReady(function(){return initElement(_this75);});}},{key:'attachedCallback',value:function attachedCallback(){}},{key:'detachedCallback',value:function detachedCallback(){}},{key:'attributeChangedCallback',value:function attributeChangedCallback(attributeName,oldVal,newVal){if(attributeName==='debug'&&newVal!=null&&newVal!='false'&&newVal!='0'){this.AndroidUI.setDebugEnable();}}}]);return AndroidUIElement;}(HTMLDivElement);androidui.AndroidUIElement=AndroidUIElement;function runFunction(func){if(typeof window[func]==="function"){window[func]();}else {try{eval(func);}catch(e){console.warn(e);}}}function $domReady(func){if(/^loaded|^complete|^interactive/.test(document.readyState)){setTimeout(func,0);}else {document.addEventListener('DOMContentLoaded',func);}}function initElement(ele){ele.AndroidUI=new androidui.AndroidUI(ele);var debugAttr=ele.getAttribute('debug');if(debugAttr!=null&&debugAttr!='0'&&debugAttr!='false')ele.AndroidUI.setDebugEnable();var onClose=ele.getAttribute('onclose');if(onClose){ele.AndroidUI.setUIClient({shouldShowAppClosed:function shouldShowAppClosed(androidUI){if(!onClose)return;runFunction(onClose);}});}var onLoad=ele.getAttribute('onload');if(onLoad){runFunction(onLoad);}}if(typeof document['registerElement']==="function"){document.registerElement("android-ui",AndroidUIElement);}else {$domReady(function(){var eles=document.getElementsByTagName('android-ui');var _iteratorNormalCompletion62=true;var _didIteratorError62=false;var _iteratorError62=undefined;try{for(var _iterator62=Array.from(eles)[Symbol.iterator](),_step62;!(_iteratorNormalCompletion62=(_step62=_iterator62.next()).done);_iteratorNormalCompletion62=true){var ele=_step62.value;initElement(ele);}}catch(err){_didIteratorError62=true;_iteratorError62=err;}finally {try{if(!_iteratorNormalCompletion62&&_iterator62.return){_iterator62.return();}}finally {if(_didIteratorError62){throw _iteratorError62;}}}});}var styleElement=document.createElement('style');styleElement.innerHTML+='\n android-ui {\n position : relative;\n overflow : hidden;\n display : block;\n outline: none;\n }\n android-ui * {\n overflow : hidden;\n border : none;\n outline: none;\n pointer-events: auto;\n }\n android-ui resources {\n display: none;\n }\n android-ui Button {\n border: none;\n background: none;\n }\n android-ui windowsgroup {\n pointer-events: none;\n }\n android-ui > canvas {\n position: absolute;\n left: 0;\n top: 0;\n }\n ';document.head.appendChild(styleElement);})(androidui||(androidui={}));var androidui;(function(androidui){var MotionEvent=android.view.MotionEvent;var KeyEvent=android.view.KeyEvent;var Intent=android.content.Intent;var ActivityThread=android.app.ActivityThread;var ViewRootImpl=android.view.ViewRootImpl;var AndroidUI=function(){function AndroidUI(androidUIElement){_classCallCheck(this,AndroidUI);this._canvas=document.createElement("canvas");this.viewsDependOnDebugLayout=new Set();this.showDebugLayoutDefault=false;this._windowBound=new android.graphics.Rect();this.tempRect=new android.graphics.Rect();this.touchEvent=new MotionEvent();this.ketEvent=new KeyEvent();this.androidUIElement=androidUIElement;if(androidUIElement[AndroidUI.BindToElementName]){throw Error('already init a AndroidUI with this element');}androidUIElement[AndroidUI.BindToElementName]=this;this.init();}_createClass(AndroidUI,[{key:'init',value:function init(){this.appName=document.title;this._viewRootImpl=new android.view.ViewRootImpl();this.initAndroidUIElement();this.initApplication();this.androidUIElement.appendChild(this._canvas);this.initEvent();this.initRootSizeChange();this._viewRootImpl.setView(this.windowManager.getWindowsLayout());this._viewRootImpl.initSurface(this._canvas);this.initBrowserVisibleChange();this.initLaunchActivity();this.initGlobalCrashHandle();}},{key:'initApplication',value:function initApplication(){var appName=this.androidUIElement.getAttribute('appName');var appClazz=undefined;if(appName){try{appClazz=eval(appName);}catch(e){}}appClazz=appClazz||android.app.Application;this.mApplication=new appClazz(this);this.mApplication.onCreate();}},{key:'initLaunchActivity',value:function initLaunchActivity(){this.mActivityThread=new ActivityThread(this);var _iteratorNormalCompletion63=true;var _didIteratorError63=false;var _iteratorError63=undefined;try{for(var _iterator63=Array.from(this.androidUIElement.children)[Symbol.iterator](),_step63;!(_iteratorNormalCompletion63=(_step63=_iterator63.next()).done);_iteratorNormalCompletion63=true){var ele=_step63.value;var tagName=ele.tagName;if(tagName!='ACTIVITY')continue;var activityName=ele.getAttribute('name')||ele.getAttribute('android:name')||'android.app.Activity';var intent=new Intent(activityName);this.mActivityThread.overrideNextWindowAnimation(null,null,null,null);var activity=this.mActivityThread.handleLaunchActivity(intent);if(activity){this.androidUIElement.removeChild(ele);var _iteratorNormalCompletion64=true;var _didIteratorError64=false;var _iteratorError64=undefined;try{for(var _iterator64=Array.from(ele.children)[Symbol.iterator](),_step64;!(_iteratorNormalCompletion64=(_step64=_iterator64.next()).done);_iteratorNormalCompletion64=true){var element=_step64.value;android.view.LayoutInflater.from(activity).inflate(element,activity.getWindow().mContentParent,true);}}catch(err){_didIteratorError64=true;_iteratorError64=err;}finally {try{if(!_iteratorNormalCompletion64&&_iterator64.return){_iterator64.return();}}finally {if(_didIteratorError64){throw _iteratorError64;}}}var onCreateFunc=ele.getAttribute('oncreate');if(onCreateFunc&&typeof window[onCreateFunc]==="function"){window[onCreateFunc].call(this,activity);}}}}catch(err){_didIteratorError63=true;_iteratorError63=err;}finally {try{if(!_iteratorNormalCompletion63&&_iterator63.return){_iterator63.return();}}finally {if(_didIteratorError63){throw _iteratorError63;}}}this.mActivityThread.initWithPageStack();}},{key:'initGlobalCrashHandle',value:function initGlobalCrashHandle(){window.onerror=function(sMsg,sUrl,sLine){if(window.confirm(android.R.string_.crash_catch_alert+'\n'+sMsg)){window.location.reload();}};}},{key:'refreshWindowBound',value:function refreshWindowBound(){var boundLeft=this.androidUIElement.offsetLeft;var boundTop=this.androidUIElement.offsetTop;var parent=this.androidUIElement.parentElement;if(parent){boundLeft+=parent.offsetLeft;boundTop+=parent.offsetTop;parent=parent.parentElement;}var boundRight=boundLeft+this.androidUIElement.offsetWidth;var boundBottom=boundTop+this.androidUIElement.offsetHeight;if(this._windowBound&&this._windowBound.left==boundLeft&&this._windowBound.top==boundTop&&this._windowBound.right==boundRight&&this._windowBound.bottom==boundBottom){return false;}this._windowBound.set(boundLeft,boundTop,boundRight,boundBottom);return true;}},{key:'initAndroidUIElement',value:function initAndroidUIElement(){var _this76=this;if(this.androidUIElement.style.display==='none'){this.androidUIElement.style.display='';}this.androidUIElement.setAttribute('tabindex','0');this.androidUIElement.focus();this.androidUIElement.onblur=function(e){_this76._viewRootImpl.ensureTouchMode(true);};}},{key:'initEvent',value:function initEvent(){this.initTouchEvent();this.initMouseEvent();this.initKeyEvent();this.initGenericEvent();}},{key:'initTouchEvent',value:function initTouchEvent(){var _this77=this;this.androidUIElement.addEventListener('touchstart',function(e){_this77.refreshWindowBound();if(e.target!=document.activeElement||!_this77.androidUIElement.contains(document.activeElement)){_this77.androidUIElement.focus();}_this77.touchEvent.initWithTouch(e,MotionEvent.ACTION_DOWN,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchmove',function(e){_this77.touchEvent.initWithTouch(e,MotionEvent.ACTION_MOVE,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchend',function(e){_this77.touchEvent.initWithTouch(e,MotionEvent.ACTION_UP,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchcancel',function(e){_this77.touchEvent.initWithTouch(e,MotionEvent.ACTION_CANCEL,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initMouseEvent',value:function initMouseEvent(){var _this78=this;function mouseToTouchEvent(e){var touch={identifier:0,target:null,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY,pageX:e.pageX,pageY:e.pageY};return {changedTouches:[touch],targetTouches:[touch],touches:e.type==='mouseup'?[]:[touch],timeStamp:e.timeStamp};}var isMouseDown=false;this.androidUIElement.addEventListener('mousedown',function(e){isMouseDown=true;_this78.refreshWindowBound();if(e.target!=document.activeElement||!_this78.androidUIElement.contains(document.activeElement)){_this78.androidUIElement.focus();}_this78.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_DOWN,_this78._windowBound);if(_this78._viewRootImpl.dispatchInputEvent(_this78.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mousemove',function(e){if(!isMouseDown)return;_this78.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_MOVE,_this78._windowBound);if(_this78._viewRootImpl.dispatchInputEvent(_this78.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseup',function(e){isMouseDown=false;_this78.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_UP,_this78._windowBound);if(_this78._viewRootImpl.dispatchInputEvent(_this78.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseleave',function(e){if(e.fromElement===_this78.androidUIElement){isMouseDown=false;_this78.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_CANCEL,_this78._windowBound);if(_this78._viewRootImpl.dispatchInputEvent(_this78.touchEvent)){e.stopPropagation();e.preventDefault();return true;}}},true);var scrollEvent=new MotionEvent();this.androidUIElement.addEventListener('mousewheel',function(e){scrollEvent.initWithMouseWheel(e);if(_this78._viewRootImpl.dispatchInputEvent(scrollEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initKeyEvent',value:function initKeyEvent(){var _this79=this;this.androidUIElement.addEventListener('keydown',function(e){_this79.ketEvent.initKeyEvent(e,KeyEvent.ACTION_DOWN);if(_this79._viewRootImpl.dispatchInputEvent(_this79.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('keyup',function(e){_this79.ketEvent.initKeyEvent(e,KeyEvent.ACTION_UP);if(_this79._viewRootImpl.dispatchInputEvent(_this79.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initGenericEvent',value:function initGenericEvent(){}},{key:'initRootSizeChange',value:function initRootSizeChange(){var _this=this;window.addEventListener('resize',function(){_this.notifyRootSizeChange();});var lastWidth=this.androidUIElement.offsetWidth;var lastHeight=this.androidUIElement.offsetHeight;if(lastWidth>0&&lastHeight>0)this.notifyRootSizeChange();setInterval(function(){var width=_this.androidUIElement.offsetWidth;var height=_this.androidUIElement.offsetHeight;if(lastHeight!==height||lastWidth!==width){lastWidth=width;lastHeight=height;_this.notifyRootSizeChange();}},500);}},{key:'initBrowserVisibleChange',value:function initBrowserVisibleChange(){var _this80=this;var eventName='visibilitychange';if(document['webkitHidden']!=undefined){eventName='webkitvisibilitychange';}document.addEventListener(eventName,function(){if(document['hidden']||document['webkitHidden']){_this80.mActivityThread.scheduleApplicationHide();}else {_this80.mActivityThread.scheduleApplicationShow();_this80._viewRootImpl.invalidate();}},false);}},{key:'notifyRootSizeChange',value:function notifyRootSizeChange(){if(this.refreshWindowBound()){var density=android.content.res.Resources.getDisplayMetrics().density;this.tempRect.set(this._windowBound.left*density,this._windowBound.top*density,this._windowBound.right*density,this._windowBound.bottom*density);var width=this._windowBound.width();var height=this._windowBound.height();this._canvas.width=width*density;this._canvas.height=height*density;this._canvas.style.width=width+"px";this._canvas.style.height=height+"px";this._viewRootImpl.notifyResized(this.tempRect);}}},{key:'viewAttachedDependOnDebugLayout',value:function viewAttachedDependOnDebugLayout(view){this.viewsDependOnDebugLayout.add(view);this.showDebugLayout();}},{key:'viewDetachedDependOnDebugLayout',value:function viewDetachedDependOnDebugLayout(view){this.viewsDependOnDebugLayout.delete(view);if(this.viewsDependOnDebugLayout.size==0&&!this.showDebugLayoutDefault){this.hideDebugLayout();}}},{key:'setDebugEnable',value:function setDebugEnable(){var enable=arguments.length<=0||arguments[0]===undefined?true:arguments[0];ViewRootImpl.DEBUG_FPS=enable;this.setShowDebugLayout(enable);}},{key:'setShowDebugLayout',value:function setShowDebugLayout(){var showDebugLayoutDefault=arguments.length<=0||arguments[0]===undefined?true:arguments[0];this.showDebugLayoutDefault=showDebugLayoutDefault;if(showDebugLayoutDefault){this.showDebugLayout();}else {this.hideDebugLayout();}}},{key:'showDebugLayout',value:function showDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===null){this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'hideDebugLayout',value:function hideDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===this.androidUIElement){this.androidUIElement.removeChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'setUIClient',value:function setUIClient(uiClient){this.uiClient=uiClient;}},{key:'showAppClosed',value:function showAppClosed(){AndroidUI.showAppClosed(this);}},{key:'windowManager',get:function get(){return this.mApplication.getWindowManager();}},{key:'windowBound',get:function get(){return this._windowBound;}}],[{key:'showAppClosed',value:function showAppClosed(androidUI){androidUI.androidUIElement.parentNode.removeChild(androidUI.androidUIElement);if(androidUI.uiClient&&androidUI.uiClient.shouldShowAppClosed){androidUI.uiClient.shouldShowAppClosed(androidUI);}}}]);return AndroidUI;}();AndroidUI.BindToElementName='AndroidUI';androidui.AndroidUI=AndroidUI;})(androidui||(androidui={}));var android;(function(android){var app;(function(app){var View=android.view.View;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var Window=android.view.Window;var WindowManager=android.view.WindowManager;var Log=android.util.Log;var Context=android.content.Context;var Intent=android.content.Intent;var Activity=function(_Context){_inherits(Activity,_Context);function Activity(androidUI){_classCallCheck(this,Activity);var _this81=_possibleConstructorReturn(this,Object.getPrototypeOf(Activity).call(this,androidUI));_this81.mWindowAdded=false;_this81.mVisibleFromClient=true;_this81.mResultCode=Activity.RESULT_CANCELED;_this81.mResultData=null;_this81.mWindow=new Window(_this81);_this81.mWindow.setWindowAnimations(android.R.anim.activity_open_enter_ios,android.R.anim.activity_close_exit_ios,android.R.anim.activity_close_enter_ios,android.R.anim.activity_open_exit_ios);_this81.mWindow.setDimAmount(0.7);_this81.mWindow.getAttributes().flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;_this81.mWindow.setCallback(_this81);return _this81;}_createClass(Activity,[{key:'getIntent',value:function getIntent(){return this.mIntent;}},{key:'setIntent',value:function setIntent(newIntent){this.mIntent=newIntent;}},{key:'getApplication',value:function getApplication(){return this.getApplicationContext();}},{key:'getWindowManager',value:function getWindowManager(){return this.mWindow.getChildWindowManager();}},{key:'getGlobalWindowManager',value:function getGlobalWindowManager(){return this.getApplicationContext().getWindowManager();}},{key:'getWindow',value:function getWindow(){return this.mWindow;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mWindow!=null?this.mWindow.getCurrentFocus():null;}},{key:'onCreate',value:function onCreate(savedInstanceState){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onCreate "+this+": "+savedInstanceState);this.getApplication().dispatchActivityCreated(this,savedInstanceState);this.mCalled=true;}},{key:'performRestoreInstanceState',value:function performRestoreInstanceState(savedInstanceState){this.onRestoreInstanceState(savedInstanceState);}},{key:'onRestoreInstanceState',value:function onRestoreInstanceState(savedInstanceState){}},{key:'onPostCreate',value:function onPostCreate(savedInstanceState){this.onTitleChanged(this.getTitle());this.mCalled=true;}},{key:'onStart',value:function onStart(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onStart "+this);this.mCalled=true;this.getApplication().dispatchActivityStarted(this);}},{key:'onRestart',value:function onRestart(){this.mCalled=true;}},{key:'onResume',value:function onResume(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onResume "+this);this.getApplication().dispatchActivityResumed(this);this.mCalled=true;}},{key:'onPostResume',value:function onPostResume(){var win=this.getWindow();if(win!=null)win.makeActive();this.mCalled=true;}},{key:'onNewIntent',value:function onNewIntent(intent){}},{key:'performSaveInstanceState',value:function performSaveInstanceState(outState){this.onSaveInstanceState(outState);if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onSaveInstanceState "+this+": "+outState);}},{key:'onSaveInstanceState',value:function onSaveInstanceState(outState){this.getApplication().dispatchActivitySaveInstanceState(this,outState);}},{key:'onPause',value:function onPause(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onPause "+this);this.getApplication().dispatchActivityPaused(this);this.mCalled=true;}},{key:'onUserLeaveHint',value:function onUserLeaveHint(){}},{key:'onStop',value:function onStop(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onStop "+this);this.getApplication().dispatchActivityStopped(this);this.mCalled=true;}},{key:'onDestroy',value:function onDestroy(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onDestroy "+this);this.mCalled=true;this.getApplication().dispatchActivityDestroyed(this);}},{key:'findViewById',value:function findViewById(id){return this.getWindow().findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){if(!(view instanceof View)){view=this.getLayoutInflater().inflate(view);}this.getWindow().setContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){this.mWindow.addContentView(view,params);}},{key:'setFinishOnTouchOutside',value:function setFinishOnTouchOutside(finish){this.mWindow.setCloseOnTouchOutside(finish);}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK){event.startTracking();return true;}return false;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&event.isTracking()&&!event.isCanceled()){this.onBackPressed();return true;}return false;}},{key:'onBackPressed',value:function onBackPressed(){this.finish();}},{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mWindow.shouldCloseOnTouch(this,event)){this.finish();return true;}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onUserInteraction',value:function onUserInteraction(){}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){var decor=this.getWindow().getDecorView();if(decor!=null&&decor.getParent()!=null){this.getWindowManager().updateWindowLayout(this.getWindow(),params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'hasWindowFocus',value:function hasWindowFocus(){var w=this.getWindow();if(w!=null){var d=w.getDecorView();if(d!=null){return d.hasWindowFocus();}}return false;}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){this.onUserInteraction();var win=this.getWindow();if(win.superDispatchKeyEvent(event)){return true;}var decor=win.getDecorView();return event.dispatch(this,decor!=null?decor.getKeyDispatcherState():null,this);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(ev.getAction()==MotionEvent.ACTION_DOWN){this.onUserInteraction();}if(this.getWindow().superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){this.onUserInteraction();if(this.getWindow().superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}},{key:'takeKeyEvents',value:function takeKeyEvents(_get){this.getWindow().takeKeyEvents(_get);}},{key:'invalidateOptionsMenu',value:function invalidateOptionsMenu(){var _this82=this;var menu=new android.view.Menu(this);if(this.onCreateOptionsMenu(menu)){menu.setCallback({onMenuItemSelected:function onMenuItemSelected(menu,item){var handle=_this82.onOptionsItemSelected(item);_this82.onOptionsMenuClosed(menu);return handle;}});this.mMenu=menu;this.mMenuPopuoHelper=this.invalidateOptionsMenuPopupHelper(menu);}}},{key:'invalidateOptionsMenuPopupHelper',value:function invalidateOptionsMenuPopupHelper(menu){return null;}},{key:'onCreateOptionsMenu',value:function onCreateOptionsMenu(menu){return true;}},{key:'onPrepareOptionsMenu',value:function onPrepareOptionsMenu(menu){return true;}},{key:'onOptionsItemSelected',value:function onOptionsItemSelected(item){return false;}},{key:'onOptionsMenuClosed',value:function onOptionsMenuClosed(menu){}},{key:'openOptionsMenu',value:function openOptionsMenu(){if(this.mMenuPopuoHelper)this.mMenuPopuoHelper.show();}},{key:'closeOptionsMenu',value:function closeOptionsMenu(){if(this.mMenuPopuoHelper)this.mMenuPopuoHelper.dismiss();}},{key:'startActivityForResult',value:function startActivityForResult(intent,requestCode,options){if(typeof intent==='string')intent=new Intent(intent);if(requestCode>=0)intent.mRequestCode=requestCode;this.androidUI.mActivityThread.execStartActivity(this,intent,options);if(requestCode>=0){this.mStartedActivity=true;}var decor=this.mWindow!=null?this.mWindow.peekDecorView():null;if(decor!=null){decor.cancelPendingInputEvents();}}},{key:'startActivities',value:function startActivities(intents,options){var _iteratorNormalCompletion65=true;var _didIteratorError65=false;var _iteratorError65=undefined;try{for(var _iterator65=intents[Symbol.iterator](),_step65;!(_iteratorNormalCompletion65=(_step65=_iterator65.next()).done);_iteratorNormalCompletion65=true){var intent=_step65.value;this.startActivity(intent,options);}}catch(err){_didIteratorError65=true;_iteratorError65=err;}finally {try{if(!_iteratorNormalCompletion65&&_iterator65.return){_iterator65.return();}}finally {if(_didIteratorError65){throw _iteratorError65;}}}}},{key:'startActivity',value:function startActivity(intent,options){if(options!=null){this.startActivityForResult(intent,-1,options);}else {this.startActivityForResult(intent,-1);}}},{key:'startActivityIfNeeded',value:function startActivityIfNeeded(intent,requestCode,options){if(this.androidUI.mActivityThread.canBackTo(intent)){return false;}this.startActivityForResult(intent,requestCode,options);return true;}},{key:'overrideNextTransition',value:function overrideNextTransition(enterAnimation,exitAnimation,resumeAnimation,hideAnimation){this.androidUI.mActivityThread.overrideNextWindowAnimation(enterAnimation,exitAnimation,resumeAnimation,hideAnimation);}},{key:'setResult',value:function setResult(resultCode,data){{this.mResultCode=resultCode;this.mResultData=data;}}},{key:'getCallingActivity',value:function getCallingActivity(){return null;}},{key:'setVisible',value:function setVisible(visible){if(this.mVisibleFromClient!=visible){this.mVisibleFromClient=visible;}}},{key:'makeVisible',value:function makeVisible(){if(!this.mWindowAdded){var wm=this.getGlobalWindowManager();wm.addWindow(this.getWindow());this.mWindowAdded=true;}this.getWindow().getDecorView().setVisibility(View.VISIBLE);}},{key:'isFinishing',value:function isFinishing(){return this.mFinished;}},{key:'isDestroyed',value:function isDestroyed(){return this.mDestroyed;}},{key:'finish',value:function finish(){var resultCode=this.mResultCode;var resultData=this.mResultData;try{this.androidUI.mActivityThread.scheduleDestroyActivity(this);}catch(e){}}},{key:'finishActivity',value:function finishActivity(requestCode){this.androidUI.mActivityThread.scheduleDestroyActivityByRequestCode(requestCode);}},{key:'onActivityResult',value:function onActivityResult(requestCode,resultCode,data){}},{key:'setTitle',value:function setTitle(title){this.getWindow().setTitle(title);this.onTitleChanged(title);}},{key:'getTitle',value:function getTitle(){return this.getWindow().getAttributes().getTitle();}},{key:'onTitleChanged',value:function onTitleChanged(title,color){var win=this.getWindow();if(win!=null){win.setTitle(title);}}},{key:'runOnUiThread',value:function runOnUiThread(action){action.run();}},{key:'navigateUpTo',value:function navigateUpTo(upIntent){var upToRootIfNotFound=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(this.androidUI.mActivityThread.scheduleBackTo(upIntent)){return true;}if(upToRootIfNotFound)this.androidUI.mActivityThread.scheduleBackToRoot();return false;}},{key:'performCreate',value:function performCreate(icicle){this.onCreate(icicle);this.invalidateOptionsMenu();}},{key:'performStart',value:function performStart(){this.mCalled=false;this.onStart();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onStart()")');}}},{key:'performRestart',value:function performRestart(){if(this.mStopped){this.mStopped=false;this.mCalled=false;this.onRestart();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onRestart()")');}this.performStart();}}},{key:'performResume',value:function performResume(){this.performRestart();this.mCalled=false;this.mResumed=true;this.onResume();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onResume()")');}this.mCalled=false;this.onPostResume();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onPostResume()")');}}},{key:'performPause',value:function performPause(){if(this.mResumed){this.mCalled=false;this.onPause();this.mResumed=false;if(!this.mCalled){throw Error('new SuperNotCalledException("Activity '+this.constructor.name+' did not call through to super.onPause()")');}this.mResumed=false;}}},{key:'performUserLeaving',value:function performUserLeaving(){this.onUserInteraction();this.onUserLeaveHint();}},{key:'performStop',value:function performStop(){if(!this.mStopped){this.mCalled=false;this.onStop();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onStop()")');}this.mStopped=true;}this.mResumed=false;}},{key:'performDestroy',value:function performDestroy(){this.mDestroyed=true;this.mWindow.destroy();this.onDestroy();}},{key:'isResumed',value:function isResumed(){return this.mResumed;}},{key:'dispatchActivityResult',value:function dispatchActivityResult(who,requestCode,resultCode,data){if(false)Log.v(Activity.TAG,"Dispatching result: who="+who+", reqCode="+requestCode+", resCode="+resultCode+", data="+data);this.onActivityResult(requestCode,resultCode,data);}}]);return Activity;}(Context);Activity.TAG="Activity";Activity.DEBUG_LIFECYCLE=false;Activity.RESULT_CANCELED=0;Activity.RESULT_OK=-1;Activity.RESULT_FIRST_USER=1;app.Activity=Activity;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var app;(function(app){var ArrayList=java.util.ArrayList;var Context=android.content.Context;var Application=function(_Context2){_inherits(Application,_Context2);function Application(){var _Object$getPrototypeO9;_classCallCheck(this,Application);for(var _len27=arguments.length,args=Array(_len27),_key28=0;_key28<_len27;_key28++){args[_key28]=arguments[_key28];}var _this83=_possibleConstructorReturn(this,(_Object$getPrototypeO9=Object.getPrototypeOf(Application)).call.apply(_Object$getPrototypeO9,[this].concat(args)));_this83.mActivityLifecycleCallbacks=new ArrayList();return _this83;}_createClass(Application,[{key:'onCreate',value:function onCreate(){}},{key:'getWindowManager',value:function getWindowManager(){if(!this.mWindowManager)this.mWindowManager=new android.view.WindowManager(this);return this.mWindowManager;}},{key:'registerActivityLifecycleCallbacks',value:function registerActivityLifecycleCallbacks(callback){{this.mActivityLifecycleCallbacks.add(callback);}}},{key:'unregisterActivityLifecycleCallbacks',value:function unregisterActivityLifecycleCallbacks(callback){{this.mActivityLifecycleCallbacks.remove(callback);}}},{key:'dispatchActivityCreated',value:function dispatchActivityCreated(activity,savedInstanceState){var callbacks=this.collectActivityLifecycleCallbacks();if(callbacks!=null){for(var i=0;i0){callbacks=this.mActivityLifecycleCallbacks.toArray();}}return callbacks;}}]);return Application;}(Context);app.Application=Application;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Log=android.util.Log;var Pools=android.util.Pools;var VelocityTracker=function(){function VelocityTracker(){_classCallCheck(this,VelocityTracker);this.mLastTouchIndex=0;this.mGeneration=0;this.clear();}_createClass(VelocityTracker,[{key:'recycle',value:function recycle(){this.clear();VelocityTracker.sPool.release(this);}},{key:'setNextPoolable',value:function setNextPoolable(element){this.mNext=element;}},{key:'getNextPoolable',value:function getNextPoolable(){return this.mNext;}},{key:'clear',value:function clear(){VelocityTracker.releasePointerList(this.mPointerListHead);this.mPointerListHead=null;this.mLastTouchIndex=0;}},{key:'addMovement',value:function addMovement(ev){var historySize=ev.getHistorySize();var pointerCount=ev.getPointerCount();var lastTouchIndex=this.mLastTouchIndex;var nextTouchIndex=(lastTouchIndex+1)%VelocityTracker.NUM_PAST;var finalTouchIndex=(nextTouchIndex+historySize)%VelocityTracker.NUM_PAST;var generation=this.mGeneration++;this.mLastTouchIndex=finalTouchIndex;var previousPointer=null;for(var i=0;i3){numTouches-=1;}var pastX=pointer.pastX;var pastY=pointer.pastY;var oldestX=pastX[oldestTouchIndex];var oldestY=pastY[oldestTouchIndex];var oldestTime=pastTime[oldestTouchIndex];var accumX=0;var accumY=0;for(var i=1;imaxVelocity){accumX=maxVelocity;}if(accumY<-maxVelocity){accumY=-maxVelocity;}else if(accumY>maxVelocity){accumY=maxVelocity;}pointer.xVelocity=accumX;pointer.yVelocity=accumY;if(VelocityTracker.localLOGV){Log.v(VelocityTracker.TAG,"Pointer "+pointer.id+": Y velocity="+accumX+" X velocity="+accumY+" N="+numTouches);}}}},{key:'getXVelocity',value:function getXVelocity(){var id=arguments.length<=0||arguments[0]===undefined?0:arguments[0];var pointer=this.getPointer(id);return pointer!=null?pointer.xVelocity:0;}},{key:'getYVelocity',value:function getYVelocity(){var id=arguments.length<=0||arguments[0]===undefined?0:arguments[0];var pointer=this.getPointer(id);return pointer!=null?pointer.yVelocity:0;}},{key:'getPointer',value:function getPointer(id){for(var pointer=this.mPointerListHead;pointer!=null;pointer=pointer.next){if(pointer.id==id){return pointer;}}return null;}}],[{key:'obtain',value:function obtain(){var instance=VelocityTracker.sPool.acquire();return instance!=null?instance:new VelocityTracker();}},{key:'obtainPointer',value:function obtainPointer(){if(VelocityTracker.sRecycledPointerCount!=0){var element=VelocityTracker.sRecycledPointerListHead;VelocityTracker.sRecycledPointerCount-=1;VelocityTracker.sRecycledPointerListHead=element.next;element.next=null;return element;}return new Pointer();}},{key:'releasePointer',value:function releasePointer(pointer){if(VelocityTracker.sRecycledPointerCount=VelocityTracker.POINTER_POOL_CAPACITY){return;}var tail=pointer;for(;;){count+=1;if(count>=VelocityTracker.POINTER_POOL_CAPACITY){break;}var next=tail.next;if(next==null){break;}tail=next;}tail.next=VelocityTracker.sRecycledPointerListHead;VelocityTracker.sRecycledPointerCount=count;VelocityTracker.sRecycledPointerListHead=pointer;}}}]);return VelocityTracker;}();VelocityTracker.TAG="VelocityTracker";VelocityTracker.DEBUG=Log.VelocityTracker_DBG;VelocityTracker.localLOGV=VelocityTracker.DEBUG;VelocityTracker.NUM_PAST=10;VelocityTracker.MAX_AGE_MILLISECONDS=200;VelocityTracker.POINTER_POOL_CAPACITY=20;VelocityTracker.sPool=new Pools.SynchronizedPool(2);VelocityTracker.sRecycledPointerCount=0;view.VelocityTracker=VelocityTracker;var Pointer=function Pointer(){_classCallCheck(this,Pointer);this.id=0;this.xVelocity=0;this.yVelocity=0;this.pastX=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.pastY=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.pastTime=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.generation=0;};})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var SystemClock=android.os.SystemClock;var MotionEvent=android.view.MotionEvent;var ViewConfiguration=android.view.ViewConfiguration;var TypedValue=android.util.TypedValue;var ScaleGestureDetector=function(){function ScaleGestureDetector(listener,handler){_classCallCheck(this,ScaleGestureDetector);this.mFocusX=0;this.mFocusY=0;this.mCurrSpan=0;this.mPrevSpan=0;this.mInitialSpan=0;this.mCurrSpanX=0;this.mCurrSpanY=0;this.mPrevSpanX=0;this.mPrevSpanY=0;this.mCurrTime=0;this.mPrevTime=0;this.mSpanSlop=0;this.mMinSpan=0;this.mTouchUpper=0;this.mTouchLower=0;this.mTouchHistoryLastAccepted=0;this.mTouchHistoryDirection=0;this.mTouchHistoryLastAcceptedTime=0;this.mTouchMinMajor=0;this.mDoubleTapMode=ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;this.mListener=listener;this.mSpanSlop=ViewConfiguration.get().getScaledTouchSlop()*2;this.mTouchMinMajor=TypedValue.complexToDimensionPixelSize('48dp');this.mMinSpan=TypedValue.complexToDimensionPixelSize('27mm');this.mHandler=handler;this.setQuickScaleEnabled(true);}_createClass(ScaleGestureDetector,[{key:'addTouchHistory',value:function addTouchHistory(ev){var currentTime=SystemClock.uptimeMillis();var count=ev.getPointerCount();var accept=currentTime-this.mTouchHistoryLastAcceptedTime>=ScaleGestureDetector.TOUCH_STABILIZE_TIME;var total=0;var sampleCount=0;for(var i=0;ithis.mTouchUpper){this.mTouchUpper=major;}if(Number.isNaN(this.mTouchLower)||major=minSpan&&(wasInProgress||Math.abs(span-this.mInitialSpan)>this.mSpanSlop)){this.mPrevSpanX=this.mCurrSpanX=spanX;this.mPrevSpanY=this.mCurrSpanY=spanY;this.mPrevSpan=this.mCurrSpan=span;this.mPrevTime=this.mCurrTime;this.mInProgress=this.mListener.onScaleBegin(this);}if(action==MotionEvent.ACTION_MOVE){this.mCurrSpanX=spanX;this.mCurrSpanY=spanY;this.mCurrSpan=span;var updatePrev=true;if(this.mInProgress){updatePrev=this.mListener.onScale(this);}if(updatePrev){this.mPrevSpanX=this.mCurrSpanX;this.mPrevSpanY=this.mCurrSpanY;this.mPrevSpan=this.mCurrSpan;this.mPrevTime=this.mCurrTime;}}return true;}},{key:'inDoubleTapMode',value:function inDoubleTapMode(){return this.mDoubleTapMode==ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;}},{key:'setQuickScaleEnabled',value:function setQuickScaleEnabled(scales){var _this84=this;this.mQuickScaleEnabled=scales;if(this.mQuickScaleEnabled&&this.mGestureDetector==null){var gestureListener=function(){var _this=_this84;var _Inner=function(_view$GestureDetector){_inherits(_Inner,_view$GestureDetector);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,Object.getPrototypeOf(_Inner).apply(this,arguments));}_createClass(_Inner,[{key:'onDoubleTap',value:function onDoubleTap(e){_this.mDoubleTapEvent=e;_this.mDoubleTapMode=ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;return true;}}]);return _Inner;}(view.GestureDetector.SimpleOnGestureListener);return new _Inner();}();this.mGestureDetector=new view.GestureDetector(gestureListener,this.mHandler);}}},{key:'isQuickScaleEnabled',value:function isQuickScaleEnabled(){return this.mQuickScaleEnabled;}},{key:'isInProgress',value:function isInProgress(){return this.mInProgress;}},{key:'getFocusX',value:function getFocusX(){return this.mFocusX;}},{key:'getFocusY',value:function getFocusY(){return this.mFocusY;}},{key:'getCurrentSpan',value:function getCurrentSpan(){return this.mCurrSpan;}},{key:'getCurrentSpanX',value:function getCurrentSpanX(){return this.mCurrSpanX;}},{key:'getCurrentSpanY',value:function getCurrentSpanY(){return this.mCurrSpanY;}},{key:'getPreviousSpan',value:function getPreviousSpan(){return this.mPrevSpan;}},{key:'getPreviousSpanX',value:function getPreviousSpanX(){return this.mPrevSpanX;}},{key:'getPreviousSpanY',value:function getPreviousSpanY(){return this.mPrevSpanY;}},{key:'getScaleFactor',value:function getScaleFactor(){if(this.inDoubleTapMode()){var scaleUp=this.mEventBeforeOrAboveStartingGestureEvent&&this.mCurrSpanthis.mPrevSpan;var spanDiff=Math.abs(1-this.mCurrSpan/this.mPrevSpan)*ScaleGestureDetector.SCALE_FACTOR;return this.mPrevSpan<=0?1:scaleUp?1+spanDiff:1-spanDiff;}return this.mPrevSpan>0?this.mCurrSpan/this.mPrevSpan:1;}},{key:'getTimeDelta',value:function getTimeDelta(){return this.mCurrTime-this.mPrevTime;}},{key:'getEventTime',value:function getEventTime(){return this.mCurrTime;}}]);return ScaleGestureDetector;}();ScaleGestureDetector.TAG="ScaleGestureDetector";ScaleGestureDetector.TOUCH_STABILIZE_TIME=128;ScaleGestureDetector.DOUBLE_TAP_MODE_NONE=0;ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS=1;ScaleGestureDetector.SCALE_FACTOR=.5;view.ScaleGestureDetector=ScaleGestureDetector;(function(ScaleGestureDetector){var SimpleOnScaleGestureListener=function(){function SimpleOnScaleGestureListener(){_classCallCheck(this,SimpleOnScaleGestureListener);}_createClass(SimpleOnScaleGestureListener,[{key:'onScale',value:function onScale(detector){return false;}},{key:'onScaleBegin',value:function onScaleBegin(detector){return true;}},{key:'onScaleEnd',value:function onScaleEnd(detector){}}]);return SimpleOnScaleGestureListener;}();ScaleGestureDetector.SimpleOnScaleGestureListener=SimpleOnScaleGestureListener;})(ScaleGestureDetector=view.ScaleGestureDetector||(view.ScaleGestureDetector={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Handler=android.os.Handler;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var ViewConfiguration=android.view.ViewConfiguration;var GestureDetector=function(){function GestureDetector(listener,handler){_classCallCheck(this,GestureDetector);this.mTouchSlopSquare=0;this.mDoubleTapTouchSlopSquare=0;this.mDoubleTapSlopSquare=0;this.mMinimumFlingVelocity=0;this.mMaximumFlingVelocity=0;this.mLastFocusX=0;this.mLastFocusY=0;this.mDownFocusX=0;this.mDownFocusY=0;this.mHandler=new GestureDetector.GestureHandler(this);this.mListener=listener;if(listener['setOnDoubleTapListener']){this.setOnDoubleTapListener(listener);}this.init();}_createClass(GestureDetector,[{key:'init',value:function init(){if(this.mListener==null){throw Error('new NullPointerException("OnGestureListener must not be null")');}this.mIsLongpressEnabled=true;var touchSlop=undefined,doubleTapSlop=undefined,doubleTapTouchSlop=undefined;var configuration=ViewConfiguration.get();touchSlop=configuration.getScaledTouchSlop();doubleTapTouchSlop=configuration.getScaledDoubleTapTouchSlop();doubleTapSlop=configuration.getScaledDoubleTapSlop();this.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();this.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity();this.mTouchSlopSquare=touchSlop*touchSlop;this.mDoubleTapTouchSlopSquare=doubleTapTouchSlop*doubleTapTouchSlop;this.mDoubleTapSlopSquare=doubleTapSlop*doubleTapSlop;}},{key:'setOnDoubleTapListener',value:function setOnDoubleTapListener(onDoubleTapListener){this.mDoubleTapListener=onDoubleTapListener;}},{key:'setIsLongpressEnabled',value:function setIsLongpressEnabled(isLongpressEnabled){this.mIsLongpressEnabled=isLongpressEnabled;}},{key:'isLongpressEnabled',value:function isLongpressEnabled(){return this.mIsLongpressEnabled;}},{key:'onTouchEvent',value:function onTouchEvent(ev){var action=ev.getAction();if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);var pointerUp=(action&MotionEvent.ACTION_MASK)==MotionEvent.ACTION_POINTER_UP;var skipIndex=pointerUp?ev.getActionIndex():-1;var sumX=0,sumY=0;var count=ev.getPointerCount();for(var i=0;ithis.mTouchSlopSquare){handled=this.mListener.onScroll(this.mCurrentDownEvent,ev,scrollX,scrollY);this.mLastFocusX=focusX;this.mLastFocusY=focusY;this.mAlwaysInTapRegion=false;this.mHandler.removeMessages(GestureDetector.TAP);this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);}if(distance>this.mDoubleTapTouchSlopSquare){this.mAlwaysInBiggerTapRegion=false;}}else if(Math.abs(scrollX)>=1||Math.abs(scrollY)>=1){handled=this.mListener.onScroll(this.mCurrentDownEvent,ev,scrollX,scrollY);this.mLastFocusX=focusX;this.mLastFocusY=focusY;}break;case MotionEvent.ACTION_UP:this.mStillDown=false;var currentUpEvent=MotionEvent.obtain(ev);if(this.mIsDoubleTapping){handled=this.mDoubleTapListener.onDoubleTapEvent(ev)||handled;}else if(this.mInLongPress){this.mHandler.removeMessages(GestureDetector.TAP);this.mInLongPress=false;}else if(this.mAlwaysInTapRegion){handled=this.mListener.onSingleTapUp(ev);if(this.mDeferConfirmSingleTap&&this.mDoubleTapListener!=null){this.mDoubleTapListener.onSingleTapConfirmed(ev);}}else {var velocityTracker=this.mVelocityTracker;var pointerId=ev.getPointerId(0);velocityTracker.computeCurrentVelocity(1000,this.mMaximumFlingVelocity);var velocityY=velocityTracker.getYVelocity(pointerId);var velocityX=velocityTracker.getXVelocity(pointerId);if(Math.abs(velocityY)>this.mMinimumFlingVelocity||Math.abs(velocityX)>this.mMinimumFlingVelocity){handled=this.mListener.onFling(this.mCurrentDownEvent,ev,velocityX,velocityY);}}if(this.mPreviousUpEvent!=null){this.mPreviousUpEvent.recycle();}this.mPreviousUpEvent=currentUpEvent;if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}this.mIsDoubleTapping=false;this.mDeferConfirmSingleTap=false;this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);break;case MotionEvent.ACTION_CANCEL:this.cancel();break;}return handled;}},{key:'cancel',value:function cancel(){this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);this.mHandler.removeMessages(GestureDetector.TAP);this.mVelocityTracker.recycle();this.mVelocityTracker=null;this.mIsDoubleTapping=false;this.mStillDown=false;this.mAlwaysInTapRegion=false;this.mAlwaysInBiggerTapRegion=false;this.mDeferConfirmSingleTap=false;if(this.mInLongPress){this.mInLongPress=false;}}},{key:'cancelTaps',value:function cancelTaps(){this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);this.mHandler.removeMessages(GestureDetector.TAP);this.mIsDoubleTapping=false;this.mAlwaysInTapRegion=false;this.mAlwaysInBiggerTapRegion=false;this.mDeferConfirmSingleTap=false;if(this.mInLongPress){this.mInLongPress=false;}}},{key:'isConsideredDoubleTap',value:function isConsideredDoubleTap(firstDown,firstUp,secondDown){if(!this.mAlwaysInBiggerTapRegion){return false;}var deltaTime=secondDown.getEventTime()-firstUp.getEventTime();if(deltaTime>GestureDetector.DOUBLE_TAP_TIMEOUT||deltaTimemax){this.startSpringback(start,max,0);}return !this.mFinished;}},{key:'startSpringback',value:function startSpringback(start,end,velocity){this.mFinished=false;this.mState=SplineOverScroller.CUBIC;this.mStart=start;this.mFinal=end;var delta=start-end;this.mDeceleration=SplineOverScroller.getDeceleration(delta);this.mVelocity=-delta;this.mOver=Math.abs(delta);var density=android.content.res.Resources.getDisplayMetrics().density;this.mDuration=Math.floor(1000.0*Math.sqrt(-2.0*(delta/density)/this.mDeceleration));}},{key:'fling',value:function fling(start,velocity,min,max,over){this.mOver=over;this.mFinished=false;this.mCurrVelocity=this.mVelocity=velocity;this.mDuration=this.mSplineDuration=0;this.mStartTime=SystemClock.uptimeMillis();this.mCurrentPosition=this.mStart=start;if(start>max||startmax){this.adjustDuration(this.mStart,this.mFinal,max);this.mFinal=max;}}},{key:'getSplineDeceleration',value:function getSplineDeceleration(velocity){return Math.log(SplineOverScroller.INFLEXION*Math.abs(velocity)/(this.mFlingFriction*this.mPhysicalCoeff));}},{key:'getSplineFlingDistance',value:function getSplineFlingDistance(velocity){var l=this.getSplineDeceleration(velocity);var decelMinusOne=SplineOverScroller.DECELERATION_RATE-1.0;return this.mFlingFriction*this.mPhysicalCoeff*Math.exp(SplineOverScroller.DECELERATION_RATE/decelMinusOne*l);}},{key:'getSplineFlingDuration',value:function getSplineFlingDuration(velocity){var l=this.getSplineDeceleration(velocity);var decelMinusOne=SplineOverScroller.DECELERATION_RATE-1.0;return 1000.0*Math.exp(l/decelMinusOne);}},{key:'fitOnBounceCurve',value:function fitOnBounceCurve(start,end,velocity){var durationToApex=-velocity/this.mDeceleration;var distanceToApex=velocity*velocity/2.0/Math.abs(this.mDeceleration);var distanceToEdge=Math.abs(end-start);var totalDuration=Math.sqrt(2.0*(distanceToApex+distanceToEdge)/Math.abs(this.mDeceleration));this.mStartTime-=1000*(totalDuration-durationToApex);this.mStart=end;this.mVelocity=-this.mDeceleration*totalDuration;}},{key:'startBounceAfterEdge',value:function startBounceAfterEdge(start,end,velocity){this.mDeceleration=SplineOverScroller.getDeceleration(velocity==0?start-end:velocity);this.fitOnBounceCurve(start,end,velocity);this.onEdgeReached();}},{key:'startAfterEdge',value:function startAfterEdge(start,min,max,velocity){if(start>min&&startmax;var edge=positive?max:min;var overDistance=start-edge;var keepIncreasing=overDistance*velocity>=0;if(keepIncreasing){this.startBounceAfterEdge(start,edge,velocity);}else {var totalDistance=this.getSplineFlingDistance(velocity);if(totalDistance>Math.abs(overDistance)){this.fling(start,velocity,positive?min:start,positive?start:max,this.mOver);}else {this.startSpringback(start,edge,velocity);}}}},{key:'notifyEdgeReached',value:function notifyEdgeReached(start,end,over){if(this.mState==SplineOverScroller.SPLINE){this.mOver=over;this.mStartTime=SystemClock.uptimeMillis();this.startAfterEdge(start,end,end,this.mCurrVelocity);}}},{key:'onEdgeReached',value:function onEdgeReached(){var distance=this.mVelocity*this.mVelocity/(2*Math.abs(this.mDeceleration));var sign=Math_signum(this.mVelocity);if(distance>this.mOver){this.mDeceleration=-sign*this.mVelocity*this.mVelocity/(2.0*this.mOver);distance=this.mOver;}this.mOver=distance;this.mState=SplineOverScroller.BALLISTIC;this.mFinal=this.mStart+(this.mVelocity>0?distance:-distance);this.mDuration=-(1000*this.mVelocity/this.mDeceleration);}},{key:'continueWhenFinished',value:function continueWhenFinished(){switch(this.mState){case SplineOverScroller.SPLINE:if(this.mDurationthis.mDuration){return false;}var distance=0;switch(this.mState){case SplineOverScroller.SPLINE:{var t=currentTime/this.mSplineDuration;var index=Math.floor(SplineOverScroller.NB_SAMPLES*t);var distanceCoef=1;var velocityCoef=0;if(index0?-SplineOverScroller.GRAVITY:SplineOverScroller.GRAVITY;}}]);return SplineOverScroller;}();SplineOverScroller.DECELERATION_RATE=Math.log(0.78)/Math.log(0.9);SplineOverScroller.INFLEXION=0.35;SplineOverScroller.START_TENSION=0.5;SplineOverScroller.END_TENSION=1.0;SplineOverScroller.P1=SplineOverScroller.START_TENSION*SplineOverScroller.INFLEXION;SplineOverScroller.P2=1.0-SplineOverScroller.END_TENSION*(1-SplineOverScroller.INFLEXION);SplineOverScroller.NB_SAMPLES=100;SplineOverScroller.SPLINE_POSITION=androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE_TIME=androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE=0;SplineOverScroller.CUBIC=1;SplineOverScroller.BALLISTIC=2;SplineOverScroller.GRAVITY=2000;SplineOverScroller._staticFunc=function(){var x_min=0.0;var y_min=0.0;for(var i=0;ialpha)x_max=x;else x_min=x;}SplineOverScroller.SPLINE_POSITION[i]=coef*((1.0-x)*SplineOverScroller.START_TENSION+x)+x*x*x;var y_max=1.0;var y=undefined,dy=undefined;while(true){y=y_min+(y_max-y_min)/2.0;coef=3.0*y*(1.0-y);dy=coef*((1.0-y)*SplineOverScroller.START_TENSION+y)+y*y*y;if(Math.abs(dy-alpha)<1E-5)break;if(dy>alpha)y_max=y;else y_min=y;}SplineOverScroller.SPLINE_TIME[i]=coef*((1.0-y)*SplineOverScroller.P1+y*SplineOverScroller.P2)+y*y*y;}SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES]=SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES]=1.0;}();function Math_signum(value){if(value===0||Number.isNaN(value))return value;return Math.abs(value)===value?1:-1;}var sViscousFluidScale=8;var sViscousFluidNormalize=1;function Scroller_viscousFluid(x){x*=sViscousFluidScale;if(x<1){x-=1-Math.exp(-x);}else {var start=0.36787944117;x=1-Math.exp(1-x);x=start+x*(1-start);}x*=sViscousFluidNormalize;return x;}sViscousFluidNormalize=1/Scroller_viscousFluid(1);})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var View=android.view.View;var ViewGroup=android.view.ViewGroup;var MeasureSpec=View.MeasureSpec;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var ViewConfiguration=android.view.ViewConfiguration;var Rect=android.graphics.Rect;var OverScroller=android.widget.OverScroller;var Log=android.util.Log;var SystemClock=android.os.SystemClock;var KeyEvent=android.view.KeyEvent;var FocusFinder=android.view.FocusFinder;var ScrollView=function(_widget$FrameLayout){_inherits(ScrollView,_widget$FrameLayout);function ScrollView(context,bindElement,defStyle){_classCallCheck(this,ScrollView);var _this87=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollView).call(this,context,bindElement,defStyle));_this87.mLastScroll=0;_this87.mTempRect=new Rect();_this87.mLastMotionY=0;_this87.mIsLayoutDirty=true;_this87.mIsBeingDragged=false;_this87.mFillViewport=false;_this87.mSmoothScrollingEnabled=true;_this87.mMinimumVelocity=0;_this87.mMaximumVelocity=0;_this87.mOverscrollDistance=0;_this87._mOverflingDistance=0;_this87.mActivePointerId=ScrollView.INVALID_POINTER;_this87.initScrollView();_this87._attrBinder.addAttr('fillViewport',function(value){_this87.setFillViewport(_this87._attrBinder.parseBoolean(value));});return _this87;}_createClass(ScrollView,[{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return true;}},{key:'getMaxScrollAmount',value:function getMaxScrollAmount(){return ScrollView.MAX_SCROLL_FACTOR*(this.mBottom-this.mTop);}},{key:'initScrollView',value:function initScrollView(){this.mScroller=new OverScroller();this.setFocusable(true);this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);this.setWillNotDraw(false);var configuration=ViewConfiguration.get();this.mTouchSlop=configuration.getScaledTouchSlop();this.mMinimumVelocity=configuration.getScaledMinimumFlingVelocity();this.mMaximumVelocity=configuration.getScaledMaximumFlingVelocity();this.mOverscrollDistance=configuration.getScaledOverscrollDistance();this.mOverflingDistance=configuration.getScaledOverflingDistance();this.initScrollCache();this.setVerticalScrollBarEnabled(true);}},{key:'addView',value:function addView(){var _get4;if(this.getChildCount()>0){throw new Error("ScrollView can host only one direct child");}for(var _len30=arguments.length,args=Array(_len30),_key31=0;_key31<_len30;_key31++){args[_key31]=arguments[_key31];}return (_get4=_get2(Object.getPrototypeOf(ScrollView.prototype),'addView',this)).call.apply(_get4,[this].concat(args));}},{key:'canScroll',value:function canScroll(){var child=this.getChildAt(0);if(child!=null){var childHeight=child.getHeight();return this.getHeight()0){var child=this.getChildAt(0);var height=this.getMeasuredHeight();if(child.getMeasuredHeight()0){var scrollY=this.mScrollY;var child=this.getChildAt(0);return !(y=child.getBottom()-scrollY||x=child.getRight());}return false;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else {this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(Object.getPrototypeOf(ScrollView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();if(action==MotionEvent.ACTION_MOVE&&this.mIsBeingDragged){return true;}if(this.getScrollY()==0&&!this.canScrollVertically(1)){return false;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==ScrollView.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);if(pointerIndex==-1){Log.e(ScrollView.TAG,"Invalid pointerId="+activePointerId+" in onInterceptTouchEvent");break;}var y=ev.getY(pointerIndex);var yDiff=Math.abs(y-this.mLastMotionY);if(yDiff>this.mTouchSlop){this.mIsBeingDragged=true;this.mLastMotionY=y;this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}break;}case MotionEvent.ACTION_DOWN:{var _y=ev.getY();if(!this.inChild(ev.getX(),_y)){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionY=_y;this.mActivePointerId=ev.getPointerId(0);this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);this.mIsBeingDragged=!this.mScroller.isFinished();break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.mIsBeingDragged=false;this.mActivePointerId=ScrollView.INVALID_POINTER;this.recycleVelocityTracker();if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}break;case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var action=ev.getAction();switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{if(this.getChildCount()==0){return false;}if(this.mIsBeingDragged=!this.mScroller.isFinished()){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.mLastMotionY=ev.getY();this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);if(activePointerIndex==-1){Log.e(ScrollView.TAG,"Invalid pointerId="+this.mActivePointerId+" in onTouchEvent");break;}var y=ev.getY(activePointerIndex);var deltaY=this.mLastMotionY-y;if(!this.mIsBeingDragged&&Math.abs(deltaY)>this.mTouchSlop){var _parent=this.getParent();if(_parent!=null){_parent.requestDisallowInterceptTouchEvent(true);}this.mIsBeingDragged=true;if(deltaY>0){deltaY-=this.mTouchSlop;}else {deltaY+=this.mTouchSlop;}}if(this.mIsBeingDragged){this.mLastMotionY=y;var oldX=this.mScrollX;var oldY=this.mScrollY;var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==ScrollView.OVER_SCROLL_ALWAYS||overscrollMode==ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;if(this.overScrollBy(0,deltaY,0,this.mScrollY,0,range,0,this.mOverscrollDistance,true)){this.mVelocityTracker.clear();}if(canOverscroll){var pulledToY=oldY+deltaY;if(pulledToY<0){}else if(pulledToY>range){}}}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=velocityTracker.getYVelocity(this.mActivePointerId);if(this.getChildCount()>0){var forceSpringBack=this.mScrollY<-this._mOverflingDistance&&initialVelocity>0||this.mScrollY>this.getScrollRange()+this._mOverflingDistance&&initialVelocity<0;if(!forceSpringBack&&Math.abs(initialVelocity)>this.mMinimumVelocity){this.fling(-initialVelocity);}else {if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}}}this.mActivePointerId=ScrollView.INVALID_POINTER;this.endDrag();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged&&this.getChildCount()>0){if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}this.mActivePointerId=ScrollView.INVALID_POINTER;this.endDrag();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();this.mLastMotionY=ev.getY(index);this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionY=ev.getY(ev.findPointerIndex(this.mActivePointerId));break;}return true;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionY=ev.getY(newPointerIndex);this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(!this.mIsBeingDragged){var vscroll=event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(vscroll!=0){var delta=Math.floor(vscroll*this.getVerticalScrollFactor());var range=this.getScrollRange();var oldScrollY=this.mScrollY;var newScrollY=oldScrollY-delta;if(newScrollY<0){newScrollY=0;}else if(newScrollY>range){newScrollY=range;}if(newScrollY!=oldScrollY){_get2(Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,this.mScrollX,newScrollY);return true;}}}}}return _get2(Object.getPrototypeOf(ScrollView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(!this.mScroller.isFinished()){var oldX=this.mScrollX;var oldY=this.mScrollY;this.mScrollX=scrollX;this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);}else {_get2(Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,scrollX,scrollY);}if(!this.awakenScrollBars()){this.postInvalidateOnAnimation();}}},{key:'getScrollRange',value:function getScrollRange(){var scrollRange=0;if(this.getChildCount()>0){var child=this.getChildAt(0);scrollRange=Math.max(0,child.getHeight()-(this.getHeight()-this.mPaddingBottom-this.mPaddingTop));}return scrollRange;}},{key:'findFocusableViewInBounds',value:function findFocusableViewInBounds(topFocus,top,bottom){var focusables=this.getFocusables(View.FOCUS_FORWARD);var focusCandidate=null;var foundFullyContainedFocusable=false;var count=focusables.size();for(var i=0;ifocusCandidate.getBottom();if(foundFullyContainedFocusable){if(viewIsFullyContained&&viewIsCloserToBoundary){focusCandidate=view;}}else {if(viewIsFullyContained){focusCandidate=view;foundFullyContainedFocusable=true;}else if(viewIsCloserToBoundary){focusCandidate=view;}}}}}return focusCandidate;}},{key:'pageScroll',value:function pageScroll(direction){var down=direction==View.FOCUS_DOWN;var height=this.getHeight();if(down){this.mTempRect.top=this.getScrollY()+height;var count=this.getChildCount();if(count>0){var view=this.getChildAt(count-1);if(this.mTempRect.top+height>view.getBottom()){this.mTempRect.top=view.getBottom()-height;}}}else {this.mTempRect.top=this.getScrollY()-height;if(this.mTempRect.top<0){this.mTempRect.top=0;}}this.mTempRect.bottom=this.mTempRect.top+height;return this.scrollAndFocus(direction,this.mTempRect.top,this.mTempRect.bottom);}},{key:'fullScroll',value:function fullScroll(direction){var down=direction==View.FOCUS_DOWN;var height=this.getHeight();this.mTempRect.top=0;this.mTempRect.bottom=height;if(down){var count=this.getChildCount();if(count>0){var view=this.getChildAt(count-1);this.mTempRect.bottom=view.getBottom()+this.mPaddingBottom;this.mTempRect.top=this.mTempRect.bottom-height;}}return this.scrollAndFocus(direction,this.mTempRect.top,this.mTempRect.bottom);}},{key:'scrollAndFocus',value:function scrollAndFocus(direction,top,bottom){var handled=true;var height=this.getHeight();var containerTop=this.getScrollY();var containerBottom=containerTop+height;var up=direction==View.FOCUS_UP;var newFocused=this.findFocusableViewInBounds(up,top,bottom);if(newFocused==null){newFocused=this;}if(top>=containerTop&&bottom<=containerBottom){handled=false;}else {var delta=up?top-containerTop:bottom-containerBottom;this.doScrollY(delta);}if(newFocused!=this.findFocus())newFocused.requestFocus(direction);return handled;}},{key:'arrowScroll',value:function arrowScroll(direction){var currentFocused=this.findFocus();if(currentFocused==this)currentFocused=null;var nextFocused=FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);var maxJump=this.getMaxScrollAmount();if(nextFocused!=null&&this.isWithinDeltaOfScreen(nextFocused,maxJump,this.getHeight())){nextFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(nextFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollY(scrollDelta);nextFocused.requestFocus(direction);}else {var _scrollDelta=maxJump;if(direction==View.FOCUS_UP&&this.getScrollY()<_scrollDelta){_scrollDelta=this.getScrollY();}else if(direction==View.FOCUS_DOWN){if(this.getChildCount()>0){var daBottom=this.getChildAt(0).getBottom();var screenBottom=this.getScrollY()+this.getHeight()-this.mPaddingBottom;if(daBottom-screenBottom=this.getScrollY()&&this.mTempRect.top-delta<=this.getScrollY()+height;}},{key:'doScrollY',value:function doScrollY(delta){if(delta!=0){if(this.mSmoothScrollingEnabled){this.smoothScrollBy(0,delta);}else {this.scrollBy(0,delta);}}}},{key:'smoothScrollBy',value:function smoothScrollBy(dx,dy){if(this.getChildCount()==0){return;}var duration=SystemClock.uptimeMillis()-this.mLastScroll;if(duration>ScrollView.ANIMATED_SCROLL_GAP){var height=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;var bottom=this.getChildAt(0).getHeight();var maxY=Math.max(0,bottom-height);var scrollY=this.mScrollY;dy=Math.max(0,Math.min(scrollY+dy,maxY))-scrollY;this.mScroller.startScroll(this.mScrollX,scrollY,0,dy);this.postInvalidateOnAnimation();}else {if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(dx,dy);}this.mLastScroll=SystemClock.uptimeMillis();}},{key:'smoothScrollTo',value:function smoothScrollTo(x,y){this.smoothScrollBy(x-this.mScrollX,y-this.mScrollY);}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var count=this.getChildCount();var contentHeight=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;if(count==0){return contentHeight;}var scrollRange=this.getChildAt(0).getBottom();var scrollY=this.mScrollY;var overscrollBottom=Math.max(0,scrollRange-contentHeight);if(scrollY<0){scrollRange-=scrollY;}else if(scrollY>overscrollBottom){scrollRange+=scrollY-overscrollBottom;}return scrollRange;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return Math.max(0,_get2(Object.getPrototypeOf(ScrollView.prototype),'computeVerticalScrollOffset',this).call(this));}},{key:'measureChild',value:function measureChild(child,parentWidthMeasureSpec,parentHeightMeasureSpec){var lp=child.getLayoutParams();lp._measuringParentWidthMeasureSpec=parentWidthMeasureSpec;lp._measuringParentHeightMeasureSpec=parentHeightMeasureSpec;var childWidthMeasureSpec=undefined;var childHeightMeasureSpec=undefined;childWidthMeasureSpec=ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec,this.mPaddingLeft+this.mPaddingRight,lp.width);childHeightMeasureSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);lp._measuringParentWidthMeasureSpec=null;lp._measuringParentHeightMeasureSpec=null;}},{key:'measureChildWithMargins',value:function measureChildWithMargins(child,parentWidthMeasureSpec,widthUsed,parentHeightMeasureSpec,heightUsed){var lp=child.getLayoutParams();lp._measuringParentWidthMeasureSpec=parentWidthMeasureSpec;lp._measuringParentHeightMeasureSpec=parentHeightMeasureSpec;var childWidthMeasureSpec=ScrollView.getChildMeasureSpec(parentWidthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+lp.leftMargin+lp.rightMargin+widthUsed,lp.width);var childHeightMeasureSpec=MeasureSpec.makeMeasureSpec(lp.topMargin+lp.bottomMargin,MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);lp._measuringParentWidthMeasureSpec=null;lp._measuringParentHeightMeasureSpec=null;}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller.computeScrollOffset()){var oldX=this.mScrollX;var oldY=this.mScrollY;var x=this.mScroller.getCurrX();var y=this.mScroller.getCurrY();if(oldX!=x||oldY!=y){var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==ScrollView.OVER_SCROLL_ALWAYS||overscrollMode==ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;this.overScrollBy(x-oldX,y-oldY,oldX,oldY,0,range,0,this.mOverflingDistance,false);this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(canOverscroll){if(y<0&&oldY>=0){}else if(y>range&&oldY<=range){}}}if(!this.awakenScrollBars()){this.postInvalidateOnAnimation();}}else {}}},{key:'scrollToChild',value:function scrollToChild(child){child.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(child,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);if(scrollDelta!=0){this.scrollBy(0,scrollDelta);}}},{key:'scrollToChildRect',value:function scrollToChildRect(rect,immediate){var delta=this.computeScrollDeltaToGetChildRectOnScreen(rect);var scroll=delta!=0;if(scroll){if(immediate){this.scrollBy(0,delta);}else {this.smoothScrollBy(0,delta);}}return scroll;}},{key:'computeScrollDeltaToGetChildRectOnScreen',value:function computeScrollDeltaToGetChildRectOnScreen(rect){if(this.getChildCount()==0)return 0;var height=this.getHeight();var screenTop=this.getScrollY();var screenBottom=screenTop+height;var fadingEdge=this.getVerticalFadingEdgeLength();if(rect.top>0){screenTop+=fadingEdge;}if(rect.bottomscreenBottom&&rect.top>screenTop){if(rect.height()>height){scrollYDelta+=rect.top-screenTop;}else {scrollYDelta+=rect.bottom-screenBottom;}var bottom=this.getChildAt(0).getBottom();var distanceToBottom=bottom-screenBottom;scrollYDelta=Math.min(scrollYDelta,distanceToBottom);}else if(rect.topheight){scrollYDelta-=screenBottom-rect.bottom;}else {scrollYDelta-=screenTop-rect.top;}scrollYDelta=Math.max(scrollYDelta,-this.getScrollY());}return scrollYDelta;}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(!this.mIsLayoutDirty){this.scrollToChild(focused);}else {this.mChildToScrollTo=focused;}_get2(Object.getPrototypeOf(ScrollView.prototype),'requestChildFocus',this).call(this,child,focused);}},{key:'onRequestFocusInDescendants',value:function onRequestFocusInDescendants(direction,previouslyFocusedRect){if(direction==View.FOCUS_FORWARD){direction=View.FOCUS_DOWN;}else if(direction==View.FOCUS_BACKWARD){direction=View.FOCUS_UP;}var nextFocus=previouslyFocusedRect==null?FocusFinder.getInstance().findNextFocus(this,null,direction):FocusFinder.getInstance().findNextFocusFromRect(this,previouslyFocusedRect,direction);if(nextFocus==null){return false;}if(this.isOffScreen(nextFocus)){return false;}return nextFocus.requestFocus(direction,previouslyFocusedRect);}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){rectangle.offset(child.getLeft()-child.getScrollX(),child.getTop()-child.getScrollY());return this.scrollToChildRect(rectangle,immediate);}},{key:'requestLayout',value:function requestLayout(){this.mIsLayoutDirty=true;_get2(Object.getPrototypeOf(ScrollView.prototype),'requestLayout',this).call(this);}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(Object.getPrototypeOf(ScrollView.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mIsLayoutDirty=false;if(this.mChildToScrollTo!=null&&ScrollView.isViewDescendantOf(this.mChildToScrollTo,this)){this.scrollToChild(this.mChildToScrollTo);}this.mChildToScrollTo=null;if(!this.isLaidOut()){var childHeight=this.getChildCount()>0?this.getChildAt(0).getMeasuredHeight():0;var scrollRange=Math.max(0,childHeight-(b-t-this.mPaddingBottom-this.mPaddingTop));if(this.mScrollY>scrollRange){this.mScrollY=scrollRange;}else if(this.mScrollY<0){this.mScrollY=0;}}this.scrollTo(this.mScrollX,this.mScrollY);}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(Object.getPrototypeOf(ScrollView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);var currentFocused=this.findFocus();if(null==currentFocused||this==currentFocused)return;if(this.isWithinDeltaOfScreen(currentFocused,0,oldh)){currentFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollY(scrollDelta);}}},{key:'fling',value:function fling(velocityY){if(this.getChildCount()>0){var height=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;var bottom=this.getChildAt(0).getHeight();this.mScroller.fling(this.mScrollX,this.mScrollY,0,velocityY,0,0,0,Math.max(0,bottom-height),0,this.mOverflingDistance);this.postInvalidateOnAnimation();}}},{key:'endDrag',value:function endDrag(){this.mIsBeingDragged=false;this.recycleVelocityTracker();}},{key:'scrollTo',value:function scrollTo(x,y){if(this.getChildCount()>0){var child=this.getChildAt(0);x=ScrollView.clamp(x,this.getWidth()-this.mPaddingRight-this.mPaddingLeft,child.getWidth());y=ScrollView.clamp(y,this.getHeight()-this.mPaddingBottom-this.mPaddingTop,child.getHeight());if(x!=this.mScrollX||y!=this.mScrollY){_get2(Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,x,y);}}}},{key:'canScrollVertically',value:function canScrollVertically(direction){if(this.getOverScrollMode()===View.OVER_SCROLL_ALWAYS)return true;return _get2(Object.getPrototypeOf(ScrollView.prototype),'canScrollVertically',this).call(this,direction);}},{key:'mOverflingDistance',get:function get(){var height=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;var bottom=this.getChildAt(0).getHeight();var minOverY=this.mScrollY<0?-this.mScrollY:this.mScrollY-(bottom-height);return Math.max(this._mOverflingDistance,minOverY+this._mOverflingDistance);},set:function set(value){this._mOverflingDistance=value;}}],[{key:'isViewDescendantOf',value:function isViewDescendantOf(child,parent){if(child==parent){return true;}var theParent=child.getParent();return theParent instanceof ViewGroup&&ScrollView.isViewDescendantOf(theParent,parent);}},{key:'clamp',value:function clamp(n,my,child){if(my>=child||n<0){return 0;}if(my+n>child){return child-my;}return n;}}]);return ScrollView;}(widget.FrameLayout);ScrollView.ANIMATED_SCROLL_GAP=250;ScrollView.MAX_SCROLL_FACTOR=0.5;ScrollView.TAG="ScrollView";ScrollView.INVALID_POINTER=-1;widget.ScrollView=ScrollView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Gravity=android.view.Gravity;var View=android.view.View;var MeasureSpec=View.MeasureSpec;var ViewGroup=android.view.ViewGroup;var LinearLayout=function(_ViewGroup2){_inherits(LinearLayout,_ViewGroup2);function LinearLayout(context,bindElement,defStyle){_classCallCheck(this,LinearLayout);var _this88=_possibleConstructorReturn(this,Object.getPrototypeOf(LinearLayout).call(this,context,bindElement,defStyle));_this88.mBaselineAligned=true;_this88.mBaselineAlignedChildIndex=-1;_this88.mBaselineChildTop=0;_this88.mOrientation=0;_this88.mGravity=Gravity.LEFT|Gravity.TOP;_this88.mTotalLength=0;_this88.mWeightSum=-1;_this88.mUseLargestChild=false;_this88.mDividerWidth=0;_this88.mDividerHeight=0;_this88.mShowDividers=LinearLayout.SHOW_DIVIDER_NONE;_this88.mDividerPadding=0;_this88._attrBinder.addAttr('orientation',function(value){if((value+"").toUpperCase()==='VERTICAL'||LinearLayout.VERTICAL==value){_this88.setOrientation(LinearLayout.VERTICAL);}else if((value+"").toUpperCase()==='HORIZONTAL'||LinearLayout.HORIZONTAL==value){_this88.setOrientation(LinearLayout.HORIZONTAL);}},function(){return _this88.mOrientation;});_this88._attrBinder.addAttr('gravity',function(value){_this88.setGravity(_this88._attrBinder.parseGravity(value,_this88.mGravity));},function(){return _this88.mGravity;});_this88._attrBinder.addAttr('baselineAligned',function(value){if(!_this88._attrBinder.parseBoolean(value))_this88.setBaselineAligned(false);});_this88._attrBinder.addAttr('weightSum',function(value){var weightSum=Number.parseFloat(value);if(!Number.isNaN(weightSum)&&weightSum!=null){_this88.setWeightSum(weightSum);}},function(){return _this88.mWeightSum;});_this88._attrBinder.addAttr('baselineAlignedChildIndex',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this88.mBaselineAlignedChildIndex=value;}});_this88._attrBinder.addAttr('measureWithLargestChild',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this88.mUseLargestChild=_this88._attrBinder.parseBoolean(value,_this88.mUseLargestChild);}});_this88._attrBinder.addAttr('divider',function(value){_this88.setDividerDrawable(_this88._attrBinder.parseDrawable(value));});_this88._attrBinder.addAttr('showDividers',function(value){var fieldName=('SHOW_DIVIDER_'+value).toUpperCase();if(Number.isInteger(LinearLayout[fieldName])){_this88.setShowDividers(LinearLayout[fieldName]);}});_this88._attrBinder.addAttr('dividerPadding',function(value){value=Number.parseInt(value);if(Number.isInteger(value)){_this88.setDividerPadding(value);}});return _this88;}_createClass(LinearLayout,[{key:'setShowDividers',value:function setShowDividers(showDividers){if(showDividers!=this.mShowDividers){this.requestLayout();}this.mShowDividers=showDividers;}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return false;}},{key:'getShowDividers',value:function getShowDividers(){return this.mShowDividers;}},{key:'getDividerDrawable',value:function getDividerDrawable(){return this.mDivider;}},{key:'setDividerDrawable',value:function setDividerDrawable(divider){if(divider==this.mDivider){return;}this.mDivider=divider;if(divider!=null){this.mDividerWidth=divider.getIntrinsicWidth();this.mDividerHeight=divider.getIntrinsicHeight();}else {this.mDividerWidth=0;this.mDividerHeight=0;}this.setWillNotDraw(divider==null);this.requestLayout();}},{key:'setDividerPadding',value:function setDividerPadding(padding){this.mDividerPadding=padding;}},{key:'getDividerPadding',value:function getDividerPadding(){return this.mDividerPadding;}},{key:'getDividerWidth',value:function getDividerWidth(){return this.mDividerWidth;}},{key:'onDraw',value:function onDraw(canvas){if(this.mDivider==null){return;}if(this.mOrientation==LinearLayout.VERTICAL){this.drawDividersVertical(canvas);}else {this.drawDividersHorizontal(canvas);}}},{key:'drawDividersVertical',value:function drawDividersVertical(canvas){var count=this.getVirtualChildCount();for(var i=0;i=this.getChildCount()){throw new Error("base aligned child index out "+"of range (0, "+this.getChildCount()+")");}this.mBaselineAlignedChildIndex=i;}},{key:'getVirtualChildAt',value:function getVirtualChildAt(index){return this.getChildAt(index);}},{key:'getVirtualChildCount',value:function getVirtualChildCount(){return this.getChildCount();}},{key:'getWeightSum',value:function getWeightSum(){return this.mWeightSum;}},{key:'setWeightSum',value:function setWeightSum(weightSum){this.mWeightSum=Math.max(0,weightSum);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(this.mOrientation==LinearLayout.VERTICAL){this.measureVertical(widthMeasureSpec,heightMeasureSpec);}else {this.measureHorizontal(widthMeasureSpec,heightMeasureSpec);}}},{key:'hasDividerBeforeChildAt',value:function hasDividerBeforeChildAt(childIndex){if(childIndex==0){return (this.mShowDividers&LinearLayout.SHOW_DIVIDER_BEGINNING)!=0;}else if(childIndex==this.getChildCount()){return (this.mShowDividers&LinearLayout.SHOW_DIVIDER_END)!=0;}else if((this.mShowDividers&LinearLayout.SHOW_DIVIDER_MIDDLE)!=0){var hasVisibleViewBefore=false;for(var i=childIndex-1;i>=0;i--){if(this.getChildAt(i).getVisibility()!=LinearLayout.GONE){hasVisibleViewBefore=true;break;}}return hasVisibleViewBefore;}return false;}},{key:'measureVertical',value:function measureVertical(widthMeasureSpec,heightMeasureSpec){this.mTotalLength=0;var maxWidth=0;var childState=0;var alternativeMaxWidth=0;var weightedMaxWidth=0;var allFillParent=true;var totalWeight=0;var count=this.getVirtualChildCount();var widthMode=MeasureSpec.getMode(widthMeasureSpec);var heightMode=MeasureSpec.getMode(heightMeasureSpec);var matchWidth=false;var baselineChildIndex=this.mBaselineAlignedChildIndex;var useLargestChild=this.mUseLargestChild;var largestChildHeight=Number.MIN_SAFE_INTEGER;for(var i=0;i0){var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+lp.topMargin+lp.bottomMargin);}else {var oldHeight=Number.MIN_SAFE_INTEGER;if(lp.height==0&&lp.weight>0){oldHeight=0;lp.height=LinearLayout.LayoutParams.WRAP_CONTENT;}this.measureChildBeforeLayout(child,i,widthMeasureSpec,0,heightMeasureSpec,totalWeight==0?this.mTotalLength:0);if(oldHeight!=Number.MIN_SAFE_INTEGER){lp.height=oldHeight;}var childHeight=child.getMeasuredHeight();var _totalLength=this.mTotalLength;this.mTotalLength=Math.max(_totalLength,_totalLength+childHeight+lp.topMargin+lp.bottomMargin+this.getNextLocationOffset(child));if(useLargestChild){largestChildHeight=Math.max(childHeight,largestChildHeight);}}if(baselineChildIndex>=0&&baselineChildIndex==i+1){this.mBaselineChildTop=this.mTotalLength;}if(i0){throw new Error("A child of LinearLayout with index "+"less than mBaselineAlignedChildIndex has weight > 0, which "+"won't work. Either remove the weight, or don't set "+"mBaselineAlignedChildIndex.");}var matchWidthLocally=false;if(widthMode!=MeasureSpec.EXACTLY&&lp.width==LinearLayout.LayoutParams.MATCH_PARENT){matchWidth=true;matchWidthLocally=true;}var margin=lp.leftMargin+lp.rightMargin;var measuredWidth=child.getMeasuredWidth()+margin;maxWidth=Math.max(maxWidth,measuredWidth);childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState());allFillParent=allFillParent&&lp.width==LinearLayout.LayoutParams.MATCH_PARENT;if(lp.weight>0){weightedMaxWidth=Math.max(weightedMaxWidth,matchWidthLocally?margin:measuredWidth);}else {alternativeMaxWidth=Math.max(alternativeMaxWidth,matchWidthLocally?margin:measuredWidth);}i+=this.getChildrenSkipCount(child,i);}if(this.mTotalLength>0&&this.hasDividerBeforeChildAt(count)){this.mTotalLength+=this.mDividerHeight;}if(useLargestChild&&(heightMode==MeasureSpec.AT_MOST||heightMode==MeasureSpec.UNSPECIFIED)){this.mTotalLength=0;for(var _i20=0;_i200){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;this.mTotalLength=0;for(var _i21=0;_i210){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childWidthMeasureSpec=LinearLayout.getChildMeasureSpec(widthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+_lp5.leftMargin+_lp5.rightMargin,_lp5.width);if(_lp5.height!=0||heightMode!=MeasureSpec.EXACTLY){var _childHeight=_child7.getMeasuredHeight()+share;if(_childHeight<0){_childHeight=0;}_child7.measure(childWidthMeasureSpec,MeasureSpec.makeMeasureSpec(_childHeight,MeasureSpec.EXACTLY));}else {_child7.measure(childWidthMeasureSpec,MeasureSpec.makeMeasureSpec(share>0?share:0,MeasureSpec.EXACTLY));}childState=LinearLayout.combineMeasuredStates(childState,_child7.getMeasuredState()&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT);}var _margin=_lp5.leftMargin+_lp5.rightMargin;var _measuredWidth=_child7.getMeasuredWidth()+_margin;maxWidth=Math.max(maxWidth,_measuredWidth);var _matchWidthLocally=widthMode!=MeasureSpec.EXACTLY&&_lp5.width==LinearLayout.LayoutParams.MATCH_PARENT;alternativeMaxWidth=Math.max(alternativeMaxWidth,_matchWidthLocally?_margin:_measuredWidth);allFillParent=allFillParent&&_lp5.width==LinearLayout.LayoutParams.MATCH_PARENT;var _totalLength3=this.mTotalLength;this.mTotalLength=Math.max(_totalLength3,_totalLength3+_child7.getMeasuredHeight()+_lp5.topMargin+_lp5.bottomMargin+this.getNextLocationOffset(_child7));}this.mTotalLength+=this.mPaddingTop+this.mPaddingBottom;}else {alternativeMaxWidth=Math.max(alternativeMaxWidth,weightedMaxWidth);if(useLargestChild&&heightMode!=MeasureSpec.EXACTLY){for(var _i22=0;_i220){_child8.measure(MeasureSpec.makeMeasureSpec(_child8.getMeasuredWidth(),MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(largestChildHeight,MeasureSpec.EXACTLY));}}}}if(!allFillParent&&widthMode!=MeasureSpec.EXACTLY){maxWidth=alternativeMaxWidth;}maxWidth+=this.mPaddingLeft+this.mPaddingRight;maxWidth=Math.max(maxWidth,this.getSuggestedMinimumWidth());this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth,widthMeasureSpec,childState),heightSizeAndState);if(matchWidth){this.forceUniformWidth(count,heightMeasureSpec);}}},{key:'forceUniformWidth',value:function forceUniformWidth(count,heightMeasureSpec){var uniformMeasureSpec=MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(),MeasureSpec.EXACTLY);for(var i=0;i0){if(isExactly){this.mTotalLength+=lp.leftMargin+lp.rightMargin;}else {var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+lp.leftMargin+lp.rightMargin);}if(baselineAligned){var freeSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);child.measure(freeSpec,freeSpec);}}else {var oldWidth=Number.MIN_SAFE_INTEGER;if(lp.width==0&&lp.weight>0){oldWidth=0;lp.width=LinearLayout.LayoutParams.WRAP_CONTENT;}this.measureChildBeforeLayout(child,i,widthMeasureSpec,totalWeight==0?this.mTotalLength:0,heightMeasureSpec,0);if(oldWidth!=Number.MIN_SAFE_INTEGER){lp.width=oldWidth;}var childWidth=child.getMeasuredWidth();if(isExactly){this.mTotalLength+=childWidth+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child);}else {var _totalLength4=this.mTotalLength;this.mTotalLength=Math.max(_totalLength4,_totalLength4+childWidth+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child));}if(useLargestChild){largestChildWidth=Math.max(childWidth,largestChildWidth);}}var matchHeightLocally=false;if(heightMode!=MeasureSpec.EXACTLY&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT){matchHeight=true;matchHeightLocally=true;}var margin=lp.topMargin+lp.bottomMargin;var childHeight=child.getMeasuredHeight()+margin;childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState());if(baselineAligned){var childBaseline=child.getBaseline();if(childBaseline!=-1){var gravity=(lp.gravity<0?this.mGravity:lp.gravity)&Gravity.VERTICAL_GRAVITY_MASK;var index=(gravity>>Gravity.AXIS_Y_SHIFT&~Gravity.AXIS_SPECIFIED)>>1;maxAscent[index]=Math.max(maxAscent[index],childBaseline);maxDescent[index]=Math.max(maxDescent[index],childHeight-childBaseline);}}maxHeight=Math.max(maxHeight,childHeight);allFillParent=allFillParent&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT;if(lp.weight>0){weightedMaxHeight=Math.max(weightedMaxHeight,matchHeightLocally?margin:childHeight);}else {alternativeMaxHeight=Math.max(alternativeMaxHeight,matchHeightLocally?margin:childHeight);}i+=this.getChildrenSkipCount(child,i);}if(this.mTotalLength>0&&this.hasDividerBeforeChildAt(count)){this.mTotalLength+=this.mDividerWidth;}if(maxAscent[LinearLayout.INDEX_TOP]!=-1||maxAscent[LinearLayout.INDEX_CENTER_VERTICAL]!=-1||maxAscent[LinearLayout.INDEX_BOTTOM]!=-1||maxAscent[LinearLayout.INDEX_FILL]!=-1){var ascent=Math.max(maxAscent[LinearLayout.INDEX_FILL],Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxAscent[LinearLayout.INDEX_TOP],maxAscent[LinearLayout.INDEX_BOTTOM])));var descent=Math.max(maxDescent[LinearLayout.INDEX_FILL],Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxDescent[LinearLayout.INDEX_TOP],maxDescent[LinearLayout.INDEX_BOTTOM])));maxHeight=Math.max(maxHeight,ascent+descent);}if(useLargestChild&&(widthMode==MeasureSpec.AT_MOST||widthMode==MeasureSpec.UNSPECIFIED)){this.mTotalLength=0;for(var _i23=0;_i230){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;maxAscent[0]=maxAscent[1]=maxAscent[2]=maxAscent[3]=-1;maxDescent[0]=maxDescent[1]=maxDescent[2]=maxDescent[3]=-1;maxHeight=-1;this.mTotalLength=0;for(var _i24=0;_i240){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childHeightMeasureSpec=LinearLayout.getChildMeasureSpec(heightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+_lp8.topMargin+_lp8.bottomMargin,_lp8.height);if(_lp8.width!=0||widthMode!=MeasureSpec.EXACTLY){var _childWidth=_child10.getMeasuredWidth()+share;if(_childWidth<0){_childWidth=0;}_child10.measure(MeasureSpec.makeMeasureSpec(_childWidth,MeasureSpec.EXACTLY),childHeightMeasureSpec);}else {_child10.measure(MeasureSpec.makeMeasureSpec(share>0?share:0,MeasureSpec.EXACTLY),childHeightMeasureSpec);}childState=LinearLayout.combineMeasuredStates(childState,_child10.getMeasuredState()&View.MEASURED_STATE_MASK);}if(isExactly){this.mTotalLength+=_child10.getMeasuredWidth()+_lp8.leftMargin+_lp8.rightMargin+this.getNextLocationOffset(_child10);}else {var _totalLength6=this.mTotalLength;this.mTotalLength=Math.max(_totalLength6,_totalLength6+_child10.getMeasuredWidth()+_lp8.leftMargin+_lp8.rightMargin+this.getNextLocationOffset(_child10));}var _matchHeightLocally=heightMode!=MeasureSpec.EXACTLY&&_lp8.height==LinearLayout.LayoutParams.MATCH_PARENT;var _margin2=_lp8.topMargin+_lp8.bottomMargin;var _childHeight2=_child10.getMeasuredHeight()+_margin2;maxHeight=Math.max(maxHeight,_childHeight2);alternativeMaxHeight=Math.max(alternativeMaxHeight,_matchHeightLocally?_margin2:_childHeight2);allFillParent=allFillParent&&_lp8.height==LinearLayout.LayoutParams.MATCH_PARENT;if(baselineAligned){var _childBaseline=_child10.getBaseline();if(_childBaseline!=-1){var _gravity=(_lp8.gravity<0?this.mGravity:_lp8.gravity)&Gravity.VERTICAL_GRAVITY_MASK;var _index=(_gravity>>Gravity.AXIS_Y_SHIFT&~Gravity.AXIS_SPECIFIED)>>1;maxAscent[_index]=Math.max(maxAscent[_index],_childBaseline);maxDescent[_index]=Math.max(maxDescent[_index],_childHeight2-_childBaseline);}}}this.mTotalLength+=this.mPaddingLeft+this.mPaddingRight;if(maxAscent[LinearLayout.INDEX_TOP]!=-1||maxAscent[LinearLayout.INDEX_CENTER_VERTICAL]!=-1||maxAscent[LinearLayout.INDEX_BOTTOM]!=-1||maxAscent[LinearLayout.INDEX_FILL]!=-1){var _ascent=Math.max(maxAscent[LinearLayout.INDEX_FILL],Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxAscent[LinearLayout.INDEX_TOP],maxAscent[LinearLayout.INDEX_BOTTOM])));var _descent=Math.max(maxDescent[LinearLayout.INDEX_FILL],Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxDescent[LinearLayout.INDEX_TOP],maxDescent[LinearLayout.INDEX_BOTTOM])));maxHeight=Math.max(maxHeight,_ascent+_descent);}}else {alternativeMaxHeight=Math.max(alternativeMaxHeight,weightedMaxHeight);if(useLargestChild&&widthMode!=MeasureSpec.EXACTLY){for(var _i25=0;_i250){_child11.measure(MeasureSpec.makeMeasureSpec(largestChildWidth,MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(_child11.getMeasuredHeight(),MeasureSpec.EXACTLY));}}}}if(!allFillParent&&heightMode!=MeasureSpec.EXACTLY){maxHeight=alternativeMaxHeight;}maxHeight+=this.mPaddingTop+this.mPaddingBottom;maxHeight=Math.max(maxHeight,this.getSuggestedMinimumHeight());this.setMeasuredDimension(widthSizeAndState|childState&View.MEASURED_STATE_MASK,LinearLayout.resolveSizeAndState(maxHeight,heightMeasureSpec,childState<=0;}},{key:'get',value:function get(key){return this.map.get(key);}},{key:'keyAt',value:function keyAt(index){return [].concat(_toConsumableArray(this.map.keys()))[index];}},{key:'valueAt',value:function valueAt(index){return [].concat(_toConsumableArray(this.map.values()))[index];}},{key:'setValueAt',value:function setValueAt(index,value){var key=this.keyAt(index);if(key==null)throw Error('index error');var oldV=this.get(key);this.map.set(key,value);return oldV;}},{key:'isEmpty',value:function isEmpty(){return this.map.size<=0;}},{key:'put',value:function put(key,value){var oldV=this.get(key);this.map.set(key,value);return oldV;}},{key:'append',value:function append(key,value){this.map.set(key,value);}},{key:'remove',value:function remove(key){var oldV=this.get(key);this.map.delete(key);return oldV;}},{key:'removeAt',value:function removeAt(index){var key=this.keyAt(index);if(key==null)throw Error('index error');var oldV=this.get(key);this.map.delete(key);return oldV;}},{key:'keySet',value:function keySet(){return new Set(this.map.keys());}},{key:'size',value:function size(){return this.map.size;}}]);return ArrayMap;}();util.ArrayMap=ArrayMap;})(util=android.util||(android.util={}));})(android||(android={}));var java;(function(java){var util;(function(util){var ArrayDeque=function(_util$ArrayList){_inherits(ArrayDeque,_util$ArrayList);function ArrayDeque(){_classCallCheck(this,ArrayDeque);return _possibleConstructorReturn(this,Object.getPrototypeOf(ArrayDeque).apply(this,arguments));}_createClass(ArrayDeque,[{key:'addFirst',value:function addFirst(e){this.add(0,e);}},{key:'addLast',value:function addLast(e){this.add(e);}},{key:'offerFirst',value:function offerFirst(e){this.addFirst(e);return true;}},{key:'offerLast',value:function offerLast(e){this.addLast(e);return true;}},{key:'removeFirst',value:function removeFirst(){var x=this.pollFirst();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'removeLast',value:function removeLast(){var x=this.pollLast();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'pollFirst',value:function pollFirst(){return this.array.shift();}},{key:'pollLast',value:function pollLast(){return this.array.splice(this.array.length-1)[0];}},{key:'getFirst',value:function getFirst(){var x=this.peekFirst();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'getLast',value:function getLast(){var x=this.peekLast();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'peekFirst',value:function peekFirst(){return this.array[0];}},{key:'peekLast',value:function peekLast(){return this.array[this.array.length-1];}},{key:'removeFirstOccurrence',value:function removeFirstOccurrence(o){if(o==null)return false;for(var i=0,count=this.size();i=0;i--){if(this.array[i]==o){this.delete(i);return true;}}return false;}},{key:'offer',value:function offer(e){return this.offerLast(e);}},{key:'remove',value:function remove(){return this.removeFirst();}},{key:'poll',value:function poll(){return this.pollFirst();}},{key:'element',value:function element(){return this.getFirst();}},{key:'peek',value:function peek(){return this.peekFirst();}},{key:'push',value:function push(e){this.addFirst(e);}},{key:'pop',value:function pop(){return this.removeFirst();}},{key:'delete',value:function _delete(i){if(i>=this.array.length)return false;this.array.splice(i,1);return true;}}]);return ArrayDeque;}(util.ArrayList);util.ArrayDeque=ArrayDeque;})(util=java.util||(java.util={}));})(java||(java={}));var android;(function(android){var util;(function(util){var MathUtils=function(){function MathUtils(){_classCallCheck(this,MathUtils);}_createClass(MathUtils,null,[{key:'abs',value:function abs(v){return v>0?v:-v;}},{key:'constrain',value:function constrain(amount,low,high){return amounthigh?high:amount;}},{key:'log',value:function log(a){return Math.log(a);}},{key:'exp',value:function exp(a){return Math.exp(a);}},{key:'pow',value:function pow(a,b){return Math.pow(a,b);}},{key:'max',value:function max(a,b,c){if(c==null)return a>b?a:b;return a>b?a>c?a:c:b>c?b:c;}},{key:'min',value:function min(a,b,c){if(c==null)return a=howbig)return howsmall;return Math.random()*(howbig-howsmall)+howsmall;}}]);return MathUtils;}();MathUtils.DEG_TO_RAD=3.1415926/180.0;MathUtils.RAD_TO_DEG=180.0/3.1415926;util.MathUtils=MathUtils;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var util;(function(util){var SparseBooleanArray=function(_util$SparseArray){_inherits(SparseBooleanArray,_util$SparseArray);function SparseBooleanArray(){_classCallCheck(this,SparseBooleanArray);return _possibleConstructorReturn(this,Object.getPrototypeOf(SparseBooleanArray).apply(this,arguments));}return SparseBooleanArray;}(util.SparseArray);util.SparseBooleanArray=SparseBooleanArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var SoundEffectConstants=function(){function SoundEffectConstants(){_classCallCheck(this,SoundEffectConstants);}_createClass(SoundEffectConstants,null,[{key:'getContantForFocusDirection',value:function getContantForFocusDirection(direction){switch(direction){case view.View.FOCUS_RIGHT:return SoundEffectConstants.NAVIGATION_RIGHT;case view.View.FOCUS_FORWARD:case view.View.FOCUS_DOWN:return SoundEffectConstants.NAVIGATION_DOWN;case view.View.FOCUS_LEFT:return SoundEffectConstants.NAVIGATION_LEFT;case view.View.FOCUS_BACKWARD:case view.View.FOCUS_UP:return SoundEffectConstants.NAVIGATION_UP;}throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.")');}}]);return SoundEffectConstants;}();SoundEffectConstants.CLICK=0;SoundEffectConstants.NAVIGATION_LEFT=1;SoundEffectConstants.NAVIGATION_UP=2;SoundEffectConstants.NAVIGATION_RIGHT=3;SoundEffectConstants.NAVIGATION_DOWN=4;view.SoundEffectConstants=SoundEffectConstants;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var Trace=function(){function Trace(){_classCallCheck(this,Trace);}_createClass(Trace,null,[{key:'nativeGetEnabledTags',value:function nativeGetEnabledTags(){return Trace.TRACE_TAG_ALWAYS;}},{key:'nativeTraceCounter',value:function nativeTraceCounter(tag,name,value){}},{key:'nativeTraceBegin',value:function nativeTraceBegin(tag,name){}},{key:'nativeTraceEnd',value:function nativeTraceEnd(tag){}},{key:'nativeAsyncTraceBegin',value:function nativeAsyncTraceBegin(tag,name,cookie){}},{key:'nativeAsyncTraceEnd',value:function nativeAsyncTraceEnd(tag,name,cookie){}},{key:'nativeSetAppTracingAllowed',value:function nativeSetAppTracingAllowed(allowed){}},{key:'nativeSetTracingEnabled',value:function nativeSetTracingEnabled(allowed){}},{key:'cacheEnabledTags',value:function cacheEnabledTags(){var tags=Trace.nativeGetEnabledTags();Trace.sEnabledTags=tags;return tags;}},{key:'isTagEnabled',value:function isTagEnabled(traceTag){var tags=Trace.sEnabledTags;if(tags==Trace.TRACE_TAG_NOT_READY){tags=Trace.cacheEnabledTags();}return (tags&traceTag)!=0;}},{key:'traceCounter',value:function traceCounter(traceTag,counterName,counterValue){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceCounter(traceTag,counterName,counterValue);}}},{key:'setAppTracingAllowed',value:function setAppTracingAllowed(allowed){Trace.nativeSetAppTracingAllowed(allowed);Trace.cacheEnabledTags();}},{key:'setTracingEnabled',value:function setTracingEnabled(enabled){Trace.nativeSetTracingEnabled(enabled);Trace.cacheEnabledTags();}},{key:'traceBegin',value:function traceBegin(traceTag,methodName){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceBegin(traceTag,methodName);}}},{key:'traceEnd',value:function traceEnd(traceTag){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceEnd(traceTag);}}},{key:'asyncTraceBegin',value:function asyncTraceBegin(traceTag,methodName,cookie){if(Trace.isTagEnabled(traceTag)){Trace.nativeAsyncTraceBegin(traceTag,methodName,cookie);}}},{key:'asyncTraceEnd',value:function asyncTraceEnd(traceTag,methodName,cookie){if(Trace.isTagEnabled(traceTag)){Trace.nativeAsyncTraceEnd(traceTag,methodName,cookie);}}},{key:'beginSection',value:function beginSection(sectionName){if(Trace.isTagEnabled(Trace.TRACE_TAG_APP)){if(sectionName.length>Trace.MAX_SECTION_NAME_LEN){throw Error('new IllegalArgumentException("sectionName is too long")');}Trace.nativeTraceBegin(Trace.TRACE_TAG_APP,sectionName);}}},{key:'endSection',value:function endSection(){if(Trace.isTagEnabled(Trace.TRACE_TAG_APP)){Trace.nativeTraceEnd(Trace.TRACE_TAG_APP);}}}]);return Trace;}();Trace.TAG="Trace";Trace.TRACE_TAG_NEVER=0;Trace.TRACE_TAG_ALWAYS=1<<0;Trace.TRACE_TAG_GRAPHICS=1<<1;Trace.TRACE_TAG_INPUT=1<<2;Trace.TRACE_TAG_VIEW=1<<3;Trace.TRACE_TAG_WEBVIEW=1<<4;Trace.TRACE_TAG_WINDOW_MANAGER=1<<5;Trace.TRACE_TAG_ACTIVITY_MANAGER=1<<6;Trace.TRACE_TAG_SYNC_MANAGER=1<<7;Trace.TRACE_TAG_AUDIO=1<<8;Trace.TRACE_TAG_VIDEO=1<<9;Trace.TRACE_TAG_CAMERA=1<<10;Trace.TRACE_TAG_HAL=1<<11;Trace.TRACE_TAG_APP=1<<12;Trace.TRACE_TAG_RESOURCES=1<<13;Trace.TRACE_TAG_DALVIK=1<<14;Trace.TRACE_TAG_RS=1<<15;Trace.TRACE_TAG_NOT_READY=1<<63;Trace.MAX_SECTION_NAME_LEN=127;Trace.sEnabledTags=Trace.TRACE_TAG_NOT_READY;os.Trace=Trace;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var text;(function(text){var KeyEvent=android.view.KeyEvent;var InputType=function InputType(){_classCallCheck(this,InputType);};InputType.TYPE_MASK_CLASS=0x0000000f;InputType.TYPE_MASK_VARIATION=0x00000ff0;InputType.TYPE_MASK_FLAGS=0x00fff000;InputType.TYPE_NULL=0x00000000;InputType.TYPE_CLASS_TEXT=0x00000001;InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS=0x00001000;InputType.TYPE_TEXT_FLAG_CAP_WORDS=0x00002000;InputType.TYPE_TEXT_FLAG_CAP_SENTENCES=0x00004000;InputType.TYPE_TEXT_FLAG_AUTO_CORRECT=0x00008000;InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE=0x00010000;InputType.TYPE_TEXT_FLAG_MULTI_LINE=0x00020000;InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE=0x00040000;InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS=0x00080000;InputType.TYPE_TEXT_VARIATION_NORMAL=0x00000000;InputType.TYPE_TEXT_VARIATION_URI=0x00000010;InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS=0x00000020;InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT=0x00000030;InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE=0x00000040;InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE=0x00000050;InputType.TYPE_TEXT_VARIATION_PERSON_NAME=0x00000060;InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS=0x00000070;InputType.TYPE_TEXT_VARIATION_PASSWORD=0x00000080;InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD=0x00000090;InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT=0x000000a0;InputType.TYPE_TEXT_VARIATION_FILTER=0x000000b0;InputType.TYPE_TEXT_VARIATION_PHONETIC=0x000000c0;InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS=0x000000d0;InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD=0x000000e0;InputType.TYPE_CLASS_NUMBER=0x00000002;InputType.TYPE_NUMBER_FLAG_SIGNED=0x00001000;InputType.TYPE_NUMBER_FLAG_DECIMAL=0x00002000;InputType.TYPE_NUMBER_VARIATION_NORMAL=0x00000000;InputType.TYPE_NUMBER_VARIATION_PASSWORD=0x00000010;InputType.TYPE_CLASS_PHONE=0x00000003;InputType.TYPE_CLASS_DATETIME=0x00000004;InputType.TYPE_DATETIME_VARIATION_NORMAL=0x00000000;InputType.TYPE_DATETIME_VARIATION_DATE=0x00000010;InputType.TYPE_DATETIME_VARIATION_TIME=0x00000020;text.InputType=InputType;(function(InputType){var LimitCode=function LimitCode(){_classCallCheck(this,LimitCode);};LimitCode.TYPE_CLASS_NUMBER=[KeyEvent.KEYCODE_Digit0,KeyEvent.KEYCODE_Digit1,KeyEvent.KEYCODE_Digit2,KeyEvent.KEYCODE_Digit3,KeyEvent.KEYCODE_Digit4,KeyEvent.KEYCODE_Digit5,KeyEvent.KEYCODE_Digit6,KeyEvent.KEYCODE_Digit7,KeyEvent.KEYCODE_Digit8,KeyEvent.KEYCODE_Digit9];LimitCode.TYPE_CLASS_PHONE=[KeyEvent.KEYCODE_Comma,KeyEvent.KEYCODE_Sharp,KeyEvent.KEYCODE_Semicolon,KeyEvent.KEYCODE_Asterisk,KeyEvent.KEYCODE_Left_Parenthesis,KeyEvent.KEYCODE_Right_Parenthesis,KeyEvent.KEYCODE_Slash,KeyEvent.KEYCODE_KeyN,KeyEvent.KEYCODE_Period,KeyEvent.KEYCODE_SPACE,KeyEvent.KEYCODE_Add,KeyEvent.KEYCODE_Minus,KeyEvent.KEYCODE_Period,KeyEvent.KEYCODE_Digit0,KeyEvent.KEYCODE_Digit1,KeyEvent.KEYCODE_Digit2,KeyEvent.KEYCODE_Digit3,KeyEvent.KEYCODE_Digit4,KeyEvent.KEYCODE_Digit5,KeyEvent.KEYCODE_Digit6,KeyEvent.KEYCODE_Digit7,KeyEvent.KEYCODE_Digit8,KeyEvent.KEYCODE_Digit9];InputType.LimitCode=LimitCode;})(InputType=text.InputType||(text.InputType={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var util;(function(util){var LongSparseArray=function(_util$SparseArray2){_inherits(LongSparseArray,_util$SparseArray2);function LongSparseArray(){_classCallCheck(this,LongSparseArray);return _possibleConstructorReturn(this,Object.getPrototypeOf(LongSparseArray).apply(this,arguments));}return LongSparseArray;}(util.SparseArray);util.LongSparseArray=LongSparseArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var HapticFeedbackConstants=function HapticFeedbackConstants(){_classCallCheck(this,HapticFeedbackConstants);};HapticFeedbackConstants.LONG_PRESS=0;HapticFeedbackConstants.VIRTUAL_KEY=1;HapticFeedbackConstants.KEYBOARD_TAP=3;HapticFeedbackConstants.SAFE_MODE_DISABLED=10000;HapticFeedbackConstants.SAFE_MODE_ENABLED=10001;HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING=0x0001;HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING=0x0002;view.HapticFeedbackConstants=HapticFeedbackConstants;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var database;(function(database){var DataSetObserver=function(){function DataSetObserver(){_classCallCheck(this,DataSetObserver);}_createClass(DataSetObserver,[{key:'onChanged',value:function onChanged(){}},{key:'onInvalidated',value:function onInvalidated(){}}]);return DataSetObserver;}();database.DataSetObserver=DataSetObserver;})(database=android.database||(android.database={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var SystemClock=android.os.SystemClock;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Long=java.lang.Long;var AdapterView=function(_ViewGroup3){_inherits(AdapterView,_ViewGroup3);function AdapterView(){var _Object$getPrototypeO11;_classCallCheck(this,AdapterView);for(var _len33=arguments.length,args=Array(_len33),_key34=0;_key34<_len33;_key34++){args[_key34]=arguments[_key34];}var _this93=_possibleConstructorReturn(this,(_Object$getPrototypeO11=Object.getPrototypeOf(AdapterView)).call.apply(_Object$getPrototypeO11,[this].concat(args)));_this93.mFirstPosition=0;_this93.mSpecificTop=0;_this93.mSyncPosition=0;_this93.mSyncRowId=AdapterView.INVALID_ROW_ID;_this93.mSyncHeight=0;_this93.mNeedSync=false;_this93.mSyncMode=0;_this93.mLayoutHeight=0;_this93.mInLayout=false;_this93.mNextSelectedPosition=AdapterView.INVALID_POSITION;_this93.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;_this93.mSelectedPosition=AdapterView.INVALID_POSITION;_this93.mSelectedRowId=AdapterView.INVALID_ROW_ID;_this93.mItemCount=0;_this93.mOldItemCount=0;_this93.mOldSelectedPosition=AdapterView.INVALID_POSITION;_this93.mOldSelectedRowId=AdapterView.INVALID_ROW_ID;_this93.mBlockLayoutRequests=false;return _this93;}_createClass(AdapterView,[{key:'setOnItemClickListener',value:function setOnItemClickListener(listener){this.mOnItemClickListener=listener;}},{key:'getOnItemClickListener',value:function getOnItemClickListener(){return this.mOnItemClickListener;}},{key:'performItemClick',value:function performItemClick(view,position,id){if(this.mOnItemClickListener!=null){this.playSoundEffect(SoundEffectConstants.CLICK);this.mOnItemClickListener.onItemClick(this,view,position,id);return true;}return false;}},{key:'setOnItemLongClickListener',value:function setOnItemLongClickListener(listener){if(!this.isLongClickable()){this.setLongClickable(true);}this.mOnItemLongClickListener=listener;}},{key:'getOnItemLongClickListener',value:function getOnItemLongClickListener(){return this.mOnItemLongClickListener;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(listener){this.mOnItemSelectedListener=listener;}},{key:'getOnItemSelectedListener',value:function getOnItemSelectedListener(){return this.mOnItemSelectedListener;}},{key:'addView',value:function addView(){throw Error('new UnsupportedOperationException("addView() is not supported in AdapterView")');}},{key:'removeView',value:function removeView(child){throw Error('new UnsupportedOperationException("removeView(View) is not supported in AdapterView")');}},{key:'removeViewAt',value:function removeViewAt(index){throw Error('new UnsupportedOperationException("removeViewAt(int) is not supported in AdapterView")');}},{key:'removeAllViews',value:function removeAllViews(){throw Error('new UnsupportedOperationException("removeAllViews() is not supported in AdapterView")');}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){this.mLayoutHeight=this.getHeight();}},{key:'getSelectedItemPosition',value:function getSelectedItemPosition(){return this.mNextSelectedPosition;}},{key:'getSelectedItemId',value:function getSelectedItemId(){return this.mNextSelectedRowId;}},{key:'getSelectedItem',value:function getSelectedItem(){var adapter=this.getAdapter();var selection=this.getSelectedItemPosition();if(adapter!=null&&adapter.getCount()>0&&selection>=0){return adapter.getItem(selection);}else {return null;}}},{key:'getCount',value:function getCount(){return this.mItemCount;}},{key:'getPositionForView',value:function getPositionForView(view){var listItem=view;try{var v=undefined;while(!((v=listItem.getParent())==this)){listItem=v;}}catch(e){return AdapterView.INVALID_POSITION;}var childCount=this.getChildCount();for(var i=0;i=0){var v=this.getSelectedView();this.mOnItemSelectedListener.onItemSelected(this,v,selection,this.getAdapter().getItemId(selection));}else {this.mOnItemSelectedListener.onNothingSelected(this);}}},{key:'performAccessibilityActionsOnSelected',value:function performAccessibilityActionsOnSelected(){}},{key:'isScrollableForAccessibility',value:function isScrollableForAccessibility(){var adapter=this.getAdapter();if(adapter!=null){var itemCount=adapter.getCount();return itemCount>0&&(this.getFirstVisiblePosition()>0||this.getLastVisiblePosition()0;}},{key:'handleDataChanged',value:function handleDataChanged(){var count=this.mItemCount;var found=false;if(count>0){var newPos=undefined;if(this.mNeedSync){this.mNeedSync=false;newPos=this.findSyncPosition();if(newPos>=0){var selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos==newPos){this.setNextSelectedPositionInt(newPos);found=true;}}}if(!found){newPos=this.getSelectedItemPosition();if(newPos>=count){newPos=count-1;}if(newPos<0){newPos=0;}var _selectablePos=this.lookForSelectablePosition(newPos,true);if(_selectablePos<0){_selectablePos=this.lookForSelectablePosition(newPos,false);}if(_selectablePos>=0){this.setNextSelectedPositionInt(_selectablePos);this.checkSelectionChanged();found=true;}}}if(!found){this.mSelectedPosition=AdapterView.INVALID_POSITION;this.mSelectedRowId=AdapterView.INVALID_ROW_ID;this.mNextSelectedPosition=AdapterView.INVALID_POSITION;this.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;this.mNeedSync=false;this.checkSelectionChanged();}}},{key:'checkSelectionChanged',value:function checkSelectionChanged(){if(this.mSelectedPosition!=this.mOldSelectedPosition||this.mSelectedRowId!=this.mOldSelectedRowId){this.selectionChanged();this.mOldSelectedPosition=this.mSelectedPosition;this.mOldSelectedRowId=this.mSelectedRowId;}}},{key:'findSyncPosition',value:function findSyncPosition(){var count=this.mItemCount;if(count==0){return AdapterView.INVALID_POSITION;}var idToMatch=this.mSyncRowId;var seed=this.mSyncPosition;if(idToMatch==AdapterView.INVALID_ROW_ID){return AdapterView.INVALID_POSITION;}seed=Math.max(0,seed);seed=Math.min(count-1,seed);var endTime=SystemClock.uptimeMillis()+AdapterView.SYNC_MAX_DURATION_MILLIS;var rowId=undefined;var first=seed;var last=seed;var next=false;var hitFirst=undefined;var hitLast=undefined;var adapter=this.getAdapter();if(adapter==null){return AdapterView.INVALID_POSITION;}while(SystemClock.uptimeMillis()<=endTime){rowId=adapter.getItemId(seed);if(rowId==idToMatch){return seed;}hitLast=last==count-1;hitFirst=first==0;if(hitLast&&hitFirst){break;}if(hitFirst||next&&!hitLast){last++;seed=last;next=false;}else if(hitLast||!next&&!hitFirst){first--;seed=first;next=true;}}return AdapterView.INVALID_POSITION;}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){return position;}},{key:'setSelectedPositionInt',value:function setSelectedPositionInt(position){this.mSelectedPosition=position;this.mSelectedRowId=this.getItemIdAtPosition(position);}},{key:'setNextSelectedPositionInt',value:function setNextSelectedPositionInt(position){this.mNextSelectedPosition=position;this.mNextSelectedRowId=this.getItemIdAtPosition(position);if(this.mNeedSync&&this.mSyncMode==AdapterView.SYNC_SELECTED_POSITION&&position>=0){this.mSyncPosition=position;this.mSyncRowId=this.mNextSelectedRowId;}}},{key:'rememberSyncState',value:function rememberSyncState(){if(this.getChildCount()>0){this.mNeedSync=true;this.mSyncHeight=this.mLayoutHeight;if(this.mSelectedPosition>=0){var v=this.getChildAt(this.mSelectedPosition-this.mFirstPosition);this.mSyncRowId=this.mNextSelectedRowId;this.mSyncPosition=this.mNextSelectedPosition;if(v!=null){this.mSpecificTop=v.getTop();}this.mSyncMode=AdapterView.SYNC_SELECTED_POSITION;}else {var _v2=this.getChildAt(0);var adapter=this.getAdapter();if(this.mFirstPosition>=0&&this.mFirstPositionlength)j=length;temp=text.substring(i,j);var n=j-i;for(var a=0;a0){boring=false;}}if(boring){var fm=metrics;if(fm==null){fm=new BoringLayout.Metrics();}var line=TextLine.obtain();line.set(paint,text,0,length,Layout.DIR_LEFT_TO_RIGHT,Layout.DIRS_ALL_LEFT_TO_RIGHT,false,null);fm.width=Math.floor(Math.ceil(line.metrics(fm)));TextLine.recycle(line);return fm;}else {return null;}}}]);return BoringLayout;}(Layout);BoringLayout.FIRST_RIGHT_TO_LEFT='֐'.codePointAt(0);BoringLayout.sTemp=new TextPaint();text_8.BoringLayout=BoringLayout;(function(BoringLayout){var Metrics=function(_Paint$FontMetricsInt){_inherits(Metrics,_Paint$FontMetricsInt);function Metrics(){var _Object$getPrototypeO12;_classCallCheck(this,Metrics);for(var _len34=arguments.length,args=Array(_len34),_key35=0;_key35<_len34;_key35++){args[_key35]=arguments[_key35];}var _this96=_possibleConstructorReturn(this,(_Object$getPrototypeO12=Object.getPrototypeOf(Metrics)).call.apply(_Object$getPrototypeO12,[this].concat(args)));_this96.width=0;return _this96;}_createClass(Metrics,[{key:'toString',value:function toString(){return _get2(Object.getPrototypeOf(Metrics.prototype),'toString',this).call(this)+" width="+this.width;}}]);return Metrics;}(Paint.FontMetricsInt);BoringLayout.Metrics=Metrics;})(BoringLayout=text_8.BoringLayout||(text_8.BoringLayout={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var System=java.lang.System;var PackedIntVector=function(){function PackedIntVector(columns){_classCallCheck(this,PackedIntVector);this.mColumns=0;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=0;this.mColumns=columns;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=this.mRows;this.mValues=null;this.mValueGap=androidui.util.ArrayCreator.newNumberArray(2*columns);}_createClass(PackedIntVector,[{key:'getValue',value:function getValue(row,column){var columns=this.mColumns;if((row|column)<0||row>=this.size()||column>=columns){throw Error('new IndexOutOfBoundsException(row + ", " + column)');}if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var value=this.mValues[row*columns+column];var valuegap=this.mValueGap;if(row>=valuegap[column]){value+=valuegap[column+columns];}return value;}},{key:'setValue',value:function setValue(row,column,value){if((row|column)<0||row>=this.size()||column>=this.mColumns){throw Error('new IndexOutOfBoundsException(row + ", " + column)');}if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var valuegap=this.mValueGap;if(row>=valuegap[column]){value-=valuegap[column+this.mColumns];}this.mValues[row*this.mColumns+column]=value;}},{key:'setValueInternal',value:function setValueInternal(row,column,value){if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var valuegap=this.mValueGap;if(row>=valuegap[column]){value-=valuegap[column+this.mColumns];}this.mValues[row*this.mColumns+column]=value;}},{key:'adjustValuesBelow',value:function adjustValuesBelow(startRow,column,delta){if((startRow|column)<0||startRow>this.size()||column>=this.width()){throw Error('new IndexOutOfBoundsException(startRow + ", " + column)');}if(startRow>=this.mRowGapStart){startRow+=this.mRowGapLength;}this.moveValueGapTo(column,startRow);this.mValueGap[column+this.mColumns]+=delta;}},{key:'insertAt',value:function insertAt(row,values){if(row<0||row>this.size()){throw Error('new IndexOutOfBoundsException("row " + row)');}if(values!=null&&values.length=0;i--){this.setValueInternal(row,i,0);}}else {for(var _i26=this.mColumns-1;_i26>=0;_i26--){this.setValueInternal(row,_i26,values[_i26]);}}}},{key:'deleteAt',value:function deleteAt(row,count){if((row|count)<0||row+count>this.size()){throw Error('new IndexOutOfBoundsException(row + ", " + count)');}this.moveRowGapTo(row+count);this.mRowGapStart-=count;this.mRowGapLength+=count;}},{key:'size',value:function size(){return this.mRows-this.mRowGapLength;}},{key:'width',value:function width(){return this.mColumns;}},{key:'growBuffer',value:function growBuffer(){var columns=this.mColumns;var newsize=this.size()+1;newsize=newsize*columns/columns;var newvalues=androidui.util.ArrayCreator.newNumberArray(newsize*columns);var valuegap=this.mValueGap;var rowgapstart=this.mRowGapStart;var after=this.mRows-(rowgapstart+this.mRowGapLength);if(this.mValues!=null){System.arraycopy(this.mValues,0,newvalues,0,columns*rowgapstart);System.arraycopy(this.mValues,(this.mRows-after)*columns,newvalues,(newsize-after)*columns,after*columns);}for(var i=0;i=rowgapstart){valuegap[i]+=newsize-this.mRows;if(valuegap[i]valuegap[column]){for(var i=valuegap[column];ithis.mRowGapStart){var moving=where+this.mRowGapLength-(this.mRowGapStart+this.mRowGapLength);var columns=this.mColumns;var valuegap=this.mValueGap;var values=this.mValues;var gapend=this.mRowGapStart+this.mRowGapLength;for(var i=gapend;i=valuegap[j]){val+=valuegap[j+columns];}if(destrow>=valuegap[j]){val-=valuegap[j+columns];}values[destrow*columns+j]=val;}}}else {var _moving=this.mRowGapStart-where;var _columns=this.mColumns;var _valuegap=this.mValueGap;var _values=this.mValues;var _gapend=this.mRowGapStart+this.mRowGapLength;for(var _i28=where+_moving-1;_i28>=where;_i28--){var _destrow=_i28-where+_gapend-_moving;for(var _j2=0;_j2<_columns;_j2++){var _val=_values[_i28*_columns+_j2];if(_i28>=_valuegap[_j2]){_val+=_valuegap[_j2+_columns];}if(_destrow>=_valuegap[_j2]){_val-=_valuegap[_j2+_columns];}_values[_destrow*_columns+_j2]=_val;}}}this.mRowGapStart=where;}}]);return PackedIntVector;}();text.PackedIntVector=PackedIntVector;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var System=java.lang.System;var PackedObjectVector=function(){function PackedObjectVector(columns){_classCallCheck(this,PackedObjectVector);this.mColumns=0;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=0;this.mColumns=columns;this.mRows=1;this.mRowGapStart=0;this.mRowGapLength=this.mRows;this.mValues=new Array(this.mRows*this.mColumns);}_createClass(PackedObjectVector,[{key:'getValue',value:function getValue(row,column){if(row>=this.mRowGapStart)row+=this.mRowGapLength;var value=this.mValues[row*this.mColumns+column];return value;}},{key:'setValue',value:function setValue(row,column,value){if(row>=this.mRowGapStart)row+=this.mRowGapLength;this.mValues[row*this.mColumns+column]=value;}},{key:'insertAt',value:function insertAt(row,values){this.moveRowGapTo(row);if(this.mRowGapLength==0)this.growBuffer();this.mRowGapStart++;this.mRowGapLength--;if(values==null)for(var i=0;ithis.size()*2){}}},{key:'size',value:function size(){return this.mRows-this.mRowGapLength;}},{key:'width',value:function width(){return this.mColumns;}},{key:'growBuffer',value:function growBuffer(){var newsize=this.size()+1;newsize=newsize*this.mColumns/this.mColumns;var newvalues=new Array(newsize*this.mColumns);var after=this.mRows-(this.mRowGapStart+this.mRowGapLength);System.arraycopy(this.mValues,0,newvalues,0,this.mColumns*this.mRowGapStart);System.arraycopy(this.mValues,(this.mRows-after)*this.mColumns,newvalues,(newsize-after)*this.mColumns,after*this.mColumns);this.mRowGapLength+=newsize-this.mRows;this.mRows=newsize;this.mValues=newvalues;}},{key:'moveRowGapTo',value:function moveRowGapTo(where){if(where==this.mRowGapStart)return;if(where>this.mRowGapStart){var moving=where+this.mRowGapLength-(this.mRowGapStart+this.mRowGapLength);for(var i=this.mRowGapStart+this.mRowGapLength;i=where;_i30--){var _destrow2=_i30-where+this.mRowGapStart+this.mRowGapLength-_moving2;for(var _j3=0;_j3=this.mRowGapStart+this.mRowGapLength)System.out.print(val+" ");else System.out.print("("+val+") ");}System.out.print(" << \n");}System.out.print("-----\n\n");}}]);return PackedObjectVector;}();text.PackedObjectVector=PackedObjectVector;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var Spannable;(function(Spannable){function isImpl(obj){return obj&&obj['setSpan']&&obj['removeSpan'];}Spannable.isImpl=isImpl;var Factory=function(){function Factory(){_classCallCheck(this,Factory);}_createClass(Factory,[{key:'newSpannable',value:function newSpannable(source){return source;}}],[{key:'getInstance',value:function getInstance(){return Factory.sInstance;}}]);return Factory;}();Factory.sInstance=new Factory();Spannable.Factory=Factory;})(Spannable=text.Spannable||(text.Spannable={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_9){var style;(function(style){var LineHeightSpan;(function(LineHeightSpan){LineHeightSpan.type=Symbol();})(LineHeightSpan=style.LineHeightSpan||(style.LineHeightSpan={}));})(style=text_9.style||(text_9.style={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_10){var Paint=android.graphics.Paint;var LeadingMarginSpan=android.text.style.LeadingMarginSpan;var LeadingMarginSpan2=android.text.style.LeadingMarginSpan.LeadingMarginSpan2;var LineHeightSpan=android.text.style.LineHeightSpan;var MetricAffectingSpan=android.text.style.MetricAffectingSpan;var TabStopSpan=android.text.style.TabStopSpan;var Integer=java.lang.Integer;var System=java.lang.System;var Layout=android.text.Layout;var MeasuredText=android.text.MeasuredText;var Spanned=android.text.Spanned;var TextUtils=android.text.TextUtils;var StaticLayout=function(_Layout2){_inherits(StaticLayout,_Layout2);function StaticLayout(source,bufstart,bufend,paint,outerwidth,align,textDir,spacingmult,spacingadd,includepad){var ellipsize=arguments.length<=10||arguments[10]===undefined?null:arguments[10];var ellipsizedWidth=arguments.length<=11||arguments[11]===undefined?0:arguments[11];var maxLines=arguments.length<=12||arguments[12]===undefined?Integer.MAX_VALUE:arguments[12];_classCallCheck(this,StaticLayout);var _this97=_possibleConstructorReturn(this,Object.getPrototypeOf(StaticLayout).call(this,ellipsize==null?source:Spanned.isImplements(source)?new Layout.SpannedEllipsizer(source):new Layout.Ellipsizer(source),paint,outerwidth,align,textDir,spacingmult,spacingadd));_this97.mLineCount=0;_this97.mTopPadding=0;_this97.mBottomPadding=0;_this97.mColumns=0;_this97.mEllipsizedWidth=0;_this97.mMaximumVisibleLineCount=Integer.MAX_VALUE;_this97.mFontMetricsInt=new Paint.FontMetricsInt();if(source==null){_this97.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;_this97.mLines=androidui.util.ArrayCreator.newNumberArray(2*_this97.mColumns);_this97.mLineDirections=new Array(2*_this97.mColumns);_this97.mMeasured=MeasuredText.obtain();return _possibleConstructorReturn(_this97);}if(ellipsize!=null){var e=_this97.getText();e.mLayout=_this97;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this97.mEllipsizedWidth=ellipsizedWidth;_this97.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;}else {_this97.mColumns=StaticLayout.COLUMNS_NORMAL;_this97.mEllipsizedWidth=outerwidth;}_this97.mLines=androidui.util.ArrayCreator.newNumberArray(2*_this97.mColumns);_this97.mLineDirections=new Array(2*_this97.mColumns);_this97.mMaximumVisibleLineCount=maxLines;_this97.mMeasured=MeasuredText.obtain();_this97.generate(source,bufstart,bufend,paint,outerwidth,textDir,spacingmult,spacingadd,includepad,includepad,ellipsizedWidth,ellipsize);_this97.mMeasured=MeasuredText.recycle(_this97.mMeasured);_this97.mFontMetricsInt=null;return _this97;}_createClass(StaticLayout,[{key:'generate',value:function generate(source,bufStart,bufEnd,paint,outerWidth,textDir,spacingmult,spacingadd,includepad,trackpad,ellipsizedWidth,ellipsize){this.mLineCount=0;var v=0;var needMultiply=spacingmult!=1||spacingadd!=0;var fm=this.mFontMetricsInt;var chooseHtv=null;var measured=this.mMeasured;var spanned=null;if(Spanned.isImplements(source))spanned=source;var DEFAULT_DIR=StaticLayout.DIR_LEFT_TO_RIGHT;var paraEnd=undefined;for(var paraStart=bufStart;paraStart<=bufEnd;paraStart=paraEnd){paraEnd=source.substring(0,bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE,paraStart);if(paraEnd<0)paraEnd=bufEnd;else paraEnd++;var firstWidthLineLimit=this.mLineCount+1;var firstWidth=outerWidth;var restWidth=outerWidth;var chooseHt=null;if(spanned!=null){var sp=StaticLayout.getParagraphSpans(spanned,paraStart,paraEnd,LeadingMarginSpan.type);for(var i=0;i0){tabStops=new Layout.TabStops(StaticLayout.TAB_INCREMENT,_spans);}}}if(tabStops!=null){w=tabStops.nextTab(w);}else {w=StaticLayout.TabStops.nextDefaultStop(w,StaticLayout.TAB_INCREMENT);}}else if(c.codePointAt(0)>=StaticLayout.CHAR_FIRST_HIGH_SURROGATE&&c.codePointAt(0)<=StaticLayout.CHAR_LAST_LOW_SURROGATE&&j+1fitDescent)fitDescent=fmDescent;if(fmBottom>fitBottom)fitBottom=fmBottom;var isLineBreak=isSpaceOrTab||(c==StaticLayout.CHAR_SLASH||c==StaticLayout.CHAR_HYPHEN)&&(j+1>=spanEnd||!Number.isInteger(Number.parseInt(chs[j+1-paraStart])))||c.codePointAt(0)>=StaticLayout.CHAR_FIRST_CJK.codePointAt(0)&&StaticLayout.isIdeographic(c,true)&&j+1okDescent)okDescent=fitDescent;if(fitBottom>okBottom)okBottom=fitBottom;}}else {var moreChars=j+1=this.mMaximumVisibleLineCount){break;}}}}if(paraEnd!=here&&this.mLineCount=lines.length){var nlen=want+1;var grow=androidui.util.ArrayCreator.newNumberArray(nlen);System.arraycopy(lines,0,grow,0,lines.length);this.mLines=grow;lines=grow;var grow2=new Array(nlen);System.arraycopy(this.mLineDirections,0,grow2,0,this.mLineDirections.length);this.mLineDirections=grow2;}if(chooseHt!=null){fm.ascent=above;fm.descent=below;fm.top=top;fm.bottom=bottom;for(var i=0;i=0){extra=Math.floor(ex+StaticLayout.EXTRA_ROUNDING);}else {extra=-Math.floor(-ex+StaticLayout.EXTRA_ROUNDING);}}else {extra=0;}lines[off+StaticLayout.START]=start;lines[off+StaticLayout.TOP]=v;lines[off+StaticLayout.DESCENT]=below+extra;v+=below-above+extra;lines[off+this.mColumns+StaticLayout.START]=end;lines[off+this.mColumns+StaticLayout.TOP]=v;if(hasTabOrEmoji)lines[off+StaticLayout.TAB]|=StaticLayout.TAB_MASK;lines[off+StaticLayout.DIR]|=dir<=0;i--){var w=widths[i-1+lineStart-widthStart];if(w+sum+ellipsisWidth>avail){break;}sum+=w;}ellipsisStart=0;ellipsisCount=i;}else {}}else if(where==TextUtils.TruncateAt.END||where==TextUtils.TruncateAt.MARQUEE||where==TextUtils.TruncateAt.END_SMALL){var _sum=0;var _i32=undefined;for(_i32=0;_i32avail){break;}_sum+=_w;}ellipsisStart=_i32;ellipsisCount=len-_i32;if(forceEllipsis&&ellipsisCount==0&&len>0){ellipsisStart=len-1;ellipsisCount=1;}}else {if(this.mMaximumVisibleLineCount==1){var lsum=0,rsum=0;var left=0,right=len;var ravail=(avail-ellipsisWidth)/2;for(right=len;right>=0;right--){var _w2=widths[right-1+lineStart-widthStart];if(_w2+rsum>ravail){break;}rsum+=_w2;}var lavail=avail-ellipsisWidth-rsum;for(left=0;leftlavail){break;}lsum+=_w3;}ellipsisStart=left;ellipsisCount=right-left;}else {}}this.mLines[this.mColumns*line+StaticLayout.ELLIPSIS_START]=ellipsisStart;this.mLines[this.mColumns*line+StaticLayout.ELLIPSIS_COUNT]=ellipsisCount;}},{key:'getLineForVertical',value:function getLineForVertical(vertical){var high=this.mLineCount;var low=-1;var guess=undefined;var lines=this.mLines;while(high-low>1){guess=high+low>>1;if(lines[this.mColumns*guess+StaticLayout.TOP]>vertical){high=guess;}else {low=guess;}}if(low<0){return 0;}else {return low;}}},{key:'getLineCount',value:function getLineCount(){return this.mLineCount;}},{key:'getLineTop',value:function getLineTop(line){var top=this.mLines[this.mColumns*line+StaticLayout.TOP];if(this.mMaximumVisibleLineCount>0&&line>=this.mMaximumVisibleLineCount&&line!=this.mLineCount){top+=this.getBottomPadding();}return top;}},{key:'getLineDescent',value:function getLineDescent(line){var descent=this.mLines[this.mColumns*line+StaticLayout.DESCENT];if(this.mMaximumVisibleLineCount>0&&line>=this.mMaximumVisibleLineCount-1&&line!=this.mLineCount){descent+=this.getBottomPadding();}return descent;}},{key:'getLineStart',value:function getLineStart(line){return this.mLines[this.mColumns*line+StaticLayout.START]&StaticLayout.START_MASK;}},{key:'getParagraphDirection',value:function getParagraphDirection(line){return this.mLines[this.mColumns*line+StaticLayout.DIR]>>StaticLayout.DIR_SHIFT;}},{key:'getLineContainsTab',value:function getLineContainsTab(line){return (this.mLines[this.mColumns*line+StaticLayout.TAB]&StaticLayout.TAB_MASK)!=0;}},{key:'getLineDirections',value:function getLineDirections(line){return this.mLineDirections[line];}},{key:'getTopPadding',value:function getTopPadding(){return this.mTopPadding;}},{key:'getBottomPadding',value:function getBottomPadding(){return this.mBottomPadding;}},{key:'getEllipsisCount',value:function getEllipsisCount(line){if(this.mColumns='⺀'.codePointAt(0)&&code<='⿿'.codePointAt(0)){return true;}if(c==' '){return true;}if(code>='぀'.codePointAt(0)&&code<='ゟ'.codePointAt(0)){if(!includeNonStarters){switch(c){case 'ぁ':case 'ぃ':case 'ぅ':case 'ぇ':case 'ぉ':case 'っ':case 'ゃ':case 'ゅ':case 'ょ':case 'ゎ':case 'ゕ':case 'ゖ':case '゛':case '゜':case 'ゝ':case 'ゞ':return false;}}return true;}if(code>='゠'.codePointAt(0)&&code<='ヿ'.codePointAt(0)){if(!includeNonStarters){switch(c){case '゠':case 'ァ':case 'ィ':case 'ゥ':case 'ェ':case 'ォ':case 'ッ':case 'ャ':case 'ュ':case 'ョ':case 'ヮ':case 'ヵ':case 'ヶ':case '・':case 'ー':case 'ヽ':case 'ヾ':return false;}}return true;}if(code>='㐀'.codePointAt(0)&&code<='䶵'.codePointAt(0)){return true;}if(code>='一'.codePointAt(0)&&code<='龻'.codePointAt(0)){return true;}if(code>='豈'.codePointAt(0)&&code<='龎'.codePointAt(0)){return true;}if(code>='ꀀ'.codePointAt(0)&&code<='꒏'.codePointAt(0)){return true;}if(code>='꒐'.codePointAt(0)&&code<='꓏'.codePointAt(0)){return true;}if(code>='﹢'.codePointAt(0)&&code<='﹦'.codePointAt(0)){return true;}if(code>='0'.codePointAt(0)&&code<='9'.codePointAt(0)){return true;}return false;}}]);return StaticLayout;}(Layout);StaticLayout.TAG="StaticLayout";StaticLayout.COLUMNS_NORMAL=3;StaticLayout.COLUMNS_ELLIPSIZE=5;StaticLayout.START=0;StaticLayout.DIR=StaticLayout.START;StaticLayout.TAB=StaticLayout.START;StaticLayout.TOP=1;StaticLayout.DESCENT=2;StaticLayout.ELLIPSIS_START=3;StaticLayout.ELLIPSIS_COUNT=4;StaticLayout.START_MASK=0x1FFFFFFF;StaticLayout.DIR_SHIFT=30;StaticLayout.TAB_MASK=0x20000000;StaticLayout.CHAR_FIRST_CJK='⺀';StaticLayout.CHAR_NEW_LINE='\n';StaticLayout.CHAR_TAB='\t';StaticLayout.CHAR_SPACE=' ';StaticLayout.CHAR_SLASH='/';StaticLayout.CHAR_HYPHEN='-';StaticLayout.CHAR_ZWSP='​';StaticLayout.EXTRA_ROUNDING=0.5;StaticLayout.CHAR_FIRST_HIGH_SURROGATE=0xD800;StaticLayout.CHAR_LAST_LOW_SURROGATE=0xDFFF;text_10.StaticLayout=StaticLayout;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_11){var Paint=android.graphics.Paint;var System=java.lang.System;var Layout=android.text.Layout;var PackedIntVector=android.text.PackedIntVector;var PackedObjectVector=android.text.PackedObjectVector;var Spanned=android.text.Spanned;var StaticLayout=android.text.StaticLayout;var DynamicLayout=function(_Layout3){_inherits(DynamicLayout,_Layout3);function DynamicLayout(base,display,paint,width,align,textDir,spacingmult,spacingadd,includepad){var ellipsize=arguments.length<=9||arguments[9]===undefined?null:arguments[9];var ellipsizedWidth=arguments.length<=10||arguments[10]===undefined?0:arguments[10];_classCallCheck(this,DynamicLayout);var _this98=_possibleConstructorReturn(this,Object.getPrototypeOf(DynamicLayout).call(this,ellipsize==null?display:Spanned.isImplements(display)?new Layout.SpannedEllipsizer(display):new Layout.Ellipsizer(display),paint,width,align,textDir,spacingmult,spacingadd));_this98.mEllipsizedWidth=0;_this98.mNumberOfBlocks=0;_this98.mIndexFirstChangedBlock=0;_this98.mTopPadding=0;_this98.mBottomPadding=0;_this98.mBase=base;_this98.mDisplay=display;if(ellipsize!=null){_this98.mInts=new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);_this98.mEllipsizedWidth=ellipsizedWidth;_this98.mEllipsizeAt=ellipsize;}else {_this98.mInts=new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);_this98.mEllipsizedWidth=width;_this98.mEllipsizeAt=null;}_this98.mObjects=new PackedObjectVector(1);_this98.mIncludePad=includepad;if(ellipsize!=null){var e=_this98.getText();e.mLayout=_this98;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this98.mEllipsize=true;}var start=undefined;if(ellipsize!=null){start=androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);start[DynamicLayout.ELLIPSIS_START]=DynamicLayout.ELLIPSIS_UNDEFINED;}else {start=androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);}var dirs=[DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT];var fm=new Paint.FontMetricsInt();paint.getFontMetricsInt(fm);var asc=fm.ascent;var desc=fm.descent;start[DynamicLayout.DIR]=DynamicLayout.DIR_LEFT_TO_RIGHT<0)top-=toppad;ints[DynamicLayout.TOP]=top;var desc=reflowed.getLineDescent(i);if(i==n-1)desc+=botpad;ints[DynamicLayout.DESCENT]=desc;objects[0]=reflowed.getLineDirections(i);if(this.mEllipsize){ints[DynamicLayout.ELLIPSIS_START]=reflowed.getEllipsisStart(i);ints[DynamicLayout.ELLIPSIS_COUNT]=reflowed.getEllipsisCount(i);}this.mInts.insertAt(startline+i,ints);this.mObjects.insertAt(startline+i,objects);}this.updateBlocks(startline,endline-1,n);{DynamicLayout.sStaticLayout=reflowed;reflowed.finish();}}},{key:'createBlocks',value:function createBlocks(){var offset=DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;this.mNumberOfBlocks=0;var text=this.mDisplay;while(true){offset=text.indexOf('\n',offset);if(offset<0){this.addBlockAtOffset(text.length);break;}else {this.addBlockAtOffset(offset);offset+=DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;}}this.mBlockIndices=androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length);for(var i=0;ipreviousBlockEndLine){if(this.mNumberOfBlocks==this.mBlockEndLines.length){var blockEndLines=androidui.util.ArrayCreator.newNumberArray(this.mNumberOfBlocks+1);System.arraycopy(this.mBlockEndLines,0,blockEndLines,0,this.mNumberOfBlocks);this.mBlockEndLines=blockEndLines;}this.mBlockEndLines[this.mNumberOfBlocks]=line;this.mNumberOfBlocks++;}}},{key:'updateBlocks',value:function updateBlocks(startLine,endLine,newLineCount){if(this.mBlockEndLines==null){this.createBlocks();return;}var firstBlock=-1;var lastBlock=-1;for(var i=0;i=startLine){firstBlock=i;break;}}for(var _i33=firstBlock;_i33=endLine){lastBlock=_i33;break;}}var lastBlockEndLine=this.mBlockEndLines[lastBlock];var createBlockBefore=startLine>(firstBlock==0?0:this.mBlockEndLines[firstBlock-1]+1);var createBlock=newLineCount>0;var createBlockAfter=endLinethis.mBlockEndLines.length){var newSize=newNumberOfBlocks;var blockEndLines=androidui.util.ArrayCreator.newNumberArray(newSize);var blockIndices=androidui.util.ArrayCreator.newNumberArray(newSize);System.arraycopy(this.mBlockEndLines,0,blockEndLines,0,firstBlock);System.arraycopy(this.mBlockIndices,0,blockIndices,0,firstBlock);System.arraycopy(this.mBlockEndLines,lastBlock+1,blockEndLines,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);System.arraycopy(this.mBlockIndices,lastBlock+1,blockIndices,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);this.mBlockEndLines=blockEndLines;this.mBlockIndices=blockIndices;}else {System.arraycopy(this.mBlockEndLines,lastBlock+1,this.mBlockEndLines,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);System.arraycopy(this.mBlockIndices,lastBlock+1,this.mBlockIndices,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);}this.mNumberOfBlocks=newNumberOfBlocks;var newFirstChangedBlock=undefined;var deltaLines=newLineCount-(endLine-startLine+1);if(deltaLines!=0){newFirstChangedBlock=firstBlock+numAddedBlocks;for(var _i34=newFirstChangedBlock;_i34>DynamicLayout.DIR_SHIFT;}},{key:'getLineDirections',value:function getLineDirections(line){return this.mObjects.getValue(line,0);}},{key:'getTopPadding',value:function getTopPadding(){return this.mTopPadding;}},{key:'getBottomPadding',value:function getBottomPadding(){return this.mBottomPadding;}},{key:'getEllipsizedWidth',value:function getEllipsizedWidth(){return this.mEllipsizedWidth;}},{key:'getEllipsisStart',value:function getEllipsisStart(line){if(this.mEllipsizeAt==null){return 0;}return this.mInts.getValue(line,DynamicLayout.ELLIPSIS_START);}},{key:'getEllipsisCount',value:function getEllipsisCount(line){if(this.mEllipsizeAt==null){return 0;}return this.mInts.getValue(line,DynamicLayout.ELLIPSIS_COUNT);}}]);return DynamicLayout;}(Layout);DynamicLayout.PRIORITY=128;DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH=400;DynamicLayout.INVALID_BLOCK_INDEX=-1;DynamicLayout.sStaticLayout=new StaticLayout(null,0,0,null,0,null,null,1,0,true);DynamicLayout.sLock=new Array(0);DynamicLayout.START=0;DynamicLayout.DIR=DynamicLayout.START;DynamicLayout.TAB=DynamicLayout.START;DynamicLayout.TOP=1;DynamicLayout.DESCENT=2;DynamicLayout.COLUMNS_NORMAL=3;DynamicLayout.ELLIPSIS_START=3;DynamicLayout.ELLIPSIS_COUNT=4;DynamicLayout.COLUMNS_ELLIPSIZE=5;DynamicLayout.START_MASK=0x1FFFFFFF;DynamicLayout.DIR_SHIFT=30;DynamicLayout.TAB_MASK=0x20000000;DynamicLayout.ELLIPSIS_UNDEFINED=0x80000000;text_11.DynamicLayout=DynamicLayout;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var TransformationMethod;(function(TransformationMethod){function isImpl(obj){return obj&&obj['getTransformation']&&obj['onFocusChanged'];}TransformationMethod.isImpl=isImpl;})(TransformationMethod=method.TransformationMethod||(method.TransformationMethod={}));})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var TransformationMethod=android.text.method.TransformationMethod;var TransformationMethod2;(function(TransformationMethod2){function isImpl(obj){return TransformationMethod.isImpl(obj)&&obj['setLengthChangesAllowed'];}TransformationMethod2.isImpl=isImpl;})(TransformationMethod2=method.TransformationMethod2||(method.TransformationMethod2={}));})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var Log=android.util.Log;var AllCapsTransformationMethod=function(){function AllCapsTransformationMethod(context){_classCallCheck(this,AllCapsTransformationMethod);}_createClass(AllCapsTransformationMethod,[{key:'getTransformation',value:function getTransformation(source,view){if(this.mEnabled){return source!=null?source.toLocaleUpperCase():null;}Log.w(AllCapsTransformationMethod.TAG,"Caller did not enable length changes; not transforming text");return source;}},{key:'onFocusChanged',value:function onFocusChanged(view,sourceText,focused,direction,previouslyFocusedRect){}},{key:'setLengthChangesAllowed',value:function setLengthChangesAllowed(allowLengthChanges){this.mEnabled=allowLengthChanges;}}]);return AllCapsTransformationMethod;}();AllCapsTransformationMethod.TAG="AllCapsTransformationMethod";method.AllCapsTransformationMethod=AllCapsTransformationMethod;})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var ReplacementTransformationMethod=function(){function ReplacementTransformationMethod(){_classCallCheck(this,ReplacementTransformationMethod);}_createClass(ReplacementTransformationMethod,[{key:'getTransformation',value:function getTransformation(source,v){var original=this.getOriginal();var replacement=this.getReplacement();var doNothing=true;var n=original.length;for(var i=0;i=0){doNothing=false;break;}}if(doNothing){return source;}return new ReplacementTransformationMethod.ReplacementCharSequence(source,original,replacement).toString();return new ReplacementTransformationMethod.ReplacementCharSequence(source,original,replacement);}},{key:'onFocusChanged',value:function onFocusChanged(view,sourceText,focused,direction,previouslyFocusedRect){}}]);return ReplacementTransformationMethod;}();method.ReplacementTransformationMethod=ReplacementTransformationMethod;(function(ReplacementTransformationMethod){var ReplacementCharSequence=function(_String2){_inherits(ReplacementCharSequence,_String2);function ReplacementCharSequence(source,original,replacement){_classCallCheck(this,ReplacementCharSequence);var _this99=_possibleConstructorReturn(this,Object.getPrototypeOf(ReplacementCharSequence).call(this,source));_this99.mSource=source;_this99.mOriginal=original;_this99.mReplacement=replacement;return _this99;}_createClass(ReplacementCharSequence,[{key:'charAt',value:function charAt(i){var c=this.mSource.charAt(i);var n=this.mOriginal.length;for(var j=0;j=0)v.setHeight(value);},getter:function getter(v){if(v.getMaxHeight()===v.getMinimumHeight())return v.getMaxHeight();return null;}}).set('minLines',{setter:function setter(v,value){v.setMinLines(v._attrBinder.parseInt(value,v.getMinLines()));},getter:function getter(v){return v.getMinLines();}}).set('minHeight',{setter:function setter(v,value){v.setMinHeight(v._attrBinder.parseNumberPixelSize(value,v.getMinHeight()));},getter:function getter(v){return v.getMinHeight();}}).set('maxEms',{setter:function setter(v,value){v.setMaxEms(v._attrBinder.parseInt(value,v.getMaxEms()));},getter:function getter(v){return v.getMaxEms();}}).set('maxWidth',{setter:function setter(v,value){v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value,v.getMaxWidth()));},getter:function getter(v){return v.getMaxWidth();}}).set('ems',{setter:function setter(v,value){var ems=v._attrBinder.parseInt(value,null);if(ems!=null)v.setEms(ems);},getter:function getter(v){if(v.getMinEms()===v.getMaxEms())return v.getMaxEms();return null;}}).set('width',{setter:function setter(v,value){value=v._attrBinder.parseNumberPixelSize(value,-1);if(value>=0)v.setWidth(value);},getter:function getter(v){if(v.getMinWidth()===v.getMaxWidth())return v.getMinWidth();return null;}}).set('minEms',{setter:function setter(v,value){v.setMinEms(v._attrBinder.parseInt(value,v.getMinEms()));},getter:function getter(v){return v.getMinEms();}}).set('minWidth',{setter:function setter(v,value){v.setMinWidth(v._attrBinder.parseNumberPixelSize(value,v.getMinWidth()));},getter:function getter(v){return v.getMinWidth();}}).set('gravity',{setter:function setter(v,value){v.setGravity(v._attrBinder.parseGravity(value,v.mGravity));},getter:function getter(v){return v.mGravity;}}).set('hint',{setter:function setter(v,value){v.setHint(v._attrBinder.parseString(value));},getter:function getter(v){return v.getHint();}}).set('text',{setter:function setter(v,value){v.setText(v._attrBinder.parseString(value));},getter:function getter(v){return v.getText();}}).set('scrollHorizontally',{setter:function setter(v,value){v.setHorizontallyScrolling(v._attrBinder.parseBoolean(value,false));}}).set('singleLine',{setter:function setter(v,value){v.setSingleLine(v._attrBinder.parseBoolean(value,false));}}).set('ellipsize',{setter:function setter(v,value){var ellipsize=TextUtils.TruncateAt[(value+'').toUpperCase()];if(ellipsize)v.setEllipsize(ellipsize);}}).set('marqueeRepeatLimit',{setter:function setter(v,value){var marqueeRepeatLimit=v._attrBinder.parseInt(value,-1);if(marqueeRepeatLimit>=0)v.setMarqueeRepeatLimit(marqueeRepeatLimit);}}).set('includeFontPadding',{setter:function setter(v,value){v.setIncludeFontPadding(v._attrBinder.parseBoolean(value,false));}}).set('enabled',{setter:function setter(v,value){v.setEnabled(v._attrBinder.parseBoolean(value,v.isEnabled()));},getter:function getter(v){return v.isEnabled();}}).set('lineSpacingExtra',{setter:function setter(v,value){v.setLineSpacing(v._attrBinder.parseNumberPixelSize(value,v.mSpacingAdd),v.mSpacingMult);},getter:function getter(v){return v.mSpacingAdd;}}).set('lineSpacingMultiplier',{setter:function setter(v,value){v.setLineSpacing(v.mSpacingAdd,v._attrBinder.parseFloat(value,v.mSpacingMult));},getter:function getter(v){return v.mSpacingMult;}});}this._attrBinder.addClassAttrBind(TextView.TextViewClassAttrBind);}},{key:'setTypefaceFromAttrs',value:function setTypefaceFromAttrs(familyName,typefaceIndex,styleIndex){}},{key:'setRelativeDrawablesIfNeeded',value:function setRelativeDrawablesIfNeeded(start,end){var hasRelativeDrawables=start!=null||end!=null;if(hasRelativeDrawables){var dr=this.mDrawables;if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=true;var compoundRect=dr.mCompoundRect;var state=this.getDrawableState();if(start!=null){start.setBounds(0,0,start.getIntrinsicWidth(),start.getIntrinsicHeight());start.setState(state);start.copyBounds(compoundRect);start.setCallback(this);dr.mDrawableStart=start;dr.mDrawableSizeStart=compoundRect.width();dr.mDrawableHeightStart=compoundRect.height();}else {dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;}if(end!=null){end.setBounds(0,0,end.getIntrinsicWidth(),end.getIntrinsicHeight());end.setState(state);end.copyBounds(compoundRect);end.setCallback(this);dr.mDrawableEnd=end;dr.mDrawableSizeEnd=compoundRect.width();dr.mDrawableHeightEnd=compoundRect.height();}else {dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;}this.resetResolvedDrawables();this.resolveDrawables();}}},{key:'setEnabled',value:function setEnabled(enabled){if(enabled==this.isEnabled()){return;}_get2(Object.getPrototypeOf(TextView.prototype),'setEnabled',this).call(this,enabled);}},{key:'setTypeface',value:function setTypeface(tf,style){}},{key:'getDefaultEditable',value:function getDefaultEditable(){return false;}},{key:'getDefaultMovementMethod',value:function getDefaultMovementMethod(){return null;}},{key:'getText',value:function getText(){return this.mText;}},{key:'length',value:function length(){return this.mText.length;}},{key:'getEditableText',value:function getEditableText(){return null;}},{key:'getLineHeight',value:function getLineHeight(){return Math.round(this.mTextPaint.getFontMetricsInt(null)*this.mSpacingMult+this.mSpacingAdd);}},{key:'getLayout',value:function getLayout(){return this.mLayout;}},{key:'getHintLayout',value:function getHintLayout(){return this.mHintLayout;}},{key:'getUndoManager',value:function getUndoManager(){return null;}},{key:'setUndoManager',value:function setUndoManager(undoManager,tag){}},{key:'getKeyListener',value:function getKeyListener(){return null;}},{key:'setKeyListener',value:function setKeyListener(input){}},{key:'setKeyListenerOnly',value:function setKeyListenerOnly(input){}},{key:'getMovementMethod',value:function getMovementMethod(){return this.mMovement;}},{key:'setMovementMethod',value:function setMovementMethod(movement){if(this.mMovement!=movement){this.mMovement=movement;if(movement!=null&&!Spannable.isImpl(this.mText)){this.setText(this.mText);}this.fixFocusableAndClickableSettings();}}},{key:'fixFocusableAndClickableSettings',value:function fixFocusableAndClickableSettings(){if(this.mMovement!=null){this.setFocusable(true);this.setClickable(true);this.setLongClickable(true);}else {this.setFocusable(false);this.setClickable(false);this.setLongClickable(false);}}},{key:'getTransformationMethod',value:function getTransformationMethod(){return this.mTransformation;}},{key:'setTransformationMethod',value:function setTransformationMethod(method){if(method==this.mTransformation){return;}if(this.mTransformation!=null){if(Spannable.isImpl(this.mText)){this.mText.removeSpan(this.mTransformation);}}this.mTransformation=method;if(TransformationMethod2.isImpl(method)){var method2=method;this.mAllowTransformationLengthChange=!this.isTextSelectable();method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange);}else {this.mAllowTransformationLengthChange=false;}this.setText(this.mText);}},{key:'getCompoundPaddingTop',value:function getCompoundPaddingTop(){var dr=this.mDrawables;if(dr==null||dr.mDrawableTop==null){return this.mPaddingTop;}else {return this.mPaddingTop+dr.mDrawablePadding+dr.mDrawableSizeTop;}}},{key:'getCompoundPaddingBottom',value:function getCompoundPaddingBottom(){var dr=this.mDrawables;if(dr==null||dr.mDrawableBottom==null){return this.mPaddingBottom;}else {return this.mPaddingBottom+dr.mDrawablePadding+dr.mDrawableSizeBottom;}}},{key:'getCompoundPaddingLeft',value:function getCompoundPaddingLeft(){var dr=this.mDrawables;if(dr==null||dr.mDrawableLeft==null){return this.mPaddingLeft;}else {return this.mPaddingLeft+dr.mDrawablePadding+dr.mDrawableSizeLeft;}}},{key:'getCompoundPaddingRight',value:function getCompoundPaddingRight(){var dr=this.mDrawables;if(dr==null||dr.mDrawableRight==null){return this.mPaddingRight;}else {return this.mPaddingRight+dr.mDrawablePadding+dr.mDrawableSizeRight;}}},{key:'getCompoundPaddingStart',value:function getCompoundPaddingStart(){this.resolveDrawables();return this.getCompoundPaddingLeft();}},{key:'getCompoundPaddingEnd',value:function getCompoundPaddingEnd(){this.resolveDrawables();return this.getCompoundPaddingRight();}},{key:'getExtendedPaddingTop',value:function getExtendedPaddingTop(){if(this.mMaxMode!=TextView.LINES){return this.getCompoundPaddingTop();}if(this.mLayout.getLineCount()<=this.mMaximum){return this.getCompoundPaddingTop();}var top=this.getCompoundPaddingTop();var bottom=this.getCompoundPaddingBottom();var viewht=this.getHeight()-top-bottom;var layoutht=this.mLayout.getLineTop(this.mMaximum);if(layoutht>=viewht){return top;}var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;if(gravity==Gravity.TOP){return top;}else if(gravity==Gravity.BOTTOM){return top+viewht-layoutht;}else {return top+(viewht-layoutht)/2;}}},{key:'getExtendedPaddingBottom',value:function getExtendedPaddingBottom(){if(this.mMaxMode!=TextView.LINES){return this.getCompoundPaddingBottom();}if(this.mLayout.getLineCount()<=this.mMaximum){return this.getCompoundPaddingBottom();}var top=this.getCompoundPaddingTop();var bottom=this.getCompoundPaddingBottom();var viewht=this.getHeight()-top-bottom;var layoutht=this.mLayout.getLineTop(this.mMaximum);if(layoutht>=viewht){return bottom;}var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;if(gravity==Gravity.TOP){return bottom+viewht-layoutht;}else if(gravity==Gravity.BOTTOM){return bottom;}else {return bottom+(viewht-layoutht)/2;}}},{key:'getTotalPaddingLeft',value:function getTotalPaddingLeft(){return this.getCompoundPaddingLeft();}},{key:'getTotalPaddingRight',value:function getTotalPaddingRight(){return this.getCompoundPaddingRight();}},{key:'getTotalPaddingStart',value:function getTotalPaddingStart(){return this.getCompoundPaddingStart();}},{key:'getTotalPaddingEnd',value:function getTotalPaddingEnd(){return this.getCompoundPaddingEnd();}},{key:'getTotalPaddingTop',value:function getTotalPaddingTop(){return this.getExtendedPaddingTop()+this.getVerticalOffset(true);}},{key:'getTotalPaddingBottom',value:function getTotalPaddingBottom(){return this.getExtendedPaddingBottom()+this.getBottomVerticalOffset(true);}},{key:'setCompoundDrawables',value:function setCompoundDrawables(left,top,right,bottom){var dr=this.mDrawables;var drawables=left!=null||top!=null||right!=null||bottom!=null;if(!drawables){if(dr!=null){if(dr.mDrawablePadding==0){this.mDrawables=null;}else {if(dr.mDrawableLeft!=null){dr.mDrawableLeft.setCallback(null);}dr.mDrawableLeft=null;if(dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=null;if(dr.mDrawableRight!=null){dr.mDrawableRight.setCallback(null);}dr.mDrawableRight=null;if(dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=null;dr.mDrawableSizeLeft=dr.mDrawableHeightLeft=0;dr.mDrawableSizeRight=dr.mDrawableHeightRight=0;dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}}else {if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=false;if(dr.mDrawableLeft!=left&&dr.mDrawableLeft!=null){dr.mDrawableLeft.setCallback(null);}dr.mDrawableLeft=left;if(dr.mDrawableTop!=top&&dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=top;if(dr.mDrawableRight!=right&&dr.mDrawableRight!=null){dr.mDrawableRight.setCallback(null);}dr.mDrawableRight=right;if(dr.mDrawableBottom!=bottom&&dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=bottom;var compoundRect=dr.mCompoundRect;var state=undefined;state=this.getDrawableState();if(left!=null){left.setState(state);left.copyBounds(compoundRect);left.setCallback(this);dr.mDrawableSizeLeft=compoundRect.width();dr.mDrawableHeightLeft=compoundRect.height();}else {dr.mDrawableSizeLeft=dr.mDrawableHeightLeft=0;}if(right!=null){right.setState(state);right.copyBounds(compoundRect);right.setCallback(this);dr.mDrawableSizeRight=compoundRect.width();dr.mDrawableHeightRight=compoundRect.height();}else {dr.mDrawableSizeRight=dr.mDrawableHeightRight=0;}if(top!=null){top.setState(state);top.copyBounds(compoundRect);top.setCallback(this);dr.mDrawableSizeTop=compoundRect.height();dr.mDrawableWidthTop=compoundRect.width();}else {dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;}if(bottom!=null){bottom.setState(state);bottom.copyBounds(compoundRect);bottom.setCallback(this);dr.mDrawableSizeBottom=compoundRect.height();dr.mDrawableWidthBottom=compoundRect.width();}else {dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}if(dr!=null){dr.mDrawableLeftInitial=left;dr.mDrawableRightInitial=right;}this.resetResolvedDrawables();this.resolveDrawables();this.invalidate();this.requestLayout();}},{key:'setCompoundDrawablesWithIntrinsicBounds',value:function setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom){if(left!=null){left.setBounds(0,0,left.getIntrinsicWidth(),left.getIntrinsicHeight());}if(right!=null){right.setBounds(0,0,right.getIntrinsicWidth(),right.getIntrinsicHeight());}if(top!=null){top.setBounds(0,0,top.getIntrinsicWidth(),top.getIntrinsicHeight());}if(bottom!=null){bottom.setBounds(0,0,bottom.getIntrinsicWidth(),bottom.getIntrinsicHeight());}this.setCompoundDrawables(left,top,right,bottom);}},{key:'setCompoundDrawablesRelative',value:function setCompoundDrawablesRelative(start,top,end,bottom){var dr=this.mDrawables;var drawables=start!=null||top!=null||end!=null||bottom!=null;if(!drawables){if(dr!=null){if(dr.mDrawablePadding==0){this.mDrawables=null;}else {if(dr.mDrawableStart!=null){dr.mDrawableStart.setCallback(null);}dr.mDrawableStart=null;if(dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=null;if(dr.mDrawableEnd!=null){dr.mDrawableEnd.setCallback(null);}dr.mDrawableEnd=null;if(dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=null;dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}}else {if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=true;if(dr.mDrawableStart!=start&&dr.mDrawableStart!=null){dr.mDrawableStart.setCallback(null);}dr.mDrawableStart=start;if(dr.mDrawableTop!=top&&dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=top;if(dr.mDrawableEnd!=end&&dr.mDrawableEnd!=null){dr.mDrawableEnd.setCallback(null);}dr.mDrawableEnd=end;if(dr.mDrawableBottom!=bottom&&dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=bottom;var compoundRect=dr.mCompoundRect;var state=undefined;state=this.getDrawableState();if(start!=null){start.setState(state);start.copyBounds(compoundRect);start.setCallback(this);dr.mDrawableSizeStart=compoundRect.width();dr.mDrawableHeightStart=compoundRect.height();}else {dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;}if(end!=null){end.setState(state);end.copyBounds(compoundRect);end.setCallback(this);dr.mDrawableSizeEnd=compoundRect.width();dr.mDrawableHeightEnd=compoundRect.height();}else {dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;}if(top!=null){top.setState(state);top.copyBounds(compoundRect);top.setCallback(this);dr.mDrawableSizeTop=compoundRect.height();dr.mDrawableWidthTop=compoundRect.width();}else {dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;}if(bottom!=null){bottom.setState(state);bottom.copyBounds(compoundRect);bottom.setCallback(this);dr.mDrawableSizeBottom=compoundRect.height();dr.mDrawableWidthBottom=compoundRect.width();}else {dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}this.resetResolvedDrawables();this.resolveDrawables();this.invalidate();this.requestLayout();}},{key:'setCompoundDrawablesRelativeWithIntrinsicBounds',value:function setCompoundDrawablesRelativeWithIntrinsicBounds(start,top,end,bottom){if(start!=null){start.setBounds(0,0,start.getIntrinsicWidth(),start.getIntrinsicHeight());}if(end!=null){end.setBounds(0,0,end.getIntrinsicWidth(),end.getIntrinsicHeight());}if(top!=null){top.setBounds(0,0,top.getIntrinsicWidth(),top.getIntrinsicHeight());}if(bottom!=null){bottom.setBounds(0,0,bottom.getIntrinsicWidth(),bottom.getIntrinsicHeight());}this.setCompoundDrawablesRelative(start,top,end,bottom);}},{key:'getCompoundDrawables',value:function getCompoundDrawables(){var dr=this.mDrawables;if(dr!=null){return [dr.mDrawableLeft,dr.mDrawableTop,dr.mDrawableRight,dr.mDrawableBottom];}else {return [null,null,null,null];}}},{key:'getCompoundDrawablesRelative',value:function getCompoundDrawablesRelative(){var dr=this.mDrawables;if(dr!=null){return [dr.mDrawableStart,dr.mDrawableTop,dr.mDrawableEnd,dr.mDrawableBottom];}else {return [null,null,null,null];}}},{key:'setCompoundDrawablePadding',value:function setCompoundDrawablePadding(pad){var dr=this.mDrawables;if(pad==0){if(dr!=null){dr.mDrawablePadding=pad;}}else {if(dr==null){this.mDrawables=dr=new TextView.Drawables();}dr.mDrawablePadding=pad;}this.invalidate();this.requestLayout();}},{key:'getCompoundDrawablePadding',value:function getCompoundDrawablePadding(){var dr=this.mDrawables;return dr!=null?dr.mDrawablePadding:0;}},{key:'setPadding',value:function setPadding(left,top,right,bottom){if(left!=this.mPaddingLeft||right!=this.mPaddingRight||top!=this.mPaddingTop||bottom!=this.mPaddingBottom){this.nullLayouts();}_get2(Object.getPrototypeOf(TextView.prototype),'setPadding',this).call(this,left,top,right,bottom);this.invalidate();}},{key:'getAutoLinkMask',value:function getAutoLinkMask(){return this.mAutoLinkMask;}},{key:'getTextLocale',value:function getTextLocale(){return null;}},{key:'setTextLocale',value:function setTextLocale(locale){}},{key:'getTextSize',value:function getTextSize(){return this.mTextPaint.getTextSize();}},{key:'setTextSize',value:function setTextSize(){for(var _len35=arguments.length,args=Array(_len35),_key36=0;_key36<_len35;_key36++){args[_key36]=arguments[_key36];}if(args.length==1){this.setTextSize(TypedValue.COMPLEX_UNIT_SP,args[0]);return;}var unit=args[0];var size=args[1];this.setRawTextSize(TypedValue.applyDimension(unit,size,this.getResources().getDisplayMetrics()));}},{key:'setRawTextSize',value:function setRawTextSize(size){if(size!=this.mTextPaint.getTextSize()){this.mTextPaint.setTextSize(size);if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getTextScaleX',value:function getTextScaleX(){return 1;}},{key:'setTextScaleX',value:function setTextScaleX(size){}},{key:'getTypeface',value:function getTypeface(){return null;}},{key:'setTextColor',value:function setTextColor(colors){if(typeof colors==='number'){colors=ColorStateList.valueOf(colors);}if(colors==null){throw Error('new NullPointerException()');}this.mTextColor=colors;this.updateTextColors();}},{key:'getTextColors',value:function getTextColors(){return this.mTextColor;}},{key:'getCurrentTextColor',value:function getCurrentTextColor(){return this.mCurTextColor;}},{key:'setHighlightColor',value:function setHighlightColor(color){if(this.mHighlightColor!=color){this.mHighlightColor=color;this.invalidate();}}},{key:'getHighlightColor',value:function getHighlightColor(){return this.mHighlightColor;}},{key:'setShowSoftInputOnFocus',value:function setShowSoftInputOnFocus(show){this.createEditorIfNeeded();}},{key:'getShowSoftInputOnFocus',value:function getShowSoftInputOnFocus(){return false;}},{key:'setShadowLayer',value:function setShadowLayer(radius,dx,dy,color){this.mTextPaint.setShadowLayer(radius,dx,dy,color);this.mShadowRadius=radius;this.mShadowDx=dx;this.mShadowDy=dy;this.invalidate();}},{key:'getShadowRadius',value:function getShadowRadius(){return this.mShadowRadius;}},{key:'getShadowDx',value:function getShadowDx(){return this.mShadowDx;}},{key:'getShadowDy',value:function getShadowDy(){return this.mShadowDy;}},{key:'getShadowColor',value:function getShadowColor(){return this.mTextPaint.shadowColor;}},{key:'getPaint',value:function getPaint(){return this.mTextPaint;}},{key:'setAutoLinkMask',value:function setAutoLinkMask(mask){this.mAutoLinkMask=mask;}},{key:'setLinksClickable',value:function setLinksClickable(whether){this.mLinksClickable=whether;}},{key:'getLinksClickable',value:function getLinksClickable(){return this.mLinksClickable;}},{key:'getUrls',value:function getUrls(){return new Array(0);}},{key:'setHintTextColor',value:function setHintTextColor(colors){if(typeof colors==='number'){colors=ColorStateList.valueOf(colors);}this.mHintTextColor=colors;this.updateTextColors();}},{key:'getHintTextColors',value:function getHintTextColors(){return this.mHintTextColor;}},{key:'getCurrentHintTextColor',value:function getCurrentHintTextColor(){return this.mHintTextColor!=null?this.mCurHintTextColor:this.mCurTextColor;}},{key:'setGravity',value:function setGravity(gravity){if((gravity&Gravity.HORIZONTAL_GRAVITY_MASK)==0){gravity|=Gravity.LEFT;}if((gravity&Gravity.VERTICAL_GRAVITY_MASK)==0){gravity|=Gravity.TOP;}var newLayout=false;if((gravity&Gravity.HORIZONTAL_GRAVITY_MASK)!=(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK)){newLayout=true;}if(gravity!=this.mGravity){this.invalidate();}this.mGravity=gravity;if(this.mLayout!=null&&newLayout){var want=this.mLayout.getWidth();var hintWant=this.mHintLayout==null?0:this.mHintLayout.getWidth();this.makeNewLayout(want,hintWant,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),true);}}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'getPaintFlags',value:function getPaintFlags(){return this.mTextPaint.getFlags();}},{key:'setPaintFlags',value:function setPaintFlags(flags){if(this.mTextPaint.getFlags()!=flags){this.mTextPaint.setFlags(flags);if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'setHorizontallyScrolling',value:function setHorizontallyScrolling(whether){if(this.mHorizontallyScrolling!=whether){this.mHorizontallyScrolling=whether;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getHorizontallyScrolling',value:function getHorizontallyScrolling(){return this.mHorizontallyScrolling;}},{key:'setMinLines',value:function setMinLines(minlines){this.mMinimum=minlines;this.mMinMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'getMinLines',value:function getMinLines(){return this.mMinMode==TextView.LINES?this.mMinimum:-1;}},{key:'setMinHeight',value:function setMinHeight(minHeight){this.mMinimum=minHeight;this.mMinMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMinHeight',value:function getMinHeight(){return this.mMinMode==TextView.PIXELS?this.mMinimum:-1;}},{key:'setMaxLines',value:function setMaxLines(maxlines){this.mMaximum=maxlines;this.mMaxMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'getMaxLines',value:function getMaxLines(){return this.mMaxMode==TextView.LINES?this.mMaximum:-1;}},{key:'setMaxHeight',value:function setMaxHeight(maxHeight){this.mMaximum=maxHeight;this.mMaxMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMaxHeight',value:function getMaxHeight(){return this.mMaxMode==TextView.PIXELS?this.mMaximum:-1;}},{key:'setLines',value:function setLines(lines){this.mMaximum=this.mMinimum=lines;this.mMaxMode=this.mMinMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'setHeight',value:function setHeight(pixels){this.mMaximum=this.mMinimum=pixels;this.mMaxMode=this.mMinMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'setMinEms',value:function setMinEms(minems){this.mMinWidthValue=minems;this.mMinWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'getMinEms',value:function getMinEms(){return this.mMinWidthMode==TextView.EMS?this.mMinWidthValue:-1;}},{key:'setMinWidth',value:function setMinWidth(minpixels){this.mMinWidthValue=minpixels;this.mMinWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMinWidth',value:function getMinWidth(){return this.mMinWidthMode==TextView.PIXELS?this.mMinWidthValue:-1;}},{key:'setMaxEms',value:function setMaxEms(maxems){this.mMaxWidthValue=maxems;this.mMaxWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'getMaxEms',value:function getMaxEms(){return this.mMaxWidthMode==TextView.EMS?this.mMaxWidthValue:-1;}},{key:'setMaxWidth',value:function setMaxWidth(maxpixels){this.mMaxWidthValue=maxpixels;this.mMaxWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMaxWidth',value:function getMaxWidth(){return this.mMaxWidthMode==TextView.PIXELS?this.mMaxWidthValue:-1;}},{key:'setEms',value:function setEms(ems){this.mMaxWidthValue=this.mMinWidthValue=ems;this.mMaxWidthMode=this.mMinWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'setWidth',value:function setWidth(pixels){this.mMaxWidthValue=this.mMinWidthValue=pixels;this.mMaxWidthMode=this.mMinWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'setLineSpacing',value:function setLineSpacing(add,mult){if(this.mSpacingAdd!=add||this.mSpacingMult!=mult){this.mSpacingAdd=add;this.mSpacingMult=mult;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getLineSpacingMultiplier',value:function getLineSpacingMultiplier(){return this.mSpacingMult;}},{key:'getLineSpacingExtra',value:function getLineSpacingExtra(){return this.mSpacingAdd;}},{key:'updateTextColors',value:function updateTextColors(){var inval=false;var color=this.mTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mCurTextColor){this.mCurTextColor=color;inval=true;}if(this.mLinkTextColor!=null){color=this.mLinkTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mTextPaint.linkColor){this.mTextPaint.linkColor=color;inval=true;}}if(this.mHintTextColor!=null){color=this.mHintTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mCurHintTextColor&&this.mText.length==0){this.mCurHintTextColor=color;inval=true;}}if(inval){this.invalidate();}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(TextView.prototype),'drawableStateChanged',this).call(this);if(this.mTextColor!=null&&this.mTextColor.isStateful()||this.mHintTextColor!=null&&this.mHintTextColor.isStateful()||this.mLinkTextColor!=null&&this.mLinkTextColor.isStateful()){this.updateTextColors();}var dr=this.mDrawables;if(dr!=null){var state=this.getDrawableState();if(dr.mDrawableTop!=null&&dr.mDrawableTop.isStateful()){dr.mDrawableTop.setState(state);}if(dr.mDrawableBottom!=null&&dr.mDrawableBottom.isStateful()){dr.mDrawableBottom.setState(state);}if(dr.mDrawableLeft!=null&&dr.mDrawableLeft.isStateful()){dr.mDrawableLeft.setState(state);}if(dr.mDrawableRight!=null&&dr.mDrawableRight.isStateful()){dr.mDrawableRight.setState(state);}if(dr.mDrawableStart!=null&&dr.mDrawableStart.isStateful()){dr.mDrawableStart.setState(state);}if(dr.mDrawableEnd!=null&&dr.mDrawableEnd.isStateful()){dr.mDrawableEnd.setState(state);}}}},{key:'removeMisspelledSpans',value:function removeMisspelledSpans(spannable){}},{key:'setFreezesText',value:function setFreezesText(freezesText){this.mFreezesText=freezesText;}},{key:'getFreezesText',value:function getFreezesText(){return this.mFreezesText;}},{key:'setSpannableFactory',value:function setSpannableFactory(factory){this.mSpannableFactory=factory;this.setText(this.mText);}},{key:'setText',value:function setText(text){var type=arguments.length<=1||arguments[1]===undefined?this.mBufferType:arguments[1];var notifyBefore=arguments.length<=2||arguments[2]===undefined?true:arguments[2];var oldlen=arguments.length<=3||arguments[3]===undefined?0:arguments[3];if(text==null){text="";}if(!this.isSuggestionsEnabled()){text=this.removeSuggestionSpans(text);}if(Spanned.isImplements(text)&&text.getSpanStart(TextUtils.TruncateAt.MARQUEE)>=0){this.setHorizontalFadingEdgeEnabled(true);this.mMarqueeFadeMode=TextView.MARQUEE_FADE_NORMAL;this.setEllipsize(TextUtils.TruncateAt.MARQUEE);}if(notifyBefore){if(this.mText!=null){oldlen=this.mText.length;this.sendBeforeTextChanged(this.mText,0,oldlen,text.length);}else {this.sendBeforeTextChanged("",0,0,text.length);}}var needEditableForNotification=false;if(this.mListeners!=null&&this.mListeners.size()!=0){needEditableForNotification=true;}if(type==TextView.BufferType.SPANNABLE||this.mMovement!=null){text=this.mSpannableFactory.newSpannable(text);}this.mBufferType=type;this.mText=text;if(this.mTransformation==null){this.mTransformed=text;}else {this.mTransformed=this.mTransformation.getTransformation(text,this);}var textLength=text.length;if(this.mLayout!=null){this.checkForRelayout();}this.sendOnTextChanged(text,0,oldlen,textLength);this.onTextChanged(text,0,oldlen,textLength);}},{key:'setHint',value:function setHint(hint){this.mHint=hint;if(this.mLayout!=null){this.checkForRelayout();}if(this.mText.length==0){this.invalidate();}}},{key:'getHint',value:function getHint(){return this.mHint;}},{key:'isSingleLine',value:function isSingleLine(){return this.mSingleLine;}},{key:'removeSuggestionSpans',value:function removeSuggestionSpans(text){return text;}},{key:'hasPasswordTransformationMethod',value:function hasPasswordTransformationMethod(){return false;}},{key:'setRawInputType',value:function setRawInputType(type){}},{key:'setInputType',value:function setInputType(type){var direct=arguments.length<=1||arguments[1]===undefined?false:arguments[1];}},{key:'getInputType',value:function getInputType(){return 0;}},{key:'setImeOptions',value:function setImeOptions(imeOptions){}},{key:'getImeOptions',value:function getImeOptions(){return -1;}},{key:'setImeActionLabel',value:function setImeActionLabel(label,actionId){this.createEditorIfNeeded();}},{key:'getImeActionLabel',value:function getImeActionLabel(){return '';}},{key:'getImeActionId',value:function getImeActionId(){return 0;}},{key:'setOnEditorActionListener',value:function setOnEditorActionListener(l){this.createEditorIfNeeded();}},{key:'setFrame',value:function setFrame(l,t,r,b){var result=_get2(Object.getPrototypeOf(TextView.prototype),'setFrame',this).call(this,l,t,r,b);this.restartMarqueeIfNeeded();return result;}},{key:'restartMarqueeIfNeeded',value:function restartMarqueeIfNeeded(){if(this.mRestartMarquee&&this.mEllipsize==TextUtils.TruncateAt.MARQUEE){this.mRestartMarquee=false;this.startMarquee();}}},{key:'setFilters',value:function setFilters(){}},{key:'getFilters',value:function getFilters(){return this.mFilters;}},{key:'getBoxHeight',value:function getBoxHeight(l){var padding=l==this.mHintLayout?this.getCompoundPaddingTop()+this.getCompoundPaddingBottom():this.getExtendedPaddingTop()+this.getExtendedPaddingBottom();return this.getMeasuredHeight()-padding;}},{key:'getVerticalOffset',value:function getVerticalOffset(forceNormal){var voffset=0;var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;var l=this.mLayout;if(!forceNormal&&this.mText.length==0&&this.mHintLayout!=null){l=this.mHintLayout;}if(gravity!=Gravity.TOP){var boxht=this.getBoxHeight(l);var textht=l.getHeight();if(textht>1;}}return voffset;}},{key:'getBottomVerticalOffset',value:function getBottomVerticalOffset(forceNormal){var voffset=0;var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;var l=this.mLayout;if(!forceNormal&&this.mText.length==0&&this.mHintLayout!=null){l=this.mHintLayout;}if(gravity!=Gravity.BOTTOM){var boxht=this.getBoxHeight(l);var textht=l.getHeight();if(textht>1;}}return voffset;}},{key:'invalidateRegion',value:function invalidateRegion(start,end,invalidateCursor){if(this.mLayout==null){this.invalidate();}else {var lineStart=this.mLayout.getLineForOffset(start);var top=this.mLayout.getLineTop(lineStart);if(lineStart>0){top-=this.mLayout.getLineDescent(lineStart-1);}var lineEnd=undefined;if(start==end)lineEnd=lineStart;else lineEnd=this.mLayout.getLineForOffset(end);var bottom=this.mLayout.getLineBottom(lineEnd);var compoundPaddingLeft=this.getCompoundPaddingLeft();var verticalPadding=this.getExtendedPaddingTop()+this.getVerticalOffset(true);var left=undefined,right=undefined;if(lineStart==lineEnd&&!invalidateCursor){left=Math.floor(this.mLayout.getPrimaryHorizontal(start));right=Math.floor(this.mLayout.getPrimaryHorizontal(end)+1.0);left+=compoundPaddingLeft;right+=compoundPaddingLeft;}else {left=compoundPaddingLeft;right=this.getWidth()-this.getCompoundPaddingRight();}this.invalidate(this.mScrollX+left,verticalPadding+top,this.mScrollX+right,verticalPadding+bottom);}}},{key:'registerForPreDraw',value:function registerForPreDraw(){if(!this.mPreDrawRegistered){this.getViewTreeObserver().addOnPreDrawListener(this);this.mPreDrawRegistered=true;}}},{key:'onPreDraw',value:function onPreDraw(){if(this.mLayout==null){this.assumeLayout();}if(this.mMovement!=null){var curs=this.getSelectionEnd();if(curs<0&&(this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){curs=this.mText.length;}if(curs>=0){this.bringPointIntoView(curs);}}else {this.bringTextIntoView();}this.getViewTreeObserver().removeOnPreDrawListener(this);this.mPreDrawRegistered=false;return true;}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(Object.getPrototypeOf(TextView.prototype),'onAttachedToWindow',this).call(this);this.mTemporaryDetach=false;}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(TextView.prototype),'onDetachedFromWindow',this).call(this);if(this.mPreDrawRegistered){this.getViewTreeObserver().removeOnPreDrawListener(this);this.mPreDrawRegistered=false;}this.resetResolvedDrawables();}},{key:'isPaddingOffsetRequired',value:function isPaddingOffsetRequired(){return this.mShadowRadius!=0||this.mDrawables!=null;}},{key:'getLeftPaddingOffset',value:function getLeftPaddingOffset(){return this.getCompoundPaddingLeft()-this.mPaddingLeft+Math.floor(Math.min(0,this.mShadowDx-this.mShadowRadius));}},{key:'getTopPaddingOffset',value:function getTopPaddingOffset(){return Math.floor(Math.min(0,this.mShadowDy-this.mShadowRadius));}},{key:'getBottomPaddingOffset',value:function getBottomPaddingOffset(){return Math.floor(Math.max(0,this.mShadowDy+this.mShadowRadius));}},{key:'getRightPaddingOffset',value:function getRightPaddingOffset(){return -(this.getCompoundPaddingRight()-this.mPaddingRight)+Math.floor(Math.max(0,this.mShadowDx+this.mShadowRadius));}},{key:'verifyDrawable',value:function verifyDrawable(who){var verified=_get2(Object.getPrototypeOf(TextView.prototype),'verifyDrawable',this).call(this,who);if(!verified&&this.mDrawables!=null){return who==this.mDrawables.mDrawableLeft||who==this.mDrawables.mDrawableTop||who==this.mDrawables.mDrawableRight||who==this.mDrawables.mDrawableBottom||who==this.mDrawables.mDrawableStart||who==this.mDrawables.mDrawableEnd;}return verified;}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(Object.getPrototypeOf(TextView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mDrawables!=null){if(this.mDrawables.mDrawableLeft!=null){this.mDrawables.mDrawableLeft.jumpToCurrentState();}if(this.mDrawables.mDrawableTop!=null){this.mDrawables.mDrawableTop.jumpToCurrentState();}if(this.mDrawables.mDrawableRight!=null){this.mDrawables.mDrawableRight.jumpToCurrentState();}if(this.mDrawables.mDrawableBottom!=null){this.mDrawables.mDrawableBottom.jumpToCurrentState();}if(this.mDrawables.mDrawableStart!=null){this.mDrawables.mDrawableStart.jumpToCurrentState();}if(this.mDrawables.mDrawableEnd!=null){this.mDrawables.mDrawableEnd.jumpToCurrentState();}}}},{key:'drawableSizeChange',value:function drawableSizeChange(d){var drawables=this.mDrawables;var isCompoundDrawable=drawables!=null&&(d==drawables.mDrawableLeft||d==drawables.mDrawableTop||d==drawables.mDrawableRight||d==drawables.mDrawableBottom||d==drawables.mDrawableStart||d==drawables.mDrawableEnd);if(isCompoundDrawable){d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());this.setCompoundDrawables(drawables.mDrawableLeft,drawables.mDrawableTop,drawables.mDrawableRight,drawables.mDrawableBottom);}else {_get2(Object.getPrototypeOf(TextView.prototype),'drawableSizeChange',this).call(this,d);}}},{key:'invalidateDrawable',value:function invalidateDrawable(drawable){if(this.verifyDrawable(drawable)){var dirty=drawable.getBounds();var scrollX=this.mScrollX;var scrollY=this.mScrollY;var drawables=this.mDrawables;if(drawables!=null){if(drawable==drawables.mDrawableLeft){var compoundPaddingTop=this.getCompoundPaddingTop();var compoundPaddingBottom=this.getCompoundPaddingBottom();var vspace=this.mBottom-this.mTop-compoundPaddingBottom-compoundPaddingTop;scrollX+=this.mPaddingLeft;scrollY+=compoundPaddingTop+(vspace-drawables.mDrawableHeightLeft)/2;}else if(drawable==drawables.mDrawableRight){var _compoundPaddingTop=this.getCompoundPaddingTop();var _compoundPaddingBottom=this.getCompoundPaddingBottom();var _vspace=this.mBottom-this.mTop-_compoundPaddingBottom-_compoundPaddingTop;scrollX+=this.mRight-this.mLeft-this.mPaddingRight-drawables.mDrawableSizeRight;scrollY+=_compoundPaddingTop+(_vspace-drawables.mDrawableHeightRight)/2;}else if(drawable==drawables.mDrawableTop){var compoundPaddingLeft=this.getCompoundPaddingLeft();var compoundPaddingRight=this.getCompoundPaddingRight();var hspace=this.mRight-this.mLeft-compoundPaddingRight-compoundPaddingLeft;scrollX+=compoundPaddingLeft+(hspace-drawables.mDrawableWidthTop)/2;scrollY+=this.mPaddingTop;}else if(drawable==drawables.mDrawableBottom){var _compoundPaddingLeft=this.getCompoundPaddingLeft();var _compoundPaddingRight=this.getCompoundPaddingRight();var _hspace=this.mRight-this.mLeft-_compoundPaddingRight-_compoundPaddingLeft;scrollX+=_compoundPaddingLeft+(_hspace-drawables.mDrawableWidthBottom)/2;scrollY+=this.mBottom-this.mTop-this.mPaddingBottom-drawables.mDrawableSizeBottom;}}this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}}},{key:'isTextSelectable',value:function isTextSelectable(){return false;}},{key:'setTextIsSelectable',value:function setTextIsSelectable(selectable){}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){var drawableState=undefined;if(this.mSingleLine){drawableState=_get2(Object.getPrototypeOf(TextView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}else {drawableState=_get2(Object.getPrototypeOf(TextView.prototype),'onCreateDrawableState',this).call(this,extraSpace+1);TextView.mergeDrawableStates(drawableState,TextView.MULTILINE_STATE_SET);}if(this.isTextSelectable()){var length=drawableState.length;for(var i=0;i=0){if(selStart==selEnd){}else {if(this.mHighlightPathBogus){if(this.mHighlightPath==null)this.mHighlightPath=new Path();this.mHighlightPath.reset();this.mLayout.getSelectionPath(selStart,selEnd,this.mHighlightPath);this.mHighlightPathBogus=false;}highlightPaint.setColor(this.mHighlightColor);highlightPaint.setStyle(Paint.Style.FILL);highlight=this.mHighlightPath;}}return highlight;}},{key:'getHorizontalOffsetForDrawables',value:function getHorizontalOffsetForDrawables(){return 0;}},{key:'onDraw',value:function onDraw(canvas){this.restartMarqueeIfNeeded();_get2(Object.getPrototypeOf(TextView.prototype),'onDraw',this).call(this,canvas);var compoundPaddingLeft=this.getCompoundPaddingLeft();var compoundPaddingTop=this.getCompoundPaddingTop();var compoundPaddingRight=this.getCompoundPaddingRight();var compoundPaddingBottom=this.getCompoundPaddingBottom();var scrollX=this.mScrollX;var scrollY=this.mScrollY;var right=this.mRight;var left=this.mLeft;var bottom=this.mBottom;var top=this.mTop;var isLayoutRtl=this.isLayoutRtl();var offset=this.getHorizontalOffsetForDrawables();var leftOffset=isLayoutRtl?0:offset;var rightOffset=isLayoutRtl?offset:0;var dr=this.mDrawables;if(dr!=null){var _vspace2=bottom-top-compoundPaddingBottom-compoundPaddingTop;var hspace=right-left-compoundPaddingRight-compoundPaddingLeft;if(dr.mDrawableLeft!=null){canvas.save();canvas.translate(scrollX+this.mPaddingLeft+leftOffset,scrollY+compoundPaddingTop+(_vspace2-dr.mDrawableHeightLeft)/2);dr.mDrawableLeft.draw(canvas);canvas.restore();}if(dr.mDrawableRight!=null){canvas.save();canvas.translate(scrollX+right-left-this.mPaddingRight-dr.mDrawableSizeRight-rightOffset,scrollY+compoundPaddingTop+(_vspace2-dr.mDrawableHeightRight)/2);dr.mDrawableRight.draw(canvas);canvas.restore();}if(dr.mDrawableTop!=null){canvas.save();canvas.translate(scrollX+compoundPaddingLeft+(hspace-dr.mDrawableWidthTop)/2,scrollY+this.mPaddingTop);dr.mDrawableTop.draw(canvas);canvas.restore();}if(dr.mDrawableBottom!=null){canvas.save();canvas.translate(scrollX+compoundPaddingLeft+(hspace-dr.mDrawableWidthBottom)/2,scrollY+bottom-top-this.mPaddingBottom-dr.mDrawableSizeBottom);dr.mDrawableBottom.draw(canvas);canvas.restore();}}var color=this.mCurTextColor;if(this.mLayout==null){this.assumeLayout();}var layout=this.mLayout;if(this.mHint!=null&&this.mText.length==0){if(this.mHintTextColor!=null){color=this.mCurHintTextColor;}layout=this.mHintLayout;}this.mTextPaint.setColor(color);this.mTextPaint.drawableState=this.getDrawableState();if(this.mSkipDrawText)return;canvas.save();var extendedPaddingTop=this.getExtendedPaddingTop();var extendedPaddingBottom=this.getExtendedPaddingBottom();var vspace=this.mBottom-this.mTop-compoundPaddingBottom-compoundPaddingTop;var maxScrollY=this.mLayout.getHeight()-vspace;var clipLeft=compoundPaddingLeft+scrollX;var clipTop=scrollY==0?0:extendedPaddingTop+scrollY;var clipRight=right-left-compoundPaddingRight+scrollX;var clipBottom=bottom-top+scrollY-(scrollY==maxScrollY?0:extendedPaddingBottom);if(this.mShadowRadius!=0){clipLeft+=Math.min(0,this.mShadowDx-this.mShadowRadius);clipRight+=Math.max(0,this.mShadowDx+this.mShadowRadius);clipTop+=Math.min(0,this.mShadowDy-this.mShadowRadius);clipBottom+=Math.max(0,this.mShadowDy+this.mShadowRadius);}canvas.clipRect(clipLeft,clipTop,clipRight,clipBottom);var voffsetText=0;var voffsetCursor=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffsetText=this.getVerticalOffset(false);voffsetCursor=this.getVerticalOffset(true);}canvas.translate(compoundPaddingLeft,extendedPaddingTop+voffsetText);var absoluteGravity=this.mGravity;if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(!this.mSingleLine&&this.getLineCount()==1&&this.canMarquee()&&(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK)!=Gravity.LEFT){var width=this.mRight-this.mLeft;var padding=this.getCompoundPaddingLeft()+this.getCompoundPaddingRight();var dx=this.mLayout.getLineRight(0)-(width-padding);canvas.translate(isLayoutRtl?-dx:+dx,0.0);}if(this.mMarquee!=null&&this.mMarquee.isRunning()){var _dx=-this.mMarquee.getScroll();canvas.translate(isLayoutRtl?-_dx:+_dx,0.0);}}var cursorOffsetVertical=voffsetCursor-voffsetText;var highlight=this.getUpdatedHighlightPath();layout.draw(canvas,highlight,this.mHighlightPaint,cursorOffsetVertical);if(this.mMarquee!=null&&this.mMarquee.shouldDrawGhost()){var _dx2=Math.floor(this.mMarquee.getGhostOffset());canvas.translate(isLayoutRtl?-_dx2:_dx2,0.0);layout.draw(canvas,highlight,this.mHighlightPaint,cursorOffsetVertical);}canvas.restore();}},{key:'getFocusedRect',value:function getFocusedRect(r){if(this.mLayout==null){_get2(Object.getPrototypeOf(TextView.prototype),'getFocusedRect',this).call(this,r);return;}var selEnd=this.getSelectionEnd();if(selEnd<0){_get2(Object.getPrototypeOf(TextView.prototype),'getFocusedRect',this).call(this,r);return;}}},{key:'getLineCount',value:function getLineCount(){return this.mLayout!=null?this.mLayout.getLineCount():0;}},{key:'getLineBounds',value:function getLineBounds(line,bounds){if(this.mLayout==null){if(bounds!=null){bounds.set(0,0,0,0);}return 0;}else {var baseline=this.mLayout.getLineBounds(line,bounds);var voffset=this.getExtendedPaddingTop();if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset+=this.getVerticalOffset(true);}if(bounds!=null){bounds.offset(this.getCompoundPaddingLeft(),voffset);}return baseline+voffset;}}},{key:'getBaseline',value:function getBaseline(){if(this.mLayout==null){return _get2(Object.getPrototypeOf(TextView.prototype),'getBaseline',this).call(this);}var voffset=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset=this.getVerticalOffset(true);}return this.getExtendedPaddingTop()+voffset+this.mLayout.getLineBaseline(0);}},{key:'getFadeTop',value:function getFadeTop(offsetRequired){if(this.mLayout==null)return 0;var voffset=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset=this.getVerticalOffset(true);}if(offsetRequired)voffset+=this.getTopPaddingOffset();return this.getExtendedPaddingTop()+voffset;}},{key:'getFadeHeight',value:function getFadeHeight(offsetRequired){return this.mLayout!=null?this.mLayout.getHeight():0;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var which=this.doKeyDown(keyCode,event,null);if(which==0){return _get2(Object.getPrototypeOf(TextView.prototype),'onKeyDown',this).call(this,keyCode,event);}return true;}},{key:'shouldAdvanceFocusOnEnter',value:function shouldAdvanceFocusOnEnter(){if(this.getKeyListener()==null){return false;}if(this.mSingleLine){return true;}return false;}},{key:'shouldAdvanceFocusOnTab',value:function shouldAdvanceFocusOnTab(){return true;}},{key:'doKeyDown',value:function doKeyDown(keyCode,event,otherEvent){return 0;}},{key:'resetErrorChangedFlag',value:function resetErrorChangedFlag(){}},{key:'hideErrorIfUnchanged',value:function hideErrorIfUnchanged(){}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return _get2(Object.getPrototypeOf(TextView.prototype),'onKeyUp',this).call(this,keyCode,event);}},{key:'onCheckIsTextEditor',value:function onCheckIsTextEditor(){return false;}},{key:'nullLayouts',value:function nullLayouts(){if(this.mLayout instanceof BoringLayout&&this.mSavedLayout==null){this.mSavedLayout=this.mLayout;}if(this.mHintLayout instanceof BoringLayout&&this.mSavedHintLayout==null){this.mSavedHintLayout=this.mHintLayout;}this.mSavedMarqueeModeLayout=this.mLayout=this.mHintLayout=null;this.mBoring=this.mHintBoring=null;}},{key:'assumeLayout',value:function assumeLayout(){var width=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();if(width<1){width=0;}var physicalWidth=width;if(this.mHorizontallyScrolling){width=TextView.VERY_WIDE;}this.makeNewLayout(width,physicalWidth,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,physicalWidth,false);}},{key:'getLayoutAlignment',value:function getLayoutAlignment(){var alignment=undefined;switch(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:alignment=Layout.Alignment.ALIGN_LEFT;break;case Gravity.RIGHT:alignment=Layout.Alignment.ALIGN_RIGHT;break;case Gravity.CENTER_HORIZONTAL:alignment=Layout.Alignment.ALIGN_CENTER;break;default:alignment=Layout.Alignment.ALIGN_NORMAL;break;}return alignment;}},{key:'makeNewLayout',value:function makeNewLayout(wantWidth,hintWidth,boring,hintBoring,ellipsisWidth,bringIntoView){this.stopMarquee();this.mOldMaximum=this.mMaximum;this.mOldMaxMode=this.mMaxMode;this.mHighlightPathBogus=true;if(wantWidth<0){wantWidth=0;}if(hintWidth<0){hintWidth=0;}var alignment=this.getLayoutAlignment();var testDirChange=this.mSingleLine&&this.mLayout!=null&&(alignment==Layout.Alignment.ALIGN_NORMAL||alignment==Layout.Alignment.ALIGN_OPPOSITE);var oldDir=0;if(testDirChange)oldDir=this.mLayout.getParagraphDirection(0);var shouldEllipsize=this.mEllipsize!=null&&this.getKeyListener()==null;var switchEllipsize=this.mEllipsize==TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_NORMAL;var effectiveEllipsize=this.mEllipsize;if(this.mEllipsize==TruncateAt.MARQUEE&&this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){effectiveEllipsize=TruncateAt.END_SMALL;}if(this.mTextDir==null){this.mTextDir=this.getTextDirectionHeuristic();}this.mLayout=this.makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,effectiveEllipsize,effectiveEllipsize==this.mEllipsize);if(switchEllipsize){var oppositeEllipsize=effectiveEllipsize==TruncateAt.MARQUEE?TruncateAt.END:TruncateAt.MARQUEE;this.mSavedMarqueeModeLayout=this.makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,oppositeEllipsize,effectiveEllipsize!=this.mEllipsize);}shouldEllipsize=this.mEllipsize!=null;this.mHintLayout=null;if(this.mHint!=null){if(shouldEllipsize)hintWidth=wantWidth;if(hintBoring==TextView.UNKNOWN_BORING){hintBoring=BoringLayout.isBoring(this.mHint,this.mTextPaint,this.mTextDir,this.mHintBoring);if(hintBoring!=null){this.mHintBoring=hintBoring;}}if(hintBoring!=null){if(hintBoring.width<=hintWidth&&(!shouldEllipsize||hintBoring.width<=ellipsisWidth)){if(this.mSavedHintLayout!=null){this.mHintLayout=this.mSavedHintLayout.replaceOrMake(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad);}else {this.mHintLayout=BoringLayout.make(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad);}this.mSavedHintLayout=this.mHintLayout;}else if(shouldEllipsize&&hintBoring.width<=hintWidth){if(this.mSavedHintLayout!=null){this.mHintLayout=this.mSavedHintLayout.replaceOrMake(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad,this.mEllipsize,ellipsisWidth);}else {this.mHintLayout=BoringLayout.make(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad,this.mEllipsize,ellipsisWidth);}}else if(shouldEllipsize){this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.mEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else {this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}else if(shouldEllipsize){this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.mEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else {this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}if(bringIntoView||testDirChange&&oldDir!=this.mLayout.getParagraphDirection(0)){this.registerForPreDraw();}if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(!this.compressText(ellipsisWidth)){var height=this.mLayoutParams.height;if(height!=LayoutParams.WRAP_CONTENT&&height!=LayoutParams.MATCH_PARENT){this.startMarquee();}else {this.mRestartMarquee=true;}}}}},{key:'makeSingleLayout',value:function makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,effectiveEllipsize,useSaved){var result=null;if(Spannable.isImpl(this.mText)){result=new DynamicLayout(this.mText,this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.getKeyListener()==null?effectiveEllipsize:null,ellipsisWidth);}else {if(boring==TextView.UNKNOWN_BORING){boring=BoringLayout.isBoring(this.mTransformed,this.mTextPaint,this.mTextDir,this.mBoring);if(boring!=null){this.mBoring=boring;}}if(boring!=null){if(boring.width<=wantWidth&&(effectiveEllipsize==null||boring.width<=ellipsisWidth)){if(useSaved&&this.mSavedLayout!=null){result=this.mSavedLayout.replaceOrMake(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad);}else {result=BoringLayout.make(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad);}if(useSaved){this.mSavedLayout=result;}}else if(shouldEllipsize&&boring.width<=wantWidth){if(useSaved&&this.mSavedLayout!=null){result=this.mSavedLayout.replaceOrMake(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad,effectiveEllipsize,ellipsisWidth);}else {result=BoringLayout.make(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad,effectiveEllipsize,ellipsisWidth);}}else if(shouldEllipsize){result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,effectiveEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else {result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}else if(shouldEllipsize){result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,effectiveEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else {result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}return result;}},{key:'compressText',value:function compressText(width){var _this102=this;if(this.isHardwareAccelerated())return false;if(width>0.0&&this.mLayout!=null&&this.getLineCount()==1&&!this.mUserSetTextScaleX&&this.mTextPaint.getTextScaleX()==1.0){var textWidth=this.mLayout.getLineWidth(0);var overflow=(textWidth+1.0-width)/width;if(overflow>0.0&&overflow<=TextView.Marquee.MARQUEE_DELTA_MAX){this.mTextPaint.setTextScaleX(1.0-overflow-0.005);this.post(function(){var _this=_this102;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.requestLayout();}}]);return _Inner;}();return new _Inner();}());return true;}}return false;}},{key:'setIncludeFontPadding',value:function setIncludeFontPadding(includepad){if(this.mIncludePad!=includepad){this.mIncludePad=includepad;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getIncludeFontPadding',value:function getIncludeFontPadding(){return this.mIncludePad;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var widthMode=TextView.MeasureSpec.getMode(widthMeasureSpec);var heightMode=TextView.MeasureSpec.getMode(heightMeasureSpec);var widthSize=TextView.MeasureSpec.getSize(widthMeasureSpec);var heightSize=TextView.MeasureSpec.getSize(heightMeasureSpec);var width=undefined;var height=undefined;var boring=TextView.UNKNOWN_BORING;var hintBoring=TextView.UNKNOWN_BORING;if(this.mTextDir==null){this.mTextDir=this.getTextDirectionHeuristic();}var des=-1;var fromexisting=false;if(widthMode==TextView.MeasureSpec.EXACTLY){width=widthSize;}else {if(this.mLayout!=null&&this.mEllipsize==null){des=TextView.desired(this.mLayout);}if(des<0){boring=BoringLayout.isBoring(this.mTransformed,this.mTextPaint,this.mTextDir,this.mBoring);if(boring!=null){this.mBoring=boring;}}else {fromexisting=true;}if(boring==null||boring==TextView.UNKNOWN_BORING){if(des<0){des=Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed,this.mTextPaint)));}width=des;}else {width=boring.width;}var dr=this.mDrawables;if(dr!=null){width=Math.max(width,dr.mDrawableWidthTop);width=Math.max(width,dr.mDrawableWidthBottom);}if(this.mHint!=null){var hintDes=-1;var _hintWidth=undefined;if(this.mHintLayout!=null&&this.mEllipsize==null){hintDes=TextView.desired(this.mHintLayout);}if(hintDes<0){hintBoring=BoringLayout.isBoring(this.mHint,this.mTextPaint,this.mTextDir,this.mHintBoring);if(hintBoring!=null){this.mHintBoring=hintBoring;}}if(hintBoring==null||hintBoring==TextView.UNKNOWN_BORING){if(hintDes<0){hintDes=Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint,this.mTextPaint)));}_hintWidth=hintDes;}else {_hintWidth=hintBoring.width;}if(_hintWidth>width){width=_hintWidth;}}width+=this.getCompoundPaddingLeft()+this.getCompoundPaddingRight();if(this.mMaxWidthMode==TextView.EMS){width=Math.min(width,this.mMaxWidthValue*this.getLineHeight());}else {width=Math.min(width,this.mMaxWidthValue);}if(this.mMinWidthMode==TextView.EMS){width=Math.max(width,this.mMinWidthValue*this.getLineHeight());}else {width=Math.max(width,this.mMinWidthValue);}width=Math.max(width,this.getSuggestedMinimumWidth());if(widthMode==TextView.MeasureSpec.AT_MOST){width=Math.min(widthSize,width);}}var want=width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var unpaddedWidth=want;if(this.mHorizontallyScrolling)want=TextView.VERY_WIDE;var hintWant=want;var hintWidth=this.mHintLayout==null?hintWant:this.mHintLayout.getWidth();if(this.mLayout==null){this.makeNewLayout(want,hintWant,boring,hintBoring,width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);}else {var layoutChanged=this.mLayout.getWidth()!=want||hintWidth!=hintWant||this.mLayout.getEllipsizedWidth()!=width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var widthChanged=this.mHint==null&&this.mEllipsize==null&&want>this.mLayout.getWidth()&&(this.mLayout instanceof BoringLayout||fromexisting&&des>=0&&des<=want);var maximumChanged=this.mMaxMode!=this.mOldMaxMode||this.mMaximum!=this.mOldMaximum;if(layoutChanged||maximumChanged){if(!maximumChanged&&widthChanged){this.mLayout.increaseWidthTo(want);}else {this.makeNewLayout(want,hintWant,boring,hintBoring,width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);}}else {}}if(heightMode==TextView.MeasureSpec.EXACTLY){height=heightSize;this.mDesiredHeightAtMeasure=-1;}else {var desired=this.getDesiredHeight();height=desired;this.mDesiredHeightAtMeasure=desired;if(heightMode==TextView.MeasureSpec.AT_MOST){height=Math.min(desired,heightSize);}}var unpaddedHeight=height-this.getCompoundPaddingTop()-this.getCompoundPaddingBottom();if(this.mMaxMode==TextView.LINES&&this.mLayout.getLineCount()>this.mMaximum){unpaddedHeight=Math.min(unpaddedHeight,this.mLayout.getLineTop(this.mMaximum));}if(this.mMovement!=null||this.mLayout.getWidth()>unpaddedWidth||this.mLayout.getHeight()>unpaddedHeight){this.registerForPreDraw();}else {this.scrollTo(0,0);}this.setMeasuredDimension(width,height);}},{key:'getDesiredHeight',value:function getDesiredHeight(layout){var cap=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(arguments.length===0){return Math.max(this.getDesiredHeight(this.mLayout,true),this.getDesiredHeight(this.mHintLayout,this.mEllipsize!=null));}if(layout==null){return 0;}var linecount=layout.getLineCount();var pad=this.getCompoundPaddingTop()+this.getCompoundPaddingBottom();var desired=layout.getLineTop(linecount);var dr=this.mDrawables;if(dr!=null){desired=Math.max(desired,dr.mDrawableHeightLeft);desired=Math.max(desired,dr.mDrawableHeightRight);}desired+=pad;if(this.mMaxMode==TextView.LINES){if(cap){if(linecount>this.mMaximum){desired=layout.getLineTop(this.mMaximum);if(dr!=null){desired=Math.max(desired,dr.mDrawableHeightLeft);desired=Math.max(desired,dr.mDrawableHeightRight);}desired+=pad;linecount=this.mMaximum;}}}else {desired=Math.min(desired,this.mMaximum);}if(this.mMinMode==TextView.LINES){if(linecount=0){var _desiredHeight=this.getDesiredHeight();if(_desiredHeight!=this.mDesiredHeightAtMeasure){sizeChanged=true;}}}}if(sizeChanged){this.requestLayout();}}},{key:'checkForRelayout',value:function checkForRelayout(){if((this.mLayoutParams.width!=LayoutParams.WRAP_CONTENT||this.mMaxWidthMode==this.mMinWidthMode&&this.mMaxWidthValue==this.mMinWidthValue)&&(this.mHint==null||this.mHintLayout!=null)&&this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()>0){var oldht=this.mLayout.getHeight();var want=this.mLayout.getWidth();var hintWant=this.mHintLayout==null?0:this.mHintLayout.getWidth();this.makeNewLayout(want,hintWant,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);if(this.mEllipsize!=TextUtils.TruncateAt.MARQUEE){if(this.mLayoutParams.height!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.height!=LayoutParams.MATCH_PARENT){this.invalidate();return;}if(this.mLayout.getHeight()==oldht&&(this.mHintLayout==null||this.mHintLayout.getHeight()==oldht)){this.invalidate();return;}}this.requestLayout();this.invalidate();}else {this.nullLayouts();this.requestLayout();this.invalidate();}}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(Object.getPrototypeOf(TextView.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);if(this.mDeferScroll>=0){var curs=this.mDeferScroll;this.mDeferScroll=-1;this.bringPointIntoView(Math.min(curs,this.mText.length));}}},{key:'isShowingHint',value:function isShowingHint(){return TextUtils.isEmpty(this.mText)&&!TextUtils.isEmpty(this.mHint);}},{key:'bringTextIntoView',value:function bringTextIntoView(){var layout=this.isShowingHint()?this.mHintLayout:this.mLayout;var line=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){line=layout.getLineCount()-1;}var a=layout.getParagraphAlignment(line);var dir=layout.getParagraphDirection(line);var hspace=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var vspace=this.mBottom-this.mTop-this.getExtendedPaddingTop()-this.getExtendedPaddingBottom();var ht=layout.getHeight();var scrollx=undefined,scrolly=undefined;if(a==Layout.Alignment.ALIGN_NORMAL){a=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_LEFT:Layout.Alignment.ALIGN_RIGHT;}else if(a==Layout.Alignment.ALIGN_OPPOSITE){a=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_RIGHT:Layout.Alignment.ALIGN_LEFT;}if(a==Layout.Alignment.ALIGN_CENTER){var left=Math.floor(Math.floor(layout.getLineLeft(line)));var right=Math.floor(Math.ceil(layout.getLineRight(line)));if(right-left0;var x=Math.floor(layout.getPrimaryHorizontal(offset,clamped));var top=layout.getLineTop(line);var bottom=layout.getLineTop(line+1);var left=Math.floor(Math.floor(layout.getLineLeft(line)));var right=Math.floor(Math.ceil(layout.getLineRight(line)));var ht=layout.getHeight();var hspace=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var vspace=this.mBottom-this.mTop-this.getExtendedPaddingTop()-this.getExtendedPaddingBottom();if(!this.mHorizontallyScrolling&&right-left>hspace&&right>x){right=Math.max(x,left+hspace);}var hslack=(bottom-top)/2;var vslack=hslack;if(vslack>vspace/4)vslack=vspace/4;if(hslack>hspace/4)hslack=hspace/4;var hs=this.mScrollX;var vs=this.mScrollY;if(top-vsvspace-vslack)vs=bottom-(vspace-vslack);if(ht-vs0)vs=0;if(grav!=0){if(x-hshspace-hslack){hs=x-(hspace-hslack);}}if(grav<0){if(left-hs>0)hs=left;if(right-hs0){if(right-hs0)hs=left;}else {if(right-left<=hspace){hs=left-(hspace-(right-left))/2;}else if(x>right-hslack){hs=right-hspace;}else if(xhs){hs=left;}else if(righthspace-hslack){hs=x-(hspace-hslack);}}}if(hs!=this.mScrollX||vs!=this.mScrollY){if(this.mScroller==null){this.scrollTo(hs,vs);}else {var duration=AnimationUtils.currentAnimationTimeMillis()-this.mLastScroll;var dx=hs-this.mScrollX;var dy=vs-this.mScrollY;if(duration>TextView.ANIMATED_SCROLL_GAP){this.mScroller.startScroll(this.mScrollX,this.mScrollY,dx,dy);this.awakenScrollBars(this.mScroller.getDuration());this.invalidate();}else {if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(dx,dy);}this.mLastScroll=AnimationUtils.currentAnimationTimeMillis();}changed=true;}if(this.isFocused()){if(this.mTempRect==null)this.mTempRect=new Rect();this.mTempRect.set(x-2,top,x+2,bottom);this.getInterestingRect(this.mTempRect,line);this.mTempRect.offset(this.mScrollX,this.mScrollY);}return changed;}},{key:'moveCursorToVisibleOffset',value:function moveCursorToVisibleOffset(){return false;}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller!=null){if(this.mScroller.computeScrollOffset()){this.mScrollX=this.mScroller.getCurrX();this.mScrollY=this.mScroller.getCurrY();this.invalidateParentCaches();this.postInvalidate();}}}},{key:'getInterestingRect',value:function getInterestingRect(r,line){this.convertFromViewportToContentCoordinates(r);if(line==0)r.top-=this.getExtendedPaddingTop();if(line==this.mLayout.getLineCount()-1)r.bottom+=this.getExtendedPaddingBottom();}},{key:'convertFromViewportToContentCoordinates',value:function convertFromViewportToContentCoordinates(r){var horizontalOffset=this.viewportToContentHorizontalOffset();r.left+=horizontalOffset;r.right+=horizontalOffset;var verticalOffset=this.viewportToContentVerticalOffset();r.top+=verticalOffset;r.bottom+=verticalOffset;}},{key:'viewportToContentHorizontalOffset',value:function viewportToContentHorizontalOffset(){return this.getCompoundPaddingLeft()-this.mScrollX;}},{key:'viewportToContentVerticalOffset',value:function viewportToContentVerticalOffset(){var offset=this.getExtendedPaddingTop()-this.mScrollY;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){offset+=this.getVerticalOffset(false);}return offset;}},{key:'getSelectionStart',value:function getSelectionStart(){return -1;}},{key:'getSelectionEnd',value:function getSelectionEnd(){return -1;}},{key:'hasSelection',value:function hasSelection(){var selectionStart=this.getSelectionStart();var selectionEnd=this.getSelectionEnd();return selectionStart>=0&&selectionStart!=selectionEnd;}},{key:'setAllCaps',value:function setAllCaps(allCaps){if(allCaps){this.setTransformationMethod(new AllCapsTransformationMethod());}else {this.setTransformationMethod(null);}}},{key:'setSingleLine',value:function setSingleLine(){var singleLine=arguments.length<=0||arguments[0]===undefined?true:arguments[0];if(this.mSingleLine==singleLine)return;this.setInputTypeSingleLine(singleLine);this.applySingleLine(singleLine,true,true);}},{key:'setInputTypeSingleLine',value:function setInputTypeSingleLine(singleLine){}},{key:'applySingleLine',value:function applySingleLine(singleLine,applyTransformation,changeMaxLines){this.mSingleLine=singleLine;if(singleLine){this.setLines(1);this.setHorizontallyScrolling(true);if(applyTransformation){this.setTransformationMethod(SingleLineTransformationMethod.getInstance());}}else {if(changeMaxLines){this.setMaxLines(Integer.MAX_VALUE);}this.setHorizontallyScrolling(false);if(applyTransformation){this.setTransformationMethod(null);}}}},{key:'setEllipsize',value:function setEllipsize(where){if(this.mEllipsize!=where){this.mEllipsize=where;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'setMarqueeRepeatLimit',value:function setMarqueeRepeatLimit(marqueeLimit){this.mMarqueeRepeatLimit=marqueeLimit;}},{key:'getMarqueeRepeatLimit',value:function getMarqueeRepeatLimit(){return this.mMarqueeRepeatLimit;}},{key:'getEllipsize',value:function getEllipsize(){return this.mEllipsize;}},{key:'setSelectAllOnFocus',value:function setSelectAllOnFocus(selectAllOnFocus){this.createEditorIfNeeded();this.mEditor.mSelectAllOnFocus=selectAllOnFocus;if(selectAllOnFocus&&!Spannable.isImpl(this.mText)){this.setText(this.mText,TextView.BufferType.SPANNABLE);}}},{key:'setCursorVisible',value:function setCursorVisible(visible){}},{key:'isCursorVisible',value:function isCursorVisible(){return null;}},{key:'canMarquee',value:function canMarquee(){var width=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();return width>0&&(this.mLayout.getLineWidth(0)>width||this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_NORMAL&&this.mSavedMarqueeModeLayout!=null&&this.mSavedMarqueeModeLayout.getLineWidth(0)>width);}},{key:'startMarquee',value:function startMarquee(){if(this.getKeyListener()!=null)return;if(this.compressText(this.getWidth()-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight())){return;}if((this.mMarquee==null||this.mMarquee.isStopped())&&(this.isFocused()||this.isSelected())&&this.getLineCount()==1&&this.canMarquee()){if(this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){this.mMarqueeFadeMode=TextView.MARQUEE_FADE_SWITCH_SHOW_FADE;var tmp=this.mLayout;this.mLayout=this.mSavedMarqueeModeLayout;this.mSavedMarqueeModeLayout=tmp;this.setHorizontalFadingEdgeEnabled(true);this.requestLayout();this.invalidate();}if(this.mMarquee==null)this.mMarquee=new TextView.Marquee(this);this.mMarquee.start(this.mMarqueeRepeatLimit);}}},{key:'stopMarquee',value:function stopMarquee(){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){this.mMarquee.stop();}if(this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_FADE){this.mMarqueeFadeMode=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;var tmp=this.mSavedMarqueeModeLayout;this.mSavedMarqueeModeLayout=this.mLayout;this.mLayout=tmp;this.setHorizontalFadingEdgeEnabled(false);this.requestLayout();this.invalidate();}}},{key:'startStopMarquee',value:function startStopMarquee(start){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(start){this.startMarquee();}else {this.stopMarquee();}}}},{key:'onTextChanged',value:function onTextChanged(text,start,lengthBefore,lengthAfter){}},{key:'onSelectionChanged',value:function onSelectionChanged(selStart,selEnd){}},{key:'addTextChangedListener',value:function addTextChangedListener(watcher){if(this.mListeners==null){this.mListeners=new ArrayList();}this.mListeners.add(watcher);}},{key:'removeTextChangedListener',value:function removeTextChangedListener(watcher){if(this.mListeners!=null){var i=this.mListeners.indexOf(watcher);if(i>=0){this.mListeners.remove(i);}}}},{key:'sendBeforeTextChanged',value:function sendBeforeTextChanged(text,start,before,after){if(this.mListeners!=null){var list=this.mListeners;var count=list.size();for(var i=0;i=0||(this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){this.registerForPreDraw();}this.checkForResize();if(curs>=0){this.mHighlightPathBogus=true;this.bringPointIntoView(curs);}}},{key:'handleTextChanged',value:function handleTextChanged(buffer,start,before,after){this.updateAfterEdit();this.sendOnTextChanged(buffer,start,before,after);this.onTextChanged(buffer,start,before,after);}},{key:'spanChange',value:function spanChange(buf,what,oldStart,newStart,oldEnd,newEnd){var selChanged=false;var newSelStart=-1,newSelEnd=-1;this.invalidate();this.mHighlightPathBogus=true;this.checkForResize();}},{key:'dispatchFinishTemporaryDetach',value:function dispatchFinishTemporaryDetach(){this.mDispatchTemporaryDetach=true;_get2(Object.getPrototypeOf(TextView.prototype),'dispatchFinishTemporaryDetach',this).call(this);this.mDispatchTemporaryDetach=false;}},{key:'onStartTemporaryDetach',value:function onStartTemporaryDetach(){_get2(Object.getPrototypeOf(TextView.prototype),'onStartTemporaryDetach',this).call(this);if(!this.mDispatchTemporaryDetach)this.mTemporaryDetach=true;}},{key:'onFinishTemporaryDetach',value:function onFinishTemporaryDetach(){_get2(Object.getPrototypeOf(TextView.prototype),'onFinishTemporaryDetach',this).call(this);if(!this.mDispatchTemporaryDetach)this.mTemporaryDetach=false;}},{key:'onFocusChanged',value:function onFocusChanged(focused,direction,previouslyFocusedRect){if(this.mTemporaryDetach){_get2(Object.getPrototypeOf(TextView.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);return;}this.startStopMarquee(focused);if(this.mTransformation!=null){this.mTransformation.onFocusChanged(this,this.mText,focused,direction,previouslyFocusedRect);}_get2(Object.getPrototypeOf(TextView.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){_get2(Object.getPrototypeOf(TextView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);this.startStopMarquee(hasWindowFocus);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){_get2(Object.getPrototypeOf(TextView.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);}},{key:'clearComposingText',value:function clearComposingText(){}},{key:'setSelected',value:function setSelected(selected){var wasSelected=this.isSelected();_get2(Object.getPrototypeOf(TextView.prototype),'setSelected',this).call(this,selected);if(selected!=wasSelected&&this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(selected){this.startMarquee();}else {this.stopMarquee();}}}},{key:'onTouchEvent',value:function onTouchEvent(event){var action=event.getActionMasked();var superResult=_get2(Object.getPrototypeOf(TextView.prototype),'onTouchEvent',this).call(this,event);var touchIsFinished=action==MotionEvent.ACTION_UP&&this.isFocused();if((this.mMovement!=null||this.onCheckIsTextEditor())&&this.isEnabled()&&Spannable.isImpl(this.mText)&&this.mLayout!=null){var handled=false;if(this.mMovement!=null){handled=this.mMovement.onTouchEvent(this,this.mText,event)||handled;}if(handled){return true;}}return superResult;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(this.mMovement!=null&&Spannable.isImpl(this.mText)&&this.mLayout!=null){try{if(this.mMovement.onGenericMotionEvent(this,this.mText,event)){return true;}}catch(e){}}return _get2(Object.getPrototypeOf(TextView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'isTextEditable',value:function isTextEditable(){return false;}},{key:'didTouchFocusSelect',value:function didTouchFocusSelect(){return false;}},{key:'cancelLongPress',value:function cancelLongPress(){_get2(Object.getPrototypeOf(TextView.prototype),'cancelLongPress',this).call(this);}},{key:'setScroller',value:function setScroller(s){this.mScroller=s;}},{key:'getLeftFadingEdgeStrength',value:function getLeftFadingEdgeStrength(){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){var marquee=this.mMarquee;if(marquee.shouldDrawLeftFade()){var scroll=marquee.getScroll();return scroll/this.getHorizontalFadingEdgeLength();}else {return 0.0;}}else if(this.getLineCount()==1){var absoluteGravity=this.mGravity;switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:return 0.0;case Gravity.RIGHT:return (this.mLayout.getLineRight(0)-(this.mRight-this.mLeft)-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()-this.mLayout.getLineLeft(0))/this.getHorizontalFadingEdgeLength();case Gravity.CENTER_HORIZONTAL:case Gravity.FILL_HORIZONTAL:var textDirection=this.mLayout.getParagraphDirection(0);if(textDirection==Layout.DIR_LEFT_TO_RIGHT){return 0.0;}else {return (this.mLayout.getLineRight(0)-(this.mRight-this.mLeft)-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()-this.mLayout.getLineLeft(0))/this.getHorizontalFadingEdgeLength();}}}}return _get2(Object.getPrototypeOf(TextView.prototype),'getLeftFadingEdgeStrength',this).call(this);}},{key:'getRightFadingEdgeStrength',value:function getRightFadingEdgeStrength(){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){var marquee=this.mMarquee;var maxFadeScroll=marquee.getMaxFadeScroll();var scroll=marquee.getScroll();return (maxFadeScroll-scroll)/this.getHorizontalFadingEdgeLength();}else if(this.getLineCount()==1){var absoluteGravity=this.mGravity;switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:var textWidth=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var lineWidth=this.mLayout.getLineWidth(0);return (lineWidth-textWidth)/this.getHorizontalFadingEdgeLength();case Gravity.RIGHT:return 0.0;case Gravity.CENTER_HORIZONTAL:case Gravity.FILL_HORIZONTAL:var textDirection=this.mLayout.getParagraphDirection(0);if(textDirection==Layout.DIR_RIGHT_TO_LEFT){return 0.0;}else {return (this.mLayout.getLineWidth(0)-(this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()))/this.getHorizontalFadingEdgeLength();}}}}return _get2(Object.getPrototypeOf(TextView.prototype),'getRightFadingEdgeStrength',this).call(this);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){if(this.mLayout!=null){return this.mSingleLine&&(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK)==Gravity.LEFT?Math.floor(this.mLayout.getLineWidth(0)):this.mLayout.getWidth();}return _get2(Object.getPrototypeOf(TextView.prototype),'computeHorizontalScrollRange',this).call(this);}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){if(this.mLayout!=null)return this.mLayout.getHeight();return _get2(Object.getPrototypeOf(TextView.prototype),'computeVerticalScrollRange',this).call(this);}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight()-this.getCompoundPaddingTop()-this.getCompoundPaddingBottom();}},{key:'canSelectText',value:function canSelectText(){return false;}},{key:'textCanBeSelected',value:function textCanBeSelected(){return false;}},{key:'getTransformedText',value:function getTransformedText(start,end){return this.removeSuggestionSpans(this.mTransformed.substring(start,end));}},{key:'performLongClick',value:function performLongClick(){var handled=false;if(_get2(Object.getPrototypeOf(TextView.prototype),'performLongClick',this).call(this)){handled=true;}if(handled){this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);}return handled;}},{key:'isSuggestionsEnabled',value:function isSuggestionsEnabled(){return false;}},{key:'setCustomSelectionActionModeCallback',value:function setCustomSelectionActionModeCallback(actionModeCallback){this.createEditorIfNeeded();}},{key:'getCustomSelectionActionModeCallback',value:function getCustomSelectionActionModeCallback(){return null;}},{key:'stopSelectionActionMode',value:function stopSelectionActionMode(){}},{key:'canCut',value:function canCut(){return false;}},{key:'canCopy',value:function canCopy(){return true;}},{key:'canPaste',value:function canPaste(){return false;}},{key:'selectAllText',value:function selectAllText(){return false;}},{key:'getOffsetForPosition',value:function getOffsetForPosition(x,y){if(this.getLayout()==null)return -1;var line=this.getLineAtCoordinate(y);var offset=this.getOffsetAtCoordinate(line,x);return offset;}},{key:'convertToLocalHorizontalCoordinate',value:function convertToLocalHorizontalCoordinate(x){x-=this.getTotalPaddingLeft();x=Math.max(0.0,x);x=Math.min(this.getWidth()-this.getTotalPaddingRight()-1,x);x+=this.getScrollX();return x;}},{key:'getLineAtCoordinate',value:function getLineAtCoordinate(y){y-=this.getTotalPaddingTop();y=Math.max(0.0,y);y=Math.min(this.getHeight()-this.getTotalPaddingBottom()-1,y);y+=this.getScrollY();return this.getLayout().getLineForVertical(Math.floor(y));}},{key:'getOffsetAtCoordinate',value:function getOffsetAtCoordinate(line,x){x=this.convertToLocalHorizontalCoordinate(x);return this.getLayout().getOffsetForHorizontal(line,x);}},{key:'isInBatchEditMode',value:function isInBatchEditMode(){return false;}},{key:'getTextDirectionHeuristic',value:function getTextDirectionHeuristic(){return TextDirectionHeuristics.LTR;}},{key:'onResolveDrawables',value:function onResolveDrawables(layoutDirection){if(this.mLastLayoutDirection==layoutDirection){return;}this.mLastLayoutDirection=layoutDirection;if(this.mDrawables!=null){this.mDrawables.resolveWithLayoutDirection(layoutDirection);}}},{key:'resetResolvedDrawables',value:function resetResolvedDrawables(){this.mLastLayoutDirection=-1;}},{key:'deleteText_internal',value:function deleteText_internal(start,end){}},{key:'replaceText_internal',value:function replaceText_internal(start,end,text){}},{key:'setSpan_internal',value:function setSpan_internal(span,start,end,flags){}},{key:'setCursorPosition_internal',value:function setCursorPosition_internal(start,end){}},{key:'createEditorIfNeeded',value:function createEditorIfNeeded(){}}],[{key:'isMultilineInputType',value:function isMultilineInputType(type){return true;}},{key:'isPasswordInputType',value:function isPasswordInputType(inputType){return false;}},{key:'isVisiblePasswordInputType',value:function isVisiblePasswordInputType(inputType){return true;}},{key:'desired',value:function desired(layout){var n=layout.getLineCount();var text=layout.getText();var max=0;for(var i=0;i=0){this.mRepeatLimit--;}this.start(this.mRepeatLimit);}break;}}},{key:'tick',value:function tick(){if(this.mStatus!=Marquee.MARQUEE_RUNNING){return;}this.removeMessages(Marquee.MESSAGE_TICK);var textView=this.mView.get();if(textView!=null&&(textView.isFocused()||textView.isSelected())){this.mScroll+=this.mScrollUnit;if(this.mScroll>this.mMaxScroll){this.mScroll=this.mMaxScroll;this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART,Marquee.MARQUEE_RESTART_DELAY);}else {this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK,Marquee.MARQUEE_RESOLUTION);}textView.invalidate();}}},{key:'stop',value:function stop(){this.mStatus=Marquee.MARQUEE_STOPPED;this.removeMessages(Marquee.MESSAGE_START);this.removeMessages(Marquee.MESSAGE_RESTART);this.removeMessages(Marquee.MESSAGE_TICK);this.resetScroll();}},{key:'resetScroll',value:function resetScroll(){this.mScroll=0.0;var textView=this.mView.get();if(textView!=null)textView.invalidate();}},{key:'start',value:function start(repeatLimit){if(repeatLimit==0){this.stop();return;}this.mRepeatLimit=repeatLimit;var textView=this.mView.get();if(textView!=null&&textView.mLayout!=null){this.mStatus=Marquee.MARQUEE_STARTING;this.mScroll=0.0;var textWidth=textView.getWidth()-textView.getCompoundPaddingLeft()-textView.getCompoundPaddingRight();var lineWidth=textView.mLayout.getLineWidth(0);var gap=textWidth/3.0;this.mGhostStart=lineWidth-textWidth+gap;this.mMaxScroll=this.mGhostStart+textWidth;this.mGhostOffset=lineWidth+gap;this.mFadeStop=lineWidth+textWidth/6.0;this.mMaxFadeScroll=this.mGhostStart+lineWidth+lineWidth;textView.invalidate();this.sendEmptyMessageDelayed(Marquee.MESSAGE_START,Marquee.MARQUEE_DELAY);}}},{key:'getGhostOffset',value:function getGhostOffset(){return this.mGhostOffset;}},{key:'getScroll',value:function getScroll(){return this.mScroll;}},{key:'getMaxFadeScroll',value:function getMaxFadeScroll(){return this.mMaxFadeScroll;}},{key:'shouldDrawLeftFade',value:function shouldDrawLeftFade(){return this.mScroll<=this.mFadeStop;}},{key:'shouldDrawGhost',value:function shouldDrawGhost(){return this.mStatus==Marquee.MARQUEE_RUNNING&&this.mScroll>this.mGhostStart;}},{key:'isRunning',value:function isRunning(){return this.mStatus==Marquee.MARQUEE_RUNNING;}},{key:'isStopped',value:function isStopped(){return this.mStatus==Marquee.MARQUEE_STOPPED;}}]);return Marquee;}(Handler);Marquee.MARQUEE_DELTA_MAX=0.07;Marquee.MARQUEE_DELAY=1200;Marquee.MARQUEE_RESTART_DELAY=1200;Marquee.MARQUEE_RESOLUTION=1000/30;Marquee.MARQUEE_PIXELS_PER_SECOND=30;Marquee.MARQUEE_STOPPED=0x0;Marquee.MARQUEE_STARTING=0x1;Marquee.MARQUEE_RUNNING=0x2;Marquee.MESSAGE_START=0x1;Marquee.MESSAGE_TICK=0x2;Marquee.MESSAGE_RESTART=0x3;TextView.Marquee=Marquee;var ChangeWatcher=function(){function ChangeWatcher(arg){_classCallCheck(this,ChangeWatcher);this._TextView_this=arg;}_createClass(ChangeWatcher,[{key:'beforeTextChanged',value:function beforeTextChanged(buffer,start,before,after){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"beforeTextChanged start="+start+" before="+before+" after="+after+": "+buffer);this._TextView_this.sendBeforeTextChanged(buffer,start,before,after);}},{key:'onTextChanged',value:function onTextChanged(buffer,start,before,after){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onTextChanged start="+start+" before="+before+" after="+after+": "+buffer);this._TextView_this.handleTextChanged(buffer,start,before,after);}},{key:'afterTextChanged',value:function afterTextChanged(buffer){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"afterTextChanged: "+buffer);this._TextView_this.sendAfterTextChanged(buffer);}},{key:'onSpanChanged',value:function onSpanChanged(buf,what,s,e,st,en){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanChanged s="+s+" e="+e+" st="+st+" en="+en+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,s,st,e,en);}},{key:'onSpanAdded',value:function onSpanAdded(buf,what,s,e){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanAdded s="+s+" e="+e+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,-1,s,-1,e);}},{key:'onSpanRemoved',value:function onSpanRemoved(buf,what,s,e){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanRemoved s="+s+" e="+e+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,s,-1,e,-1);}}]);return ChangeWatcher;}();TextView.ChangeWatcher=ChangeWatcher;(function(BufferType){BufferType[BufferType["NORMAL"]=0]="NORMAL";BufferType[BufferType["SPANNABLE"]=1]="SPANNABLE";BufferType[BufferType["EDITABLE"]=2]="EDITABLE";})(TextView.BufferType||(TextView.BufferType={}));var BufferType=TextView.BufferType;})(TextView=widget.TextView||(widget.TextView={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Button=function(_widget$TextView){_inherits(Button,_widget$TextView);function Button(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.buttonStyle:arguments[2];_classCallCheck(this,Button);return _possibleConstructorReturn(this,Object.getPrototypeOf(Button).call(this,context,bindElement,defStyle));}return Button;}(widget.TextView);widget.Button=Button;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ListAdapter;(function(ListAdapter){function isImpl(obj){return obj&&obj['areAllItemsEnabled']&&obj['isEnabled'];}ListAdapter.isImpl=isImpl;})(ListAdapter=widget.ListAdapter||(widget.ListAdapter={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var Log=android.util.Log;var LongSparseArray=android.util.LongSparseArray;var SparseArray=android.util.SparseArray;var SparseBooleanArray=android.util.SparseBooleanArray;var StateSet=android.util.StateSet;var HapticFeedbackConstants=android.view.HapticFeedbackConstants;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var View=android.view.View;var ViewConfiguration=android.view.ViewConfiguration;var ViewGroup=android.view.ViewGroup;var LinearInterpolator=android.view.animation.LinearInterpolator;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var System=java.lang.System;var AdapterView=android.widget.AdapterView;var OverScroller=android.widget.OverScroller;var AbsListView=function(_AdapterView){_inherits(AbsListView,_AdapterView);function AbsListView(context,bindElement,defStyle){_classCallCheck(this,AbsListView);var _this105=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsListView).call(this,context,bindElement,defStyle));_this105.mChoiceMode=AbsListView.CHOICE_MODE_NONE;_this105.mCheckedItemCount=0;_this105.mDeferNotifyDataSetChanged=false;_this105.mDrawSelectorOnTop=false;_this105.mSelectorPosition=AbsListView.INVALID_POSITION;_this105.mSelectorRect=new Rect();_this105.mRecycler=new AbsListView.RecycleBin(_this105);_this105.mSelectionLeftPadding=0;_this105.mSelectionTopPadding=0;_this105.mSelectionRightPadding=0;_this105.mSelectionBottomPadding=0;_this105.mListPadding=new Rect();_this105.mWidthMeasureSpec=0;_this105.mMotionPosition=0;_this105.mMotionViewOriginalTop=0;_this105.mMotionViewNewTop=0;_this105.mMotionX=0;_this105.mMotionY=0;_this105.mTouchMode=AbsListView.TOUCH_MODE_REST;_this105.mLastY=0;_this105.mMotionCorrection=0;_this105.mSelectedTop=0;_this105.mSmoothScrollbarEnabled=true;_this105.mResurrectToPosition=AbsListView.INVALID_POSITION;_this105.mOverscrollMax=0;_this105.mLastTouchMode=AbsListView.TOUCH_MODE_UNKNOWN;_this105.mScrollProfilingStarted=false;_this105.mFlingProfilingStarted=false;_this105.mTranscriptMode=0;_this105.mCacheColorHint=0;_this105.mLastScrollState=AbsListView.OnScrollListener.SCROLL_STATE_IDLE;_this105.mDensityScale=0;_this105.mMinimumVelocity=0;_this105.mMaximumVelocity=0;_this105.mVelocityScale=1.0;_this105.mIsScrap=new Array(1);_this105.mActivePointerId=AbsListView.INVALID_POINTER;_this105.mOverscrollDistance=0;_this105._mOverflingDistance=0;_this105.mFirstPositionDistanceGuess=0;_this105.mLastPositionDistanceGuess=0;_this105.mDirection=0;_this105.mGlowPaddingLeft=0;_this105.mGlowPaddingRight=0;_this105.mLastHandledItemCount=0;_this105.initAbsListView();_this105.setVerticalScrollBarEnabled(true);_this105.initializeScrollbars();_this105._attrBinder.addAttr('listSelector',function(value){var d=_this105._attrBinder.parseDrawable(value);if(d)_this105.setSelector(d);});_this105._attrBinder.addAttr('drawSelectorOnTop',function(value){_this105.mDrawSelectorOnTop=_this105._attrBinder.parseBoolean(value,false);});_this105._attrBinder.addAttr('stackFromBottom',function(value){_this105.setStackFromBottom(_this105._attrBinder.parseBoolean(value,false));});_this105._attrBinder.addAttr('scrollingCache',function(value){_this105.setScrollingCacheEnabled(_this105._attrBinder.parseBoolean(value,true));});_this105._attrBinder.addAttr('transcriptMode',function(value){_this105.setTranscriptMode(_this105._attrBinder.parseEnum(value,new Map().set("disabled",AbsListView.TRANSCRIPT_MODE_DISABLED).set("normal",AbsListView.TRANSCRIPT_MODE_NORMAL).set("alwaysScroll",AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL),AbsListView.TRANSCRIPT_MODE_DISABLED));});_this105._attrBinder.addAttr('cacheColorHint',function(value){var color=_this105._attrBinder.parseColor(value,0);_this105.setCacheColorHint(color);});_this105._attrBinder.addAttr('fastScrollEnabled',function(value){var enableFastScroll=_this105._attrBinder.parseBoolean(value,false);_this105.setFastScrollEnabled(enableFastScroll);});_this105._attrBinder.addAttr('fastScrollAlwaysVisible',function(value){var fastScrollAlwaysVisible=_this105._attrBinder.parseBoolean(value,false);_this105.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);});_this105._attrBinder.addAttr('smoothScrollbar',function(value){var smoothScrollbar=_this105._attrBinder.parseBoolean(value,true);_this105.setSmoothScrollbarEnabled(smoothScrollbar);});_this105._attrBinder.addAttr('choiceMode',function(value){_this105.setChoiceMode(_this105._attrBinder.parseEnum(value,new Map().set("none",AbsListView.CHOICE_MODE_NONE).set("singleChoice",AbsListView.CHOICE_MODE_SINGLE).set("multipleChoice",AbsListView.CHOICE_MODE_MULTIPLE),AbsListView.CHOICE_MODE_NONE));});return _this105;}_createClass(AbsListView,[{key:'initAbsListView',value:function initAbsListView(){this.setClickable(true);this.setFocusableInTouchMode(true);this.setWillNotDraw(false);this.setAlwaysDrawnWithCacheEnabled(false);this.setScrollingCacheEnabled(true);var configuration=ViewConfiguration.get();this.mTouchSlop=configuration.getScaledTouchSlop();this.mMinimumVelocity=configuration.getScaledMinimumFlingVelocity();this.mMaximumVelocity=configuration.getScaledMaximumFlingVelocity();this.mOverscrollDistance=configuration.getScaledOverscrollDistance();this.mOverflingDistance=configuration.getScaledOverflingDistance();this.mDensityScale=android.content.res.Resources.getDisplayMetrics().density;this.mLayoutMode=AbsListView.LAYOUT_NORMAL;}},{key:'setOverScrollMode',value:function setOverScrollMode(mode){if(mode!=AbsListView.OVER_SCROLL_NEVER){}else {}_get2(Object.getPrototypeOf(AbsListView.prototype),'setOverScrollMode',this).call(this,mode);}},{key:'setAdapter',value:function setAdapter(adapter){if(adapter!=null){this.mAdapterHasStableIds=this.mAdapter.hasStableIds();if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE&&this.mAdapterHasStableIds&&this.mCheckedIdStates==null){this.mCheckedIdStates=new LongSparseArray();}}if(this.mCheckStates!=null){this.mCheckStates.clear();}if(this.mCheckedIdStates!=null){this.mCheckedIdStates.clear();}}},{key:'getCheckedItemCount',value:function getCheckedItemCount(){return this.mCheckedItemCount;}},{key:'isItemChecked',value:function isItemChecked(position){if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE&&this.mCheckStates!=null){return this.mCheckStates.get(position);}return false;}},{key:'getCheckedItemPosition',value:function getCheckedItemPosition(){if(this.mChoiceMode==AbsListView.CHOICE_MODE_SINGLE&&this.mCheckStates!=null&&this.mCheckStates.size()==1){return this.mCheckStates.keyAt(0);}return AbsListView.INVALID_POSITION;}},{key:'getCheckedItemPositions',value:function getCheckedItemPositions(){if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE){return this.mCheckStates;}return null;}},{key:'getCheckedItemIds',value:function getCheckedItemIds(){if(this.mChoiceMode==AbsListView.CHOICE_MODE_NONE||this.mCheckedIdStates==null||this.mAdapter==null){return [0];}var idStates=this.mCheckedIdStates;var count=idStates.size();var ids=[count];for(var i=0;i=this.mListPadding.top&&this.getChildAt(childCount-1).getBottom()<=this.getHeight()-this.mListPadding.bottom;}},{key:'setFastScrollEnabled',value:function setFastScrollEnabled(enabled){if(this.mFastScrollEnabled!=enabled){this.mFastScrollEnabled=enabled;this.setFastScrollerEnabledUiThread(enabled);}}},{key:'setFastScrollerEnabledUiThread',value:function setFastScrollerEnabledUiThread(enabled){}},{key:'setFastScrollAlwaysVisible',value:function setFastScrollAlwaysVisible(alwaysShow){if(this.mFastScrollAlwaysVisible!=alwaysShow){if(alwaysShow&&!this.mFastScrollEnabled){this.setFastScrollEnabled(true);}this.mFastScrollAlwaysVisible=alwaysShow;this.setFastScrollerAlwaysVisibleUiThread(alwaysShow);}}},{key:'setFastScrollerAlwaysVisibleUiThread',value:function setFastScrollerAlwaysVisibleUiThread(alwaysShow){}},{key:'isOwnerThread',value:function isOwnerThread(){return true;}},{key:'isFastScrollAlwaysVisible',value:function isFastScrollAlwaysVisible(){return false;}},{key:'getVerticalScrollbarWidth',value:function getVerticalScrollbarWidth(){return _get2(Object.getPrototypeOf(AbsListView.prototype),'getVerticalScrollbarWidth',this).call(this);}},{key:'isFastScrollEnabled',value:function isFastScrollEnabled(){return false;}},{key:'setVerticalScrollbarPosition',value:function setVerticalScrollbarPosition(position){_get2(Object.getPrototypeOf(AbsListView.prototype),'setVerticalScrollbarPosition',this).call(this,position);}},{key:'setScrollBarStyle',value:function setScrollBarStyle(style){_get2(Object.getPrototypeOf(AbsListView.prototype),'setScrollBarStyle',this).call(this,style);}},{key:'isVerticalScrollBarHidden',value:function isVerticalScrollBarHidden(){return this.isFastScrollEnabled();}},{key:'setSmoothScrollbarEnabled',value:function setSmoothScrollbarEnabled(enabled){this.mSmoothScrollbarEnabled=enabled;}},{key:'isSmoothScrollbarEnabled',value:function isSmoothScrollbarEnabled(){return this.mSmoothScrollbarEnabled;}},{key:'setOnScrollListener',value:function setOnScrollListener(l){this.mOnScrollListener=l;this.invokeOnItemScrollListener();}},{key:'invokeOnItemScrollListener',value:function invokeOnItemScrollListener(){if(this.mOnScrollListener!=null){this.mOnScrollListener.onScroll(this,this.mFirstPosition,this.getChildCount(),this.mItemCount);}this.onScrollChanged(0,0,0,0);}},{key:'isScrollingCacheEnabled',value:function isScrollingCacheEnabled(){return this.mScrollingCacheEnabled;}},{key:'setScrollingCacheEnabled',value:function setScrollingCacheEnabled(enabled){if(this.mScrollingCacheEnabled&&!enabled){this.clearScrollingCache();}this.mScrollingCacheEnabled=enabled;}},{key:'setTextFilterEnabled',value:function setTextFilterEnabled(textFilterEnabled){this.mTextFilterEnabled=textFilterEnabled;}},{key:'isTextFilterEnabled',value:function isTextFilterEnabled(){return this.mTextFilterEnabled;}},{key:'getFocusedRect',value:function getFocusedRect(r){var view=this.getSelectedView();if(view!=null&&view.getParent()==this){view.getFocusedRect(r);this.offsetDescendantRectToMyCoords(view,r);}else {_get2(Object.getPrototypeOf(AbsListView.prototype),'getFocusedRect',this).call(this,r);}}},{key:'useDefaultSelector',value:function useDefaultSelector(){this.setSelector(android.R.drawable.list_selector_background);}},{key:'isStackFromBottom',value:function isStackFromBottom(){return this.mStackFromBottom;}},{key:'setStackFromBottom',value:function setStackFromBottom(stackFromBottom){if(this.mStackFromBottom!=stackFromBottom){this.mStackFromBottom=stackFromBottom;this.requestLayoutIfNecessary();}}},{key:'requestLayoutIfNecessary',value:function requestLayoutIfNecessary(){if(this.getChildCount()>0){this.resetList();this.requestLayout();this.invalidate();}}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(Object.getPrototypeOf(AbsListView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);if(gainFocus&&this.mSelectedPosition<0&&!this.isInTouchMode()){if(!this.isAttachedToWindow()&&this.mAdapter!=null){this.mDataChanged=true;this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();}this.resurrectSelection();}}},{key:'requestLayout',value:function requestLayout(){if(!this.mBlockLayoutRequests&&!this.mInLayout){_get2(Object.getPrototypeOf(AbsListView.prototype),'requestLayout',this).call(this);}}},{key:'resetList',value:function resetList(){this.removeAllViewsInLayout();this.mFirstPosition=0;this.mDataChanged=false;this.mPositionScrollAfterLayout=null;this.mNeedSync=false;this.mPendingSync=null;this.mOldSelectedPosition=AbsListView.INVALID_POSITION;this.mOldSelectedRowId=AbsListView.INVALID_ROW_ID;this.setSelectedPositionInt(AbsListView.INVALID_POSITION);this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);this.mSelectedTop=0;this.mSelectorPosition=AbsListView.INVALID_POSITION;this.mSelectorRect.setEmpty();this.invalidate();}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){var count=this.getChildCount();if(count>0){if(this.mSmoothScrollbarEnabled){var extent=count*100;var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){extent+=top*100/height;}view=this.getChildAt(count-1);var bottom=view.getBottom();height=view.getHeight();if(height>0){extent-=(bottom-this.getHeight())*100/height;}return extent;}else {return 1;}}return 0;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){var firstPosition=this.mFirstPosition;var childCount=this.getChildCount();if(firstPosition>=0&&childCount>0){if(this.mSmoothScrollbarEnabled){var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){return Math.max(firstPosition*100-top*100/height+Math.floor(this.mScrollY/this.getHeight()*this.mItemCount*100),0);}}else {var index=undefined;var count=this.mItemCount;if(firstPosition==0){index=0;}else if(firstPosition+childCount==count){index=count;}else {index=firstPosition+childCount/2;}return Math.floor(firstPosition+childCount*(index/count));}}return 0;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var result=undefined;if(this.mSmoothScrollbarEnabled){result=Math.max(this.mItemCount*100,0);if(this.mScrollY!=0){result+=Math.abs(Math.floor(this.mScrollY/this.getHeight()*this.mItemCount*100));}}else {result=this.mItemCount;}return result;}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){var count=this.getChildCount();var fadeEdge=_get2(Object.getPrototypeOf(AbsListView.prototype),'getTopFadingEdgeStrength',this).call(this);if(count==0){return fadeEdge;}else {if(this.mFirstPosition>0){return 1.0;}var top=this.getChildAt(0).getTop();var fadeLength=this.getVerticalFadingEdgeLength();return topheight-this.mPaddingBottom?(bottom-height+this.mPaddingBottom)/fadeLength:fadeEdge;}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(this.mSelector==null){this.useDefaultSelector();}var listPadding=this.mListPadding;listPadding.left=this.mSelectionLeftPadding+this.mPaddingLeft;listPadding.top=this.mSelectionTopPadding+this.mPaddingTop;listPadding.right=this.mSelectionRightPadding+this.mPaddingRight;listPadding.bottom=this.mSelectionBottomPadding+this.mPaddingBottom;if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_NORMAL){var childCount=this.getChildCount();var listBottom=this.getHeight()-this.getPaddingBottom();var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild!=null?lastChild.getBottom():listBottom;this.mForceTranscriptScroll=this.mFirstPosition+childCount>=this.mLastHandledItemCount&&lastBottom<=listBottom;}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(Object.getPrototypeOf(AbsListView.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mInLayout=true;if(changed){var childCount=this.getChildCount();for(var i=0;i0;if(!canScrollUp){if(this.getChildCount()>0){var child=this.getChildAt(0);canScrollUp=child.getTop()0){var _child12=this.getChildAt(count-1);canScrollDown=_child12.getBottom()>this.mBottom-this.mListPadding.bottom;}this.mScrollDown.setVisibility(canScrollDown?View.VISIBLE:View.INVISIBLE);}}},{key:'getSelectedView',value:function getSelectedView(){if(this.mItemCount>0&&this.mSelectedPosition>=0){return this.getChildAt(this.mSelectedPosition-this.mFirstPosition);}else {return null;}}},{key:'getListPaddingTop',value:function getListPaddingTop(){return this.mListPadding.top;}},{key:'getListPaddingBottom',value:function getListPaddingBottom(){return this.mListPadding.bottom;}},{key:'getListPaddingLeft',value:function getListPaddingLeft(){return this.mListPadding.left;}},{key:'getListPaddingRight',value:function getListPaddingRight(){return this.mListPadding.right;}},{key:'obtainView',value:function obtainView(position,isScrap){isScrap[0]=false;var scrapView=undefined;scrapView=this.mRecycler.getTransientStateView(position);if(scrapView==null){scrapView=this.mRecycler.getScrapView(position);}var child=undefined;if(scrapView!=null){child=this.mAdapter.getView(position,scrapView,this);if(child!=scrapView){this.mRecycler.addScrapView(scrapView,position);if(this.mCacheColorHint!=0){child.setDrawingCacheBackgroundColor(this.mCacheColorHint);}}else {isScrap[0]=true;child.dispatchFinishTemporaryDetach();}}else {child=this.mAdapter.getView(position,null,this);if(this.mCacheColorHint!=0){child.setDrawingCacheBackgroundColor(this.mCacheColorHint);}}if(this.mAdapterHasStableIds){var vlp=child.getLayoutParams();var lp=undefined;if(vlp==null){lp=this.generateDefaultLayoutParams();}else if(!this.checkLayoutParams(vlp)){lp=this.generateLayoutParams(vlp);}else {lp=vlp;}lp.itemId=this.mAdapter.getItemId(position);child.setLayoutParams(lp);}return child;}},{key:'positionSelector',value:function positionSelector(){for(var _len36=arguments.length,args=Array(_len36),_key37=0;_key37<_len36;_key37++){args[_key37]=arguments[_key37];}if(args.length===4){var l=args[0];var t=args[1];var r=args[2];var b=args[3];this.mSelectorRect.set(l-this.mSelectionLeftPadding,t-this.mSelectionTopPadding,r+this.mSelectionRightPadding,b+this.mSelectionBottomPadding);}else {var position=args[0];var sel=args[1];if(position!=AbsListView.INVALID_POSITION){this.mSelectorPosition=position;}var selectorRect=this.mSelectorRect;selectorRect.set(sel.getLeft(),sel.getTop(),sel.getRight(),sel.getBottom());if(sel['adjustListItemSelectionBounds']){sel.adjustListItemSelectionBounds(selectorRect);}this.positionSelector(selectorRect.left,selectorRect.top,selectorRect.right,selectorRect.bottom);var isChildViewEnabled=this.mIsChildViewEnabled;if(sel.isEnabled()!=isChildViewEnabled){this.mIsChildViewEnabled=!isChildViewEnabled;if(this.getSelectedItemPosition()!=AbsListView.INVALID_POSITION){this.refreshDrawableState();}}}}},{key:'dispatchDraw',value:function dispatchDraw(canvas){var saveCount=0;var clipToPadding=(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK;if(clipToPadding){saveCount=canvas.save();var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);this.mGroupFlags&=~AbsListView.CLIP_TO_PADDING_MASK;}var drawSelectorOnTop=this.mDrawSelectorOnTop;if(!drawSelectorOnTop){this.drawSelector(canvas);}_get2(Object.getPrototypeOf(AbsListView.prototype),'dispatchDraw',this).call(this,canvas);if(drawSelectorOnTop){this.drawSelector(canvas);}if(clipToPadding){canvas.restoreToCount(saveCount);this.mGroupFlags|=AbsListView.CLIP_TO_PADDING_MASK;}}},{key:'isPaddingOffsetRequired',value:function isPaddingOffsetRequired(){return (this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)!=AbsListView.CLIP_TO_PADDING_MASK;}},{key:'getLeftPaddingOffset',value:function getLeftPaddingOffset(){return (this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:-this.mPaddingLeft;}},{key:'getTopPaddingOffset',value:function getTopPaddingOffset(){return (this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:-this.mPaddingTop;}},{key:'getRightPaddingOffset',value:function getRightPaddingOffset(){return (this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:this.mPaddingRight;}},{key:'getBottomPaddingOffset',value:function getBottomPaddingOffset(){return (this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:this.mPaddingBottom;}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){if(this.getChildCount()>0){this.mDataChanged=true;this.rememberSyncState();}}},{key:'touchModeDrawsInPressedState',value:function touchModeDrawsInPressedState(){switch(this.mTouchMode){case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:return true;default:return false;}}},{key:'shouldShowSelector',value:function shouldShowSelector(){return !this.isInTouchMode()||this.touchModeDrawsInPressedState()&&this.isPressed();}},{key:'drawSelector',value:function drawSelector(canvas){if(!this.mSelectorRect.isEmpty()){var selector=this.mSelector;selector.setBounds(this.mSelectorRect);selector.draw(canvas);}}},{key:'setDrawSelectorOnTop',value:function setDrawSelectorOnTop(onTop){this.mDrawSelectorOnTop=onTop;}},{key:'setSelector',value:function setSelector(sel){if(this.mSelector!=null){this.mSelector.setCallback(null);this.unscheduleDrawable(this.mSelector);}this.mSelector=sel;var padding=new Rect();sel.getPadding(padding);this.mSelectionLeftPadding=padding.left;this.mSelectionTopPadding=padding.top;this.mSelectionRightPadding=padding.right;this.mSelectionBottomPadding=padding.bottom;sel.setCallback(this);this.updateSelectorState();}},{key:'getSelector',value:function getSelector(){return this.mSelector;}},{key:'keyPressed',value:function keyPressed(){if(!this.isEnabled()||!this.isClickable()){return;}var selector=this.mSelector;var selectorRect=this.mSelectorRect;if(selector!=null&&(this.isFocused()||this.touchModeDrawsInPressedState())&&!selectorRect.isEmpty()){var v=this.getChildAt(this.mSelectedPosition-this.mFirstPosition);if(v!=null){if(v.hasFocusable())return;v.setPressed(true);}this.setPressed(true);var longClickable=this.isLongClickable();var d=selector.getCurrent();if(longClickable&&!this.mDataChanged){if(this.mPendingCheckForKeyLongPress==null){this.mPendingCheckForKeyLongPress=new AbsListView.CheckForKeyLongPress(this);}this.mPendingCheckForKeyLongPress.rememberWindowAttachCount();this.postDelayed(this.mPendingCheckForKeyLongPress,ViewConfiguration.getLongPressTimeout());}}}},{key:'setScrollIndicators',value:function setScrollIndicators(up,down){this.mScrollUp=up;this.mScrollDown=down;}},{key:'updateSelectorState',value:function updateSelectorState(){if(this.mSelector!=null){if(this.shouldShowSelector()){this.mSelector.setState(this.getDrawableState());}else {this.mSelector.setState(StateSet.NOTHING);}}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(AbsListView.prototype),'drawableStateChanged',this).call(this);this.updateSelectorState();}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if(this.mIsChildViewEnabled){return _get2(Object.getPrototypeOf(AbsListView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}var enabledState=AbsListView.ENABLED_STATE_SET[0];var state=_get2(Object.getPrototypeOf(AbsListView.prototype),'onCreateDrawableState',this).call(this,extraSpace+1);var enabledPos=-1;for(var i=state.length-1;i>=0;i--){if(state[i]==enabledState){enabledPos=i;break;}}if(enabledPos>=0){System.arraycopy(state,enabledPos+1,state,enabledPos,state.length-enabledPos-1);}return state;}},{key:'verifyDrawable',value:function verifyDrawable(dr){return this.mSelector==dr||_get2(Object.getPrototypeOf(AbsListView.prototype),'verifyDrawable',this).call(this,dr);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(Object.getPrototypeOf(AbsListView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mSelector!=null)this.mSelector.jumpToCurrentState();}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(Object.getPrototypeOf(AbsListView.prototype),'onAttachedToWindow',this).call(this);var treeObserver=this.getViewTreeObserver();treeObserver.addOnTouchModeChangeListener(this);if(this.mAdapter!=null&&this.mDataSetObserver==null){this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mDataChanged=true;this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(AbsListView.prototype),'onDetachedFromWindow',this).call(this);this.dismissPopup();this.mRecycler.clear();var treeObserver=this.getViewTreeObserver();treeObserver.removeOnTouchModeChangeListener(this);if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);this.mDataSetObserver=null;}if(this.mFlingRunnable!=null){this.removeCallbacks(this.mFlingRunnable);}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mClearScrollingCache!=null){this.removeCallbacks(this.mClearScrollingCache);}if(this.mPerformClick_!=null){this.removeCallbacks(this.mPerformClick_);}if(this.mTouchModeReset!=null){this.removeCallbacks(this.mTouchModeReset);this.mTouchModeReset.run();}}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){_get2(Object.getPrototypeOf(AbsListView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);var touchMode=this.isInTouchMode()?AbsListView.TOUCH_MODE_ON:AbsListView.TOUCH_MODE_OFF;if(!hasWindowFocus){this.setChildrenDrawingCacheEnabled(false);if(this.mFlingRunnable!=null){this.removeCallbacks(this.mFlingRunnable);this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentCaches();this.finishGlows();this.invalidate();}}this.dismissPopup();if(touchMode==AbsListView.TOUCH_MODE_OFF){this.mResurrectToPosition=this.mSelectedPosition;}}else {if(this.mFiltered&&!this.mPopupHidden){this.showPopup();}if(touchMode!=this.mLastTouchMode&&this.mLastTouchMode!=AbsListView.TOUCH_MODE_UNKNOWN){if(touchMode==AbsListView.TOUCH_MODE_OFF){this.resurrectSelection();}else {this.hideSelector();this.mLayoutMode=AbsListView.LAYOUT_NORMAL;this.layoutChildren();}}}this.mLastTouchMode=touchMode;}},{key:'onCancelPendingInputEvents',value:function onCancelPendingInputEvents(){_get2(Object.getPrototypeOf(AbsListView.prototype),'onCancelPendingInputEvents',this).call(this);if(this.mPerformClick_!=null){this.removeCallbacks(this.mPerformClick_);}if(this.mPendingCheckForTap_!=null){this.removeCallbacks(this.mPendingCheckForTap_);}if(this.mPendingCheckForLongPress_List!=null){this.removeCallbacks(this.mPendingCheckForLongPress_List);}if(this.mPendingCheckForKeyLongPress!=null){this.removeCallbacks(this.mPendingCheckForKeyLongPress);}}},{key:'performLongPress',value:function performLongPress(child,longPressPosition,longPressId){var handled=false;if(this.mOnItemLongClickListener!=null){handled=this.mOnItemLongClickListener.onItemLongClick(this,child,longPressPosition,longPressId);}if(handled){this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);}return handled;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(KeyEvent.isConfirmKey(keyCode)){if(!this.isEnabled()){return true;}if(this.isClickable()&&this.isPressed()&&this.mSelectedPosition>=0&&this.mAdapter!=null&&this.mSelectedPosition=0;i--){var child=this.getChildAt(i);if(child.getVisibility()==View.VISIBLE){child.getHitRect(frame);if(frame.contains(x,y)){return this.mFirstPosition+i;}}}return AbsListView.INVALID_POSITION;}},{key:'pointToRowId',value:function pointToRowId(x,y){var position=this.pointToPosition(x,y);if(position>=0){return this.mAdapter.getItemId(position);}return AbsListView.INVALID_ROW_ID;}},{key:'checkOverScrollStartScrollIfNeeded',value:function checkOverScrollStartScrollIfNeeded(){return this.mScrollY!=0;}},{key:'startScrollIfNeeded',value:function startScrollIfNeeded(y){var deltaY=y-this.mMotionY;var distance=Math.abs(deltaY);var overscroll=this.checkOverScrollStartScrollIfNeeded();if(overscroll||distance>this.mTouchSlop){this.createScrollingCache();if(this.mScrollY!=0){this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;this.mMotionCorrection=0;}else {this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;this.mMotionCorrection=deltaY>0?this.mTouchSlop:-this.mTouchSlop;}this.removeCallbacks(this.mPendingCheckForLongPress_List);this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}this.scrollIfNeeded(y);return true;}return false;}},{key:'scrollIfNeeded',value:function scrollIfNeeded(y){var rawDeltaY=y-this.mMotionY;var deltaY=rawDeltaY-this.mMotionCorrection;var incrementalDeltaY=this.mLastY!=Integer.MIN_VALUE?y-this.mLastY:deltaY;if(this.mTouchMode==AbsListView.TOUCH_MODE_SCROLL){if(AbsListView.PROFILE_SCROLLING){if(!this.mScrollProfilingStarted){this.mScrollProfilingStarted=true;}}if(y!=this.mLastY){if((this.mGroupFlags&AbsListView.FLAG_DISALLOW_INTERCEPT)==0&&Math.abs(rawDeltaY)>this.mTouchSlop){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}var motionIndex=undefined;if(this.mMotionPosition>=0){motionIndex=this.mMotionPosition-this.mFirstPosition;}else {motionIndex=this.getChildCount()/2;}var motionViewPrevTop=0;var motionView=this.getChildAt(motionIndex);if(motionView!=null){motionViewPrevTop=motionView.getTop();}var atEdge=false;if(incrementalDeltaY!=0){atEdge=this.trackMotionScroll(deltaY,incrementalDeltaY);}motionView=this.getChildAt(motionIndex);if(motionView!=null){var motionViewRealTop=motionView.getTop();if(atEdge){var overscroll=-incrementalDeltaY-(motionViewRealTop-motionViewPrevTop);this.overScrollBy(0,overscroll,0,this.mScrollY,0,0,0,this.mOverscrollDistance,true);if(Math.abs(this.mOverscrollDistance)==Math.abs(this.mScrollY)){if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}var overscrollMode=this.getOverScrollMode();if(overscrollMode==AbsListView.OVER_SCROLL_ALWAYS||overscrollMode==AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS&&!this.contentFits()){this.mDirection=0;this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;if(rawDeltaY>0){}else if(rawDeltaY<0){}}}this.mMotionY=y;}this.mLastY=y;}}else if(this.mTouchMode==AbsListView.TOUCH_MODE_OVERSCROLL){if(y!=this.mLastY){var oldScroll=this.mScrollY;var newScroll=oldScroll-incrementalDeltaY;var newDirection=y>this.mLastY?1:-1;if(this.mDirection==0){this.mDirection=newDirection;}var overScrollDistance=-incrementalDeltaY;if(newScroll<0&&oldScroll>=0||newScroll>0&&oldScroll<=0){overScrollDistance=-oldScroll;incrementalDeltaY+=overScrollDistance;}else {incrementalDeltaY=0;}if(overScrollDistance!=0){this.overScrollBy(0,overScrollDistance,0,this.mScrollY,0,0,0,this.mOverscrollDistance,true);}if(incrementalDeltaY!=0){if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentIfNeeded();}this.trackMotionScroll(incrementalDeltaY,incrementalDeltaY);this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;var motionPosition=this.findClosestMotionRow(y);this.mMotionCorrection=0;var _motionView=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=_motionView!=null?_motionView.getTop():0;this.mMotionY=y;this.mMotionPosition=motionPosition;}this.mLastY=y;this.mDirection=newDirection;}}}},{key:'onTouchModeChanged',value:function onTouchModeChanged(isInTouchMode){if(isInTouchMode){this.hideSelector();if(this.getHeight()>0&&this.getChildCount()>0){this.layoutChildren();}this.updateSelectorState();}else {var touchMode=this.mTouchMode;if(touchMode==AbsListView.TOUCH_MODE_OVERSCROLL||touchMode==AbsListView.TOUCH_MODE_OVERFLING){if(this.mFlingRunnable!=null){this.mFlingRunnable.endFling();}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentCaches();this.finishGlows();this.invalidate();}}}}},{key:'onTouchEvent',value:function onTouchEvent(ev){if(!this.isEnabled()){return this.isClickable()||this.isLongClickable();}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(!this.isAttachedToWindow()){return false;}this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var actionMasked=ev.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_DOWN:{this.onTouchDown(ev);break;}case MotionEvent.ACTION_MOVE:{this.onTouchMove(ev);break;}case MotionEvent.ACTION_UP:{this.onTouchUp(ev);break;}case MotionEvent.ACTION_CANCEL:{this.onTouchCancel();break;}case MotionEvent.ACTION_POINTER_UP:{this.onSecondaryPointerUp(ev);var x=this.mMotionX;var y=this.mMotionY;var motionPosition=this.pointToPosition(x,y);if(motionPosition>=0){var child=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=child.getTop();this.mMotionPosition=motionPosition;}this.mLastY=y;break;}case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();var id=ev.getPointerId(index);var _x169=Math.floor(ev.getX(index));var _y2=Math.floor(ev.getY(index));this.mMotionCorrection=0;this.mActivePointerId=id;this.mMotionX=_x169;this.mMotionY=_y2;var _motionPosition=this.pointToPosition(_x169,_y2);if(_motionPosition>=0){var _child13=this.getChildAt(_motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=_child13.getTop();this.mMotionPosition=_motionPosition;}this.mLastY=_y2;break;}}return true;}},{key:'onTouchDown',value:function onTouchDown(ev){this.mActivePointerId=ev.getPointerId(0);if(this.mTouchMode==AbsListView.TOUCH_MODE_OVERFLING){this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;this.mMotionX=Math.floor(ev.getX());this.mMotionY=Math.floor(ev.getY());this.mLastY=this.mMotionY;this.mMotionCorrection=0;this.mDirection=0;}else {var x=Math.floor(ev.getX());var y=Math.floor(ev.getY());var motionPosition=this.pointToPosition(x,y);if(!this.mDataChanged){if(this.mTouchMode==AbsListView.TOUCH_MODE_FLING){this.createScrollingCache();this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;this.mMotionCorrection=0;motionPosition=this.findMotionRow(y);this.mFlingRunnable.flywheelTouch();}else if(motionPosition>=0&&this.getAdapter().isEnabled(motionPosition)){this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;if(this.mPendingCheckForTap_==null){this.mPendingCheckForTap_=new AbsListView.CheckForTap(this);}this.postDelayed(this.mPendingCheckForTap_,ViewConfiguration.getTapTimeout());}else if(motionPosition<0){this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;}}if(motionPosition>=0){var v=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=v.getTop();}this.mMotionX=x;this.mMotionY=y;this.mMotionPosition=motionPosition;this.mLastY=Integer.MIN_VALUE;}if(this.mTouchMode==AbsListView.TOUCH_MODE_DOWN&&this.mMotionPosition!=AbsListView.INVALID_POSITION&&this.performButtonActionOnTouchDown(ev)){this.removeCallbacks(this.mPendingCheckForTap_);}}},{key:'onTouchMove',value:function onTouchMove(ev){var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){pointerIndex=0;this.mActivePointerId=ev.getPointerId(pointerIndex);}if(this.mDataChanged){this.layoutChildren();}var y=Math.floor(ev.getY(pointerIndex));switch(this.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:if(this.startScrollIfNeeded(y)){break;}var x=ev.getX(pointerIndex);if(!this.pointInView(x,y,this.mTouchSlop)){this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.removeCallbacks(this.mTouchMode==AbsListView.TOUCH_MODE_DOWN?this.mPendingCheckForTap_:this.mPendingCheckForLongPress_List);this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;this.updateSelectorState();}break;case AbsListView.TOUCH_MODE_SCROLL:case AbsListView.TOUCH_MODE_OVERSCROLL:this.scrollIfNeeded(y);break;}}},{key:'onTouchUp',value:function onTouchUp(ev){var _this106=this;switch(this.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:var motionPosition=this.mMotionPosition;var child=this.getChildAt(motionPosition-this.mFirstPosition);if(child!=null){if(this.mTouchMode!=AbsListView.TOUCH_MODE_DOWN){child.setPressed(false);}var x=ev.getX();var inList=x>this.mListPadding.left&&x0){var firstChildTop=this.getChildAt(0).getTop();var lastChildBottom=this.getChildAt(childCount-1).getBottom();var contentTop=this.mListPadding.top;var contentBottom=this.getHeight()-this.mListPadding.bottom;if(this.mFirstPosition==0&&firstChildTop>=contentTop&&this.mFirstPosition+childCountthis.mMinimumVelocity&&!(this.mFirstPosition==0&&firstChildTop==contentTop-this.mOverscrollDistance||this.mFirstPosition+childCount==this.mItemCount&&lastChildBottom==contentBottom+this.mOverscrollDistance)){if(this.mFlingRunnable==null){this.mFlingRunnable=new AbsListView.FlingRunnable(this);}this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);this.mFlingRunnable.start(-_initialVelocity);}else {this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);if(this.mFlingRunnable!=null){this.mFlingRunnable.endFling();}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}}}}else {this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);}break;case AbsListView.TOUCH_MODE_OVERSCROLL:if(this.mFlingRunnable==null){this.mFlingRunnable=new AbsListView.FlingRunnable(this);}var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getYVelocity(this.mActivePointerId));this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);if(Math.abs(initialVelocity)>this.mMinimumVelocity){this.mFlingRunnable.startOverfling(-initialVelocity);}else {this.mFlingRunnable.startSpringback();}break;}this.setPressed(false);this.invalidate();this.removeCallbacks(this.mPendingCheckForLongPress_List);this.recycleVelocityTracker();this.mActivePointerId=AbsListView.INVALID_POINTER;if(AbsListView.PROFILE_SCROLLING){if(this.mScrollProfilingStarted){this.mScrollProfilingStarted=false;}}}},{key:'onTouchCancel',value:function onTouchCancel(){switch(this.mTouchMode){case AbsListView.TOUCH_MODE_OVERSCROLL:if(this.mFlingRunnable==null){this.mFlingRunnable=new AbsListView.FlingRunnable(this);}this.mFlingRunnable.startSpringback();break;case AbsListView.TOUCH_MODE_OVERFLING:break;default:this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.clearScrollingCache();this.removeCallbacks(this.mPendingCheckForLongPress_List);this.recycleVelocityTracker();}this.mActivePointerId=AbsListView.INVALID_POINTER;}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(this.mScrollY!=scrollY){this.onScrollChanged(this.mScrollX,scrollY,this.mScrollX,this.mScrollY);this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.awakenScrollBars();}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(event.isPointerEvent()){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(this.mTouchMode==AbsListView.TOUCH_MODE_REST){var vscroll=event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(vscroll!=0){var delta=Math.floor(vscroll*this.getVerticalScrollFactor());if(!this.trackMotionScroll(delta,delta)){return true;}}}}}}return _get2(Object.getPrototypeOf(AbsListView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'draw',value:function draw(canvas){_get2(Object.getPrototypeOf(AbsListView.prototype),'draw',this).call(this,canvas);}},{key:'setOverScrollEffectPadding',value:function setOverScrollEffectPadding(leftPadding,rightPadding){this.mGlowPaddingLeft=leftPadding;this.mGlowPaddingRight=rightPadding;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else {this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(Object.getPrototypeOf(AbsListView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();var v=undefined;if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(!this.isAttachedToWindow()){return false;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{var touchMode=this.mTouchMode;if(touchMode==AbsListView.TOUCH_MODE_OVERFLING||touchMode==AbsListView.TOUCH_MODE_OVERSCROLL){this.mMotionCorrection=0;return true;}var x=Math.floor(ev.getX());var y=Math.floor(ev.getY());this.mActivePointerId=ev.getPointerId(0);var motionPosition=this.findMotionRow(y);if(touchMode!=AbsListView.TOUCH_MODE_FLING&&motionPosition>=0){v=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=v.getTop();this.mMotionX=x;this.mMotionY=y;this.mMotionPosition=motionPosition;this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;this.clearScrollingCache();}this.mLastY=Integer.MIN_VALUE;this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);if(touchMode==AbsListView.TOUCH_MODE_FLING){return true;}break;}case MotionEvent.ACTION_MOVE:{switch(this.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){pointerIndex=0;this.mActivePointerId=ev.getPointerId(pointerIndex);}var y=Math.floor(ev.getY(pointerIndex));this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);if(this.startScrollIfNeeded(y)){return true;}break;}break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:{this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.mActivePointerId=AbsListView.INVALID_POINTER;this.recycleVelocityTracker();this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);break;}case MotionEvent.ACTION_POINTER_UP:{this.onSecondaryPointerUp(ev);break;}}return false;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mMotionX=Math.floor(ev.getX(newPointerIndex));this.mMotionY=Math.floor(ev.getY(newPointerIndex));this.mMotionCorrection=0;this.mActivePointerId=ev.getPointerId(newPointerIndex);}}},{key:'addTouchables',value:function addTouchables(views){var count=this.getChildCount();var firstPosition=this.mFirstPosition;var adapter=this.mAdapter;if(adapter==null){return;}for(var i=0;i0){this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}}else {this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);this.mFlingRunnable.startScroll(distance,duration,linear);}}},{key:'smoothScrollByOffset',value:function smoothScrollByOffset(position){var index=-1;if(position<0){index=this.getFirstVisiblePosition();}else if(position>0){index=this.getLastVisiblePosition();}if(index>-1){var child=this.getChildAt(index-this.getFirstVisiblePosition());if(child!=null){var visibleRect=new Rect();if(child.getGlobalVisibleRect(visibleRect)){var childRectArea=child.getWidth()*child.getHeight();var visibleRectArea=visibleRect.width()*visibleRect.height();var visibleArea=visibleRectArea/childRectArea;var visibleThreshold=0.75;if(position<0&&visibleArea0&&visibleArea0){var lastBottom=this.getChildAt(childCount-1).getBottom();var lastPosition=firstPosition+childCount;return lastPositionthis.getHeight()-listPadding.bottom;}else {var firstTop=this.getChildAt(0).getTop();return firstPosition>0||firstTop=listPadding.top&&incrementalDeltaY>=0;var cannotScrollUp=firstPosition+childCount==this.mItemCount&&lastBottom<=this.getHeight()-listPadding.bottom&&incrementalDeltaY<=0;if(cannotScrollDown||cannotScrollUp){return incrementalDeltaY!=0;}var down=incrementalDeltaY<0;var inTouchMode=this.isInTouchMode();if(inTouchMode){this.hideSelector();}var headerViewsCount=this.getHeaderViewsCount();var footerViewsStart=this.mItemCount-this.getFooterViewsCount();var start=0;var count=0;if(down){var top=-incrementalDeltaY;if((this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK){top+=listPadding.top;}for(var i=0;i=top){break;}else {count++;var position=firstPosition+i;if(position>=headerViewsCount&&position=0;_i36--){var _child14=this.getChildAt(_i36);if(_child14.getTop()<=bottom){break;}else {start=_i36;count++;var _position2=firstPosition+_i36;if(_position2>=headerViewsCount&&_position20){this.detachViewsFromParent(start,count);this.mRecycler.removeSkippedScrap();}if(!this.awakenScrollBars()){this.invalidate();}this.offsetChildrenTopAndBottom(incrementalDeltaY);if(down){this.mFirstPosition+=count;}var absIncrementalDeltaY=Math.abs(incrementalDeltaY);if(spaceAbove=0&&childIndex=0&&_childIndex=0&&this.mNextSelectedPosition!=this.mSelectedPosition){this.mResurrectToPosition=this.mNextSelectedPosition;}this.setSelectedPositionInt(AbsListView.INVALID_POSITION);this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);this.mSelectedTop=0;}}},{key:'reconcileSelectedPosition',value:function reconcileSelectedPosition(){var position=this.mSelectedPosition;if(position<0){position=this.mResurrectToPosition;}position=Math.max(0,position);position=Math.min(position,this.mItemCount-1);return position;}},{key:'findClosestMotionRow',value:function findClosestMotionRow(y){var childCount=this.getChildCount();if(childCount==0){return AbsListView.INVALID_POSITION;}var motionRow=this.findMotionRow(y);return motionRow!=AbsListView.INVALID_POSITION?motionRow:this.mFirstPosition+childCount-1;}},{key:'invalidateViews',value:function invalidateViews(){this.mDataChanged=true;this.rememberSyncState();this.requestLayout();this.invalidate();}},{key:'resurrectSelectionIfNeeded',value:function resurrectSelectionIfNeeded(){if(this.mSelectedPosition<0&&this.resurrectSelection()){this.updateSelectorState();return true;}return false;}},{key:'resurrectSelection',value:function resurrectSelection(){var childCount=this.getChildCount();if(childCount<=0){return false;}var selectedTop=0;var selectedPos=undefined;var childrenTop=this.mListPadding.top;var childrenBottom=this.mBottom-this.mTop-this.mListPadding.bottom;var firstPosition=this.mFirstPosition;var toPosition=this.mResurrectToPosition;var down=true;if(toPosition>=firstPosition&&toPositionchildrenBottom){selectedTop=childrenBottom-selected.getMeasuredHeight()-this.getVerticalFadingEdgeLength();}}else {if(toPosition0||top=childrenTop){selectedPos=firstPosition+i;selectedTop=top;break;}}}else {var itemCount=this.mItemCount;down=false;selectedPos=firstPosition+childCount-1;for(var _i37=childCount-1;_i37>=0;_i37--){var _v3=this.getChildAt(_i37);var _top=_v3.getTop();var bottom=_v3.getBottom();if(_i37==childCount-1){selectedTop=_top;if(firstPosition+childCountchildrenBottom){childrenBottom-=this.getVerticalFadingEdgeLength();}}if(bottom<=childrenBottom){selectedPos=firstPosition+_i37;selectedTop=_top;break;}}}}this.mResurrectToPosition=AbsListView.INVALID_POSITION;this.removeCallbacks(this.mFlingRunnable);if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.clearScrollingCache();this.mSpecificTop=selectedTop;selectedPos=this.lookForSelectablePosition(selectedPos,down);if(selectedPos>=firstPosition&&selectedPos<=this.getLastVisiblePosition()){this.mLayoutMode=AbsListView.LAYOUT_SPECIFIC;this.updateSelectorState();this.setSelectionInt(selectedPos);this.invokeOnItemScrollListener();}else {selectedPos=AbsListView.INVALID_POSITION;}this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);return selectedPos>=0;}},{key:'confirmCheckedPositionsById',value:function confirmCheckedPositionsById(){this.mCheckStates.clear();var checkedCountChanged=false;for(var checkedIndex=0;checkedIndex0){var newPos=undefined;var selectablePos=undefined;if(this.mNeedSync){this.mNeedSync=false;this.mPendingSync=null;if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL){this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}else if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_NORMAL){if(this.mForceTranscriptScroll){this.mForceTranscriptScroll=false;this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}var childCount=this.getChildCount();var listBottom=this.getHeight()-this.getPaddingBottom();var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild!=null?lastChild.getBottom():listBottom;if(this.mFirstPosition+childCount>=lastHandledItemCount&&lastBottom<=listBottom){this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}this.awakenScrollBars();}switch(this.mSyncMode){case AbsListView.SYNC_SELECTED_POSITION:if(this.isInTouchMode()){this.mLayoutMode=AbsListView.LAYOUT_SYNC;this.mSyncPosition=Math.min(Math.max(0,this.mSyncPosition),count-1);return;}else {newPos=this.findSyncPosition();if(newPos>=0){selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos==newPos){this.mSyncPosition=newPos;if(this.mSyncHeight==this.getHeight()){this.mLayoutMode=AbsListView.LAYOUT_SYNC;}else {this.mLayoutMode=AbsListView.LAYOUT_SET_SELECTION;}this.setNextSelectedPositionInt(newPos);return;}}}break;case AbsListView.SYNC_FIRST_POSITION:this.mLayoutMode=AbsListView.LAYOUT_SYNC;this.mSyncPosition=Math.min(Math.max(0,this.mSyncPosition),count-1);return;}}if(!this.isInTouchMode()){newPos=this.getSelectedItemPosition();if(newPos>=count){newPos=count-1;}if(newPos<0){newPos=0;}selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos>=0){this.setNextSelectedPositionInt(selectablePos);return;}else {selectablePos=this.lookForSelectablePosition(newPos,false);if(selectablePos>=0){this.setNextSelectedPositionInt(selectablePos);return;}}}else {if(this.mResurrectToPosition>=0){return;}}}this.mLayoutMode=this.mStackFromBottom?AbsListView.LAYOUT_FORCE_BOTTOM:AbsListView.LAYOUT_FORCE_TOP;this.mSelectedPosition=AbsListView.INVALID_POSITION;this.mSelectedRowId=AbsListView.INVALID_ROW_ID;this.mNextSelectedPosition=AbsListView.INVALID_POSITION;this.mNextSelectedRowId=AbsListView.INVALID_ROW_ID;this.mNeedSync=false;this.mPendingSync=null;this.mSelectorPosition=AbsListView.INVALID_POSITION;this.checkSelectionChanged();}},{key:'onDisplayHint',value:function onDisplayHint(hint){_get2(Object.getPrototypeOf(AbsListView.prototype),'onDisplayHint',this).call(this,hint);this.mPopupHidden=hint==AbsListView.INVISIBLE;}},{key:'dismissPopup',value:function dismissPopup(){}},{key:'showPopup',value:function showPopup(){}},{key:'positionPopup',value:function positionPopup(){}},{key:'isInFilterMode',value:function isInFilterMode(){return this.mFiltered;}},{key:'hasTextFilter',value:function hasTextFilter(){return this.mFiltered;}},{key:'onGlobalLayout',value:function onGlobalLayout(){if(this.isShown()){}else {}}},{key:'generateDefaultLayoutParams',value:function generateDefaultLayoutParams(){return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT,0);}},{key:'generateLayoutParams',value:function generateLayoutParams(p){return new AbsListView.LayoutParams(p);}},{key:'checkLayoutParams',value:function checkLayoutParams(p){return p instanceof AbsListView.LayoutParams;}},{key:'setTranscriptMode',value:function setTranscriptMode(mode){this.mTranscriptMode=mode;}},{key:'getTranscriptMode',value:function getTranscriptMode(){return this.mTranscriptMode;}},{key:'getSolidColor',value:function getSolidColor(){return this.mCacheColorHint;}},{key:'setCacheColorHint',value:function setCacheColorHint(color){if(color!=this.mCacheColorHint){this.mCacheColorHint=color;var count=this.getChildCount();for(var i=0;ithis._mOverflingDistance)return overDistance;return this._mOverflingDistance;},set:function set(value){this._mOverflingDistance=value;}}],[{key:'getDistance',value:function getDistance(source,dest,direction){var sX=undefined,sY=undefined;var dX=undefined,dY=undefined;switch(direction){case View.FOCUS_RIGHT:sX=source.right;sY=source.top+source.height()/2;dX=dest.left;dY=dest.top+dest.height()/2;break;case View.FOCUS_DOWN:sX=source.left+source.width()/2;sY=source.bottom;dX=dest.left+dest.width()/2;dY=dest.top;break;case View.FOCUS_LEFT:sX=source.left;sY=source.top+source.height()/2;dX=dest.right;dY=dest.top+dest.height()/2;break;case View.FOCUS_UP:sX=source.left+source.width()/2;sY=source.top;dX=dest.left+dest.width()/2;dY=dest.bottom;break;case View.FOCUS_FORWARD:case View.FOCUS_BACKWARD:sX=source.right+source.width()/2;sY=source.top+source.height()/2;dX=dest.left+dest.width()/2;dY=dest.top+dest.height()/2;break;default:throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")');}var deltaX=dX-sX;var deltaY=dY-sY;return deltaY*deltaY+deltaX*deltaX;}},{key:'retrieveFromScrap',value:function retrieveFromScrap(scrapViews,position){var size=scrapViews.size();if(size>0){for(var i=0;i0&&motionPosition!=AbsListView.INVALID_POSITION&&motionPosition=0){var index=this._AbsListView_this.mSelectedPosition-this._AbsListView_this.mFirstPosition;var v=this._AbsListView_this.getChildAt(index);if(!this._AbsListView_this.mDataChanged){var handled=false;if(this.sameWindow()){handled=this._AbsListView_this.performLongPress(v,this._AbsListView_this.mSelectedPosition,this._AbsListView_this.mSelectedRowId);}if(handled){this._AbsListView_this.setPressed(false);v.setPressed(false);}}else {this._AbsListView_this.setPressed(false);if(v!=null)v.setPressed(false);}}}}]);return CheckForKeyLongPress;}(AbsListView.WindowRunnnable);AbsListView.CheckForKeyLongPress=CheckForKeyLongPress;var CheckForTap=function(){function CheckForTap(arg){_classCallCheck(this,CheckForTap);this._AbsListView_this=arg;}_createClass(CheckForTap,[{key:'run',value:function run(){if(this._AbsListView_this.mTouchMode==AbsListView.TOUCH_MODE_DOWN){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_TAP;var child=this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition-this._AbsListView_this.mFirstPosition);if(child!=null&&!child.hasFocusable()){this._AbsListView_this.mLayoutMode=AbsListView.LAYOUT_NORMAL;if(!this._AbsListView_this.mDataChanged){child.setPressed(true);this._AbsListView_this.setPressed(true);this._AbsListView_this.layoutChildren();this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition,child);this._AbsListView_this.refreshDrawableState();var longPressTimeout=ViewConfiguration.getLongPressTimeout();var longClickable=this._AbsListView_this.isLongClickable();if(this._AbsListView_this.mSelector!=null){var d=this._AbsListView_this.mSelector.getCurrent();}if(longClickable){if(this._AbsListView_this.mPendingCheckForLongPress_List==null){this._AbsListView_this.mPendingCheckForLongPress_List=new AbsListView.CheckForLongPress(this._AbsListView_this);}this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount();this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List,longPressTimeout);}else {this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;}}else {this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;}}}}}]);return CheckForTap;}();AbsListView.CheckForTap=CheckForTap;var FlingRunnable=function(){function FlingRunnable(arg){var _this111=this;_classCallCheck(this,FlingRunnable);this.mLastFlingY=0;this.mCheckFlywheel=function(){var _this=_this111;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){var activeId=_this._AbsListView_this.mActivePointerId;var vt=_this._AbsListView_this.mVelocityTracker;var scroller=_this.mScroller;if(vt==null||activeId==AbsListView.INVALID_POINTER){return;}vt.computeCurrentVelocity(1000,_this._AbsListView_this.mMaximumVelocity);var yvel=-vt.getYVelocity(activeId);if(Math.abs(yvel)>=_this._AbsListView_this.mMinimumVelocity&&scroller.isScrollingInDirection(0,yvel)){_this._AbsListView_this.postDelayed(_this,FlingRunnable.FLYWHEEL_TIMEOUT);}else {_this.endFling();_this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;_this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);}}}]);return _Inner;}();return new _Inner();}();this._AbsListView_this=arg;this.mScroller=new OverScroller();}_createClass(FlingRunnable,[{key:'start',value:function start(initialVelocity){var initialY=initialVelocity<0?Integer.MAX_VALUE:0;this.mLastFlingY=initialY;this.mScroller.setInterpolator(null);this.mScroller.fling(0,initialY,0,initialVelocity,0,Integer.MAX_VALUE,0,Integer.MAX_VALUE);this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_FLING;this._AbsListView_this.postOnAnimation(this);if(AbsListView.PROFILE_FLINGING){if(!this._AbsListView_this.mFlingProfilingStarted){this._AbsListView_this.mFlingProfilingStarted=true;}}}},{key:'startSpringback',value:function startSpringback(){if(this.mScroller.springBack(0,this._AbsListView_this.mScrollY,0,0,0,0)){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}else {this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);}}},{key:'startOverfling',value:function startOverfling(initialVelocity){this.mScroller.setInterpolator(null);var minY=Integer.MIN_VALUE,maxY=Integer.MAX_VALUE;if(this._AbsListView_this.mScrollY<0)minY=0;else if(this._AbsListView_this.mScrollY>0)maxY=0;this.mScroller.fling(0,this._AbsListView_this.mScrollY,0,initialVelocity,0,0,minY,maxY,0,this._AbsListView_this.getHeight());this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}},{key:'edgeReached',value:function edgeReached(delta){this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY,0,this._AbsListView_this.mOverflingDistance);var overscrollMode=this._AbsListView_this.getOverScrollMode();if(overscrollMode==AbsListView.OVER_SCROLL_ALWAYS||overscrollMode==AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS&&!this._AbsListView_this.contentFits()){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;}else {this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;if(this._AbsListView_this.mPositionScroller!=null){this._AbsListView_this.mPositionScroller.stop();}}this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}},{key:'startScroll',value:function startScroll(distance,duration,linear){var initialY=distance<0?Integer.MAX_VALUE:0;this.mLastFlingY=initialY;this.mScroller.setInterpolator(linear?AbsListView.sLinearInterpolator:null);this.mScroller.startScroll(0,initialY,0,distance,duration);this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_FLING;this._AbsListView_this.postOnAnimation(this);}},{key:'endFling',value:function endFling(){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;this._AbsListView_this.removeCallbacks(this);this._AbsListView_this.removeCallbacks(this.mCheckFlywheel);this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);this._AbsListView_this.clearScrollingCache();this.mScroller.abortAnimation();}},{key:'flywheelTouch',value:function flywheelTouch(){this._AbsListView_this.postDelayed(this.mCheckFlywheel,FlingRunnable.FLYWHEEL_TIMEOUT);}},{key:'run',value:function run(){switch(this._AbsListView_this.mTouchMode){default:this.endFling();return;case AbsListView.TOUCH_MODE_SCROLL:if(this.mScroller.isFinished()){return;}case AbsListView.TOUCH_MODE_FLING:{if(this._AbsListView_this.mDataChanged){this._AbsListView_this.layoutChildren();}if(this._AbsListView_this.mItemCount==0||this._AbsListView_this.getChildCount()==0){this.endFling();return;}var scroller=this.mScroller;var more=scroller.computeScrollOffset();var y=scroller.getCurrY();var delta=this.mLastFlingY-y;if(delta>0){this._AbsListView_this.mMotionPosition=this._AbsListView_this.mFirstPosition;var firstView=this._AbsListView_this.getChildAt(0);this._AbsListView_this.mMotionViewOriginalTop=firstView.getTop();delta=Math.min(this._AbsListView_this.getHeight()-this._AbsListView_this.mPaddingBottom-this._AbsListView_this.mPaddingTop-1,delta);}else {var offsetToLast=this._AbsListView_this.getChildCount()-1;this._AbsListView_this.mMotionPosition=this._AbsListView_this.mFirstPosition+offsetToLast;var lastView=this._AbsListView_this.getChildAt(offsetToLast);this._AbsListView_this.mMotionViewOriginalTop=lastView.getTop();delta=Math.max(-(this._AbsListView_this.getHeight()-this._AbsListView_this.mPaddingBottom-this._AbsListView_this.mPaddingTop-1),delta);}var motionView=this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition-this._AbsListView_this.mFirstPosition);var oldTop=0;if(motionView!=null){oldTop=motionView.getTop();}var atEdge=this._AbsListView_this.trackMotionScroll(delta,delta);var atEnd=atEdge&&delta!=0;if(atEnd){if(motionView!=null){var overshoot=-(delta-(motionView.getTop()-oldTop));this._AbsListView_this.overScrollBy(0,overshoot,0,this._AbsListView_this.mScrollY,0,0,0,this._AbsListView_this.mOverflingDistance,false);}if(more){this.edgeReached(delta);}break;}if(more&&!atEnd){if(atEdge)this._AbsListView_this.invalidate();this.mLastFlingY=y;this._AbsListView_this.postOnAnimation(this);}else {this.endFling();if(AbsListView.PROFILE_FLINGING){if(this._AbsListView_this.mFlingProfilingStarted){this._AbsListView_this.mFlingProfilingStarted=false;}}}break;}case AbsListView.TOUCH_MODE_OVERFLING:{var _scroller=this.mScroller;if(_scroller.computeScrollOffset()){var scrollY=this._AbsListView_this.mScrollY;var currY=_scroller.getCurrY();var deltaY=currY-scrollY;var crossDown=scrollY<=0&&currY>0;var crossUp=scrollY>=0&&currY<0;if(crossDown||crossUp){var velocity=Math.floor(_scroller.getCurrVelocity());if(crossUp)velocity=-velocity;_scroller.abortAnimation();this.start(velocity);deltaY=-scrollY;}if(this._AbsListView_this.overScrollBy(0,deltaY,0,scrollY,0,0,0,this._AbsListView_this.mOverflingDistance,false)){this.startSpringback();}else {this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}}else {this.endFling();}break;}}}}]);return FlingRunnable;}();FlingRunnable.FLYWHEEL_TIMEOUT=40;AbsListView.FlingRunnable=FlingRunnable;var PositionScroller=function(){function PositionScroller(arg){_classCallCheck(this,PositionScroller);this.mMode=0;this.mTargetPos=0;this.mBoundPos=0;this.mLastSeenPos=0;this.mScrollDuration=0;this.mExtraScroll=0;this.mOffsetFromTop=0;this._AbsListView_this=arg;this.mExtraScroll=ViewConfiguration.get().getScaledFadingEdgeLength();}_createClass(PositionScroller,[{key:'start',value:function start(position,boundPosition){if(boundPosition==null)this._start_1(position);else this._start_2(position,boundPosition);}},{key:'_start_1',value:function _start_1(position){var _this112=this;this.stop();if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this112;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.start(position);}}]);return _Inner;}();return new _Inner();}();return;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=undefined;var clampedPosition=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));if(clampedPositionlastPos){viewTravelCount=clampedPosition-lastPos+1;this.mMode=PositionScroller.MOVE_DOWN_POS;}else {this.scrollToVisible(clampedPosition,AbsListView.INVALID_POSITION,PositionScroller.SCROLL_DURATION);return;}if(viewTravelCount>0){this.mScrollDuration=PositionScroller.SCROLL_DURATION/viewTravelCount;}else {this.mScrollDuration=PositionScroller.SCROLL_DURATION;}this.mTargetPos=clampedPosition;this.mBoundPos=AbsListView.INVALID_POSITION;this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'_start_2',value:function _start_2(position,boundPosition){var _this113=this;this.stop();if(boundPosition==AbsListView.INVALID_POSITION){this.start(position);return;}if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this113;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.start(position,boundPosition);}}]);return _Inner;}();return new _Inner();}();return;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=undefined;var clampedPosition=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));if(clampedPositionlastPos){var boundPosFromFirst=boundPosition-firstPos;if(boundPosFromFirst<1){return;}var _posTravel=clampedPosition-lastPos+1;var _boundTravel=boundPosFromFirst-1;if(_boundTravel<_posTravel){viewTravelCount=_boundTravel;this.mMode=PositionScroller.MOVE_DOWN_BOUND;}else {viewTravelCount=_posTravel;this.mMode=PositionScroller.MOVE_DOWN_POS;}}else {this.scrollToVisible(clampedPosition,boundPosition,PositionScroller.SCROLL_DURATION);return;}if(viewTravelCount>0){this.mScrollDuration=PositionScroller.SCROLL_DURATION/viewTravelCount;}else {this.mScrollDuration=PositionScroller.SCROLL_DURATION;}this.mTargetPos=clampedPosition;this.mBoundPos=boundPosition;this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'startWithOffset',value:function startWithOffset(position,offset){var _this114=this;var duration=arguments.length<=2||arguments[2]===undefined?PositionScroller.SCROLL_DURATION:arguments[2];this.stop();if(this._AbsListView_this.mDataChanged){var _ret7=function(){var postOffset=offset;_this114._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this114;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.startWithOffset(position,postOffset,duration);}}]);return _Inner;}();return new _Inner();}();return {v:undefined};}();if((typeof _ret7==='undefined'?'undefined':_typeof(_ret7))==="object")return _ret7.v;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}offset+=this._AbsListView_this.getPaddingTop();this.mTargetPos=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));this.mOffsetFromTop=offset;this.mBoundPos=AbsListView.INVALID_POSITION;this.mLastSeenPos=AbsListView.INVALID_POSITION;this.mMode=PositionScroller.MOVE_OFFSET;var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=undefined;if(this.mTargetPoslastPos){viewTravelCount=this.mTargetPos-lastPos;}else {var targetTop=this._AbsListView_this.getChildAt(this.mTargetPos-firstPos).getTop();this._AbsListView_this.smoothScrollBy(targetTop-offset,duration,true);return;}var screenTravelCount=viewTravelCount/childCount;this.mScrollDuration=screenTravelCount<1?duration:Math.floor(duration/screenTravelCount);this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'scrollToVisible',value:function scrollToVisible(targetPos,boundPos,duration){var firstPos=this._AbsListView_this.mFirstPosition;var childCount=this._AbsListView_this.getChildCount();var lastPos=firstPos+childCount-1;var paddedTop=this._AbsListView_this.mListPadding.top;var paddedBottom=this._AbsListView_this.getHeight()-this._AbsListView_this.mListPadding.bottom;if(targetPoslastPos){Log.w(AbsListView.TAG_AbsListView,"scrollToVisible called with targetPos "+targetPos+" not visible ["+firstPos+", "+lastPos+"]");}if(boundPoslastPos){boundPos=AbsListView.INVALID_POSITION;}var targetChild=this._AbsListView_this.getChildAt(targetPos-firstPos);var targetTop=targetChild.getTop();var targetBottom=targetChild.getBottom();var scrollBy=0;if(targetBottom>paddedBottom){scrollBy=targetBottom-paddedBottom;}if(targetTop=0){var boundChild=this._AbsListView_this.getChildAt(boundPos-firstPos);var boundTop=boundChild.getTop();var boundBottom=boundChild.getBottom();var absScroll=Math.abs(scrollBy);if(scrollBy<0&&boundBottom+absScroll>paddedBottom){scrollBy=Math.max(0,boundBottom-paddedBottom);}else if(scrollBy>0&&boundTop-absScroll=this._AbsListView_this.mItemCount){return;}var nextPos=firstPos+nextViewIndex;if(nextPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var nextView=this._AbsListView_this.getChildAt(nextViewIndex);var nextViewHeight=nextView.getHeight();var nextViewTop=nextView.getTop();var _extraScroll=Math.max(this._AbsListView_this.mListPadding.bottom,this.mExtraScroll);if(nextPos_extraScroll){this._AbsListView_this.smoothScrollBy(nextViewTop-_extraScroll,this.mScrollDuration,true);}}break;}case PositionScroller.MOVE_UP_POS:{if(firstPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var firstView=this._AbsListView_this.getChildAt(0);if(firstView==null){return;}var firstViewTop=firstView.getTop();var _extraScroll2=firstPos>0?Math.max(this.mExtraScroll,this._AbsListView_this.mListPadding.top):this._AbsListView_this.mListPadding.top;this._AbsListView_this.smoothScrollBy(firstViewTop-_extraScroll2,this.mScrollDuration,true);this.mLastSeenPos=firstPos;if(firstPos>this.mTargetPos){this._AbsListView_this.postOnAnimation(this);}break;}case PositionScroller.MOVE_UP_BOUND:{var _lastViewIndex=this._AbsListView_this.getChildCount()-2;if(_lastViewIndex<0){return;}var _lastPos=firstPos+_lastViewIndex;if(_lastPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var _lastView=this._AbsListView_this.getChildAt(_lastViewIndex);var _lastViewHeight=_lastView.getHeight();var _lastViewTop=_lastView.getTop();var _lastViewPixelsShowing=listHeight-_lastViewTop;var _extraScroll3=Math.max(this._AbsListView_this.mListPadding.top,this.mExtraScroll);this.mLastSeenPos=_lastPos;if(_lastPos>this.mBoundPos){this._AbsListView_this.smoothScrollBy(-(_lastViewPixelsShowing-_extraScroll3),this.mScrollDuration,true);this._AbsListView_this.postOnAnimation(this);}else {var bottom=listHeight-_extraScroll3;var lastViewBottom=_lastViewTop+_lastViewHeight;if(bottom>lastViewBottom){this._AbsListView_this.smoothScrollBy(-(bottom-lastViewBottom),this.mScrollDuration,true);}}break;}case PositionScroller.MOVE_OFFSET:{if(this.mLastSeenPos==firstPos){this._AbsListView_this.postOnAnimation(this);return;}this.mLastSeenPos=firstPos;var _childCount=this._AbsListView_this.getChildCount();var position=this.mTargetPos;var _lastPos2=firstPos+_childCount-1;var viewTravelCount=0;if(position_lastPos2){viewTravelCount=position-_lastPos2;}var screenTravelCount=viewTravelCount/_childCount;var modifier=Math.min(Math.abs(screenTravelCount),1.);if(position_lastPos2){var _distance=Math.floor(this._AbsListView_this.getHeight()*modifier);var _duration=Math.floor(this.mScrollDuration*modifier);this._AbsListView_this.smoothScrollBy(_distance,_duration,true);this._AbsListView_this.postOnAnimation(this);}else {var targetTop=this._AbsListView_this.getChildAt(position-firstPos).getTop();var _distance2=targetTop-this.mOffsetFromTop;var _duration2=Math.floor(this.mScrollDuration*(Math.abs(_distance2)/this._AbsListView_this.getHeight()));this._AbsListView_this.smoothScrollBy(_distance2,_duration2,true);}break;}default:break;}}}]);return PositionScroller;}();PositionScroller.SCROLL_DURATION=200;PositionScroller.MOVE_DOWN_POS=1;PositionScroller.MOVE_UP_POS=2;PositionScroller.MOVE_DOWN_BOUND=3;PositionScroller.MOVE_UP_BOUND=4;PositionScroller.MOVE_OFFSET=5;AbsListView.PositionScroller=PositionScroller;var AdapterDataSetObserver=function(_AdapterView$AdapterD){_inherits(AdapterDataSetObserver,_AdapterView$AdapterD);function AdapterDataSetObserver(arg){_classCallCheck(this,AdapterDataSetObserver);var _this115=_possibleConstructorReturn(this,Object.getPrototypeOf(AdapterDataSetObserver).call(this,arg));_this115._AbsListView_this=arg;return _this115;}_createClass(AdapterDataSetObserver,[{key:'onChanged',value:function onChanged(){_get2(Object.getPrototypeOf(AdapterDataSetObserver.prototype),'onChanged',this).call(this);}},{key:'onInvalidated',value:function onInvalidated(){_get2(Object.getPrototypeOf(AdapterDataSetObserver.prototype),'onInvalidated',this).call(this);}}]);return AdapterDataSetObserver;}(AdapterView.AdapterDataSetObserver);AbsListView.AdapterDataSetObserver=AdapterDataSetObserver;var LayoutParams=function(_ViewGroup$LayoutPara){_inherits(LayoutParams,_ViewGroup$LayoutPara);function LayoutParams(){var _Object$getPrototypeO13;_classCallCheck(this,LayoutParams);for(var _len37=arguments.length,args=Array(_len37),_key38=0;_key38<_len37;_key38++){args[_key38]=arguments[_key38];}var _this116=_possibleConstructorReturn(this,(_Object$getPrototypeO13=Object.getPrototypeOf(LayoutParams)).call.apply(_Object$getPrototypeO13,[this].concat(_toConsumableArray(args.length==3?[args[0],args[1]]:args))));_this116.viewType=0;_this116.scrappedFromPosition=0;_this116.itemId=-1;if(args.length===3){_this116.viewType=args[2];}return _this116;}return LayoutParams;}(ViewGroup.LayoutParams);AbsListView.LayoutParams=LayoutParams;var RecycleBin=function(){function RecycleBin(arg){_classCallCheck(this,RecycleBin);this.mFirstActivePosition=0;this.mActiveViews=[];this.mViewTypeCount=0;this._AbsListView_this=arg;}_createClass(RecycleBin,[{key:'setViewTypeCount',value:function setViewTypeCount(viewTypeCount){if(viewTypeCount<1){throw Error('new IllegalArgumentException("Can\'t have a viewTypeCount < 1")');}var scrapViews=new Array(viewTypeCount);for(var i=0;i=0;}},{key:'clear',value:function clear(){if(this.mViewTypeCount==1){var scrap=this.mCurrentScrap;var scrapCount=scrap.size();for(var i=0;i=0&&index=0){var _result=this.mTransientStateViews.valueAt(index);this.mTransientStateViews.removeAt(index);return _result;}}return null;}},{key:'clearTransientStateViews',value:function clearTransientStateViews(){if(this.mTransientStateViews!=null){this.mTransientStateViews.clear();}if(this.mTransientStateViewsById!=null){this.mTransientStateViewsById.clear();}}},{key:'getScrapView',value:function getScrapView(position){if(this.mViewTypeCount==1){return AbsListView.retrieveFromScrap(this.mCurrentScrap,position);}else {var whichScrap=this._AbsListView_this.mAdapter.getItemViewType(position);if(whichScrap>=0&&whichScrap1;var scrapViews=this.mCurrentScrap;var count=activeViews.length;for(var i=count-1;i>=0;i--){var victim=activeViews[i];if(victim!=null){var lp=victim.getLayoutParams();var whichScrap=lp.viewType;activeViews[i]=null;var scrapHasTransientState=victim.hasTransientState();if(!this.shouldRecycleViewType(whichScrap)||scrapHasTransientState){if(whichScrap!=AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER&&scrapHasTransientState){this._AbsListView_this.removeDetachedView(victim,false);}if(scrapHasTransientState){if(this._AbsListView_this.mAdapter!=null&&this._AbsListView_this.mAdapterHasStableIds){if(this.mTransientStateViewsById==null){this.mTransientStateViewsById=new LongSparseArray();}var id=this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition+i);this.mTransientStateViewsById.put(id,victim);}else {if(this.mTransientStateViews==null){this.mTransientStateViews=new SparseArray();}this.mTransientStateViews.put(this.mFirstActivePosition+i,victim);}}continue;}if(multipleScraps){scrapViews=this.mScrapViews[whichScrap];}victim.dispatchStartTemporaryDetach();lp.scrappedFromPosition=this.mFirstActivePosition+i;scrapViews.add(victim);if(hasListener){this.mRecyclerListener.onMovedToScrapHeap(victim);}}}this.pruneScrapViews();}},{key:'pruneScrapViews',value:function pruneScrapViews(){var maxViews=this.mActiveViews.length;var viewTypeCount=this.mViewTypeCount;var scrapViews=this.mScrapViews;for(var i=0;i=numHeaders){var adjPosition=position-numHeaders;var adapterCount=this.mAdapter.getCount();if(adjPosition=numHeaders){var adjPosition=position-numHeaders;var adapterCount=this.mAdapter.getCount();if(adjPosition=0;i--){this.mObservers.get(i).onChanged();}}},{key:'notifyInvalidated',value:function notifyInvalidated(){for(var i=this.mObservers.size()-1;i>=0;i--){this.mObservers.get(i).onInvalidated();}}}]);return DataSetObservable;}(Observable);database.DataSetObservable=DataSetObservable;})(database=android.database||(android.database={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObservable=android.database.DataSetObservable;var BaseAdapter=function(){function BaseAdapter(){_classCallCheck(this,BaseAdapter);this.mDataSetObservable=new DataSetObservable();}_createClass(BaseAdapter,[{key:'hasStableIds',value:function hasStableIds(){return false;}},{key:'registerDataSetObserver',value:function registerDataSetObserver(observer){this.mDataSetObservable.registerObserver(observer);}},{key:'unregisterDataSetObserver',value:function unregisterDataSetObserver(observer){this.mDataSetObservable.unregisterObserver(observer);}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.mDataSetObservable.notifyChanged();}},{key:'notifyDataSetInvalidated',value:function notifyDataSetInvalidated(){this.mDataSetObservable.notifyInvalidated();}},{key:'areAllItemsEnabled',value:function areAllItemsEnabled(){return true;}},{key:'isEnabled',value:function isEnabled(position){return true;}},{key:'getDropDownView',value:function getDropDownView(position,convertView,parent){return this.getView(position,convertView,parent);}},{key:'getItemViewType',value:function getItemViewType(position){return 0;}},{key:'getViewTypeCount',value:function getViewTypeCount(){return 1;}},{key:'isEmpty',value:function isEmpty(){return this.getCount()==0;}}]);return BaseAdapter;}();widget.BaseAdapter=BaseAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Paint=android.graphics.Paint;var PixelFormat=android.graphics.PixelFormat;var Rect=android.graphics.Rect;var MathUtils=android.util.MathUtils;var FocusFinder=android.view.FocusFinder;var KeyEvent=android.view.KeyEvent;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Trace=android.os.Trace;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var System=java.lang.System;var AbsListView=android.widget.AbsListView;var AdapterView=android.widget.AdapterView;var HeaderViewListAdapter=android.widget.HeaderViewListAdapter;var ListView=function(_AbsListView){_inherits(ListView,_AbsListView);function ListView(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.listViewStyle:arguments[2];_classCallCheck(this,ListView);var _this118=_possibleConstructorReturn(this,Object.getPrototypeOf(ListView).call(this,context,bindElement,null));_this118.mHeaderViewInfos=new ArrayList();_this118.mFooterViewInfos=new ArrayList();_this118.mDividerHeight=0;_this118.mIsCacheColorOpaque=false;_this118.mDividerIsOpaque=false;_this118.mHeaderDividersEnabled=true;_this118.mFooterDividersEnabled=true;_this118.mAreAllItemsSelectable=true;_this118.mItemsCanFocus=false;_this118.mTempRect=new Rect();_this118.mArrowScrollFocusResult=new ListView.ArrowScrollFocusResult();_this118._attrBinder.addAttr('divider',function(value){var divider=_this118._attrBinder.parseDrawable(value);if(divider)_this118.setDivider(divider);});_this118._attrBinder.addAttr('overScrollHeader',function(value){var header=_this118._attrBinder.parseDrawable(value);if(header)_this118.setOverscrollHeader(header);});_this118._attrBinder.addAttr('overScrollFooter',function(value){var footer=_this118._attrBinder.parseDrawable(value);if(footer)_this118.setOverscrollFooter(footer);});_this118._attrBinder.addAttr('dividerHeight',function(value){var dividerHeight=_this118._attrBinder.parseNumberPixelSize(value,-1);if(dividerHeight>=0){_this118.setDividerHeight(dividerHeight);}});_this118._attrBinder.addAttr('headerDividersEnabled',function(value){_this118.setHeaderDividersEnabled(_this118._attrBinder.parseBoolean(value,true));});_this118._attrBinder.addAttr('footerDividersEnabled',function(value){_this118.setFooterDividersEnabled(_this118._attrBinder.parseBoolean(value,true));});if(defStyle)_this118.applyDefaultAttributes(defStyle);return _this118;}_createClass(ListView,[{key:'getMaxScrollAmount',value:function getMaxScrollAmount(){return Math.floor(ListView.MAX_SCROLL_FACTOR*(this.mBottom-this.mTop));}},{key:'adjustViewsUpOrDown',value:function adjustViewsUpOrDown(){var childCount=this.getChildCount();var delta=undefined;if(childCount>0){var child=undefined;if(!this.mStackFromBottom){child=this.getChildAt(0);delta=child.getTop()-this.mListPadding.top;if(this.mFirstPosition!=0){delta-=this.mDividerHeight;}if(delta<0){delta=0;}}else {child=this.getChildAt(childCount-1);delta=child.getBottom()-(this.getHeight()-this.mListPadding.bottom);if(this.mFirstPosition+childCount0){delta=0;}}if(delta!=0){this.offsetChildrenTopAndBottom(-delta);}}}},{key:'addHeaderView',value:function addHeaderView(v){var data=arguments.length<=1||arguments[1]===undefined?null:arguments[1];var isSelectable=arguments.length<=2||arguments[2]===undefined?true:arguments[2];var info=new ListView.FixedViewInfo(this);info.view=v;info.data=data;info.isSelectable=isSelectable;this.mHeaderViewInfos.add(info);if(this.mAdapter!=null){if(!(this.mAdapter instanceof HeaderViewListAdapter)){this.mAdapter=new HeaderViewListAdapter(this.mHeaderViewInfos,this.mFooterViewInfos,this.mAdapter);}if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}}}},{key:'getHeaderViewsCount',value:function getHeaderViewsCount(){return this.mHeaderViewInfos.size();}},{key:'removeHeaderView',value:function removeHeaderView(v){if(this.mHeaderViewInfos.size()>0){var result=false;if(this.mAdapter!=null&&this.mAdapter.removeHeader(v)){if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}result=true;}this.removeFixedViewInfo(v,this.mHeaderViewInfos);return result;}return false;}},{key:'removeFixedViewInfo',value:function removeFixedViewInfo(v,where){var len=where.size();for(var i=0;i0){var result=false;if(this.mAdapter!=null&&this.mAdapter.removeFooter(v)){if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}result=true;}this.removeFixedViewInfo(v,this.mFooterViewInfos);return result;}return false;}},{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'setAdapter',value:function setAdapter(adapter){if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.resetList();this.mRecycler.clear();if(this.mHeaderViewInfos.size()>0||this.mFooterViewInfos.size()>0){this.mAdapter=new HeaderViewListAdapter(this.mHeaderViewInfos,this.mFooterViewInfos,adapter);}else {this.mAdapter=adapter;}this.mOldSelectedPosition=ListView.INVALID_POSITION;this.mOldSelectedRowId=ListView.INVALID_ROW_ID;_get2(Object.getPrototypeOf(ListView.prototype),'setAdapter',this).call(this,adapter);if(this.mAdapter!=null){this.mAreAllItemsSelectable=this.mAdapter.areAllItemsEnabled();this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.checkFocus();this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());var position=undefined;if(this.mStackFromBottom){position=this.lookForSelectablePosition(this.mItemCount-1,false);}else {position=this.lookForSelectablePosition(0,true);}this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);if(this.mItemCount==0){this.checkSelectionChanged();}}else {this.mAreAllItemsSelectable=true;this.checkFocus();this.checkSelectionChanged();}this.requestLayout();}},{key:'resetList',value:function resetList(){this.clearRecycledState(this.mHeaderViewInfos);this.clearRecycledState(this.mFooterViewInfos);_get2(Object.getPrototypeOf(ListView.prototype),'resetList',this).call(this);this.mLayoutMode=ListView.LAYOUT_NORMAL;}},{key:'clearRecycledState',value:function clearRecycledState(infos){if(infos!=null){var count=infos.size();for(var i=0;i0||this.getChildAt(0).getTop()>listTop;}},{key:'showingBottomFadingEdge',value:function showingBottomFadingEdge(){var childCount=this.getChildCount();var bottomOfBottomChild=this.getChildAt(childCount-1).getBottom();var lastVisiblePosition=this.mFirstPosition+childCount-1;var listBottom=this.mScrollY+this.getHeight()-this.mListPadding.bottom;return lastVisiblePosition0||rectTopWithinChild>fadingEdge){listUnfadedTop+=fadingEdge;}}var childCount=this.getChildCount();var bottomOfBottomChild=this.getChildAt(childCount-1).getBottom();if(this.showingBottomFadingEdge()){if(this.mSelectedPositionlistUnfadedBottom&&rect.top>listUnfadedTop){if(rect.height()>height){scrollYDelta+=rect.top-listUnfadedTop;}else {scrollYDelta+=rect.bottom-listUnfadedBottom;}var distanceToBottom=bottomOfBottomChild-listUnfadedBottom;scrollYDelta=Math.min(scrollYDelta,distanceToBottom);}else if(rect.topheight){scrollYDelta-=listUnfadedBottom-rect.bottom;}else {scrollYDelta-=listUnfadedTop-rect.top;}var top=this.getChildAt(0).getTop();var deltaToTop=top-listUnfadedTop;scrollYDelta=Math.max(scrollYDelta,deltaToTop);}var scroll=scrollYDelta!=0;if(scroll){this.scrollListItemsBy(-scrollYDelta);this.positionSelector(ListView.INVALID_POSITION,child);this.mSelectedTop=child.getTop();this.invalidate();}return scroll;}},{key:'fillGap',value:function fillGap(down){var count=this.getChildCount();if(down){var paddingTop=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){paddingTop=this.getListPaddingTop();}var startOffset=count>0?this.getChildAt(count-1).getBottom()+this.mDividerHeight:paddingTop;this.fillDown(this.mFirstPosition+count,startOffset);this.correctTooHigh(this.getChildCount());}else {var paddingBottom=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){paddingBottom=this.getListPaddingBottom();}var _startOffset=count>0?this.getChildAt(0).getTop()-this.mDividerHeight:this.getHeight()-paddingBottom;this.fillUp(this.mFirstPosition-1,_startOffset);this.correctTooLow(this.getChildCount());}}},{key:'fillDown',value:function fillDown(pos,nextTop){var selectedView=null;var end=this.mBottom-this.mTop;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){end-=this.mListPadding.bottom;}while(nextTopend&&pos>=0){var selected=pos==this.mSelectedPosition;var child=this.makeAndAddView(pos,nextBottom,false,this.mListPadding.left,selected);nextBottom=child.getTop()-this.mDividerHeight;if(selected){selectedView=child;}pos--;}this.mFirstPosition=pos+1;this.setVisibleRangeHint(this.mFirstPosition,this.mFirstPosition+this.getChildCount()-1);return selectedView;}},{key:'fillFromTop',value:function fillFromTop(nextTop){this.mFirstPosition=Math.min(this.mFirstPosition,this.mSelectedPosition);this.mFirstPosition=Math.min(this.mFirstPosition,this.mItemCount-1);if(this.mFirstPosition<0){this.mFirstPosition=0;}return this.fillDown(this.mFirstPosition,nextTop);}},{key:'fillFromMiddle',value:function fillFromMiddle(childrenTop,childrenBottom){var height=childrenBottom-childrenTop;var position=this.reconcileSelectedPosition();var sel=this.makeAndAddView(position,childrenTop,true,this.mListPadding.left,true);this.mFirstPosition=position;var selHeight=sel.getMeasuredHeight();if(selHeight<=height){sel.offsetTopAndBottom((height-selHeight)/2);}this.fillAboveAndBelow(sel,position);if(!this.mStackFromBottom){this.correctTooHigh(this.getChildCount());}else {this.correctTooLow(this.getChildCount());}return sel;}},{key:'fillAboveAndBelow',value:function fillAboveAndBelow(sel,position){var dividerHeight=this.mDividerHeight;if(!this.mStackFromBottom){this.fillUp(position-1,sel.getTop()-dividerHeight);this.adjustViewsUpOrDown();this.fillDown(position+1,sel.getBottom()+dividerHeight);}else {this.fillDown(position+1,sel.getBottom()+dividerHeight);this.adjustViewsUpOrDown();this.fillUp(position-1,sel.getTop()-dividerHeight);}}},{key:'fillFromSelection',value:function fillFromSelection(selectedTop,childrenTop,childrenBottom){var fadingEdgeLength=this.getVerticalFadingEdgeLength();var selectedPosition=this.mSelectedPosition;var sel=undefined;var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);var bottomSelectionPixel=this.getBottomSelectionPixel(childrenBottom,fadingEdgeLength,selectedPosition);sel=this.makeAndAddView(selectedPosition,selectedTop,true,this.mListPadding.left,true);if(sel.getBottom()>bottomSelectionPixel){var spaceAbove=sel.getTop()-topSelectionPixel;var spaceBelow=sel.getBottom()-bottomSelectionPixel;var offset=Math.min(spaceAbove,spaceBelow);sel.offsetTopAndBottom(-offset);}else if(sel.getTop()0){topSelectionPixel+=fadingEdgeLength;}return topSelectionPixel;}},{key:'smoothScrollToPosition',value:function smoothScrollToPosition(position,boundPosition){_get2(Object.getPrototypeOf(ListView.prototype),'smoothScrollToPosition',this).call(this,position,boundPosition);}},{key:'smoothScrollByOffset',value:function smoothScrollByOffset(offset){_get2(Object.getPrototypeOf(ListView.prototype),'smoothScrollByOffset',this).call(this,offset);}},{key:'moveSelection',value:function moveSelection(oldSel,newSel,delta,childrenTop,childrenBottom){var fadingEdgeLength=this.getVerticalFadingEdgeLength();var selectedPosition=this.mSelectedPosition;var sel=undefined;var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);var bottomSelectionPixel=this.getBottomSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);if(delta>0){oldSel=this.makeAndAddView(selectedPosition-1,oldSel.getTop(),true,this.mListPadding.left,false);var dividerHeight=this.mDividerHeight;sel=this.makeAndAddView(selectedPosition,oldSel.getBottom()+dividerHeight,true,this.mListPadding.left,true);if(sel.getBottom()>bottomSelectionPixel){var spaceAbove=sel.getTop()-topSelectionPixel;var spaceBelow=sel.getBottom()-bottomSelectionPixel;var halfVerticalSpace=(childrenBottom-childrenTop)/2;var offset=Math.min(spaceAbove,spaceBelow);offset=Math.min(offset,halfVerticalSpace);oldSel.offsetTopAndBottom(-offset);sel.offsetTopAndBottom(-offset);}if(!this.mStackFromBottom){this.fillUp(this.mSelectedPosition-2,sel.getTop()-dividerHeight);this.adjustViewsUpOrDown();this.fillDown(this.mSelectedPosition+1,sel.getBottom()+dividerHeight);}else {this.fillDown(this.mSelectedPosition+1,sel.getBottom()+dividerHeight);this.adjustViewsUpOrDown();this.fillUp(this.mSelectedPosition-2,sel.getTop()-dividerHeight);}}else if(delta<0){if(newSel!=null){sel=this.makeAndAddView(selectedPosition,newSel.getTop(),true,this.mListPadding.left,true);}else {sel=this.makeAndAddView(selectedPosition,oldSel.getTop(),false,this.mListPadding.left,true);}if(sel.getTop()0){var focusedChild=this.getFocusedChild();if(focusedChild!=null){var childPosition=this.mFirstPosition+this.indexOfChild(focusedChild);var childBottom=focusedChild.getBottom();var offset=Math.max(0,childBottom-(h-this.mPaddingTop));var top=focusedChild.getTop()-offset;if(this.mFocusSelector==null){this.mFocusSelector=new ListView.FocusSelector(this);}this.post(this.mFocusSelector.setup(childPosition,top));}}_get2(Object.getPrototypeOf(ListView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(Object.getPrototypeOf(ListView.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);var widthMode=ListView.MeasureSpec.getMode(widthMeasureSpec);var heightMode=ListView.MeasureSpec.getMode(heightMeasureSpec);var widthSize=ListView.MeasureSpec.getSize(widthMeasureSpec);var heightSize=ListView.MeasureSpec.getSize(heightMeasureSpec);var childWidth=0;var childHeight=0;var childState=0;this.mItemCount=this.mAdapter==null?0:this.mAdapter.getCount();if(this.mItemCount>0&&(widthMode==ListView.MeasureSpec.UNSPECIFIED||heightMode==ListView.MeasureSpec.UNSPECIFIED)){var child=this.obtainView(0,this.mIsScrap);this.measureScrapChild(child,0,widthMeasureSpec);childWidth=child.getMeasuredWidth();childHeight=child.getMeasuredHeight();childState=ListView.combineMeasuredStates(childState,child.getMeasuredState());if(this.recycleOnMeasure()&&this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)){this.mRecycler.addScrapView(child,-1);}}if(widthMode==ListView.MeasureSpec.UNSPECIFIED){widthSize=this.mListPadding.left+this.mListPadding.right+childWidth+this.getVerticalScrollbarWidth();}else {widthSize|=childState&ListView.MEASURED_STATE_MASK;}if(heightMode==ListView.MeasureSpec.UNSPECIFIED){heightSize=this.mListPadding.top+this.mListPadding.bottom+childHeight+this.getVerticalFadingEdgeLength()*2;}if(heightMode==ListView.MeasureSpec.AT_MOST){heightSize=this.measureHeightOfChildren(widthMeasureSpec,0,ListView.NO_POSITION,heightSize,-1);}this.setMeasuredDimension(widthSize,heightSize);this.mWidthMeasureSpec=widthMeasureSpec;}},{key:'measureScrapChild',value:function measureScrapChild(child,position,widthMeasureSpec){var p=child.getLayoutParams();if(p==null){p=this.generateDefaultLayoutParams();child.setLayoutParams(p);}p.viewType=this.mAdapter.getItemViewType(position);p.forceAdd=true;var childWidthSpec=ViewGroup.getChildMeasureSpec(widthMeasureSpec,this.mListPadding.left+this.mListPadding.right,p.width);var lpHeight=p.height;var childHeightSpec=undefined;if(lpHeight>0){childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(lpHeight,ListView.MeasureSpec.EXACTLY);}else {childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(0,ListView.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}},{key:'recycleOnMeasure',value:function recycleOnMeasure(){return true;}},{key:'measureHeightOfChildren',value:function measureHeightOfChildren(widthMeasureSpec,startPosition,endPosition,maxHeight,disallowPartialChildPosition){var adapter=this.mAdapter;if(adapter==null){return this.mListPadding.top+this.mListPadding.bottom;}var returnedHeight=this.mListPadding.top+this.mListPadding.bottom;var dividerHeight=this.mDividerHeight>0&&this.mDivider!=null?this.mDividerHeight:0;var prevHeightWithoutPartialChild=0;var i=undefined;var child=undefined;endPosition=endPosition==ListView.NO_POSITION?adapter.getCount()-1:endPosition;var recycleBin=this.mRecycler;var recyle=this.recycleOnMeasure();var isScrap=this.mIsScrap;for(i=startPosition;i<=endPosition;++i){child=this.obtainView(i,isScrap);this.measureScrapChild(child,i,widthMeasureSpec);if(i>0){returnedHeight+=dividerHeight;}if(recyle&&recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)){recycleBin.addScrapView(child,-1);}returnedHeight+=child.getMeasuredHeight();if(returnedHeight>=maxHeight){return disallowPartialChildPosition>=0&&i>disallowPartialChildPosition&&prevHeightWithoutPartialChild>0&&returnedHeight!=maxHeight?prevHeightWithoutPartialChild:maxHeight;}if(disallowPartialChildPosition>=0&&i>=disallowPartialChildPosition){prevHeightWithoutPartialChild=returnedHeight;}}return returnedHeight;}},{key:'findMotionRow',value:function findMotionRow(y){var childCount=this.getChildCount();if(childCount>0){if(!this.mStackFromBottom){for(var i=0;i=0;_i46--){var _v5=this.getChildAt(_i46);if(y>=_v5.getTop()){return this.mFirstPosition+_i46;}}}}return ListView.INVALID_POSITION;}},{key:'fillSpecific',value:function fillSpecific(position,top){var tempIsSelected=position==this.mSelectedPosition;var temp=this.makeAndAddView(position,top,true,this.mListPadding.left,tempIsSelected);this.mFirstPosition=position;var above=undefined;var below=undefined;var dividerHeight=this.mDividerHeight;if(!this.mStackFromBottom){above=this.fillUp(position-1,temp.getTop()-dividerHeight);this.adjustViewsUpOrDown();below=this.fillDown(position+1,temp.getBottom()+dividerHeight);var childCount=this.getChildCount();if(childCount>0){this.correctTooHigh(childCount);}}else {below=this.fillDown(position+1,temp.getBottom()+dividerHeight);this.adjustViewsUpOrDown();above=this.fillUp(position-1,temp.getTop()-dividerHeight);var _childCount2=this.getChildCount();if(_childCount2>0){this.correctTooLow(_childCount2);}}if(tempIsSelected){return temp;}else if(above!=null){return above;}else {return below;}}},{key:'correctTooHigh',value:function correctTooHigh(childCount){var lastPosition=this.mFirstPosition+childCount-1;if(lastPosition==this.mItemCount-1&&childCount>0){var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var end=this.mBottom-this.mTop-this.mListPadding.bottom;var bottomOffset=end-lastBottom;var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();if(bottomOffset>0&&(this.mFirstPosition>0||firstTop0){this.fillUp(this.mFirstPosition-1,firstChild.getTop()-this.mDividerHeight);this.adjustViewsUpOrDown();}}}}},{key:'correctTooLow',value:function correctTooLow(childCount){if(this.mFirstPosition==0&&childCount>0){var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();var start=this.mListPadding.top;var end=this.mBottom-this.mTop-this.mListPadding.bottom;var topOffset=firstTop-start;var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var lastPosition=this.mFirstPosition+childCount-1;if(topOffset>0){if(lastPositionend){if(lastPosition==this.mItemCount-1){topOffset=Math.min(topOffset,lastBottom-end);}this.offsetChildrenTopAndBottom(-topOffset);if(lastPosition=0&&index=0&&index=0){delta=this.mNextSelectedPosition-this.mSelectedPosition;}newSel=this.getChildAt(index+delta);}var dataChanged=this.mDataChanged;if(dataChanged){this.handleDataChanged();}if(this.mItemCount==0){this.resetList();this.invokeOnItemScrollListener();return;}else if(this.mItemCount!=this.mAdapter.getCount()){throw Error('IllegalStateException("The content of the adapter has changed but\n ListView did not receive a notification. Make sure the content of\n your adapter is not modified from a background thread, but only from\n the UI thread. Make sure your adapter calls notifyDataSetChanged()\n when its content changes. [in ListView('+this.getId()+','+this.constructor.name+')\n with Adapter('+this.mAdapter.constructor.name+')]")');}this.setSelectedPositionInt(this.mNextSelectedPosition);var accessFocusedChild=null;var focusedChild=this.getFocusedChild();if(focusedChild!=null){focusedChild.setHasTransientState(true);}var firstPosition=this.mFirstPosition;var recycleBin=this.mRecycler;if(dataChanged){for(var i=0;i=0&&this.mSelectedPosition0){this.checkSelectionChanged();}this.invokeOnItemScrollListener();}finally {if(!blockLayoutRequests){this.mBlockLayoutRequests=false;}}}},{key:'makeAndAddView',value:function makeAndAddView(position,y,flow,childrenLeft,selected){var child=undefined;if(!this.mDataChanged){child=this.mRecycler.getActiveView(position);if(child!=null){this.setupChild(child,position,y,flow,childrenLeft,selected,true);return child;}}child=this.obtainView(position,this.mIsScrap);this.setupChild(child,position,y,flow,childrenLeft,selected,this.mIsScrap[0]);return child;}},{key:'setupChild',value:function setupChild(child,position,y,flowDown,childrenLeft,selected,recycled){Trace.traceBegin(Trace.TRACE_TAG_VIEW,"setupListItem");var isSelected=selected&&this.shouldShowSelector();var updateChildSelected=isSelected!=child.isSelected();var mode=this.mTouchMode;var isPressed=mode>ListView.TOUCH_MODE_DOWN&&mode0){childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(lpHeight,ListView.MeasureSpec.EXACTLY);}else {childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(0,ListView.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}else {this.cleanupLayoutState(child);}var w=child.getMeasuredWidth();var h=child.getMeasuredHeight();var childTop=flowDown?y:y-h;if(needToMeasure){var childRight=childrenLeft+w;var childBottom=childTop+h;child.layout(childrenLeft,childTop,childRight,childBottom);}else {child.offsetLeftAndRight(childrenLeft-child.getLeft());child.offsetTopAndBottom(childTop-child.getTop());}if(this.mCachingStarted&&!child.isDrawingCacheEnabled()){child.setDrawingCacheEnabled(true);}if(recycled&&child.getLayoutParams().scrappedFromPosition!=position){child.jumpDrawablesToCurrentState();}Trace.traceEnd(Trace.TRACE_TAG_VIEW);}},{key:'canAnimate',value:function canAnimate(){return _get2(Object.getPrototypeOf(ListView.prototype),'canAnimate',this).call(this)&&this.mItemCount>0;}},{key:'setSelection',value:function setSelection(position){this.setSelectionFromTop(position,0);}},{key:'setSelectionFromTop',value:function setSelectionFromTop(position,y){if(this.mAdapter==null){return;}if(!this.isInTouchMode()){position=this.lookForSelectablePosition(position,true);if(position>=0){this.setNextSelectedPositionInt(position);}}else {this.mResurrectToPosition=position;}if(position>=0){this.mLayoutMode=ListView.LAYOUT_SPECIFIC;this.mSpecificTop=this.mListPadding.top+y;if(this.mNeedSync){this.mSyncPosition=position;this.mSyncRowId=this.mAdapter.getItemId(position);}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.requestLayout();}}},{key:'setSelectionInt',value:function setSelectionInt(position){this.setNextSelectedPositionInt(position);var awakeScrollbars=false;var selectedPosition=this.mSelectedPosition;if(selectedPosition>=0){if(position==selectedPosition-1){awakeScrollbars=true;}else if(position==selectedPosition+1){awakeScrollbars=true;}}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.layoutChildren();if(awakeScrollbars){this.awakenScrollBars();}}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return ListView.INVALID_POSITION;}var count=adapter.getCount();if(!this.mAreAllItemsSelectable){if(lookDown){position=Math.max(0,position);while(position=0&&!adapter.isEnabled(position)){position--;}}}if(position<0||position>=count){return ListView.INVALID_POSITION;}return position;}},{key:'lookForSelectablePositionAfter',value:function lookForSelectablePositionAfter(current,position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return ListView.INVALID_POSITION;}var after=this.lookForSelectablePosition(position,lookDown);if(after!=ListView.INVALID_POSITION){return after;}var count=adapter.getCount();current=MathUtils.constrain(current,-1,count-1);if(lookDown){position=Math.min(position-1,count-1);while(position>current&&!adapter.isEnabled(position)){position--;}if(position<=current){return ListView.INVALID_POSITION;}}else {position=Math.max(0,position+1);while(position=current){return ListView.INVALID_POSITION;}}return position;}},{key:'setSelectionAfterHeaderView',value:function setSelectionAfterHeaderView(){var count=this.mHeaderViewInfos.size();if(count>0){this.mNextSelectedPosition=0;return;}if(this.mAdapter!=null){this.setSelection(count);}else {this.mNextSelectedPosition=count;this.mLayoutMode=ListView.LAYOUT_SET_SELECTION;}}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var handled=_get2(Object.getPrototypeOf(ListView.prototype),'dispatchKeyEvent',this).call(this,event);if(!handled){var focused=this.getFocusedChild();if(focused!=null&&event.getAction()==KeyEvent.ACTION_DOWN){handled=this.onKeyDown(event.getKeyCode(),event);}}return handled;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return this.commonKey(keyCode,1,event);}},{key:'onKeyMultiple',value:function onKeyMultiple(keyCode,repeatCount,event){return this.commonKey(keyCode,repeatCount,event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return this.commonKey(keyCode,1,event);}},{key:'commonKey',value:function commonKey(keyCode,count,event){if(this.mAdapter==null||!this.isAttachedToWindow()){return false;}if(this.mDataChanged){this.layoutChildren();}var handled=false;var action=event.getAction();if(action!=KeyEvent.ACTION_UP){switch(keyCode){case KeyEvent.KEYCODE_DPAD_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled){while(count-->0){if(this.arrowScroll(ListView.FOCUS_UP)){handled=true;}else {break;}}}}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_DPAD_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled){while(count-->0){if(this.arrowScroll(ListView.FOCUS_DOWN)){handled=true;}else {break;}}}}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_DPAD_LEFT:if(event.hasNoModifiers()){handled=this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT);}break;case KeyEvent.KEYCODE_DPAD_RIGHT:if(event.hasNoModifiers()){handled=this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT);}break;case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled&&event.getRepeatCount()==0&&this.getChildCount()>0){this.keyPressed();handled=true;}}break;case KeyEvent.KEYCODE_SPACE:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_UP);}handled=true;break;case KeyEvent.KEYCODE_PAGE_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_UP);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_MOVE_HOME:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_MOVE_END:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_TAB:if(false){if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.arrowScroll(ListView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.arrowScroll(ListView.FOCUS_UP);}}break;}}if(handled){return true;}switch(action){case KeyEvent.ACTION_DOWN:return _get2(Object.getPrototypeOf(ListView.prototype),'onKeyDown',this).call(this,keyCode,event);case KeyEvent.ACTION_UP:return _get2(Object.getPrototypeOf(ListView.prototype),'onKeyUp',this).call(this,keyCode,event);default:return false;}}},{key:'pageScroll',value:function pageScroll(direction){var nextPage=undefined;var down=undefined;if(direction==ListView.FOCUS_UP){nextPage=Math.max(0,this.mSelectedPosition-this.getChildCount()-1);down=false;}else if(direction==ListView.FOCUS_DOWN){nextPage=Math.min(this.mItemCount-1,this.mSelectedPosition+this.getChildCount()-1);down=true;}else {return false;}if(nextPage>=0){var position=this.lookForSelectablePositionAfter(this.mSelectedPosition,nextPage,down);if(position>=0){this.mLayoutMode=ListView.LAYOUT_SPECIFIC;this.mSpecificTop=this.mPaddingTop+this.getVerticalFadingEdgeLength();if(down&&position>this.mItemCount-this.getChildCount()){this.mLayoutMode=ListView.LAYOUT_FORCE_BOTTOM;}if(!down&&position=0){this.mLayoutMode=ListView.LAYOUT_FORCE_TOP;this.setSelectionInt(position);this.invokeOnItemScrollListener();}moved=true;}}else if(direction==ListView.FOCUS_DOWN){var lastItem=this.mItemCount-1;if(this.mSelectedPosition=0){this.mLayoutMode=ListView.LAYOUT_FORCE_BOTTOM;this.setSelectionInt(_position4);this.invokeOnItemScrollListener();}moved=true;}}if(moved&&!this.awakenScrollBars()){this.awakenScrollBars();this.invalidate();}return moved;}},{key:'handleHorizontalFocusWithinListItem',value:function handleHorizontalFocusWithinListItem(direction){if(direction!=View.FOCUS_LEFT&&direction!=View.FOCUS_RIGHT){throw Error('new IllegalArgumentException("direction must be one of" + " {View.FOCUS_LEFT, View.FOCUS_RIGHT}")');}var numChildren=this.getChildCount();if(this.mItemsCanFocus&&numChildren>0&&this.mSelectedPosition!=ListView.INVALID_POSITION){var selectedView=this.getSelectedView();if(selectedView!=null&&selectedView.hasFocus()&&selectedView instanceof ViewGroup){var currentFocus=selectedView.findFocus();var nextFocus=FocusFinder.getInstance().findNextFocus(selectedView,currentFocus,direction);if(nextFocus!=null){currentFocus.getFocusedRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocus,this.mTempRect);this.offsetRectIntoDescendantCoords(nextFocus,this.mTempRect);if(nextFocus.requestFocus(direction,this.mTempRect)){return true;}}var globalNextFocus=FocusFinder.getInstance().findNextFocus(this.getRootView(),currentFocus,direction);if(globalNextFocus!=null){return this.isViewAncestorOf(globalNextFocus,this);}}}return false;}},{key:'arrowScroll',value:function arrowScroll(direction){try{this.mInLayout=true;var handled=this.arrowScrollImpl(direction);if(handled){this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));}return handled;}finally {this.mInLayout=false;}}},{key:'nextSelectedPositionForDirection',value:function nextSelectedPositionForDirection(selectedView,selectedPos,direction){var nextSelected=undefined;if(direction==View.FOCUS_DOWN){var listBottom=this.getHeight()-this.mListPadding.bottom;if(selectedView!=null&&selectedView.getBottom()<=listBottom){nextSelected=selectedPos!=ListView.INVALID_POSITION&&selectedPos>=this.mFirstPosition?selectedPos+1:this.mFirstPosition;}else {return ListView.INVALID_POSITION;}}else {var listTop=this.mListPadding.top;if(selectedView!=null&&selectedView.getTop()>=listTop){var lastPos=this.mFirstPosition+this.getChildCount()-1;nextSelected=selectedPos!=ListView.INVALID_POSITION&&selectedPos<=lastPos?selectedPos-1:lastPos;}else {return ListView.INVALID_POSITION;}}if(nextSelected<0||nextSelected>=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}return this.lookForSelectablePosition(nextSelected,direction==View.FOCUS_DOWN);}},{key:'arrowScrollImpl',value:function arrowScrollImpl(direction){if(this.getChildCount()<=0){return false;}var selectedView=this.getSelectedView();var selectedPos=this.mSelectedPosition;var nextSelectedPosition=this.nextSelectedPositionForDirection(selectedView,selectedPos,direction);var amountToScroll=this.amountToScroll(direction,nextSelectedPosition);var focusResult=this.mItemsCanFocus?this.arrowScrollFocused(direction):null;if(focusResult!=null){nextSelectedPosition=focusResult.getSelectedPosition();amountToScroll=focusResult.getAmountToScroll();}var needToRedraw=focusResult!=null;if(nextSelectedPosition!=ListView.INVALID_POSITION){this.handleNewSelectionChange(selectedView,direction,nextSelectedPosition,focusResult!=null);this.setSelectedPositionInt(nextSelectedPosition);this.setNextSelectedPositionInt(nextSelectedPosition);selectedView=this.getSelectedView();selectedPos=nextSelectedPosition;if(this.mItemsCanFocus&&focusResult==null){var focused=this.getFocusedChild();if(focused!=null){focused.clearFocus();}}needToRedraw=true;this.checkSelectionChanged();}if(amountToScroll>0){this.scrollListItemsBy(direction==View.FOCUS_UP?amountToScroll:-amountToScroll);needToRedraw=true;}if(this.mItemsCanFocus&&focusResult==null&&selectedView!=null&&selectedView.hasFocus()){var _focused=selectedView.findFocus();if(!this.isViewAncestorOf(_focused,this)||this.distanceToView(_focused)>0){_focused.clearFocus();}}if(nextSelectedPosition==ListView.INVALID_POSITION&&selectedView!=null&&!this.isViewAncestorOf(selectedView,this)){selectedView=null;this.hideSelector();this.mResurrectToPosition=ListView.INVALID_POSITION;}if(needToRedraw){if(selectedView!=null){this.positionSelector(selectedPos,selectedView);this.mSelectedTop=selectedView.getTop();}if(!this.awakenScrollBars()){this.invalidate();}this.invokeOnItemScrollListener();return true;}return false;}},{key:'handleNewSelectionChange',value:function handleNewSelectionChange(selectedView,direction,newSelectedPosition,newFocusAssigned){if(newSelectedPosition==ListView.INVALID_POSITION){throw Error('new IllegalArgumentException("newSelectedPosition needs to be valid")');}var topView=undefined;var bottomView=undefined;var topViewIndex=undefined,bottomViewIndex=undefined;var topSelected=false;var selectedIndex=this.mSelectedPosition-this.mFirstPosition;var nextSelectedIndex=newSelectedPosition-this.mFirstPosition;if(direction==View.FOCUS_UP){topViewIndex=nextSelectedIndex;bottomViewIndex=selectedIndex;topView=this.getChildAt(topViewIndex);bottomView=selectedView;topSelected=true;}else {topViewIndex=selectedIndex;bottomViewIndex=nextSelectedIndex;topView=selectedView;bottomView=this.getChildAt(bottomViewIndex);}var numChildren=this.getChildCount();if(topView!=null){topView.setSelected(!newFocusAssigned&&topSelected);this.measureAndAdjustDown(topView,topViewIndex,numChildren);}if(bottomView!=null){bottomView.setSelected(!newFocusAssigned&&!topSelected);this.measureAndAdjustDown(bottomView,bottomViewIndex,numChildren);}}},{key:'measureAndAdjustDown',value:function measureAndAdjustDown(child,childIndex,numChildren){var oldHeight=child.getHeight();this.measureItem(child);if(child.getMeasuredHeight()!=oldHeight){this.relayoutMeasuredItem(child);var heightDelta=child.getMeasuredHeight()-oldHeight;for(var i=childIndex+1;i0){childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(lpHeight,ListView.MeasureSpec.EXACTLY);}else {childHeightSpec=ListView.MeasureSpec.makeMeasureSpec(0,ListView.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}},{key:'relayoutMeasuredItem',value:function relayoutMeasuredItem(child){var w=child.getMeasuredWidth();var h=child.getMeasuredHeight();var childLeft=this.mListPadding.left;var childRight=childLeft+w;var childTop=child.getTop();var childBottom=childTop+h;child.layout(childLeft,childTop,childRight,childBottom);}},{key:'getArrowScrollPreviewLength',value:function getArrowScrollPreviewLength(){return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS,this.getVerticalFadingEdgeLength());}},{key:'amountToScroll',value:function amountToScroll(direction,nextSelectedPosition){var listBottom=this.getHeight()-this.mListPadding.bottom;var listTop=this.mListPadding.top;var numChildren=this.getChildCount();if(direction==View.FOCUS_DOWN){var indexToMakeVisible=numChildren-1;if(nextSelectedPosition!=ListView.INVALID_POSITION){indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}while(numChildren<=indexToMakeVisible){this.addViewBelow(this.getChildAt(numChildren-1),this.mFirstPosition+numChildren-1);numChildren++;}var positionToMakeVisible=this.mFirstPosition+indexToMakeVisible;var viewToMakeVisible=this.getChildAt(indexToMakeVisible);var goalBottom=listBottom;if(positionToMakeVisible=this.getMaxScrollAmount()){return 0;}var amountToScroll=viewToMakeVisible.getBottom()-goalBottom;if(this.mFirstPosition+numChildren==this.mItemCount){var max=this.getChildAt(numChildren-1).getBottom()-listBottom;amountToScroll=Math.min(amountToScroll,max);}return Math.min(amountToScroll,this.getMaxScrollAmount());}else {var _indexToMakeVisible=0;if(nextSelectedPosition!=ListView.INVALID_POSITION){_indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}while(_indexToMakeVisible<0){this.addViewAbove(this.getChildAt(0),this.mFirstPosition);this.mFirstPosition--;_indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}var _positionToMakeVisible=this.mFirstPosition+_indexToMakeVisible;var _viewToMakeVisible=this.getChildAt(_indexToMakeVisible);var goalTop=listTop;if(_positionToMakeVisible>0){goalTop+=this.getArrowScrollPreviewLength();}if(_viewToMakeVisible.getTop()>=goalTop){return 0;}if(nextSelectedPosition!=ListView.INVALID_POSITION&&_viewToMakeVisible.getBottom()-goalTop>=this.getMaxScrollAmount()){return 0;}var _amountToScroll=goalTop-_viewToMakeVisible.getTop();if(this.mFirstPosition==0){var _max=listTop-this.getChildAt(0).getTop();_amountToScroll=Math.min(_amountToScroll,_max);}return Math.min(_amountToScroll,this.getMaxScrollAmount());}}},{key:'lookForSelectablePositionOnScreen',value:function lookForSelectablePositionOnScreen(direction){var firstPosition=this.mFirstPosition;if(direction==View.FOCUS_DOWN){var startPos=this.mSelectedPosition!=ListView.INVALID_POSITION?this.mSelectedPosition+1:firstPosition;if(startPos>=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}if(startPos=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}if(_startPos>last){_startPos=last;}var _adapter=this.getAdapter();for(var _pos=_startPos;_pos>=firstPosition;_pos--){if(_adapter.isEnabled(_pos)&&this.getChildAt(_pos-firstPosition).getVisibility()==View.VISIBLE){return _pos;}}}return ListView.INVALID_POSITION;}},{key:'arrowScrollFocused',value:function arrowScrollFocused(direction){var selectedView=this.getSelectedView();var newFocus=undefined;if(selectedView!=null&&selectedView.hasFocus()){var oldFocus=selectedView.findFocus();newFocus=FocusFinder.getInstance().findNextFocus(this,oldFocus,direction);}else {if(direction==View.FOCUS_DOWN){var topFadingEdgeShowing=this.mFirstPosition>0;var listTop=this.mListPadding.top+(topFadingEdgeShowing?this.getArrowScrollPreviewLength():0);var ySearchPoint=selectedView!=null&&selectedView.getTop()>listTop?selectedView.getTop():listTop;this.mTempRect.set(0,ySearchPoint,0,ySearchPoint);}else {var bottomFadingEdgeShowing=this.mFirstPosition+this.getChildCount()-1positionOfNewFocus)){return null;}}var focusScroll=this.amountToScrollToNewFocus(direction,newFocus,positionOfNewFocus);var maxScrollAmount=this.getMaxScrollAmount();if(focusScroll0){amountToScroll+=this.getArrowScrollPreviewLength();}}}else {var listBottom=this.getHeight()-this.mListPadding.bottom;if(this.mTempRect.bottom>listBottom){amountToScroll=this.mTempRect.bottom-listBottom;if(positionOfNewFocuslistBottom){distance=this.mTempRect.top-listBottom;}return distance;}},{key:'scrollListItemsBy',value:function scrollListItemsBy(amount){this.offsetChildrenTopAndBottom(amount);var listBottom=this.getHeight()-this.mListPadding.bottom;var listTop=this.mListPadding.top;var recycleBin=this.mRecycler;if(amount<0){var numChildren=this.getChildCount();var last=this.getChildAt(numChildren-1);while(last.getBottom()listTop&&this.mFirstPosition>0){_first=this.addViewAbove(_first,this.mFirstPosition);this.mFirstPosition--;}if(_first.getTop()>listTop){this.offsetChildrenTopAndBottom(listTop-_first.getTop());}var lastIndex=this.getChildCount()-1;var _last=this.getChildAt(lastIndex);while(_last.getTop()>listBottom){var _layoutParams=_last.getLayoutParams();if(recycleBin.shouldRecycleViewType(_layoutParams.viewType)){recycleBin.addScrapView(_last,this.mFirstPosition+lastIndex);}this.detachViewFromParent(_last);_last=this.getChildAt(--lastIndex);}}}},{key:'addViewAbove',value:function addViewAbove(theView,position){var abovePosition=position-1;var view=this.obtainView(abovePosition,this.mIsScrap);var edgeOfNewChild=theView.getTop()-this.mDividerHeight;this.setupChild(view,abovePosition,edgeOfNewChild,false,this.mListPadding.left,false,this.mIsScrap[0]);return view;}},{key:'addViewBelow',value:function addViewBelow(theView,position){var belowPosition=position+1;var view=this.obtainView(belowPosition,this.mIsScrap);var edgeOfNewChild=theView.getBottom()+this.mDividerHeight;this.setupChild(view,belowPosition,edgeOfNewChild,true,this.mListPadding.left,false,this.mIsScrap[0]);return view;}},{key:'setItemsCanFocus',value:function setItemsCanFocus(itemsCanFocus){this.mItemsCanFocus=itemsCanFocus;if(!itemsCanFocus){this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);}}},{key:'getItemsCanFocus',value:function getItemsCanFocus(){return this.mItemsCanFocus;}},{key:'isOpaque',value:function isOpaque(){var retValue=this.mCachingActive&&this.mIsCacheColorOpaque&&this.mDividerIsOpaque&&this.hasOpaqueScrollbars()||_get2(Object.getPrototypeOf(ListView.prototype),'isOpaque',this).call(this);if(retValue){var listTop=this.mListPadding!=null?this.mListPadding.top:this.mPaddingTop;var first=this.getChildAt(0);if(first==null||first.getTop()>listTop){return false;}var listBottom=this.getHeight()-(this.mListPadding!=null?this.mListPadding.bottom:this.mPaddingBottom);var last=this.getChildAt(this.getChildCount()-1);if(last==null||last.getBottom()>>24==0xFF;this.mIsCacheColorOpaque=opaque;if(opaque){if(this.mDividerPaint==null){this.mDividerPaint=new Paint();}this.mDividerPaint.setColor(color);}_get2(Object.getPrototypeOf(ListView.prototype),'setCacheColorHint',this).call(this,color);}},{key:'drawOverscrollHeader',value:function drawOverscrollHeader(canvas,drawable,bounds){var height=drawable.getMinimumHeight();canvas.save();canvas.clipRect(bounds);var span=bounds.bottom-bounds.top;if(span0&&this.mDivider!=null;if(drawDividers||drawOverscrollHeader||drawOverscrollFooter){var bounds=this.mTempRect;bounds.left=this.mPaddingLeft;bounds.right=this.mRight-this.mLeft-this.mPaddingRight;var count=this.getChildCount();var headerCount=this.mHeaderViewInfos.size();var itemCount=this.mItemCount;var footerLimit=itemCount-this.mFooterViewInfos.size();var headerDividers=this.mHeaderDividersEnabled;var footerDividers=this.mFooterDividersEnabled;var first=this.mFirstPosition;var areAllItemsSelectable=this.mAreAllItemsSelectable;var adapter=this.mAdapter;var fillForMissingDividers=this.isOpaque()&&!_get2(Object.getPrototypeOf(ListView.prototype),'isOpaque',this).call(this);if(fillForMissingDividers&&this.mDividerPaint==null&&this.mIsCacheColorOpaque){this.mDividerPaint=new Paint();this.mDividerPaint.setColor(this.getCacheColorHint());}var paint=this.mDividerPaint;var effectivePaddingTop=0;var effectivePaddingBottom=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){effectivePaddingTop=this.mListPadding.top;effectivePaddingBottom=this.mListPadding.bottom;}var listBottom=this.mBottom-this.mTop-effectivePaddingBottom+this.mScrollY;if(!this.mStackFromBottom){var bottom=0;var scrollY=this.mScrollY;if(count>0&&scrollY<0){if(drawOverscrollHeader){bounds.bottom=0;bounds.top=scrollY;this.drawOverscrollHeader(canvas,overscrollHeader,bounds);}else if(drawDividers){bounds.bottom=0;bounds.top=-dividerHeight;this.drawDivider(canvas,bounds,-1);}}for(var i=0;i=footerLimit;if((headerDividers||!isHeader)&&(footerDividers||!isFooter)){var child=this.getChildAt(i);bottom=child.getBottom();var isLastItem=i==count-1;if(drawDividers&&bottom=footerLimit)){bounds.top=bottom;bounds.bottom=bottom+dividerHeight;this.drawDivider(canvas,bounds,i);}else if(fillForMissingDividers){bounds.top=bottom;bounds.bottom=bottom+dividerHeight;canvas.drawRect(bounds,paint);}}}}var overFooterBottom=this.mBottom+this.mScrollY;if(drawOverscrollFooter&&first+count==itemCount&&overFooterBottom>bottom){bounds.top=bottom;bounds.bottom=overFooterBottom;this.drawOverscrollFooter(canvas,overscrollFooter,bounds);}}else {var top=undefined;var _scrollY=this.mScrollY;if(count>0&&drawOverscrollHeader){bounds.top=_scrollY;bounds.bottom=this.getChildAt(0).getTop();this.drawOverscrollHeader(canvas,overscrollHeader,bounds);}var start=drawOverscrollHeader?1:0;for(var _i47=start;_i47=footerLimit;if((headerDividers||!_isHeader)&&(footerDividers||!_isFooter)){var _child15=this.getChildAt(_i47);top=_child15.getTop();if(drawDividers&&top>effectivePaddingTop){var isFirstItem=_i47==start;var previousIndex=_itemIndex-1;if(areAllItemsSelectable||(adapter.isEnabled(_itemIndex)||headerDividers&&_isHeader||footerDividers&&_isFooter)&&(isFirstItem||adapter.isEnabled(previousIndex)||headerDividers&&previousIndex=footerLimit)){bounds.top=top-dividerHeight;bounds.bottom=top;this.drawDivider(canvas,bounds,_i47-1);}else if(fillForMissingDividers){bounds.top=top-dividerHeight;bounds.bottom=top;canvas.drawRect(bounds,paint);}}}}if(count>0&&_scrollY>0){if(drawOverscrollFooter){var absListBottom=this.mBottom;bounds.top=absListBottom;bounds.bottom=absListBottom+_scrollY;this.drawOverscrollFooter(canvas,overscrollFooter,bounds);}else if(drawDividers){bounds.top=listBottom;bounds.bottom=listBottom+dividerHeight;this.drawDivider(canvas,bounds,-1);}}}}_get2(Object.getPrototypeOf(ListView.prototype),'dispatchDraw',this).call(this,canvas);}},{key:'drawChild',value:function drawChild(canvas,child,drawingTime){var more=_get2(Object.getPrototypeOf(ListView.prototype),'drawChild',this).call(this,canvas,child,drawingTime);if(this.mCachingActive&&child.mCachingFailed){this.mCachingActive=false;}return more;}},{key:'drawDivider',value:function drawDivider(canvas,bounds,childIndex){var divider=this.mDivider;divider.setBounds(bounds);divider.draw(canvas);}},{key:'getDivider',value:function getDivider(){return this.mDivider;}},{key:'setDivider',value:function setDivider(divider){if(divider!=null){this.mDividerHeight=divider.getIntrinsicHeight();}else {this.mDividerHeight=0;}this.mDivider=divider;this.mDividerIsOpaque=divider==null||divider.getOpacity()==PixelFormat.OPAQUE;this.requestLayout();this.invalidate();}},{key:'getDividerHeight',value:function getDividerHeight(){return this.mDividerHeight;}},{key:'setDividerHeight',value:function setDividerHeight(height){this.mDividerHeight=height;this.requestLayout();this.invalidate();}},{key:'setHeaderDividersEnabled',value:function setHeaderDividersEnabled(headerDividersEnabled){this.mHeaderDividersEnabled=headerDividersEnabled;this.invalidate();}},{key:'areHeaderDividersEnabled',value:function areHeaderDividersEnabled(){return this.mHeaderDividersEnabled;}},{key:'setFooterDividersEnabled',value:function setFooterDividersEnabled(footerDividersEnabled){this.mFooterDividersEnabled=footerDividersEnabled;this.invalidate();}},{key:'areFooterDividersEnabled',value:function areFooterDividersEnabled(){return this.mFooterDividersEnabled;}},{key:'setOverscrollHeader',value:function setOverscrollHeader(header){this.mOverScrollHeader=header;if(this.mScrollY<0){this.invalidate();}}},{key:'getOverscrollHeader',value:function getOverscrollHeader(){return this.mOverScrollHeader;}},{key:'setOverscrollFooter',value:function setOverscrollFooter(footer){this.mOverScrollFooter=footer;this.invalidate();}},{key:'getOverscrollFooter',value:function getOverscrollFooter(){return this.mOverScrollFooter;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(Object.getPrototypeOf(ListView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);var adapter=this.mAdapter;var closetChildIndex=-1;var closestChildTop=0;if(adapter!=null&&gainFocus&&previouslyFocusedRect!=null){previouslyFocusedRect.offset(this.mScrollX,this.mScrollY);if(adapter.getCount()=0){this.setSelectionFromTop(closetChildIndex+this.mFirstPosition,closestChildTop);}else {this.requestLayout();}}},{key:'onFinishInflate',value:function onFinishInflate(){_get2(Object.getPrototypeOf(ListView.prototype),'onFinishInflate',this).call(this);var count=this.getChildCount();if(count>0){for(var i=0;i0){throw new Error("ScrollView can host only one direct child");}for(var _len38=arguments.length,args=Array(_len38),_key39=0;_key39<_len38;_key39++){args[_key39]=arguments[_key39];}return (_get5=_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'addView',this)).call.apply(_get5,[this].concat(args));}},{key:'canScroll',value:function canScroll(){var child=this.getChildAt(0);if(child!=null){var childWidth=child.getWidth();return this.getWidth()0){var child=this.getChildAt(0);var width=this.getMeasuredWidth();if(child.getMeasuredWidth()0){var scrollX=this.mScrollX;var child=this.getChildAt(0);return !(y=child.getBottom()||x=child.getRight()-scrollX);}return false;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else {this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();if(action==MotionEvent.ACTION_MOVE&&this.mIsBeingDragged){return true;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==HorizontalScrollView.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);if(pointerIndex==-1){Log.e(HorizontalScrollView.TAG,"Invalid pointerId="+activePointerId+" in onInterceptTouchEvent");break;}var x=Math.floor(ev.getX(pointerIndex));var xDiff=Math.floor(Math.abs(x-this.mLastMotionX));if(xDiff>this.mTouchSlop){this.mIsBeingDragged=true;this.mLastMotionX=x;this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);if(this.mParent!=null)this.mParent.requestDisallowInterceptTouchEvent(true);}break;}case MotionEvent.ACTION_DOWN:{var _x177=Math.floor(ev.getX());if(!this.inChild(Math.floor(_x177),Math.floor(ev.getY()))){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionX=_x177;this.mActivePointerId=ev.getPointerId(0);this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);this.mIsBeingDragged=!this.mScroller.isFinished();break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.mIsBeingDragged=false;this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();this.mLastMotionX=Math.floor(ev.getX(index));this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionX=Math.floor(ev.getX(ev.findPointerIndex(this.mActivePointerId)));break;}return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var action=ev.getAction();switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{if(this.getChildCount()==0){return false;}if(this.mIsBeingDragged=!this.mScroller.isFinished()){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.mLastMotionX=Math.floor(ev.getX());this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);if(activePointerIndex==-1){Log.e(HorizontalScrollView.TAG,"Invalid pointerId="+this.mActivePointerId+" in onTouchEvent");break;}var x=Math.floor(ev.getX(activePointerIndex));var deltaX=this.mLastMotionX-x;if(!this.mIsBeingDragged&&Math.abs(deltaX)>this.mTouchSlop){var _parent2=this.getParent();if(_parent2!=null){_parent2.requestDisallowInterceptTouchEvent(true);}this.mIsBeingDragged=true;if(deltaX>0){deltaX-=this.mTouchSlop;}else {deltaX+=this.mTouchSlop;}}if(this.mIsBeingDragged){this.mLastMotionX=x;var oldX=this.mScrollX;var oldY=this.mScrollY;var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==HorizontalScrollView.OVER_SCROLL_ALWAYS||overscrollMode==HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;if(this.overScrollBy(deltaX,0,this.mScrollX,0,range,0,this.mOverscrollDistance,0,true)){this.mVelocityTracker.clear();}if(canOverscroll){}}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));if(this.getChildCount()>0){var isOverDrag=this.mScrollX<0||this.mScrollX>this.getScrollRange();if(!isOverDrag&&Math.abs(initialVelocity)>this.mMinimumVelocity){this.fling(-initialVelocity);}else {if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}}}this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;this.mIsBeingDragged=false;this.recycleVelocityTracker();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged&&this.getChildCount()>0){if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;this.mIsBeingDragged=false;this.recycleVelocityTracker();}break;case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}return true;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionX=Math.floor(ev.getX(newPointerIndex));this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(event.isPointerEvent()){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(!this.mIsBeingDragged){var hscroll=undefined;hscroll=-event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(hscroll!=0){var delta=Math.floor(hscroll*this.getHorizontalScrollFactor());var range=this.getScrollRange();var oldScrollX=this.mScrollX;var newScrollX=oldScrollX+delta;if(newScrollX<0){newScrollX=0;}else if(newScrollX>range){newScrollX=range;}if(newScrollX!=oldScrollX){_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,newScrollX,this.mScrollY);return true;}}}}}}return _get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return true;}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(!this.mScroller.isFinished()){var oldX=this.mScrollX;var oldY=this.mScrollY;this.mScrollX=scrollX;this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(clampedX){this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0);}}else {_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,scrollX,scrollY);}this.awakenScrollBars();}},{key:'getScrollRange',value:function getScrollRange(){var scrollRange=0;if(this.getChildCount()>0){var child=this.getChildAt(0);scrollRange=Math.max(0,child.getWidth()-(this.getWidth()-this.mPaddingLeft-this.mPaddingRight));}return scrollRange;}},{key:'findFocusableViewInMyBounds',value:function findFocusableViewInMyBounds(leftFocus,left,preferredFocusable){var fadingEdgeLength=this.getHorizontalFadingEdgeLength()/2;var leftWithoutFadingEdge=left+fadingEdgeLength;var rightWithoutFadingEdge=left+this.getWidth()-fadingEdgeLength;if(preferredFocusable!=null&&preferredFocusable.getLeft()leftWithoutFadingEdge){return preferredFocusable;}return this.findFocusableViewInBounds(leftFocus,leftWithoutFadingEdge,rightWithoutFadingEdge);}},{key:'findFocusableViewInBounds',value:function findFocusableViewInBounds(leftFocus,left,right){var focusables=this.getFocusables(View.FOCUS_FORWARD);var focusCandidate=null;var foundFullyContainedFocusable=false;var count=focusables.size();for(var i=0;ifocusCandidate.getRight();if(foundFullyContainedFocusable){if(viewIsFullyContained&&viewIsCloserToBoundary){focusCandidate=view;}}else {if(viewIsFullyContained){focusCandidate=view;foundFullyContainedFocusable=true;}else if(viewIsCloserToBoundary){focusCandidate=view;}}}}}return focusCandidate;}},{key:'pageScroll',value:function pageScroll(direction){var right=direction==View.FOCUS_RIGHT;var width=this.getWidth();if(right){this.mTempRect.left=this.getScrollX()+width;var count=this.getChildCount();if(count>0){var view=this.getChildAt(0);if(this.mTempRect.left+width>view.getRight()){this.mTempRect.left=view.getRight()-width;}}}else {this.mTempRect.left=this.getScrollX()-width;if(this.mTempRect.left<0){this.mTempRect.left=0;}}this.mTempRect.right=this.mTempRect.left+width;return this.scrollAndFocus(direction,this.mTempRect.left,this.mTempRect.right);}},{key:'fullScroll',value:function fullScroll(direction){var right=direction==View.FOCUS_RIGHT;var width=this.getWidth();this.mTempRect.left=0;this.mTempRect.right=width;if(right){var count=this.getChildCount();if(count>0){var view=this.getChildAt(0);this.mTempRect.right=view.getRight();this.mTempRect.left=this.mTempRect.right-width;}}return this.scrollAndFocus(direction,this.mTempRect.left,this.mTempRect.right);}},{key:'scrollAndFocus',value:function scrollAndFocus(direction,left,right){var handled=true;var width=this.getWidth();var containerLeft=this.getScrollX();var containerRight=containerLeft+width;var goLeft=direction==View.FOCUS_LEFT;var newFocused=this.findFocusableViewInBounds(goLeft,left,right);if(newFocused==null){newFocused=this;}if(left>=containerLeft&&right<=containerRight){handled=false;}else {var delta=goLeft?left-containerLeft:right-containerRight;this.doScrollX(delta);}if(newFocused!=this.findFocus())newFocused.requestFocus(direction);return handled;}},{key:'arrowScroll',value:function arrowScroll(direction){var currentFocused=this.findFocus();if(currentFocused==this)currentFocused=null;var nextFocused=FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);var maxJump=this.getMaxScrollAmount();if(nextFocused!=null&&this.isWithinDeltaOfScreen(nextFocused,maxJump)){nextFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(nextFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollX(scrollDelta);nextFocused.requestFocus(direction);}else {var _scrollDelta2=maxJump;if(direction==View.FOCUS_LEFT&&this.getScrollX()<_scrollDelta2){_scrollDelta2=this.getScrollX();}else if(direction==View.FOCUS_RIGHT&&this.getChildCount()>0){var daRight=this.getChildAt(0).getRight();var screenRight=this.getScrollX()+this.getWidth();if(daRight-screenRight=this.getScrollX()&&this.mTempRect.left-delta<=this.getScrollX()+this.getWidth();}},{key:'doScrollX',value:function doScrollX(delta){if(delta!=0){if(this.mSmoothScrollingEnabled){this.smoothScrollBy(delta,0);}else {this.scrollBy(delta,0);}}}},{key:'smoothScrollBy',value:function smoothScrollBy(dx,dy){if(this.getChildCount()==0){return;}var duration=AnimationUtils.currentAnimationTimeMillis()-this.mLastScroll;if(duration>HorizontalScrollView.ANIMATED_SCROLL_GAP){var width=this.getWidth()-this.mPaddingRight-this.mPaddingLeft;var right=this.getChildAt(0).getWidth();var maxX=Math.max(0,right-width);var scrollX=this.mScrollX;dx=Math.max(0,Math.min(scrollX+dx,maxX))-scrollX;this.mScroller.startScroll(scrollX,this.mScrollY,dx,0);this.postInvalidateOnAnimation();}else {if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(dx,dy);}this.mLastScroll=AnimationUtils.currentAnimationTimeMillis();}},{key:'smoothScrollTo',value:function smoothScrollTo(x,y){this.smoothScrollBy(x-this.mScrollX,y-this.mScrollY);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){var count=this.getChildCount();var contentWidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;if(count==0){return contentWidth;}var scrollRange=this.getChildAt(0).getRight();var scrollX=this.mScrollX;var overscrollRight=Math.max(0,scrollRange-contentWidth);if(scrollX<0){scrollRange-=scrollX;}else if(scrollX>overscrollRight){scrollRange+=scrollX-overscrollRight;}return scrollRange;}},{key:'computeHorizontalScrollOffset',value:function computeHorizontalScrollOffset(){return Math.max(0,_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'computeHorizontalScrollOffset',this).call(this));}},{key:'measureChild',value:function measureChild(child,parentWidthMeasureSpec,parentHeightMeasureSpec){var lp=child.getLayoutParams();var childWidthMeasureSpec=undefined;var childHeightMeasureSpec=undefined;childHeightMeasureSpec=HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec,this.mPaddingTop+this.mPaddingBottom,lp.height);childWidthMeasureSpec=HorizontalScrollView.MeasureSpec.makeMeasureSpec(0,HorizontalScrollView.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'measureChildWithMargins',value:function measureChildWithMargins(child,parentWidthMeasureSpec,widthUsed,parentHeightMeasureSpec,heightUsed){var lp=child.getLayoutParams();var childHeightMeasureSpec=HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+lp.topMargin+lp.bottomMargin+heightUsed,lp.height);var childWidthMeasureSpec=HorizontalScrollView.MeasureSpec.makeMeasureSpec(lp.leftMargin+lp.rightMargin,HorizontalScrollView.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller.computeScrollOffset()){var oldX=this.mScrollX;var oldY=this.mScrollY;var x=this.mScroller.getCurrX();var y=this.mScroller.getCurrY();if(oldX!=x||oldY!=y){var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==HorizontalScrollView.OVER_SCROLL_ALWAYS||overscrollMode==HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;this.overScrollBy(x-oldX,y-oldY,oldX,oldY,range,0,this.mOverflingDistance,0,false);this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(canOverscroll){}}if(!this.awakenScrollBars()){this.postInvalidateOnAnimation();}}}},{key:'scrollToChild',value:function scrollToChild(child){child.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(child,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);if(scrollDelta!=0){this.scrollBy(scrollDelta,0);}}},{key:'scrollToChildRect',value:function scrollToChildRect(rect,immediate){var delta=this.computeScrollDeltaToGetChildRectOnScreen(rect);var scroll=delta!=0;if(scroll){if(immediate){this.scrollBy(delta,0);}else {this.smoothScrollBy(delta,0);}}return scroll;}},{key:'computeScrollDeltaToGetChildRectOnScreen',value:function computeScrollDeltaToGetChildRectOnScreen(rect){if(this.getChildCount()==0)return 0;var width=this.getWidth();var screenLeft=this.getScrollX();var screenRight=screenLeft+width;var fadingEdge=this.getHorizontalFadingEdgeLength();if(rect.left>0){screenLeft+=fadingEdge;}if(rect.rightscreenRight&&rect.left>screenLeft){if(rect.width()>width){scrollXDelta+=rect.left-screenLeft;}else {scrollXDelta+=rect.right-screenRight;}var right=this.getChildAt(0).getRight();var distanceToRight=right-screenRight;scrollXDelta=Math.min(scrollXDelta,distanceToRight);}else if(rect.leftwidth){scrollXDelta-=screenRight-rect.right;}else {scrollXDelta-=screenLeft-rect.left;}scrollXDelta=Math.max(scrollXDelta,-this.getScrollX());}return scrollXDelta;}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(!this.mIsLayoutDirty){this.scrollToChild(focused);}else {this.mChildToScrollTo=focused;}_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'requestChildFocus',this).call(this,child,focused);}},{key:'onRequestFocusInDescendants',value:function onRequestFocusInDescendants(direction,previouslyFocusedRect){if(direction==View.FOCUS_FORWARD){direction=View.FOCUS_RIGHT;}else if(direction==View.FOCUS_BACKWARD){direction=View.FOCUS_LEFT;}var nextFocus=previouslyFocusedRect==null?FocusFinder.getInstance().findNextFocus(this,null,direction):FocusFinder.getInstance().findNextFocusFromRect(this,previouslyFocusedRect,direction);if(nextFocus==null){return false;}if(this.isOffScreen(nextFocus)){return false;}return nextFocus.requestFocus(direction,previouslyFocusedRect);}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){rectangle.offset(child.getLeft()-child.getScrollX(),child.getTop()-child.getScrollY());return this.scrollToChildRect(rectangle,immediate);}},{key:'requestLayout',value:function requestLayout(){this.mIsLayoutDirty=true;_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'requestLayout',this).call(this);}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var childWidth=0;var childMargins=0;if(this.getChildCount()>0){childWidth=this.getChildAt(0).getMeasuredWidth();var childParams=this.getChildAt(0).getLayoutParams();childMargins=childParams.leftMargin+childParams.rightMargin;}var available=r-l-this.getPaddingLeftWithForeground()-this.getPaddingRightWithForeground()-childMargins;var forceLeftGravity=childWidth>available;this.layoutChildren(l,t,r,b,forceLeftGravity);this.mIsLayoutDirty=false;if(this.mChildToScrollTo!=null&&HorizontalScrollView.isViewDescendantOf(this.mChildToScrollTo,this)){this.scrollToChild(this.mChildToScrollTo);}this.mChildToScrollTo=null;if(!this.isLaidOut()){var scrollRange=Math.max(0,childWidth-(r-l-this.mPaddingLeft-this.mPaddingRight));{if(this.isLayoutRtl()){this.mScrollX=scrollRange-this.mScrollX;}}if(this.mScrollX>scrollRange){this.mScrollX=scrollRange;}else if(this.mScrollX<0){this.mScrollX=0;}}this.scrollTo(this.mScrollX,this.mScrollY);}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);var currentFocused=this.findFocus();if(null==currentFocused||this==currentFocused)return;var maxJump=this.mRight-this.mLeft;if(this.isWithinDeltaOfScreen(currentFocused,maxJump)){currentFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollX(scrollDelta);}}},{key:'fling',value:function fling(velocityX){if(this.getChildCount()>0){var width=this.getWidth()-this.mPaddingRight-this.mPaddingLeft;var right=this.getChildAt(0).getWidth();this.mScroller.fling(this.mScrollX,this.mScrollY,velocityX,0,0,Math.max(0,right-width),0,0,width/2,0);var movingRight=velocityX>0;var currentFocused=this.findFocus();var newFocused=this.findFocusableViewInMyBounds(movingRight,this.mScroller.getFinalX(),currentFocused);if(newFocused==null){newFocused=this;}if(newFocused!=currentFocused){newFocused.requestFocus(movingRight?View.FOCUS_RIGHT:View.FOCUS_LEFT);}this.postInvalidateOnAnimation();}}},{key:'scrollTo',value:function scrollTo(x,y){if(this.getChildCount()>0){var child=this.getChildAt(0);x=HorizontalScrollView.clamp(x,this.getWidth()-this.mPaddingRight-this.mPaddingLeft,child.getWidth());y=HorizontalScrollView.clamp(y,this.getHeight()-this.mPaddingBottom-this.mPaddingTop,child.getHeight());if(x!=this.mScrollX||y!=this.mScrollY){_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,x,y);}}}},{key:'setOverScrollMode',value:function setOverScrollMode(mode){_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'setOverScrollMode',this).call(this,mode);}},{key:'draw',value:function draw(canvas){_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'draw',this).call(this,canvas);}},{key:'mOverflingDistance',get:function get(){if(this.mScrollX<-this._mOverflingDistance)return -this.mScrollX;var overDistance=this.mScrollX-this.getScrollRange();if(overDistance>this._mOverflingDistance)return overDistance;return this._mOverflingDistance;},set:function set(value){this._mOverflingDistance=value;}}],[{key:'isViewDescendantOf',value:function isViewDescendantOf(child,parent){if(child==parent){return true;}var theParent=child.getParent();return theParent instanceof ViewGroup&&HorizontalScrollView.isViewDescendantOf(theParent,parent);}},{key:'clamp',value:function clamp(n,my,child){if(my>=child||n<0){return 0;}if(my+n>child){return child-my;}return n;}}]);return HorizontalScrollView;}(FrameLayout);HorizontalScrollView.ANIMATED_SCROLL_GAP=ScrollView.ANIMATED_SCROLL_GAP;HorizontalScrollView.MAX_SCROLL_FACTOR=ScrollView.MAX_SCROLL_FACTOR;HorizontalScrollView.TAG="HorizontalScrollView";HorizontalScrollView.INVALID_POINTER=-1;widget.HorizontalScrollView=HorizontalScrollView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ArrayMap=android.util.ArrayMap;var ArrayDeque=java.util.ArrayDeque;var ArrayList=java.util.ArrayList;var Rect=android.graphics.Rect;var SynchronizedPool=android.util.Pools.SynchronizedPool;var SparseMap=android.util.SparseMap;var Gravity=android.view.Gravity;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var System=java.lang.System;var RelativeLayout=function(_ViewGroup4){_inherits(RelativeLayout,_ViewGroup4);function RelativeLayout(context,bindElement,defStyle){_classCallCheck(this,RelativeLayout);var _this120=_possibleConstructorReturn(this,Object.getPrototypeOf(RelativeLayout).call(this,context,bindElement,defStyle));_this120.mBaselineView=null;_this120.mGravity=Gravity.START|Gravity.TOP;_this120.mContentBounds=new Rect();_this120.mSelfBounds=new Rect();_this120.mIgnoreGravity=View.NO_ID;_this120.mGraph=new RelativeLayout.DependencyGraph();_this120.mAllowBrokenMeasureSpecs=false;_this120.mMeasureVerticalWithPaddingMargin=false;_this120._attrBinder.addAttr('ignoreGravity',function(value){_this120.setIgnoreGravity(value);});_this120._attrBinder.addAttr('gravity',function(value){_this120.setGravity(_this120._attrBinder.parseGravity(value,_this120.mGravity));});_this120.queryCompatibilityModes();return _this120;}_createClass(RelativeLayout,[{key:'queryCompatibilityModes',value:function queryCompatibilityModes(){this.mAllowBrokenMeasureSpecs=false;this.mMeasureVerticalWithPaddingMargin=true;}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return false;}},{key:'setIgnoreGravity',value:function setIgnoreGravity(viewId){this.mIgnoreGravity=viewId;}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'setGravity',value:function setGravity(gravity){if(this.mGravity!=gravity){if((gravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK)==0){gravity|=Gravity.START;}if((gravity&Gravity.VERTICAL_GRAVITY_MASK)==0){gravity|=Gravity.TOP;}this.mGravity=gravity;this.requestLayout();}}},{key:'setHorizontalGravity',value:function setHorizontalGravity(horizontalGravity){var gravity=horizontalGravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;if((this.mGravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK)!=gravity){this.mGravity=this.mGravity&~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK|gravity;this.requestLayout();}}},{key:'setVerticalGravity',value:function setVerticalGravity(verticalGravity){var gravity=verticalGravity&Gravity.VERTICAL_GRAVITY_MASK;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=gravity){this.mGravity=this.mGravity&~Gravity.VERTICAL_GRAVITY_MASK|gravity;this.requestLayout();}}},{key:'getBaseline',value:function getBaseline(){return this.mBaselineView!=null?this.mBaselineView.getBaseline():_get2(Object.getPrototypeOf(RelativeLayout.prototype),'getBaseline',this).call(this);}},{key:'requestLayout',value:function requestLayout(){_get2(Object.getPrototypeOf(RelativeLayout.prototype),'requestLayout',this).call(this);this.mDirtyHierarchy=true;}},{key:'sortChildren',value:function sortChildren(){var count=this.getChildCount();if(this.mSortedVerticalChildren==null||this.mSortedVerticalChildren.length!=count){this.mSortedVerticalChildren=new Array(count);}if(this.mSortedHorizontalChildren==null||this.mSortedHorizontalChildren.length!=count){this.mSortedHorizontalChildren=new Array(count);}var graph=this.mGraph;graph.clear();for(var i=0;i=0){width=Math.max(width,this.mLayoutParams.width);}width=Math.max(width,this.getSuggestedMinimumWidth());width=RelativeLayout.resolveSize(width,widthMeasureSpec);if(offsetHorizontalAxis){for(var _i50=0;_i50=0){height=Math.max(height,this.mLayoutParams.height);}height=Math.max(height,this.getSuggestedMinimumHeight());height=RelativeLayout.resolveSize(height,heightMeasureSpec);if(offsetVerticalAxis){for(var _i51=0;_i51=0){childHeightMeasureSpec=RelativeLayout.MeasureSpec.makeMeasureSpec(params.height,RelativeLayout.MeasureSpec.EXACTLY);}else {childHeightMeasureSpec=RelativeLayout.MeasureSpec.makeMeasureSpec(0,RelativeLayout.MeasureSpec.UNSPECIFIED);}}else if(params.width==RelativeLayout.LayoutParams.MATCH_PARENT){childHeightMeasureSpec=RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight,RelativeLayout.MeasureSpec.EXACTLY);}else {childHeightMeasureSpec=RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight,RelativeLayout.MeasureSpec.AT_MOST);}child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'getChildMeasureSpec',value:function getChildMeasureSpec(childStart,childEnd,childSize,startMargin,endMargin,startPadding,endPadding,mySize){if(mySize<0&&!this.mAllowBrokenMeasureSpecs){if(childSize>=0){return RelativeLayout.MeasureSpec.makeMeasureSpec(childSize,RelativeLayout.MeasureSpec.EXACTLY);}return RelativeLayout.MeasureSpec.makeMeasureSpec(0,RelativeLayout.MeasureSpec.UNSPECIFIED);}var childSpecMode=0;var childSpecSize=0;var tempStart=childStart;var tempEnd=childEnd;if(tempStart<0){tempStart=startPadding+startMargin;}if(tempEnd<0){tempEnd=mySize-endPadding-endMargin;}var maxAvailable=tempEnd-tempStart;if(childStart>=0&&childEnd>=0){childSpecMode=RelativeLayout.MeasureSpec.EXACTLY;childSpecSize=maxAvailable;}else {if(childSize>=0){childSpecMode=RelativeLayout.MeasureSpec.EXACTLY;if(maxAvailable>=0){childSpecSize=Math.min(maxAvailable,childSize);}else {childSpecSize=childSize;}}else if(childSize==RelativeLayout.LayoutParams.MATCH_PARENT){childSpecMode=RelativeLayout.MeasureSpec.EXACTLY;childSpecSize=maxAvailable;}else if(childSize==RelativeLayout.LayoutParams.WRAP_CONTENT){if(maxAvailable>=0){childSpecMode=RelativeLayout.MeasureSpec.AT_MOST;childSpecSize=maxAvailable;}else {childSpecMode=RelativeLayout.MeasureSpec.UNSPECIFIED;childSpecSize=0;}}}return RelativeLayout.MeasureSpec.makeMeasureSpec(childSpecSize,childSpecMode);}},{key:'positionChildHorizontal',value:function positionChildHorizontal(child,params,myWidth,wrapContent){var layoutDirection=this.getLayoutDirection();var rules=params.getRules(layoutDirection);if(params.mLeft<0&¶ms.mRight>=0){params.mLeft=params.mRight-child.getMeasuredWidth();}else if(params.mLeft>=0&¶ms.mRight<0){params.mRight=params.mLeft+child.getMeasuredWidth();}else if(params.mLeft<0&¶ms.mRight<0){if(rules[RelativeLayout.CENTER_IN_PARENT]!=null||rules[RelativeLayout.CENTER_HORIZONTAL]!=null){if(!wrapContent){RelativeLayout.centerHorizontal(child,params,myWidth);}else {params.mLeft=this.mPaddingLeft+params.leftMargin;params.mRight=params.mLeft+child.getMeasuredWidth();}return true;}else {if(this.isLayoutRtl()){params.mRight=myWidth-this.mPaddingRight-params.rightMargin;params.mLeft=params.mRight-child.getMeasuredWidth();}else {params.mLeft=this.mPaddingLeft+params.leftMargin;params.mRight=params.mLeft+child.getMeasuredWidth();}}}return rules[RelativeLayout.ALIGN_PARENT_END]!=null;}},{key:'positionChildVertical',value:function positionChildVertical(child,params,myHeight,wrapContent){var rules=params.getRules();if(params.mTop<0&¶ms.mBottom>=0){params.mTop=params.mBottom-child.getMeasuredHeight();}else if(params.mTop>=0&¶ms.mBottom<0){params.mBottom=params.mTop+child.getMeasuredHeight();}else if(params.mTop<0&¶ms.mBottom<0){if(rules[RelativeLayout.CENTER_IN_PARENT]!=null||rules[RelativeLayout.CENTER_VERTICAL]!=null){if(!wrapContent){RelativeLayout.centerVertical(child,params,myHeight);}else {params.mTop=this.mPaddingTop+params.topMargin;params.mBottom=params.mTop+child.getMeasuredHeight();}return true;}else {params.mTop=this.mPaddingTop+params.topMargin;params.mBottom=params.mTop+child.getMeasuredHeight();}}return rules[RelativeLayout.ALIGN_PARENT_BOTTOM]!=null;}},{key:'applyHorizontalSizeRules',value:function applyHorizontalSizeRules(childParams,myWidth,rules){var anchorParams=undefined;childParams.mLeft=-1;childParams.mRight=-1;anchorParams=this.getRelatedViewParams(rules,RelativeLayout.LEFT_OF);if(anchorParams!=null){childParams.mRight=anchorParams.mLeft-(anchorParams.leftMargin+childParams.rightMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.LEFT_OF]!=null){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.RIGHT_OF);if(anchorParams!=null){childParams.mLeft=anchorParams.mRight+(anchorParams.rightMargin+childParams.leftMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.RIGHT_OF]!=null){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_LEFT);if(anchorParams!=null){childParams.mLeft=anchorParams.mLeft+childParams.leftMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_LEFT]!=null){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_RIGHT);if(anchorParams!=null){childParams.mRight=anchorParams.mRight-childParams.rightMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_RIGHT]!=null){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}if(null!=rules[RelativeLayout.ALIGN_PARENT_LEFT]){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}if(null!=rules[RelativeLayout.ALIGN_PARENT_RIGHT]){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}}},{key:'applyVerticalSizeRules',value:function applyVerticalSizeRules(childParams,myHeight){var rules=childParams.getRules();var anchorParams=undefined;childParams.mTop=-1;childParams.mBottom=-1;anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ABOVE);if(anchorParams!=null){childParams.mBottom=anchorParams.mTop-(anchorParams.topMargin+childParams.bottomMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.ABOVE]!=null){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.BELOW);if(anchorParams!=null){childParams.mTop=anchorParams.mBottom+(anchorParams.bottomMargin+childParams.topMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.BELOW]!=null){childParams.mTop=this.mPaddingTop+childParams.topMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_TOP);if(anchorParams!=null){childParams.mTop=anchorParams.mTop+childParams.topMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_TOP]!=null){childParams.mTop=this.mPaddingTop+childParams.topMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_BOTTOM);if(anchorParams!=null){childParams.mBottom=anchorParams.mBottom-childParams.bottomMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_BOTTOM]!=null){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}if(null!=rules[RelativeLayout.ALIGN_PARENT_TOP]){childParams.mTop=this.mPaddingTop+childParams.topMargin;}if(null!=rules[RelativeLayout.ALIGN_PARENT_BOTTOM]){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}if(rules[RelativeLayout.ALIGN_BASELINE]!=null){this.mHasBaselineAlignedChild=true;}}},{key:'getRelatedView',value:function getRelatedView(rules,relation){var id=rules[relation];if(id!=null){var node=this.mGraph.mKeyNodes.get(id);if(node==null)return null;var v=node.view;while(v.getVisibility()==View.GONE){rules=v.getLayoutParams().getRules(v.getLayoutDirection());node=this.mGraph.mKeyNodes.get(rules[relation]);if(node==null)return null;v=node.view;}return v;}return null;}},{key:'getRelatedViewParams',value:function getRelatedViewParams(rules,relation){var v=this.getRelatedView(rules,relation);if(v!=null){var params=v.getLayoutParams();if(params instanceof RelativeLayout.LayoutParams){return v.getLayoutParams();}}return null;}},{key:'getRelatedViewBaseline',value:function getRelatedViewBaseline(rules,relation){var v=this.getRelatedView(rules,relation);if(v!=null){return v.getBaseline();}return -1;}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var count=this.getChildCount();for(var i=0;i0){_this124.setForceDisableDrawText(true);}_this124.onInputElementFocusChanged(true);};inputElement.oninput=function(e){return _this124.onInputValueChange(e);};inputElement.removeEventListener('textInput',function(e){return _this124.onDomTextInput(e);});inputElement.addEventListener('textInput',function(e){return _this124.onDomTextInput(e);});if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(inputElement);}this.inputElement=inputElement;}},{key:'switchToSingleLineInputElement',value:function switchToSingleLineInputElement(){if(!this.mSingleLineInputElement){this.mSingleLineInputElement=document.createElement('input');this.mSingleLineInputElement.style.position='absolute';this.mSingleLineInputElement.style['webkitAppearance']='none';this.mSingleLineInputElement.style.borderRadius='0';this.mSingleLineInputElement.style.overflow='auto';this.mSingleLineInputElement.style.background='transparent';this.mSingleLineInputElement.style.fontFamily=Canvas.getMeasureTextFontFamily();}this.switchToInputElement(this.mSingleLineInputElement);}},{key:'switchToMultiLineInputElement',value:function switchToMultiLineInputElement(){if(!this.mMultiLineInputElement){this.mMultiLineInputElement=document.createElement('textarea');this.mMultiLineInputElement.style.position='absolute';this.mMultiLineInputElement.style['webkitAppearance']='none';this.mMultiLineInputElement.style['resize']='none';this.mMultiLineInputElement.style.borderRadius='0';this.mMultiLineInputElement.style.overflow='auto';this.mMultiLineInputElement.style.background='transparent';this.mMultiLineInputElement.style.boxSizing='border-box';this.mMultiLineInputElement.style.fontFamily=Canvas.getMeasureTextFontFamily();}this.switchToInputElement(this.mMultiLineInputElement);}},{key:'tryShowInputElement',value:function tryShowInputElement(){if(!this.isInputElementShowed()){this.inputElement.value=this.getText().toString();this.bindElement.appendChild(this.inputElement);this.inputElement.focus();if(this.getText().length>0){this.setForceDisableDrawText(true);}this.syncTextBoundInfoToInputElement();}}},{key:'tryDismissInputElement',value:function tryDismissInputElement(){try{if(this.inputElement.parentNode)this.bindElement.removeChild(this.inputElement);}catch(e){}this.setForceDisableDrawText(false);}},{key:'onInputElementFocusChanged',value:function onInputElementFocusChanged(focused){}},{key:'isInputElementShowed',value:function isInputElementShowed(){return this.inputElement.parentElement!=null&&this.inputElement.style.opacity!='0';}},{key:'performClick',value:function performClick(event){this.tryShowInputElement();return _get2(Object.getPrototypeOf(EditText.prototype),'performClick',this).call(this,event);}},{key:'onFocusChanged',value:function onFocusChanged(focused,direction,previouslyFocusedRect){_get2(Object.getPrototypeOf(EditText.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);if(focused){this.tryShowInputElement();}else {this.tryDismissInputElement();}}},{key:'setForceDisableDrawText',value:function setForceDisableDrawText(disable){if(this.mForceDisableDraw==disable)return;this.mForceDisableDraw=disable;if(disable){this.mSkipDrawText=true;}else {this.mSkipDrawText=false;}this.invalidate();}},{key:'updateTextColors',value:function updateTextColors(){_get2(Object.getPrototypeOf(EditText.prototype),'updateTextColors',this).call(this);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onTouchEvent',value:function onTouchEvent(event){var superResult=_get2(Object.getPrototypeOf(EditText.prototype),'onTouchEvent',this).call(this,event);if(this.isInputElementShowed()){event[android.view.ViewRootImpl.ContinueEventToDom]=true;if(this.inputElement.scrollHeight>this.inputElement.offsetHeight||this.inputElement.scrollWidth>this.inputElement.offsetWidth){this.getParent().requestDisallowInterceptTouchEvent(true);}return true;}return superResult;}},{key:'filterKeyEvent',value:function filterKeyEvent(event){var keyCode=event.getKeyCode();if(keyCode==android.view.KeyEvent.KEYCODE_Backspace||keyCode==android.view.KeyEvent.KEYCODE_Del||event.isCtrlPressed()||event.isAltPressed()||event.isMetaPressed()){return false;}if(keyCode==android.view.KeyEvent.KEYCODE_ENTER&&this.isSingleLine()){return true;}if(event.mIsTypingKey){if(this.getText().length>=this.mMaxLength){return true;}return this.filterKeyCodeOnInput(keyCode);}return false;}},{key:'filterKeyCodeByInputType',value:function filterKeyCodeByInputType(keyCode){var filter=false;var inputType=this.mInputType;var typeClass=inputType&InputType.TYPE_MASK_CLASS;if(typeClass===InputType.TYPE_CLASS_NUMBER){filter=InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode)===-1;if((inputType&InputType.TYPE_NUMBER_FLAG_SIGNED)===InputType.TYPE_NUMBER_FLAG_SIGNED){filter=filter&&keyCode!==android.view.KeyEvent.KEYCODE_Minus;}if((inputType&InputType.TYPE_NUMBER_FLAG_DECIMAL)===InputType.TYPE_NUMBER_FLAG_DECIMAL){filter=filter&&keyCode!==android.view.KeyEvent.KEYCODE_Period;}}else if(typeClass===InputType.TYPE_CLASS_PHONE){filter=InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode)===-1;}return filter;}},{key:'filterKeyCodeOnInput',value:function filterKeyCodeOnInput(keyCode){var filter=false;var inputType=this.mInputType;var typeClass=inputType&InputType.TYPE_MASK_CLASS;if(typeClass===InputType.TYPE_CLASS_NUMBER){if((inputType&InputType.TYPE_NUMBER_FLAG_SIGNED)===InputType.TYPE_NUMBER_FLAG_SIGNED){if(keyCode===android.view.KeyEvent.KEYCODE_Minus&&this.getText().length>0){filter=true;}}if((inputType&InputType.TYPE_NUMBER_FLAG_DECIMAL)===InputType.TYPE_NUMBER_FLAG_DECIMAL){if(keyCode===android.view.KeyEvent.KEYCODE_Period&&(this.getText().includes('.')||this.getText().length===0)){filter=true;}}}return filter||this.filterKeyCodeByInputType(keyCode);}},{key:'checkFilterKeyEventToDom',value:function checkFilterKeyEventToDom(event){if(this.isInputElementShowed()){if(this.filterKeyEvent(event)){event[android.view.ViewRootImpl.ContinueEventToDom]=false;}else {event[android.view.ViewRootImpl.ContinueEventToDom]=true;}return true;}return false;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var filter=this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyDown',this).call(this,keyCode,event)||filter;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){var filter=this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyUp',this).call(this,keyCode,event)||filter;}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if(this.isInputElementShowed()){immediately=true;}_get2(Object.getPrototypeOf(EditText.prototype),'requestSyncBoundToElement',this).call(this,immediately);}},{key:'setRawTextSize',value:function setRawTextSize(size){_get2(Object.getPrototypeOf(EditText.prototype),'setRawTextSize',this).call(this,size);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onTextChanged',value:function onTextChanged(text,start,lengthBefore,lengthAfter){if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(Object.getPrototypeOf(EditText.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'setGravity',value:function setGravity(gravity){_get2(Object.getPrototypeOf(EditText.prototype),'setGravity',this).call(this,gravity);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'setSingleLine',value:function setSingleLine(){var singleLine=arguments.length<=0||arguments[0]===undefined?true:arguments[0];if(singleLine){this.switchToSingleLineInputElement();}else {this.switchToMultiLineInputElement();}_get2(Object.getPrototypeOf(EditText.prototype),'setSingleLine',this).call(this,singleLine);}},{key:'setInputType',value:function setInputType(type){this.mInputType=type;var typeClass=type&InputType.TYPE_MASK_CLASS;this.inputElement.style['webkitTextSecurity']='';this.setTransformationMethod(null);switch(typeClass){case InputType.TYPE_NULL:this.setSingleLine(false);this.inputElement.removeAttribute('type');break;case InputType.TYPE_CLASS_TEXT:if((type&InputType.TYPE_TEXT_VARIATION_URI)===InputType.TYPE_TEXT_VARIATION_URI){this.setSingleLine(true);this.inputElement.setAttribute('type','url');}else if((type&InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)===InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS){this.setSingleLine(true);this.inputElement.setAttribute('type','email');}else if((type&InputType.TYPE_TEXT_VARIATION_PASSWORD)===InputType.TYPE_TEXT_VARIATION_PASSWORD){this.setSingleLine(true);this.inputElement.setAttribute('type','password');this.setTransformationMethod(PasswordTransformationMethod.getInstance());}else if((type&InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)===InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD){this.setSingleLine(true);this.inputElement.setAttribute('type','email');}else {this.setSingleLine(false);this.inputElement.removeAttribute('type');}break;case InputType.TYPE_CLASS_NUMBER:this.setSingleLine(true);this.inputElement.setAttribute('type','number');if((type&InputType.TYPE_NUMBER_VARIATION_PASSWORD)===InputType.TYPE_NUMBER_VARIATION_PASSWORD){this.inputElement.style['webkitTextSecurity']='disc';this.setTransformationMethod(PasswordTransformationMethod.getInstance());}break;case InputType.TYPE_CLASS_PHONE:this.setSingleLine(true);this.inputElement.setAttribute('type','tel');break;case InputType.TYPE_CLASS_DATETIME:this.setSingleLine(true);if((type&InputType.TYPE_DATETIME_VARIATION_DATE)===InputType.TYPE_DATETIME_VARIATION_DATE){this.inputElement.setAttribute('type','date');}else if((type&InputType.TYPE_DATETIME_VARIATION_TIME)===InputType.TYPE_DATETIME_VARIATION_TIME){this.inputElement.setAttribute('type','time');}else {this.inputElement.setAttribute('type','datetime');}break;}}},{key:'getInputType',value:function getInputType(){return this.mInputType;}},{key:'syncTextBoundInfoToInputElement',value:function syncTextBoundInfoToInputElement(){var left=this.getLeft();var top=this.getTop();var right=this.getRight();var bottom=this.getBottom();var density=this.getResources().getDisplayMetrics().density;var maxHeight=this.getMaxHeight();if(maxHeight<=0||maxHeight>=Integer.MAX_VALUE){var maxLine=this.getMaxLines();if(maxLine>0&&maxLinetextHeight){maxHeight=textHeight;}var layout=this.mLayout;if(this.mHint!=null&&this.mText.length==0){layout=this.mHintLayout;}var height=layout?Math.min(layout.getLineTop(layout.getLineCount()),maxHeight):maxHeight;this.inputElement.style.height=height/density+1+'px';this.inputElement.style.top='';this.inputElement.style.bottom='';this.inputElement.style.transform=this.inputElement.style.webkitTransform='';var gravity=this.getGravity();switch(gravity&Gravity.VERTICAL_GRAVITY_MASK){case Gravity.TOP:this.inputElement.style.top=this.getCompoundPaddingTop()/density+'px';break;case Gravity.BOTTOM:this.inputElement.style.bottom=this.getCompoundPaddingBottom()/density+'px';break;default:this.inputElement.style.top='50%';this.inputElement.style.transform=this.inputElement.style.webkitTransform='translate(0, -50%)';break;}switch(gravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:this.inputElement.style.textAlign='left';break;case Gravity.RIGHT:this.inputElement.style.textAlign='right';break;default:this.inputElement.style.textAlign='center';break;}var isIOS=Platform.isIOS;this.inputElement.style.left=this.getCompoundPaddingLeft()/density-(isIOS?3:0)+'px';this.inputElement.style.width=(right-left-this.getCompoundPaddingRight()-this.getCompoundPaddingLeft())/density+(isIOS?6:1)+'px';this.inputElement.style.lineHeight=this.getLineHeight()/density+'px';if(this.getLineCount()==1){this.inputElement.style.whiteSpace='nowrap';}else {this.inputElement.style.whiteSpace='';}var text=this.getText().toString();if(text!=this.inputElement.value)this.inputElement.value=text;this.inputElement.style.fontSize=this.getTextSize()/density+'px';this.inputElement.style.color=Color.toRGBAFunc(this.getCurrentTextColor());if(this.inputElement==this.mMultiLineInputElement){this.inputElement.style.padding=(this.getTextSize()/density/5).toFixed(1)+'px 0px 0px 0px';}else {this.inputElement.style.padding='0px';}}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return true;}},{key:'setEllipsize',value:function setEllipsize(ellipsis){if(ellipsis==TextUtils.TruncateAt.MARQUEE){throw Error('new IllegalArgumentException("EditText cannot use the ellipsize mode " + "TextUtils.TruncateAt.MARQUEE")');}_get2(Object.getPrototypeOf(EditText.prototype),'setEllipsize',this).call(this,ellipsis);}}]);return EditText;}(TextView);widget.EditText=EditText;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Matrix=android.graphics.Matrix;var RectF=android.graphics.RectF;var View=android.view.View;var Integer=java.lang.Integer;var NetDrawable=androidui.image.NetDrawable;var LayoutParams=android.view.ViewGroup.LayoutParams;var AttrBinder=androidui.attr.AttrBinder;var ImageView=function(_View2){_inherits(ImageView,_View2);function ImageView(context,bindElement,defStyle){_classCallCheck(this,ImageView);var _this125=_possibleConstructorReturn(this,Object.getPrototypeOf(ImageView).call(this,context,bindElement,defStyle));_this125.mHaveFrame=false;_this125.mAdjustViewBounds=false;_this125.mMaxWidth=Integer.MAX_VALUE;_this125.mMaxHeight=Integer.MAX_VALUE;_this125.mAlpha=255;_this125.mViewAlphaScale=256;_this125.mColorMod=false;_this125.mDrawable=null;_this125.mState=null;_this125.mMergeState=false;_this125.mLevel=0;_this125.mDrawableWidth=0;_this125.mDrawableHeight=0;_this125.mDrawMatrix=null;_this125.mTempSrc=new RectF();_this125.mTempDst=new RectF();_this125.mBaseline=-1;_this125.mBaselineAlignBottom=false;_this125.mAdjustViewBoundsCompat=false;_this125.initImageView();return _this125;}_createClass(ImageView,[{key:'initBindAttr',value:function initBindAttr(){_get2(Object.getPrototypeOf(ImageView.prototype),'initBindAttr',this).call(this);if(!ImageView.ImageViewClassAttrBind){ImageView.ImageViewClassAttrBind=new AttrBinder.ClassBinderMap();ImageView.ImageViewClassAttrBind.set('src',{setter:function setter(v,value){var d=v._attrBinder.parseDrawable(value);if(d)v.setImageDrawable(d);else v.setImageURI(value);},getter:function getter(v){return v.mDrawable;}}).set('baselineAlignBottom',{setter:function setter(v,value){v.setBaselineAlignBottom(v._attrBinder.parseBoolean(value,v.mBaselineAlignBottom));}}).set('baseline',{setter:function setter(v,value){v.setBaseline(v._attrBinder.parseNumberPixelSize(value,v.mBaseline));},getter:function getter(v){return v.mBaseline;}}).set('adjustViewBounds',{setter:function setter(v,value){v.setAdjustViewBounds(v._attrBinder.parseBoolean(value,false));}}).set('maxWidth',{setter:function setter(v,value){var baseValue=v.getParent() instanceof View?v.getParent().getWidth():0;v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value,v.mMaxWidth,baseValue));},getter:function getter(v){return v.mMaxWidth;}}).set('maxHeight',{setter:function setter(v,value){var baseValue=v.getParent() instanceof View?v.getParent().getHeight():0;v.setMaxHeight(v._attrBinder.parseNumberPixelSize(value,v.mMaxHeight,baseValue));},getter:function getter(v){return v.mMaxHeight;}}).set('scaleType',{setter:function setter(v,value){if(typeof value==='number'){v.setScaleType(value);}else {v.setScaleType(ImageView.parseScaleType(value,v.mScaleType));}},getter:function getter(v){return v.mScaleType;}}).set('drawableAlpha',{setter:function setter(v,value){v.setImageAlpha(v._attrBinder.parseInt(value,v.mAlpha));},getter:function getter(v){return v.mAlpha;}}).set('cropToPadding',{setter:function setter(v,value){v.setCropToPadding(v._attrBinder.parseBoolean(value,false));}});}this._attrBinder.addClassAttrBind(ImageView.ImageViewClassAttrBind);}},{key:'initImageView',value:function initImageView(){this.mMatrix=new Matrix();this.mScaleType=ImageView.ScaleType.FIT_CENTER;}},{key:'verifyDrawable',value:function verifyDrawable(dr){return this.mDrawable==dr||_get2(Object.getPrototypeOf(ImageView.prototype),'verifyDrawable',this).call(this,dr);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(Object.getPrototypeOf(ImageView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mDrawable!=null)this.mDrawable.jumpToCurrentState();}},{key:'invalidateDrawable',value:function invalidateDrawable(dr){if(dr==this.mDrawable){this.invalidate();}else {_get2(Object.getPrototypeOf(ImageView.prototype),'invalidateDrawable',this).call(this,dr);}}},{key:'drawableSizeChange',value:function drawableSizeChange(who){if(who==this.mDrawable){this.resizeFromDrawable();}else {_get2(Object.getPrototypeOf(ImageView.prototype),'drawableSizeChange',this).call(this,who);}}},{key:'hasOverlappingRendering',value:function hasOverlappingRendering(){return this.getBackground()!=null&&this.getBackground().getCurrent()!=null;}},{key:'getAdjustViewBounds',value:function getAdjustViewBounds(){return this.mAdjustViewBounds;}},{key:'setAdjustViewBounds',value:function setAdjustViewBounds(adjustViewBounds){this.mAdjustViewBounds=adjustViewBounds;if(adjustViewBounds){this.setScaleType(ImageView.ScaleType.FIT_CENTER);}}},{key:'getMaxWidth',value:function getMaxWidth(){return this.mMaxWidth;}},{key:'setMaxWidth',value:function setMaxWidth(maxWidth){this.mMaxWidth=maxWidth;}},{key:'getMaxHeight',value:function getMaxHeight(){return this.mMaxHeight;}},{key:'setMaxHeight',value:function setMaxHeight(maxHeight){this.mMaxHeight=maxHeight;}},{key:'getDrawable',value:function getDrawable(){return this.mDrawable;}},{key:'setImageURI',value:function setImageURI(uri){if(this.mUri!=uri){if(this.mDrawable instanceof NetDrawable){this.mUri=uri;this.mDrawable.setURL(uri);this.invalidate();}else {this.updateDrawable(null);this.mUri=uri;var oldWidth=this.mDrawableWidth;var oldHeight=this.mDrawableHeight;this.resolveUri();if(oldWidth!=this.mDrawableWidth||oldHeight!=this.mDrawableHeight){this.requestLayout();}this.invalidate();}}}},{key:'setImageDrawable',value:function setImageDrawable(drawable){if(this.mDrawable!=drawable){this.mUri=null;var oldWidth=this.mDrawableWidth;var oldHeight=this.mDrawableHeight;this.updateDrawable(drawable);if(oldWidth!=this.mDrawableWidth||oldHeight!=this.mDrawableHeight){this.requestLayout();}this.invalidate();}}},{key:'setImageState',value:function setImageState(state,merge){this.mState=state;this.mMergeState=merge;if(this.mDrawable!=null){this.refreshDrawableState();this.resizeFromDrawable();}}},{key:'setSelected',value:function setSelected(selected){_get2(Object.getPrototypeOf(ImageView.prototype),'setSelected',this).call(this,selected);this.resizeFromDrawable();}},{key:'setImageLevel',value:function setImageLevel(level){this.mLevel=level;if(this.mDrawable!=null){this.mDrawable.setLevel(level);this.resizeFromDrawable();}}},{key:'setScaleType',value:function setScaleType(scaleType){if(scaleType==null){throw Error('new NullPointerException()');}if(this.mScaleType!=scaleType){this.mScaleType=scaleType;this.setWillNotCacheDrawing(this.mScaleType==ImageView.ScaleType.CENTER);this.requestLayout();this.invalidate();}}},{key:'getScaleType',value:function getScaleType(){return this.mScaleType;}},{key:'getImageMatrix',value:function getImageMatrix(){if(this.mDrawMatrix==null){return new Matrix(Matrix.IDENTITY_MATRIX);}return this.mDrawMatrix;}},{key:'setImageMatrix',value:function setImageMatrix(matrix){if(matrix!=null&&matrix.isIdentity()){matrix=null;}if(matrix==null&&!this.mMatrix.isIdentity()||matrix!=null&&!this.mMatrix.equals(matrix)){this.mMatrix.set(matrix);this.configureBounds();this.invalidate();}}},{key:'getCropToPadding',value:function getCropToPadding(){return this.mCropToPadding;}},{key:'setCropToPadding',value:function setCropToPadding(cropToPadding){if(this.mCropToPadding!=cropToPadding){this.mCropToPadding=cropToPadding;this.requestLayout();this.invalidate();}}},{key:'resolveUri',value:function resolveUri(){if(this.mDrawable!=null){return;}var d=null;if(this.mUri!=null){d=new androidui.image.NetDrawable(this.mUri);}else {return;}this.updateDrawable(d);}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if(this.mState==null){return _get2(Object.getPrototypeOf(ImageView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}else if(!this.mMergeState){return this.mState;}else {return ImageView.mergeDrawableStates(_get2(Object.getPrototypeOf(ImageView.prototype),'onCreateDrawableState',this).call(this,extraSpace+this.mState.length),this.mState);}}},{key:'updateDrawable',value:function updateDrawable(d){if(this.mDrawable!=null){this.mDrawable.setCallback(null);this.unscheduleDrawable(this.mDrawable);}this.mDrawable=d;if(d!=null){d.setCallback(this);if(d.isStateful()){d.setState(this.getDrawableState());}d.setLevel(this.mLevel);d.setVisible(this.getVisibility()==ImageView.VISIBLE,true);this.mDrawableWidth=d.getIntrinsicWidth();this.mDrawableHeight=d.getIntrinsicHeight();this.applyColorMod();this.configureBounds();}else {this.mDrawableWidth=this.mDrawableHeight=-1;}}},{key:'resizeFromDrawable',value:function resizeFromDrawable(){var d=this.mDrawable;if(d!=null){var w=d.getIntrinsicWidth();if(w<0)w=this.mDrawableWidth;var h=d.getIntrinsicHeight();if(h<0)h=this.mDrawableHeight;if(w!=this.mDrawableWidth||h!=this.mDrawableHeight){this.mDrawableWidth=w;this.mDrawableHeight=h;if(this.mLayoutParams!=null&&this.mLayoutParams.width!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.width!=LayoutParams.MATCH_PARENT&&this.mLayoutParams.height!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.height!=LayoutParams.MATCH_PARENT){this.configureBounds();}else {this.requestLayout();}this.invalidate();return true;}}return false;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){this.resolveUri();var w=undefined;var h=undefined;var desiredAspect=0.0;var resizeWidth=false;var resizeHeight=false;var widthSpecMode=ImageView.MeasureSpec.getMode(widthMeasureSpec);var heightSpecMode=ImageView.MeasureSpec.getMode(heightMeasureSpec);if(this.mDrawable==null){this.mDrawableWidth=-1;this.mDrawableHeight=-1;w=h=0;}else {w=this.mDrawableWidth;h=this.mDrawableHeight;if(w<=0)w=1;if(h<=0)h=1;if(this.mAdjustViewBounds){resizeWidth=widthSpecMode!=ImageView.MeasureSpec.EXACTLY;resizeHeight=heightSpecMode!=ImageView.MeasureSpec.EXACTLY;desiredAspect=w/h;}}var pleft=this.mPaddingLeft;var pright=this.mPaddingRight;var ptop=this.mPaddingTop;var pbottom=this.mPaddingBottom;var widthSize=undefined;var heightSize=undefined;if(resizeWidth||resizeHeight){widthSize=this.resolveAdjustedSize(w+pleft+pright,this.mMaxWidth,widthMeasureSpec);heightSize=this.resolveAdjustedSize(h+ptop+pbottom,this.mMaxHeight,heightMeasureSpec);if(desiredAspect!=0.0){var actualAspect=(widthSize-pleft-pright)/(heightSize-ptop-pbottom);if(Math.abs(actualAspect-desiredAspect)>0.0000001){var done=false;if(resizeWidth){var newWidth=Math.floor(desiredAspect*(heightSize-ptop-pbottom))+pleft+pright;if(!resizeHeight&&!this.mAdjustViewBoundsCompat){widthSize=this.resolveAdjustedSize(newWidth,this.mMaxWidth,widthMeasureSpec);}if(newWidth<=widthSize){widthSize=newWidth;done=true;}}if(!done&&resizeHeight){var newHeight=Math.floor((widthSize-pleft-pright)/desiredAspect)+ptop+pbottom;if(!resizeWidth&&!this.mAdjustViewBoundsCompat){heightSize=this.resolveAdjustedSize(newHeight,this.mMaxHeight,heightMeasureSpec);}if(newHeight<=heightSize){heightSize=newHeight;}}}}}else {w+=pleft+pright;h+=ptop+pbottom;w=Math.max(w,this.getSuggestedMinimumWidth());h=Math.max(h,this.getSuggestedMinimumHeight());widthSize=ImageView.resolveSizeAndState(w,widthMeasureSpec,0);heightSize=ImageView.resolveSizeAndState(h,heightMeasureSpec,0);}this.setMeasuredDimension(widthSize,heightSize);}},{key:'resolveAdjustedSize',value:function resolveAdjustedSize(desiredSize,maxSize,measureSpec){var result=desiredSize;var specMode=ImageView.MeasureSpec.getMode(measureSpec);var specSize=ImageView.MeasureSpec.getSize(measureSpec);switch(specMode){case ImageView.MeasureSpec.UNSPECIFIED:result=Math.min(desiredSize,maxSize);break;case ImageView.MeasureSpec.AT_MOST:result=Math.min(Math.min(desiredSize,specSize),maxSize);break;case ImageView.MeasureSpec.EXACTLY:result=specSize;break;}return result;}},{key:'setFrame',value:function setFrame(l,t,r,b){var changed=_get2(Object.getPrototypeOf(ImageView.prototype),'setFrame',this).call(this,l,t,r,b);this.mHaveFrame=true;this.configureBounds();return changed;}},{key:'configureBounds',value:function configureBounds(){if(this.mDrawable==null||!this.mHaveFrame){return;}var dwidth=this.mDrawableWidth;var dheight=this.mDrawableHeight;var vwidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;var vheight=this.getHeight()-this.mPaddingTop-this.mPaddingBottom;var fits=(dwidth<0||vwidth==dwidth)&&(dheight<0||vheight==dheight);if(dwidth<=0||dheight<=0||ImageView.ScaleType.FIT_XY==this.mScaleType){this.mDrawable.setBounds(0,0,vwidth,vheight);this.mDrawMatrix=null;}else {this.mDrawable.setBounds(0,0,dwidth,dheight);if(ImageView.ScaleType.MATRIX==this.mScaleType){if(this.mMatrix.isIdentity()){this.mDrawMatrix=null;}else {this.mDrawMatrix=this.mMatrix;}}else if(fits){this.mDrawMatrix=null;}else if(ImageView.ScaleType.CENTER==this.mScaleType){this.mDrawMatrix=this.mMatrix;this.mDrawMatrix.setTranslate(Math.floor((vwidth-dwidth)*0.5+0.5),Math.floor((vheight-dheight)*0.5+0.5));}else if(ImageView.ScaleType.CENTER_CROP==this.mScaleType){this.mDrawMatrix=this.mMatrix;var scale=undefined;var dx=0,dy=0;if(dwidth*vheight>vwidth*dheight){scale=vheight/dheight;dx=(vwidth-dwidth*scale)*0.5;}else {scale=vwidth/dwidth;dy=(vheight-dheight*scale)*0.5;}this.mDrawMatrix.setScale(scale,scale);this.mDrawMatrix.postTranslate(Math.floor(dx+0.5),Math.floor(dy+0.5));}else if(ImageView.ScaleType.CENTER_INSIDE==this.mScaleType){this.mDrawMatrix=this.mMatrix;var _scale2=undefined;var _dx3=undefined;var _dy=undefined;if(dwidth<=vwidth&&dheight<=vheight){_scale2=1.0;}else {_scale2=Math.min(vwidth/dwidth,vheight/dheight);}_dx3=Math.floor((vwidth-dwidth*_scale2)*0.5+0.5);_dy=Math.floor((vheight-dheight*_scale2)*0.5+0.5);this.mDrawMatrix.setScale(_scale2,_scale2);this.mDrawMatrix.postTranslate(_dx3,_dy);}else {this.mTempSrc.set(0,0,dwidth,dheight);this.mTempDst.set(0,0,vwidth,vheight);this.mDrawMatrix=this.mMatrix;this.mDrawMatrix.setRectToRect(this.mTempSrc,this.mTempDst,ImageView.scaleTypeToScaleToFit(this.mScaleType));}}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(ImageView.prototype),'drawableStateChanged',this).call(this);var d=this.mDrawable;if(d!=null&&d.isStateful()){d.setState(this.getDrawableState());}}},{key:'onDraw',value:function onDraw(canvas){_get2(Object.getPrototypeOf(ImageView.prototype),'onDraw',this).call(this,canvas);if(this.mDrawable==null){return;}if(this.mDrawableWidth==0||this.mDrawableHeight==0){return;}if(this.mDrawMatrix==null&&this.mPaddingTop==0&&this.mPaddingLeft==0){this.mDrawable.draw(canvas);}else {var saveCount=canvas.getSaveCount();canvas.save();if(this.mCropToPadding){var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);}canvas.translate(this.mPaddingLeft,this.mPaddingTop);if(this.mDrawMatrix!=null){canvas.concat(this.mDrawMatrix);}this.mDrawable.draw(canvas);canvas.restoreToCount(saveCount);}}},{key:'getBaseline',value:function getBaseline(){if(this.mBaselineAlignBottom){return this.getMeasuredHeight();}else {return this.mBaseline;}}},{key:'setBaseline',value:function setBaseline(baseline){if(this.mBaseline!=baseline){this.mBaseline=baseline;this.requestLayout();}}},{key:'setBaselineAlignBottom',value:function setBaselineAlignBottom(aligned){if(this.mBaselineAlignBottom!=aligned){this.mBaselineAlignBottom=aligned;this.requestLayout();}}},{key:'getBaselineAlignBottom',value:function getBaselineAlignBottom(){return this.mBaselineAlignBottom;}},{key:'getImageAlpha',value:function getImageAlpha(){return this.mAlpha;}},{key:'setImageAlpha',value:function setImageAlpha(alpha){alpha&=0xFF;if(this.mAlpha!=alpha){this.mAlpha=alpha;this.mColorMod=true;this.applyColorMod();this.invalidate();}}},{key:'applyColorMod',value:function applyColorMod(){if(this.mDrawable!=null&&this.mColorMod){this.mDrawable=this.mDrawable.mutate();this.mDrawable.setAlpha(this.mAlpha*this.mViewAlphaScale>>8);}}},{key:'setVisibility',value:function setVisibility(visibility){_get2(Object.getPrototypeOf(ImageView.prototype),'setVisibility',this).call(this,visibility);if(this.mDrawable!=null){this.mDrawable.setVisible(visibility==ImageView.VISIBLE,false);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(Object.getPrototypeOf(ImageView.prototype),'onAttachedToWindow',this).call(this);if(this.mDrawable!=null){this.mDrawable.setVisible(this.getVisibility()==ImageView.VISIBLE,false);}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(ImageView.prototype),'onDetachedFromWindow',this).call(this);if(this.mDrawable!=null){this.mDrawable.setVisible(false,false);}}}],[{key:'scaleTypeToScaleToFit',value:function scaleTypeToScaleToFit(st){return ImageView.sS2FArray[st-1];}},{key:'parseScaleType',value:function parseScaleType(s,defaultType){if(s==null)return defaultType;s=s.toLowerCase();if(s==='matrix'.toLowerCase())return ImageView.ScaleType.MATRIX;if(s==='fitXY'.toLowerCase())return ImageView.ScaleType.FIT_XY;if(s==='fitStart'.toLowerCase())return ImageView.ScaleType.FIT_START;if(s==='fitCenter'.toLowerCase())return ImageView.ScaleType.FIT_CENTER;if(s==='fitEnd'.toLowerCase())return ImageView.ScaleType.FIT_END;if(s==='center'.toLowerCase())return ImageView.ScaleType.CENTER;if(s==='centerCrop'.toLowerCase())return ImageView.ScaleType.CENTER_CROP;if(s==='centerInside'.toLowerCase())return ImageView.ScaleType.CENTER_INSIDE;return defaultType;}}]);return ImageView;}(View);ImageView.sS2FArray=[Matrix.ScaleToFit.FILL,Matrix.ScaleToFit.START,Matrix.ScaleToFit.CENTER,Matrix.ScaleToFit.END];widget.ImageView=ImageView;(function(ImageView){(function(ScaleType){ScaleType[ScaleType["MATRIX"]=0]="MATRIX";ScaleType[ScaleType["FIT_XY"]=1]="FIT_XY";ScaleType[ScaleType["FIT_START"]=2]="FIT_START";ScaleType[ScaleType["FIT_CENTER"]=3]="FIT_CENTER";ScaleType[ScaleType["FIT_END"]=4]="FIT_END";ScaleType[ScaleType["CENTER"]=5]="CENTER";ScaleType[ScaleType["CENTER_CROP"]=6]="CENTER_CROP";ScaleType[ScaleType["CENTER_INSIDE"]=7]="CENTER_INSIDE";})(ImageView.ScaleType||(ImageView.ScaleType={}));var ScaleType=ImageView.ScaleType;})(ImageView=widget.ImageView||(widget.ImageView={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ImageButton=function(_widget$ImageView){_inherits(ImageButton,_widget$ImageView);function ImageButton(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.imageButtonStyle:arguments[2];_classCallCheck(this,ImageButton);return _possibleConstructorReturn(this,Object.getPrototypeOf(ImageButton).call(this,context,bindElement,defStyle));}return ImageButton;}(widget.ImageView);widget.ImageButton=ImageButton;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var Trace=android.os.Trace;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var AbsListView=android.widget.AbsListView;var GridView=function(_AbsListView2){_inherits(GridView,_AbsListView2);function GridView(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.gridViewStyle:arguments[2];_classCallCheck(this,GridView);var _this127=_possibleConstructorReturn(this,Object.getPrototypeOf(GridView).call(this,context,bindElement,null));_this127.mNumColumns=GridView.AUTO_FIT;_this127.mHorizontalSpacing=0;_this127.mRequestedHorizontalSpacing=0;_this127.mVerticalSpacing=0;_this127.mStretchMode=GridView.STRETCH_COLUMN_WIDTH;_this127.mColumnWidth=0;_this127.mRequestedColumnWidth=0;_this127.mRequestedNumColumns=0;_this127.mReferenceView=null;_this127.mReferenceViewInSelectedRow=null;_this127.mGravity=Gravity.LEFT;_this127.mTempRect=new Rect();_this127._attrBinder.addAttr('horizontalSpacing',function(value){_this127.setHorizontalSpacing(_this127._attrBinder.parseNumberPixelOffset(value,0));});_this127._attrBinder.addAttr('verticalSpacing',function(value){_this127.setVerticalSpacing(_this127._attrBinder.parseNumberPixelOffset(value,0));});_this127._attrBinder.addAttr('stretchMode',function(value){_this127.setStretchMode(_this127._attrBinder.parseEnum(value,new Map().set("none",GridView.NO_STRETCH).set("spacingWidth",GridView.STRETCH_SPACING).set("columnWidth",GridView.STRETCH_COLUMN_WIDTH).set("spacingWidthUniform",GridView.STRETCH_SPACING_UNIFORM),GridView.STRETCH_COLUMN_WIDTH));});_this127._attrBinder.addAttr('columnWidth',function(value){var columnWidth=_this127._attrBinder.parseNumberPixelOffset(value,-1);if(columnWidth>0){_this127.setColumnWidth(columnWidth);}});_this127._attrBinder.addAttr('numColumns',function(value){_this127.setNumColumns(_this127._attrBinder.parseInt(value,1));});_this127._attrBinder.addAttr('gravity',function(value){_this127.setGravity(_this127._attrBinder.parseGravity(value,_this127.mGravity));});if(defStyle)_this127.applyDefaultAttributes(defStyle);return _this127;}_createClass(GridView,[{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'setAdapter',value:function setAdapter(adapter){if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.resetList();this.mRecycler.clear();this.mAdapter=adapter;this.mOldSelectedPosition=GridView.INVALID_POSITION;this.mOldSelectedRowId=GridView.INVALID_ROW_ID;_get2(Object.getPrototypeOf(GridView.prototype),'setAdapter',this).call(this,adapter);if(this.mAdapter!=null){this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.mDataChanged=true;this.checkFocus();this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());var position=undefined;if(this.mStackFromBottom){position=this.lookForSelectablePosition(this.mItemCount-1,false);}else {position=this.lookForSelectablePosition(0,true);}this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);this.checkSelectionChanged();}else {this.checkFocus();this.checkSelectionChanged();}this.requestLayout();}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return GridView.INVALID_POSITION;}if(position<0||position>=this.mItemCount){return GridView.INVALID_POSITION;}return position;}},{key:'fillGap',value:function fillGap(down){var numColumns=this.mNumColumns;var verticalSpacing=this.mVerticalSpacing;var count=this.getChildCount();if(down){var paddingTop=0;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){paddingTop=this.getListPaddingTop();}var startOffset=count>0?this.getChildAt(count-1).getBottom()+verticalSpacing:paddingTop;var position=this.mFirstPosition+count;if(this.mStackFromBottom){position+=numColumns-1;}this.fillDown(position,startOffset);this.correctTooHigh(numColumns,verticalSpacing,this.getChildCount());}else {var paddingBottom=0;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){paddingBottom=this.getListPaddingBottom();}var _startOffset2=count>0?this.getChildAt(0).getTop()-verticalSpacing:this.getHeight()-paddingBottom;var _position5=this.mFirstPosition;if(!this.mStackFromBottom){_position5-=numColumns;}else {_position5--;}this.fillUp(_position5,_startOffset2);this.correctTooLow(numColumns,verticalSpacing,this.getChildCount());}}},{key:'fillDown',value:function fillDown(pos,nextTop){var selectedView=null;var end=this.mBottom-this.mTop;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){end-=this.mListPadding.bottom;}while(nextTopend&&pos>=0){var temp=this.makeRow(pos,nextBottom,false);if(temp!=null){selectedView=temp;}nextBottom=this.mReferenceView.getTop()-this.mVerticalSpacing;this.mFirstPosition=pos;pos-=this.mNumColumns;}if(this.mStackFromBottom){this.mFirstPosition=Math.max(0,pos+1);}this.setVisibleRangeHint(this.mFirstPosition,this.mFirstPosition+this.getChildCount()-1);return selectedView;}},{key:'fillFromTop',value:function fillFromTop(nextTop){this.mFirstPosition=Math.min(this.mFirstPosition,this.mSelectedPosition);this.mFirstPosition=Math.min(this.mFirstPosition,this.mItemCount-1);if(this.mFirstPosition<0){this.mFirstPosition=0;}this.mFirstPosition-=this.mFirstPosition%this.mNumColumns;return this.fillDown(this.mFirstPosition,nextTop);}},{key:'fillFromBottom',value:function fillFromBottom(lastPosition,nextBottom){lastPosition=Math.max(lastPosition,this.mSelectedPosition);lastPosition=Math.min(lastPosition,this.mItemCount-1);var invertedPosition=this.mItemCount-1-lastPosition;lastPosition=this.mItemCount-1-(invertedPosition-invertedPosition%this.mNumColumns);return this.fillUp(lastPosition,nextBottom);}},{key:'fillSelection',value:function fillSelection(childrenTop,childrenBottom){var selectedPosition=this.reconcileSelectedPosition();var numColumns=this.mNumColumns;var verticalSpacing=this.mVerticalSpacing;var rowStart=undefined;var rowEnd=-1;if(!this.mStackFromBottom){rowStart=selectedPosition-selectedPosition%numColumns;}else {var invertedSelection=this.mItemCount-1-selectedPosition;rowEnd=this.mItemCount-1-(invertedSelection-invertedSelection%numColumns);rowStart=Math.max(0,rowEnd-numColumns+1);}var fadingEdgeLength=this.getVerticalFadingEdgeLength();var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,rowStart);var sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,topSelectionPixel,true);this.mFirstPosition=rowStart;var referenceView=this.mReferenceView;if(!this.mStackFromBottom){this.fillDown(rowStart+numColumns,referenceView.getBottom()+verticalSpacing);this.pinToBottom(childrenBottom);this.fillUp(rowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();}else {var bottomSelectionPixel=this.getBottomSelectionPixel(childrenBottom,fadingEdgeLength,numColumns,rowStart);var offset=bottomSelectionPixel-referenceView.getBottom();this.offsetChildrenTopAndBottom(offset);this.fillUp(rowStart-1,referenceView.getTop()-verticalSpacing);this.pinToTop(childrenTop);this.fillDown(rowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();}return sel;}},{key:'pinToTop',value:function pinToTop(childrenTop){if(this.mFirstPosition==0){var top=this.getChildAt(0).getTop();var offset=childrenTop-top;if(offset<0){this.offsetChildrenTopAndBottom(offset);}}}},{key:'pinToBottom',value:function pinToBottom(childrenBottom){var count=this.getChildCount();if(this.mFirstPosition+count==this.mItemCount){var bottom=this.getChildAt(count-1).getBottom();var offset=childrenBottom-bottom;if(offset>0){this.offsetChildrenTopAndBottom(offset);}}}},{key:'findMotionRow',value:function findMotionRow(y){var childCount=this.getChildCount();if(childCount>0){var numColumns=this.mNumColumns;if(!this.mStackFromBottom){for(var i=0;i=0;_i56-=numColumns){if(y>=this.getChildAt(_i56).getTop()){return this.mFirstPosition+_i56;}}}}return GridView.INVALID_POSITION;}},{key:'fillSpecific',value:function fillSpecific(position,top){var numColumns=this.mNumColumns;var motionRowStart=undefined;var motionRowEnd=-1;if(!this.mStackFromBottom){motionRowStart=position-position%numColumns;}else {var invertedSelection=this.mItemCount-1-position;motionRowEnd=this.mItemCount-1-(invertedSelection-invertedSelection%numColumns);motionRowStart=Math.max(0,motionRowEnd-numColumns+1);}var temp=this.makeRow(this.mStackFromBottom?motionRowEnd:motionRowStart,top,true);this.mFirstPosition=motionRowStart;var referenceView=this.mReferenceView;if(referenceView==null){return null;}var verticalSpacing=this.mVerticalSpacing;var above=undefined;var below=undefined;if(!this.mStackFromBottom){above=this.fillUp(motionRowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();below=this.fillDown(motionRowStart+numColumns,referenceView.getBottom()+verticalSpacing);var childCount=this.getChildCount();if(childCount>0){this.correctTooHigh(numColumns,verticalSpacing,childCount);}}else {below=this.fillDown(motionRowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();above=this.fillUp(motionRowStart-1,referenceView.getTop()-verticalSpacing);var _childCount3=this.getChildCount();if(_childCount3>0){this.correctTooLow(numColumns,verticalSpacing,_childCount3);}}if(temp!=null){return temp;}else if(above!=null){return above;}else {return below;}}},{key:'correctTooHigh',value:function correctTooHigh(numColumns,verticalSpacing,childCount){var lastPosition=this.mFirstPosition+childCount-1;if(lastPosition==this.mItemCount-1&&childCount>0){var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var end=this.mBottom-this.mTop-this.mListPadding.bottom;var bottomOffset=end-lastBottom;var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();if(bottomOffset>0&&(this.mFirstPosition>0||firstTop0){this.fillUp(this.mFirstPosition-(this.mStackFromBottom?1:numColumns),firstChild.getTop()-verticalSpacing);this.adjustViewsUpOrDown();}}}}},{key:'correctTooLow',value:function correctTooLow(numColumns,verticalSpacing,childCount){if(this.mFirstPosition==0&&childCount>0){var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();var start=this.mListPadding.top;var end=this.mBottom-this.mTop-this.mListPadding.bottom;var topOffset=firstTop-start;var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var lastPosition=this.mFirstPosition+childCount-1;if(topOffset>0&&(lastPositionend)){if(lastPosition==this.mItemCount-1){topOffset=Math.min(topOffset,lastBottom-end);}this.offsetChildrenTopAndBottom(-topOffset);if(lastPosition0){topSelectionPixel+=fadingEdgeLength;}return topSelectionPixel;}},{key:'adjustForBottomFadingEdge',value:function adjustForBottomFadingEdge(childInSelectedRow,topSelectionPixel,bottomSelectionPixel){if(childInSelectedRow.getBottom()>bottomSelectionPixel){var spaceAbove=childInSelectedRow.getTop()-topSelectionPixel;var spaceBelow=childInSelectedRow.getBottom()-bottomSelectionPixel;var offset=Math.min(spaceAbove,spaceBelow);this.offsetChildrenTopAndBottom(-offset);}}},{key:'adjustForTopFadingEdge',value:function adjustForTopFadingEdge(childInSelectedRow,topSelectionPixel,bottomSelectionPixel){if(childInSelectedRow.getTop()0){var oldBottom=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getBottom();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,oldBottom+verticalSpacing,true);referenceView=this.mReferenceView;this.adjustForBottomFadingEdge(referenceView,topSelectionPixel,bottomSelectionPixel);}else if(rowDelta<0){var oldTop=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getTop();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,oldTop-verticalSpacing,false);referenceView=this.mReferenceView;this.adjustForTopFadingEdge(referenceView,topSelectionPixel,bottomSelectionPixel);}else {var _oldTop=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getTop();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,_oldTop,true);referenceView=this.mReferenceView;}if(!this.mStackFromBottom){this.fillUp(rowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();this.fillDown(rowStart+numColumns,referenceView.getBottom()+verticalSpacing);}else {this.fillDown(rowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();this.fillUp(rowStart-1,referenceView.getTop()-verticalSpacing);}return sel;}},{key:'determineColumns',value:function determineColumns(availableSpace){var requestedHorizontalSpacing=this.mRequestedHorizontalSpacing;var stretchMode=this.mStretchMode;var requestedColumnWidth=this.mRequestedColumnWidth;var didNotInitiallyFit=false;if(this.mRequestedNumColumns==GridView.AUTO_FIT){if(requestedColumnWidth>0){this.mNumColumns=(availableSpace+requestedHorizontalSpacing)/(requestedColumnWidth+requestedHorizontalSpacing);}else {this.mNumColumns=2;}}else {this.mNumColumns=this.mRequestedNumColumns;}if(this.mNumColumns<=0){this.mNumColumns=1;}switch(stretchMode){case GridView.NO_STRETCH:this.mColumnWidth=requestedColumnWidth;this.mHorizontalSpacing=requestedHorizontalSpacing;break;default:var spaceLeftOver=availableSpace-this.mNumColumns*requestedColumnWidth-(this.mNumColumns-1)*requestedHorizontalSpacing;if(spaceLeftOver<0){didNotInitiallyFit=true;}switch(stretchMode){case GridView.STRETCH_COLUMN_WIDTH:this.mColumnWidth=requestedColumnWidth+spaceLeftOver/this.mNumColumns;this.mHorizontalSpacing=requestedHorizontalSpacing;break;case GridView.STRETCH_SPACING:this.mColumnWidth=requestedColumnWidth;if(this.mNumColumns>1){this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver/(this.mNumColumns-1);}else {this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver;}break;case GridView.STRETCH_SPACING_UNIFORM:this.mColumnWidth=requestedColumnWidth;if(this.mNumColumns>1){this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver/(this.mNumColumns+1);}else {this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver;}break;}break;}return didNotInitiallyFit;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(Object.getPrototypeOf(GridView.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);var widthMode=GridView.MeasureSpec.getMode(widthMeasureSpec);var heightMode=GridView.MeasureSpec.getMode(heightMeasureSpec);var widthSize=GridView.MeasureSpec.getSize(widthMeasureSpec);var heightSize=GridView.MeasureSpec.getSize(heightMeasureSpec);if(widthMode==GridView.MeasureSpec.UNSPECIFIED){if(this.mColumnWidth>0){widthSize=this.mColumnWidth+this.mListPadding.left+this.mListPadding.right;}else {widthSize=this.mListPadding.left+this.mListPadding.right;}widthSize+=this.getVerticalScrollbarWidth();}var childWidth=widthSize-this.mListPadding.left-this.mListPadding.right;var didNotInitiallyFit=this.determineColumns(childWidth);var childHeight=0;var childState=0;this.mItemCount=this.mAdapter==null?0:this.mAdapter.getCount();var count=this.mItemCount;if(count>0){var child=this.obtainView(0,this.mIsScrap);var p=child.getLayoutParams();if(p==null){p=this.generateDefaultLayoutParams();child.setLayoutParams(p);}p.viewType=this.mAdapter.getItemViewType(0);p.forceAdd=true;var childHeightSpec=GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(0,GridView.MeasureSpec.UNSPECIFIED),0,p.height);var childWidthSpec=GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(this.mColumnWidth,GridView.MeasureSpec.EXACTLY),0,p.width);child.measure(childWidthSpec,childHeightSpec);childHeight=child.getMeasuredHeight();childState=GridView.combineMeasuredStates(childState,child.getMeasuredState());if(this.mRecycler.shouldRecycleViewType(p.viewType)){this.mRecycler.addScrapView(child,-1);}}if(heightMode==GridView.MeasureSpec.UNSPECIFIED){heightSize=this.mListPadding.top+this.mListPadding.bottom+childHeight+this.getVerticalFadingEdgeLength()*2;}if(heightMode==GridView.MeasureSpec.AT_MOST){var ourSize=this.mListPadding.top+this.mListPadding.bottom;var numColumns=this.mNumColumns;for(var i=0;i=heightSize){ourSize=heightSize;break;}}heightSize=ourSize;}if(widthMode==GridView.MeasureSpec.AT_MOST&&this.mRequestedNumColumns!=GridView.AUTO_FIT){var _ourSize=this.mRequestedNumColumns*this.mColumnWidth+(this.mRequestedNumColumns-1)*this.mHorizontalSpacing+this.mListPadding.left+this.mListPadding.right;if(_ourSize>widthSize||didNotInitiallyFit){widthSize|=GridView.MEASURED_STATE_TOO_SMALL;}}this.setMeasuredDimension(widthSize,heightSize);this.mWidthMeasureSpec=widthMeasureSpec;}},{key:'layoutChildren',value:function layoutChildren(){var blockLayoutRequests=this.mBlockLayoutRequests;if(!blockLayoutRequests){this.mBlockLayoutRequests=true;}try{_get2(Object.getPrototypeOf(GridView.prototype),'layoutChildren',this).call(this);this.invalidate();if(this.mAdapter==null){this.resetList();this.invokeOnItemScrollListener();return;}var childrenTop=this.mListPadding.top;var childrenBottom=this.mBottom-this.mTop-this.mListPadding.bottom;var childCount=this.getChildCount();var index=undefined;var delta=0;var sel=undefined;var oldSel=null;var oldFirst=null;var newSel=null;switch(this.mLayoutMode){case GridView.LAYOUT_SET_SELECTION:index=this.mNextSelectedPosition-this.mFirstPosition;if(index>=0&&index=0){delta=this.mNextSelectedPosition-this.mSelectedPosition;}break;default:index=this.mSelectedPosition-this.mFirstPosition;if(index>=0&&index=0&&this.mSelectedPositionGridView.TOUCH_MODE_DOWN&&this.mTouchMode0){this.checkSelectionChanged();}this.invokeOnItemScrollListener();}finally {if(!blockLayoutRequests){this.mBlockLayoutRequests=false;}}}},{key:'makeAndAddView',value:function makeAndAddView(position,y,flow,childrenLeft,selected,where){var child=undefined;if(!this.mDataChanged){child=this.mRecycler.getActiveView(position);if(child!=null){this.setupChild(child,position,y,flow,childrenLeft,selected,true,where);return child;}}child=this.obtainView(position,this.mIsScrap);this.setupChild(child,position,y,flow,childrenLeft,selected,this.mIsScrap[0],where);return child;}},{key:'setupChild',value:function setupChild(child,position,y,flow,childrenLeft,selected,recycled,where){Trace.traceBegin(Trace.TRACE_TAG_VIEW,"setupGridItem");var isSelected=selected&&this.shouldShowSelector();var updateChildSelected=isSelected!=child.isSelected();var mode=this.mTouchMode;var isPressed=mode>GridView.TOUCH_MODE_DOWN&&mode0){this.keyPressed();handled=true;}}break;case KeyEvent.KEYCODE_SPACE:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_UP);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_MOVE_HOME:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_MOVE_END:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_TAB:if(false){if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.sequenceScroll(GridView.FOCUS_FORWARD);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.sequenceScroll(GridView.FOCUS_BACKWARD);}}break;}}if(handled){return true;}switch(action){case KeyEvent.ACTION_DOWN:return _get2(Object.getPrototypeOf(GridView.prototype),'onKeyDown',this).call(this,keyCode,event);case KeyEvent.ACTION_UP:return _get2(Object.getPrototypeOf(GridView.prototype),'onKeyUp',this).call(this,keyCode,event);default:return false;}}},{key:'pageScroll',value:function pageScroll(direction){var nextPage=-1;if(direction==GridView.FOCUS_UP){nextPage=Math.max(0,this.mSelectedPosition-this.getChildCount());}else if(direction==GridView.FOCUS_DOWN){nextPage=Math.min(this.mItemCount-1,this.mSelectedPosition+this.getChildCount());}if(nextPage>=0){this.setSelectionInt(nextPage);this.invokeOnItemScrollListener();this.awakenScrollBars();return true;}return false;}},{key:'fullScroll',value:function fullScroll(direction){var moved=false;if(direction==GridView.FOCUS_UP){this.mLayoutMode=GridView.LAYOUT_SET_SELECTION;this.setSelectionInt(0);this.invokeOnItemScrollListener();moved=true;}else if(direction==GridView.FOCUS_DOWN){this.mLayoutMode=GridView.LAYOUT_SET_SELECTION;this.setSelectionInt(this.mItemCount-1);this.invokeOnItemScrollListener();moved=true;}if(moved){this.awakenScrollBars();}return moved;}},{key:'arrowScroll',value:function arrowScroll(direction){var selectedPosition=this.mSelectedPosition;var numColumns=this.mNumColumns;var startOfRowPos=undefined;var endOfRowPos=undefined;var moved=false;if(!this.mStackFromBottom){startOfRowPos=Math.floor(selectedPosition/numColumns)*numColumns;endOfRowPos=Math.min(startOfRowPos+numColumns-1,this.mItemCount-1);}else {var invertedSelection=this.mItemCount-1-selectedPosition;endOfRowPos=this.mItemCount-1-invertedSelection/numColumns*numColumns;startOfRowPos=Math.max(0,endOfRowPos-numColumns+1);}switch(direction){case GridView.FOCUS_UP:if(startOfRowPos>0){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(Math.max(0,selectedPosition-numColumns));moved=true;}break;case GridView.FOCUS_DOWN:if(endOfRowPosstartOfRowPos){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(Math.max(0,selectedPosition-1));moved=true;}break;case GridView.FOCUS_RIGHT:if(selectedPosition0){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(selectedPosition-1);moved=true;showScroll=selectedPosition==startOfRow;}break;}if(moved){this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));this.invokeOnItemScrollListener();}if(showScroll){this.awakenScrollBars();}return moved;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(Object.getPrototypeOf(GridView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);var closestChildIndex=-1;if(gainFocus&&previouslyFocusedRect!=null){previouslyFocusedRect.offset(this.mScrollX,this.mScrollY);var otherRect=this.mTempRect;var minDistance=Integer.MAX_VALUE;var childCount=this.getChildCount();for(var i=0;i=0){this.setSelection(closestChildIndex+this.mFirstPosition);}else {this.requestLayout();}}},{key:'isCandidateSelection',value:function isCandidateSelection(childIndex,direction){var count=this.getChildCount();var invertedIndex=count-1-childIndex;var rowStart=undefined;var rowEnd=undefined;if(!this.mStackFromBottom){rowStart=childIndex-childIndex%this.mNumColumns;rowEnd=Math.max(rowStart+this.mNumColumns-1,count);}else {rowEnd=count-1-(invertedIndex-invertedIndex%this.mNumColumns);rowStart=Math.max(0,rowEnd-this.mNumColumns+1);}switch(direction){case View.FOCUS_RIGHT:return childIndex==rowStart;case View.FOCUS_DOWN:return rowStart==0;case View.FOCUS_LEFT:return childIndex==rowEnd;case View.FOCUS_UP:return rowEnd==count-1;case View.FOCUS_FORWARD:return childIndex==rowStart&&rowStart==0;case View.FOCUS_BACKWARD:return childIndex==rowEnd&&rowEnd==count-1;default:throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")');}}},{key:'setGravity',value:function setGravity(gravity){if(this.mGravity!=gravity){this.mGravity=gravity;this.requestLayoutIfNecessary();}}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'setHorizontalSpacing',value:function setHorizontalSpacing(horizontalSpacing){if(horizontalSpacing!=this.mRequestedHorizontalSpacing){this.mRequestedHorizontalSpacing=horizontalSpacing;this.requestLayoutIfNecessary();}}},{key:'getHorizontalSpacing',value:function getHorizontalSpacing(){return this.mHorizontalSpacing;}},{key:'getRequestedHorizontalSpacing',value:function getRequestedHorizontalSpacing(){return this.mRequestedHorizontalSpacing;}},{key:'setVerticalSpacing',value:function setVerticalSpacing(verticalSpacing){if(verticalSpacing!=this.mVerticalSpacing){this.mVerticalSpacing=verticalSpacing;this.requestLayoutIfNecessary();}}},{key:'getVerticalSpacing',value:function getVerticalSpacing(){return this.mVerticalSpacing;}},{key:'setStretchMode',value:function setStretchMode(stretchMode){if(stretchMode!=this.mStretchMode){this.mStretchMode=stretchMode;this.requestLayoutIfNecessary();}}},{key:'getStretchMode',value:function getStretchMode(){return this.mStretchMode;}},{key:'setColumnWidth',value:function setColumnWidth(columnWidth){if(columnWidth!=this.mRequestedColumnWidth){this.mRequestedColumnWidth=columnWidth;this.requestLayoutIfNecessary();}}},{key:'getColumnWidth',value:function getColumnWidth(){return this.mColumnWidth;}},{key:'getRequestedColumnWidth',value:function getRequestedColumnWidth(){return this.mRequestedColumnWidth;}},{key:'setNumColumns',value:function setNumColumns(numColumns){if(numColumns!=this.mRequestedNumColumns){this.mRequestedNumColumns=numColumns;this.requestLayoutIfNecessary();}}},{key:'getNumColumns',value:function getNumColumns(){return this.mNumColumns;}},{key:'adjustViewsUpOrDown',value:function adjustViewsUpOrDown(){var childCount=this.getChildCount();if(childCount>0){var delta=undefined;var child=undefined;if(!this.mStackFromBottom){child=this.getChildAt(0);delta=child.getTop()-this.mListPadding.top;if(this.mFirstPosition!=0){delta-=this.mVerticalSpacing;}if(delta<0){delta=0;}}else {child=this.getChildAt(childCount-1);delta=child.getBottom()-(this.getHeight()-this.mListPadding.bottom);if(this.mFirstPosition+childCount0){delta=0;}}if(delta!=0){this.offsetChildrenTopAndBottom(-delta);}}}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){var count=this.getChildCount();if(count>0){var numColumns=this.mNumColumns;var rowCount=(count+numColumns-1)/numColumns;var extent=rowCount*100;var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){extent+=top*100/height;}view=this.getChildAt(count-1);var bottom=view.getBottom();height=view.getHeight();if(height>0){extent-=(bottom-this.getHeight())*100/height;}return extent;}return 0;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){if(this.mFirstPosition>=0&&this.getChildCount()>0){var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){var numColumns=this.mNumColumns;var rowCount=(this.mItemCount+numColumns-1)/numColumns;var oddItemsOnFirstRow=this.isStackFromBottom()?rowCount*numColumns-this.mItemCount:0;var whichRow=(this.mFirstPosition+oddItemsOnFirstRow)/numColumns;return Math.max(whichRow*100-top*100/height+Math.floor(this.mScrollY/this.getHeight()*rowCount*100),0);}}return 0;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var numColumns=this.mNumColumns;var rowCount=(this.mItemCount+numColumns-1)/numColumns;var result=Math.max(rowCount*100,0);if(this.mScrollY!=0){result+=Math.abs(Math.floor(this.mScrollY/this.getHeight()*rowCount*100));}return result;}}]);return GridView;}(AbsListView);GridView.NO_STRETCH=0;GridView.STRETCH_SPACING=1;GridView.STRETCH_COLUMN_WIDTH=2;GridView.STRETCH_SPACING_UNIFORM=3;GridView.AUTO_FIT=-1;widget.GridView=GridView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Comparable;(function(Comparable){function isImpl(obj){return obj&&obj['compareTo'];}Comparable.isImpl=isImpl;})(Comparable=lang.Comparable||(lang.Comparable={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var util;(function(util){var Comparable=java.lang.Comparable;var Collections=function(){function Collections(){_classCallCheck(this,Collections);}_createClass(Collections,null,[{key:'emptyList',value:function emptyList(){return Collections.EMPTY_LIST;}},{key:'sort',value:function sort(list,c){if(c){list.sort(function(t1,t2){return c.compare(t1,t2);});}else {list.sort(function(t1,t2){if(Comparable.isImpl(t1)&&Comparable.isImpl(t2)){return t1.compareTo(t2);}return 0;});}}}]);return Collections;}();Collections.EMPTY_LIST=new util.ArrayList();util.Collections=Collections;})(util=java.util||(java.util={}));})(java||(java={}));var android;(function(android){var widget;(function(widget){var Color=android.graphics.Color;var Paint=android.graphics.Paint;var Align=android.graphics.Paint.Align;var SparseArray=android.util.SparseArray;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var ViewConfiguration=android.view.ViewConfiguration;var DecelerateInterpolator=android.view.animation.DecelerateInterpolator;var Integer=java.lang.Integer;var LinearLayout=android.widget.LinearLayout;var OverScroller=android.widget.OverScroller;var R=android.R;var NumberPicker=function(_LinearLayout){_inherits(NumberPicker,_LinearLayout);function NumberPicker(context,bindElement,defStyle){_classCallCheck(this,NumberPicker);var _this128=_possibleConstructorReturn(this,Object.getPrototypeOf(NumberPicker).call(this,context,bindElement,defStyle));_this128.SELECTOR_WHEEL_ITEM_COUNT=3;_this128.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this128.SELECTOR_WHEEL_ITEM_COUNT/2);_this128.mSelectionDividersDistance=0;_this128.mMinHeight_=NumberPicker.SIZE_UNSPECIFIED;_this128.mMaxHeight=NumberPicker.SIZE_UNSPECIFIED;_this128.mMinWidth_=NumberPicker.SIZE_UNSPECIFIED;_this128.mMaxWidth=NumberPicker.SIZE_UNSPECIFIED;_this128.mTextSize=0;_this128.mSelectorTextGapHeight=0;_this128.mMinValue=0;_this128.mMaxValue=0;_this128.mValue=0;_this128.mLongPressUpdateInterval=NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;_this128.mSelectorIndexToStringCache=new SparseArray();_this128.mSelectorElementHeight=0;_this128.mInitialScrollOffset=Integer.MIN_VALUE;_this128.mCurrentScrollOffset=0;_this128.mPreviousScrollerY=0;_this128.mLastDownEventY=0;_this128.mLastDownEventTime=0;_this128.mLastDownOrMoveEventY=0;_this128.mMinimumFlingVelocity=0;_this128.mMaximumFlingVelocity=0;_this128.mSolidColor=0;_this128.mSelectionDividerHeight=0;_this128.mScrollState=NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;_this128.mTopSelectionDividerTop=0;_this128.mBottomSelectionDividerBottom=0;_this128.mLastHoveredChildVirtualViewId=0;_this128.mLastHandledDownDpadKeyCode=-1;_this128.mHasSelectorWheel=true;_this128._attrBinder.addAttr('solidColor',function(value){_this128.mSolidColor=_this128._attrBinder.parseColor(value)||0;});_this128._attrBinder.addAttr('selectionDivider',function(value){_this128.mSelectionDivider=_this128._attrBinder.parseDrawable(value);});_this128._attrBinder.addAttr('selectionDividerHeight',function(value){var defSelectionDividerHeight=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT*_this128.getResources().getDisplayMetrics().density;_this128.mSelectionDividerHeight=_this128._attrBinder.parseNumberPixelSize(value,defSelectionDividerHeight);});_this128._attrBinder.addAttr('selectionDividersDistance',function(value){var defSelectionDividerDistance=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE*_this128.getResources().getDisplayMetrics().density;_this128.mSelectionDividersDistance=_this128._attrBinder.parseNumberPixelSize(value,defSelectionDividerDistance);});_this128._attrBinder.addAttr('internalMinHeight',function(value){_this128.mMinHeight_=_this128._attrBinder.parseNumberPixelSize(value,NumberPicker.SIZE_UNSPECIFIED);});_this128._attrBinder.addAttr('internalMaxHeight',function(value){_this128.mMaxHeight=_this128._attrBinder.parseNumberPixelSize(value,NumberPicker.SIZE_UNSPECIFIED);});_this128._attrBinder.addAttr('internalMinWidth',function(value){_this128.mMinWidth_=_this128._attrBinder.parseNumberPixelSize(value,NumberPicker.SIZE_UNSPECIFIED);});_this128._attrBinder.addAttr('internalMaxWidth',function(value){_this128.mMaxWidth=_this128._attrBinder.parseNumberPixelSize(value,NumberPicker.SIZE_UNSPECIFIED);});_this128._attrBinder.addAttr('internalMaxWidth',function(value){_this128.mMaxWidth=_this128._attrBinder.parseNumberPixelSize(value,NumberPicker.SIZE_UNSPECIFIED);});_this128._attrBinder.addAttr('virtualButtonPressedDrawable',function(value){_this128.mVirtualButtonPressedDrawable=_this128._attrBinder.parseDrawable(value);});_this128._attrBinder.addAttr('textSize',function(value){_this128.mTextSize=_this128._attrBinder.parseNumberPixelSize(value,_this128.mTextSize);_this128.mSelectorWheelPaint.setTextSize(_this128.mTextSize);});_this128._attrBinder.addAttr('textColor',function(value){_this128.mSelectorWheelPaint.setColor(_this128._attrBinder.parseColor(value,_this128.mSelectorWheelPaint.getColor()));});_this128._attrBinder.addAttr('minValue',function(value){_this128.setMinValue(_this128._attrBinder.parseInt(value,_this128.mMinValue));});_this128._attrBinder.addAttr('maxValue',function(value){_this128.setMaxValue(_this128._attrBinder.parseInt(value,_this128.mMaxValue));});_this128._attrBinder.addAttr('itemCount',function(value){_this128.SELECTOR_WHEEL_ITEM_COUNT=_this128._attrBinder.parseInt(value,_this128.SELECTOR_WHEEL_ITEM_COUNT);_this128.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this128.SELECTOR_WHEEL_ITEM_COUNT/2);_this128.mSelectorIndices=androidui.util.ArrayCreator.newNumberArray(_this128.SELECTOR_WHEEL_ITEM_COUNT);});_this128.mTextSize=Math.floor(16*_this128.getResources().getDisplayMetrics().density);var paint=new Paint();paint.setAntiAlias(true);paint.setTextAlign(Align.CENTER);paint.setTextSize(_this128.mTextSize);paint.setColor(Color.DKGRAY);_this128.mSelectorWheelPaint=paint;_this128.mSelectorIndices=androidui.util.ArrayCreator.newNumberArray(_this128.SELECTOR_WHEEL_ITEM_COUNT);_this128.applyDefaultAttributes(R.attr.numberPickerStyle);if(_this128.mMinHeight_!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinHeight_>_this128.mMaxHeight){throw Error('new IllegalArgumentException("minHeight > maxHeight")');}if(_this128.mMinWidth_!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinWidth_>_this128.mMaxWidth){throw Error('new IllegalArgumentException("minWidth > maxWidth")');}_this128.mComputeMaxWidth=_this128.mMaxWidth==NumberPicker.SIZE_UNSPECIFIED;_this128.mPressedStateHelper=new NumberPicker.PressedStateHelper(_this128);_this128.setWillNotDraw(!_this128.mHasSelectorWheel);var configuration=ViewConfiguration.get();_this128.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();_this128.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity()/NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;_this128.mFlingScroller=new OverScroller(null,true);_this128.mAdjustScroller=new OverScroller(new DecelerateInterpolator(2.5));_this128.updateInputTextView();return _this128;}_createClass(NumberPicker,[{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){if(!this.mHasSelectorWheel){_get2(Object.getPrototypeOf(NumberPicker.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);return;}var msrdWdth=this.getMeasuredWidth();var msrdHght=this.getMeasuredHeight();if(changed){this.initializeSelectorWheel();this.initializeFadingEdges();this.mTopSelectionDividerTop=(this.getHeight()-this.mSelectionDividersDistance)/2-this.mSelectionDividerHeight;this.mBottomSelectionDividerBottom=this.mTopSelectionDividerTop+2*this.mSelectionDividerHeight+this.mSelectionDividersDistance;}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(!this.mHasSelectorWheel){_get2(Object.getPrototypeOf(NumberPicker.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);return;}var newWidthMeasureSpec=this.makeMeasureSpec(widthMeasureSpec,this.mMaxWidth);var newHeightMeasureSpec=this.makeMeasureSpec(heightMeasureSpec,this.mMaxHeight);_get2(Object.getPrototypeOf(NumberPicker.prototype),'onMeasure',this).call(this,newWidthMeasureSpec,newHeightMeasureSpec);var widthSize=this.resolveSizeAndStateRespectingMinSize(this.mMinWidth_,this.getMeasuredWidth(),widthMeasureSpec);var heightSize=this.resolveSizeAndStateRespectingMinSize(this.mMinHeight_,this.getMeasuredHeight(),heightMeasureSpec);this.setMeasuredDimension(widthSize,heightSize);}},{key:'moveToFinalScrollerPosition',value:function moveToFinalScrollerPosition(scroller){scroller.forceFinished(true);var amountToScroll=scroller.getFinalY()-scroller.getCurrY();var futureScrollOffset=(this.mCurrentScrollOffset+amountToScroll)%this.mSelectorElementHeight;var overshootAdjustment=this.mInitialScrollOffset-futureScrollOffset;if(overshootAdjustment!=0){if(Math.abs(overshootAdjustment)>this.mSelectorElementHeight/2){if(overshootAdjustment>0){overshootAdjustment-=this.mSelectorElementHeight;}else {overshootAdjustment+=this.mSelectorElementHeight;}}amountToScroll+=overshootAdjustment;this.scrollBy(0,amountToScroll);return true;}return false;}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(event){if(!this.mHasSelectorWheel||!this.isEnabled()){return false;}var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_DOWN:{this.removeAllCallbacks();this.mLastDownOrMoveEventY=this.mLastDownEventY=event.getY();this.mLastDownEventTime=event.getEventTime();this.mIngonreMoveEvents=false;this.mShowSoftInputOnTap=false;if(this.mLastDownEventYthis.mBottomSelectionDividerBottom){if(this.mScrollState==NumberPicker.OnScrollListener.SCROLL_STATE_IDLE){this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);}}this.getParent().requestDisallowInterceptTouchEvent(true);if(!this.mFlingScroller.isFinished()){this.mFlingScroller.forceFinished(true);this.mAdjustScroller.forceFinished(true);this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);}else if(!this.mAdjustScroller.isFinished()){this.mFlingScroller.forceFinished(true);this.mAdjustScroller.forceFinished(true);}else if(this.mLastDownEventYthis.mBottomSelectionDividerBottom){this.hideSoftInput();this.postChangeCurrentByOneFromLongPress(true,ViewConfiguration.getLongPressTimeout());}else {this.mShowSoftInputOnTap=true;this.postBeginSoftInputOnLongPressCommand();}return true;}}return false;}},{key:'onTouchEvent',value:function onTouchEvent(event){if(!this.isEnabled()||!this.mHasSelectorWheel){return false;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(event);var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_MOVE:{if(this.mIngonreMoveEvents){break;}var currentMoveY=event.getY();if(this.mScrollState!=NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){var deltaDownY=Math.floor(Math.abs(currentMoveY-this.mLastDownEventY));if(deltaDownY>this.mTouchSlop){this.removeAllCallbacks();this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);}}else {var deltaMoveY=Math.floor(currentMoveY-this.mLastDownOrMoveEventY);this.scrollBy(0,deltaMoveY);this.invalidate();}this.mLastDownOrMoveEventY=currentMoveY;}break;case MotionEvent.ACTION_UP:{this.removeBeginSoftInputCommand();this.removeChangeCurrentByOneFromLongPress();this.mPressedStateHelper.cancel();var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumFlingVelocity);var initialVelocity=Math.floor(velocityTracker.getYVelocity());if(Math.abs(initialVelocity)>this.mMinimumFlingVelocity){this.fling(initialVelocity);this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_FLING);}else {var eventY=Math.floor(event.getY());var _deltaMoveY=Math.floor(Math.abs(eventY-this.mLastDownEventY));var deltaTime=event.getEventTime()-this.mLastDownEventTime;if(_deltaMoveY<=this.mTouchSlop&&deltaTime0){this.changeValueByOne(true);this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);}else if(selectorIndexOffset<0){this.changeValueByOne(false);this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);}}}else {this.ensureScrollWheelAdjusted();}this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);}this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}return true;}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(event){var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.removeAllCallbacks();break;}return _get2(Object.getPrototypeOf(NumberPicker.prototype),'dispatchTouchEvent',this).call(this,event);}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var keyCode=event.getKeyCode();switch(keyCode){case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:this.removeAllCallbacks();break;case KeyEvent.KEYCODE_DPAD_DOWN:case KeyEvent.KEYCODE_DPAD_UP:if(!this.mHasSelectorWheel){break;}switch(event.getAction()){case KeyEvent.ACTION_DOWN:if(this.mWrapSelectorWheel||keyCode==KeyEvent.KEYCODE_DPAD_DOWN?this.getValue()this.getMinValue()){this.requestFocus();this.mLastHandledDownDpadKeyCode=keyCode;this.removeAllCallbacks();if(this.mFlingScroller.isFinished()){this.changeValueByOne(keyCode==KeyEvent.KEYCODE_DPAD_DOWN);}return true;}break;case KeyEvent.ACTION_UP:if(this.mLastHandledDownDpadKeyCode==keyCode){this.mLastHandledDownDpadKeyCode=-1;return true;}break;}}return _get2(Object.getPrototypeOf(NumberPicker.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'computeScroll',value:function computeScroll(){var scroller=this.mFlingScroller;if(scroller.isFinished()){scroller=this.mAdjustScroller;if(scroller.isFinished()){return;}}scroller.computeScrollOffset();var currentScrollerY=scroller.getCurrY();if(this.mPreviousScrollerY==0){this.mPreviousScrollerY=scroller.getStartY();}this.scrollBy(0,currentScrollerY-this.mPreviousScrollerY);this.mPreviousScrollerY=currentScrollerY;if(scroller.isFinished()){this.onScrollerFinished(scroller);}else {this.invalidate();}}},{key:'setEnabled',value:function setEnabled(enabled){_get2(Object.getPrototypeOf(NumberPicker.prototype),'setEnabled',this).call(this,enabled);if(!this.mHasSelectorWheel){}if(!this.mHasSelectorWheel){}}},{key:'scrollBy',value:function scrollBy(x,y){var selectorIndices=this.mSelectorIndices;if(!this.mWrapSelectorWheel&&y>0&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]<=this.mMinValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;return;}if(!this.mWrapSelectorWheel&&y<0&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]>=this.mMaxValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;return;}this.mCurrentScrollOffset+=y;while(this.mCurrentScrollOffset-this.mInitialScrollOffset>this.mSelectorTextGapHeight){this.mCurrentScrollOffset-=this.mSelectorElementHeight;this.decrementSelectorIndices(selectorIndices);this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX],true);if(!this.mWrapSelectorWheel&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]<=this.mMinValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;}}while(this.mCurrentScrollOffset-this.mInitialScrollOffset<-this.mSelectorTextGapHeight){this.mCurrentScrollOffset+=this.mSelectorElementHeight;this.incrementSelectorIndices(selectorIndices);this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX],true);if(!this.mWrapSelectorWheel&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]>=this.mMaxValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;}}}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return this.mCurrentScrollOffset;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){return (this.mMaxValue-this.mMinValue+1)*this.mSelectorElementHeight;}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight();}},{key:'getSolidColor',value:function getSolidColor(){return this.mSolidColor;}},{key:'setOnValueChangedListener',value:function setOnValueChangedListener(onValueChangedListener){this.mOnValueChangeListener=onValueChangedListener;}},{key:'setOnScrollListener',value:function setOnScrollListener(onScrollListener){this.mOnScrollListener=onScrollListener;}},{key:'setFormatter',value:function setFormatter(formatter){if(formatter==this.mFormatter){return;}this.mFormatter=formatter;this.initializeSelectorWheelIndices();this.updateInputTextView();}},{key:'setValue',value:function setValue(value){this.setValueInternal(value,false);}},{key:'showSoftInput',value:function showSoftInput(){}},{key:'hideSoftInput',value:function hideSoftInput(){}},{key:'tryComputeMaxWidth',value:function tryComputeMaxWidth(){if(!this.mComputeMaxWidth){return;}var maxTextWidth=0;if(this.mDisplayedValues==null){var maxDigitWidth=0;for(var i=0;i<=9;i++){var digitWidth=this.mSelectorWheelPaint.measureText(NumberPicker.formatNumberWithLocale(i));if(digitWidth>maxDigitWidth){maxDigitWidth=digitWidth;}}var numberOfDigits=0;var current=this.mMaxValue;while(current>0){numberOfDigits++;current=current/10;}maxTextWidth=Math.floor(numberOfDigits*maxDigitWidth);}else {var valueCount=this.mDisplayedValues.length;for(var _i57=0;_i57maxTextWidth){maxTextWidth=Math.floor(textWidth);}}}if(this.mMaxWidth!=maxTextWidth){if(maxTextWidth>this.mMinWidth_){this.mMaxWidth=maxTextWidth;}else {this.mMaxWidth=this.mMinWidth_;}this.invalidate();}}},{key:'getWrapSelectorWheel',value:function getWrapSelectorWheel(){return this.mWrapSelectorWheel;}},{key:'setWrapSelectorWheel',value:function setWrapSelectorWheel(wrapSelectorWheel){var wrappingAllowed=this.mMaxValue-this.mMinValue>=this.mSelectorIndices.length;if((!wrapSelectorWheel||wrappingAllowed)&&wrapSelectorWheel!=this.mWrapSelectorWheel){this.mWrapSelectorWheel=wrapSelectorWheel;}}},{key:'setOnLongPressUpdateInterval',value:function setOnLongPressUpdateInterval(intervalMillis){this.mLongPressUpdateInterval=intervalMillis;}},{key:'getValue',value:function getValue(){return this.mValue;}},{key:'getMinValue',value:function getMinValue(){return this.mMinValue;}},{key:'setMinValue',value:function setMinValue(minValue){if(this.mMinValue==minValue){return;}if(minValue<0){throw Error('new IllegalArgumentException("minValue must be >= 0")');}this.mMinValue=minValue;if(this.mMinValue>this.mValue){this.mValue=this.mMinValue;}var wrapSelectorWheel=this.mMaxValue-this.mMinValue>this.mSelectorIndices.length;this.setWrapSelectorWheel(wrapSelectorWheel);this.initializeSelectorWheelIndices();this.updateInputTextView();this.tryComputeMaxWidth();this.invalidate();}},{key:'getMaxValue',value:function getMaxValue(){return this.mMaxValue;}},{key:'setMaxValue',value:function setMaxValue(maxValue){if(this.mMaxValue==maxValue){return;}if(maxValue<0){throw Error('new IllegalArgumentException("maxValue must be >= 0")');}this.mMaxValue=maxValue;if(this.mMaxValuethis.mSelectorIndices.length;this.setWrapSelectorWheel(wrapSelectorWheel);this.initializeSelectorWheelIndices();this.updateInputTextView();this.tryComputeMaxWidth();this.invalidate();}},{key:'getDisplayedValues',value:function getDisplayedValues(){return this.mDisplayedValues;}},{key:'setDisplayedValues',value:function setDisplayedValues(displayedValues){if(this.mDisplayedValues==displayedValues){return;}this.mDisplayedValues=displayedValues;if(this.mDisplayedValues!=null){}else {}this.updateInputTextView();this.initializeSelectorWheelIndices();this.tryComputeMaxWidth();}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;}},{key:'getBottomFadingEdgeStrength',value:function getBottomFadingEdgeStrength(){return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(NumberPicker.prototype),'onDetachedFromWindow',this).call(this);this.removeAllCallbacks();}},{key:'onDraw',value:function onDraw(canvas){if(!this.mHasSelectorWheel){_get2(Object.getPrototypeOf(NumberPicker.prototype),'onDraw',this).call(this,canvas);return;}var x=(this.mRight-this.mLeft)/2;var y=this.mCurrentScrollOffset;if(this.mVirtualButtonPressedDrawable!=null&&this.mScrollState==NumberPicker.OnScrollListener.SCROLL_STATE_IDLE){if(this.mDecrementVirtualButtonPressed){this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);this.mVirtualButtonPressedDrawable.setBounds(0,0,this.mRight,this.mTopSelectionDividerTop);this.mVirtualButtonPressedDrawable.draw(canvas);}if(this.mIncrementVirtualButtonPressed){this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);this.mVirtualButtonPressedDrawable.setBounds(0,this.mBottomSelectionDividerBottom,this.mRight,this.mBottom);this.mVirtualButtonPressedDrawable.draw(canvas);}}var selectorIndices=this.mSelectorIndices;for(var i=0;i0){this.mFlingScroller.fling(0,0,0,velocityY,0,0,0,Integer.MAX_VALUE);}else {this.mFlingScroller.fling(0,Integer.MAX_VALUE,0,velocityY,0,0,0,Integer.MAX_VALUE);}this.invalidate();}},{key:'getWrappedSelectorIndex',value:function getWrappedSelectorIndex(selectorIndex){if(selectorIndex>this.mMaxValue){return this.mMinValue+(selectorIndex-this.mMaxValue)%(this.mMaxValue-this.mMinValue)-1;}else if(selectorIndexthis.mMaxValue){nextScrollSelectorIndex=this.mMinValue;}selectorIndices[selectorIndices.length-1]=nextScrollSelectorIndex;this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);}},{key:'decrementSelectorIndices',value:function decrementSelectorIndices(selectorIndices){for(var i=selectorIndices.length-1;i>0;i--){selectorIndices[i]=selectorIndices[i-1];}var nextScrollSelectorIndex=selectorIndices[1]-1;if(this.mWrapSelectorWheel&&nextScrollSelectorIndexthis.mMaxValue){scrollSelectorValue="";}else {if(this.mDisplayedValues!=null){var displayedValueIndex=selectorIndex-this.mMinValue;scrollSelectorValue=this.mDisplayedValues[displayedValueIndex];}else {scrollSelectorValue=this.formatNumber(selectorIndex);}}cache.put(selectorIndex,scrollSelectorValue);}},{key:'formatNumber',value:function formatNumber(value){return this.mFormatter!=null?this.mFormatter.format(value):NumberPicker.formatNumberWithLocale(value);}},{key:'validateInputTextView',value:function validateInputTextView(v){}},{key:'updateInputTextView',value:function updateInputTextView(){return false;}},{key:'notifyChange',value:function notifyChange(previous,current){if(this.mOnValueChangeListener!=null){this.mOnValueChangeListener.onValueChange(this,previous,this.mValue);}}},{key:'postChangeCurrentByOneFromLongPress',value:function postChangeCurrentByOneFromLongPress(increment,delayMillis){if(this.mChangeCurrentByOneFromLongPressCommand==null){this.mChangeCurrentByOneFromLongPressCommand=new NumberPicker.ChangeCurrentByOneFromLongPressCommand(this);}else {this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}this.mChangeCurrentByOneFromLongPressCommand.setStep(increment);this.postDelayed(this.mChangeCurrentByOneFromLongPressCommand,delayMillis);}},{key:'removeChangeCurrentByOneFromLongPress',value:function removeChangeCurrentByOneFromLongPress(){if(this.mChangeCurrentByOneFromLongPressCommand!=null){this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}}},{key:'postBeginSoftInputOnLongPressCommand',value:function postBeginSoftInputOnLongPressCommand(){if(this.mBeginSoftInputOnLongPressCommand==null){this.mBeginSoftInputOnLongPressCommand=new NumberPicker.BeginSoftInputOnLongPressCommand(this);}else {this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}this.postDelayed(this.mBeginSoftInputOnLongPressCommand,ViewConfiguration.getLongPressTimeout());}},{key:'removeBeginSoftInputCommand',value:function removeBeginSoftInputCommand(){if(this.mBeginSoftInputOnLongPressCommand!=null){this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}}},{key:'removeAllCallbacks',value:function removeAllCallbacks(){if(this.mChangeCurrentByOneFromLongPressCommand!=null){this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}if(this.mSetSelectionCommand!=null){this.removeCallbacks(this.mSetSelectionCommand);}if(this.mBeginSoftInputOnLongPressCommand!=null){this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}this.mPressedStateHelper.cancel();}},{key:'getSelectedPos',value:function getSelectedPos(value){if(this.mDisplayedValues==null){try{return Integer.parseInt(value);}catch(e){}}else {for(var i=0;ithis.mSelectorElementHeight/2){deltaY+=deltaY>0?-this.mSelectorElementHeight:this.mSelectorElementHeight;}this.mAdjustScroller.startScroll(0,0,0,deltaY,NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS);this.invalidate();return true;}return false;}}],[{key:'getTwoDigitFormatter',value:function getTwoDigitFormatter(){if(!NumberPicker.sTwoDigitFormatter){NumberPicker.sTwoDigitFormatter=new NumberPicker.TwoDigitFormatter();}return NumberPicker.sTwoDigitFormatter;}},{key:'formatNumberWithLocale',value:function formatNumberWithLocale(value){return value+'';}}]);return NumberPicker;}(LinearLayout);NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL=300;NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT=8;NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS=800;NumberPicker.SNAP_SCROLL_DURATION=300;NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH=0.9;NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT=2;NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE=48;NumberPicker.SIZE_UNSPECIFIED=-1;widget.NumberPicker=NumberPicker;(function(NumberPicker){var TwoDigitFormatter=function(){function TwoDigitFormatter(){_classCallCheck(this,TwoDigitFormatter);}_createClass(TwoDigitFormatter,[{key:'format',value:function format(value){var s=value+'';if(s.length===1)s='0'+s;return s;}}]);return TwoDigitFormatter;}();NumberPicker.TwoDigitFormatter=TwoDigitFormatter;var OnScrollListener;(function(OnScrollListener){OnScrollListener.SCROLL_STATE_IDLE=0;OnScrollListener.SCROLL_STATE_TOUCH_SCROLL=1;OnScrollListener.SCROLL_STATE_FLING=2;})(OnScrollListener=NumberPicker.OnScrollListener||(NumberPicker.OnScrollListener={}));var PressedStateHelper=function(){function PressedStateHelper(arg){_classCallCheck(this,PressedStateHelper);this.MODE_PRESS=1;this.MODE_TAPPED=2;this.mManagedButton=0;this.mMode=0;this._NumberPicker_this=arg;}_createClass(PressedStateHelper,[{key:'cancel',value:function cancel(){this.mMode=0;this.mManagedButton=0;this._NumberPicker_this.removeCallbacks(this);if(this._NumberPicker_this.mIncrementVirtualButtonPressed){this._NumberPicker_this.mIncrementVirtualButtonPressed=false;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}if(this._NumberPicker_this.mDecrementVirtualButtonPressed){this._NumberPicker_this.mDecrementVirtualButtonPressed=false;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}},{key:'buttonPressDelayed',value:function buttonPressDelayed(button){this.cancel();this.mMode=this.MODE_PRESS;this.mManagedButton=button;this._NumberPicker_this.postDelayed(this,ViewConfiguration.getTapTimeout());}},{key:'buttonTapped',value:function buttonTapped(button){this.cancel();this.mMode=this.MODE_TAPPED;this.mManagedButton=button;this._NumberPicker_this.post(this);}},{key:'run',value:function run(){switch(this.mMode){case this.MODE_PRESS:{switch(this.mManagedButton){case PressedStateHelper.BUTTON_INCREMENT:{this._NumberPicker_this.mIncrementVirtualButtonPressed=true;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}break;case PressedStateHelper.BUTTON_DECREMENT:{this._NumberPicker_this.mDecrementVirtualButtonPressed=true;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}}break;case this.MODE_TAPPED:{switch(this.mManagedButton){case PressedStateHelper.BUTTON_INCREMENT:{if(!this._NumberPicker_this.mIncrementVirtualButtonPressed){this._NumberPicker_this.postDelayed(this,ViewConfiguration.getPressedStateDuration());}this._NumberPicker_this.mIncrementVirtualButtonPressed=!this._NumberPicker_this.mIncrementVirtualButtonPressed;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}break;case PressedStateHelper.BUTTON_DECREMENT:{if(!this._NumberPicker_this.mDecrementVirtualButtonPressed){this._NumberPicker_this.postDelayed(this,ViewConfiguration.getPressedStateDuration());}this._NumberPicker_this.mDecrementVirtualButtonPressed=!this._NumberPicker_this.mDecrementVirtualButtonPressed;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}}break;}}}]);return PressedStateHelper;}();PressedStateHelper.BUTTON_INCREMENT=1;PressedStateHelper.BUTTON_DECREMENT=2;NumberPicker.PressedStateHelper=PressedStateHelper;var SetSelectionCommand=function(){function SetSelectionCommand(arg){_classCallCheck(this,SetSelectionCommand);this.mSelectionStart=0;this.mSelectionEnd=0;this._NumberPicker_this=arg;}_createClass(SetSelectionCommand,[{key:'run',value:function run(){}}]);return SetSelectionCommand;}();NumberPicker.SetSelectionCommand=SetSelectionCommand;var ChangeCurrentByOneFromLongPressCommand=function(){function ChangeCurrentByOneFromLongPressCommand(arg){_classCallCheck(this,ChangeCurrentByOneFromLongPressCommand);this._NumberPicker_this=arg;}_createClass(ChangeCurrentByOneFromLongPressCommand,[{key:'setStep',value:function setStep(increment){this.mIncrement=increment;}},{key:'run',value:function run(){this._NumberPicker_this.changeValueByOne(this.mIncrement);this._NumberPicker_this.postDelayed(this,this._NumberPicker_this.mLongPressUpdateInterval);}}]);return ChangeCurrentByOneFromLongPressCommand;}();NumberPicker.ChangeCurrentByOneFromLongPressCommand=ChangeCurrentByOneFromLongPressCommand;var BeginSoftInputOnLongPressCommand=function(){function BeginSoftInputOnLongPressCommand(arg){_classCallCheck(this,BeginSoftInputOnLongPressCommand);this._NumberPicker_this=arg;}_createClass(BeginSoftInputOnLongPressCommand,[{key:'run',value:function run(){this._NumberPicker_this.showSoftInput();this._NumberPicker_this.mIngonreMoveEvents=true;}}]);return BeginSoftInputOnLongPressCommand;}();NumberPicker.BeginSoftInputOnLongPressCommand=BeginSoftInputOnLongPressCommand;})(NumberPicker=widget.NumberPicker||(widget.NumberPicker={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_8){var Rect=android.graphics.Rect;var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var ClipDrawable=function(_Drawable7){_inherits(ClipDrawable,_Drawable7);function ClipDrawable(){_classCallCheck(this,ClipDrawable);var _this129=_possibleConstructorReturn(this,Object.getPrototypeOf(ClipDrawable).call(this));_this129.mTmpRect=new Rect();if(arguments.length<=1){_this129.mClipState=new ClipDrawable.ClipState(arguments.length<=0?undefined:arguments[0],_this129);}else {_this129.mClipState=new ClipDrawable.ClipState(null,_this129);var _drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var orientation=arguments.length<=2?undefined:arguments[2];_this129.mClipState.mDrawable=_drawable;_this129.mClipState.mGravity=gravity;_this129.mClipState.mOrientation=orientation;if(_drawable!=null){_drawable.setCallback(_this129);}}return _this129;}_createClass(ClipDrawable,[{key:'inflate',value:function inflate(r,parser){_get2(Object.getPrototypeOf(ClipDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var orientation=a.getInt("android:clipOrientation",ClipDrawable.HORIZONTAL);var gStr=a.getString("android:gravity");var g=Gravity.parseGravity(gStr,Gravity.LEFT);var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&parser.children[0] instanceof HTMLElement){dr=Drawable.createFromXml(r,parser.children[0]);}if(dr==null){throw Error('new IllegalArgumentException("No drawable specified for ")');}this.mClipState.mDrawable=dr;this.mClipState.mOrientation=orientation;this.mClipState.mGravity=g;dr.setCallback(this);}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'getPadding',value:function getPadding(padding){return this.mClipState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mClipState.mDrawable.setVisible(visible,restart);return _get2(Object.getPrototypeOf(ClipDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mClipState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mClipState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mClipState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mClipState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){return this.mClipState.mDrawable.setState(state);}},{key:'onLevelChange',value:function onLevelChange(level){this.mClipState.mDrawable.setLevel(level);this.invalidateSelf();return true;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){this.mClipState.mDrawable.setBounds(bounds);}},{key:'draw',value:function draw(canvas){if(this.mClipState.mDrawable.getLevel()==0){return;}var r=this.mTmpRect;var bounds=this.getBounds();var level=this.getLevel();var w=bounds.width();var iw=0;if((this.mClipState.mOrientation&ClipDrawable.HORIZONTAL)!=0){w-=(w-iw)*(10000-level)/10000;}var h=bounds.height();var ih=0;if((this.mClipState.mOrientation&ClipDrawable.VERTICAL)!=0){h-=(h-ih)*(10000-level)/10000;}Gravity.apply(this.mClipState.mGravity,w,h,bounds,r);if(w>0&&h>0){canvas.save();canvas.clipRect(r);this.mClipState.mDrawable.draw(canvas);canvas.restore();}}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mClipState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mClipState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mClipState.canConstantState()){return this.mClipState;}return null;}}]);return ClipDrawable;}(Drawable);ClipDrawable.HORIZONTAL=1;ClipDrawable.VERTICAL=2;drawable_8.ClipDrawable=ClipDrawable;(function(ClipDrawable){var ClipState=function(){function ClipState(orig,owner){_classCallCheck(this,ClipState);this.mOrientation=0;this.mGravity=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mOrientation=orig.mOrientation;this.mGravity=orig.mGravity;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(ClipState,[{key:'newDrawable',value:function newDrawable(){return new ClipDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return ClipState;}();ClipDrawable.ClipState=ClipState;})(ClipDrawable=drawable_8.ClipDrawable||(drawable_8.ClipDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Animatable=android.graphics.drawable.Animatable;var AnimationDrawable=android.graphics.drawable.AnimationDrawable;var LayerDrawable=android.graphics.drawable.LayerDrawable;var StateListDrawable=android.graphics.drawable.StateListDrawable;var ClipDrawable=android.graphics.drawable.ClipDrawable;var SynchronizedPool=android.util.Pools.SynchronizedPool;var Gravity=android.view.Gravity;var View=android.view.View;var AlphaAnimation=android.view.animation.AlphaAnimation;var Animation=android.view.animation.Animation;var LinearInterpolator=android.view.animation.LinearInterpolator;var Transformation=android.view.animation.Transformation;var ArrayList=java.util.ArrayList;var R=android.R;var NetDrawable=androidui.image.NetDrawable;var ProgressBar=function(_View3){_inherits(ProgressBar,_View3);function ProgressBar(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.progressBarStyle:arguments[2];_classCallCheck(this,ProgressBar);var _this130=_possibleConstructorReturn(this,Object.getPrototypeOf(ProgressBar).call(this,context,bindElement,null));_this130.mMinWidth=0;_this130.mMaxWidth=0;_this130.mMinHeight=0;_this130.mMaxHeight=0;_this130.mProgress=0;_this130.mSecondaryProgress=0;_this130.mMax=0;_this130.mBehavior=0;_this130.mDuration=0;_this130.mMirrorForRtl=false;_this130.mRefreshData=new ArrayList();_this130.initProgressBar();var a=_this130._attrBinder;a.addAttr('progressDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this130.tileify(drawable,false);_this130.setProgressDrawable(drawable);}},function(){return _this130.mProgressDrawable;});a.addAttr('indeterminateDuration',function(value){_this130.mDuration=Math.floor(a.parseInt(value,_this130.mDuration));},function(){return _this130.mDuration;});a.addAttr('minWidth',function(value){_this130.mMinWidth=Math.floor(a.parseNumberPixelSize(value,_this130.mMinWidth));},function(){return _this130.mMinWidth;});a.addAttr('maxWidth',function(value){_this130.mMaxWidth=Math.floor(a.parseNumberPixelSize(value,_this130.mMaxWidth));},function(){return _this130.mMaxWidth;});a.addAttr('minHeight',function(value){_this130.mMinHeight=Math.floor(a.parseNumberPixelSize(value,_this130.mMinHeight));},function(){return _this130.mMinHeight;});a.addAttr('maxHeight',function(value){_this130.mMaxHeight=Math.floor(a.parseNumberPixelSize(value,_this130.mMaxHeight));},function(){return _this130.mMaxHeight;});a.addAttr('indeterminateBehavior',function(value){if(value+''.toLowerCase()=='cycle'){_this130.mBehavior=Animation.REVERSE;}else {_this130.mBehavior=Animation.RESTART;}});a.addAttr('interpolator',function(value){});a.addAttr('max',function(value){_this130.setMax(a.parseInt(value,_this130.mMax));},function(){return _this130.mMax;});a.addAttr('progress',function(value){_this130.setProgress(a.parseInt(value,_this130.mProgress));},function(){return _this130.mProgress;});a.addAttr('secondaryProgress',function(value){_this130.setSecondaryProgress(a.parseInt(value,_this130.mSecondaryProgress));},function(){return _this130.mSecondaryProgress;});a.addAttr('indeterminateDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this130.tileifyIndeterminate(drawable);_this130.setIndeterminateDrawable(drawable);}},function(){return _this130.mIndeterminateDrawable;});a.addAttr('indeterminateOnly',function(value){_this130.mOnlyIndeterminate=a.parseBoolean(value,_this130.mOnlyIndeterminate);_this130.setIndeterminate(_this130.mOnlyIndeterminate||_this130.mIndeterminate);});a.addAttr('indeterminate',function(value){_this130.setIndeterminate(_this130.mOnlyIndeterminate||a.parseBoolean(value,_this130.mIndeterminate));});_this130.mNoInvalidate=true;if(defStyle)_this130.applyDefaultAttributes(defStyle);_this130.mNoInvalidate=false;_this130.setIndeterminate(_this130.mOnlyIndeterminate||_this130.mIndeterminate);return _this130;}_createClass(ProgressBar,[{key:'tileify',value:function tileify(drawable,clip){if(drawable instanceof LayerDrawable){var background=drawable;var N=background.getNumberOfLayers();var outDrawables=new Array(N);var drawableChange=false;for(var i=0;i0?progress/this.mMax:0;var d=this.mCurrentDrawable;if(d!=null){var progressDrawable=null;if(d instanceof LayerDrawable){progressDrawable=d.findDrawableByLayerId(id);}var level=Math.floor(scale*ProgressBar.MAX_LEVEL);(progressDrawable!=null?progressDrawable:d).setLevel(level);}else {this.invalidate();}if(callBackToApp&&id==R.id.progress){this.onProgressRefresh(scale,fromUser);}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){}},{key:'refreshProgress',value:function refreshProgress(id,progress,fromUser){this.doRefreshProgress(id,progress,fromUser,true);}},{key:'setProgress',value:function setProgress(progress){var fromUser=arguments.length<=1||arguments[1]===undefined?false:arguments[1];if(this.mIndeterminate){return;}if(progress<0){progress=0;}if(progress>this.mMax){progress=this.mMax;}if(progress!=this.mProgress){this.mProgress=progress;this.refreshProgress(R.id.progress,this.mProgress,fromUser);}}},{key:'setSecondaryProgress',value:function setSecondaryProgress(secondaryProgress){if(this.mIndeterminate){return;}if(secondaryProgress<0){secondaryProgress=0;}if(secondaryProgress>this.mMax){secondaryProgress=this.mMax;}if(secondaryProgress!=this.mSecondaryProgress){this.mSecondaryProgress=secondaryProgress;this.refreshProgress(R.id.secondaryProgress,this.mSecondaryProgress,false);}}},{key:'getProgress',value:function getProgress(){return this.mIndeterminate?0:this.mProgress;}},{key:'getSecondaryProgress',value:function getSecondaryProgress(){return this.mIndeterminate?0:this.mSecondaryProgress;}},{key:'getMax',value:function getMax(){return this.mMax;}},{key:'setMax',value:function setMax(max){if(max<0){max=0;}if(max!=this.mMax){this.mMax=max;this.postInvalidate();if(this.mProgress>max){this.mProgress=max;}this.refreshProgress(R.id.progress,this.mProgress,false);}}},{key:'incrementProgressBy',value:function incrementProgressBy(diff){this.setProgress(this.mProgress+diff);}},{key:'incrementSecondaryProgressBy',value:function incrementSecondaryProgressBy(diff){this.setSecondaryProgress(this.mSecondaryProgress+diff);}},{key:'startAnimation',value:function startAnimation(){if(this.getVisibility()!=ProgressBar.VISIBLE){return;}if(Animatable.isImpl(this.mIndeterminateDrawable)){this.mShouldStartAnimationDrawable=true;this.mHasAnimation=false;}else {this.mHasAnimation=true;if(this.mInterpolator==null){this.mInterpolator=new LinearInterpolator();}if(this.mTransformation==null){this.mTransformation=new Transformation();}else {this.mTransformation.clear();}if(this.mAnimation==null){this.mAnimation=new AlphaAnimation(0.0,1.0);}else {this.mAnimation.reset();}this.mAnimation.setRepeatMode(this.mBehavior);this.mAnimation.setRepeatCount(Animation.INFINITE);this.mAnimation.setDuration(this.mDuration);this.mAnimation.setInterpolator(this.mInterpolator);this.mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME);}this.postInvalidate();}},{key:'stopAnimation',value:function stopAnimation(){this.mHasAnimation=false;if(Animatable.isImpl(this.mIndeterminateDrawable)){this.mIndeterminateDrawable.stop();this.mShouldStartAnimationDrawable=false;}this.postInvalidate();}},{key:'setInterpolator',value:function setInterpolator(interpolator){this.mInterpolator=interpolator;}},{key:'getInterpolator',value:function getInterpolator(){return this.mInterpolator;}},{key:'setVisibility',value:function setVisibility(v){if(this.getVisibility()!=v){_get2(Object.getPrototypeOf(ProgressBar.prototype),'setVisibility',this).call(this,v);if(this.mIndeterminate){if(v==ProgressBar.GONE||v==ProgressBar.INVISIBLE){this.stopAnimation();}else {this.startAnimation();}}}}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){_get2(Object.getPrototypeOf(ProgressBar.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);if(this.mIndeterminate){if(visibility==ProgressBar.GONE||visibility==ProgressBar.INVISIBLE){this.stopAnimation();}else {this.startAnimation();}}}},{key:'invalidateDrawable',value:function invalidateDrawable(dr){if(!this.mInDrawing){if(this.verifyDrawable(dr)){var dirty=dr.getBounds();var scrollX=this.mScrollX+this.mPaddingLeft;var scrollY=this.mScrollY+this.mPaddingTop;this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}else {_get2(Object.getPrototypeOf(ProgressBar.prototype),'invalidateDrawable',this).call(this,dr);}}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){this.updateDrawableBounds(w,h);}},{key:'updateDrawableBounds',value:function updateDrawableBounds(w,h){w-=this.mPaddingRight+this.mPaddingLeft;h-=this.mPaddingTop+this.mPaddingBottom;var right=w;var bottom=h;var top=0;var left=0;if(this.mIndeterminateDrawable!=null){if(this.mOnlyIndeterminate&&!(this.mIndeterminateDrawable instanceof AnimationDrawable)){var intrinsicWidth=this.mIndeterminateDrawable.getIntrinsicWidth();var intrinsicHeight=this.mIndeterminateDrawable.getIntrinsicHeight();var intrinsicAspect=intrinsicWidth/intrinsicHeight;var boundAspect=w/h;if(intrinsicAspect!=boundAspect){if(boundAspect>intrinsicAspect){var width=Math.floor(h*intrinsicAspect);left=(w-width)/2;right=left+width;}else {var height=Math.floor(w*(1/intrinsicAspect));top=(h-height)/2;bottom=top+height;}}}if(this.isLayoutRtl()&&this.mMirrorForRtl){var tempLeft=left;left=w-right;right=w-tempLeft;}this.mIndeterminateDrawable.setBounds(left,top,right,bottom);}if(this.mProgressDrawable!=null){this.mProgressDrawable.setBounds(0,0,right,bottom);}}},{key:'onDraw',value:function onDraw(canvas){_get2(Object.getPrototypeOf(ProgressBar.prototype),'onDraw',this).call(this,canvas);var d=this.mCurrentDrawable;if(d!=null){canvas.save();if(this.isLayoutRtl()&&this.mMirrorForRtl){canvas.translate(this.getWidth()-this.mPaddingRight,this.mPaddingTop);canvas.scale(-1.0,1.0);}else {canvas.translate(this.mPaddingLeft,this.mPaddingTop);}var time=this.getDrawingTime();if(this.mHasAnimation){this.mAnimation.getTransformation(time,this.mTransformation);var scale=this.mTransformation.getAlpha();try{this.mInDrawing=true;d.setLevel(Math.floor(scale*ProgressBar.MAX_LEVEL));}finally {this.mInDrawing=false;}this.postInvalidateOnAnimation();}d.draw(canvas);canvas.restore();if(this.mShouldStartAnimationDrawable&&Animatable.isImpl(d)){d.start();this.mShouldStartAnimationDrawable=false;}}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var d=this.mCurrentDrawable;var dw=0;var dh=0;if(d!=null){dw=Math.max(this.mMinWidth,Math.min(this.mMaxWidth,d.getIntrinsicWidth()));dh=Math.max(this.mMinHeight,Math.min(this.mMaxHeight,d.getIntrinsicHeight()));}this.updateDrawableState();dw+=this.mPaddingLeft+this.mPaddingRight;dh+=this.mPaddingTop+this.mPaddingBottom;this.setMeasuredDimension(ProgressBar.resolveSizeAndState(dw,widthMeasureSpec,0),ProgressBar.resolveSizeAndState(dh,heightMeasureSpec,0));}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(ProgressBar.prototype),'drawableStateChanged',this).call(this);this.updateDrawableState();}},{key:'updateDrawableState',value:function updateDrawableState(){var state=this.getDrawableState();if(this.mProgressDrawable!=null&&this.mProgressDrawable.isStateful()){this.mProgressDrawable.setState(state);}if(this.mIndeterminateDrawable!=null&&this.mIndeterminateDrawable.isStateful()){this.mIndeterminateDrawable.setState(state);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(Object.getPrototypeOf(ProgressBar.prototype),'onAttachedToWindow',this).call(this);if(this.mIndeterminate){this.startAnimation();}if(this.mRefreshData!=null){{var count=this.mRefreshData.size();for(var i=0;i20){this.setKeyProgressIncrement(Math.max(1,Math.round(this.getMax()/20)));}}},{key:'verifyDrawable',value:function verifyDrawable(who){return who==this.mThumb||_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'verifyDrawable',this).call(this,who);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mThumb!=null)this.mThumb.jumpToCurrentState();}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'drawableStateChanged',this).call(this);var progressDrawable=this.getProgressDrawable();if(progressDrawable!=null){progressDrawable.setAlpha(this.isEnabled()?AbsSeekBar.NO_ALPHA:Math.floor(AbsSeekBar.NO_ALPHA*this.mDisabledAlpha));}if(this.mThumb!=null&&this.mThumb.isStateful()){var state=this.getDrawableState();this.mThumb.setState(state);}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);var thumb=this.mThumb;if(thumb!=null){this.setThumbPos(this.getWidth(),thumb,scale,Integer.MIN_VALUE);this.invalidate();}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);this.updateThumbPos(w,h);}},{key:'updateThumbPos',value:function updateThumbPos(w,h){var d=this.getCurrentDrawable();var thumb=this.mThumb;var thumbHeight=thumb==null?0:thumb.getIntrinsicHeight();var trackHeight=Math.min(this.mMaxHeight,h-this.mPaddingTop-this.mPaddingBottom);var max=this.getMax();var scale=max>0?this.getProgress()/max:0;if(thumbHeight>trackHeight){if(thumb!=null){this.setThumbPos(w,thumb,scale,0);}var gapForCenteringTrack=(thumbHeight-trackHeight)/2;if(d!=null){d.setBounds(0,gapForCenteringTrack,w-this.mPaddingRight-this.mPaddingLeft,h-this.mPaddingBottom-gapForCenteringTrack-this.mPaddingTop);}}else {if(d!=null){d.setBounds(0,0,w-this.mPaddingRight-this.mPaddingLeft,h-this.mPaddingBottom-this.mPaddingTop);}var gap=(trackHeight-thumbHeight)/2;if(thumb!=null){this.setThumbPos(w,thumb,scale,gap);}}}},{key:'setThumbPos',value:function setThumbPos(w,thumb,scale,gap){var available=w-this.mPaddingLeft-this.mPaddingRight;var thumbWidth=thumb.getIntrinsicWidth();var thumbHeight=thumb.getIntrinsicHeight();available-=thumbWidth;available+=this.mThumbOffset*2;var thumbPos=Math.floor(scale*available);var topBound=undefined,bottomBound=undefined;if(gap==Integer.MIN_VALUE){var oldBounds=thumb.getBounds();topBound=oldBounds.top;bottomBound=oldBounds.bottom;}else {topBound=gap;bottomBound=gap+thumbHeight;}var left=this.isLayoutRtl()&&this.mMirrorForRtl?available-thumbPos:thumbPos;thumb.setBounds(left,topBound,left+thumbWidth,bottomBound);}},{key:'onDraw',value:function onDraw(canvas){_get2(Object.getPrototypeOf(AbsSeekBar.prototype),'onDraw',this).call(this,canvas);if(this.mThumb!=null){canvas.save();canvas.translate(this.mPaddingLeft-this.mThumbOffset,this.mPaddingTop);this.mThumb.draw(canvas);canvas.restore();}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var d=this.getCurrentDrawable();var thumbHeight=this.mThumb==null?0:this.mThumb.getIntrinsicHeight();var dw=0;var dh=0;if(d!=null){dw=Math.max(this.mMinWidth,Math.min(this.mMaxWidth,d.getIntrinsicWidth()));dh=Math.max(this.mMinHeight,Math.min(this.mMaxHeight,d.getIntrinsicHeight()));dh=Math.max(thumbHeight,dh);}dw+=this.mPaddingLeft+this.mPaddingRight;dh+=this.mPaddingTop+this.mPaddingBottom;this.setMeasuredDimension(AbsSeekBar.resolveSizeAndState(dw,widthMeasureSpec,0),AbsSeekBar.resolveSizeAndState(dh,heightMeasureSpec,0));}},{key:'onTouchEvent',value:function onTouchEvent(event){if(!this.mIsUserSeekable||!this.isEnabled()){return false;}switch(event.getAction()){case MotionEvent.ACTION_DOWN:if(this.isInScrollingContainer()){this.mTouchDownX=event.getX();}else {this.setPressed(true);if(this.mThumb!=null){this.invalidate(this.mThumb.getBounds());}this.onStartTrackingTouch();this.trackTouchEvent(event);this.attemptClaimDrag();}break;case MotionEvent.ACTION_MOVE:if(this.mIsDragging){this.trackTouchEvent(event);}else {var x=event.getX();if(Math.abs(x-this.mTouchDownX)>this.mTouchSlop){this.setPressed(true);if(this.mThumb!=null){this.invalidate(this.mThumb.getBounds());}this.onStartTrackingTouch();this.trackTouchEvent(event);this.attemptClaimDrag();}}break;case MotionEvent.ACTION_UP:if(this.mIsDragging){this.trackTouchEvent(event);this.onStopTrackingTouch();this.setPressed(false);}else {this.onStartTrackingTouch();this.trackTouchEvent(event);this.onStopTrackingTouch();}this.invalidate();break;case MotionEvent.ACTION_CANCEL:if(this.mIsDragging){this.onStopTrackingTouch();this.setPressed(false);}this.invalidate();break;}return true;}},{key:'trackTouchEvent',value:function trackTouchEvent(event){var width=this.getWidth();var available=width-this.mPaddingLeft-this.mPaddingRight;var x=Math.floor(event.getX());var scale=undefined;var progress=0;if(this.isLayoutRtl()&&this.mMirrorForRtl){if(x>width-this.mPaddingRight){scale=0.0;}else if(xwidth-this.mPaddingRight){scale=1.0;}else {scale=(x-this.mPaddingLeft)/available;progress=this.mTouchProgressOffset;}}var max=this.getMax();progress+=scale*max;this.setProgress(Math.floor(progress),true);}},{key:'attemptClaimDrag',value:function attemptClaimDrag(){if(this.mParent!=null){this.mParent.requestDisallowInterceptTouchEvent(true);}}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){this.mIsDragging=true;}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){this.mIsDragging=false;}},{key:'onKeyChange',value:function onKeyChange(){}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.isEnabled()){var progress=this.getProgress();switch(keyCode){case KeyEvent.KEYCODE_DPAD_LEFT:if(progress<=0)break;this.setProgress(progress-this.mKeyProgressIncrement,true);this.onKeyChange();return true;case KeyEvent.KEYCODE_DPAD_RIGHT:if(progress>=this.getMax())break;this.setProgress(progress+this.mKeyProgressIncrement,true);this.onKeyChange();return true;}}return _get2(Object.getPrototypeOf(AbsSeekBar.prototype),'onKeyDown',this).call(this,keyCode,event);}}]);return AbsSeekBar;}(ProgressBar);AbsSeekBar.NO_ALPHA=0xFF;widget.AbsSeekBar=AbsSeekBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var AbsSeekBar=android.widget.AbsSeekBar;var SeekBar=function(_AbsSeekBar){_inherits(SeekBar,_AbsSeekBar);function SeekBar(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.seekBarStyle:arguments[2];_classCallCheck(this,SeekBar);return _possibleConstructorReturn(this,Object.getPrototypeOf(SeekBar).call(this,context,bindElement,defStyle));}_createClass(SeekBar,[{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(Object.getPrototypeOf(SeekBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onProgressChanged(this,this.getProgress(),fromUser);}}},{key:'setOnSeekBarChangeListener',value:function setOnSeekBarChangeListener(l){this.mOnSeekBarChangeListener=l;}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){_get2(Object.getPrototypeOf(SeekBar.prototype),'onStartTrackingTouch',this).call(this);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onStartTrackingTouch(this);}}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){_get2(Object.getPrototypeOf(SeekBar.prototype),'onStopTrackingTouch',this).call(this);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onStopTrackingTouch(this);}}}]);return SeekBar;}(AbsSeekBar);widget.SeekBar=SeekBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var AbsSeekBar=android.widget.AbsSeekBar;var RatingBar=function(_AbsSeekBar2){_inherits(RatingBar,_AbsSeekBar2);function RatingBar(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.ratingBarStyle:arguments[2];_classCallCheck(this,RatingBar);var _this139=_possibleConstructorReturn(this,Object.getPrototypeOf(RatingBar).call(this,context,bindElement,null));_this139.mNumStars=5;_this139.mProgressOnStartTracking=0;var a=_this139._attrBinder;a.addAttr('numStars',function(value){_this139.setNumStars(a.parseInt(value,_this139.mNumStars));},function(){return _this139.mNumStars;});a.addAttr('isIndicator',function(value){_this139.setIsIndicator(a.parseBoolean(value,!_this139.mIsUserSeekable));},function(){return !_this139.mIsUserSeekable;});a.addAttr('stepSize',function(value){_this139.setStepSize(a.parseFloat(value,0.5));},function(){return _this139.getStepSize();});a.addAttr('rating',function(value){_this139.setRating(a.parseFloat(value,_this139.getRating()));},function(){return _this139.getRating();});if(defStyle)_this139.applyDefaultAttributes(defStyle);_this139.mTouchProgressOffset=1.1;return _this139;}_createClass(RatingBar,[{key:'setOnRatingBarChangeListener',value:function setOnRatingBarChangeListener(listener){this.mOnRatingBarChangeListener=listener;}},{key:'getOnRatingBarChangeListener',value:function getOnRatingBarChangeListener(){return this.mOnRatingBarChangeListener;}},{key:'setIsIndicator',value:function setIsIndicator(isIndicator){this.mIsUserSeekable=!isIndicator;this.setFocusable(!isIndicator);}},{key:'isIndicator',value:function isIndicator(){return !this.mIsUserSeekable;}},{key:'setNumStars',value:function setNumStars(numStars){if(numStars<=0){return;}var step=this.getStepSize();this.mNumStars=numStars;this.setStepSize(step);this.requestLayout();}},{key:'getNumStars',value:function getNumStars(){return this.mNumStars;}},{key:'setRating',value:function setRating(rating){this.setProgress(Math.round(rating*this.getProgressPerStar()));}},{key:'getRating',value:function getRating(){return this.getProgress()/this.getProgressPerStar();}},{key:'setStepSize',value:function setStepSize(stepSize){if(Number.isNaN(stepSize)||!Number.isFinite(stepSize)||stepSize<=0){return;}var newMax=this.mNumStars/stepSize;var newProgress=Math.floor(newMax/this.getMax()*this.getProgress());if(Number.isNaN(newProgress))newProgress=0;this.setMax(Math.floor(newMax));this.setProgress(newProgress);}},{key:'getStepSize',value:function getStepSize(){return this.getNumStars()/this.getMax();}},{key:'getProgressPerStar',value:function getProgressPerStar(){if(this.mNumStars>0){return 1*this.getMax()/this.mNumStars;}else {return 1;}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(Object.getPrototypeOf(RatingBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);this.updateSecondaryProgress(this.getProgress());if(!fromUser){this.dispatchRatingChange(false);}}},{key:'updateSecondaryProgress',value:function updateSecondaryProgress(progress){var ratio=this.getProgressPerStar();if(ratio>0){var progressInStars=progress/ratio;var secondaryProgress=Math.floor(Math.ceil(progressInStars)*ratio);this.setSecondaryProgress(secondaryProgress);}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(Object.getPrototypeOf(RatingBar.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);if(this.mSampleTile!=null){var width=this.mSampleTile.getIntrinsicWidth()*this.mNumStars;this.setMeasuredDimension(RatingBar.resolveSizeAndState(width,widthMeasureSpec,0),this.getMeasuredHeight());}}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){this.mProgressOnStartTracking=this.getProgress();_get2(Object.getPrototypeOf(RatingBar.prototype),'onStartTrackingTouch',this).call(this);}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){_get2(Object.getPrototypeOf(RatingBar.prototype),'onStopTrackingTouch',this).call(this);if(this.getProgress()!=this.mProgressOnStartTracking){this.dispatchRatingChange(true);}}},{key:'onKeyChange',value:function onKeyChange(){_get2(Object.getPrototypeOf(RatingBar.prototype),'onKeyChange',this).call(this);this.dispatchRatingChange(true);}},{key:'dispatchRatingChange',value:function dispatchRatingChange(fromUser){if(this.mOnRatingBarChangeListener!=null){this.mOnRatingBarChangeListener.onRatingChanged(this,this.getRating(),fromUser);}}},{key:'setMax',value:function setMax(max){if(max<=0){return;}_get2(Object.getPrototypeOf(RatingBar.prototype),'setMax',this).call(this,max);}}]);return RatingBar;}(AbsSeekBar);widget.RatingBar=RatingBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ArrayList=java.util.ArrayList;var ExpandableListView=android.widget.ExpandableListView;var ExpandableListPosition=function(){function ExpandableListPosition(){_classCallCheck(this,ExpandableListPosition);this.groupPos=0;this.childPos=0;this.flatListPos=0;this.type=0;}_createClass(ExpandableListPosition,[{key:'resetState',value:function resetState(){this.groupPos=0;this.childPos=0;this.flatListPos=0;this.type=0;}},{key:'getPackedPosition',value:function getPackedPosition(){if(this.type==ExpandableListPosition.CHILD)return ExpandableListView.getPackedPositionForChild(this.groupPos,this.childPos);else return ExpandableListView.getPackedPositionForGroup(this.groupPos);}},{key:'recycle',value:function recycle(){{if(ExpandableListPosition.sPool.size()0){elp=ExpandableListPosition.sPool.remove(0);}else {return new ExpandableListPosition();}}elp.resetState();return elp;}}]);return ExpandableListPosition;}();ExpandableListPosition.MAX_POOL_SIZE=5;ExpandableListPosition.sPool=new ArrayList(ExpandableListPosition.MAX_POOL_SIZE);ExpandableListPosition.CHILD=1;ExpandableListPosition.GROUP=2;widget.ExpandableListPosition=ExpandableListPosition;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var HeterogeneousExpandableList;(function(HeterogeneousExpandableList){function isImpl(obj){return obj&&obj['getGroupType']&&obj['getChildType']&&obj['getGroupTypeCount']&&obj['getChildTypeCount'];}HeterogeneousExpandableList.isImpl=isImpl;})(HeterogeneousExpandableList=widget.HeterogeneousExpandableList||(widget.HeterogeneousExpandableList={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var SystemClock=android.os.SystemClock;var ArrayList=java.util.ArrayList;var Collections=java.util.Collections;var Integer=java.lang.Integer;var AdapterView=android.widget.AdapterView;var BaseAdapter=android.widget.BaseAdapter;var ExpandableListPosition=android.widget.ExpandableListPosition;var HeterogeneousExpandableList=android.widget.HeterogeneousExpandableList;var ExpandableListConnector=function(_BaseAdapter){_inherits(ExpandableListConnector,_BaseAdapter);function ExpandableListConnector(expandableListAdapter){_classCallCheck(this,ExpandableListConnector);var _this140=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListConnector).call(this));_this140.mTotalExpChildrenCount=0;_this140.mMaxExpGroupCount=Integer.MAX_VALUE;_this140.mDataSetObserver=new ExpandableListConnector.MyDataSetObserver(_this140);_this140.mExpGroupMetadataList=new ArrayList();_this140.setExpandableListAdapter(expandableListAdapter);return _this140;}_createClass(ExpandableListConnector,[{key:'setExpandableListAdapter',value:function setExpandableListAdapter(expandableListAdapter){if(this.mExpandableListAdapter!=null){this.mExpandableListAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.mExpandableListAdapter=expandableListAdapter;expandableListAdapter.registerDataSetObserver(this.mDataSetObserver);}},{key:'getUnflattenedPos',value:function getUnflattenedPos(flPos){var egml=this.mExpGroupMetadataList;var numExpGroups=egml.size();var leftExpGroupIndex=0;var rightExpGroupIndex=numExpGroups-1;var midExpGroupIndex=0;var midExpGm=undefined;if(numExpGroups==0){return ExpandableListConnector.PositionMetadata.obtain(flPos,ExpandableListPosition.GROUP,flPos,-1,null,0);}while(leftExpGroupIndex<=rightExpGroupIndex){midExpGroupIndex=Math.floor((rightExpGroupIndex-leftExpGroupIndex)/2+leftExpGroupIndex);midExpGm=egml.get(midExpGroupIndex);if(flPos>midExpGm.lastChildFlPos){leftExpGroupIndex=midExpGroupIndex+1;}else if(flPosmidExpGroupIndex){var leftExpGm=egml.get(leftExpGroupIndex-1);insertPosition=leftExpGroupIndex;groupPos=flPos-leftExpGm.lastChildFlPos+leftExpGm.gPos;}else if(rightExpGroupIndexmidExpGm.gPos){leftExpGroupIndex=midExpGroupIndex+1;}else if(pos.groupPosmidExpGroupIndex){var leftExpGm=egml.get(leftExpGroupIndex-1);var flPos=leftExpGm.lastChildFlPos+(pos.groupPos-leftExpGm.gPos);return ExpandableListConnector.PositionMetadata.obtain(flPos,pos.type,pos.groupPos,pos.childPos,null,leftExpGroupIndex);}else if(rightExpGroupIndex=0;i--){var curGm=egml.get(i);var newGPos=this.findGroupPosition(curGm.gId,curGm.gPos);if(newGPos!=curGm.gPos){if(newGPos==AdapterView.INVALID_POSITION){egml.remove(i);egmlSize--;}curGm.gPos=newGPos;if(!positionsChanged)positionsChanged=true;}}if(positionsChanged){Collections.sort(egml);}}var gChildrenCount=undefined;var lastGPos=0;for(var _i60=0;_i60=this.mMaxExpGroupCount){var collapsedGm=this.mExpGroupMetadataList.get(0);var collapsedIndex=this.mExpGroupMetadataList.indexOf(collapsedGm);this.collapseGroup(collapsedGm.gPos);if(posMetadata.groupInsertIndex>collapsedIndex){posMetadata.groupInsertIndex--;}}var expandedGm=ExpandableListConnector.GroupMetadata.obtain(ExpandableListConnector.GroupMetadata.REFRESH,ExpandableListConnector.GroupMetadata.REFRESH,posMetadata.position.groupPos,this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos));this.mExpGroupMetadataList.add(posMetadata.groupInsertIndex,expandedGm);this.refreshExpGroupMetadataList(false,false);this.notifyDataSetChanged();this.mExpandableListAdapter.onGroupExpanded(expandedGm.gPos);return true;}},{key:'isGroupExpanded',value:function isGroupExpanded(groupPosition){var groupMetadata=undefined;for(var i=this.mExpGroupMetadataList.size()-1;i>=0;i--){groupMetadata=this.mExpGroupMetadataList.get(i);if(groupMetadata.gPos==groupPosition){return true;}}return false;}},{key:'setMaxExpGroupCount',value:function setMaxExpGroupCount(maxExpGroupCount){this.mMaxExpGroupCount=maxExpGroupCount;}},{key:'getAdapter',value:function getAdapter(){return this.mExpandableListAdapter;}},{key:'getExpandedGroupMetadataList',value:function getExpandedGroupMetadataList(){return this.mExpGroupMetadataList;}},{key:'setExpandedGroupMetadataList',value:function setExpandedGroupMetadataList(expandedGroupMetadataList){if(expandedGroupMetadataList==null||this.mExpandableListAdapter==null){return;}var numGroups=this.mExpandableListAdapter.getGroupCount();for(var i=expandedGroupMetadataList.size()-1;i>=0;i--){if(expandedGroupMetadataList.get(i).gPos>=numGroups){return;}}this.mExpGroupMetadataList=expandedGroupMetadataList;this.refreshExpGroupMetadataList(true,false);}},{key:'isEmpty',value:function isEmpty(){var adapter=this.getAdapter();return adapter!=null?adapter.isEmpty():true;}},{key:'findGroupPosition',value:function findGroupPosition(groupIdToMatch,seedGroupPosition){var count=this.mExpandableListAdapter.getGroupCount();if(count==0){return AdapterView.INVALID_POSITION;}if(groupIdToMatch==AdapterView.INVALID_ROW_ID){return AdapterView.INVALID_POSITION;}seedGroupPosition=Math.max(0,seedGroupPosition);seedGroupPosition=Math.min(count-1,seedGroupPosition);var endTime=SystemClock.uptimeMillis()+AdapterView.SYNC_MAX_DURATION_MILLIS;var rowId=undefined;var first=seedGroupPosition;var last=seedGroupPosition;var next=false;var hitFirst=undefined;var hitLast=undefined;var adapter=this.getAdapter();if(adapter==null){return AdapterView.INVALID_POSITION;}while(SystemClock.uptimeMillis()<=endTime){rowId=adapter.getGroupId(seedGroupPosition);if(rowId==groupIdToMatch){return seedGroupPosition;}hitLast=last==count-1;hitFirst=first==0;if(hitLast&&hitFirst){break;}if(hitFirst||next&&!hitLast){last++;seedGroupPosition=last;next=false;}else if(hitLast||!next&&!hitFirst){first--;seedGroupPosition=first;next=true;}}return AdapterView.INVALID_POSITION;}}]);return ExpandableListConnector;}(BaseAdapter);widget.ExpandableListConnector=ExpandableListConnector;(function(ExpandableListConnector){var MyDataSetObserver=function(_DataSetObserver2){_inherits(MyDataSetObserver,_DataSetObserver2);function MyDataSetObserver(arg){_classCallCheck(this,MyDataSetObserver);var _this141=_possibleConstructorReturn(this,Object.getPrototypeOf(MyDataSetObserver).call(this));_this141._ExpandableListConnector_this=arg;return _this141;}_createClass(MyDataSetObserver,[{key:'onChanged',value:function onChanged(){this._ExpandableListConnector_this.refreshExpGroupMetadataList(true,true);this._ExpandableListConnector_this.notifyDataSetChanged();}},{key:'onInvalidated',value:function onInvalidated(){this._ExpandableListConnector_this.refreshExpGroupMetadataList(true,true);this._ExpandableListConnector_this.notifyDataSetInvalidated();}}]);return MyDataSetObserver;}(DataSetObserver);ExpandableListConnector.MyDataSetObserver=MyDataSetObserver;var GroupMetadata=function(){function GroupMetadata(){_classCallCheck(this,GroupMetadata);this.flPos=0;this.lastChildFlPos=0;this.gPos=0;this.gId=0;}_createClass(GroupMetadata,[{key:'compareTo',value:function compareTo(another){if(another==null){throw Error('new IllegalArgumentException()');}return this.gPos-another.gPos;}}],[{key:'obtain',value:function obtain(flPos,lastChildFlPos,gPos,gId){var gm=new GroupMetadata();gm.flPos=flPos;gm.lastChildFlPos=lastChildFlPos;gm.gPos=gPos;gm.gId=gId;return gm;}}]);return GroupMetadata;}();GroupMetadata.REFRESH=-1;ExpandableListConnector.GroupMetadata=GroupMetadata;var PositionMetadata=function(){function PositionMetadata(){_classCallCheck(this,PositionMetadata);this.groupInsertIndex=0;}_createClass(PositionMetadata,[{key:'resetState',value:function resetState(){if(this.position!=null){this.position.recycle();this.position=null;}this.groupMetadata=null;this.groupInsertIndex=0;}},{key:'recycle',value:function recycle(){this.resetState();{if(PositionMetadata.sPool.size()0){pm=PositionMetadata.sPool.remove(0);}else {return new PositionMetadata();}}pm.resetState();return pm;}}]);return PositionMetadata;}();PositionMetadata.MAX_POOL_SIZE=5;PositionMetadata.sPool=new ArrayList(PositionMetadata.MAX_POOL_SIZE);ExpandableListConnector.PositionMetadata=PositionMetadata;})(ExpandableListConnector=widget.ExpandableListConnector||(widget.ExpandableListConnector={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ExpandableListConnector=android.widget.ExpandableListConnector;var ExpandableListPosition=android.widget.ExpandableListPosition;var ListView=android.widget.ListView;var Long=goog.math.Long;var ExpandableListView=function(_ListView){_inherits(ExpandableListView,_ListView);function ExpandableListView(context,bindElement){var defStyle=arguments.length<=2||arguments[2]===undefined?android.R.attr.expandableListViewStyle:arguments[2];_classCallCheck(this,ExpandableListView);var _this142=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListView).call(this,context,bindElement,null));_this142.mIndicatorLeft=0;_this142.mIndicatorRight=0;_this142.mIndicatorStart=0;_this142.mIndicatorEnd=0;_this142.mChildIndicatorLeft=0;_this142.mChildIndicatorRight=0;_this142.mChildIndicatorStart=0;_this142.mChildIndicatorEnd=0;_this142.mIndicatorRect=new Rect();_this142._attrBinder.addAttr('groupIndicator',function(value){_this142.setGroupIndicator(_this142._attrBinder.parseDrawable(value));},function(){return _this142.mGroupIndicator;});_this142._attrBinder.addAttr('childIndicator',function(value){_this142.setChildIndicator(_this142._attrBinder.parseDrawable(value));},function(){return _this142.mChildIndicator;});_this142._attrBinder.addAttr('indicatorLeft',function(value){_this142.setIndicatorBounds(_this142._attrBinder.parseNumberPixelOffset(value,0),_this142.mIndicatorRight);},function(){return _this142.mIndicatorLeft;});_this142._attrBinder.addAttr('indicatorRight',function(value){var num=_this142._attrBinder.parseNumberPixelOffset(value,0);if(num==0&&_this142.mGroupIndicator!=null){num=_this142.mIndicatorLeft+_this142.mGroupIndicator.getIntrinsicWidth();}_this142.setIndicatorBounds(_this142.mIndicatorLeft,num);},function(){return _this142.mIndicatorRight;});_this142._attrBinder.addAttr('childIndicatorLeft',function(value){_this142.setChildIndicatorBounds(_this142._attrBinder.parseNumberPixelOffset(value,ExpandableListView.CHILD_INDICATOR_INHERIT),_this142.mChildIndicatorRight);},function(){return _this142.mChildIndicatorLeft;});_this142._attrBinder.addAttr('childIndicatorRight',function(value){var num=_this142._attrBinder.parseNumberPixelOffset(value,ExpandableListView.CHILD_INDICATOR_INHERIT);if(num==0&&_this142.mChildIndicator!=null){num=_this142.mChildIndicatorLeft+_this142.mChildIndicator.getIntrinsicWidth();}_this142.setIndicatorBounds(_this142.mChildIndicatorLeft,num);},function(){return _this142.mChildIndicatorRight;});_this142._attrBinder.addAttr('childDivider',function(value){_this142.setChildDivider(_this142._attrBinder.parseDrawable(value));});if(defStyle)_this142.applyDefaultAttributes(defStyle);return _this142;}_createClass(ExpandableListView,[{key:'isRtlCompatibilityMode',value:function isRtlCompatibilityMode(){return !this.hasRtlSupport();}},{key:'hasRtlSupport',value:function hasRtlSupport(){return false;}},{key:'onRtlPropertiesChanged',value:function onRtlPropertiesChanged(layoutDirection){this.resolveIndicator();this.resolveChildIndicator();}},{key:'resolveIndicator',value:function resolveIndicator(){var isLayoutRtl=this.isLayoutRtl();if(isLayoutRtl){if(this.mIndicatorStart>=0){this.mIndicatorRight=this.mIndicatorStart;}if(this.mIndicatorEnd>=0){this.mIndicatorLeft=this.mIndicatorEnd;}}else {if(this.mIndicatorStart>=0){this.mIndicatorLeft=this.mIndicatorStart;}if(this.mIndicatorEnd>=0){this.mIndicatorRight=this.mIndicatorEnd;}}if(this.mIndicatorRight==0&&this.mGroupIndicator!=null){this.mIndicatorRight=this.mIndicatorLeft+this.mGroupIndicator.getIntrinsicWidth();}}},{key:'resolveChildIndicator',value:function resolveChildIndicator(){var isLayoutRtl=this.isLayoutRtl();if(isLayoutRtl){if(this.mChildIndicatorStart>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorRight=this.mChildIndicatorStart;}if(this.mChildIndicatorEnd>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorLeft=this.mChildIndicatorEnd;}}else {if(this.mChildIndicatorStart>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorLeft=this.mChildIndicatorStart;}if(this.mChildIndicatorEnd>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorRight=this.mChildIndicatorEnd;}}}},{key:'dispatchDraw',value:function dispatchDraw(canvas){_get2(Object.getPrototypeOf(ExpandableListView.prototype),'dispatchDraw',this).call(this,canvas);if(this.mChildIndicator==null&&this.mGroupIndicator==null){return;}var saveCount=0;var clipToPadding=(this.mGroupFlags&ExpandableListView.CLIP_TO_PADDING_MASK)==ExpandableListView.CLIP_TO_PADDING_MASK;if(clipToPadding){saveCount=canvas.save();var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);}var headerViewsCount=this.getHeaderViewsCount();var lastChildFlPos=this.mItemCount-this.getFooterViewsCount()-headerViewsCount-1;var myB=this.mBottom;var pos=undefined;var item=undefined;var indicator=undefined;var t=undefined,b=undefined;var lastItemType=~(ExpandableListPosition.CHILD|ExpandableListPosition.GROUP);var indicatorRect=this.mIndicatorRect;var childCount=this.getChildCount();for(var i=0,childFlPos=this.mFirstPosition-headerViewsCount;ilastChildFlPos){break;}item=this.getChildAt(i);t=item.getTop();b=item.getBottom();if(b<0||t>myB)continue;pos=this.mConnector.getUnflattenedPos(childFlPos);var isLayoutRtl=this.isLayoutRtl();var width=this.getWidth();if(pos.position.type!=lastItemType){if(pos.position.type==ExpandableListPosition.CHILD){indicatorRect.left=this.mChildIndicatorLeft==ExpandableListView.CHILD_INDICATOR_INHERIT?this.mIndicatorLeft:this.mChildIndicatorLeft;indicatorRect.right=this.mChildIndicatorRight==ExpandableListView.CHILD_INDICATOR_INHERIT?this.mIndicatorRight:this.mChildIndicatorRight;}else {indicatorRect.left=this.mIndicatorLeft;indicatorRect.right=this.mIndicatorRight;}if(isLayoutRtl){var temp=indicatorRect.left;indicatorRect.left=width-indicatorRect.right;indicatorRect.right=width-temp;indicatorRect.left-=this.mPaddingRight;indicatorRect.right-=this.mPaddingRight;}else {indicatorRect.left+=this.mPaddingLeft;indicatorRect.right+=this.mPaddingLeft;}lastItemType=pos.position.type;}if(indicatorRect.left!=indicatorRect.right){if(this.mStackFromBottom){indicatorRect.top=t;indicatorRect.bottom=b;}else {indicatorRect.top=t;indicatorRect.bottom=b;}indicator=this.getIndicator(pos);if(indicator!=null){indicator.setBounds(indicatorRect);indicator.draw(canvas);}}pos.recycle();}if(clipToPadding){canvas.restoreToCount(saveCount);}}},{key:'getIndicator',value:function getIndicator(pos){var indicator=undefined;if(pos.position.type==ExpandableListPosition.GROUP){indicator=this.mGroupIndicator;if(indicator!=null&&indicator.isStateful()){var isEmpty=pos.groupMetadata==null||pos.groupMetadata.lastChildFlPos==pos.groupMetadata.flPos;var stateSetIndex=(pos.isExpanded()?1:0)|(isEmpty?2:0);indicator.setState(ExpandableListView.GROUP_STATE_SETS[stateSetIndex]);}}else {indicator=this.mChildIndicator;if(indicator!=null&&indicator.isStateful()){var stateSet=pos.position.flatListPos==pos.groupMetadata.lastChildFlPos?ExpandableListView.CHILD_LAST_STATE_SET:ExpandableListView.EMPTY_STATE_SET;indicator.setState(stateSet);}}return indicator;}},{key:'setChildDivider',value:function setChildDivider(childDivider){this.mChildDivider=childDivider;}},{key:'drawDivider',value:function drawDivider(canvas,bounds,childIndex){var flatListPosition=childIndex+this.mFirstPosition;if(flatListPosition>=0){var adjustedPosition=this.getFlatPositionForConnector(flatListPosition);var pos=this.mConnector.getUnflattenedPos(adjustedPosition);if(pos.position.type==ExpandableListPosition.CHILD||pos.isExpanded()&&pos.groupMetadata.lastChildFlPos!=pos.groupMetadata.flPos){var divider=this.mChildDivider;divider.setBounds(bounds);divider.draw(canvas);pos.recycle();return;}pos.recycle();}_get2(Object.getPrototypeOf(ExpandableListView.prototype),'drawDivider',this).call(this,canvas,bounds,flatListPosition);}},{key:'setAdapter',value:function setAdapter(adapter){throw Error('new RuntimeException("For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of " + "setAdapter(ListAdapter)")');}},{key:'getAdapter',value:function getAdapter(){return _get2(Object.getPrototypeOf(ExpandableListView.prototype),'getAdapter',this).call(this);}},{key:'setOnItemClickListener',value:function setOnItemClickListener(l){_get2(Object.getPrototypeOf(ExpandableListView.prototype),'setOnItemClickListener',this).call(this,l);}},{key:'setExpandableAdapter',value:function setExpandableAdapter(adapter){this.mExpandAdapter=adapter;if(adapter!=null){this.mConnector=new ExpandableListConnector(adapter);}else {this.mConnector=null;}_get2(Object.getPrototypeOf(ExpandableListView.prototype),'setAdapter',this).call(this,this.mConnector);}},{key:'getExpandableListAdapter',value:function getExpandableListAdapter(){return this.mExpandAdapter;}},{key:'isHeaderOrFooterPosition',value:function isHeaderOrFooterPosition(position){var footerViewsStart=this.mItemCount-this.getFooterViewsCount();return position=footerViewsStart;}},{key:'getFlatPositionForConnector',value:function getFlatPositionForConnector(flatListPosition){return flatListPosition-this.getHeaderViewsCount();}},{key:'getAbsoluteFlatPosition',value:function getAbsoluteFlatPosition(flatListPosition){return flatListPosition+this.getHeaderViewsCount();}},{key:'performItemClick',value:function performItemClick(v,position,id){if(this.isHeaderOrFooterPosition(position)){return _get2(Object.getPrototypeOf(ExpandableListView.prototype),'performItemClick',this).call(this,v,position,id);}var adjustedPosition=this.getFlatPositionForConnector(position);return this.handleItemClick(v,adjustedPosition,id);}},{key:'handleItemClick',value:function handleItemClick(v,position,id){var posMetadata=this.mConnector.getUnflattenedPos(position);id=this.getChildOrGroupId(posMetadata.position);var returnValue=undefined;if(posMetadata.position.type==ExpandableListPosition.GROUP){if(this.mOnGroupClickListener!=null){if(this.mOnGroupClickListener.onGroupClick(this,v,posMetadata.position.groupPos,id)){posMetadata.recycle();return true;}}if(posMetadata.isExpanded()){this.mConnector.collapseGroupWithMeta(posMetadata);this.playSoundEffect(SoundEffectConstants.CLICK);if(this.mOnGroupCollapseListener!=null){this.mOnGroupCollapseListener.onGroupCollapse(posMetadata.position.groupPos);}}else {this.mConnector.expandGroupWithMeta(posMetadata);this.playSoundEffect(SoundEffectConstants.CLICK);if(this.mOnGroupExpandListener!=null){this.mOnGroupExpandListener.onGroupExpand(posMetadata.position.groupPos);}var groupPos=posMetadata.position.groupPos;var groupFlatPos=posMetadata.position.flatListPos;var shiftedGroupPosition=groupFlatPos+this.getHeaderViewsCount();this.smoothScrollToPosition(shiftedGroupPosition+this.mExpandAdapter.getChildrenCount(groupPos),shiftedGroupPosition);}returnValue=true;}else {if(this.mOnChildClickListener!=null){this.playSoundEffect(SoundEffectConstants.CLICK);return this.mOnChildClickListener.onChildClick(this,v,posMetadata.position.groupPos,posMetadata.position.childPos,id);}returnValue=false;}posMetadata.recycle();return returnValue;}},{key:'expandGroup',value:function expandGroup(groupPos){var animate=arguments.length<=1||arguments[1]===undefined?false:arguments[1];var elGroupPos=ExpandableListPosition.obtain(ExpandableListPosition.GROUP,groupPos,-1,-1);var pm=this.mConnector.getFlattenedPos(elGroupPos);elGroupPos.recycle();var retValue=this.mConnector.expandGroupWithMeta(pm);if(this.mOnGroupExpandListener!=null){this.mOnGroupExpandListener.onGroupExpand(groupPos);}if(animate){var groupFlatPos=pm.position.flatListPos;var shiftedGroupPosition=groupFlatPos+this.getHeaderViewsCount();this.smoothScrollToPosition(shiftedGroupPosition+this.mExpandAdapter.getChildrenCount(groupPos),shiftedGroupPosition);}pm.recycle();return retValue;}},{key:'collapseGroup',value:function collapseGroup(groupPos){var retValue=this.mConnector.collapseGroup(groupPos);if(this.mOnGroupCollapseListener!=null){this.mOnGroupCollapseListener.onGroupCollapse(groupPos);}return retValue;}},{key:'setOnGroupCollapseListener',value:function setOnGroupCollapseListener(onGroupCollapseListener){this.mOnGroupCollapseListener=onGroupCollapseListener;}},{key:'setOnGroupExpandListener',value:function setOnGroupExpandListener(onGroupExpandListener){this.mOnGroupExpandListener=onGroupExpandListener;}},{key:'setOnGroupClickListener',value:function setOnGroupClickListener(onGroupClickListener){this.mOnGroupClickListener=onGroupClickListener;}},{key:'setOnChildClickListener',value:function setOnChildClickListener(onChildClickListener){this.mOnChildClickListener=onChildClickListener;}},{key:'getExpandableListPosition',value:function getExpandableListPosition(flatListPosition){if(this.isHeaderOrFooterPosition(flatListPosition)){return ExpandableListView.PACKED_POSITION_VALUE_NULL;}var adjustedPosition=this.getFlatPositionForConnector(flatListPosition);var pm=this.mConnector.getUnflattenedPos(adjustedPosition);var packedPos=pm.position.getPackedPosition();pm.recycle();return packedPos;}},{key:'getFlatListPosition',value:function getFlatListPosition(packedPosition){var elPackedPos=ExpandableListPosition.obtainPosition(packedPosition);var pm=this.mConnector.getFlattenedPos(elPackedPos);elPackedPos.recycle();var flatListPosition=pm.position.flatListPos;pm.recycle();return this.getAbsoluteFlatPosition(flatListPosition);}},{key:'getSelectedPosition',value:function getSelectedPosition(){var selectedPos=this.getSelectedItemPosition();return this.getExpandableListPosition(selectedPos);}},{key:'getSelectedId',value:function getSelectedId(){var packedPos=this.getSelectedPosition();if(packedPos==ExpandableListView.PACKED_POSITION_VALUE_NULL)return -1;var groupPos=ExpandableListView.getPackedPositionGroup(packedPos);if(ExpandableListView.getPackedPositionType(packedPos)==ExpandableListView.PACKED_POSITION_TYPE_GROUP){return this.mExpandAdapter.getGroupId(groupPos);}else {return this.mExpandAdapter.getChildId(groupPos,ExpandableListView.getPackedPositionChild(packedPos));}}},{key:'setSelectedGroup',value:function setSelectedGroup(groupPosition){var elGroupPos=ExpandableListPosition.obtainGroupPosition(groupPosition);var pm=this.mConnector.getFlattenedPos(elGroupPos);elGroupPos.recycle();var absoluteFlatPosition=this.getAbsoluteFlatPosition(pm.position.flatListPos);_get2(Object.getPrototypeOf(ExpandableListView.prototype),'setSelection',this).call(this,absoluteFlatPosition);pm.recycle();}},{key:'setSelectedChild',value:function setSelectedChild(groupPosition,childPosition,shouldExpandGroup){var elChildPos=ExpandableListPosition.obtainChildPosition(groupPosition,childPosition);var flatChildPos=this.mConnector.getFlattenedPos(elChildPos);if(flatChildPos==null){if(!shouldExpandGroup)return false;this.expandGroup(groupPosition);flatChildPos=this.mConnector.getFlattenedPos(elChildPos);if(flatChildPos==null){throw Error('new IllegalStateException("Could not find child")');}}var absoluteFlatPosition=this.getAbsoluteFlatPosition(flatChildPos.position.flatListPos);_get2(Object.getPrototypeOf(ExpandableListView.prototype),'setSelection',this).call(this,absoluteFlatPosition);elChildPos.recycle();flatChildPos.recycle();return true;}},{key:'isGroupExpanded',value:function isGroupExpanded(groupPosition){return this.mConnector.isGroupExpanded(groupPosition);}},{key:'getChildOrGroupId',value:function getChildOrGroupId(position){if(position.type==ExpandableListPosition.CHILD){return this.mExpandAdapter.getChildId(position.groupPos,position.childPos);}else {return this.mExpandAdapter.getGroupId(position.groupPos);}}},{key:'setChildIndicator',value:function setChildIndicator(childIndicator){this.mChildIndicator=childIndicator;}},{key:'setChildIndicatorBounds',value:function setChildIndicatorBounds(left,right){this.mChildIndicatorLeft=left;this.mChildIndicatorRight=right;this.resolveChildIndicator();}},{key:'setChildIndicatorBoundsRelative',value:function setChildIndicatorBoundsRelative(start,end){this.mChildIndicatorStart=start;this.mChildIndicatorEnd=end;this.resolveChildIndicator();}},{key:'setGroupIndicator',value:function setGroupIndicator(groupIndicator){this.mGroupIndicator=groupIndicator;if(this.mIndicatorRight==0&&this.mGroupIndicator!=null){this.mIndicatorRight=this.mIndicatorLeft+this.mGroupIndicator.getIntrinsicWidth();}}},{key:'setIndicatorBounds',value:function setIndicatorBounds(left,right){this.mIndicatorLeft=left;this.mIndicatorRight=right;this.resolveIndicator();}},{key:'setIndicatorBoundsRelative',value:function setIndicatorBoundsRelative(start,end){this.mIndicatorStart=start;this.mIndicatorEnd=end;this.resolveIndicator();}}],[{key:'getPackedPositionType',value:function getPackedPositionType(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL){return ExpandableListView.PACKED_POSITION_TYPE_NULL;}return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE).equals(ExpandableListView.PACKED_POSITION_MASK_TYPE)?ExpandableListView.PACKED_POSITION_TYPE_CHILD:ExpandableListView.PACKED_POSITION_TYPE_GROUP;}},{key:'getPackedPositionGroup',value:function getPackedPositionGroup(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL)return -1;return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_GROUP).shiftRight(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();}},{key:'getPackedPositionChild',value:function getPackedPositionChild(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL)return -1;if(Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE).notEquals(ExpandableListView.PACKED_POSITION_MASK_TYPE))return -1;return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_CHILD).toNumber();}},{key:'getPackedPositionForChild',value:function getPackedPositionForChild(groupPosition,childPosition){return Long.fromInt(ExpandableListView.PACKED_POSITION_TYPE_CHILD).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_TYPE).or(Long.fromNumber(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP)).or(Long.fromNumber(childPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_CHILD)).toNumber();}},{key:'getPackedPositionForGroup',value:function getPackedPositionForGroup(groupPosition){return Long.fromInt(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();}}]);return ExpandableListView;}(ListView);ExpandableListView.PACKED_POSITION_TYPE_GROUP=0;ExpandableListView.PACKED_POSITION_TYPE_CHILD=1;ExpandableListView.PACKED_POSITION_TYPE_NULL=2;ExpandableListView.PACKED_POSITION_VALUE_NULL=0x00000000FFFFFFFF;ExpandableListView.PACKED_POSITION_MASK_CHILD=Long.fromNumber(0x00000000FFFFFFFF);ExpandableListView.PACKED_POSITION_MASK_GROUP=Long.fromNumber(0x7FFFFFFF00000000);ExpandableListView.PACKED_POSITION_MASK_TYPE=Long.fromNumber(0x8000000000000000);ExpandableListView.PACKED_POSITION_SHIFT_GROUP=32;ExpandableListView.PACKED_POSITION_SHIFT_TYPE=63;ExpandableListView.PACKED_POSITION_INT_MASK_CHILD=Long.fromNumber(0xFFFFFFFF);ExpandableListView.PACKED_POSITION_INT_MASK_GROUP=Long.fromNumber(0x7FFFFFFF);ExpandableListView.CHILD_INDICATOR_INHERIT=-1;ExpandableListView.INDICATOR_UNDEFINED=-2;ExpandableListView.GROUP_EXPANDED_STATE_SET=[View.VIEW_STATE_EXPANDED];ExpandableListView.GROUP_EMPTY_STATE_SET=[View.VIEW_STATE_EMPTY];ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET=[View.VIEW_STATE_EXPANDED,View.VIEW_STATE_EMPTY];ExpandableListView.GROUP_STATE_SETS=[ExpandableListView.EMPTY_STATE_SET,ExpandableListView.GROUP_EXPANDED_STATE_SET,ExpandableListView.GROUP_EMPTY_STATE_SET,ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET];ExpandableListView.CHILD_LAST_STATE_SET=[View.VIEW_STATE_LAST];widget.ExpandableListView=ExpandableListView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObservable=android.database.DataSetObservable;var Long=goog.math.Long;var _0x8000000000000000=Long.fromNumber(0x8000000000000000);var _0x7FFFFFFF=Long.fromNumber(0x7FFFFFFF);var _0xFFFFFFFF=Long.fromNumber(0xFFFFFFFF);var BaseExpandableListAdapter=function(){function BaseExpandableListAdapter(){_classCallCheck(this,BaseExpandableListAdapter);this.mDataSetObservable=new DataSetObservable();}_createClass(BaseExpandableListAdapter,[{key:'registerDataSetObserver',value:function registerDataSetObserver(observer){this.mDataSetObservable.registerObserver(observer);}},{key:'unregisterDataSetObserver',value:function unregisterDataSetObserver(observer){this.mDataSetObservable.unregisterObserver(observer);}},{key:'notifyDataSetInvalidated',value:function notifyDataSetInvalidated(){this.mDataSetObservable.notifyInvalidated();}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.mDataSetObservable.notifyChanged();}},{key:'areAllItemsEnabled',value:function areAllItemsEnabled(){return true;}},{key:'onGroupCollapsed',value:function onGroupCollapsed(groupPosition){}},{key:'onGroupExpanded',value:function onGroupExpanded(groupPosition){}},{key:'getCombinedChildId',value:function getCombinedChildId(groupId,childId){var _groupId=Long.fromNumber(groupId);var _childId=Long.fromNumber(childId);return _0x8000000000000000.or(_groupId.and(_0x7FFFFFFF).shiftLeft(32)).or(_childId.and(_0xFFFFFFFF)).toNumber();}},{key:'getCombinedGroupId',value:function getCombinedGroupId(groupId){var _groupId=Long.fromNumber(groupId);return _groupId.add(_0x7FFFFFFF).shiftLeft(32).toNumber();}},{key:'isEmpty',value:function isEmpty(){return this.getGroupCount()==0;}},{key:'getChildType',value:function getChildType(groupPosition,childPosition){return 0;}},{key:'getChildTypeCount',value:function getChildTypeCount(){return 1;}},{key:'getGroupType',value:function getGroupType(groupPosition){return 0;}},{key:'getGroupTypeCount',value:function getGroupTypeCount(){return 1;}}]);return BaseExpandableListAdapter;}();widget.BaseExpandableListAdapter=BaseExpandableListAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Handler=android.os.Handler;var Log=android.util.Log;var Gravity=android.view.Gravity;var WindowManager=android.view.WindowManager;var Window=android.view.Window;var Toast=function(){function Toast(context){var _this143=this;_classCallCheck(this,Toast);this.mDuration=0;this.mHandler=new Handler();this.mDelayHide=function(){var _this=_this143;return {run:function run(){_this.mTN.hide();}};}();this.mContext=context;this.mTN=new Toast.TN();this.mTN.mY=context.getResources().getDisplayMetrics().density*64;this.mTN.mGravity=Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM;}_createClass(Toast,[{key:'show',value:function show(){if(this.mNextView==null){throw Error('new RuntimeException("setView must have been called")');}var tn=this.mTN;tn.mNextView=this.mNextView;tn.show();this.mHandler.removeCallbacks(this.mDelayHide);var showDuration=this.mDuration===Toast.LENGTH_LONG?3500:this.mDuration===Toast.LENGTH_SHORT?2000:this.mDuration;this.mHandler.postDelayed(this.mDelayHide,showDuration);}},{key:'cancel',value:function cancel(){this.mTN.hide();}},{key:'setView',value:function setView(view){this.mNextView=view;}},{key:'getView',value:function getView(){return this.mNextView;}},{key:'setDuration',value:function setDuration(duration){this.mDuration=duration;}},{key:'getDuration',value:function getDuration(){return this.mDuration;}},{key:'setGravity',value:function setGravity(gravity,xOffset,yOffset){this.mTN.mGravity=gravity;this.mTN.mX=xOffset;this.mTN.mY=yOffset;}},{key:'getGravity',value:function getGravity(){return this.mTN.mGravity;}},{key:'getXOffset',value:function getXOffset(){return this.mTN.mX;}},{key:'getYOffset',value:function getYOffset(){return this.mTN.mY;}},{key:'setText',value:function setText(s){if(this.mNextView==null){throw Error('new RuntimeException("This Toast was not created with Toast.makeText()")');}var tv=this.mNextView.findViewById(android.R.id.message);if(tv==null){throw Error('new RuntimeException("This Toast was not created with Toast.makeText()")');}tv.setText(s);}}],[{key:'makeText',value:function makeText(context,text,duration){var result=new Toast(context);var inflate=context.getLayoutInflater();var v=inflate.inflate(android.R.layout.transient_notification,null);var tv=v.findViewById(android.R.id.message);tv.setMaxWidth(260*context.getResources().getDisplayMetrics().density);tv.setText(text);result.mNextView=v;result.mDuration=duration;return result;}}]);return Toast;}();Toast.TAG="Toast";Toast.localLOGV=false;Toast.LENGTH_SHORT=0;Toast.LENGTH_LONG=1;widget.Toast=Toast;(function(Toast){var TN=function(){function TN(){var _this144=this;_classCallCheck(this,TN);this.mShow=function(){var _this=_this144;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.handleShow();}}]);return _Inner;}();return new _Inner();}();this.mHide=function(){var _this=_this144;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.handleHide();_this.mNextView=null;}}]);return _Inner;}();return new _Inner();}();this.mHandler=new Handler();this.mGravity=0;this.mX=0;this.mY=0;}_createClass(TN,[{key:'show',value:function show(){if(Toast.localLOGV)Log.v(Toast.TAG,"SHOW: "+this);this.mHandler.post(this.mShow);}},{key:'hide',value:function hide(){if(Toast.localLOGV)Log.v(Toast.TAG,"HIDE: "+this);this.mHandler.post(this.mHide);}},{key:'handleShow',value:function handleShow(){if(Toast.localLOGV)Log.v(Toast.TAG,"HANDLE SHOW: "+this+" mView="+this.mView+" mNextView="+this.mNextView);if(this.mView!=this.mNextView){this.handleHide();this.mView=this.mNextView;if(!this.mWindow){this.mWindow=new Window(this.mView.getContext().getApplicationContext());var _params7=this.mWindow.getAttributes();_params7.height=WindowManager.LayoutParams.WRAP_CONTENT;_params7.width=WindowManager.LayoutParams.WRAP_CONTENT;_params7.dimAmount=0;_params7.type=WindowManager.LayoutParams.TYPE_TOAST;_params7.setTitle("Toast");_params7.leftMargin=_params7.rightMargin=36*this.mView.getContext().getResources().getDisplayMetrics().density;_params7.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;this.mWindow.setFloating(true);this.mWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);this.mWindow.setWindowAnimations(android.R.anim.toast_enter,android.R.anim.toast_exit,null,null);}var params=this.mWindow.getAttributes();this.mWindow.setContentView(this.mView);var context=this.mView.getContext().getApplicationContext();this.mWM=context.getWindowManager();var gravity=Gravity.getAbsoluteGravity(this.mGravity);params.gravity=gravity;params.x=this.mX;params.y=this.mY;if(this.mWindow.getDecorView().getParent()!=null){if(Toast.localLOGV)Log.v(Toast.TAG,"REMOVE! "+this.mView+" in "+this);this.mWM.removeWindow(this.mWindow);}if(Toast.localLOGV)Log.v(Toast.TAG,"ADD! "+this.mView+" in "+this);this.mWM.addWindow(this.mWindow);}}},{key:'handleHide',value:function handleHide(){if(Toast.localLOGV)Log.v(Toast.TAG,"HANDLE HIDE: "+this+" mView="+this.mView);if(this.mView!=null){if(this.mView.getParent()!=null){if(Toast.localLOGV)Log.v(Toast.TAG,"REMOVE! "+this.mView+" in "+this);this.mWM.removeWindow(this.mWindow);}this.mView=null;}}}]);return TN;}();Toast.TN=TN;})(Toast=widget.Toast||(widget.Toast={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var content;(function(content){var DialogInterface;(function(DialogInterface){DialogInterface.BUTTON_POSITIVE=-1;DialogInterface.BUTTON_NEGATIVE=-2;DialogInterface.BUTTON_NEUTRAL=-3;DialogInterface.BUTTON1=DialogInterface.BUTTON_POSITIVE;DialogInterface.BUTTON2=DialogInterface.BUTTON_NEGATIVE;DialogInterface.BUTTON3=DialogInterface.BUTTON_NEUTRAL;})(DialogInterface=content.DialogInterface||(content.DialogInterface={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var app;(function(app){var Handler=android.os.Handler;var Message=android.os.Message;var Log=android.util.Log;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Window=android.view.Window;var WindowManager=android.view.WindowManager;var WeakReference=java.lang.ref.WeakReference;var Dialog=function(){function Dialog(context,cancelable,cancelListener){var _this145=this;_classCallCheck(this,Dialog);this.mCancelable=true;this.mCreated=false;this.mShowing=false;this.mCanceled=false;this.mHandler=new Handler();this.mDismissAction=function(){var _this=_this145;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){_this.dismissDialog();}}]);return _Inner;}();return new _Inner();}();this.mContext=context;this.mWindowManager=context.getWindowManager();var w=new Window(context);w.setFloating(true);w.setDimAmount(0.7);w.setBackgroundColor(android.graphics.Color.TRANSPARENT);this.mWindow=w;var dm=context.getResources().getDisplayMetrics();var decor=w.getDecorView();decor.setMinimumWidth(dm.density*280);decor.setMinimumHeight(dm.density*20);var onMeasure=decor.onMeasure;decor.onMeasure=function(widthMeasureSpec,heightMeasureSpec){onMeasure.call(decor,widthMeasureSpec,heightMeasureSpec);var width=decor.getMeasuredWidth();if(width>360*dm.density){var widthSpec=View.MeasureSpec.makeMeasureSpec(360*dm.density,View.MeasureSpec.EXACTLY);onMeasure.call(decor,widthSpec,heightMeasureSpec);}};var wp=w.getAttributes();wp.flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;wp.height=wp.width=ViewGroup.LayoutParams.WRAP_CONTENT;wp.leftMargin=wp.rightMargin=wp.topMargin=wp.bottomMargin=dm.density*16;w.setWindowAnimations(android.R.anim.dialog_enter,android.R.anim.dialog_exit,null,null);w.setChildWindowManager(this.mWindowManager);w.setGravity(Gravity.CENTER);w.setCallback(this);this.mListenersHandler=new Dialog.ListenersHandler(this);this.mCancelable=cancelable;this.setOnCancelListener(cancelListener);}_createClass(Dialog,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'isShowing',value:function isShowing(){return this.mShowing;}},{key:'show',value:function show(){if(this.mShowing){if(this.mDecor!=null){this.mDecor.setVisibility(View.VISIBLE);}return;}this.mCanceled=false;if(!this.mCreated){this.dispatchOnCreate(null);}this.onStart();this.mDecor=this.mWindow.getDecorView();try{this.mWindowManager.addWindow(this.mWindow);this.mShowing=true;this.sendShowMessage();}finally {}}},{key:'hide',value:function hide(){if(this.mDecor!=null){this.mDecor.setVisibility(View.GONE);}}},{key:'dismiss',value:function dismiss(){this.dismissDialog();}},{key:'dismissDialog',value:function dismissDialog(){if(this.mDecor==null||!this.mShowing){return;}if(this.mWindow.isDestroyed()){Log.e(Dialog.TAG,"Tried to dismissDialog() but the Dialog's window was already destroyed!");return;}try{this.mWindowManager.removeWindow(this.mWindow);}finally {this.mDecor=null;this.onStop();this.mShowing=false;this.sendDismissMessage();}}},{key:'sendDismissMessage',value:function sendDismissMessage(){if(this.mDismissMessage!=null){Message.obtain(this.mDismissMessage).sendToTarget();}}},{key:'sendShowMessage',value:function sendShowMessage(){if(this.mShowMessage!=null){Message.obtain(this.mShowMessage).sendToTarget();}}},{key:'dispatchOnCreate',value:function dispatchOnCreate(savedInstanceState){if(!this.mCreated){this.onCreate(savedInstanceState);this.mCreated=true;}}},{key:'onCreate',value:function onCreate(savedInstanceState){}},{key:'onStart',value:function onStart(){}},{key:'onStop',value:function onStop(){}},{key:'getWindow',value:function getWindow(){return this.mWindow;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mWindow!=null?this.mWindow.getCurrentFocus():null;}},{key:'findViewById',value:function findViewById(id){return this.mWindow.findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){this.mWindow.setContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){this.mWindow.addContentView(view,params);}},{key:'setTitle',value:function setTitle(title){this.mWindow.setTitle(title);this.mWindow.getAttributes().setTitle(title);}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK){event.startTracking();return true;}return false;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&event.isTracking()&&!event.isCanceled()){this.onBackPressed();return true;}return false;}},{key:'onKeyMultiple',value:function onKeyMultiple(keyCode,repeatCount,event){return false;}},{key:'onBackPressed',value:function onBackPressed(){if(this.mCancelable){this.cancel();}}},{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mCancelable&&this.mShowing&&this.mWindow.shouldCloseOnTouch(this.mContext,event)){this.cancel();return true;}return false;}},{key:'onTrackballEvent',value:function onTrackballEvent(event){return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){if(this.mDecor!=null){this.mWindowManager.updateWindowLayout(this.mWindow,params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){if(this.mOnKeyListener!=null&&this.mOnKeyListener.onKey(this,event.getKeyCode(),event)){return true;}if(this.mWindow.superDispatchKeyEvent(event)){return true;}return event.dispatch(this,this.mDecor!=null?this.mDecor.getKeyDispatcherState():null,this);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(this.mWindow.superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){if(this.mWindow.superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}},{key:'takeKeyEvents',value:function takeKeyEvents(get){this.mWindow.takeKeyEvents(get);}},{key:'getLayoutInflater',value:function getLayoutInflater(){return this.getWindow().getLayoutInflater();}},{key:'setCancelable',value:function setCancelable(flag){this.mCancelable=flag;}},{key:'setCanceledOnTouchOutside',value:function setCanceledOnTouchOutside(cancel){if(cancel&&!this.mCancelable){this.mCancelable=true;}this.mWindow.setCloseOnTouchOutside(cancel);}},{key:'cancel',value:function cancel(){if(!this.mCanceled&&this.mCancelMessage!=null){this.mCanceled=true;Message.obtain(this.mCancelMessage).sendToTarget();}this.dismiss();}},{key:'setOnCancelListener',value:function setOnCancelListener(listener){if(this.mCancelAndDismissTaken!=null){throw Error('new IllegalStateException("OnCancelListener is already taken by " + this.mCancelAndDismissTaken + " and can not be replaced.")');}if(listener!=null){this.mCancelMessage=this.mListenersHandler.obtainMessage(Dialog.CANCEL,listener);}else {this.mCancelMessage=null;}}},{key:'setCancelMessage',value:function setCancelMessage(msg){this.mCancelMessage=msg;}},{key:'setOnDismissListener',value:function setOnDismissListener(listener){if(this.mCancelAndDismissTaken!=null){throw Error('new IllegalStateException("OnDismissListener is already taken by " + this.mCancelAndDismissTaken + " and can not be replaced.")');}if(listener!=null){this.mDismissMessage=this.mListenersHandler.obtainMessage(Dialog.DISMISS,listener);}else {this.mDismissMessage=null;}}},{key:'setOnShowListener',value:function setOnShowListener(listener){if(listener!=null){this.mShowMessage=this.mListenersHandler.obtainMessage(Dialog.SHOW,listener);}else {this.mShowMessage=null;}}},{key:'setDismissMessage',value:function setDismissMessage(msg){this.mDismissMessage=msg;}},{key:'takeCancelAndDismissListeners',value:function takeCancelAndDismissListeners(msg,cancel,dismiss){if(this.mCancelAndDismissTaken!=null){this.mCancelAndDismissTaken=null;}else if(this.mCancelMessage!=null||this.mDismissMessage!=null){return false;}this.setOnCancelListener(cancel);this.setOnDismissListener(dismiss);this.mCancelAndDismissTaken=msg;return true;}},{key:'setOnKeyListener',value:function setOnKeyListener(onKeyListener){this.mOnKeyListener=onKeyListener;}}]);return Dialog;}();Dialog.TAG="Dialog";Dialog.DISMISS=0x43;Dialog.CANCEL=0x44;Dialog.SHOW=0x45;Dialog.DIALOG_SHOWING_TAG="android:dialogShowing";Dialog.DIALOG_HIERARCHY_TAG="android:dialogHierarchy";app.Dialog=Dialog;(function(Dialog){var ListenersHandler=function(_Handler4){_inherits(ListenersHandler,_Handler4);function ListenersHandler(dialog){_classCallCheck(this,ListenersHandler);var _this146=_possibleConstructorReturn(this,Object.getPrototypeOf(ListenersHandler).call(this));_this146.mDialog=new WeakReference(dialog);return _this146;}_createClass(ListenersHandler,[{key:'handleMessage',value:function handleMessage(msg){switch(msg.what){case Dialog.DISMISS:msg.obj.onDismiss(this.mDialog.get());break;case Dialog.CANCEL:msg.obj.onCancel(this.mDialog.get());break;case Dialog.SHOW:msg.obj.onShow(this.mDialog.get());break;}}}]);return ListenersHandler;}(Handler);Dialog.ListenersHandler=ListenersHandler;})(Dialog=app.Dialog||(app.Dialog={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Log=android.util.Log;var Arrays=java.util.Arrays;var Collections=java.util.Collections;var BaseAdapter=android.widget.BaseAdapter;var ArrayAdapter=function(_BaseAdapter2){_inherits(ArrayAdapter,_BaseAdapter2);function ArrayAdapter(context,resource,textViewResourceId,objects){_classCallCheck(this,ArrayAdapter);var _this147=_possibleConstructorReturn(this,Object.getPrototypeOf(ArrayAdapter).call(this));_this147.mNotifyOnChange=true;_this147.init(context,resource,textViewResourceId,objects);return _this147;}_createClass(ArrayAdapter,[{key:'add',value:function add(object){{this.mObjects.add(object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'addAll',value:function addAll(collection){{this.mObjects.addAll(collection);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'insert',value:function insert(object,index){{this.mObjects.add(index,object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'remove',value:function remove(object){{this.mObjects.remove(object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'clear',value:function clear(){{this.mObjects.clear();}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'sort',value:function sort(comparator){{Collections.sort(this.mObjects,comparator);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){_get2(Object.getPrototypeOf(ArrayAdapter.prototype),'notifyDataSetChanged',this).call(this);this.mNotifyOnChange=true;}},{key:'setNotifyOnChange',value:function setNotifyOnChange(notifyOnChange){this.mNotifyOnChange=notifyOnChange;}},{key:'init',value:function init(context,resource,textViewResourceId,objects){this.mContext=context;this.mInflater=context.getLayoutInflater();this.mResource=this.mDropDownResource=resource;if(objects instanceof Array)objects=Arrays.asList(objects);this.mObjects=objects;this.mFieldId=textViewResourceId;}},{key:'getContext',value:function getContext(){return this.mContext;}},{key:'getCount',value:function getCount(){return this.mObjects.size();}},{key:'getItem',value:function getItem(position){return this.mObjects.get(position);}},{key:'getPosition',value:function getPosition(item){return this.mObjects.indexOf(item);}},{key:'getItemId',value:function getItemId(position){return position;}},{key:'getView',value:function getView(position,convertView,parent){return this.createViewFromResource(position,convertView,parent,this.mResource);}},{key:'createViewFromResource',value:function createViewFromResource(position,convertView,parent,resource){var view=undefined;var text=undefined;if(convertView==null){view=this.mInflater.inflate(this.mContext.getResources().getLayout(resource),parent,false);}else {view=convertView;}try{if(this.mFieldId==null){text=view;}else {text=view.findViewById(this.mFieldId);}}catch(e){Log.e("ArrayAdapter","You must supply a resource ID for a TextView");throw Error('new IllegalStateException("ArrayAdapter requires the resource ID to be a TextView", e)');}var item=this.getItem(position);if(typeof item==='string'){text.setText(item);}else {text.setText(item.toString());}return view;}},{key:'setDropDownViewResource',value:function setDropDownViewResource(resource){this.mDropDownResource=resource;}},{key:'getDropDownView',value:function getDropDownView(position,convertView,parent){return this.createViewFromResource(position,convertView,parent,this.mDropDownResource);}}]);return ArrayAdapter;}(BaseAdapter);widget.ArrayAdapter=ArrayAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var app;(function(app){var MATCH_PARENT=android.view.ViewGroup.LayoutParams.MATCH_PARENT;var R=android.R;var DialogInterface=android.content.DialogInterface;var Handler=android.os.Handler;var Message=android.os.Message;var TextUtils=android.text.TextUtils;var Gravity=android.view.Gravity;var View=android.view.View;var LayoutParams=android.view.ViewGroup.LayoutParams;var ArrayAdapter=android.widget.ArrayAdapter;var LinearLayout=android.widget.LinearLayout;var ListView=android.widget.ListView;var WeakReference=java.lang.ref.WeakReference;var AlertController=function(){function AlertController(context,di,window){var _this148=this;_classCallCheck(this,AlertController);this.mViewSpacingLeft=0;this.mViewSpacingTop=0;this.mViewSpacingRight=0;this.mViewSpacingBottom=0;this.mViewSpacingSpecified=false;this.mCheckedItem=-1;this.mButtonHandler=function(){var _this=_this148;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onClick',value:function onClick(v){var m=null;if(v==_this.mButtonPositive&&_this.mButtonPositiveMessage!=null){m=Message.obtain(_this.mButtonPositiveMessage);}else if(v==_this.mButtonNegative&&_this.mButtonNegativeMessage!=null){m=Message.obtain(_this.mButtonNegativeMessage);}else if(v==_this.mButtonNeutral&&_this.mButtonNeutralMessage!=null){m=Message.obtain(_this.mButtonNeutralMessage);}if(m!=null){m.sendToTarget();}_this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG,_this.mDialogInterface).sendToTarget();}}]);return _Inner;}();return new _Inner();}();this.mContext=context;this.mDialogInterface=di;this.mWindow=window;this.mHandler=new AlertController.ButtonHandler(di);this.mAlertDialogLayout=R.layout.alert_dialog;this.mListLayout=R.layout.select_dialog;this.mMultiChoiceItemLayout=R.layout.select_dialog_multichoice;this.mSingleChoiceItemLayout=R.layout.select_dialog_singlechoice;this.mListItemLayout=R.layout.select_dialog_item;}_createClass(AlertController,[{key:'installContent',value:function installContent(){var layout=this.mContext.getLayoutInflater().inflate(this.mAlertDialogLayout,this.mWindow.getContentParent(),false);this.mWindow.setContentView(layout);this.setupView();}},{key:'setTitle',value:function setTitle(title){this.mTitle=title;if(this.mTitleView!=null){this.mTitleView.setText(title);}}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.mCustomTitleView=customTitleView;}},{key:'setMessage',value:function setMessage(message){this.mMessage=message;if(this.mMessageView!=null){this.mMessageView.setText(message);}}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var viewSpacingTop=arguments.length<=2||arguments[2]===undefined?0:arguments[2];var viewSpacingRight=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var viewSpacingBottom=arguments.length<=4||arguments[4]===undefined?0:arguments[4];this.mView=view;if(!viewSpacingLeft&&!viewSpacingTop&&!viewSpacingRight&&!viewSpacingBottom){this.mViewSpacingSpecified=false;}else {this.mViewSpacingSpecified=true;this.mViewSpacingLeft=viewSpacingLeft;this.mViewSpacingTop=viewSpacingTop;this.mViewSpacingRight=viewSpacingRight;this.mViewSpacingBottom=viewSpacingBottom;}}},{key:'setButton',value:function setButton(whichButton,text,listener,msg){if(msg==null&&listener!=null){msg=this.mHandler.obtainMessage(whichButton,listener);}switch(whichButton){case DialogInterface.BUTTON_POSITIVE:this.mButtonPositiveText=text;this.mButtonPositiveMessage=msg;break;case DialogInterface.BUTTON_NEGATIVE:this.mButtonNegativeText=text;this.mButtonNegativeMessage=msg;break;case DialogInterface.BUTTON_NEUTRAL:this.mButtonNeutralText=text;this.mButtonNeutralMessage=msg;break;default:throw Error('new IllegalArgumentException("Button does not exist")');}}},{key:'setIcon',value:function setIcon(icon){this.mIcon=icon;if(this.mIconView!=null&&this.mIcon!=null){this.mIconView.setImageDrawable(icon);}}},{key:'setInverseBackgroundForced',value:function setInverseBackgroundForced(forceInverseBackground){this.mForceInverseBackground=forceInverseBackground;}},{key:'getListView',value:function getListView(){return this.mListView;}},{key:'getButton',value:function getButton(whichButton){switch(whichButton){case DialogInterface.BUTTON_POSITIVE:return this.mButtonPositive;case DialogInterface.BUTTON_NEGATIVE:return this.mButtonNegative;case DialogInterface.BUTTON_NEUTRAL:return this.mButtonNeutral;default:return null;}}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return this.mScrollView!=null&&this.mScrollView.executeKeyEvent(event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return this.mScrollView!=null&&this.mScrollView.executeKeyEvent(event);}},{key:'setupView',value:function setupView(){var contentPanel=this.mWindow.findViewById(R.id.contentPanel);this.setupContent(contentPanel);var hasButtons=this.setupButtons();var topPanel=this.mWindow.findViewById(R.id.topPanel);var hasTitle=this.setupTitle(topPanel);var buttonPanel=this.mWindow.findViewById(R.id.buttonPanel);if(!hasButtons){buttonPanel.setVisibility(View.GONE);this.mWindow.setCloseOnTouchOutsideIfNotSet(true);}var customPanel=null;if(this.mView!=null){customPanel=this.mWindow.findViewById(R.id.customPanel);var custom=this.mWindow.findViewById(R.id.custom);custom.addView(this.mView,new LayoutParams(MATCH_PARENT,MATCH_PARENT));if(this.mViewSpacingSpecified){custom.setPadding(this.mViewSpacingLeft,this.mViewSpacingTop,this.mViewSpacingRight,this.mViewSpacingBottom);}if(this.mListView!=null){customPanel.getLayoutParams().weight=0;}}else {this.mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);}if(hasTitle){var divider=null;if(this.mMessage!=null||this.mView!=null||this.mListView!=null){divider=this.mWindow.findViewById(R.id.titleDivider);}else {divider=this.mWindow.findViewById(R.id.titleDividerTop);}if(divider!=null){divider.setVisibility(View.VISIBLE);}}this.setBackground(topPanel,contentPanel,customPanel,hasButtons,hasTitle,buttonPanel);}},{key:'setupTitle',value:function setupTitle(topPanel){var hasTitle=true;if(this.mCustomTitleView!=null){var lp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);topPanel.addView(this.mCustomTitleView,0,lp);var titleTemplate=this.mWindow.findViewById(R.id.title_template);titleTemplate.setVisibility(View.GONE);}else {var hasTextTitle=!TextUtils.isEmpty(this.mTitle);this.mIconView=this.mWindow.findViewById(R.id.icon);if(hasTextTitle){this.mTitleView=this.mWindow.findViewById(R.id.alertTitle);this.mTitleView.setText(this.mTitle);if(this.mIcon!=null){this.mIconView.setImageDrawable(this.mIcon);}else {this.mTitleView.setPadding(this.mIconView.getPaddingLeft(),this.mIconView.getPaddingTop(),this.mIconView.getPaddingRight(),this.mIconView.getPaddingBottom());this.mIconView.setVisibility(View.GONE);}}else {var _titleTemplate=this.mWindow.findViewById(R.id.title_template);_titleTemplate.setVisibility(View.GONE);this.mIconView.setVisibility(View.GONE);topPanel.setVisibility(View.GONE);hasTitle=false;}}return hasTitle;}},{key:'setupContent',value:function setupContent(contentPanel){this.mScrollView=this.mWindow.findViewById(R.id.scrollView);this.mScrollView.setFocusable(false);this.mMessageView=this.mWindow.findViewById(R.id.message);if(this.mMessageView==null){return;}if(this.mMessage!=null){this.mMessageView.setText(this.mMessage);}else {this.mMessageView.setVisibility(View.GONE);this.mScrollView.removeView(this.mMessageView);if(this.mListView!=null){contentPanel.removeView(this.mWindow.findViewById(R.id.scrollView));contentPanel.addView(this.mListView,new LinearLayout.LayoutParams(MATCH_PARENT,MATCH_PARENT));contentPanel.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT,0,1.0));}else {contentPanel.setVisibility(View.GONE);}}}},{key:'setupButtons',value:function setupButtons(){var BIT_BUTTON_POSITIVE=1;var BIT_BUTTON_NEGATIVE=2;var BIT_BUTTON_NEUTRAL=4;var whichButtons=0;this.mButtonPositive=this.mWindow.findViewById(R.id.button1);this.mButtonPositive.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonPositiveText)){this.mButtonPositive.setVisibility(View.GONE);}else {this.mButtonPositive.setText(this.mButtonPositiveText);this.mButtonPositive.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_POSITIVE;}this.mButtonNegative=this.mWindow.findViewById(R.id.button2);this.mButtonNegative.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonNegativeText)){this.mButtonNegative.setVisibility(View.GONE);}else {this.mButtonNegative.setText(this.mButtonNegativeText);this.mButtonNegative.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_NEGATIVE;}this.mButtonNeutral=this.mWindow.findViewById(R.id.button3);this.mButtonNeutral.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonNeutralText)){this.mButtonNeutral.setVisibility(View.GONE);}else {this.mButtonNeutral.setText(this.mButtonNeutralText);this.mButtonNeutral.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_NEUTRAL;}if(AlertController.shouldCenterSingleButton(this.mContext)){if(whichButtons==BIT_BUTTON_POSITIVE){this.centerButton(this.mButtonPositive);}else if(whichButtons==BIT_BUTTON_NEGATIVE){this.centerButton(this.mButtonNegative);}else if(whichButtons==BIT_BUTTON_NEUTRAL){this.centerButton(this.mButtonNeutral);}}return whichButtons!=0;}},{key:'centerButton',value:function centerButton(button){var params=button.getLayoutParams();params.gravity=Gravity.CENTER_HORIZONTAL;params.weight=0.5;button.setLayoutParams(params);var leftSpacer=this.mWindow.findViewById(R.id.leftSpacer);if(leftSpacer!=null){leftSpacer.setVisibility(View.VISIBLE);}var rightSpacer=this.mWindow.findViewById(R.id.rightSpacer);if(rightSpacer!=null){rightSpacer.setVisibility(View.VISIBLE);}}},{key:'setBackground',value:function setBackground(topPanel,contentPanel,customPanel,hasButtons,hasTitle,buttonPanel){var fullDark=R.image.popup_full_bright;var topDark=R.image.popup_top_bright;var centerDark=R.image.popup_center_bright;var bottomDark=R.image.popup_bottom_bright;var fullBright=R.image.popup_full_bright;var topBright=R.image.popup_top_bright;var centerBright=R.image.popup_center_bright;var bottomBright=R.image.popup_bottom_bright;var bottomMedium=R.image.popup_bottom_bright;var views=new Array(4);var light=new Array(4);var lastView=null;var lastLight=false;var pos=0;if(hasTitle){views[pos]=topPanel;light[pos]=false;pos++;}views[pos]=contentPanel.getVisibility()==View.GONE?null:contentPanel;light[pos]=this.mListView!=null;pos++;if(customPanel!=null){views[pos]=customPanel;light[pos]=this.mForceInverseBackground;pos++;}if(hasButtons){views[pos]=buttonPanel;light[pos]=true;}var setView=false;for(pos=0;pos-1){this.mListView.setItemChecked(this.mCheckedItem,true);this.mListView.setSelection(this.mCheckedItem);}}}}],[{key:'shouldCenterSingleButton',value:function shouldCenterSingleButton(context){return true;}}]);return AlertController;}();app.AlertController=AlertController;(function(AlertController){var ButtonHandler=function(_Handler5){_inherits(ButtonHandler,_Handler5);function ButtonHandler(dialog){_classCallCheck(this,ButtonHandler);var _this149=_possibleConstructorReturn(this,Object.getPrototypeOf(ButtonHandler).call(this));_this149.mDialog=new WeakReference(dialog);return _this149;}_createClass(ButtonHandler,[{key:'handleMessage',value:function handleMessage(msg){switch(msg.what){case DialogInterface.BUTTON_POSITIVE:case DialogInterface.BUTTON_NEGATIVE:case DialogInterface.BUTTON_NEUTRAL:msg.obj.onClick(this.mDialog.get(),msg.what);break;case ButtonHandler.MSG_DISMISS_DIALOG:msg.obj.dismiss();}}}]);return ButtonHandler;}(Handler);ButtonHandler.MSG_DISMISS_DIALOG=1;AlertController.ButtonHandler=ButtonHandler;var RecycleListView=function(_ListView2){_inherits(RecycleListView,_ListView2);function RecycleListView(context,bindElement,defStyle){_classCallCheck(this,RecycleListView);var _this150=_possibleConstructorReturn(this,Object.getPrototypeOf(RecycleListView).call(this,context,bindElement,defStyle));_this150.mRecycleOnMeasure=true;return _this150;}_createClass(RecycleListView,[{key:'recycleOnMeasure',value:function recycleOnMeasure(){return this.mRecycleOnMeasure;}}]);return RecycleListView;}(ListView);AlertController.RecycleListView=RecycleListView;var AlertParams=function(){function AlertParams(context){_classCallCheck(this,AlertParams);this.mIconId=0;this.mViewSpacingLeft=0;this.mViewSpacingTop=0;this.mViewSpacingRight=0;this.mViewSpacingBottom=0;this.mViewSpacingSpecified=false;this.mCheckedItem=-1;this.mRecycleOnMeasure=true;this.mContext=context;this.mCancelable=true;this.mInflater=context.getLayoutInflater();}_createClass(AlertParams,[{key:'apply',value:function apply(dialog){if(this.mCustomTitleView!=null){dialog.setCustomTitle(this.mCustomTitleView);}else {if(this.mTitle!=null){dialog.setTitle(this.mTitle);}if(this.mIcon!=null){dialog.setIcon(this.mIcon);}}if(this.mMessage!=null){dialog.setMessage(this.mMessage);}if(this.mPositiveButtonText!=null){dialog.setButton(DialogInterface.BUTTON_POSITIVE,this.mPositiveButtonText,this.mPositiveButtonListener,null);}if(this.mNegativeButtonText!=null){dialog.setButton(DialogInterface.BUTTON_NEGATIVE,this.mNegativeButtonText,this.mNegativeButtonListener,null);}if(this.mNeutralButtonText!=null){dialog.setButton(DialogInterface.BUTTON_NEUTRAL,this.mNeutralButtonText,this.mNeutralButtonListener,null);}if(this.mForceInverseBackground){dialog.setInverseBackgroundForced(true);}if(this.mItems!=null||this.mAdapter!=null){this.createListView(dialog);}if(this.mView!=null){if(this.mViewSpacingSpecified){dialog.setView(this.mView,this.mViewSpacingLeft,this.mViewSpacingTop,this.mViewSpacingRight,this.mViewSpacingBottom);}else {dialog.setView(this.mView);}}}},{key:'createListView',value:function createListView(dialog){var _this151=this;var listView=this.mInflater.inflate(dialog.mListLayout,null);var adapter=undefined;if(this.mIsMultiChoice){adapter=function(){var _this=_this151;var _Inner=function(_ArrayAdapter){_inherits(_Inner,_ArrayAdapter);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,Object.getPrototypeOf(_Inner).apply(this,arguments));}_createClass(_Inner,[{key:'getView',value:function getView(position,convertView,parent){var view=_get2(Object.getPrototypeOf(_Inner.prototype),'getView',this).call(this,position,convertView,parent);if(_this.mCheckedItems!=null){var isItemChecked=_this.mCheckedItems[position];if(isItemChecked){listView.setItemChecked(position,true);}}return view;}}]);return _Inner;}(ArrayAdapter);return new _Inner(_this151.mContext,dialog.mMultiChoiceItemLayout,R.id.text1,_this151.mItems);}();}else {var layout=this.mIsSingleChoice?dialog.mSingleChoiceItemLayout:dialog.mListItemLayout;adapter=this.mAdapter!=null?this.mAdapter:new ArrayAdapter(this.mContext,layout,R.id.text1,this.mItems);}if(this.mOnPrepareListViewListener!=null){this.mOnPrepareListViewListener.onPrepareListView(listView);}dialog.mAdapter=adapter;dialog.mCheckedItem=this.mCheckedItem;var _this=this;if(this.mOnClickListener!=null){listView.setOnItemClickListener({onItemClick:function onItemClick(parent,v,position,id){_this.mOnClickListener.onClick(dialog.mDialogInterface,position);if(!_this.mIsSingleChoice){dialog.mDialogInterface.dismiss();}}});}else if(this.mOnCheckboxClickListener!=null){listView.setOnItemClickListener({onItemClick:function onItemClick(parent,v,position,id){if(_this.mCheckedItems!=null){_this.mCheckedItems[position]=listView.isItemChecked(position);}_this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface,position,listView.isItemChecked(position));}});}if(this.mOnItemSelectedListener!=null){listView.setOnItemSelectedListener(this.mOnItemSelectedListener);}if(this.mIsSingleChoice){listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);}else if(this.mIsMultiChoice){listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);}listView.mRecycleOnMeasure=this.mRecycleOnMeasure;dialog.mListView=listView;}}]);return AlertParams;}();AlertController.AlertParams=AlertParams;})(AlertController=app.AlertController||(app.AlertController={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var app;(function(app){var Dialog=android.app.Dialog;var AlertDialog=function(_Dialog){_inherits(AlertDialog,_Dialog);function AlertDialog(context,cancelable,cancelListener){_classCallCheck(this,AlertDialog);var _this153=_possibleConstructorReturn(this,Object.getPrototypeOf(AlertDialog).call(this,context));_this153.setCancelable(cancelable);_this153.setOnCancelListener(cancelListener);_this153.mAlert=new app.AlertController(context,_this153,_this153.getWindow());return _this153;}_createClass(AlertDialog,[{key:'getButton',value:function getButton(whichButton){return this.mAlert.getButton(whichButton);}},{key:'getListView',value:function getListView(){return this.mAlert.getListView();}},{key:'setTitle',value:function setTitle(title){_get2(Object.getPrototypeOf(AlertDialog.prototype),'setTitle',this).call(this,title);this.mAlert.setTitle(title);}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.mAlert.setCustomTitle(customTitleView);}},{key:'setMessage',value:function setMessage(message){this.mAlert.setMessage(message);}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var viewSpacingTop=arguments.length<=2||arguments[2]===undefined?0:arguments[2];var viewSpacingRight=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var viewSpacingBottom=arguments.length<=4||arguments[4]===undefined?0:arguments[4];this.mAlert.setView(view,viewSpacingLeft,viewSpacingTop,viewSpacingRight,viewSpacingBottom);}},{key:'setButton',value:function setButton(whichButton,text,listener){this.mAlert.setButton(whichButton,text,listener,null);}},{key:'setIcon',value:function setIcon(icon){this.mAlert.setIcon(icon);}},{key:'onCreate',value:function onCreate(savedInstanceState){_get2(Object.getPrototypeOf(AlertDialog.prototype),'onCreate',this).call(this,savedInstanceState);this.mAlert.installContent();}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.mAlert.onKeyDown(keyCode,event))return true;return _get2(Object.getPrototypeOf(AlertDialog.prototype),'onKeyDown',this).call(this,keyCode,event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(this.mAlert.onKeyUp(keyCode,event))return true;return _get2(Object.getPrototypeOf(AlertDialog.prototype),'onKeyUp',this).call(this,keyCode,event);}}]);return AlertDialog;}(Dialog);AlertDialog.THEME_TRADITIONAL=1;AlertDialog.THEME_HOLO_DARK=2;AlertDialog.THEME_HOLO_LIGHT=3;AlertDialog.THEME_DEVICE_DEFAULT_DARK=4;AlertDialog.THEME_DEVICE_DEFAULT_LIGHT=5;app.AlertDialog=AlertDialog;(function(AlertDialog){var Builder=function(){function Builder(context){_classCallCheck(this,Builder);this.P=new app.AlertController.AlertParams(context);}_createClass(Builder,[{key:'getContext',value:function getContext(){return this.P.mContext;}},{key:'setTitle',value:function setTitle(title){this.P.mTitle=title;return this;}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.P.mCustomTitleView=customTitleView;return this;}},{key:'setMessage',value:function setMessage(message){this.P.mMessage=message;return this;}},{key:'setIcon',value:function setIcon(icon){this.P.mIcon=icon;return this;}},{key:'setPositiveButton',value:function setPositiveButton(text,listener){this.P.mPositiveButtonText=text;this.P.mPositiveButtonListener=listener;return this;}},{key:'setNegativeButton',value:function setNegativeButton(text,listener){this.P.mNegativeButtonText=text;this.P.mNegativeButtonListener=listener;return this;}},{key:'setNeutralButton',value:function setNeutralButton(text,listener){this.P.mNeutralButtonText=text;this.P.mNeutralButtonListener=listener;return this;}},{key:'setCancelable',value:function setCancelable(cancelable){this.P.mCancelable=cancelable;return this;}},{key:'setOnCancelListener',value:function setOnCancelListener(onCancelListener){this.P.mOnCancelListener=onCancelListener;return this;}},{key:'setOnDismissListener',value:function setOnDismissListener(onDismissListener){this.P.mOnDismissListener=onDismissListener;return this;}},{key:'setOnKeyListener',value:function setOnKeyListener(onKeyListener){this.P.mOnKeyListener=onKeyListener;return this;}},{key:'setItems',value:function setItems(items,listener){this.P.mItems=items;this.P.mOnClickListener=listener;return this;}},{key:'setAdapter',value:function setAdapter(adapter,listener){this.P.mAdapter=adapter;this.P.mOnClickListener=listener;return this;}},{key:'setMultiChoiceItems',value:function setMultiChoiceItems(items,checkedItems,listener){this.P.mItems=items;this.P.mOnCheckboxClickListener=listener;this.P.mCheckedItems=checkedItems;this.P.mIsMultiChoice=true;return this;}},{key:'setSingleChoiceItems',value:function setSingleChoiceItems(items,checkedItem,listener){this.P.mItems=items;this.P.mOnClickListener=listener;this.P.mCheckedItem=checkedItem;this.P.mIsSingleChoice=true;return this;}},{key:'setSingleChoiceItemsWithAdapter',value:function setSingleChoiceItemsWithAdapter(adapter,checkedItem,listener){this.P.mAdapter=adapter;this.P.mOnClickListener=listener;this.P.mCheckedItem=checkedItem;this.P.mIsSingleChoice=true;return this;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(listener){this.P.mOnItemSelectedListener=listener;return this;}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length<=1||arguments[1]===undefined?0:arguments[1];var viewSpacingTop=arguments.length<=2||arguments[2]===undefined?0:arguments[2];var viewSpacingRight=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var viewSpacingBottom=arguments.length<=4||arguments[4]===undefined?0:arguments[4];this.P.mView=view;if(!viewSpacingLeft&&!viewSpacingTop&&!viewSpacingRight&&!viewSpacingBottom){this.P.mViewSpacingSpecified=false;}else {this.P.mViewSpacingSpecified=true;this.P.mViewSpacingLeft=viewSpacingLeft;this.P.mViewSpacingTop=viewSpacingTop;this.P.mViewSpacingRight=viewSpacingRight;this.P.mViewSpacingBottom=viewSpacingBottom;}return this;}},{key:'setInverseBackgroundForced',value:function setInverseBackgroundForced(useInverseBackground){this.P.mForceInverseBackground=useInverseBackground;return this;}},{key:'setRecycleOnMeasureEnabled',value:function setRecycleOnMeasureEnabled(enabled){this.P.mRecycleOnMeasure=enabled;return this;}},{key:'create',value:function create(){var dialog=new AlertDialog(this.P.mContext);this.P.apply(dialog.mAlert);dialog.setCancelable(this.P.mCancelable);if(this.P.mCancelable){dialog.setCanceledOnTouchOutside(true);}dialog.setOnCancelListener(this.P.mOnCancelListener);dialog.setOnDismissListener(this.P.mOnDismissListener);if(this.P.mOnKeyListener!=null){dialog.setOnKeyListener(this.P.mOnKeyListener);}return dialog;}},{key:'show',value:function show(){var dialog=this.create();dialog.show();return dialog;}}]);return Builder;}();AlertDialog.Builder=Builder;})(AlertDialog=app.AlertDialog||(app.AlertDialog={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var SparseArray=android.util.SparseArray;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var AdapterView=android.widget.AdapterView;var ArrayAdapter=android.widget.ArrayAdapter;var AbsSpinner=function(_AdapterView2){_inherits(AbsSpinner,_AdapterView2);function AbsSpinner(context,bindElement,defStyle){_classCallCheck(this,AbsSpinner);var _this154=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsSpinner).call(this,context,bindElement,null));_this154.mHeightMeasureSpec=0;_this154.mWidthMeasureSpec=0;_this154.mSelectionLeftPadding=0;_this154.mSelectionTopPadding=0;_this154.mSelectionRightPadding=0;_this154.mSelectionBottomPadding=0;_this154.mSpinnerPadding=new Rect();_this154.mRecycler=new AbsSpinner.RecycleBin(_this154);_this154.initAbsSpinner();var a=_this154._attrBinder;a.addAttr('entries',function(value){var entries=a.parseStringArray(value);if(entries!=null){var adapter=new ArrayAdapter(context,android.R.layout.simple_spinner_item,null,entries);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);_this154.setAdapter(adapter);}});if(defStyle)_this154.applyDefaultAttributes(defStyle);return _this154;}_createClass(AbsSpinner,[{key:'initAbsSpinner',value:function initAbsSpinner(){this.setFocusable(true);this.setWillNotDraw(false);}},{key:'setAdapter',value:function setAdapter(adapter){if(null!=this.mAdapter){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);this.resetList();}this.mAdapter=adapter;this.mOldSelectedPosition=AbsSpinner.INVALID_POSITION;this.mOldSelectedRowId=AbsSpinner.INVALID_ROW_ID;if(this.mAdapter!=null){this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.checkFocus();this.mDataSetObserver=new AdapterView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);var position=this.mItemCount>0?0:AbsSpinner.INVALID_POSITION;this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);if(this.mItemCount==0){this.checkSelectionChanged();}}else {this.checkFocus();this.resetList();this.checkSelectionChanged();}this.requestLayout();}},{key:'resetList',value:function resetList(){this.mDataChanged=false;this.mNeedSync=false;this.removeAllViewsInLayout();this.mOldSelectedPosition=AbsSpinner.INVALID_POSITION;this.mOldSelectedRowId=AbsSpinner.INVALID_ROW_ID;this.setSelectedPositionInt(AbsSpinner.INVALID_POSITION);this.setNextSelectedPositionInt(AbsSpinner.INVALID_POSITION);this.invalidate();}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var widthMode=AbsSpinner.MeasureSpec.getMode(widthMeasureSpec);var widthSize=undefined;var heightSize=undefined;this.mSpinnerPadding.left=this.mPaddingLeft>this.mSelectionLeftPadding?this.mPaddingLeft:this.mSelectionLeftPadding;this.mSpinnerPadding.top=this.mPaddingTop>this.mSelectionTopPadding?this.mPaddingTop:this.mSelectionTopPadding;this.mSpinnerPadding.right=this.mPaddingRight>this.mSelectionRightPadding?this.mPaddingRight:this.mSelectionRightPadding;this.mSpinnerPadding.bottom=this.mPaddingBottom>this.mSelectionBottomPadding?this.mPaddingBottom:this.mSelectionBottomPadding;if(this.mDataChanged){this.handleDataChanged();}var preferredHeight=0;var preferredWidth=0;var needsMeasuring=true;var selectedPosition=this.getSelectedItemPosition();if(selectedPosition>=0&&this.mAdapter!=null&&selectedPosition0&&this.mSelectedPosition>=0){return this.getChildAt(this.mSelectedPosition-this.mFirstPosition);}else {return null;}}},{key:'requestLayout',value:function requestLayout(){if(!this.mBlockLayoutRequests){_get2(Object.getPrototypeOf(AbsSpinner.prototype),'requestLayout',this).call(this);}}},{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'getCount',value:function getCount(){return this.mItemCount;}},{key:'pointToPosition',value:function pointToPosition(x,y){var frame=this.mTouchFrame;if(frame==null){this.mTouchFrame=new Rect();frame=this.mTouchFrame;}var count=this.getChildCount();for(var i=count-1;i>=0;i--){var child=this.getChildAt(i);if(child.getVisibility()==View.VISIBLE){child.getHitRect(frame);if(frame.contains(x,y)){return this.mFirstPosition+i;}}}return AbsSpinner.INVALID_POSITION;}}]);return AbsSpinner;}(AdapterView);widget.AbsSpinner=AbsSpinner;(function(AbsSpinner){var RecycleBin=function(){function RecycleBin(arg){_classCallCheck(this,RecycleBin);this.mScrapHeap=new SparseArray();this._AbsSpinner_this=arg;}_createClass(RecycleBin,[{key:'put',value:function put(position,v){this.mScrapHeap.put(position,v);}},{key:'get',value:function get(position){var result=this.mScrapHeap.get(position);if(result!=null){this.mScrapHeap.delete(position);}else {}return result;}},{key:'clear',value:function clear(){var scrapHeap=this.mScrapHeap;var count=scrapHeap.size();for(var i=0;idisplayFrame.bottom||p.x+this.mPopupWidth-root.getWidth()>0){if(this.mAllowScrollingAnchorParent){var scrollX=anchor.getScrollX();var scrollY=anchor.getScrollY();var r=new Rect(scrollX,scrollY,scrollX+this.mPopupWidth+xoff,scrollY+this.mPopupHeight+anchor.getHeight()+yoff);anchor.requestRectangleOnScreen(r,true);}anchor.getLocationInWindow(this.mDrawingLocation);p.x=this.mDrawingLocation[0]+xoff;p.y=this.mDrawingLocation[1]+anchor.getHeight()+yoff;if(hgrav==Gravity.RIGHT){p.x-=this.mPopupWidth-anchor.getWidth();}anchor.getLocationOnScreen(this.mScreenLocation);onTop=displayFrame.bottom-this.mScreenLocation[1]-anchor.getHeight()-yoffdisplayFrameWidth){p.x-=right-displayFrameWidth;}if(p.x=this.mPopupView.getWidth()||y<0||y>=this.mPopupView.getHeight())){this.dismiss();return true;}else if(event.getAction()==MotionEvent.ACTION_OUTSIDE){this.dismiss();return true;}else if(this.mPopupView){return this.mPopupView.onTouchEvent(event);}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){if(this.mPopupWindow!=null){this.mWindowManager.updateWindowLayout(this.mPopupWindow,params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){if(this.mPopupView.getKeyDispatcherState()==null){return this.mPopupWindow.superDispatchKeyEvent(event);}if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getRepeatCount()==0){var state=this.mPopupView.getKeyDispatcherState();if(state!=null){state.startTracking(event,this);}return true;}else if(event.getAction()==KeyEvent.ACTION_UP){var _state2=this.mPopupView.getKeyDispatcherState();if(_state2!=null&&_state2.isTracking(event)&&!event.isCanceled()){this.dismiss();return true;}}return this.mPopupWindow.superDispatchKeyEvent(event);}else {return this.mPopupWindow.superDispatchKeyEvent(event);}}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(this.mTouchInterceptor!=null&&this.mTouchInterceptor.onTouch(this.mPopupView,ev)){return true;}if(this.mPopupWindow.superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){if(this.mPopupWindow.superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}}]);return PopupWindow;}();PopupWindow.INPUT_METHOD_FROM_FOCUSABLE=0;PopupWindow.INPUT_METHOD_NEEDED=1;PopupWindow.INPUT_METHOD_NOT_NEEDED=2;PopupWindow.DEFAULT_ANCHORED_GRAVITY=Gravity.TOP|Gravity.START;widget.PopupWindow=PopupWindow;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Scroller=function(_widget$OverScroller){_inherits(Scroller,_widget$OverScroller);function Scroller(){_classCallCheck(this,Scroller);return _possibleConstructorReturn(this,Object.getPrototypeOf(Scroller).apply(this,arguments));}return Scroller;}(widget.OverScroller);widget.Scroller=Scroller;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var Rect=android.graphics.Rect;var Handler=android.os.Handler;var Log=android.util.Log;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var View=android.view.View;var MeasureSpec=android.view.View.MeasureSpec;var ViewConfiguration=android.view.ViewConfiguration;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var AbsListView=android.widget.AbsListView;var LinearLayout=android.widget.LinearLayout;var ListView=android.widget.ListView;var PopupWindow=android.widget.PopupWindow;var TextView=android.widget.TextView;var ListPopupWindow=function(){function ListPopupWindow(context){var styleAttr=arguments.length<=1||arguments[1]===undefined?android.R.attr.listPopupWindowStyle:arguments[1];_classCallCheck(this,ListPopupWindow);this.mDropDownHeight=ViewGroup.LayoutParams.WRAP_CONTENT;this.mDropDownWidth=ViewGroup.LayoutParams.WRAP_CONTENT;this.mDropDownHorizontalOffset=0;this.mDropDownVerticalOffset=0;this.mDropDownGravity=Gravity.NO_GRAVITY;this.mDropDownAlwaysVisible=false;this.mForceIgnoreOutsideTouch=false;this.mListItemExpandMaximum=Integer.MAX_VALUE;this.mPromptPosition=ListPopupWindow.POSITION_PROMPT_ABOVE;this.mResizePopupRunnable=new ListPopupWindow.ResizePopupRunnable(this);this.mTouchInterceptor=new ListPopupWindow.PopupTouchInterceptor(this);this.mScrollListener=new ListPopupWindow.PopupScrollListener(this);this.mHideSelector=new ListPopupWindow.ListSelectorHider(this);this.mHandler=new Handler();this.mTempRect=new Rect();this.mLayoutDirection=0;this.mContext=context;this.mPopup=new PopupWindow(context,styleAttr);this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);this.mLayoutDirection=View.LAYOUT_DIRECTION_LTR;}_createClass(ListPopupWindow,[{key:'setAdapter',value:function setAdapter(adapter){if(this.mObserver==null){this.mObserver=new ListPopupWindow.PopupDataSetObserver(this);}else if(this.mAdapter!=null){this.mAdapter.unregisterDataSetObserver(this.mObserver);}this.mAdapter=adapter;if(this.mAdapter!=null){adapter.registerDataSetObserver(this.mObserver);}if(this.mDropDownList!=null){this.mDropDownList.setAdapter(this.mAdapter);}}},{key:'setPromptPosition',value:function setPromptPosition(position){this.mPromptPosition=position;}},{key:'getPromptPosition',value:function getPromptPosition(){return this.mPromptPosition;}},{key:'setModal',value:function setModal(modal){this.mModal=true;this.mPopup.setFocusable(modal);}},{key:'isModal',value:function isModal(){return this.mModal;}},{key:'setForceIgnoreOutsideTouch',value:function setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch){this.mForceIgnoreOutsideTouch=forceIgnoreOutsideTouch;}},{key:'setDropDownAlwaysVisible',value:function setDropDownAlwaysVisible(dropDownAlwaysVisible){this.mDropDownAlwaysVisible=dropDownAlwaysVisible;}},{key:'isDropDownAlwaysVisible',value:function isDropDownAlwaysVisible(){return this.mDropDownAlwaysVisible;}},{key:'getBackground',value:function getBackground(){return this.mPopup.getBackground();}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(d){this.mPopup.setBackgroundDrawable(d);}},{key:'setWindowAnimation',value:function setWindowAnimation(enterAnimation,exitAnimation){this.mPopup.setWindowAnimation(enterAnimation,exitAnimation);}},{key:'getEnterAnimation',value:function getEnterAnimation(){return this.mPopup.mEnterAnimation;}},{key:'getExitAnimation',value:function getExitAnimation(){return this.mPopup.mExitAnimation;}},{key:'getAnchorView',value:function getAnchorView(){return this.mDropDownAnchorView;}},{key:'setAnchorView',value:function setAnchorView(anchor){this.mDropDownAnchorView=anchor;}},{key:'getHorizontalOffset',value:function getHorizontalOffset(){return this.mDropDownHorizontalOffset;}},{key:'setHorizontalOffset',value:function setHorizontalOffset(offset){this.mDropDownHorizontalOffset=offset;}},{key:'getVerticalOffset',value:function getVerticalOffset(){if(!this.mDropDownVerticalOffsetSet){return 0;}return this.mDropDownVerticalOffset;}},{key:'setVerticalOffset',value:function setVerticalOffset(offset){this.mDropDownVerticalOffset=offset;this.mDropDownVerticalOffsetSet=true;}},{key:'setDropDownGravity',value:function setDropDownGravity(gravity){this.mDropDownGravity=gravity;}},{key:'getWidth',value:function getWidth(){return this.mDropDownWidth;}},{key:'setWidth',value:function setWidth(width){this.mDropDownWidth=width;}},{key:'setContentWidth',value:function setContentWidth(width){var popupBackground=this.mPopup.getBackground();if(popupBackground!=null){popupBackground.getPadding(this.mTempRect);this.mDropDownWidth=this.mTempRect.left+this.mTempRect.right+width;}else {this.setWidth(width);}}},{key:'getHeight',value:function getHeight(){return this.mDropDownHeight;}},{key:'setHeight',value:function setHeight(height){this.mDropDownHeight=height;}},{key:'setOnItemClickListener',value:function setOnItemClickListener(clickListener){this.mItemClickListener=clickListener;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(selectedListener){this.mItemSelectedListener=selectedListener;}},{key:'setPromptView',value:function setPromptView(prompt){var showing=this.isShowing();if(showing){this.removePromptView();}this.mPromptView=prompt;if(showing){this.show();}}},{key:'postShow',value:function postShow(){this.mHandler.post(this.mShowDropDownRunnable);}},{key:'show',value:function show(){var height=this.buildDropDown();var widthSpec=0;var heightSpec=0;var noInputMethod=this.isInputMethodNotNeeded();this.mPopup.setAllowScrollingAnchorParent(!noInputMethod);if(this.mPopup.isShowing()){if(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT){widthSpec=-1;}else if(this.mDropDownWidth==ViewGroup.LayoutParams.WRAP_CONTENT){widthSpec=this.getAnchorView().getWidth();}else {widthSpec=this.mDropDownWidth;}if(this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){heightSpec=noInputMethod?height:ViewGroup.LayoutParams.MATCH_PARENT;if(noInputMethod){this.mPopup.setWindowLayoutMode(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT?ViewGroup.LayoutParams.MATCH_PARENT:0,0);}else {this.mPopup.setWindowLayoutMode(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT?ViewGroup.LayoutParams.MATCH_PARENT:0,ViewGroup.LayoutParams.MATCH_PARENT);}}else if(this.mDropDownHeight==ViewGroup.LayoutParams.WRAP_CONTENT){heightSpec=height;}else {heightSpec=this.mDropDownHeight;}this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch&&!this.mDropDownAlwaysVisible);this.mPopup.update(this.getAnchorView(),this.mDropDownHorizontalOffset,this.mDropDownVerticalOffset,widthSpec,heightSpec);}else {if(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT){widthSpec=ViewGroup.LayoutParams.MATCH_PARENT;}else {if(this.mDropDownWidth==ViewGroup.LayoutParams.WRAP_CONTENT){this.mPopup.setWidth(this.getAnchorView().getWidth());}else {this.mPopup.setWidth(this.mDropDownWidth);}}if(this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){heightSpec=ViewGroup.LayoutParams.MATCH_PARENT;}else {if(this.mDropDownHeight==ViewGroup.LayoutParams.WRAP_CONTENT){this.mPopup.setHeight(height);}else {this.mPopup.setHeight(this.mDropDownHeight);}}this.mPopup.setWindowLayoutMode(widthSpec,heightSpec);this.mPopup.setClipToScreenEnabled(true);this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch&&!this.mDropDownAlwaysVisible);this.mPopup.setTouchInterceptor(this.mTouchInterceptor);this.mPopup.showAsDropDown(this.getAnchorView(),this.mDropDownHorizontalOffset,this.mDropDownVerticalOffset,this.mDropDownGravity);this.mDropDownList.setSelection(ListView.INVALID_POSITION);if(!this.mModal||this.mDropDownList.isInTouchMode()){this.clearListSelection();}if(!this.mModal){this.mHandler.post(this.mHideSelector);}}}},{key:'dismiss',value:function dismiss(){this.mPopup.dismiss();this.removePromptView();this.mPopup.setContentView(null);this.mDropDownList=null;this.mHandler.removeCallbacks(this.mResizePopupRunnable);}},{key:'setOnDismissListener',value:function setOnDismissListener(listener){this.mPopup.setOnDismissListener(listener);}},{key:'removePromptView',value:function removePromptView(){if(this.mPromptView!=null){var parent=this.mPromptView.getParent();if(parent instanceof ViewGroup){var group=parent;group.removeView(this.mPromptView);}}}},{key:'setInputMethodMode',value:function setInputMethodMode(mode){this.mPopup.setInputMethodMode(mode);}},{key:'getInputMethodMode',value:function getInputMethodMode(){return this.mPopup.getInputMethodMode();}},{key:'setSelection',value:function setSelection(position){var list=this.mDropDownList;if(this.isShowing()&&list!=null){list.mListSelectionHidden=false;list.setSelection(position);if(list.getChoiceMode()!=ListView.CHOICE_MODE_NONE){list.setItemChecked(position,true);}}}},{key:'clearListSelection',value:function clearListSelection(){var list=this.mDropDownList;if(list!=null){list.mListSelectionHidden=true;list.hideSelector();list.requestLayout();}}},{key:'isShowing',value:function isShowing(){return this.mPopup.isShowing();}},{key:'isInputMethodNotNeeded',value:function isInputMethodNotNeeded(){return this.mPopup.getInputMethodMode()==ListPopupWindow.INPUT_METHOD_NOT_NEEDED;}},{key:'performItemClick',value:function performItemClick(position){if(this.isShowing()){if(this.mItemClickListener!=null){var list=this.mDropDownList;var child=list.getChildAt(position-list.getFirstVisiblePosition());var adapter=list.getAdapter();this.mItemClickListener.onItemClick(list,child,position,adapter.getItemId(position));}return true;}return false;}},{key:'getSelectedItem',value:function getSelectedItem(){if(!this.isShowing()){return null;}return this.mDropDownList.getSelectedItem();}},{key:'getSelectedItemPosition',value:function getSelectedItemPosition(){if(!this.isShowing()){return ListView.INVALID_POSITION;}return this.mDropDownList.getSelectedItemPosition();}},{key:'getSelectedItemId',value:function getSelectedItemId(){if(!this.isShowing()){return ListView.INVALID_ROW_ID;}return this.mDropDownList.getSelectedItemId();}},{key:'getSelectedView',value:function getSelectedView(){if(!this.isShowing()){return null;}return this.mDropDownList.getSelectedView();}},{key:'getListView',value:function getListView(){return this.mDropDownList;}},{key:'setListItemExpandMax',value:function setListItemExpandMax(max){this.mListItemExpandMaximum=max;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.isShowing()){if(keyCode!=KeyEvent.KEYCODE_SPACE&&(this.mDropDownList.getSelectedItemPosition()>=0||!KeyEvent.isConfirmKey(keyCode))){var curIndex=this.mDropDownList.getSelectedItemPosition();var consumed=undefined;var below=!this.mPopup.isAboveAnchor();var adapter=this.mAdapter;var allEnabled=undefined;var firstItem=Integer.MAX_VALUE;var lastItem=Integer.MIN_VALUE;if(adapter!=null){allEnabled=adapter.areAllItemsEnabled();firstItem=allEnabled?0:this.mDropDownList.lookForSelectablePosition(0,true);lastItem=allEnabled?adapter.getCount()-1:this.mDropDownList.lookForSelectablePosition(adapter.getCount()-1,false);}if(below&&keyCode==KeyEvent.KEYCODE_DPAD_UP&&curIndex<=firstItem||!below&&keyCode==KeyEvent.KEYCODE_DPAD_DOWN&&curIndex>=lastItem){this.clearListSelection();this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);this.show();return true;}else {this.mDropDownList.mListSelectionHidden=false;}consumed=this.mDropDownList.onKeyDown(keyCode,event);if(ListPopupWindow.DEBUG)Log.v(ListPopupWindow.TAG,"Key down: code="+keyCode+" list consumed="+consumed);if(consumed){this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);this.mDropDownList.requestFocusFromTouch();this.show();switch(keyCode){case KeyEvent.KEYCODE_ENTER:case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_DPAD_DOWN:case KeyEvent.KEYCODE_DPAD_UP:return true;}}else {if(below&&keyCode==KeyEvent.KEYCODE_DPAD_DOWN){if(curIndex==lastItem){return true;}}else if(!below&&keyCode==KeyEvent.KEYCODE_DPAD_UP&&curIndex==firstItem){return true;}}}}return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(this.isShowing()&&this.mDropDownList.getSelectedItemPosition()>=0){var consumed=this.mDropDownList.onKeyUp(keyCode,event);if(consumed&&KeyEvent.isConfirmKey(keyCode)){this.dismiss();}return consumed;}return false;}},{key:'onKeyPreIme',value:function onKeyPreIme(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&this.isShowing()){var anchorView=this.mDropDownAnchorView;if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getRepeatCount()==0){var state=anchorView.getKeyDispatcherState();if(state!=null){state.startTracking(event,this);}return true;}else if(event.getAction()==KeyEvent.ACTION_UP){var _state3=anchorView.getKeyDispatcherState();if(_state3!=null){_state3.handleUpEvent(event);}if(event.isTracking()&&!event.isCanceled()){this.dismiss();return true;}}}return false;}},{key:'createDragToOpenListener',value:function createDragToOpenListener(src){var _this157=this;return function(){var _this=_this157;var _Inner=function(_ListPopupWindow$Forw){_inherits(_Inner,_ListPopupWindow$Forw);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,Object.getPrototypeOf(_Inner).apply(this,arguments));}_createClass(_Inner,[{key:'getPopup',value:function getPopup(){return _this;}}]);return _Inner;}(ListPopupWindow.ForwardingListener);return new _Inner(src);}();}},{key:'buildDropDown',value:function buildDropDown(){var _this159=this;var dropDownView=undefined;var otherHeights=0;if(this.mDropDownList==null){var context=this.mContext;this.mShowDropDownRunnable=function(){var _this=_this159;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){var view=_this.getAnchorView();if(view!=null&&view.isAttachedToWindow()){_this.show();}}}]);return _Inner;}();return new _Inner();}();this.mDropDownList=new ListPopupWindow.DropDownListView(context,!this.mModal);if(this.mDropDownListHighlight!=null){this.mDropDownList.setSelector(this.mDropDownListHighlight);}this.mDropDownList.setAdapter(this.mAdapter);this.mDropDownList.setOnItemClickListener(this.mItemClickListener);this.mDropDownList.setFocusable(true);this.mDropDownList.setFocusableInTouchMode(true);this.mDropDownList.setOnItemSelectedListener(function(){var _this=_this159;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onItemSelected',value:function onItemSelected(parent,view,position,id){if(position!=-1){var dropDownList=_this.mDropDownList;if(dropDownList!=null){dropDownList.mListSelectionHidden=false;}}}},{key:'onNothingSelected',value:function onNothingSelected(parent){}}]);return _Inner;}();return new _Inner();}());this.mDropDownList.setOnScrollListener(this.mScrollListener);if(this.mItemSelectedListener!=null){this.mDropDownList.setOnItemSelectedListener(this.mItemSelectedListener);}dropDownView=this.mDropDownList;var hintView=this.mPromptView;if(hintView!=null){var hintContainer=new LinearLayout(context);hintContainer.setOrientation(LinearLayout.VERTICAL);var hintParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,0,1.0);switch(this.mPromptPosition){case ListPopupWindow.POSITION_PROMPT_BELOW:hintContainer.addView(dropDownView,hintParams);hintContainer.addView(hintView);break;case ListPopupWindow.POSITION_PROMPT_ABOVE:hintContainer.addView(hintView);hintContainer.addView(dropDownView,hintParams);break;default:Log.e(ListPopupWindow.TAG,"Invalid hint position "+this.mPromptPosition);break;}var widthSpec=MeasureSpec.makeMeasureSpec(this.mDropDownWidth,MeasureSpec.AT_MOST);var heightSpec=MeasureSpec.UNSPECIFIED;hintView.measure(widthSpec,heightSpec);hintParams=hintView.getLayoutParams();otherHeights=hintView.getMeasuredHeight()+hintParams.topMargin+hintParams.bottomMargin;dropDownView=hintContainer;}this.mPopup.setContentView(dropDownView);}else {dropDownView=this.mPopup.getContentView();var view=this.mPromptView;if(view!=null){var _hintParams=view.getLayoutParams();otherHeights=view.getMeasuredHeight()+_hintParams.topMargin+_hintParams.bottomMargin;}}var padding=0;var background=this.mPopup.getBackground();if(background!=null){background.getPadding(this.mTempRect);padding=this.mTempRect.top+this.mTempRect.bottom;if(!this.mDropDownVerticalOffsetSet){this.mDropDownVerticalOffset=-this.mTempRect.top;}}else {this.mTempRect.setEmpty();}var ignoreBottomDecorations=this.mPopup.getInputMethodMode()==PopupWindow.INPUT_METHOD_NOT_NEEDED;var maxHeight=this.mPopup.getMaxAvailableHeight(this.getAnchorView(),this.mDropDownVerticalOffset,ignoreBottomDecorations);if(this.mDropDownAlwaysVisible||this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){return maxHeight+padding;}var childWidthSpec=undefined;switch(this.mDropDownWidth){case ViewGroup.LayoutParams.WRAP_CONTENT:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels-(this.mTempRect.left+this.mTempRect.right),MeasureSpec.AT_MOST);break;case ViewGroup.LayoutParams.MATCH_PARENT:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels-(this.mTempRect.left+this.mTempRect.right),MeasureSpec.EXACTLY);break;default:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mDropDownWidth,MeasureSpec.EXACTLY);break;}var listContent=this.mDropDownList.measureHeightOfChildren(childWidthSpec,0,ListView.NO_POSITION,maxHeight-otherHeights,-1);if(listContent>0)otherHeights+=padding;return listContent+otherHeights;}}]);return ListPopupWindow;}();ListPopupWindow.TAG="ListPopupWindow";ListPopupWindow.DEBUG=false;ListPopupWindow.EXPAND_LIST_TIMEOUT=250;ListPopupWindow.POSITION_PROMPT_ABOVE=0;ListPopupWindow.POSITION_PROMPT_BELOW=1;ListPopupWindow.MATCH_PARENT=ViewGroup.LayoutParams.MATCH_PARENT;ListPopupWindow.WRAP_CONTENT=ViewGroup.LayoutParams.WRAP_CONTENT;ListPopupWindow.INPUT_METHOD_FROM_FOCUSABLE=PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;ListPopupWindow.INPUT_METHOD_NEEDED=PopupWindow.INPUT_METHOD_NEEDED;ListPopupWindow.INPUT_METHOD_NOT_NEEDED=PopupWindow.INPUT_METHOD_NOT_NEEDED;widget.ListPopupWindow=ListPopupWindow;(function(ListPopupWindow){var ForwardingListener=function(){function ForwardingListener(src){_classCallCheck(this,ForwardingListener);this.mScaledTouchSlop=0;this.mTapTimeout=0;this.mActivePointerId=0;this.mSrc=src;this.mScaledTouchSlop=ViewConfiguration.get(src.getContext()).getScaledTouchSlop();this.mTapTimeout=ViewConfiguration.getTapTimeout();src.addOnAttachStateChangeListener(this);}_createClass(ForwardingListener,[{key:'onTouch',value:function onTouch(v,event){var wasForwarding=this.mForwarding;var forwarding=undefined;if(wasForwarding){forwarding=this.onTouchForwarded(event)||!this.onForwardingStopped();}else {forwarding=this.onTouchObserved(event)&&this.onForwardingStarted();}this.mForwarding=forwarding;return forwarding||wasForwarding;}},{key:'onViewAttachedToWindow',value:function onViewAttachedToWindow(v){}},{key:'onViewDetachedFromWindow',value:function onViewDetachedFromWindow(v){this.mForwarding=false;this.mActivePointerId=MotionEvent.INVALID_POINTER_ID;if(this.mDisallowIntercept!=null){this.mSrc.removeCallbacks(this.mDisallowIntercept);}}},{key:'onForwardingStarted',value:function onForwardingStarted(){var popup=this.getPopup();if(popup!=null&&!popup.isShowing()){popup.show();}return true;}},{key:'onForwardingStopped',value:function onForwardingStopped(){var popup=this.getPopup();if(popup!=null&&popup.isShowing()){popup.dismiss();}return true;}},{key:'onTouchObserved',value:function onTouchObserved(srcEvent){var src=this.mSrc;if(!src.isEnabled()){return false;}var actionMasked=srcEvent.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_DOWN:this.mActivePointerId=srcEvent.getPointerId(0);if(this.mDisallowIntercept==null){this.mDisallowIntercept=new ForwardingListener.DisallowIntercept(this);}src.postDelayed(this.mDisallowIntercept,this.mTapTimeout);break;case MotionEvent.ACTION_MOVE:var activePointerIndex=srcEvent.findPointerIndex(this.mActivePointerId);if(activePointerIndex>=0){var x=srcEvent.getX(activePointerIndex);var y=srcEvent.getY(activePointerIndex);if(!src.pointInView(x,y,this.mScaledTouchSlop)){if(this.mDisallowIntercept!=null){src.removeCallbacks(this.mDisallowIntercept);}src.getParent().requestDisallowInterceptTouchEvent(true);return true;}}break;case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:if(this.mDisallowIntercept!=null){src.removeCallbacks(this.mDisallowIntercept);}break;}return false;}},{key:'onTouchForwarded',value:function onTouchForwarded(srcEvent){return false;}}]);return ForwardingListener;}();ListPopupWindow.ForwardingListener=ForwardingListener;(function(ForwardingListener){var DisallowIntercept=function(){function DisallowIntercept(arg){_classCallCheck(this,DisallowIntercept);this._ForwardingListener_this=arg;}_createClass(DisallowIntercept,[{key:'run',value:function run(){var parent=this._ForwardingListener_this.mSrc.getParent();parent.requestDisallowInterceptTouchEvent(true);}}]);return DisallowIntercept;}();ForwardingListener.DisallowIntercept=DisallowIntercept;})(ForwardingListener=ListPopupWindow.ForwardingListener||(ListPopupWindow.ForwardingListener={}));var DropDownListView=function(_ListView3){_inherits(DropDownListView,_ListView3);function DropDownListView(context,hijackFocus){_classCallCheck(this,DropDownListView);var _this160=_possibleConstructorReturn(this,Object.getPrototypeOf(DropDownListView).call(this,context,null,android.R.attr.dropDownListViewStyle));_this160.mHijackFocus=hijackFocus;_this160.setCacheColorHint(0);return _this160;}_createClass(DropDownListView,[{key:'onForwardedEvent',value:function onForwardedEvent(event,activePointerId){var handledEvent=true;var clearPressedItem=false;var actionMasked=event.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_CANCEL:handledEvent=false;break;case MotionEvent.ACTION_UP:handledEvent=false;case MotionEvent.ACTION_MOVE:var activeIndex=event.findPointerIndex(activePointerId);if(activeIndex<0){handledEvent=false;break;}var x=Math.floor(event.getX(activeIndex));var y=Math.floor(event.getY(activeIndex));var position=this.pointToPosition(x,y);if(position==DropDownListView.INVALID_POSITION){clearPressedItem=true;break;}var child=this.getChildAt(position-this.getFirstVisiblePosition());this.setPressedItem(child,position);handledEvent=true;if(actionMasked==MotionEvent.ACTION_UP){this.clickPressedItem(child,position);}break;}if(!handledEvent||clearPressedItem){this.clearPressedItem();}return handledEvent;}},{key:'clickPressedItem',value:function clickPressedItem(child,position){var id=this.getItemIdAtPosition(position);this.performItemClick(child,position,id);}},{key:'clearPressedItem',value:function clearPressedItem(){this.mDrawsInPressedState=false;this.setPressed(false);this.updateSelectorState();}},{key:'setPressedItem',value:function setPressedItem(child,position){this.mDrawsInPressedState=true;this.setPressed(true);this.layoutChildren();this.setSelectedPositionInt(position);this.positionSelector(position,child);this.refreshDrawableState();}},{key:'touchModeDrawsInPressedState',value:function touchModeDrawsInPressedState(){return this.mDrawsInPressedState||_get2(Object.getPrototypeOf(DropDownListView.prototype),'touchModeDrawsInPressedState',this).call(this);}},{key:'obtainView',value:function obtainView(position,isScrap){var view=_get2(Object.getPrototypeOf(DropDownListView.prototype),'obtainView',this).call(this,position,isScrap);if(view instanceof TextView){view.setHorizontallyScrolling(true);}return view;}},{key:'isInTouchMode',value:function isInTouchMode(){return this.mHijackFocus&&this.mListSelectionHidden||_get2(Object.getPrototypeOf(DropDownListView.prototype),'isInTouchMode',this).call(this);}},{key:'hasWindowFocus',value:function hasWindowFocus(){return this.mHijackFocus||_get2(Object.getPrototypeOf(DropDownListView.prototype),'hasWindowFocus',this).call(this);}},{key:'isFocused',value:function isFocused(){return this.mHijackFocus||_get2(Object.getPrototypeOf(DropDownListView.prototype),'isFocused',this).call(this);}},{key:'hasFocus',value:function hasFocus(){return this.mHijackFocus||_get2(Object.getPrototypeOf(DropDownListView.prototype),'hasFocus',this).call(this);}}]);return DropDownListView;}(ListView);DropDownListView.CLICK_ANIM_DURATION=150;DropDownListView.CLICK_ANIM_ALPHA=0x80;ListPopupWindow.DropDownListView=DropDownListView;var PopupDataSetObserver=function(_DataSetObserver3){_inherits(PopupDataSetObserver,_DataSetObserver3);function PopupDataSetObserver(arg){_classCallCheck(this,PopupDataSetObserver);var _this161=_possibleConstructorReturn(this,Object.getPrototypeOf(PopupDataSetObserver).call(this));_this161._ListPopupWindow_this=arg;return _this161;}_createClass(PopupDataSetObserver,[{key:'onChanged',value:function onChanged(){if(this._ListPopupWindow_this.isShowing()){this._ListPopupWindow_this.show();}}},{key:'onInvalidated',value:function onInvalidated(){this._ListPopupWindow_this.dismiss();}}]);return PopupDataSetObserver;}(DataSetObserver);ListPopupWindow.PopupDataSetObserver=PopupDataSetObserver;var ListSelectorHider=function(){function ListSelectorHider(arg){_classCallCheck(this,ListSelectorHider);this._ListPopupWindow_this=arg;}_createClass(ListSelectorHider,[{key:'run',value:function run(){this._ListPopupWindow_this.clearListSelection();}}]);return ListSelectorHider;}();ListPopupWindow.ListSelectorHider=ListSelectorHider;var ResizePopupRunnable=function(){function ResizePopupRunnable(arg){_classCallCheck(this,ResizePopupRunnable);this._ListPopupWindow_this=arg;}_createClass(ResizePopupRunnable,[{key:'run',value:function run(){if(this._ListPopupWindow_this.mDropDownList!=null&&this._ListPopupWindow_this.mDropDownList.getCount()>this._ListPopupWindow_this.mDropDownList.getChildCount()&&this._ListPopupWindow_this.mDropDownList.getChildCount()<=this._ListPopupWindow_this.mListItemExpandMaximum){this._ListPopupWindow_this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);this._ListPopupWindow_this.show();}}}]);return ResizePopupRunnable;}();ListPopupWindow.ResizePopupRunnable=ResizePopupRunnable;var PopupTouchInterceptor=function(){function PopupTouchInterceptor(arg){_classCallCheck(this,PopupTouchInterceptor);this._ListPopupWindow_this=arg;}_createClass(PopupTouchInterceptor,[{key:'onTouch',value:function onTouch(v,event){var action=event.getAction();var x=Math.floor(event.getX());var y=Math.floor(event.getY());if(action==MotionEvent.ACTION_DOWN&&this._ListPopupWindow_this.mPopup!=null&&this._ListPopupWindow_this.mPopup.isShowing()&&x>=0&&x=0&&y0){child=this.getChildAt(0);}else if(this.mAdapter!=null&&this.mAdapter.getCount()>0){child=this.makeView(0,false);this.mRecycler.put(0,child);}if(child!=null){var childBaseline=child.getBaseline();return childBaseline>=0?child.getTop()+childBaseline:-1;}else {return -1;}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(Spinner.prototype),'onDetachedFromWindow',this).call(this);if(this.mPopup!=null&&this.mPopup.isShowing()){this.mPopup.dismiss();}}},{key:'setOnItemClickListener',value:function setOnItemClickListener(l){throw Error('new RuntimeException("setOnItemClickListener cannot be used with a spinner.")');}},{key:'setOnItemClickListenerInt',value:function setOnItemClickListenerInt(l){_get2(Object.getPrototypeOf(Spinner.prototype),'setOnItemClickListener',this).call(this,l);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(Object.getPrototypeOf(Spinner.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);if(this.mPopup!=null&&Spinner.MeasureSpec.getMode(widthMeasureSpec)==Spinner.MeasureSpec.AT_MOST){var measuredWidth=this.getMeasuredWidth();this.setMeasuredDimension(Math.min(Math.max(measuredWidth,this.measureContentWidth(this.getAdapter(),this.getBackground())),Spinner.MeasureSpec.getSize(widthMeasureSpec)),this.getMeasuredHeight());}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(Object.getPrototypeOf(Spinner.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mInLayout=true;this.layoutSpinner(0,false);this.mInLayout=false;}},{key:'layoutSpinner',value:function layoutSpinner(delta,animate){var childrenLeft=this.mSpinnerPadding.left;var childrenWidth=this.mRight-this.mLeft-this.mSpinnerPadding.left-this.mSpinnerPadding.right;if(this.mDataChanged){this.handleDataChanged();}if(this.mItemCount==0){this.resetList();return;}if(this.mNextSelectedPosition>=0){this.setSelectedPositionInt(this.mNextSelectedPosition);}this.recycleAllViews();this.removeAllViewsInLayout();this.mFirstPosition=this.mSelectedPosition;if(this.mAdapter!=null){var sel=this.makeView(this.mSelectedPosition,true);var width=sel.getMeasuredWidth();var selectedOffset=childrenLeft;var layoutDirection=this.getLayoutDirection();var absoluteGravity=Gravity.getAbsoluteGravity(this.mGravity,layoutDirection);switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.CENTER_HORIZONTAL:selectedOffset=childrenLeft+childrenWidth/2-width/2;break;case Gravity.RIGHT:selectedOffset=childrenLeft+childrenWidth-width;break;}sel.offsetLeftAndRight(selectedOffset);}this.mRecycler.clear();this.invalidate();this.checkSelectionChanged();this.mDataChanged=false;this.mNeedSync=false;this.setNextSelectedPositionInt(this.mSelectedPosition);}},{key:'makeView',value:function makeView(position,addChild){var child=undefined;if(!this.mDataChanged){child=this.mRecycler.get(position);if(child!=null){this.setUpChild(child,addChild);return child;}}child=this.mAdapter.getView(position,null,this);this.setUpChild(child,addChild);return child;}},{key:'setUpChild',value:function setUpChild(child,addChild){var lp=child.getLayoutParams();if(lp==null){lp=this.generateDefaultLayoutParams();}if(addChild){this.addViewInLayout(child,0,lp);}child.setSelected(this.hasFocus());if(this.mDisableChildrenWhenDisabled){child.setEnabled(this.isEnabled());}var childHeightSpec=ViewGroup.getChildMeasureSpec(this.mHeightMeasureSpec,this.mSpinnerPadding.top+this.mSpinnerPadding.bottom,lp.height);var childWidthSpec=ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec,this.mSpinnerPadding.left+this.mSpinnerPadding.right,lp.width);child.measure(childWidthSpec,childHeightSpec);var childLeft=undefined;var childRight=undefined;var childTop=this.mSpinnerPadding.top+(this.getMeasuredHeight()-this.mSpinnerPadding.bottom-this.mSpinnerPadding.top-child.getMeasuredHeight())/2;var childBottom=childTop+child.getMeasuredHeight();var width=child.getMeasuredWidth();childLeft=0;childRight=childLeft+width;child.layout(childLeft,childTop,childRight,childBottom);}},{key:'performClick',value:function performClick(){var handled=_get2(Object.getPrototypeOf(Spinner.prototype),'performClick',this).call(this);if(!handled){handled=true;if(!this.mPopup.isShowing()){this.mPopup.showPopup(this.getTextDirection(),this.getTextAlignment());}}return handled;}},{key:'onClick',value:function onClick(dialog,which){this.setSelection(which);dialog.dismiss();}},{key:'setPrompt',value:function setPrompt(prompt){this.mPopup.setPromptText(prompt);}},{key:'getPrompt',value:function getPrompt(){return this.mPopup.getHintText();}},{key:'measureContentWidth',value:function measureContentWidth(adapter,background){if(adapter==null){return 0;}var width=0;var itemView=null;var itemType=0;var widthMeasureSpec=Spinner.MeasureSpec.makeMeasureSpec(0,Spinner.MeasureSpec.UNSPECIFIED);var heightMeasureSpec=Spinner.MeasureSpec.makeMeasureSpec(0,Spinner.MeasureSpec.UNSPECIFIED);var start=Math.max(0,this.getSelectedItemPosition());var end=Math.min(adapter.getCount(),start+Spinner.MAX_ITEMS_MEASURED);var count=end-start;start=Math.max(0,start-(Spinner.MAX_ITEMS_MEASURED-count));for(var i=start;icontentWidthLimit){contentWidth=contentWidthLimit;}this.setContentWidth(Math.max(contentWidth,spinnerWidth-spinnerPaddingLeft-spinnerPaddingRight));}else if(this._Spinner_this.mDropDownWidth==DropdownPopup.MATCH_PARENT){this.setContentWidth(spinnerWidth-spinnerPaddingLeft-spinnerPaddingRight);}else {this.setContentWidth(this._Spinner_this.mDropDownWidth);}if(this._Spinner_this.isLayoutRtl()){hOffset+=spinnerWidth-spinnerPaddingRight-this.getWidth();}else {hOffset+=spinnerPaddingLeft;}this.setHorizontalOffset(hOffset);}},{key:'showPopup',value:function showPopup(textDirection,textAlignment){var _this164=this;var wasShowing=this.isShowing();this.computeContentWidth();this.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);_get2(Object.getPrototypeOf(DropdownPopup.prototype),'show',this).call(this);var listView=this.getListView();listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);listView.setTextDirection(textDirection);listView.setTextAlignment(textAlignment);this.setSelection(this._Spinner_this.getSelectedItemPosition());if(wasShowing){return;}var vto=this._Spinner_this.getViewTreeObserver();if(vto!=null){(function(){var layoutListener=function(){var _this=_this164;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onGlobalLayout',value:function onGlobalLayout(){if(!_this._Spinner_this.isVisibleToUser()){_this.dismiss();}else {_this.computeContentWidth();_this.show();}}}]);return _Inner;}();return new _Inner();}();vto.addOnGlobalLayoutListener(layoutListener);_this164.setOnDismissListener(function(){var _this=_this164;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onDismiss',value:function onDismiss(){var vto=_this._Spinner_this.getViewTreeObserver();if(vto!=null){vto.removeOnGlobalLayoutListener(layoutListener);}}}]);return _Inner;}();return new _Inner();}());})();}}}]);return DropdownPopup;}(ListPopupWindow);Spinner.DropdownPopup=DropdownPopup;})(Spinner=widget.Spinner||(widget.Spinner={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var androidui;(function(androidui){var widget;(function(widget){var View=android.view.View;var HtmlBaseView=function(_View4){_inherits(HtmlBaseView,_View4);function HtmlBaseView(context,bindElement,defStyle){_classCallCheck(this,HtmlBaseView);var _this165=_possibleConstructorReturn(this,Object.getPrototypeOf(HtmlBaseView).call(this,context,bindElement,defStyle));_this165.mHtmlTouchAble=false;return _this165;}_createClass(HtmlBaseView,[{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mHtmlTouchAble){event[android.view.ViewRootImpl.ContinueEventToDom]=true;}return _get2(Object.getPrototypeOf(HtmlBaseView.prototype),'onTouchEvent',this).call(this,event)||this.mHtmlTouchAble;}},{key:'setHtmlTouchAble',value:function setHtmlTouchAble(enable){this.mHtmlTouchAble=enable;}},{key:'isHtmlTouchAble',value:function isHtmlTouchAble(){return this.mHtmlTouchAble;}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return true;}}]);return HtmlBaseView;}(View);widget.HtmlBaseView=HtmlBaseView;})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var android;(function(android){var webkit;(function(webkit){var WebViewClient=function(){function WebViewClient(){_classCallCheck(this,WebViewClient);}_createClass(WebViewClient,[{key:'onPageFinished',value:function onPageFinished(view,url){}},{key:'onReceivedTitle',value:function onReceivedTitle(view,title){}}]);return WebViewClient;}();webkit.WebViewClient=WebViewClient;})(webkit=android.webkit||(android.webkit={}));})(android||(android={}));var android;(function(android){var webkit;(function(webkit){var HtmlBaseView=androidui.widget.HtmlBaseView;var WebView=function(_HtmlBaseView){_inherits(WebView,_HtmlBaseView);function WebView(context,bindElement,defStyle){_classCallCheck(this,WebView);var _this166=_possibleConstructorReturn(this,Object.getPrototypeOf(WebView).call(this,context,bindElement,defStyle));_this166.initIFrameHistoryLength=-1;var density=_this166.getResources().getDisplayMetrics().density;_this166.setMinimumWidth(300*density);_this166.setMinimumHeight(150*density);return _this166;}_createClass(WebView,[{key:'initIFrameElement',value:function initIFrameElement(url){var _this167=this;this.iFrameElement=document.createElement('iframe');this.iFrameElement.style.border='none';this.iFrameElement.style.height='100%';this.iFrameElement.style.width='100%';this.iFrameElement.onload=function(){_this167.checkActivityResume();if(_this167.initIFrameHistoryLength<0)_this167.initIFrameHistoryLength=history.length;if(_this167.mClient){_this167.mClient.onReceivedTitle(_this167,_this167.getTitle());_this167.mClient.onPageFinished(_this167,_this167.getUrl());}};this.bindElement.style['webkitOverflowScrolling']=this.bindElement.style['overflowScrolling']='touch';this.bindElement.style.overflowY='auto';if(url)this.iFrameElement.src=url;this.bindElement.appendChild(this.iFrameElement);var activity=this.getContext();var onDestroy=activity.onDestroy;activity.onDestroy=function(){onDestroy.call(activity);PageStack.preClosePageHasIFrame(_this167.initIFrameHistoryLength);};}},{key:'checkActivityResume',value:function checkActivityResume(){if(!this.getContext().mResumed){console.error('can\'t call any webview\'s methods when host activity was pause');}}},{key:'goBack',value:function goBack(){this.checkActivityResume();if(this.canGoBack()){history.back();}}},{key:'canGoBack',value:function canGoBack(){this.checkActivityResume();if(this.initIFrameHistoryLength<0)return false;return history.length>this.initIFrameHistoryLength;}},{key:'loadUrl',value:function loadUrl(url){if(this.initIFrameHistoryLength>0){this.checkActivityResume();}if(!this.iFrameElement){this.initIFrameElement(url);}this.iFrameElement.src=url;}},{key:'reload',value:function reload(){if(!this.iFrameElement)return;try{this.iFrameElement.contentWindow.location.reload();}catch(e){this.iFrameElement.src=this.iFrameElement.src;}}},{key:'getUrl',value:function getUrl(){if(!this.iFrameElement)return '';try{return this.iFrameElement.contentWindow.document.URL;}catch(e){return this.iFrameElement.src;}}},{key:'getTitle',value:function getTitle(){try{return this.iFrameElement.contentWindow.document.title;}catch(e){console.warn(e);return '';}}},{key:'setWebViewClient',value:function setWebViewClient(client){this.mClient=client;}}]);return WebView;}(HtmlBaseView);webkit.WebView=WebView;})(webkit=android.webkit||(android.webkit={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var RotateAnimation=function(_Animation5){_inherits(RotateAnimation,_Animation5);function RotateAnimation(fromDegrees,toDegrees){var pivotXType=arguments.length<=2||arguments[2]===undefined?RotateAnimation.ABSOLUTE:arguments[2];var pivotXValue=arguments.length<=3||arguments[3]===undefined?0:arguments[3];var pivotYType=arguments.length<=4||arguments[4]===undefined?RotateAnimation.ABSOLUTE:arguments[4];var pivotYValue=arguments.length<=5||arguments[5]===undefined?0:arguments[5];_classCallCheck(this,RotateAnimation);var _this168=_possibleConstructorReturn(this,Object.getPrototypeOf(RotateAnimation).call(this));_this168.mFromDegrees=0;_this168.mToDegrees=0;_this168.mPivotXType=RotateAnimation.ABSOLUTE;_this168.mPivotYType=RotateAnimation.ABSOLUTE;_this168.mPivotXValue=0.0;_this168.mPivotYValue=0.0;_this168.mPivotX=0;_this168.mPivotY=0;_this168.mFromDegrees=fromDegrees;_this168.mToDegrees=toDegrees;_this168.mPivotXValue=pivotXValue;_this168.mPivotXType=pivotXType;_this168.mPivotYValue=pivotYValue;_this168.mPivotYType=pivotYType;_this168.initializePivotPoint();return _this168;}_createClass(RotateAnimation,[{key:'initializePivotPoint',value:function initializePivotPoint(){if(this.mPivotXType==RotateAnimation.ABSOLUTE){this.mPivotX=this.mPivotXValue;}if(this.mPivotYType==RotateAnimation.ABSOLUTE){this.mPivotY=this.mPivotYValue;}}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var degrees=this.mFromDegrees+(this.mToDegrees-this.mFromDegrees)*interpolatedTime;var scale=this.getScaleFactor();if(this.mPivotX==0.0&&this.mPivotY==0.0){t.getMatrix().setRotate(degrees);}else {t.getMatrix().setRotate(degrees,this.mPivotX*scale,this.mPivotY*scale);}}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(Object.getPrototypeOf(RotateAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mPivotX=this.resolveSize(this.mPivotXType,this.mPivotXValue,width,parentWidth);this.mPivotY=this.resolveSize(this.mPivotYType,this.mPivotYValue,height,parentHeight);}}]);return RotateAnimation;}(Animation);animation.RotateAnimation=RotateAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view_7){var MenuItem=function(){function MenuItem(menu,group,id,categoryOrder,ordering,title){_classCallCheck(this,MenuItem);this.mId=0;this.mGroup=0;this.mCategoryOrder=0;this.mOrdering=0;this.mVisible=true;this.mEnable=true;this.mMenu=menu;this.mId=id;this.mGroup=group;this.mCategoryOrder=categoryOrder;this.mOrdering=ordering;this.mTitle=title;}_createClass(MenuItem,[{key:'getItemId',value:function getItemId(){return this.mId;}},{key:'getGroupId',value:function getGroupId(){return this.mGroup;}},{key:'getOrder',value:function getOrder(){return this.mOrdering;}},{key:'setTitle',value:function setTitle(title){this.mTitle=title;return this;}},{key:'getTitle',value:function getTitle(){return this.mTitle;}},{key:'setIcon',value:function setIcon(icon){this.mIconDrawable=icon;return this;}},{key:'getIcon',value:function getIcon(){return this.mIconDrawable;}},{key:'setIntent',value:function setIntent(intent){this.mIntent=intent;return this;}},{key:'getIntent',value:function getIntent(){return this.mIntent;}},{key:'setVisible',value:function setVisible(visible){this.mVisible=visible;return this;}},{key:'isVisible',value:function isVisible(){return this.mVisible;}},{key:'setEnabled',value:function setEnabled(enabled){this.mEnable=enabled;return this;}},{key:'isEnabled',value:function isEnabled(){return this.mEnable;}},{key:'setOnMenuItemClickListener',value:function setOnMenuItemClickListener(menuItemClickListener){this.mClickListener=menuItemClickListener;return this;}},{key:'setActionView',value:function setActionView(view){this.mActionView=view;return this;}},{key:'getActionView',value:function getActionView(){return this.mActionView;}},{key:'invoke',value:function invoke(){if(this.mClickListener!=null&&this.mClickListener.onMenuItemClick(this)){return true;}if(this.mMenu.dispatchMenuItemSelected(this.mMenu.getRootMenu(),this)){return true;}if(this.mIntent!=null){try{this.mMenu.getContext().startActivity(this.mIntent);return true;}catch(e){android.util.Log.e("MenuItem","Can't find activity to handle intent; ignoring",e);}}return false;}}]);return MenuItem;}();view_7.MenuItem=MenuItem;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var MenuItem=android.view.MenuItem;var ArrayList=java.util.ArrayList;var Menu=function(){function Menu(context){_classCallCheck(this,Menu);this.mItems=new ArrayList();this.mVisibleItems=new ArrayList();this.mContext=context;}_createClass(Menu,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'add',value:function add(){if(arguments.length==1)return this.addInternal(0,0,0,arguments.length<=0?undefined:arguments[0]);return this.addInternal(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3]);}},{key:'addInternal',value:function addInternal(group,id,categoryOrder,title){var ordering=0;var item=new MenuItem(this,group,id,categoryOrder,ordering,title);this.mItems.add(item);this.onItemsChanged(true);return item;}},{key:'removeItem',value:function removeItem(id){this.removeItemAtInt(this.findItemIndex(id),true);}},{key:'removeGroup',value:function removeGroup(groupId){var i=this.findGroupIndex(groupId);if(i>=0){var maxRemovable=this.mItems.size()-i;var numRemoved=0;while(numRemoved++=this.mItems.size()){return;}this.mItems.remove(index);if(updateChildrenOnMenuViews){this.onItemsChanged(true);}}},{key:'clear',value:function clear(){this.mItems.clear();this.onItemsChanged(true);}},{key:'setGroupVisible',value:function setGroupVisible(group,visible){var N=this.mItems.size();var changedAtLeastOneItem=false;for(var i=0;i=0){this.setCurrentItemInternal(this.mRestoredCurItem,false,true);this.mRestoredCurItem=-1;}else if(!wasFirstLayout){this.populate();}else {this.requestLayout();}}if(this.mAdapterChangeListener!=null&&oldAdapter!=adapter){this.mAdapterChangeListener.onAdapterChanged(oldAdapter,adapter);}}},{key:'removeNonDecorViews',value:function removeNonDecorViews(){for(var i=0;i=this.mAdapter.getCount()){item=this.mAdapter.getCount()-1;}var pageLimit=this.mOffscreenPageLimit;if(item>this.mCurItem+pageLimit||item0){duration=4*Math.round(1000*Math.abs(distance/velocity));}else {var pageWidth=width*this.mAdapter.getPageWidth(this.mCurItem);var pageDelta=Math.abs(dx)/(pageWidth+this.mPageMargin);duration=Math.floor((pageDelta+1)*100);}duration=Math.min(duration,ViewPager.MAX_SETTLE_DURATION);this.mScroller.startScroll(sx,sy,dx,dy,duration);this.postInvalidateOnAnimation();}},{key:'addNewItem',value:function addNewItem(position,index){var ii=new ItemInfo();ii.position=position;ii.object=this.mAdapter.instantiateItem(this,position);ii.widthFactor=this.mAdapter.getPageWidth(position);if(index<0||index>=this.mItems.size()){this.mItems.add(ii);}else {this.mItems.add(index,ii);}return ii;}},{key:'dataSetChanged',value:function dataSetChanged(){var adapterCount=this.mAdapter.getCount();this.mExpectedAdapterCount=adapterCount;var needPopulate=this.mItems.size()=this.mCurItem){if(ii.position==this.mCurItem)curItem=ii;break;}}if(curItem==null&&N>0){curItem=this.addNewItem(this.mCurItem,curIndex);}if(curItem!=null){var extraWidthLeft=0;var itemIndex=curIndex-1;var _ii=itemIndex>=0?this.mItems.get(itemIndex):null;var clientWidth=this.getClientWidth();var leftWidthNeeded=clientWidth<=0?0:2-curItem.widthFactor+this.getPaddingLeft()/clientWidth;for(var pos=this.mCurItem-1;pos>=0;pos--){if(extraWidthLeft>=leftWidthNeeded&&pos=0?this.mItems.get(itemIndex):null;}}else if(_ii!=null&&pos==_ii.position){extraWidthLeft+=_ii.widthFactor;itemIndex--;_ii=itemIndex>=0?this.mItems.get(itemIndex):null;}else {_ii=this.addNewItem(pos,itemIndex+1);extraWidthLeft+=_ii.widthFactor;curIndex++;_ii=itemIndex>=0?this.mItems.get(itemIndex):null;}}var extraWidthRight=curItem.widthFactor;itemIndex=curIndex+1;if(extraWidthRight<2){_ii=itemIndex=rightWidthNeeded&&_pos2>endPos){if(_ii==null){break;}if(_pos2==_ii.position&&!_ii.scrolling){this.mItems.remove(itemIndex);this.mAdapter.destroyItem(this,_pos2,_ii.object);if(DEBUG){Log.i(TAG,"populate() - destroyItem() with pos: "+_pos2+" view: "+_ii.object);}_ii=itemIndex0?this.mPageMargin/width:0;if(oldCurInfo!=null){var oldCurPosition=oldCurInfo.position;if(oldCurPositionii.position&&itemIndexcurItem.position){var _itemIndex2=this.mItems.size()-1;var _ii4=null;var _offset4=oldCurInfo.offset;for(var _pos4=oldCurPosition-1;_pos4>=curItem.position&&_itemIndex2>=0;_pos4--){_ii4=this.mItems.get(_itemIndex2);while(_pos4<_ii4.position&&_itemIndex2>0){_itemIndex2--;_ii4=this.mItems.get(_itemIndex2);}while(_pos4>_ii4.position){_offset4-=this.mAdapter.getPageWidth(_pos4)+marginOffset;_pos4--;}_offset4-=_ii4.widthFactor+marginOffset;_ii4.offset=_offset4;}}}var itemCount=this.mItems.size();var offset=curItem.offset;var pos=curItem.position-1;this.mFirstOffset=curItem.position==0?curItem.offset:-Number.MAX_VALUE;this.mLastOffset=curItem.position==N-1?curItem.offset+curItem.widthFactor-1:Number.MAX_VALUE;for(var i=curIndex-1;i>=0;i--,pos--){var _ii5=this.mItems.get(i);while(pos>_ii5.position){offset-=this.mAdapter.getPageWidth(pos--)+marginOffset;}offset-=_ii5.widthFactor+marginOffset;_ii5.offset=offset;if(_ii5.position==0)this.mFirstOffset=offset;}offset=curItem.offset+curItem.widthFactor+marginOffset;pos=curItem.position+1;for(var _i64=curIndex+1;_i640&&!this.mItems.isEmpty()){var widthWithMargin=width-this.getPaddingLeft()-this.getPaddingRight()+margin;var oldWidthWithMargin=oldWidth-this.getPaddingLeft()-this.getPaddingRight()+oldMargin;var xpos=this.getScrollX();var pageOffset=xpos/oldWidthWithMargin;var newOffsetPixels=Math.floor(pageOffset*widthWithMargin);this.scrollTo(newOffsetPixels,this.getScrollY());if(!this.mScroller.isFinished()){var newDuration=this.mScroller.getDuration()-this.mScroller.timePassed();var targetInfo=this.infoForPosition(this.mCurItem);this.mScroller.startScroll(newOffsetPixels,0,Math.floor(targetInfo.offset*width),0,newDuration);}}else {var ii=this.infoForPosition(this.mCurItem);var scrollOffset=ii!=null?Math.min(ii.offset,this.mLastOffset):0;var scrollPos=Math.floor(scrollOffset*(width-this.getPaddingLeft()-this.getPaddingRight()));if(scrollPos!=this.getScrollX()){this.completeScroll(false);this.scrollTo(scrollPos,this.getScrollY());}}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var count=this.getChildCount();var width=r-l;var height=b-t;var paddingLeft=this.getPaddingLeft();var paddingTop=this.getPaddingTop();var paddingRight=this.getPaddingRight();var paddingBottom=this.getPaddingBottom();var scrollX=this.getScrollX();var decorCount=0;for(var i=0;i0){var scrollX=this.getScrollX();var paddingLeft=this.getPaddingLeft();var paddingRight=this.getPaddingRight();var width=this.getWidth();var childCount=this.getChildCount();for(var i=0;i0||x>this.getWidth()-this.mGutterSize&&dx<0;}},{key:'enableLayers',value:function enableLayers(enable){}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction()&MotionEvent.ACTION_MASK;if(action==MotionEvent.ACTION_CANCEL||action==MotionEvent.ACTION_UP){if(DEBUG)Log.v(TAG,"Intercept done!");this.resetTouch();return false;}if(action!=MotionEvent.ACTION_DOWN){if(this.mIsBeingDragged){if(DEBUG)Log.v(TAG,"Intercept returning true!");return true;}if(this.mIsUnableToDrag){if(DEBUG)Log.v(TAG,"Intercept returning false!");return false;}}switch(action){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==ViewPager.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);var x=ev.getX(pointerIndex);var dx=x-this.mLastMotionX;var xDiff=Math.abs(dx);var y=ev.getY(pointerIndex);var yDiff=Math.abs(y-this.mInitialMotionY);if(DEBUG)Log.v(TAG,"Moved x to "+x+","+y+" diff="+xDiff+","+yDiff);if(dx!=0&&!this.isGutterDrag(this.mLastMotionX,dx)&&this.canScroll(this,false,Math.floor(dx),Math.floor(x),Math.floor(y))){this.mLastMotionX=x;this.mLastMotionY=y;this.mIsUnableToDrag=true;return false;}if(xDiff>this.mTouchSlop&&xDiff*0.5>yDiff){if(DEBUG)Log.v(TAG,"Starting drag!");this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.mLastMotionX=dx>0?this.mInitialMotionX+this.mTouchSlop:this.mInitialMotionX-this.mTouchSlop;this.mLastMotionY=y;this.setScrollingCacheEnabled(true);}else if(yDiff>this.mTouchSlop){if(DEBUG)Log.v(TAG,"Starting unable to drag!");this.mIsUnableToDrag=true;}if(this.mIsBeingDragged){if(this.performDrag(x)){this.postInvalidateOnAnimation();}}break;}case MotionEvent.ACTION_DOWN:{this.mLastMotionX=this.mInitialMotionX=ev.getX();this.mLastMotionY=this.mInitialMotionY=ev.getY();this.mActivePointerId=ev.getPointerId(0);this.mIsUnableToDrag=false;this.mScroller.computeScrollOffset();if(this.mScrollState==ViewPager.SCROLL_STATE_SETTLING&&Math.abs(this.mScroller.getFinalX()-this.mScroller.getCurrX())>this.mCloseEnough){this.mScroller.abortAnimation();this.mPopulatePending=false;this.populate();this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);}else {this.completeScroll(false);this.mIsBeingDragged=false;}if(DEBUG)Log.v(TAG,"Down at "+this.mLastMotionX+","+this.mLastMotionY+" mIsBeingDragged="+this.mIsBeingDragged+"mIsUnableToDrag="+this.mIsUnableToDrag);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){if(this.mFakeDragging){return true;}if(ev.getAction()==MotionEvent.ACTION_DOWN&&ev.getEdgeFlags()!=0){return false;}if(this.mAdapter==null||this.mAdapter.getCount()==0){return false;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);var action=ev.getAction();var needsInvalidate=false;switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{this.mScroller.abortAnimation();this.mPopulatePending=false;this.populate();this.mLastMotionX=this.mInitialMotionX=ev.getX();this.mLastMotionY=this.mInitialMotionY=ev.getY();this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:if(!this.mIsBeingDragged){var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){needsInvalidate=this.resetTouch();break;}var x=ev.getX(pointerIndex);var xDiff=Math.abs(x-this.mLastMotionX);var y=ev.getY(pointerIndex);var yDiff=Math.abs(y-this.mLastMotionY);if(DEBUG)Log.v(TAG,"Moved x to "+x+","+y+" diff="+xDiff+","+yDiff);if(xDiff>this.mTouchSlop&&xDiff>yDiff){if(DEBUG)Log.v(TAG,"Starting drag!");this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.mLastMotionX=x-this.mInitialMotionX>0?this.mInitialMotionX+this.mTouchSlop:this.mInitialMotionX-this.mTouchSlop;this.mLastMotionY=y;this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.setScrollingCacheEnabled(true);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}}if(this.mIsBeingDragged){var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);var _x225=ev.getX(activePointerIndex);needsInvalidate=needsInvalidate||this.performDrag(_x225);}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=velocityTracker.getXVelocity(this.mActivePointerId);this.mPopulatePending=true;var width=this.getClientWidth();var scrollX=this.getScrollX();var ii=this.infoForCurrentScrollPosition();var currentPage=ii.position;var pageOffset=(scrollX/width-ii.offset)/ii.widthFactor;var _activePointerIndex=ev.findPointerIndex(this.mActivePointerId);var _x226=ev.getX(_activePointerIndex);var totalDelta=_x226-this.mInitialMotionX;var nextPage=this.determineTargetPage(currentPage,pageOffset,initialVelocity,totalDelta);this.setCurrentItemInternal(nextPage,true,true,initialVelocity);needsInvalidate=this.resetTouch();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged){this.scrollToItem(this.mCurItem,true,0,false);needsInvalidate=this.resetTouch();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();var _x227=ev.getX(index);this.mLastMotionX=_x227;this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionX=ev.getX(ev.findPointerIndex(this.mActivePointerId));break;}if(needsInvalidate){this.postInvalidateOnAnimation();}return true;}},{key:'resetTouch',value:function resetTouch(){var needsInvalidate=false;this.mActivePointerId=ViewPager.INVALID_POINTER;this.endDrag();return needsInvalidate;}},{key:'requestParentDisallowInterceptTouchEvent',value:function requestParentDisallowInterceptTouchEvent(disallowIntercept){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(disallowIntercept);}}},{key:'performDrag',value:function performDrag(x){var needsInvalidate=false;var deltaX=this.mLastMotionX-x;this.mLastMotionX=x;var oldScrollX=this.getScrollX();var scrollX=oldScrollX+deltaX;var width=this.getClientWidth();var leftBound=width*this.mFirstOffset;var rightBound=width*this.mLastOffset;var leftAbsolute=true;var rightAbsolute=true;var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);if(firstItem.position!=0){leftAbsolute=false;leftBound=firstItem.offset*width;}if(lastItem.position!=this.mAdapter.getCount()-1){rightAbsolute=false;rightBound=lastItem.offset*width;}if(scrollXrightBound){if(rightAbsolute){var _over=scrollX-rightBound;needsInvalidate=false;}scrollX-=deltaX/2;}this.mLastMotionX+=scrollX-Math.floor(scrollX);this.scrollTo(scrollX,this.getScrollY());this.pageScrolled(scrollX);return needsInvalidate;}},{key:'infoForCurrentScrollPosition',value:function infoForCurrentScrollPosition(){var width=this.getClientWidth();var scrollOffset=width>0?this.getScrollX()/width:0;var marginOffset=width>0?this.mPageMargin/width:0;var lastPos=-1;var lastOffset=0;var lastWidth=0;var first=true;var lastItem=null;for(var i=0;i=leftBound){if(scrollOffsetthis.mFlingDistance&&Math.abs(velocity)>this.mMinimumVelocity){targetPage=velocity>0?currentPage:currentPage+1;}else {var truncator=currentPage>=this.mCurItem?0.4:0.6;targetPage=Math.floor(currentPage+pageOffset+truncator);}if(this.mItems.size()>0){var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);targetPage=Math.max(firstItem.position,Math.min(targetPage,lastItem.position));}return targetPage;}},{key:'draw',value:function draw(canvas){_get2(Object.getPrototypeOf(ViewPager.prototype),'draw',this).call(this,canvas);var needsInvalidate=false;if(needsInvalidate){this.postInvalidateOnAnimation();}}},{key:'onDraw',value:function onDraw(canvas){_get2(Object.getPrototypeOf(ViewPager.prototype),'onDraw',this).call(this,canvas);if(this.mPageMargin>0&&this.mMarginDrawable!=null&&this.mItems.size()>0&&this.mAdapter!=null){var scrollX=this.getScrollX();var width=this.getWidth();var marginOffset=this.mPageMargin/width;var itemIndex=0;var ii=this.mItems.get(0);var offset=ii.offset;var itemCount=this.mItems.size();var firstPos=ii.position;var lastPos=this.mItems.get(itemCount-1).position;for(var pos=firstPos;posii.position&&itemIndexscrollX){this.mMarginDrawable.setBounds(drawAt,this.mTopPageBounds,drawAt+this.mPageMargin,this.mBottomPageBounds);this.mMarginDrawable.draw(canvas);}if(drawAt>scrollX+width){break;}}}}},{key:'beginFakeDrag',value:function beginFakeDrag(){if(this.mIsBeingDragged){return false;}this.mFakeDragging=true;this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.mInitialMotionX=this.mLastMotionX=0;if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else {this.mVelocityTracker.clear();}var time=android.os.SystemClock.uptimeMillis();var ev=MotionEvent.obtainWithAction(time,time,MotionEvent.ACTION_DOWN,0,0,0);this.mVelocityTracker.addMovement(ev);ev.recycle();this.mFakeDragBeginTime=time;return true;}},{key:'endFakeDrag',value:function endFakeDrag(){if(!this.mFakeDragging){throw new Error("No fake drag in progress. Call beginFakeDrag first.");}var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));this.mPopulatePending=true;var width=this.getClientWidth();var scrollX=this.getScrollX();var ii=this.infoForCurrentScrollPosition();var currentPage=ii.position;var pageOffset=(scrollX/width-ii.offset)/ii.widthFactor;var totalDelta=Math.floor(this.mLastMotionX-this.mInitialMotionX);var nextPage=this.determineTargetPage(currentPage,pageOffset,initialVelocity,totalDelta);this.setCurrentItemInternal(nextPage,true,true,initialVelocity);this.endDrag();this.mFakeDragging=false;}},{key:'fakeDragBy',value:function fakeDragBy(xOffset){if(!this.mFakeDragging){throw new Error("No fake drag in progress. Call beginFakeDrag first.");}this.mLastMotionX+=xOffset;var oldScrollX=this.getScrollX();var scrollX=oldScrollX-xOffset;var width=this.getClientWidth();var leftBound=width*this.mFirstOffset;var rightBound=width*this.mLastOffset;var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);if(firstItem.position!=0){leftBound=firstItem.offset*width;}if(lastItem.position!=this.mAdapter.getCount()-1){rightBound=lastItem.offset*width;}if(scrollXrightBound){scrollX=rightBound;}this.mLastMotionX+=scrollX-Math.floor(scrollX);this.scrollTo(Math.floor(scrollX),this.getScrollY());this.pageScrolled(Math.floor(scrollX));var time=android.os.SystemClock.uptimeMillis();var ev=MotionEvent.obtainWithAction(this.mFakeDragBeginTime,time,MotionEvent.ACTION_MOVE,this.mLastMotionX,0,0);this.mVelocityTracker.addMovement(ev);ev.recycle();}},{key:'isFakeDragging',value:function isFakeDragging(){return this.mFakeDragging;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=ev.getActionIndex();var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionX=ev.getX(newPointerIndex);this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'endDrag',value:function endDrag(){this.mIsBeingDragged=false;this.mIsUnableToDrag=false;if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'setScrollingCacheEnabled',value:function setScrollingCacheEnabled(enabled){if(this.mScrollingCacheEnabled!=enabled){this.mScrollingCacheEnabled=enabled;if(ViewPager.USE_CACHE){var size=this.getChildCount();for(var i=0;iwidth*this.mFirstOffset;}else if(direction>0){return scrollX=0;i--){var child=group.getChildAt(i);if(x+scrollX>=child.getLeft()&&x+scrollX=child.getTop()&&y+scrollY ").append(_parent3.toString());}Log.e(TAG,"arrowScroll tried to find focus based on non-child "+"current focused view "+sb.toString());currentFocused=null;}}var handled=false;var nextFocused=android.view.FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);if(nextFocused!=null&&nextFocused!=currentFocused){if(direction==View.FOCUS_LEFT){var nextLeft=this.getChildRectInPagerCoordinates(this.mTempRect,nextFocused).left;var currLeft=this.getChildRectInPagerCoordinates(this.mTempRect,currentFocused).left;if(currentFocused!=null&&nextLeft>=currLeft){handled=this.pageLeft();}else {handled=nextFocused.requestFocus();}}else if(direction==View.FOCUS_RIGHT){var _nextLeft=this.getChildRectInPagerCoordinates(this.mTempRect,nextFocused).left;var _currLeft=this.getChildRectInPagerCoordinates(this.mTempRect,currentFocused).left;if(currentFocused!=null&&_nextLeft<=_currLeft){handled=this.pageRight();}else {handled=nextFocused.requestFocus();}}}else if(direction==View.FOCUS_LEFT||direction==View.FOCUS_BACKWARD){handled=this.pageLeft();}else if(direction==View.FOCUS_RIGHT||direction==View.FOCUS_FORWARD){handled=this.pageRight();}return handled;}},{key:'getChildRectInPagerCoordinates',value:function getChildRectInPagerCoordinates(outRect,child){if(outRect==null){outRect=new Rect();}if(child==null){outRect.set(0,0,0,0);return outRect;}outRect.left=child.getLeft();outRect.right=child.getRight();outRect.top=child.getTop();outRect.bottom=child.getBottom();var parent=child.getParent();while(parent instanceof ViewGroup&&parent!=this){var group=parent;outRect.left+=group.getLeft();outRect.right+=group.getRight();outRect.top+=group.getTop();outRect.bottom+=group.getBottom();parent=group.getParent();}return outRect;}},{key:'pageLeft',value:function pageLeft(){if(this.mCurItem>0){this.setCurrentItem(this.mCurItem-1,true);return true;}return false;}},{key:'pageRight',value:function pageRight(){if(this.mAdapter!=null&&this.mCurItem0){duration=4*Math.round(1000*Math.abs(distance/velocity));}else {var range=Math.abs(delta)/motionRange;duration=Math.floor((range+1)*ViewDragHelper.BASE_SETTLE_DURATION);}return Math.min(duration,ViewDragHelper.MAX_SETTLE_DURATION);}},{key:'clampMag',value:function clampMag(value,absMin,absMax){var absValue=Math.abs(value);if(absValueabsMax)return value>0?absMax:-absMax;return value;}},{key:'distanceInfluenceForSnapDuration',value:function distanceInfluenceForSnapDuration(f){f-=0.5;f*=0.3*Math.PI/2.0;return Math.sin(f);}},{key:'flingCapturedView',value:function flingCapturedView(minLeft,minTop,maxLeft,maxTop){if(!this.mReleaseInProgress){throw Error('new IllegalStateException("Cannot flingCapturedView outside of a call to " + "Callback#onViewReleased")');}this.mScroller.fling(this.mCapturedView.getLeft(),this.mCapturedView.getTop(),Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)),Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)),minLeft,maxLeft,minTop,maxTop);this.setDragState(ViewDragHelper.STATE_SETTLING);}},{key:'continueSettling',value:function continueSettling(deferCallbacks){if(this.mDragState==ViewDragHelper.STATE_SETTLING){var keepGoing=this.mScroller.computeScrollOffset();var x=this.mScroller.getCurrX();var y=this.mScroller.getCurrY();var dx=x-this.mCapturedView.getLeft();var dy=y-this.mCapturedView.getTop();if(dx!=0){this.mCapturedView.offsetLeftAndRight(dx);}if(dy!=0){this.mCapturedView.offsetTopAndBottom(dy);}if(dx!=0||dy!=0){this.mCallback.onViewPositionChanged(this.mCapturedView,x,y,dx,dy);}if(keepGoing&&x==this.mScroller.getFinalX()&&y==this.mScroller.getFinalY()){this.mScroller.abortAnimation();keepGoing=this.mScroller.isFinished();}if(!keepGoing){if(deferCallbacks){this.mParentView.post(this.mSetIdleRunnable);}else {this.setDragState(ViewDragHelper.STATE_IDLE);}}}return this.mDragState==ViewDragHelper.STATE_SETTLING;}},{key:'dispatchViewReleased',value:function dispatchViewReleased(xvel,yvel){this.mReleaseInProgress=true;this.mCallback.onViewReleased(this.mCapturedView,xvel,yvel);this.mReleaseInProgress=false;if(this.mDragState==ViewDragHelper.STATE_DRAGGING){this.setDragState(ViewDragHelper.STATE_IDLE);}}},{key:'clearMotionHistory',value:function clearMotionHistory(pointerId){if(this.mInitialMotionX==null){return;}if(pointerId==null){this.mInitialMotionX=[];this.mInitialMotionY=[];this.mLastMotionX=[];this.mLastMotionY=[];this.mInitialEdgesTouched=[];this.mEdgeDragsInProgress=[];this.mEdgeDragsLocked=[];this.mPointersDown=0;}else {this.mInitialMotionX[pointerId]=0;this.mInitialMotionY[pointerId]=0;this.mLastMotionX[pointerId]=0;this.mLastMotionY[pointerId]=0;this.mInitialEdgesTouched[pointerId]=0;this.mEdgeDragsInProgress[pointerId]=0;this.mEdgeDragsLocked[pointerId]=0;this.mPointersDown&=~(1<=0;i--){var child=group.getChildAt(i);if(x+scrollX>=child.getLeft()&&x+scrollX=child.getTop()&&y+scrollYthis.mTouchSlop;}},{key:'checkTouchSlop',value:function checkTouchSlop(){if(arguments.length===1)return this._checkTouchSlop_1(arguments.length<=0?undefined:arguments[0]);if(arguments.length===2)return this._checkTouchSlop_2(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]);if(arguments.length===3)return this._checkTouchSlop_3(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2]);return false;}},{key:'_checkTouchSlop_3',value:function _checkTouchSlop_3(child,dx,dy){if(child==null){return false;}var checkHorizontal=this.mCallback.getViewHorizontalDragRange(child)>0;var checkVertical=this.mCallback.getViewVerticalDragRange(child)>0;if(checkHorizontal&&checkVertical){return dx*dx+dy*dy>this.mTouchSlop*this.mTouchSlop;}else if(checkHorizontal){return Math.abs(dx)>this.mTouchSlop;}else if(checkVertical){return Math.abs(dy)>this.mTouchSlop;}return false;}},{key:'_checkTouchSlop_1',value:function _checkTouchSlop_1(directions){var count=this.mInitialMotionX.length;for(var i=0;ithis.mTouchSlop*this.mTouchSlop;}else if(checkHorizontal){return Math.abs(dx)>this.mTouchSlop;}else if(checkVertical){return Math.abs(dy)>this.mTouchSlop;}return false;}},{key:'isEdgeTouched',value:function isEdgeTouched(edges,pointerId){if(pointerId==null){var count=this.mInitialEdgesTouched.length;for(var i=0;i=view.getLeft()&&x=view.getTop()&&y=0;i--){var child=this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(i));if(x>=child.getLeft()&&x=child.getTop()&&ythis.mParentView.getRight()-this.mEdgeSize)result|=ViewDragHelper.EDGE_RIGHT;if(y>this.mParentView.getBottom()-this.mEdgeSize)result|=ViewDragHelper.EDGE_BOTTOM;return result;}}],[{key:'create',value:function create(){for(var _len43=arguments.length,args=Array(_len43),_key44=0;_key44<_len43;_key44++){args[_key44]=arguments[_key44];}if(args.length===2)return new ViewDragHelper(args[0],args[1]);else if(args.length===3){var forParent=args[0];var sensitivity=args[1];var cb=args[2];var helper=ViewDragHelper.create(forParent,cb);helper.mTouchSlop=Math.floor(helper.mTouchSlop*(1/sensitivity));return helper;}}}]);return ViewDragHelper;}();ViewDragHelper.TAG="ViewDragHelper";ViewDragHelper.INVALID_POINTER=-1;ViewDragHelper.STATE_IDLE=0;ViewDragHelper.STATE_DRAGGING=1;ViewDragHelper.STATE_SETTLING=2;ViewDragHelper.EDGE_LEFT=1<<0;ViewDragHelper.EDGE_RIGHT=1<<1;ViewDragHelper.EDGE_TOP=1<<2;ViewDragHelper.EDGE_BOTTOM=1<<3;ViewDragHelper.EDGE_ALL=ViewDragHelper.EDGE_LEFT|ViewDragHelper.EDGE_TOP|ViewDragHelper.EDGE_RIGHT|ViewDragHelper.EDGE_BOTTOM;ViewDragHelper.DIRECTION_HORIZONTAL=1<<0;ViewDragHelper.DIRECTION_VERTICAL=1<<1;ViewDragHelper.DIRECTION_ALL=ViewDragHelper.DIRECTION_HORIZONTAL|ViewDragHelper.DIRECTION_VERTICAL;ViewDragHelper.EDGE_SIZE=20;ViewDragHelper.BASE_SETTLE_DURATION=256;ViewDragHelper.MAX_SETTLE_DURATION=600;ViewDragHelper.sInterpolator=function(){var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'getInterpolation',value:function getInterpolation(t){t-=1.0;return t*t*t*t*t+1.0;}}]);return _Inner;}();return new _Inner();}();widget.ViewDragHelper=ViewDragHelper;(function(ViewDragHelper){var Callback=function(){function Callback(){_classCallCheck(this,Callback);}_createClass(Callback,[{key:'onViewDragStateChanged',value:function onViewDragStateChanged(state){}},{key:'onViewPositionChanged',value:function onViewPositionChanged(changedView,left,top,dx,dy){}},{key:'onViewCaptured',value:function onViewCaptured(capturedChild,activePointerId){}},{key:'onViewReleased',value:function onViewReleased(releasedChild,xvel,yvel){}},{key:'onEdgeTouched',value:function onEdgeTouched(edgeFlags,pointerId){}},{key:'onEdgeLock',value:function onEdgeLock(edgeFlags){return false;}},{key:'onEdgeDragStarted',value:function onEdgeDragStarted(edgeFlags,pointerId){}},{key:'getOrderedChildIndex',value:function getOrderedChildIndex(index){return index;}},{key:'getViewHorizontalDragRange',value:function getViewHorizontalDragRange(child){return 0;}},{key:'getViewVerticalDragRange',value:function getViewVerticalDragRange(child){return 0;}},{key:'clampViewPositionHorizontal',value:function clampViewPositionHorizontal(child,left,dx){return 0;}},{key:'clampViewPositionVertical',value:function clampViewPositionVertical(child,top,dy){return 0;}}]);return Callback;}();ViewDragHelper.Callback=Callback;})(ViewDragHelper=widget.ViewDragHelper||(widget.ViewDragHelper={}));})(widget=v4.widget||(v4.widget={}));})(v4=support.v4||(support.v4={}));})(support=android.support||(android.support={}));})(android||(android={}));var android;(function(android){var support;(function(support){var v4;(function(v4){var widget;(function(widget){var Paint=android.graphics.Paint;var PixelFormat=android.graphics.PixelFormat;var SystemClock=android.os.SystemClock;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var ViewDragHelper=android.support.v4.widget.ViewDragHelper;var DrawerLayout=function(_ViewGroup6){_inherits(DrawerLayout,_ViewGroup6);function DrawerLayout(context,bindElement,defStyle){_classCallCheck(this,DrawerLayout);var _this174=_possibleConstructorReturn(this,Object.getPrototypeOf(DrawerLayout).call(this,context,bindElement,defStyle));_this174.mMinDrawerMargin=0;_this174.mScrimColor=DrawerLayout.DEFAULT_SCRIM_COLOR;_this174.mScrimOpacity=0;_this174.mScrimPaint=new Paint();_this174.mDrawerState=0;_this174.mFirstLayout=true;_this174.mLockModeLeft=0;_this174.mLockModeRight=0;_this174.mInitialMotionX=0;_this174.mInitialMotionY=0;var density=_this174.getResources().getDisplayMetrics().density;_this174.mMinDrawerMargin=Math.floor(DrawerLayout.MIN_DRAWER_MARGIN*density+0.5);var minVel=DrawerLayout.MIN_FLING_VELOCITY*density;_this174.mLeftCallback=new DrawerLayout.ViewDragCallback(_this174,Gravity.LEFT);_this174.mRightCallback=new DrawerLayout.ViewDragCallback(_this174,Gravity.RIGHT);_this174.mLeftDragger=ViewDragHelper.create(_this174,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this174.mLeftCallback);_this174.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);_this174.mLeftDragger.setMinVelocity(minVel);_this174.mLeftCallback.setDragger(_this174.mLeftDragger);_this174.mRightDragger=ViewDragHelper.create(_this174,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this174.mRightCallback);_this174.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);_this174.mRightDragger.setMinVelocity(minVel);_this174.mRightCallback.setDragger(_this174.mRightDragger);_this174.setFocusableInTouchMode(true);_this174.setMotionEventSplittingEnabled(false);return _this174;}_createClass(DrawerLayout,[{key:'setDrawerShadow',value:function setDrawerShadow(shadowDrawable,gravity){var absGravity=Gravity.getAbsoluteGravity(gravity,this.getLayoutDirection());if((absGravity&Gravity.LEFT)==Gravity.LEFT){this.mShadowLeft=shadowDrawable;this.invalidate();}if((absGravity&Gravity.RIGHT)==Gravity.RIGHT){this.mShadowRight=shadowDrawable;this.invalidate();}}},{key:'setScrimColor',value:function setScrimColor(color){this.mScrimColor=color;this.invalidate();}},{key:'setDrawerListener',value:function setDrawerListener(listener){this.mListener=listener;}},{key:'setDrawerLockMode',value:function setDrawerLockMode(lockMode,edgeGravityOrView){if(edgeGravityOrView==null){this.setDrawerLockMode(lockMode,Gravity.LEFT);this.setDrawerLockMode(lockMode,Gravity.RIGHT);return;}if(edgeGravityOrView instanceof View){if(!this.isDrawerView(edgeGravityOrView)){throw Error('new IllegalArgumentException("View " + drawerView + " is not a " + "drawer with appropriate layout_gravity")');}var gravity=edgeGravityOrView.getLayoutParams().gravity;this.setDrawerLockMode(lockMode,gravity);return;}var edgeGravity=edgeGravityOrView;var absGravity=Gravity.getAbsoluteGravity(edgeGravity,this.getLayoutDirection());if(absGravity==Gravity.LEFT){this.mLockModeLeft=lockMode;}else if(absGravity==Gravity.RIGHT){this.mLockModeRight=lockMode;}if(lockMode!=DrawerLayout.LOCK_MODE_UNLOCKED){var helper=absGravity==Gravity.LEFT?this.mLeftDragger:this.mRightDragger;helper.cancel();}switch(lockMode){case DrawerLayout.LOCK_MODE_LOCKED_OPEN:var toOpen=this.findDrawerWithGravity(absGravity);if(toOpen!=null){this.openDrawer(toOpen);}break;case DrawerLayout.LOCK_MODE_LOCKED_CLOSED:var toClose=this.findDrawerWithGravity(absGravity);if(toClose!=null){this.closeDrawer(toClose);}break;}}},{key:'getDrawerLockMode',value:function getDrawerLockMode(edgeGravityOrView){if(edgeGravityOrView instanceof View){var drawerView=edgeGravityOrView;var absGravity=this.getDrawerViewAbsoluteGravity(drawerView);if(absGravity==Gravity.LEFT){return this.mLockModeLeft;}else if(absGravity==Gravity.RIGHT){return this.mLockModeRight;}return DrawerLayout.LOCK_MODE_UNLOCKED;}else {var edgeGravity=edgeGravityOrView;var _absGravity=Gravity.getAbsoluteGravity(edgeGravity,this.getLayoutDirection());if(_absGravity==Gravity.LEFT){return this.mLockModeLeft;}else if(_absGravity==Gravity.RIGHT){return this.mLockModeRight;}return DrawerLayout.LOCK_MODE_UNLOCKED;}}},{key:'updateDrawerState',value:function updateDrawerState(forGravity,activeState,activeDrawer){var leftState=this.mLeftDragger.getViewDragState();var rightState=this.mRightDragger.getViewDragState();var state=undefined;if(leftState==DrawerLayout.STATE_DRAGGING||rightState==DrawerLayout.STATE_DRAGGING){state=DrawerLayout.STATE_DRAGGING;}else if(leftState==DrawerLayout.STATE_SETTLING||rightState==DrawerLayout.STATE_SETTLING){state=DrawerLayout.STATE_SETTLING;}else {state=DrawerLayout.STATE_IDLE;}if(activeDrawer!=null&&activeState==DrawerLayout.STATE_IDLE){var lp=activeDrawer.getLayoutParams();if(lp.onScreen==0){this.dispatchOnDrawerClosed(activeDrawer);}else if(lp.onScreen==1){this.dispatchOnDrawerOpened(activeDrawer);}}if(state!=this.mDrawerState){this.mDrawerState=state;if(this.mListener!=null){this.mListener.onDrawerStateChanged(state);}}}},{key:'dispatchOnDrawerClosed',value:function dispatchOnDrawerClosed(drawerView){var lp=drawerView.getLayoutParams();if(lp.knownOpen){lp.knownOpen=false;if(this.mListener!=null){this.mListener.onDrawerClosed(drawerView);}}}},{key:'dispatchOnDrawerOpened',value:function dispatchOnDrawerOpened(drawerView){var lp=drawerView.getLayoutParams();if(!lp.knownOpen){lp.knownOpen=true;if(this.mListener!=null){this.mListener.onDrawerOpened(drawerView);}}}},{key:'dispatchOnDrawerSlide',value:function dispatchOnDrawerSlide(drawerView,slideOffset){if(this.mListener!=null){this.mListener.onDrawerSlide(drawerView,slideOffset);}}},{key:'setDrawerViewOffset',value:function setDrawerViewOffset(drawerView,slideOffset){var lp=drawerView.getLayoutParams();if(slideOffset==lp.onScreen){return;}lp.onScreen=slideOffset;this.dispatchOnDrawerSlide(drawerView,slideOffset);}},{key:'getDrawerViewOffset',value:function getDrawerViewOffset(drawerView){return drawerView.getLayoutParams().onScreen;}},{key:'getDrawerViewAbsoluteGravity',value:function getDrawerViewAbsoluteGravity(drawerView){var gravity=drawerView.getLayoutParams().gravity;return Gravity.getAbsoluteGravity(gravity,this.getLayoutDirection());}},{key:'checkDrawerViewAbsoluteGravity',value:function checkDrawerViewAbsoluteGravity(drawerView,checkFor){var absGravity=this.getDrawerViewAbsoluteGravity(drawerView);return (absGravity&checkFor)==checkFor;}},{key:'findOpenDrawer',value:function findOpenDrawer(){var childCount=this.getChildCount();for(var i=0;i_height-lp.bottomMargin){childTop=_height-lp.bottomMargin-childHeight;}child.layout(childLeft,childTop,childLeft+childWidth,childTop+childHeight);break;}}if(changeOffset){this.setDrawerViewOffset(child,newOffset);}var newVisibility=lp.onScreen>0?DrawerLayout.VISIBLE:DrawerLayout.INVISIBLE;if(child.getVisibility()!=newVisibility){child.setVisibility(newVisibility);}}}this.mInLayout=false;this.mFirstLayout=false;}},{key:'requestLayout',value:function requestLayout(){if(!this.mInLayout){_get2(Object.getPrototypeOf(DrawerLayout.prototype),'requestLayout',this).call(this);}}},{key:'computeScroll',value:function computeScroll(){var childCount=this.getChildCount();var scrimOpacity=0;for(var i=0;iclipLeft)clipLeft=vright;}else {var vleft=v.getLeft();if(vleft0&&drawingContent){var baseAlpha=(this.mScrimColor&0xff000000)>>>24;var imag=Math.floor(baseAlpha*this.mScrimOpacity);var color=imag<<24|this.mScrimColor&0xffffff;this.mScrimPaint.setColor(color);canvas.drawRect(clipLeft,0,clipRight,this.getHeight(),this.mScrimPaint);}else if(this.mShadowLeft!=null&&this.checkDrawerViewAbsoluteGravity(child,Gravity.LEFT)){var shadowWidth=this.mShadowLeft.getIntrinsicWidth();var childRight=child.getRight();var drawerPeekDistance=this.mLeftDragger.getEdgeSize();var alpha=Math.max(0,Math.min(childRight/drawerPeekDistance,1.));this.mShadowLeft.setBounds(childRight,child.getTop(),childRight+shadowWidth,child.getBottom());this.mShadowLeft.setAlpha(Math.floor(0xff*alpha));this.mShadowLeft.draw(canvas);}else if(this.mShadowRight!=null&&this.checkDrawerViewAbsoluteGravity(child,Gravity.RIGHT)){var _shadowWidth=this.mShadowRight.getIntrinsicWidth();var childLeft=child.getLeft();var showing=this.getWidth()-childLeft;var _drawerPeekDistance=this.mRightDragger.getEdgeSize();var _alpha=Math.max(0,Math.min(showing/_drawerPeekDistance,1.));this.mShadowRight.setBounds(childLeft-_shadowWidth,child.getTop(),childLeft,child.getBottom());this.mShadowRight.setAlpha(Math.floor(0xff*_alpha));this.mShadowRight.draw(canvas);}return result;}},{key:'isContentView',value:function isContentView(child){return child.getLayoutParams().gravity==Gravity.NO_GRAVITY;}},{key:'isDrawerView',value:function isDrawerView(child){var gravity=child.getLayoutParams().gravity;var absGravity=Gravity.getAbsoluteGravity(gravity,child.getLayoutDirection());return (absGravity&(Gravity.LEFT|Gravity.RIGHT))!=0;}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getActionMasked();var leftIntercept=this.mLeftDragger.shouldInterceptTouchEvent(ev);var rightIntercept=this.mRightDragger.shouldInterceptTouchEvent(ev);var interceptForDrag=leftIntercept||rightIntercept;var interceptForTap=false;switch(action){case MotionEvent.ACTION_DOWN:{var x=ev.getX();var y=ev.getY();this.mInitialMotionX=x;this.mInitialMotionY=y;if(this.mScrimOpacity>0&&this.isContentView(this.mLeftDragger.findTopChildUnder(Math.floor(x),Math.floor(y)))){interceptForTap=true;}this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;break;}case MotionEvent.ACTION_MOVE:{if(this.mLeftDragger.checkTouchSlop(ViewDragHelper.DIRECTION_ALL)){this.mLeftCallback.removeCallbacks();this.mRightCallback.removeCallbacks();}break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:{this.closeDrawers(true);this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;}}return interceptForDrag||interceptForTap||this.hasPeekingDrawer()||this.mChildrenCanceledTouch;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.mLeftDragger.processTouchEvent(ev);this.mRightDragger.processTouchEvent(ev);var action=ev.getAction();var wantTouchEvents=true;switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{var x=ev.getX();var y=ev.getY();this.mInitialMotionX=x;this.mInitialMotionY=y;this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;break;}case MotionEvent.ACTION_UP:{var _x234=ev.getX();var _y9=ev.getY();var peekingOnly=true;var touchedView=this.mLeftDragger.findTopChildUnder(Math.floor(_x234),Math.floor(_y9));if(touchedView!=null&&this.isContentView(touchedView)){var dx=_x234-this.mInitialMotionX;var dy=_y9-this.mInitialMotionY;var slop=this.mLeftDragger.getTouchSlop();if(dx*dx+dy*dy0;}},{key:'_isDrawerVisible_gravity',value:function _isDrawerVisible_gravity(drawerGravity){var drawerView=this.findDrawerWithGravity(drawerGravity);if(drawerView!=null){return this.isDrawerVisible(drawerView);}return false;}},{key:'hasPeekingDrawer',value:function hasPeekingDrawer(){var childCount=this.getChildCount();for(var i=0;i0||xvel==0&&offset>0.5?0:-childWidth;}else {var width=this._DrawerLayout_this.getWidth();left=xvel<0||xvel==0&&offset>0.5?width-childWidth:width;}this.mDragger.settleCapturedViewAt(left,releasedChild.getTop());this._DrawerLayout_this.invalidate();}},{key:'onEdgeTouched',value:function onEdgeTouched(edgeFlags,pointerId){this._DrawerLayout_this.postDelayed(this.mPeekRunnable,DrawerLayout.PEEK_DELAY);}},{key:'peekDrawer',value:function peekDrawer(){var toCapture=undefined;var childLeft=undefined;var peekDistance=this.mDragger.getEdgeSize();var leftEdge=this.mAbsGravity==Gravity.LEFT;if(leftEdge){toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);childLeft=(toCapture!=null?-toCapture.getWidth():0)+peekDistance;}else {toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);childLeft=this._DrawerLayout_this.getWidth()-peekDistance;}if(toCapture!=null&&(leftEdge&&toCapture.getLeft()childLeft)&&this._DrawerLayout_this.getDrawerLockMode(toCapture)==DrawerLayout.LOCK_MODE_UNLOCKED){var lp=toCapture.getLayoutParams();this.mDragger.smoothSlideViewTo(toCapture,childLeft,toCapture.getTop());lp.isPeeking=true;this._DrawerLayout_this.invalidate();this.closeOtherDrawer();this._DrawerLayout_this.cancelChildViewTouch();}}},{key:'onEdgeLock',value:function onEdgeLock(edgeFlags){if(DrawerLayout.ALLOW_EDGE_LOCK){var drawer=this._DrawerLayout_this.findDrawerWithGravity(this.mAbsGravity);if(drawer!=null&&!this._DrawerLayout_this.isDrawerOpen(drawer)){this._DrawerLayout_this.closeDrawer(drawer);}return true;}return false;}},{key:'onEdgeDragStarted',value:function onEdgeDragStarted(edgeFlags,pointerId){var toCapture=undefined;if((edgeFlags&ViewDragHelper.EDGE_LEFT)==ViewDragHelper.EDGE_LEFT){toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);}else {toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);}if(toCapture!=null&&this._DrawerLayout_this.getDrawerLockMode(toCapture)==DrawerLayout.LOCK_MODE_UNLOCKED){this.mDragger.captureChildView(toCapture,pointerId);}}},{key:'getViewHorizontalDragRange',value:function getViewHorizontalDragRange(child){return child.getWidth();}},{key:'clampViewPositionHorizontal',value:function clampViewPositionHorizontal(child,left,dx){if(this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child,Gravity.LEFT)){return Math.max(-child.getWidth(),Math.min(left,0));}else {var width=this._DrawerLayout_this.getWidth();return Math.max(width-child.getWidth(),Math.min(left,width));}}},{key:'clampViewPositionVertical',value:function clampViewPositionVertical(child,top,dy){return child.getTop();}}]);return ViewDragCallback;}(ViewDragHelper.Callback);DrawerLayout.ViewDragCallback=ViewDragCallback;var LayoutParams=function(_ViewGroup$MarginLayo3){_inherits(LayoutParams,_ViewGroup$MarginLayo3);function LayoutParams(){var _Object$getPrototypeO15;_classCallCheck(this,LayoutParams);for(var _len44=arguments.length,args=Array(_len44),_key45=0;_key45<_len44;_key45++){args[_key45]=arguments[_key45];}var _this176=_possibleConstructorReturn(this,(_Object$getPrototypeO15=Object.getPrototypeOf(LayoutParams)).call.apply(_Object$getPrototypeO15,[this].concat(_toConsumableArray(args.length==3?[args[0],args[1]]:args))));_this176.gravity=Gravity.NO_GRAVITY;_this176.onScreen=0;_this176._attrBinder.addAttr('gravity',function(value){_this176.gravity=_this176._attrBinder.parseGravity(value,_this176.gravity);});return _this176;}return LayoutParams;}(ViewGroup.MarginLayoutParams);DrawerLayout.LayoutParams=LayoutParams;})(DrawerLayout=widget.DrawerLayout||(widget.DrawerLayout={}));})(widget=v4.widget||(v4.widget={}));})(v4=support.v4||(support.v4={}));})(support=android.support||(android.support={}));})(android||(android={}));var com;(function(com){var jakewharton;(function(jakewharton){var salvage;(function(salvage){var SparseArray=android.util.SparseArray;var PagerAdapter=android.support.v4.view.PagerAdapter;var RecyclingPagerAdapter=function(_PagerAdapter){_inherits(RecyclingPagerAdapter,_PagerAdapter);function RecyclingPagerAdapter(){_classCallCheck(this,RecyclingPagerAdapter);var _this177=_possibleConstructorReturn(this,Object.getPrototypeOf(RecyclingPagerAdapter).call(this));_this177.recycleBin=new RecycleBin();_this177.recycleBin.setViewTypeCount(_this177.getViewTypeCount());return _this177;}_createClass(RecyclingPagerAdapter,[{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.recycleBin.scrapActiveViews();_get2(Object.getPrototypeOf(RecyclingPagerAdapter.prototype),'notifyDataSetChanged',this).call(this);}},{key:'instantiateItem',value:function instantiateItem(container,position){var viewType=this.getItemViewType(position);var view=null;if(viewType!=RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE){view=this.recycleBin.getScrapView(position,viewType);}view=this.getView(position,view,container);container.addView(view);return view;}},{key:'destroyItem',value:function destroyItem(container,position,object){var view=object;container.removeView(view);var viewType=this.getItemViewType(position);if(viewType!=RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE){this.recycleBin.addScrapView(view,position,viewType);}}},{key:'isViewFromObject',value:function isViewFromObject(view,object){return view===object;}},{key:'getViewTypeCount',value:function getViewTypeCount(){return 1;}},{key:'getItemViewType',value:function getItemViewType(position){return 0;}}]);return RecyclingPagerAdapter;}(PagerAdapter);RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE=-1;salvage.RecyclingPagerAdapter=RecyclingPagerAdapter;var RecycleBin=function(){function RecycleBin(){_classCallCheck(this,RecycleBin);this.activeViews=[];this.activeViewTypes=[];this.viewTypeCount=0;}_createClass(RecycleBin,[{key:'setViewTypeCount',value:function setViewTypeCount(viewTypeCount){if(viewTypeCount<1){throw new Error("Can't have a viewTypeCount < 1");}var scrapViews=new Array(viewTypeCount);for(var i=0;i=0;}},{key:'getScrapView',value:function getScrapView(position,viewType){if(this.viewTypeCount==1){return this.retrieveFromScrap(this.currentScrapViews,position);}else if(viewType>=0&&viewType1;var scrapViews=this.currentScrapViews;var count=activeViews.length;for(var i=count-1;i>=0;i--){var victim=activeViews[i];if(victim!=null){var whichScrap=activeViewTypes[i];activeViews[i]=null;activeViewTypes[i]=-1;if(!this.shouldRecycleViewType(whichScrap)){continue;}if(multipleScraps){scrapViews=this.scrapViews[whichScrap];}scrapViews.put(i,victim);}}this.pruneScrapViews();}},{key:'pruneScrapViews',value:function pruneScrapViews(){var maxViews=this.activeViews.length;var viewTypeCount=this.viewTypeCount;var scrapViews=this.scrapViews;for(var i=0;i0){for(var i=0;i=this.mTouchSlop;}if(this.mIsDragging){this.mListener.onDrag(dx,dy);this.mLastTouchX=x;this.mLastTouchY=y;if(null!=this.mVelocityTracker){this.mVelocityTracker.addMovement(ev);}}break;}case MotionEvent.ACTION_CANCEL:{if(null!=this.mVelocityTracker){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}case MotionEvent.ACTION_UP:{if(this.mIsDragging){if(null!=this.mVelocityTracker){this.mLastTouchX=this.getActiveX(ev);this.mLastTouchY=this.getActiveY(ev);this.mVelocityTracker.addMovement(ev);this.mVelocityTracker.computeCurrentVelocity(1000);var vX=this.mVelocityTracker.getXVelocity(),vY=this.mVelocityTracker.getYVelocity();if(Math.max(Math.abs(vX),Math.abs(vY))>=this.mMinimumVelocity){this.mListener.onFling(this.mLastTouchX,this.mLastTouchY,-vX,-vY);}}}if(null!=this.mVelocityTracker){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}}return true;}}]);return GestureDetector;}();GestureDetector.LOG_TAG="CupcakeGestureDetector";GestureDetector.INVALID_POINTER_ID=-1;photoview.GestureDetector=GestureDetector;})(photoview=senab.photoview||(senab.photoview={}));})(senab=co.senab||(co.senab={}));})(co=uk.co||(uk.co={}));})(uk||(uk={}));var uk;(function(uk){var co;(function(co){var senab;(function(senab){var photoview;(function(photoview){var IPhotoView;(function(IPhotoView){IPhotoView.DEFAULT_MAX_SCALE=3.0;IPhotoView.DEFAULT_MID_SCALE=1.75;IPhotoView.DEFAULT_MIN_SCALE=1.0;IPhotoView.DEFAULT_ZOOM_DURATION=200;function isImpl(obj){if(!obj)return false;return obj['canZoom']&&obj['getDisplayRect']&&obj['setDisplayMatrix']&&obj['getDisplayMatrix']&&obj['getMinScale']&&obj['getMinimumScale']&&obj['getMidScale']&&obj['getMediumScale']&&obj['getMaxScale']&&obj['getMaximumScale']&&obj['getScale']&&obj['getScaleType']&&obj['setAllowParentInterceptOnEdge']&&obj['setMinScale']&&obj['setMinimumScale']&&obj['setMidScale']&&obj['setMediumScale']&&obj['setMaxScale']&&obj['setMaximumScale']&&obj['setScaleLevels']&&obj['setOnLongClickListener']&&obj['setOnMatrixChangeListener']&&obj['setOnPhotoTapListener']&&obj['getOnPhotoTapListener']&&obj['setOnViewTapListener']&&obj['setRotationTo']&&obj['setRotationBy']&&obj['getOnViewTapListener']&&obj['setScale']&&obj['setScale']&&obj['setScale']&&obj['setScaleType']&&obj['setZoomable']&&obj['setPhotoViewRotation']&&obj['getVisibleRectangleBitmap']&&obj['setZoomTransitionDuration']&&obj['getIPhotoViewImplementation']&&obj['setOnDoubleTapListener']&&obj['setOnScaleChangeListener'];}IPhotoView.isImpl=isImpl;})(IPhotoView=photoview.IPhotoView||(photoview.IPhotoView={}));})(photoview=senab.photoview||(senab.photoview={}));})(senab=co.senab||(co.senab={}));})(co=uk.co||(uk.co={}));})(uk||(uk={}));var uk;(function(uk){var co;(function(co){var senab;(function(senab){var photoview;(function(photoview){var Matrix=android.graphics.Matrix;var ScaleToFit=android.graphics.Matrix.ScaleToFit;var RectF=android.graphics.RectF;var Log=android.util.Log;var AccelerateDecelerateInterpolator=android.view.animation.AccelerateDecelerateInterpolator;var ScaleType=android.widget.ImageView.ScaleType;var OverScroller=android.widget.OverScroller;var WeakReference=java.lang.ref.WeakReference;var MotionEvent=android.view.MotionEvent;var ACTION_CANCEL=MotionEvent.ACTION_CANCEL;var ACTION_DOWN=MotionEvent.ACTION_DOWN;var ACTION_UP=MotionEvent.ACTION_UP;var System=java.lang.System;var GestureDetector=uk.co.senab.photoview.GestureDetector;var IPhotoView=uk.co.senab.photoview.IPhotoView;var PhotoViewAttacher=function(){function PhotoViewAttacher(imageView){var _this178=this;var zoomable=arguments.length<=1||arguments[1]===undefined?true:arguments[1];_classCallCheck(this,PhotoViewAttacher);this.ZOOM_DURATION=IPhotoView.DEFAULT_ZOOM_DURATION;this.mMinScale=IPhotoView.DEFAULT_MIN_SCALE;this.mMidScale=IPhotoView.DEFAULT_MID_SCALE;this.mMaxScale=IPhotoView.DEFAULT_MAX_SCALE;this.mAllowParentInterceptOnEdge=true;this.mBlockParentIntercept=false;this.mBaseMatrix=new Matrix();this.mDrawMatrix=new Matrix();this.mSuppMatrix=new Matrix();this.mDisplayRect=new RectF();this.mMatrixValues=androidui.util.ArrayCreator.newNumberArray(9);this.mIvTop=0;this.mIvRight=0;this.mIvBottom=0;this.mIvLeft=0;this.mScrollEdge=PhotoViewAttacher.EDGE_BOTH;this.mScaleType=ScaleType.FIT_CENTER;this.mImageView=new WeakReference(imageView);imageView.setOnTouchListener(this);var observer=imageView.getViewTreeObserver();if(null!=observer)observer.addOnGlobalLayoutListener(this);PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);this.mScaleDragDetector=new GestureDetector();this.mScaleDragDetector.setOnGestureListener(this);this.mGestureDetector=new android.view.GestureDetector(function(){var _this=_this178;var _Inner=function(_android$view$Gesture){_inherits(_Inner,_android$view$Gesture);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,Object.getPrototypeOf(_Inner).apply(this,arguments));}_createClass(_Inner,[{key:'onLongPress',value:function onLongPress(e){if(null!=_this.mLongClickListener){_this.mLongClickListener.onLongClick(_this.getImageView());}}}]);return _Inner;}(android.view.GestureDetector.SimpleOnGestureListener);return new _Inner();}());this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));this.setZoomable(zoomable);}_createClass(PhotoViewAttacher,[{key:'setOnDoubleTapListener',value:function setOnDoubleTapListener(newOnDoubleTapListener){if(newOnDoubleTapListener!=null){this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener);}else {this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));}}},{key:'setOnScaleChangeListener',value:function setOnScaleChangeListener(onScaleChangeListener){this.mScaleChangeListener=onScaleChangeListener;}},{key:'canZoom',value:function canZoom(){return this.mZoomEnabled;}},{key:'cleanup',value:function cleanup(){if(null==this.mImageView){return;}var imageView=this.mImageView.get();if(null!=imageView){var observer=imageView.getViewTreeObserver();if(null!=observer&&observer.isAlive()){observer.removeGlobalOnLayoutListener(this);}imageView.setOnTouchListener(null);this.cancelFling();}if(null!=this.mGestureDetector){this.mGestureDetector.setOnDoubleTapListener(null);}this.mMatrixChangeListener=null;this.mPhotoTapListener=null;this.mViewTapListener=null;this.mImageView=null;}},{key:'getDisplayRect',value:function getDisplayRect(){this.checkMatrixBounds();return this._getDisplayRect(this.getDrawMatrix());}},{key:'setDisplayMatrix',value:function setDisplayMatrix(finalMatrix){if(finalMatrix==null)throw Error('new IllegalArgumentException("Matrix cannot be null")');var imageView=this.getImageView();if(null==imageView)return false;if(null==imageView.getDrawable())return false;this.mSuppMatrix.set(finalMatrix);this.setImageViewMatrix(this.getDrawMatrix());this.checkMatrixBounds();return true;}},{key:'setPhotoViewRotation',value:function setPhotoViewRotation(degrees){this.mSuppMatrix.setRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'setRotationTo',value:function setRotationTo(degrees){this.mSuppMatrix.setRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'setRotationBy',value:function setRotationBy(degrees){this.mSuppMatrix.postRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'getImageView',value:function getImageView(){var imageView=null;if(null!=this.mImageView){imageView=this.mImageView.get();}if(null==imageView){this.cleanup();if(PhotoViewAttacher.DEBUG)Log.i(PhotoViewAttacher.LOG_TAG,"ImageView no longer exists. You should not use this PhotoViewAttacher any more.");}return imageView;}},{key:'getMinScale',value:function getMinScale(){return this.getMinimumScale();}},{key:'getMinimumScale',value:function getMinimumScale(){return this.mMinScale;}},{key:'getMidScale',value:function getMidScale(){return this.getMediumScale();}},{key:'getMediumScale',value:function getMediumScale(){return this.mMidScale;}},{key:'getMaxScale',value:function getMaxScale(){return this.getMaximumScale();}},{key:'getMaximumScale',value:function getMaximumScale(){return this.mMaxScale;}},{key:'getScale',value:function getScale(){return Math.sqrt(Math.pow(this.getValue(this.mSuppMatrix,Matrix.MSCALE_X),2)+Math.pow(this.getValue(this.mSuppMatrix,Matrix.MSKEW_Y),2));}},{key:'getScaleType',value:function getScaleType(){return this.mScaleType;}},{key:'onDrag',value:function onDrag(dx,dy){if(this.mScaleDragDetector.isScaling()){return;}if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,'onDrag: dx: '+dx.toFixed(2)+'. dy: '+dy.toFixed(2));}var imageView=this.getImageView();this.mSuppMatrix.postTranslate(dx,dy);this.checkAndDisplayMatrix();var parent=imageView.getParent();if(this.mAllowParentInterceptOnEdge&&!this.mScaleDragDetector.isScaling()&&!this.mBlockParentIntercept){if(this.mScrollEdge==PhotoViewAttacher.EDGE_BOTH||this.mScrollEdge==PhotoViewAttacher.EDGE_LEFT&&dx>=1||this.mScrollEdge==PhotoViewAttacher.EDGE_RIGHT&&dx<=-1){if(null!=parent)parent.requestDisallowInterceptTouchEvent(false);}}else {if(null!=parent){parent.requestDisallowInterceptTouchEvent(true);}}}},{key:'onFling',value:function onFling(startX,startY,velocityX,velocityY){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,"onFling. sX: "+startX+" sY: "+startY+" Vx: "+velocityX+" Vy: "+velocityY);}var imageView=this.getImageView();this.mCurrentFlingRunnable=new PhotoViewAttacher.FlingRunnable(this);this.mCurrentFlingRunnable.fling(this.getImageViewWidth(imageView),this.getImageViewHeight(imageView),Math.floor(velocityX),Math.floor(velocityY));imageView.post(this.mCurrentFlingRunnable);}},{key:'onGlobalLayout',value:function onGlobalLayout(){var imageView=this.getImageView();if(null!=imageView){if(this.mZoomEnabled){var top=imageView.getTop();var right=imageView.getRight();var bottom=imageView.getBottom();var left=imageView.getLeft();if(top!=this.mIvTop||bottom!=this.mIvBottom||left!=this.mIvLeft||right!=this.mIvRight){this.updateBaseMatrix(imageView.getDrawable());this.mIvTop=top;this.mIvRight=right;this.mIvBottom=bottom;this.mIvLeft=left;}}else {this.updateBaseMatrix(imageView.getDrawable());}}}},{key:'onScale',value:function onScale(scaleFactor,focusX,focusY){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,'onScale: scale: '+scaleFactor.toFixed(2)+'. fX: '+focusX.toFixed(2)+'. fY: '+focusY.toFixed(2)+'f');}if(this.getScale()=3){this.setScale_4.apply(this,arguments);}else {this.setScale_2.apply(this,arguments);}}},{key:'setScale_2',value:function setScale_2(scale){var animate=arguments.length<=1||arguments[1]===undefined?false:arguments[1];var imageView=this.getImageView();if(null!=imageView){this.setScale(scale,imageView.getRight()/2,imageView.getBottom()/2,animate);}}},{key:'setScale_4',value:function setScale_4(scale,focalX,focalY){var animate=arguments.length<=3||arguments[3]===undefined?false:arguments[3];var imageView=this.getImageView();if(null!=imageView){if(scalethis.mMaxScale){Log.i(PhotoViewAttacher.LOG_TAG,"Scale must be within the range of minScale and maxScale");return;}if(animate){imageView.post(new PhotoViewAttacher.AnimatedZoomRunnable(this,this.getScale(),scale,focalX,focalY));}else {this.mSuppMatrix.setScale(scale,scale,focalX,focalY);this.checkAndDisplayMatrix();}}}},{key:'setScaleType',value:function setScaleType(scaleType){if(PhotoViewAttacher.isSupportedScaleType(scaleType)&&scaleType!=this.mScaleType){this.mScaleType=scaleType;this.update();}}},{key:'setZoomable',value:function setZoomable(zoomable){this.mZoomEnabled=zoomable;this.update();}},{key:'update',value:function update(){var imageView=this.getImageView();if(null!=imageView){if(this.mZoomEnabled){PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);this.updateBaseMatrix(imageView.getDrawable());}else {this.resetMatrix();}}}},{key:'getDisplayMatrix',value:function getDisplayMatrix(){return new Matrix(this.getDrawMatrix());}},{key:'getDrawMatrix',value:function getDrawMatrix(){this.mDrawMatrix.set(this.mBaseMatrix);this.mDrawMatrix.postConcat(this.mSuppMatrix);return this.mDrawMatrix;}},{key:'cancelFling',value:function cancelFling(){if(null!=this.mCurrentFlingRunnable){this.mCurrentFlingRunnable.cancelFling();this.mCurrentFlingRunnable=null;}}},{key:'checkAndDisplayMatrix',value:function checkAndDisplayMatrix(){if(this.checkMatrixBounds()){this.setImageViewMatrix(this.getDrawMatrix());}}},{key:'checkImageViewScaleType',value:function checkImageViewScaleType(){var imageView=this.getImageView();if(null!=imageView&&!IPhotoView.isImpl(imageView)){if(ScaleType.MATRIX!=imageView.getScaleType()){throw Error('new IllegalStateException("The ImageView\'s ScaleType has been changed since attaching a PhotoViewAttacher")');}}}},{key:'checkMatrixBounds',value:function checkMatrixBounds(){var imageView=this.getImageView();if(null==imageView){return false;}var rect=this._getDisplayRect(this.getDrawMatrix());if(null==rect){return false;}var height=rect.height(),width=rect.width();var deltaX=0,deltaY=0;var viewHeight=this.getImageViewHeight(imageView);if(height<=viewHeight){switch(this.mScaleType){case ScaleType.FIT_START:deltaY=-rect.top;break;case ScaleType.FIT_END:deltaY=viewHeight-height-rect.top;break;default:deltaY=(viewHeight-height)/2-rect.top;break;}}else if(rect.top>0){deltaY=-rect.top;}else if(rect.bottom0){this.mScrollEdge=PhotoViewAttacher.EDGE_LEFT;deltaX=-rect.left;}else if(rect.right=midZoom){throw Error('new IllegalArgumentException("MinZoom has to be less than MidZoom")');}else if(midZoom>=maxZoom){throw Error('new IllegalArgumentException("MidZoom has to be less than MaxZoom")');}}},{key:'hasDrawable',value:function hasDrawable(imageView){return null!=imageView&&null!=imageView.getDrawable();}},{key:'isSupportedScaleType',value:function isSupportedScaleType(scaleType){if(null==scaleType){return false;}switch(scaleType){case ScaleType.MATRIX:throw Error('new IllegalArgumentException(ScaleType.MATRIX is not supported in PhotoView)');default:return true;}}},{key:'setImageViewScaleTypeMatrix',value:function setImageViewScaleTypeMatrix(imageView){if(null!=imageView&&!IPhotoView.isImpl(imageView)){if(ScaleType.MATRIX!=imageView.getScaleType()){imageView.setScaleType(ScaleType.MATRIX);}}}}]);return PhotoViewAttacher;}();PhotoViewAttacher.LOG_TAG="PhotoViewAttacher";PhotoViewAttacher.DEBUG=Log.View_DBG;PhotoViewAttacher.sInterpolator=new AccelerateDecelerateInterpolator();PhotoViewAttacher.EDGE_NONE=-1;PhotoViewAttacher.EDGE_LEFT=0;PhotoViewAttacher.EDGE_RIGHT=1;PhotoViewAttacher.EDGE_BOTH=2;photoview.PhotoViewAttacher=PhotoViewAttacher;(function(PhotoViewAttacher){var AnimatedZoomRunnable=function(){function AnimatedZoomRunnable(arg,currentZoom,targetZoom,focalX,focalY){_classCallCheck(this,AnimatedZoomRunnable);this.mFocalX=0;this.mFocalY=0;this.mStartTime=0;this.mZoomStart=0;this.mZoomEnd=0;this._PhotoViewAttacher_this=arg;this.mFocalX=focalX;this.mFocalY=focalY;this.mStartTime=System.currentTimeMillis();this.mZoomStart=currentZoom;this.mZoomEnd=targetZoom;}_createClass(AnimatedZoomRunnable,[{key:'run',value:function run(){var imageView=this._PhotoViewAttacher_this.getImageView();if(imageView==null){return;}var t=this.interpolate();var scale=this.mZoomStart+t*(this.mZoomEnd-this.mZoomStart);var deltaScale=scale/this._PhotoViewAttacher_this.getScale();this._PhotoViewAttacher_this.onScale(deltaScale,this.mFocalX,this.mFocalY);if(t<1){imageView.postOnAnimation(this);}}},{key:'interpolate',value:function interpolate(){var t=1*(System.currentTimeMillis()-this.mStartTime)/this._PhotoViewAttacher_this.ZOOM_DURATION;t=Math.min(1,t);t=PhotoViewAttacher.sInterpolator.getInterpolation(t);return t;}}]);return AnimatedZoomRunnable;}();PhotoViewAttacher.AnimatedZoomRunnable=AnimatedZoomRunnable;var FlingRunnable=function(){function FlingRunnable(arg){_classCallCheck(this,FlingRunnable);this.mCurrentX=0;this.mCurrentY=0;this._PhotoViewAttacher_this=arg;this.mScroller=new OverScroller();}_createClass(FlingRunnable,[{key:'cancelFling',value:function cancelFling(){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,"Cancel Fling");}this.mScroller.forceFinished(true);}},{key:'fling',value:function fling(viewWidth,viewHeight,velocityX,velocityY){var rect=this._PhotoViewAttacher_this.getDisplayRect();if(null==rect){return;}var startX=Math.round(-rect.left);var minX=undefined,maxX=undefined,minY=undefined,maxY=undefined;if(viewWidth=this.photoViewAttacher.getMediumScale()&&scale0.0000001){var done=false;if(resizeWidth){var newWidth=Math.floor(desiredAspect*(heightSize-ptop-pbottom))+pleft+pright;if(!resizeHeight&&!this.mAdjustViewBoundsCompat){widthSize=this.resolveAdjustedSize(newWidth,this.mMaxWidth,widthMeasureSpec);}if(newWidth<=widthSize){widthSize=newWidth;done=true;}}if(!done&&resizeHeight){var newHeight=Math.floor((widthSize-pleft-pright)/desiredAspect)+ptop+pbottom;if(!resizeWidth&&!this.mAdjustViewBoundsCompat){heightSize=this.resolveAdjustedSize(newHeight,this.mMaxHeight,heightMeasureSpec);}if(newHeight<=heightSize){heightSize=newHeight;}}}}}else {w+=pleft+pright;h+=ptop+pbottom;w=Math.max(w,this.getSuggestedMinimumWidth());h=Math.max(h,this.getSuggestedMinimumHeight());widthSize=HtmlImageView.resolveSizeAndState(w,widthMeasureSpec,0);heightSize=HtmlImageView.resolveSizeAndState(h,heightMeasureSpec,0);}this.setMeasuredDimension(widthSize,heightSize);}},{key:'resolveAdjustedSize',value:function resolveAdjustedSize(desiredSize,maxSize,measureSpec){var result=desiredSize;var specMode=MeasureSpec.getMode(measureSpec);var specSize=MeasureSpec.getSize(measureSpec);switch(specMode){case MeasureSpec.UNSPECIFIED:result=Math.min(desiredSize,maxSize);break;case MeasureSpec.AT_MOST:result=Math.min(Math.min(desiredSize,specSize),maxSize);break;case MeasureSpec.EXACTLY:result=specSize;break;}return result;}},{key:'setFrame',value:function setFrame(left,top,right,bottom){var changed=_get2(Object.getPrototypeOf(HtmlImageView.prototype),'setFrame',this).call(this,left,top,right,bottom);this.mHaveFrame=true;this.configureBounds();this.mImgElement.style.display='';return changed;}},{key:'configureBounds',value:function configureBounds(){var dwidth=this.mDrawableWidth;var dheight=this.mDrawableHeight;var vwidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;var vheight=this.getHeight()-this.mPaddingTop-this.mPaddingBottom;var fits=(dwidth<0||vwidth==dwidth)&&(dheight<0||vheight==dheight);this.mImgElement.style.left=0+'px';this.mImgElement.style.top=0+'px';this.mImgElement.style.width='';this.mImgElement.style.height='';if(dwidth<=0||dheight<=0){return;}if(this.mScaleType===ImageView.ScaleType.FIT_XY){this.mImgElement.style.width=vwidth+'px';this.mImgElement.style.height=vheight+'px';return;}this.mImgElement.style.width=dwidth+'px';this.mImgElement.style.height=dheight+'px';if(ImageView.ScaleType.MATRIX===this.mScaleType){}else if(fits){}else if(ImageView.ScaleType.CENTER===this.mScaleType){var left=Math.round((vwidth-dwidth)*0.5);var top=Math.round((vheight-dheight)*0.5);this.mImgElement.style.left=left+'px';this.mImgElement.style.top=top+'px';}else if(ImageView.ScaleType.CENTER_CROP===this.mScaleType){var scale=undefined;var dx=0,dy=0;if(dwidth*vheight>vwidth*dheight){scale=vheight/dheight;dx=(vwidth-dwidth*scale)*0.5;this.mImgElement.style.width='auto';this.mImgElement.style.height=vheight+'px';this.mImgElement.style.left=Math.round(dx)+'px';this.mImgElement.style.top='0px';}else {scale=vwidth/dwidth;dy=(vheight-dheight*scale)*0.5;this.mImgElement.style.width=vwidth+'px';this.mImgElement.style.height='auto';this.mImgElement.style.left='0px';this.mImgElement.style.top=Math.round(dy)+'px';}}else if(ImageView.ScaleType.CENTER_INSIDE===this.mScaleType){var _scale4=1;if(dwidth<=vwidth&&dheight<=vheight){}else {var wScale=vwidth/dwidth;var hScale=vheight/dheight;if(wScalelockBottom){this.springBackToLockBottom();}}}]);return BaseOverScrollLocker;}();var ListViewOverScrollLocker=function(_BaseOverScrollLocker){_inherits(ListViewOverScrollLocker,_BaseOverScrollLocker);function ListViewOverScrollLocker(listView){_classCallCheck(this,ListViewOverScrollLocker);var _this190=_possibleConstructorReturn(this,Object.getPrototypeOf(ListViewOverScrollLocker).call(this,listView));_this190.listView=listView;_this190.configListView();return _this190;}_createClass(ListViewOverScrollLocker,[{key:'configListView',value:function configListView(){var _this191=this;var listView=this.listView;if(!listView.mFlingRunnable)listView.mFlingRunnable=new AbsListView.FlingRunnable(listView);var scroller=listView.mFlingRunnable.mScroller;listView.mFlingRunnable.startOverfling=function(initialVelocity){scroller.setInterpolator(null);var minY=Integer.MIN_VALUE,maxY=Integer.MAX_VALUE;if(listView.mScrollY<0)minY=-_this191.lockTop;else if(listView.mScrollY>0)maxY=_this191.lockBottom;scroller.fling(0,listView.mScrollY,0,initialVelocity,0,0,minY,maxY,0,listView._mOverflingDistance);listView.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;listView.invalidate();listView.postOnAnimation(listView.mFlingRunnable);};var layoutChildrenFunc=listView.layoutChildren;listView.layoutChildren=function(){var overScrollY=_this191.getOverScrollY();layoutChildrenFunc.call(listView);if(overScrollY!==0){listView.overScrollBy(0,-overScrollY,0,listView.mScrollY,0,0,0,listView.mOverscrollDistance,false);var atEdge=listView.trackMotionScroll(-overScrollY,-overScrollY);if(atEdge){listView.overScrollBy(0,overScrollY,0,listView.mScrollY,0,0,0,listView.mOverscrollDistance,false);}else {listView.mFlingRunnable.mScroller.abortAnimation();}}};listView.checkOverScrollStartScrollIfNeeded=function(){return listView.mScrollY>_this191.lockBottom||listView.mScrollY<_this191.lockTop;};listView.mFlingRunnable.edgeReached=function(delta){var initialVelocity=listView.mFlingRunnable.mScroller.getCurrVelocity();if(delta>0)initialVelocity=-initialVelocity;listView.mFlingRunnable.startOverfling(initialVelocity);};var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this191.lockTop;maxY=_this191.lockBottom;return oldSpringBack.call(scroller,startX,startY,minX,maxX,minY,maxY);};var oldFling=scroller.fling;scroller.fling=function(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY){var overX=arguments.length<=8||arguments[8]===undefined?0:arguments[8];var overY=arguments.length<=9||arguments[9]===undefined?0:arguments[9];if(velocityY>0)overY+=_this191.lockBottom;else overY+=_this191.lockTop;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};}},{key:'getScrollContentBottom',value:function getScrollContentBottom(){var childCount=this.listView.getChildCount();var maxBottom=0;var minTop=0;for(var i=0;imaxBottom){maxBottom=childBottom;}if(childTop0)minTop=0;if(this.listView.getAdapter()&&childCount>0){return (maxBottom-minTop)*this.listView.getAdapter().getCount()/childCount;}return 0;}},{key:'getOverScrollY',value:function getOverScrollY(){return this.listView.mScrollY;}},{key:'startSpringBack',value:function startSpringBack(){this.listView.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);this.listView.mFlingRunnable.mScroller.springBack(0,this.listView.mScrollY,0,0,0,0);this.listView.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this.listView.postOnAnimation(this.listView.mFlingRunnable);}},{key:'springBackToLockTop',value:function springBackToLockTop(){this.startSpringBack();}},{key:'springBackToLockBottom',value:function springBackToLockBottom(){this.startSpringBack();}}]);return ListViewOverScrollLocker;}(BaseOverScrollLocker);var ScrollViewScrollLocker=function(_BaseOverScrollLocker2){_inherits(ScrollViewScrollLocker,_BaseOverScrollLocker2);function ScrollViewScrollLocker(scrollView){_classCallCheck(this,ScrollViewScrollLocker);var _this192=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollViewScrollLocker).call(this,scrollView));_this192.scrollView=scrollView;var scroller=scrollView.mScroller;var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this192.lockTop;maxY=_this192.scrollView.getScrollRange()+_this192.lockBottom;return oldSpringBack.call(scroller,startX,startY,minX,maxX,minY,maxY);};var oldFling=scroller.fling;scroller.fling=function(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY){var overX=arguments.length<=8||arguments[8]===undefined?0:arguments[8];var overY=arguments.length<=9||arguments[9]===undefined?0:arguments[9];if(velocityY>0)overY+=_this192.lockBottom;else overY+=_this192.lockTop;minY-=_this192.lockTop;maxY+=_this192.lockBottom;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};_this192.listenScrollContentHeightChange();return _this192;}_createClass(ScrollViewScrollLocker,[{key:'listenScrollContentHeightChange',value:function listenScrollContentHeightChange(){var _this193=this;var listenHeightChange=function listenHeightChange(v){var onSizeChangedFunc=v.onSizeChanged;v.onSizeChanged=function(w,h,oldw,oldh){onSizeChangedFunc.call(v,w,h,oldw,oldh);_this193.scrollView.overScrollBy(0,0,0,_this193.scrollView.mScrollY,0,_this193.scrollView.getScrollRange(),0,_this193.scrollView.mOverscrollDistance,false);};};if(this.scrollView.getChildCount()>0){listenHeightChange(this.scrollView.getChildAt(0));}else {(function(){var onViewAddedFunc=_this193.scrollView.onViewAdded;_this193.scrollView.onViewAdded=function(v){onViewAddedFunc.call(_this193.scrollView,v);listenHeightChange(v);};})();}}},{key:'getScrollContentBottom',value:function getScrollContentBottom(){if(this.scrollView.getChildCount()>0){return this.scrollView.getChildAt(0).getBottom();}return this.scrollView.getPaddingTop();}},{key:'getOverScrollY',value:function getOverScrollY(){var scrollY=this.scrollView.getScrollY();if(scrollY<0)return scrollY;var scrollRange=this.scrollView.getScrollRange();if(scrollY>scrollRange){return scrollY-scrollRange;}return 0;}},{key:'startSpringBack',value:function startSpringBack(){if(this.scrollView.mScroller.springBack(this.scrollView.mScrollX,this.scrollView.mScrollY,0,0,0,this.scrollView.getScrollRange())){this.scrollView.postInvalidateOnAnimation();}}},{key:'springBackToLockTop',value:function springBackToLockTop(){this.startSpringBack();}},{key:'springBackToLockBottom',value:function springBackToLockBottom(){this.startSpringBack();}}]);return ScrollViewScrollLocker;}(BaseOverScrollLocker);})(OverScrollLocker=widget.OverScrollLocker||(widget.OverScrollLocker={}));})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var androidui;(function(androidui){var widget;(function(widget){var _PullRefreshLoadLayou;var View=android.view.View;var Gravity=android.view.Gravity;var ViewGroup=android.view.ViewGroup;var FrameLayout=android.widget.FrameLayout;var TextView=android.widget.TextView;var LinearLayout=android.widget.LinearLayout;var ProgressBar=android.widget.ProgressBar;var R=android.R;var PullRefreshLoadLayout=function(_FrameLayout4){_inherits(PullRefreshLoadLayout,_FrameLayout4);function PullRefreshLoadLayout(context,bindElement,defStyle){_classCallCheck(this,PullRefreshLoadLayout);var _this194=_possibleConstructorReturn(this,Object.getPrototypeOf(PullRefreshLoadLayout).call(this,context,bindElement,defStyle));_this194.autoLoadScrollAtBottom=true;_this194.footerViewReadyDistance=36*android.content.res.Resources.getDisplayMetrics().density;_this194.contentOverY=0;_this194.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(context));_this194.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(context));_this194._attrBinder.addAttr('refreshEnable',function(value){_this194.setRefreshEnable(_this194._attrBinder.parseBoolean(value,true));});_this194._attrBinder.addAttr('loadEnable',function(value){_this194.setLoadEnable(_this194._attrBinder.parseBoolean(value,true));});return _this194;}_createClass(PullRefreshLoadLayout,[{key:'onViewAdded',value:function onViewAdded(child){_get2(Object.getPrototypeOf(PullRefreshLoadLayout.prototype),'onViewAdded',this).call(this,child);if(child instanceof PullRefreshLoadLayout.HeaderView){if(child!=this.headerView)this.setHeaderView(child);}else if(child instanceof PullRefreshLoadLayout.FooterView){if(child!=this.footerView)this.setFooterView(child);}else {if(child!=this.contentView)this.setContentView(child);}if(this.footerView!=null){this.bringChildToFront(this.footerView);}}},{key:'configHeaderView',value:function configHeaderView(){var headerView=this.headerView;var params=headerView.getLayoutParams();params.gravity=Gravity.TOP|Gravity.CENTER_HORIZONTAL;params.height=ViewGroup.LayoutParams.WRAP_CONTENT;params.width=ViewGroup.LayoutParams.MATCH_PARENT;headerView.setLayoutParams(params);}},{key:'configFooterView',value:function configFooterView(){var footerView=this.footerView;var params=footerView.getLayoutParams();params.gravity=Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL;params.height=ViewGroup.LayoutParams.WRAP_CONTENT;params.width=ViewGroup.LayoutParams.WRAP_CONTENT;footerView.setLayoutParams(params);}},{key:'configContentView',value:function configContentView(){var _this195=this;var contentView=this.contentView;var params=contentView.getLayoutParams();params.height=ViewGroup.LayoutParams.MATCH_PARENT;params.width=ViewGroup.LayoutParams.MATCH_PARENT;contentView.setLayoutParams(params);this.overScrollLocker=widget.OverScrollLocker.getFrom(contentView);var overScrollByFunc=contentView.overScrollBy;contentView.overScrollBy=function(deltaX,deltaY,scrollX,scrollY,scrollRangeX,scrollRangeY,maxOverScrollX,maxOverScrollY,isTouchEvent){var result=overScrollByFunc.call(contentView,deltaX,deltaY,scrollX,scrollY,scrollRangeX,scrollRangeY,maxOverScrollX,maxOverScrollY,isTouchEvent);if(contentView===_this195.contentView){_this195.onContentOverScroll(scrollRangeY,maxOverScrollY,isTouchEvent);}return result;};}},{key:'onContentOverScroll',value:function onContentOverScroll(scrollRangeY,maxOverScrollY,isTouchEvent){var newScrollY=this.contentView.mScrollY;var top=0;var bottom=scrollRangeY;if(newScrollY>bottom){this.contentOverY=newScrollY-bottom;}else if(newScrollYthis.footerView.getHeight()+this.footerViewReadyDistance){if(isTouchEvent){this.setFooterState(PullRefreshLoadLayout.State_Footer_ReadyToLoad);}else if(footerState===PullRefreshLoadLayout.State_Footer_ReadyToLoad){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}else if(footerState===PullRefreshLoadLayout.State_Footer_ReadyToLoad){this.setFooterState(this.footerView.stateBeforeReady);}if(this.contentOverY>0&&this.autoLoadScrollAtBottom&&footerState===PullRefreshLoadLayout.State_Footer_Normal){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}}},{key:'setHeaderView',value:function setHeaderView(headerView){if(this.headerView){this.removeView(this.headerView);}this.headerView=headerView;if(headerView.getParent()==null)this.addView(headerView);this.configHeaderView();}},{key:'setFooterView',value:function setFooterView(footerView){if(this.footerView){this.removeView(this.footerView);}this.footerView=footerView;if(footerView.getParent()==null)this.addView(footerView);this.configFooterView();}},{key:'setContentView',value:function setContentView(contentView){if(this.contentView){this.removeView(this.contentView);}this.contentView=contentView;if(contentView.getParent()==null)this.addView(contentView);this.configContentView();}},{key:'setHeaderState',value:function setHeaderState(newState){if(!this.headerView)return;if(this.headerView.state===newState)return;var changeLimit=PullRefreshLoadLayout.StateChangeLimit[this.headerView.state];if(changeLimit&&changeLimit.indexOf(newState)!==-1)return;this.headerView.setStateInner(this,newState);this.checkLockOverScroll();if(newState===PullRefreshLoadLayout.State_Header_Refreshing&&this.refreshLoadListener){this.refreshLoadListener.onRefresh(this);}}},{key:'getHeaderState',value:function getHeaderState(){if(!this.headerView)return PullRefreshLoadLayout.State_Disable;return this.headerView.state;}},{key:'setFooterState',value:function setFooterState(newState){if(!this.footerView)return;if(this.footerView.state===newState)return;var changeLimit=PullRefreshLoadLayout.StateChangeLimit[this.footerView.state];if(changeLimit&&changeLimit.indexOf(newState)!==-1)return;this.footerView.setStateInner(this,newState);this.checkLockOverScroll();if(newState===PullRefreshLoadLayout.State_Footer_Loading&&this.refreshLoadListener){this.refreshLoadListener.onLoadMore(this);}}},{key:'getFooterState',value:function getFooterState(){if(!this.footerView)return PullRefreshLoadLayout.State_Disable;return this.footerView.state;}},{key:'checkLockOverScroll',value:function checkLockOverScroll(){if(!this.overScrollLocker)return;if(this.headerView){switch(this.headerView.state){case PullRefreshLoadLayout.State_Header_Normal:this.overScrollLocker.lockOverScrollTop(0);break;case PullRefreshLoadLayout.State_Header_Refreshing:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;case PullRefreshLoadLayout.State_Header_RefreshFail:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;}}else {this.overScrollLocker.lockOverScrollTop(0);}this.overScrollLocker.lockOverScrollBottom(this.footerView?this.footerView.getHeight():0);}},{key:'checkHeaderFooterPosition',value:function checkHeaderFooterPosition(){if(this.contentOverY>0){this.setHeaderViewAppearDistance(0);this.setFooterViewAppearDistance(this.contentOverY);}else if(this.contentOverY<0){this.setHeaderViewAppearDistance(-this.contentOverY);this.setFooterViewAppearDistance(0);}else {this.setHeaderViewAppearDistance(0);this.setFooterViewAppearDistance(0);}}},{key:'setHeaderViewAppearDistance',value:function setHeaderViewAppearDistance(distance){if(!this.headerView)return;var offset=-this.headerView.getHeight()-this.headerView.getTop()+distance;this.headerView.offsetTopAndBottom(offset);}},{key:'setFooterViewAppearDistance',value:function setFooterViewAppearDistance(distance){if(!this.contentView||!this.footerView)return;var bottomToParentBottom=Math.min(this.overScrollLocker.getScrollContentBottom(),this.contentView.getHeight())-this.footerView.getBottom();if(this.contentOverY<0)bottomToParentBottom-=this.contentOverY;var offset=this.footerView.getHeight()+bottomToParentBottom-distance;this.footerView.offsetTopAndBottom(offset);}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(Object.getPrototypeOf(PullRefreshLoadLayout.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);this.checkHeaderFooterPosition();this.checkLockOverScroll();if(!this.isLaidOut()){if(this.autoLoadScrollAtBottom&&this.footerView!=null&&this.footerView.getGlobalVisibleRect(new android.graphics.Rect())){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}}},{key:'setAutoLoadMoreWhenScrollBottom',value:function setAutoLoadMoreWhenScrollBottom(autoLoad){this.autoLoadScrollAtBottom=autoLoad;}},{key:'setRefreshEnable',value:function setRefreshEnable(enable){var oldEnable=this.headerView!=null;if(enable===oldEnable)return;if(!enable){this.removeView(this.headerView);this.headerView=null;if(this.overScrollLocker)this.overScrollLocker.lockOverScrollTop(0);}else {this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView());}}},{key:'setLoadEnable',value:function setLoadEnable(enable){var oldEnable=this.footerView!=null;if(enable===oldEnable)return;if(!enable){this.removeView(this.footerView);this.footerView=null;if(this.overScrollLocker)this.overScrollLocker.lockOverScrollBottom(0);}else {this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView());}}},{key:'setRefreshLoadListener',value:function setRefreshLoadListener(refreshLoadListener){this.refreshLoadListener=refreshLoadListener;}},{key:'startRefresh',value:function startRefresh(){this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);}},{key:'startLoadMore',value:function startLoadMore(){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}]);return PullRefreshLoadLayout;}(FrameLayout);PullRefreshLoadLayout.State_Disable=-1;PullRefreshLoadLayout.State_Header_Normal=0;PullRefreshLoadLayout.State_Header_Refreshing=1;PullRefreshLoadLayout.State_Header_ReadyToRefresh=2;PullRefreshLoadLayout.State_Header_RefreshFail=3;PullRefreshLoadLayout.State_Footer_Normal=4;PullRefreshLoadLayout.State_Footer_Loading=5;PullRefreshLoadLayout.State_Footer_ReadyToLoad=6;PullRefreshLoadLayout.State_Footer_LoadFail=7;PullRefreshLoadLayout.State_Footer_NoMoreToLoad=8;PullRefreshLoadLayout.StateChangeLimit=(_PullRefreshLoadLayou={},_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Header_Refreshing,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Footer_Loading,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Footer_LoadFail,PullRefreshLoadLayout.State_Footer_NoMoreToLoad]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Header_RefreshFail,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Footer_Loading,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Footer_LoadFail,PullRefreshLoadLayout.State_Footer_NoMoreToLoad]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Footer_Loading,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Header_Refreshing,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Header_RefreshFail]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Footer_NoMoreToLoad,[PullRefreshLoadLayout.State_Footer_ReadyToLoad]),_PullRefreshLoadLayou);widget.PullRefreshLoadLayout=PullRefreshLoadLayout;(function(PullRefreshLoadLayout){var HeaderView=function(_FrameLayout5){_inherits(HeaderView,_FrameLayout5);function HeaderView(){var _Object$getPrototypeO16;_classCallCheck(this,HeaderView);for(var _len45=arguments.length,args=Array(_len45),_key46=0;_key46<_len45;_key46++){args[_key46]=arguments[_key46];}var _this196=_possibleConstructorReturn(this,(_Object$getPrototypeO16=Object.getPrototypeOf(HeaderView)).call.apply(_Object$getPrototypeO16,[this].concat(args)));_this196.state=PullRefreshLoadLayout.State_Header_Normal;_this196.stateBeforeReady=PullRefreshLoadLayout.State_Header_Normal;return _this196;}_createClass(HeaderView,[{key:'setStateInner',value:function setStateInner(prll,state){var oldState=this.state;this.state=state;this.onStateChange(state,oldState);var _this=this;switch(state){case PullRefreshLoadLayout.State_Header_RefreshFail:this.postDelayed({run:function run(){if(state===_this.state){prll.setHeaderState(PullRefreshLoadLayout.State_Header_Normal);}}},1000);break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.stateBeforeReady=oldState;break;}}}]);return HeaderView;}(FrameLayout);PullRefreshLoadLayout.HeaderView=HeaderView;var FooterView=function(_FrameLayout6){_inherits(FooterView,_FrameLayout6);function FooterView(){var _Object$getPrototypeO17;_classCallCheck(this,FooterView);for(var _len46=arguments.length,args=Array(_len46),_key47=0;_key47<_len46;_key47++){args[_key47]=arguments[_key47];}var _this197=_possibleConstructorReturn(this,(_Object$getPrototypeO17=Object.getPrototypeOf(FooterView)).call.apply(_Object$getPrototypeO17,[this].concat(args)));_this197.state=PullRefreshLoadLayout.State_Footer_Normal;_this197.stateBeforeReady=PullRefreshLoadLayout.State_Footer_Normal;return _this197;}_createClass(FooterView,[{key:'setStateInner',value:function setStateInner(prll,state){var oldState=this.state;this.state=state;this.onStateChange(state,oldState);switch(state){case PullRefreshLoadLayout.State_Footer_ReadyToLoad:this.stateBeforeReady=oldState;break;}}}]);return FooterView;}(FrameLayout);PullRefreshLoadLayout.FooterView=FooterView;var DefaultHeaderView=function(_HeaderView){_inherits(DefaultHeaderView,_HeaderView);function DefaultHeaderView(context,bindElement,defStyle){_classCallCheck(this,DefaultHeaderView);var _this198=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultHeaderView).call(this,context,bindElement,defStyle));_this198.progressBar=new ProgressBar();_this198.progressBar.setVisibility(View.GONE);_this198.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this198.textView.setPadding(pad/2,pad,pad/2,pad);_this198.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this198.progressBar,32*density,32*density);linear.addView(_this198.textView);linear.setGravity(Gravity.CENTER);_this198.addView(linear,-1,-2);_this198.onStateChange(PullRefreshLoadLayout.State_Header_Normal,PullRefreshLoadLayout.State_Disable);return _this198;}_createClass(DefaultHeaderView,[{key:'onStateChange',value:function onStateChange(newState,oldState){switch(newState){case PullRefreshLoadLayout.State_Header_Refreshing:this.textView.setText(R.string_.prll_header_state_loading);this.progressBar.setVisibility(View.VISIBLE);break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.textView.setText(R.string_.prll_header_state_ready);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Header_RefreshFail:this.textView.setText(R.string_.prll_header_state_fail);this.progressBar.setVisibility(View.GONE);break;default:this.textView.setText(R.string_.prll_header_state_normal);this.progressBar.setVisibility(View.GONE);}}}]);return DefaultHeaderView;}(HeaderView);PullRefreshLoadLayout.DefaultHeaderView=DefaultHeaderView;var DefaultFooterView=function(_FooterView){_inherits(DefaultFooterView,_FooterView);function DefaultFooterView(context,bindElement,defStyle){_classCallCheck(this,DefaultFooterView);var _this199=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultFooterView).call(this,context,bindElement,defStyle));_this199.progressBar=new ProgressBar();_this199.progressBar.setVisibility(View.GONE);_this199.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this199.textView.setPadding(pad/2,pad,pad/2,pad);_this199.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this199.progressBar);linear.addView(_this199.textView);linear.setGravity(Gravity.CENTER);_this199.addView(linear,-1,-2);_this199.onStateChange(PullRefreshLoadLayout.State_Footer_Normal,PullRefreshLoadLayout.State_Disable);_this199.setOnClickListener({onClick:function onClick(v){var parent=v.getParent();if(parent instanceof PullRefreshLoadLayout){parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}});return _this199;}_createClass(DefaultFooterView,[{key:'onStateChange',value:function onStateChange(newState,oldState){switch(newState){case PullRefreshLoadLayout.State_Footer_Loading:this.textView.setText(R.string_.prll_footer_state_loading);this.progressBar.setVisibility(View.VISIBLE);break;case PullRefreshLoadLayout.State_Footer_ReadyToLoad:this.textView.setText(R.string_.prll_footer_state_ready);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Footer_LoadFail:this.textView.setText(R.string_.prll_footer_state_fail);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Footer_NoMoreToLoad:this.textView.setText(R.string_.prll_footer_state_no_more);this.progressBar.setVisibility(View.GONE);break;default:this.textView.setText(R.string_.prll_footer_state_normal);this.progressBar.setVisibility(View.GONE);}}}]);return DefaultFooterView;}(FooterView);PullRefreshLoadLayout.DefaultFooterView=DefaultFooterView;})(PullRefreshLoadLayout=widget.PullRefreshLoadLayout||(widget.PullRefreshLoadLayout={}));})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var Canvas=android.graphics.Canvas;var sNextID=0;var NativeCanvas=function(_Canvas2){_inherits(NativeCanvas,_Canvas2);function NativeCanvas(){_classCallCheck(this,NativeCanvas);return _possibleConstructorReturn(this,Object.getPrototypeOf(NativeCanvas).apply(this,arguments));}_createClass(NativeCanvas,[{key:'initCanvasImpl',value:function initCanvasImpl(){this.canvasId=++sNextID;this.createCanvasImpl();}},{key:'createCanvasImpl',value:function createCanvasImpl(){native.NativeApi.canvas.createCanvas(this.canvasId,this.mWidth,this.mHeight);this.save();}},{key:'recycleImpl',value:function recycleImpl(){native.NativeApi.canvas.recycleCanvas(this.canvasId);}},{key:'isNativeAccelerated',value:function isNativeAccelerated(){return true;}},{key:'translateImpl',value:function translateImpl(dx,dy){native.NativeApi.canvas.translate(this.canvasId,dx,dy);}},{key:'scaleImpl',value:function scaleImpl(sx,sy){native.NativeApi.canvas.scale(this.canvasId,sx,sy);}},{key:'rotateImpl',value:function rotateImpl(degrees){native.NativeApi.canvas.rotate(this.canvasId,degrees);}},{key:'concatImpl',value:function concatImpl(MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y,MPERSP_0,MPERSP_1,MPERSP_2){native.NativeApi.canvas.concat(this.canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y);}},{key:'drawARGBImpl',value:function drawARGBImpl(a,r,g,b){native.NativeApi.canvas.drawColor(this.canvasId,android.graphics.Color.argb(a,r,g,b));}},{key:'clearColorImpl',value:function clearColorImpl(){native.NativeApi.canvas.clearColor(this.canvasId);}},{key:'saveImpl',value:function saveImpl(){native.NativeApi.canvas.save(this.canvasId);}},{key:'restoreImpl',value:function restoreImpl(){native.NativeApi.canvas.restore(this.canvasId);}},{key:'clipRectImpl',value:function clipRectImpl(left,top,width,height){native.NativeApi.canvas.clipRect(this.canvasId,left,top,width,height);}},{key:'clipRoundRectImpl',value:function clipRoundRectImpl(left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft){native.NativeApi.canvas.clipRoundRectImpl(this.canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft);}},{key:'drawCanvasImpl',value:function drawCanvasImpl(canvas,offsetX,offsetY){if(canvas instanceof NativeCanvas){native.NativeApi.canvas.drawCanvas(this.canvasId,canvas.canvasId,offsetX,offsetY);}else {throw Error('canvas should be NativeCanvas');}}},{key:'drawImageImpl',value:function drawImageImpl(image,srcRect,dstRect){if(image instanceof native.NativeImage){if(srcRect&&dstRect){native.NativeApi.canvas.drawImage8args(this.canvasId,image.imageId,srcRect.left,srcRect.top,srcRect.right,srcRect.bottom,dstRect.left,dstRect.top,dstRect.right,dstRect.bottom);}else if(dstRect){native.NativeApi.canvas.drawImage4args(this.canvasId,image.imageId,dstRect.left,dstRect.top,dstRect.right,dstRect.bottom);}else {native.NativeApi.canvas.drawImage2args(this.canvasId,image.imageId,0,0);}}else {throw Error('image should be NativeImage');}}},{key:'drawRectImpl',value:function drawRectImpl(left,top,width,height,style){native.NativeApi.canvas.drawRect(this.canvasId,left,top,width,height,style);}},{key:'drawOvalImpl',value:function drawOvalImpl(oval,style){native.NativeApi.canvas.drawOval(this.canvasId,oval.left,oval.top,oval.right,oval.bottom,style);}},{key:'drawCircleImpl',value:function drawCircleImpl(cx,cy,radius,style){native.NativeApi.canvas.drawCircle(this.canvasId,cx,cy,radius,style);}},{key:'drawArcImpl',value:function drawArcImpl(oval,startAngle,sweepAngle,useCenter,style){native.NativeApi.canvas.drawArc(this.canvasId,oval.left,oval.top,oval.right,oval.bottom,startAngle,sweepAngle,useCenter,style);}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(rect,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style){native.NativeApi.canvas.drawRoundRectImpl(this.canvasId,rect.left,rect.top,rect.width(),rect.height(),radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style);}},{key:'drawTextImpl',value:function drawTextImpl(text,x,y,style){native.NativeApi.canvas.drawText(this.canvasId,text,x,y,style);}},{key:'setColorImpl',value:function setColorImpl(color,style){native.NativeApi.canvas.setFillColor(this.canvasId,color,style);}},{key:'multiplyGlobalAlphaImpl',value:function multiplyGlobalAlphaImpl(alpha){native.NativeApi.canvas.multiplyGlobalAlpha(this.canvasId,alpha);}},{key:'setGlobalAlphaImpl',value:function setGlobalAlphaImpl(alpha){native.NativeApi.canvas.setGlobalAlpha(this.canvasId,alpha);}},{key:'setTextAlignImpl',value:function setTextAlignImpl(align){native.NativeApi.canvas.setTextAlign(this.canvasId,align);}},{key:'setLineWidthImpl',value:function setLineWidthImpl(width){native.NativeApi.canvas.setLineWidth(this.canvasId,width);}},{key:'setLineCapImpl',value:function setLineCapImpl(lineCap){native.NativeApi.canvas.setLineCap(this.canvasId,lineCap);}},{key:'setLineJoinImpl',value:function setLineJoinImpl(lineJoin){native.NativeApi.canvas.setLineJoin(this.canvasId,lineJoin);}},{key:'setShadowImpl',value:function setShadowImpl(radius,dx,dy,color){native.NativeApi.canvas.setShadow(this.canvasId,radius,dx,dy,color);}},{key:'setFontSizeImpl',value:function setFontSizeImpl(size){native.NativeApi.canvas.setFontSize(this.canvasId,size);}},{key:'setFontImpl',value:function setFontImpl(fontName){native.NativeApi.canvas.setFont(this.canvasId,fontName);}},{key:'isImageSmoothingEnabledImpl',value:function isImageSmoothingEnabledImpl(){return false;}},{key:'setImageSmoothingEnabledImpl',value:function setImageSmoothingEnabledImpl(enable){}}],[{key:'applyTextMeasure',value:function applyTextMeasure(cacheMeasureTextSize,defaultWidth,widths){android.graphics.Canvas.measureTextImpl=function(text,textSize){var width=0;for(var i=0,length=text.length;i0){this.computeTextArea();native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(),this.mRectTmp.left,this.mRectTmp.top,this.mRectTmp.right,this.mRectTmp.bottom);}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(NativeEditText.prototype),'onDetachedFromWindow',this).call(this);native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());}}]);return NativeEditText;}(android.widget.EditText);native.NativeEditText=NativeEditText;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var WebView=android.webkit.WebView;var Rect=android.graphics.Rect;var anchor=document.createElement('a');var webViewMap=new Map();var NativeWebView=function(_WebView){_inherits(NativeWebView,_WebView);function NativeWebView(context,bindElement,defStyle){_classCallCheck(this,NativeWebView);var _this205=_possibleConstructorReturn(this,Object.getPrototypeOf(NativeWebView).call(this,context,bindElement,defStyle));_this205.mBoundRect=new Rect();_this205.mRectTmp=new Rect();_this205.mLocationTmp=androidui.util.ArrayCreator.newNumberArray(2);native.NativeApi.webView.createWebView(_this205.hashCode());webViewMap.set(_this205.hashCode(),_this205);var activity=_this205.getContext();var onDestroy=activity.onDestroy;activity.onDestroy=function(){onDestroy.call(activity);webViewMap.delete(_this205.hashCode());native.NativeApi.webView.destroyWebView(_this205.hashCode());};return _this205;}_createClass(NativeWebView,[{key:'goBack',value:function goBack(){native.NativeApi.webView.webViewGoBack(this.hashCode());}},{key:'canGoBack',value:function canGoBack(){return this.mCanGoBack;}},{key:'loadUrl',value:function loadUrl(url){anchor.href=url;url=anchor.href;this.mUrl=url;native.NativeApi.webView.webViewLoadUrl(this.hashCode(),url);}},{key:'reload',value:function reload(){native.NativeApi.webView.webViewReload(this.hashCode());}},{key:'getUrl',value:function getUrl(){return this.mUrl;}},{key:'getTitle',value:function getTitle(){return this.mTitle||this.getUrl();}},{key:'setWebViewClient',value:function setWebViewClient(client){_get2(Object.getPrototypeOf(NativeWebView.prototype),'setWebViewClient',this).call(this,client);}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return false;}},{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){_get2(Object.getPrototypeOf(NativeWebView.prototype),'_syncBoundAndScrollToElement',this).call(this);this.getLocationOnScreen(this.mLocationTmp);this.mRectTmp.set(this.mLocationTmp[0],this.mLocationTmp[1],this.mLocationTmp[0]+this.getWidth(),this.mLocationTmp[1]+this.getHeight());if(!this.mRectTmp.equals(this.mBoundRect)){this.mBoundRect.set(this.mRectTmp);native.NativeApi.webView.webViewBoundChange(this.hashCode(),this.mBoundRect.left,this.mBoundRect.top,this.mBoundRect.right,this.mBoundRect.bottom);}}}],[{key:'notifyLoadFinish',value:function notifyLoadFinish(viewHash,url,title){var nativeWebView=webViewMap.get(viewHash);if(nativeWebView==null)return;nativeWebView.mUrl=url;nativeWebView.mTitle=title;if(nativeWebView.mClient!=null){nativeWebView.mClient.onReceivedTitle(nativeWebView,title);nativeWebView.mClient.onPageFinished(nativeWebView,url);}}},{key:'notifyWebViewHistoryChange',value:function notifyWebViewHistoryChange(viewHash,currentHistoryIndex,historySize){var nativeWebView=webViewMap.get(viewHash);if(nativeWebView==null)return;nativeWebView.mCanGoBack=currentHistoryIndex>0;}}]);return NativeWebView;}(WebView);native.NativeWebView=NativeWebView;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var HtmlView=androidui.widget.HtmlView;var Rect=android.graphics.Rect;var NativeHtmlView=function(_HtmlView){_inherits(NativeHtmlView,_HtmlView);function NativeHtmlView(){var _Object$getPrototypeO19;_classCallCheck(this,NativeHtmlView);for(var _len48=arguments.length,args=Array(_len48),_key49=0;_key49<_len48;_key49++){args[_key49]=arguments[_key49];}var _this206=_possibleConstructorReturn(this,(_Object$getPrototypeO19=Object.getPrototypeOf(NativeHtmlView)).call.apply(_Object$getPrototypeO19,[this].concat(args)));_this206.mRectDrawHTMLBoundTmp=new Rect();return _this206;}_createClass(NativeHtmlView,[{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){_get2(Object.getPrototypeOf(NativeHtmlView.prototype),'_syncBoundAndScrollToElement',this).call(this);this.getGlobalVisibleRect(this.mRectDrawHTMLBoundTmp);native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(),this.mRectDrawHTMLBoundTmp.left,this.mRectDrawHTMLBoundTmp.top,this.mRectDrawHTMLBoundTmp.right,this.mRectDrawHTMLBoundTmp.bottom);}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Object.getPrototypeOf(NativeHtmlView.prototype),'onDetachedFromWindow',this).call(this);native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());}}]);return NativeHtmlView;}(HtmlView);native.NativeHtmlView=NativeHtmlView;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var AndroidJsBridgeProperty='AndroidUIRuntime';var JSBridge=window[AndroidJsBridgeProperty];var NativeApi=function NativeApi(){_classCallCheck(this,NativeApi);};native.NativeApi=NativeApi;(function(NativeApi){var BatchCall=function(){function BatchCall(){_classCallCheck(this,BatchCall);this.calls=[];}_createClass(BatchCall,[{key:'pushCall',value:function pushCall(method,methodArgs){var _calls;this.calls.push(method);(_calls=this.calls).push.apply(_calls,_toConsumableArray(methodArgs));this.calls.push(null);}},{key:'clear',value:function clear(){this.calls=[];}},{key:'toString',value:function toString(){return this.calls.join('\n');}}]);return BatchCall;}();var batchCall=new BatchCall();var SurfaceApi=function(){function SurfaceApi(){_classCallCheck(this,SurfaceApi);}_createClass(SurfaceApi,[{key:'createSurface',value:function createSurface(surfaceId,left,top,right,bottom){JSBridge.createSurface(surfaceId,left,top,right,bottom);}},{key:'onSurfaceBoundChange',value:function onSurfaceBoundChange(surfaceId,left,top,right,bottom){JSBridge.onSurfaceBoundChange(surfaceId,left,top,right,bottom);}},{key:'lockCanvas',value:function lockCanvas(surfaceId,canvasId,left,top,right,bottom){batchCall.pushCall('31',[surfaceId,canvasId,left,top,right,bottom]);}},{key:'unlockCanvasAndPost',value:function unlockCanvasAndPost(surfaceId,canvasId){batchCall.pushCall('32',[surfaceId,canvasId]);JSBridge.batchCall(batchCall.toString());batchCall.clear();}},{key:'showFps',value:function showFps(fps){JSBridge.showJSFps(fps);}}]);return SurfaceApi;}();NativeApi.SurfaceApi=SurfaceApi;var CanvasApi=function(){function CanvasApi(){_classCallCheck(this,CanvasApi);}_createClass(CanvasApi,[{key:'createCanvas',value:function createCanvas(canvasId,width,height){batchCall.pushCall('33',[canvasId,width,height]);}},{key:'recycleCanvas',value:function recycleCanvas(canvasId){batchCall.pushCall('34',[canvasId]);}},{key:'translate',value:function translate(canvasId,dx,dy){batchCall.pushCall('35',[canvasId,dx,dy]);}},{key:'scale',value:function scale(canvasId,sx,sy){batchCall.pushCall('36',[canvasId,sx,sy]);}},{key:'rotate',value:function rotate(canvasId,degrees){batchCall.pushCall('37',[canvasId,degrees]);}},{key:'concat',value:function concat(canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y){batchCall.pushCall('38',[canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y]);}},{key:'drawColor',value:function drawColor(canvasId,color){batchCall.pushCall('39',[canvasId,color]);}},{key:'clearColor',value:function clearColor(canvasId){batchCall.pushCall('40',[canvasId]);}},{key:'drawRect',value:function drawRect(canvasId,left,top,width,height,style){batchCall.pushCall('41',[canvasId,left,top,width,height,style||android.graphics.Paint.Style.FILL]);}},{key:'clipRect',value:function clipRect(canvasId,left,top,width,height){batchCall.pushCall('42',[canvasId,left,top,width,height]);}},{key:'save',value:function save(canvasId){batchCall.pushCall('43',[canvasId]);}},{key:'restore',value:function restore(canvasId){batchCall.pushCall('44',[canvasId]);}},{key:'drawCanvas',value:function drawCanvas(canvasId,drawCanvasId,offsetX,offsetY){batchCall.pushCall('45',[canvasId,drawCanvasId,offsetX,offsetY]);}},{key:'drawText',value:function drawText(canvasId,text,x,y,fillStyle){text='"'+text.replace(/(\n)+|(\r\n)+/g,"\\n")+'"';batchCall.pushCall('47',[canvasId,text,x,y,fillStyle||android.graphics.Paint.Style.FILL]);}},{key:'setFillColor',value:function setFillColor(canvasId,color,style){batchCall.pushCall('49',[canvasId,color,style||android.graphics.Paint.Style.FILL]);}},{key:'multiplyGlobalAlpha',value:function multiplyGlobalAlpha(canvasId,alpha){batchCall.pushCall('50',[canvasId,alpha]);}},{key:'setGlobalAlpha',value:function setGlobalAlpha(canvasId,alpha){batchCall.pushCall('51',[canvasId,alpha]);}},{key:'setTextAlign',value:function setTextAlign(canvasId,align){batchCall.pushCall('52',[canvasId,align]);}},{key:'setLineWidth',value:function setLineWidth(canvasId,width){batchCall.pushCall('53',[canvasId,width]);}},{key:'setLineCap',value:function setLineCap(canvasId,lineCap){batchCall.pushCall('54',[canvasId,lineCap]);}},{key:'setLineJoin',value:function setLineJoin(canvasId,lineJoin){batchCall.pushCall('55',[canvasId,lineJoin]);}},{key:'setShadow',value:function setShadow(canvasId,radius,dx,dy,color){batchCall.pushCall('56',[canvasId,radius,dx,dy,color]);}},{key:'setFontSize',value:function setFontSize(canvasId,size){batchCall.pushCall('57',[canvasId,size]);}},{key:'setFont',value:function setFont(canvasId,fontName){batchCall.pushCall('58',[canvasId,fontName]);}},{key:'drawOval',value:function drawOval(canvasId,left,top,right,bottom,style){batchCall.pushCall('59',[canvasId,left,top,right,bottom,style||android.graphics.Paint.Style.FILL]);}},{key:'drawCircle',value:function drawCircle(canvasId,cx,cy,radius,style){batchCall.pushCall('60',[canvasId,cx,cy,radius,style||android.graphics.Paint.Style.FILL]);}},{key:'drawArc',value:function drawArc(canvasId,left,top,right,bottom,startAngle,sweepAngle,useCenter,style){batchCall.pushCall('61',[canvasId,left,top,right,bottom,startAngle,sweepAngle,useCenter,style||android.graphics.Paint.Style.FILL]);}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style){batchCall.pushCall('62',[canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style||android.graphics.Paint.Style.FILL]);}},{key:'clipRoundRectImpl',value:function clipRoundRectImpl(canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft){batchCall.pushCall('63',[canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft]);}},{key:'drawImage2args',value:function drawImage2args(canvasId,drawImageId,left,top){batchCall.pushCall('70',[canvasId,drawImageId,left,top]);}},{key:'drawImage4args',value:function drawImage4args(canvasId,drawImageId,dstLeft,dstTop,dstRight,dstBottom){batchCall.pushCall('71',[canvasId,drawImageId,dstLeft,dstTop,dstRight,dstBottom]);}},{key:'drawImage8args',value:function drawImage8args(canvasId,drawImageId,srcLeft,srcTop,srcRight,srcBottom,dstLeft,dstTop,dstRight,dstBottom){batchCall.pushCall('72',[canvasId,drawImageId,srcLeft,srcTop,srcRight,srcBottom,dstLeft,dstTop,dstRight,dstBottom]);}}]);return CanvasApi;}();NativeApi.CanvasApi=CanvasApi;})(NativeApi=native.NativeApi||(native.NativeApi={}));if(JSBridge){android.view.Surface.prototype=native.NativeSurface.prototype;android.graphics.Canvas.prototype=native.NativeCanvas.prototype;androidui.image.NetImage.prototype=native.NativeImage.prototype;android.widget.EditText=native.NativeEditText;android.webkit.WebView=native.NativeWebView;androidui.widget.HtmlView=native.NativeHtmlView;NativeApi.surface=new NativeApi.SurfaceApi();NativeApi.canvas=new NativeApi.CanvasApi();NativeApi.image=JSBridge;NativeApi.drawHTML=JSBridge;NativeApi.webView=JSBridge;android.os.MessageQueue.requestNextLoop=function(){setTimeout(android.os.MessageQueue.loop,0);};androidui.AndroidUI.showAppClosed=function(){JSBridge.closeApp();};JSBridge.initRuntime();window.addEventListener('load',function(){setInterval(function(){JSBridge.pageAlive(1500);},800);});}})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));window['android']=android;window['java']=java;window['AndroidUI']=androidui.AndroidUI;(function(){var event=document.createEvent("CustomEvent");event.initCustomEvent("AndroidUILoadFinish",true,true,null);document.dispatchEvent(event);})(); + */var java;(function(java){var util;(function(util){var ArrayList=function(){function ArrayList(){var initialCapacity=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;_classCallCheck(this,ArrayList);this.array=[];}_createClass(ArrayList,[{key:'size',value:function size(){return this.array.length;}},{key:'isEmpty',value:function isEmpty(){return this.size()<=0;}},{key:'contains',value:function contains(o){return this.indexOf(o)>=0;}},{key:'indexOf',value:function indexOf(o){return this.array.indexOf(o);}},{key:'lastIndexOf',value:function lastIndexOf(o){return this.array.lastIndexOf(o);}},{key:'clone',value:function clone(){var _arrayList$array;var arrayList=new ArrayList();(_arrayList$array=arrayList.array).push.apply(_arrayList$array,_toConsumableArray(this.array));return arrayList;}},{key:'toArray',value:function toArray(){var a=arguments.length>0&&arguments[0]!==undefined?arguments[0]:new Array(this.size());var size=this.size();for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:new StringBuilder();sb.setLength(0);sb.append('[');sb.append(this.left);sb.append(',');sb.append(this.top);sb.append("][");sb.append(this.right);sb.append(',');sb.append(this.bottom);sb.append(']');return sb.toString();}},{key:'flattenToString',value:function flattenToString(){var sb=new StringBuilder(32);sb.append(this.left);sb.append(' ');sb.append(this.top);sb.append(' ');sb.append(this.right);sb.append(' ');sb.append(this.bottom);return sb.toString();}},{key:'isEmpty',value:function isEmpty(){return this.left>=this.right||this.top>=this.bottom;}},{key:'width',value:function width(){return this.right-this.left;}},{key:'height',value:function height(){return this.bottom-this.top;}},{key:'centerX',value:function centerX(){return this.left+this.right>>1;}},{key:'centerY',value:function centerY(){return this.top+this.bottom>>1;}},{key:'exactCenterX',value:function exactCenterX(){return(this.left+this.right)*0.5;}},{key:'exactCenterY',value:function exactCenterY(){return(this.top+this.bottom)*0.5;}},{key:'setEmpty',value:function setEmpty(){this.left=this.right=this.top=this.bottom=0;}},{key:'set',value:function set(){for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}if(args.length===1){var rect=args[0];var _ref=[rect.left,rect.top,rect.right,rect.bottom];this.left=_ref[0];this.top=_ref[1];this.right=_ref[2];this.bottom=_ref[3];}else{var _args$5=args[0],left=_args$5===undefined?0:_args$5,_args$6=args[1],t=_args$6===undefined?0:_args$6,_args$7=args[2],right=_args$7===undefined?0:_args$7,_args$8=args[3],bottom=_args$8===undefined?0:_args$8;this.left=left||0;this.top=t||0;this.right=right||0;this.bottom=bottom||0;}}},{key:'offset',value:function offset(dx,dy){this.left+=dx;this.top+=dy;this.right+=dx;this.bottom+=dy;}},{key:'offsetTo',value:function offsetTo(newLeft,newTop){this.right+=newLeft-this.left;this.bottom+=newTop-this.top;this.left=newLeft;this.top=newTop;}},{key:'inset',value:function inset(dx,dy){this.left+=dx;this.top+=dy;this.right-=dx;this.bottom-=dy;}},{key:'contains',value:function contains(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3<_len3;_key3++){args[_key3]=arguments[_key3];}if(args.length===1){var r=args[0];return this.left=r.right&&this.bottom>=r.bottom;}else if(args.length===2){var x=args[0],y=args[1];return this.left=this.left&&x=this.top&&y=right&&this.bottom>=bottom;}}},{key:'intersect',value:function intersect(){for(var _len4=arguments.length,args=Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}if(args.length===1){var rect=args[0];return this.intersect(rect.left,rect.top,rect.right,rect.bottom);}else{var _args$13=args[0],left=_args$13===undefined?0:_args$13,_args$14=args[1],t=_args$14===undefined?0:_args$14,_args$15=args[2],right=_args$15===undefined?0:_args$15,_args$16=args[3],bottom=_args$16===undefined?0:_args$16;if(this.leftright)this.right=right;if(this.bottom>bottom)this.bottom=bottom;return true;}return false;}}},{key:'setIntersect',value:function setIntersect(a,b){if(a.leftthis.right){this.right=x;}if(ythis.bottom){this.bottom=y;}}else{var left=args[0];var top=args[1];var right=args[2];var bottom=args[3];if(leftleft)this.left=left;if(this.top>top)this.top=top;if(this.rightthis.right){var _ref2=[this.right,this.left];this.left=_ref2[0];this.right=_ref2[1];}if(this.top>this.bottom){var _ref3=[this.bottom,this.top];this.top=_ref3[0];this.bottom=_ref3[1];}}},{key:'scale',value:function scale(_scale){if(_scale!=1){this.left=this.left*_scale;this.top=this.top*_scale;this.right=this.right*_scale;this.bottom=this.bottom*_scale;}}}],[{key:'unflattenFromString',value:function unflattenFromString(str){var parts=str.split(" ");return new Rect(Number.parseInt(parts[0]),Number.parseInt(parts[1]),Number.parseInt(parts[2]),Number.parseInt(parts[3]));}},{key:'intersects',value:function intersects(a,b){return a.leftcontainer.right){outRect.right=container.right;}}break;case Gravity.AXIS_PULL_BEFORE<container.right){outRect.right=container.right;}}break;case Gravity.AXIS_PULL_AFTER<container.bottom){outRect.bottom=container.bottom;}}break;case Gravity.AXIS_PULL_BEFORE<container.bottom){outRect.bottom=container.bottom;}}break;case Gravity.AXIS_PULL_AFTER<1&&arguments[1]!==undefined?arguments[1]:Gravity.NO_GRAVITY;if(!gravityStr)return defaultGravity;var gravity=null;try{var parts=gravityStr.split("|");var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=parts[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var part=_step.value;var g=Gravity[part.toUpperCase()];if(Number.isInteger(g))gravity|=g;}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}}catch(e){console.error(e);}if(Number.isNaN(gravity))return defaultGravity;return gravity;}}]);return Gravity;}();Gravity.NO_GRAVITY=0x0000;Gravity.AXIS_SPECIFIED=0x0001;Gravity.AXIS_PULL_BEFORE=0x0002;Gravity.AXIS_PULL_AFTER=0x0004;Gravity.AXIS_CLIP=0x0008;Gravity.AXIS_X_SHIFT=0;Gravity.AXIS_Y_SHIFT=4;Gravity.TOP=(Gravity.AXIS_PULL_BEFORE|Gravity.AXIS_SPECIFIED)<1&&arguments[1]!==undefined?arguments[1]:null;var value=this.map.get(key);if(value===undefined)return valueIfKeyNotFound;return value;}},{key:'delete',value:function _delete(key){this.map.delete(key);}},{key:'remove',value:function remove(key){this.delete(key);}},{key:'removeAt',value:function removeAt(index){this.removeAtRange(index);}},{key:'removeAtRange',value:function removeAtRange(index){var size=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var keys=[].concat(_toConsumableArray(this.map.keys()));var end=Math.min(this.map.size,index+size);for(var i=index;iLog.PriorityString.length)return"";return Log.PriorityString[priority-2];}},{key:'v',value:function v(tag,msg,tr){console.log(Log.getLogMsg(Log.VERBOSE,tag,msg));if(tr)console.log(tr);}},{key:'d',value:function d(tag,msg){console.debug(Log.getLogMsg(Log.DEBUG,tag,msg));}},{key:'i',value:function i(tag,msg,tr){console.info(Log.getLogMsg(Log.INFO,tag,msg));if(tr)console.info(tr);}},{key:'w',value:function w(tag,msg,tr){console.warn(Log.getLogMsg(Log.WARN,tag,msg));if(tr)console.warn(tr);}},{key:'e',value:function e(tag,msg,tr){console.error(Log.getLogMsg(Log.ERROR,tag,msg));if(tr)console.error(tr);}},{key:'getLogMsg',value:function getLogMsg(priority,tag,msg){var d=new Date();var dateFormat=d.toLocaleTimeString()+'.'+d.getUTCMilliseconds();return"["+Log.getPriorityString(priority)+"] "+dateFormat+" \t "+tag+" \t "+msg;}}]);return Log;}();Log.View_DBG=false;Log.VelocityTracker_DBG=false;Log.DBG_DrawableContainer=false;Log.DBG_StateListDrawable=false;Log.VERBOSE=2;Log.DEBUG=3;Log.INFO=4;Log.WARN=5;Log.ERROR=6;Log.ASSERT=7;Log.PriorityString=["VERBOSE","DEBUG","INFO","WARN","ERROR","ASSERT"];util.Log=Log;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var PixelFormat=function PixelFormat(){_classCallCheck(this,PixelFormat);};PixelFormat.UNKNOWN=0;PixelFormat.TRANSLUCENT=-3;PixelFormat.TRANSPARENT=-2;PixelFormat.OPAQUE=-1;PixelFormat.RGBA_8888=1;PixelFormat.RGBX_8888=2;PixelFormat.RGB_888=3;PixelFormat.RGB_565=4;graphics.PixelFormat=PixelFormat;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var ref;(function(ref){var WeakReference=function(){function WeakReference(referent){_classCallCheck(this,WeakReference);this.weakMap=new WeakMap();this.weakMap.set(this,referent);}_createClass(WeakReference,[{key:'get',value:function get(){return this.weakMap.get(this);}},{key:'set',value:function set(value){this.weakMap.set(this,value);}},{key:'clear',value:function clear(){this.weakMap.delete(this);}}]);return WeakReference;}();ref.WeakReference=WeakReference;})(ref=lang.ref||(lang.ref={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var Runnable;(function(Runnable){function of(func){return{run:func};}Runnable.of=of;})(Runnable=lang.Runnable||(lang.Runnable={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var System=function(){function System(){_classCallCheck(this,System);}_createClass(System,null,[{key:'currentTimeMillis',value:function currentTimeMillis(){return new Date().getTime();}},{key:'arraycopy',value:function arraycopy(src,srcPos,dest,destPos,length){var srcLength=src.length;var destLength=dest.length;for(var i=0;i=srcLength)return;var destIndex=i+destPos;if(destIndex>=destLength)return;dest[destIndex]=src[srcIndex];}}}]);return System;}();System.out={println:function println(any){console.log('\n');console.log(any);},print:function print(any){console.log(any);}};lang.System=System;})(lang=java.lang||(java.lang={}));})(java||(java={}));var androidui;(function(androidui){var util;(function(util){var ArrayCreator=function(){function ArrayCreator(){_classCallCheck(this,ArrayCreator);}_createClass(ArrayCreator,null,[{key:'newNumberArray',value:function newNumberArray(size){var array=new Array(size);if(size>0)ArrayCreator.fillArray(array,0);return array;}},{key:'newBooleanArray',value:function newBooleanArray(size){var array=new Array(size);ArrayCreator.fillArray(array,false);return array;}},{key:'fillArray',value:function fillArray(array,value){for(var i=0,length=array.length;i0){mustMatch=true;}else{mustMatch=false;stateSpecState=-stateSpecState;}var found=false;for(var j=0;j0){if(state!=stateSpecState){return false;}}else{if(state==-stateSpecState){return false;}}}return true;}},{key:'trimStateSet',value:function trimStateSet(states,newSize){if(states.length==newSize){return states;}var trimmedStates=androidui.util.ArrayCreator.newNumberArray(newSize);System.arraycopy(states,0,trimmedStates,0,newSize);return trimmedStates;}}]);return StateSet;}();StateSet.WILD_CARD=[];StateSet.NOTHING=[0];util.StateSet=StateSet;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var util;(function(util){var Pools=function Pools(){_classCallCheck(this,Pools);};util.Pools=Pools;(function(Pools){var SimplePool=function(){function SimplePool(maxPoolSize){_classCallCheck(this,SimplePool);this.mPoolSize=0;if(maxPoolSize<=0){throw new Error("The max pool size must be > 0");}this.mPool=new Array(maxPoolSize);}_createClass(SimplePool,[{key:'acquire',value:function acquire(){if(this.mPoolSize>0){var lastPooledIndex=this.mPoolSize-1;var instance=this.mPool[lastPooledIndex];this.mPool[lastPooledIndex]=null;this.mPoolSize--;return instance;}return null;}},{key:'release',value:function release(instance){if(this.isInPool(instance)){throw new Error("Already in the pool!");}if(this.mPoolSize>>24;}},{key:'red',value:function red(color){return color>>16&0xFF;}},{key:'green',value:function green(color){return color>>8&0xFF;}},{key:'blue',value:function blue(color){return color&0xFF;}},{key:'rgb',value:function rgb(red,green,blue){return 0xFF<<24|red<<16|green<<8|blue;}},{key:'argb',value:function argb(alpha,red,green,blue){return alpha<<24|red<<16|green<<8|blue;}},{key:'rgba',value:function rgba(red,green,blue,alpha){return alpha<<24|red<<16|green<<8|blue;}},{key:'parseColor',value:function parseColor(colorString,defaultColor){if(colorString.charAt(0)=='#'){if(colorString.length===4){colorString='#'+colorString[1]+colorString[1]+colorString[2]+colorString[2]+colorString[3]+colorString[3];}var color=parseInt(colorString.substring(1),16);if(colorString.length==7){color|=0x00000000ff000000;}else if(colorString.length!=9){if(defaultColor!=null)return defaultColor;throw new Error("Unknown color : "+colorString);}return color;}else if(colorString.startsWith('rgb(')){colorString=colorString.substring(colorString.indexOf('(')+1,colorString.lastIndexOf(')'));var parts=colorString.split(',');return Color.rgb(Number.parseInt(parts[0]),Number.parseInt(parts[1]),Number.parseInt(parts[2]));}else if(colorString.startsWith('rgba(')){colorString=colorString.substring(colorString.indexOf('(')+1,colorString.lastIndexOf(')'));var _parts=colorString.split(',');return Color.rgba(Number.parseInt(_parts[0]),Number.parseInt(_parts[1]),Number.parseInt(_parts[2]),Number.parseFloat(_parts[3])*255);}else{var _color=Color.sColorNameMap.get(colorString.toLowerCase());if(_color!=null){return _color;}}if(defaultColor!=null)return defaultColor;throw new Error("Unknown color : "+colorString);}},{key:'toARGBHex',value:function toARGBHex(color){var r=Color.red(color);var g=Color.green(color);var b=Color.blue(color);var a=Color.alpha(color);var hR=r<16?'0'+r.toString(16):r.toString(16);var hG=g<16?'0'+g.toString(16):g.toString(16);var hB=b<16?'0'+b.toString(16):b.toString(16);var hA=a<16?'0'+a.toString(16):a.toString(16);return"#"+hA+hR+hG+hB;}},{key:'toRGBAFunc',value:function toRGBAFunc(color){var r=Color.red(color);var g=Color.green(color);var b=Color.blue(color);var a=Color.alpha(color);return'rgba('+r+','+g+','+b+','+a/255+')';}},{key:'getHtmlColor',value:function getHtmlColor(color){var i=Color.sColorNameMap.get(color.toLowerCase());return i;}}]);return Color;}();Color.BLACK=0xFF000000;Color.DKGRAY=0xFF444444;Color.GRAY=0xFF888888;Color.LTGRAY=0xFFCCCCCC;Color.WHITE=0xFFFFFFFF;Color.RED=0xFFFF0000;Color.GREEN=0xFF00FF00;Color.BLUE=0xFF0000FF;Color.YELLOW=0xFFFFFF00;Color.CYAN=0xFF00FFFF;Color.MAGENTA=0xFFFF00FF;Color.TRANSPARENT=0;Color.sColorNameMap=new Map();graphics.Color=Color;Color.sColorNameMap=new Map();Color.sColorNameMap.set("black",Color.BLACK);Color.sColorNameMap.set("darkgray",Color.DKGRAY);Color.sColorNameMap.set("gray",Color.GRAY);Color.sColorNameMap.set("lightgray",Color.LTGRAY);Color.sColorNameMap.set("white",Color.WHITE);Color.sColorNameMap.set("red",Color.RED);Color.sColorNameMap.set("green",Color.GREEN);Color.sColorNameMap.set("blue",Color.BLUE);Color.sColorNameMap.set("yellow",Color.YELLOW);Color.sColorNameMap.set("cyan",Color.CYAN);Color.sColorNameMap.set("magenta",Color.MAGENTA);Color.sColorNameMap.set("aqua",0xFF00FFFF);Color.sColorNameMap.set("fuchsia",0xFFFF00FF);Color.sColorNameMap.set("darkgrey",Color.DKGRAY);Color.sColorNameMap.set("grey",Color.GRAY);Color.sColorNameMap.set("lightgrey",Color.LTGRAY);Color.sColorNameMap.set("lime",0xFF00FF00);Color.sColorNameMap.set("maroon",0xFF800000);Color.sColorNameMap.set("navy",0xFF000080);Color.sColorNameMap.set("olive",0xFF808000);Color.sColorNameMap.set("purple",0xFF800080);Color.sColorNameMap.set("silver",0xFFC0C0C0);Color.sColorNameMap.set("teal",0xFF008080);Color.sColorNameMap.set("transparent",Color.TRANSPARENT);})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Paint=function(){function Paint(){var flag=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;_classCallCheck(this,Paint);this.mTextStyle=Paint.Style.FILL;this.textScaleX=1;this.mFlag=0;this.shadowDx=0;this.shadowDy=0;this.shadowRadius=0;this.shadowColor=0;this.mFlag=flag;}_createClass(Paint,[{key:'set',value:function set(src){if(this!=src){this.setClassVariablesFrom(src);}}},{key:'setClassVariablesFrom',value:function setClassVariablesFrom(paint){this.mTextStyle=paint.mTextStyle;this.mColor=paint.mColor;this.mStrokeWidth=paint.mStrokeWidth;this.align=paint.align;this.mStrokeCap=paint.mStrokeCap;this.mStrokeJoin=paint.mStrokeJoin;this.textSize=paint.textSize;this.textScaleX=paint.textScaleX;this.mFlag=paint.mFlag;this.hasShadow=paint.hasShadow;this.shadowDx=paint.shadowDx;this.shadowDy=paint.shadowDy;this.shadowRadius=paint.shadowRadius;this.shadowColor=paint.shadowColor;this.drawableState=paint.drawableState;}},{key:'getStyle',value:function getStyle(){return this.mTextStyle;}},{key:'setStyle',value:function setStyle(style){this.mTextStyle=style;}},{key:'getFlags',value:function getFlags(){return this.mFlag;}},{key:'setFlags',value:function setFlags(flags){this.mFlag=flags;}},{key:'getTextScaleX',value:function getTextScaleX(){return this.textScaleX;}},{key:'setTextScaleX',value:function setTextScaleX(scaleX){this.textScaleX=scaleX;}},{key:'getColor',value:function getColor(){return this.mColor;}},{key:'setColor',value:function setColor(color){this.mColor=color;}},{key:'setARGB',value:function setARGB(a,r,g,b){this.setColor(a<<24|r<<16|g<<8|b);}},{key:'getAlpha',value:function getAlpha(){return graphics.Color.alpha(this.mColor);}},{key:'setAlpha',value:function setAlpha(alpha){this.setColor(graphics.Color.argb(alpha,graphics.Color.red(this.mColor),graphics.Color.green(this.mColor),graphics.Color.blue(this.mColor)));}},{key:'getStrokeWidth',value:function getStrokeWidth(){return this.mStrokeWidth;}},{key:'setStrokeWidth',value:function setStrokeWidth(width){this.mStrokeWidth=width;}},{key:'getStrokeCap',value:function getStrokeCap(){return this.mStrokeCap;}},{key:'setStrokeCap',value:function setStrokeCap(cap){this.mStrokeCap=cap;}},{key:'getStrokeJoin',value:function getStrokeJoin(){return this.mStrokeJoin;}},{key:'setStrokeJoin',value:function setStrokeJoin(join){this.mStrokeJoin=join;}},{key:'setAntiAlias',value:function setAntiAlias(enable){}},{key:'isAntiAlias',value:function isAntiAlias(){return true;}},{key:'setShadowLayer',value:function setShadowLayer(radius,dx,dy,color){this.hasShadow=radius>0.0;this.shadowRadius=radius;this.shadowDx=dx;this.shadowDy=dy;this.shadowColor=color;}},{key:'clearShadowLayer',value:function clearShadowLayer(){this.hasShadow=false;}},{key:'getTextAlign',value:function getTextAlign(){return this.align;}},{key:'setTextAlign',value:function setTextAlign(align){this.align=align;}},{key:'getTextSize',value:function getTextSize(){return this.textSize;}},{key:'setTextSize',value:function setTextSize(textSize){this.textSize=textSize;}},{key:'ascent',value:function ascent(){return this.textSize*Paint.FontMetrics_Size_Ascent;}},{key:'descent',value:function descent(){return this.textSize*Paint.FontMetrics_Size_Descent;}},{key:'getFontMetricsInt',value:function getFontMetricsInt(fmi){if(this.textSize==null){console.warn('call Paint.getFontMetricsInt but textSize not init');return 0;}if(fmi==null){return Math.floor((Paint.FontMetrics_Size_Descent-Paint.FontMetrics_Size_Ascent)*this.textSize);}fmi.ascent=Math.floor(Paint.FontMetrics_Size_Ascent*this.textSize);fmi.bottom=Math.floor(Paint.FontMetrics_Size_Bottom*this.textSize);fmi.descent=Math.floor(Paint.FontMetrics_Size_Descent*this.textSize);fmi.leading=Math.floor(Paint.FontMetrics_Size_Leading*this.textSize);fmi.top=Math.floor(Paint.FontMetrics_Size_Top*this.textSize);return fmi.descent-fmi.ascent;}},{key:'getFontMetrics',value:function getFontMetrics(metrics){if(this.textSize==null){console.warn('call Paint.getFontMetrics but textSize not init');return 0;}if(metrics==null){return(Paint.FontMetrics_Size_Descent-Paint.FontMetrics_Size_Ascent)*this.textSize;}metrics.ascent=Paint.FontMetrics_Size_Ascent*this.textSize;metrics.bottom=Paint.FontMetrics_Size_Bottom*this.textSize;metrics.descent=Paint.FontMetrics_Size_Descent*this.textSize;metrics.leading=Paint.FontMetrics_Size_Leading*this.textSize;metrics.top=Paint.FontMetrics_Size_Top*this.textSize;return metrics.descent-metrics.ascent;}},{key:'measureText',value:function measureText(text){var index=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var count=arguments.length>2&&arguments[2]!==undefined?arguments[2]:text.length;return graphics.Canvas.measureText(text.substr(index,count),this.textSize)*this.textScaleX;}},{key:'getTextWidths_count',value:function getTextWidths_count(text,index,count,widths){return this.getTextWidths_end(text,index,index+count,widths);}},{key:'getTextWidths_end',value:function getTextWidths_end(text,start,end,widths){if(text==null){throw Error('new IllegalArgumentException("text cannot be null")');}if((start|end|end-start|text.length-end)<0){throw Error('new IndexOutOfBoundsException()');}if(end-start>widths.length){throw Error('new ArrayIndexOutOfBoundsException()');}if(text.length==0||start==end){return 0;}for(var i=start;iPaint.CURSOR_OPT_MAX_VALUE){throw Error('new IndexOutOfBoundsException()');}var scalarArray=androidui.util.ArrayCreator.newNumberArray(contextLength);this.getTextRunAdvances_count(text,contextStart,contextLength,contextStart,contextLength,flags,scalarArray,0);var pos=offset-contextStart;switch(cursorOpt){case Paint.CURSOR_AFTER:if(pos0){--pos;}case Paint.CURSOR_AT_OR_BEFORE:while(pos>0&&scalarArray[pos]==0){--pos;}break;case Paint.CURSOR_AT:default:if(scalarArray[pos]==0){pos=-1;}break;}if(pos!=-1){pos+=contextStart;}return pos;}},{key:'getTextRunCursor_end',value:function getTextRunCursor_end(text,contextStart,contextEnd,flags,offset,cursorOpt){if((contextStart|contextEnd|offset|contextEnd-contextStart|offset-contextStart|contextEnd-offset|text.length-contextEnd|cursorOpt)<0||cursorOpt>Paint.CURSOR_OPT_MAX_VALUE){throw Error('new IndexOutOfBoundsException()');}var contextLen=contextEnd-contextStart;return this.getTextRunCursor_len(text,0,contextLen,flags,offset-contextStart,cursorOpt);}},{key:'isEmpty',value:function isEmpty(){return this.mColor==null&&this.align==null&&this.mStrokeWidth==null&&this.mStrokeCap==null&&this.mStrokeJoin==null&&!this.hasShadow&&this.textSize==null;}},{key:'applyToCanvas',value:function applyToCanvas(canvas){if(this.mColor!=null){canvas.setColor(this.mColor,this.getStyle());}if(this.align!=null){canvas.setTextAlign(Paint.Align[this.align].toLowerCase());}if(this.mStrokeWidth!=null){canvas.setLineWidth(this.mStrokeWidth);}if(this.mStrokeCap!=null){canvas.setLineCap(Paint.Cap[this.mStrokeCap].toLowerCase());}if(this.mStrokeJoin!=null){canvas.setLineJoin(Paint.Join[this.mStrokeJoin].toLowerCase());}if(this.hasShadow){canvas.setShadow(this.shadowRadius,this.shadowDx,this.shadowDy,this.shadowColor);}if(this.textSize!=null){canvas.setFontSize(this.textSize);}if(this.textScaleX!=1){canvas.scale(this.textScaleX,1);}}}]);return Paint;}();Paint.FontMetrics_Size_Ascent=-0.9277344;Paint.FontMetrics_Size_Bottom=0.2709961;Paint.FontMetrics_Size_Descent=0.24414062;Paint.FontMetrics_Size_Leading=0;Paint.FontMetrics_Size_Top=-1.05615234;Paint.DIRECTION_LTR=0;Paint.DIRECTION_RTL=1;Paint.CURSOR_AFTER=0;Paint.CURSOR_AT_OR_AFTER=1;Paint.CURSOR_BEFORE=2;Paint.CURSOR_AT_OR_BEFORE=3;Paint.CURSOR_AT=4;Paint.CURSOR_OPT_MAX_VALUE=Paint.CURSOR_AT;Paint.ANTI_ALIAS_FLAG=0x01;Paint.FILTER_BITMAP_FLAG=0x02;Paint.DITHER_FLAG=0x04;Paint.UNDERLINE_TEXT_FLAG=0x08;Paint.STRIKE_THRU_TEXT_FLAG=0x10;Paint.FAKE_BOLD_TEXT_FLAG=0x20;Paint.LINEAR_TEXT_FLAG=0x40;Paint.SUBPIXEL_TEXT_FLAG=0x80;Paint.DEV_KERN_TEXT_FLAG=0x100;Paint.LCD_RENDER_TEXT_FLAG=0x200;Paint.EMBEDDED_BITMAP_TEXT_FLAG=0x400;Paint.AUTO_HINTING_TEXT_FLAG=0x800;Paint.VERTICAL_TEXT_FLAG=0x1000;Paint.DEFAULT_PAINT_FLAGS=Paint.DEV_KERN_TEXT_FLAG|Paint.EMBEDDED_BITMAP_TEXT_FLAG;graphics.Paint=Paint;(function(Paint){var Align;(function(Align){Align[Align["LEFT"]=0]="LEFT";Align[Align["CENTER"]=1]="CENTER";Align[Align["RIGHT"]=2]="RIGHT";})(Align=Paint.Align||(Paint.Align={}));var FontMetrics=function FontMetrics(){_classCallCheck(this,FontMetrics);this.top=0;this.ascent=0;this.descent=0;this.bottom=0;this.leading=0;};Paint.FontMetrics=FontMetrics;var FontMetricsInt=function(){function FontMetricsInt(){_classCallCheck(this,FontMetricsInt);this.top=0;this.ascent=0;this.descent=0;this.bottom=0;this.leading=0;}_createClass(FontMetricsInt,[{key:'toString',value:function toString(){return"FontMetricsInt: top="+this.top+" ascent="+this.ascent+" descent="+this.descent+" bottom="+this.bottom+" leading="+this.leading;}}]);return FontMetricsInt;}();Paint.FontMetricsInt=FontMetricsInt;var Style;(function(Style){Style[Style["FILL"]=0]="FILL";Style[Style["STROKE"]=1]="STROKE";Style[Style["FILL_AND_STROKE"]=2]="FILL_AND_STROKE";})(Style=Paint.Style||(Paint.Style={}));var Cap;(function(Cap){Cap[Cap["BUTT"]=0]="BUTT";Cap[Cap["ROUND"]=1]="ROUND";Cap[Cap["SQUARE"]=2]="SQUARE";})(Cap=Paint.Cap||(Paint.Cap={}));var Join;(function(Join){Join[Join["MITER"]=0]="MITER";Join[Join["ROUND"]=1]="ROUND";Join[Join["BEVEL"]=2]="BEVEL";})(Join=Paint.Join||(Paint.Join={}));})(Paint=graphics.Paint||(graphics.Paint={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Path=function(){function Path(){_classCallCheck(this,Path);}_createClass(Path,[{key:'reset',value:function reset(){}}]);return Path;}();graphics.Path=Path;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var Point=function(){function Point(){_classCallCheck(this,Point);this.x=0;this.y=0;for(var _len7=arguments.length,args=Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}if(args.length===1){var src=args[0];this.x=src.x;this.y=src.y;}else{var _args$23=args[0],x=_args$23===undefined?0:_args$23,_args$24=args[1],y=_args$24===undefined?0:_args$24;this.x=x;this.y=y;}}_createClass(Point,[{key:'set',value:function set(x,y){this.x=x;this.y=y;}},{key:'negate',value:function negate(){this.x=-this.x;this.y=-this.y;}},{key:'offset',value:function offset(dx,dy){this.x+=dx;this.y+=dy;}},{key:'equals',value:function equals(){for(var _len8=arguments.length,args=Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}if(args.length===2){var _args$25=args[0],x=_args$25===undefined?0:_args$25,_args$26=args[1],y=_args$26===undefined?0:_args$26;return this.x==x&&this.y==y;}else{var o=args[0];if(this===o)return true;if(!o||!(o instanceof Point))return false;var point=o;if(this.x!=point.x)return false;if(this.y!=point.y)return false;return true;}}},{key:'toString',value:function toString(){return"Point("+this.x+", "+this.y+")";}}]);return Point;}();graphics.Point=Point;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var RectF=function(_graphics$Rect){_inherits(RectF,_graphics$Rect);function RectF(){_classCallCheck(this,RectF);return _possibleConstructorReturn(this,(RectF.__proto__||Object.getPrototypeOf(RectF)).apply(this,arguments));}return RectF;}(graphics.Rect);graphics.RectF=RectF;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var System=java.lang.System;var StringBuilder=java.lang.StringBuilder;var Matrix=function(){function Matrix(values){_classCallCheck(this,Matrix);this.mValues=androidui.util.ArrayCreator.newNumberArray(Matrix.MATRIX_SIZE);if(values instanceof Matrix)this.set(values);else if(values instanceof Array){System.arraycopy(values,0,this.mValues,0,Matrix.MATRIX_SIZE);}else{Matrix.reset(this.mValues);}}_createClass(Matrix,[{key:'isIdentity',value:function isIdentity(){for(var i=0,k=0;i<3;i++){for(var j=0;j<3;j++,k++){if(this.mValues[k]!=(i==j?1:0)){return false;}}}return true;}},{key:'hasPerspective',value:function hasPerspective(){return this.mValues[6]!=0||this.mValues[7]!=0||this.mValues[8]!=1;}},{key:'rectStaysRect',value:function rectStaysRect(){return(this.computeTypeMask()&Matrix.kRectStaysRect_Mask)!=0;}},{key:'set',value:function set(src){if(src==null){this.reset();}else{System.arraycopy(src.mValues,0,this.mValues,0,Matrix.MATRIX_SIZE);}}},{key:'equals',value:function equals(obj){if(!(obj instanceof Matrix))return false;var another=obj;for(var i=0;isy){xLarger=true;sx=sy;}else{sy=sx;}}tx=dst.left-src.left*sx;ty=dst.top-src.top*sy;if(stf==Matrix.ScaleToFit.CENTER||stf==Matrix.ScaleToFit.END){var diff=void 0;if(xLarger){diff=dst.width()-src.width()*sy;}else{diff=dst.height()-src.height()*sy;}if(stf==Matrix.ScaleToFit.CENTER){diff=diff/2;}if(xLarger){tx+=diff;}else{ty+=diff;}}d.mValues[0]=sx;d.mValues[4]=sy;d.mValues[2]=tx;d.mValues[5]=ty;d.mValues[1]=d.mValues[3]=d.mValues[6]=d.mValues[7]=0;}d.mValues[8]=1;return true;}},{key:'mapPoints',value:function mapPoints(dst){var dstIndex=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var src=arguments.length>2&&arguments[2]!==undefined?arguments[2]:dst;var srcIndex=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var pointCount=arguments.length>4&&arguments[4]!==undefined?arguments[4]:dst.length>>1;Matrix.checkPointArrays(src,srcIndex,dst,dstIndex,pointCount);var count=pointCount*2;var tmpDest=dst;var inPlace=dst==src;if(inPlace){tmpDest=androidui.util.ArrayCreator.newNumberArray(dstIndex+count);}for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:0;var src=arguments.length>2&&arguments[2]!==undefined?arguments[2]:dst;var srcIndex=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var ptCount=arguments.length>4&&arguments[4]!==undefined?arguments[4]:dst.length>>1;Matrix.checkPointArrays(src,srcIndex,dst,dstIndex,ptCount);if(this.hasPerspective()){var origin=[0.,0.];this.mapPoints(origin);this.mapPoints(dst,dstIndex,src,srcIndex,ptCount);var count=ptCount*2;for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:dst;if(dst==null||src==null){throw Error('new NullPointerException()');}var corners=[src.left,src.top,src.right,src.top,src.right,src.bottom,src.left,src.bottom];this.mapPoints(corners);dst.left=Math.min(Math.min(corners[0],corners[2]),Math.min(corners[4],corners[6]));dst.right=Math.max(Math.max(corners[0],corners[2]),Math.max(corners[4],corners[6]));dst.top=Math.min(Math.min(corners[1],corners[3]),Math.min(corners[5],corners[7]));dst.bottom=Math.max(Math.max(corners[1],corners[3]),Math.max(corners[5],corners[7]));return(this.computeTypeMask()&Matrix.kRectStaysRect_Mask)!=0;}},{key:'mapRadius',value:function mapRadius(radius){var src=[radius,0.,0.,radius];this.mapVectors(src,0,src,0,2);var l1=Matrix.getPointLength(src,0);var l2=Matrix.getPointLength(src,2);return Math.sqrt(l1*l2);}},{key:'getValues',value:function getValues(values){if(values.length<9){throw Error('new ArrayIndexOutOfBoundsException()');}System.arraycopy(this.mValues,0,values,0,Matrix.MATRIX_SIZE);}},{key:'setValues',value:function setValues(values){if(values.length<9){throw Error('new ArrayIndexOutOfBoundsException()');}System.arraycopy(values,0,this.mValues,0,Matrix.MATRIX_SIZE);}},{key:'toString',value:function toString(){var sb=new StringBuilder(64);sb.append("Matrix{");this.toShortString(sb);sb.append('}');return sb.toString();}},{key:'toShortString',value:function toShortString(sb){var values=androidui.util.ArrayCreator.newNumberArray(9);this.getValues(values);sb.append('[');sb.append(values[0]);sb.append(", ");sb.append(values[1]);sb.append(", ");sb.append(values[2]);sb.append("][");sb.append(values[3]);sb.append(", ");sb.append(values[4]);sb.append(", ");sb.append(values[5]);sb.append("][");sb.append(values[6]);sb.append(", ");sb.append(values[7]);sb.append(", ");sb.append(values[8]);sb.append(']');}},{key:'postTransform',value:function postTransform(matrix){var tmp=androidui.util.ArrayCreator.newNumberArray(9);Matrix.multiply(tmp,this.mValues,matrix);this.mValues=tmp;}},{key:'preTransform',value:function preTransform(matrix){var tmp=androidui.util.ArrayCreator.newNumberArray(9);Matrix.multiply(tmp,matrix,this.mValues);this.mValues=tmp;}},{key:'computeTypeMask',value:function computeTypeMask(){var mask=0;if(this.mValues[6]!=0.||this.mValues[7]!=0.||this.mValues[8]!=1.){mask|=Matrix.kPerspective_Mask;}if(this.mValues[2]!=0.||this.mValues[5]!=0.){mask|=Matrix.kTranslate_Mask;}var m00=this.mValues[0];var m01=this.mValues[1];var m10=this.mValues[3];var m11=this.mValues[4];if(m01!=0.||m10!=0.){mask|=Matrix.kAffine_Mask;}if(m00!=1.||m11!=1.){mask|=Matrix.kScale_Mask;}if((mask&Matrix.kPerspective_Mask)==0){var im00=m00!=0?1:0;var im01=m01!=0?1:0;var im10=m10!=0?1:0;var im11=m11!=0?1:0;var dp0=(im00|im11)^1;var dp1=im00&im11;var ds0=(im01|im10)^1;var ds1=im01&im10;mask|=(dp0&ds1|dp1&ds0)<src.length||dstStop>dst.length){throw Error('new ArrayIndexOutOfBoundsException()');}}},{key:'getPointLength',value:function getPointLength(src,index){return Math.sqrt(src[index]*src[index]+src[index+1]*src[index+1]);}},{key:'multiply',value:function multiply(dest,a,b){dest[0]=b[0]*a[0]+b[1]*a[3]+b[2]*a[6];dest[1]=b[0]*a[1]+b[1]*a[4]+b[2]*a[7];dest[2]=b[0]*a[2]+b[1]*a[5]+b[2]*a[8];dest[3]=b[3]*a[0]+b[4]*a[3]+b[5]*a[6];dest[4]=b[3]*a[1]+b[4]*a[4]+b[5]*a[7];dest[5]=b[3]*a[2]+b[4]*a[5]+b[5]*a[8];dest[6]=b[6]*a[0]+b[7]*a[3]+b[8]*a[6];dest[7]=b[6]*a[1]+b[7]*a[4]+b[8]*a[7];dest[8]=b[6]*a[2]+b[7]*a[5]+b[8]*a[8];}},{key:'getTranslate',value:function getTranslate(dx,dy){return this.setTranslate(androidui.util.ArrayCreator.newNumberArray(9),dx,dy);}},{key:'setTranslate',value:function setTranslate(dest,dx,dy){dest[0]=1;dest[1]=0;dest[2]=dx;dest[3]=0;dest[4]=1;dest[5]=dy;dest[6]=0;dest[7]=0;dest[8]=1;return dest;}},{key:'getScale',value:function getScale(sx,sy,px,py){if(px==null||py==null){return[sx,0,0,0,sy,0,0,0,1];}var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);Matrix.multiply(tmp2,tmp,Matrix.getScale(sx,sy));Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'getRotate_1',value:function getRotate_1(degrees){var rad=Math_toRadians(degrees);var sin=Math.sin(rad);var cos=Math.cos(rad);return Matrix.getRotate_2(sin,cos);}},{key:'getRotate_2',value:function getRotate_2(sin,cos){return this.setRotate_2(androidui.util.ArrayCreator.newNumberArray(9),sin,cos);}},{key:'setRotate_1',value:function setRotate_1(dest,degrees){var rad=Math_toRadians(degrees);var sin=Math.sin(rad);var cos=Math.cos(rad);return Matrix.setRotate_2(dest,sin,cos);}},{key:'setRotate_2',value:function setRotate_2(dest,sin,cos){dest[0]=cos;dest[1]=-sin;dest[2]=0;dest[3]=sin;dest[4]=cos;dest[5]=0;dest[6]=0;dest[7]=0;dest[8]=1;return dest;}},{key:'getRotate_3',value:function getRotate_3(degrees,px,py){var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);var rad=Math_toRadians(degrees);var cos=Math.cos(rad);var sin=Math.sin(rad);Matrix.multiply(tmp2,tmp,Matrix.getRotate_2(sin,cos));Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'getSkew',value:function getSkew(kx,ky,px,py){if(px==null||py==null){return[1,kx,0,ky,1,0,0,0,1];}var tmp=androidui.util.ArrayCreator.newNumberArray(9);var tmp2=androidui.util.ArrayCreator.newNumberArray(9);this.setTranslate(tmp,-px,-py);Matrix.multiply(tmp2,tmp,[1,kx,0,ky,1,0,0,0,1]);Matrix.multiply(tmp,tmp2,Matrix.getTranslate(px,py));return tmp;}},{key:'reset',value:function reset(mtx){mtx[0]=1;mtx[1]=0;mtx[2]=0;mtx[3]=0;mtx[4]=1;mtx[5]=0;mtx[6]=0;mtx[7]=0;mtx[8]=1;}}]);return Matrix;}();Matrix.MSCALE_X=0;Matrix.MSKEW_X=1;Matrix.MTRANS_X=2;Matrix.MSKEW_Y=3;Matrix.MSCALE_Y=4;Matrix.MTRANS_Y=5;Matrix.MPERSP_0=6;Matrix.MPERSP_1=7;Matrix.MPERSP_2=8;Matrix.MATRIX_SIZE=9;Matrix.IDENTITY_MATRIX=function(){var _Inner=function(_Matrix){_inherits(_Inner,_Matrix);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,(_Inner.__proto__||Object.getPrototypeOf(_Inner)).apply(this,arguments));}_createClass(_Inner,[{key:'oops',value:function oops(){throw Error('new IllegalStateException("Matrix can not be modified")');}},{key:'set',value:function set(src){this.oops();}},{key:'reset',value:function reset(){this.oops();}},{key:'setTranslate',value:function setTranslate(dx,dy){this.oops();}},{key:'setScale',value:function setScale(sx,sy,px,py){this.oops();}},{key:'setRotate',value:function setRotate(degrees,px,py){this.oops();}},{key:'setSinCos',value:function setSinCos(sinValue,cosValue,px,py){this.oops();}},{key:'setSkew',value:function setSkew(kx,ky,px,py){this.oops();}},{key:'setConcat',value:function setConcat(a,b){this.oops();return false;}},{key:'preTranslate',value:function preTranslate(dx,dy){this.oops();return false;}},{key:'preScale',value:function preScale(sx,sy,px,py){this.oops();return false;}},{key:'preRotate',value:function preRotate(degrees,px,py){this.oops();return false;}},{key:'preSkew',value:function preSkew(kx,ky,px,py){this.oops();return false;}},{key:'preConcat',value:function preConcat(other){this.oops();return false;}},{key:'postTranslate',value:function postTranslate(dx,dy){this.oops();return false;}},{key:'postScale',value:function postScale(sx,sy,px,py){this.oops();return false;}},{key:'postRotate',value:function postRotate(degrees,px,py){this.oops();return false;}},{key:'postSkew',value:function postSkew(kx,ky,px,py){this.oops();return false;}},{key:'postConcat',value:function postConcat(other){this.oops();return false;}},{key:'setRectToRect',value:function setRectToRect(src,dst,stf){this.oops();return false;}},{key:'setPolyToPoly',value:function setPolyToPoly(src,srcIndex,dst,dstIndex,pointCount){this.oops();return false;}},{key:'setValues',value:function setValues(values){this.oops();}}]);return _Inner;}(Matrix);return new _Inner();}();Matrix.kIdentity_Mask=0;Matrix.kTranslate_Mask=0x01;Matrix.kScale_Mask=0x02;Matrix.kAffine_Mask=0x04;Matrix.kPerspective_Mask=0x08;Matrix.kRectStaysRect_Mask=0x10;Matrix.kUnknown_Mask=0x80;Matrix.kAllMasks=Matrix.kTranslate_Mask|Matrix.kScale_Mask|Matrix.kAffine_Mask|Matrix.kPerspective_Mask|Matrix.kRectStaysRect_Mask;Matrix.kTranslate_Shift=0;Matrix.kScale_Shift=1;Matrix.kAffine_Shift=2;Matrix.kPerspective_Shift=3;Matrix.kRectStaysRect_Shift=4;graphics.Matrix=Matrix;(function(Matrix){var ScaleToFit;(function(ScaleToFit){ScaleToFit[ScaleToFit["FILL"]=0]="FILL";ScaleToFit[ScaleToFit["START"]=1]="START";ScaleToFit[ScaleToFit["CENTER"]=2]="CENTER";ScaleToFit[ScaleToFit["END"]=3]="END";})(ScaleToFit=Matrix.ScaleToFit||(Matrix.ScaleToFit={}));})(Matrix=graphics.Matrix||(graphics.Matrix={}));function Math_toRadians(angdeg){return angdeg/180.0*Math.PI;}})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var androidui;(function(androidui){var image;(function(image){var Rect=android.graphics.Rect;var Color=android.graphics.Color;var NetImage=function(){function NetImage(src,overrideImageRatio){_classCallCheck(this,NetImage);this.mImageWidth=0;this.mImageHeight=0;this.mOnLoads=new Set();this.mOnErrors=new Set();this.mImageLoaded=false;this.init(src);this.mOverrideImageRatio=overrideImageRatio;}_createClass(NetImage,[{key:'init',value:function init(src){this.createImage();this.src=src;}},{key:'createImage',value:function createImage(){this.browserImage=new Image();}},{key:'loadImage',value:function loadImage(){var _this6=this;this.browserImage.src=this.mSrc;this.browserImage.onload=function(){_this6.mImageWidth=_this6.browserImage.width;_this6.mImageHeight=_this6.browserImage.height;_this6.fireOnLoad();};this.browserImage.onerror=function(){_this6.mImageWidth=_this6.mImageHeight=0;_this6.fireOnError();};}},{key:'getImageRatio',value:function getImageRatio(){if(this.mOverrideImageRatio)return this.mOverrideImageRatio;var url=this.src;if(!url)return 1;if(url.startsWith('data:'))return 1;var match=url.match(/@(\d)x(\.9)?\.\w*$/);if(match){return parseInt(match[1]);}return 1;}},{key:'isImageLoaded',value:function isImageLoaded(){return this.mImageLoaded;}},{key:'fireOnLoad',value:function fireOnLoad(){this.mImageLoaded=true;var _arr=[].concat(_toConsumableArray(this.mOnLoads));for(var _i=0;_i<_arr.length;_i++){var load=_arr[_i];load();}}},{key:'fireOnError',value:function fireOnError(){this.mImageLoaded=false;var _arr2=[].concat(_toConsumableArray(this.mOnErrors));for(var _i2=0;_i2<_arr2.length;_i2++){var error=_arr2[_i2];error();}}},{key:'addLoadListener',value:function addLoadListener(onload,onerror){if(onload){this.mOnLoads.add(onload);}if(onerror){this.mOnErrors.add(onerror);}}},{key:'removeLoadListener',value:function removeLoadListener(onload,onerror){if(onload){this.mOnLoads.delete(onload);}if(onerror){this.mOnErrors.delete(onerror);}}},{key:'recycle',value:function recycle(){}},{key:'getBorderPixels',value:function getBorderPixels(callBack){var _this7=this;if(!callBack)return;var mTmpRect=new Rect();mTmpRect.set(0,1,1,this.height-1);this.getPixels(mTmpRect,function(leftBorder){mTmpRect.set(1,0,_this7.width-1,1);_this7.getPixels(mTmpRect,function(topBorder){mTmpRect.set(_this7.width-1,1,_this7.width,_this7.height-1);_this7.getPixels(mTmpRect,function(rightBorder){mTmpRect.set(1,_this7.height-1,_this7.width-1,_this7.height);_this7.getPixels(mTmpRect,function(bottomBorder){callBack(leftBorder,topBorder,rightBorder,bottomBorder);});});});});}},{key:'getPixels',value:function getPixels(bound,callBack){if(!callBack)return;var canvasEle=document.createElement('canvas');if(!bound)bound=new Rect(0,0,this.width,this.height);if(bound.isEmpty()){callBack([]);return;}var w=bound.width();var h=bound.height();canvasEle.width=w;canvasEle.height=h;var canvas=canvasEle.getContext('2d');canvas.drawImage(this.browserImage,bound.left,bound.top,w,h,0,0,w,h);var data=canvas.getImageData(0,0,w,h).data;var colorData=[];for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:0;var offsetY=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;this.drawCanvasImpl(canvas,offsetX,offsetY);}},{key:'drawCanvasImpl',value:function drawCanvasImpl(canvas,offsetX,offsetY){this._mCanvasContent.drawImage(canvas.mCanvasElement,offsetX,offsetY);}},{key:'drawImage',value:function drawImage(image,srcRect,dstRect,paint){var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}this.drawImageImpl(image,srcRect,dstRect);if(!paintEmpty)this.restoreImpl();}},{key:'drawImageImpl',value:function drawImageImpl(image,srcRect,dstRect){if(!dstRect){if(!srcRect){this._mCanvasContent.drawImage(image.browserImage,0,0);}else{this._mCanvasContent.drawImage(image.browserImage,srcRect.left,srcRect.top,srcRect.width(),srcRect.height(),0,0,srcRect.width(),srcRect.height());}}else{if(dstRect.isEmpty())return;if(!srcRect){this._mCanvasContent.drawImage(image.browserImage,dstRect.left,dstRect.top,dstRect.width(),dstRect.height());}else{this._mCanvasContent.drawImage(image.browserImage,srcRect.left,srcRect.top,srcRect.width(),srcRect.height(),dstRect.left,dstRect.top,dstRect.width(),dstRect.height());}}}},{key:'drawRect',value:function drawRect(){for(var _len11=arguments.length,args=Array(_len11),_key11=0;_key11<_len11;_key11++){args[_key11]=arguments[_key11];}if(args.length==2){var rect=args[0];this.drawRect(rect.left,rect.top,rect.right,rect.bottom,args[1]);}else{var left=args[0],top=args[1],right=args[2],bottom=args[3],paint=args[4];var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}var style=paint?paint.getStyle():graphics.Paint.Style.FILL;this.drawRectImpl(left,top,right-left,bottom-top,style);if(!paintEmpty)this.restoreImpl();}}},{key:'drawRectImpl',value:function drawRectImpl(left,top,width,height,style){switch(style){case graphics.Paint.Style.STROKE:this._mCanvasContent.strokeRect(left,top,width,height);break;case graphics.Paint.Style.FILL_AND_STROKE:this._mCanvasContent.fillRect(left,top,width,height);this._mCanvasContent.strokeRect(left,top,width,height);break;case graphics.Paint.Style.FILL:default:this._mCanvasContent.fillRect(left,top,width,height);break;}}},{key:'applyFillOrStrokeToContent',value:function applyFillOrStrokeToContent(style){switch(style){case graphics.Paint.Style.STROKE:this._mCanvasContent.stroke();break;case graphics.Paint.Style.FILL_AND_STROKE:this._mCanvasContent.fill();this._mCanvasContent.stroke();break;case graphics.Paint.Style.FILL:default:this._mCanvasContent.fill();break;}}},{key:'drawOval',value:function drawOval(oval,paint){if(oval==null){throw Error('new NullPointerException()');}var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}var style=paint?paint.getStyle():graphics.Paint.Style.FILL;this.drawOvalImpl(oval,style);if(!paintEmpty)this.restoreImpl();}},{key:'drawOvalImpl',value:function drawOvalImpl(oval,style){var ctx=this._mCanvasContent;ctx.beginPath();var cx=oval.centerX();var cy=oval.centerY();var rx=oval.width()/2;var ry=oval.height()/2;ctx.save();ctx.translate(cx-rx,cy-ry);ctx.scale(rx,ry);ctx.arc(1,1,1,0,2*Math.PI,false);ctx.restore();this.applyFillOrStrokeToContent(style);}},{key:'drawCircle',value:function drawCircle(cx,cy,radius,paint){var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}var style=paint?paint.getStyle():graphics.Paint.Style.FILL;this.drawCircleImpl(cx,cy,radius,style);if(!paintEmpty)this.restoreImpl();}},{key:'drawCircleImpl',value:function drawCircleImpl(cx,cy,radius,style){var ctx=this._mCanvasContent;ctx.beginPath();ctx.arc(cx,cy,radius,0,2*Math.PI,false);this.applyFillOrStrokeToContent(style);}},{key:'drawArc',value:function drawArc(oval,startAngle,sweepAngle,useCenter,paint){if(oval==null){throw Error('new NullPointerException()');}var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}var style=paint?paint.getStyle():graphics.Paint.Style.FILL;this.drawArcImpl(oval,startAngle,sweepAngle,useCenter,style);if(!paintEmpty)this.restoreImpl();}},{key:'drawArcImpl',value:function drawArcImpl(oval,startAngle,sweepAngle,useCenter,style){var ctx=this._mCanvasContent;ctx.save();ctx.beginPath();var cx=oval.centerX();var cy=oval.centerY();var rx=oval.width()/2;var ry=oval.height()/2;ctx.translate(cx-rx,cy-ry);ctx.scale(rx,ry);ctx.arc(1,1,1,startAngle/180*Math.PI,(sweepAngle+startAngle)/180*Math.PI,false);if(useCenter){ctx.lineTo(1,1);ctx.closePath();}ctx.restore();this.applyFillOrStrokeToContent(style);}},{key:'drawRoundRect',value:function drawRoundRect(rect,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,paint){if(rect==null){throw Error('new NullPointerException()');}var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}var style=paint?paint.getStyle():graphics.Paint.Style.FILL;this.drawRoundRectImpl(rect,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style);if(!paintEmpty)this.restoreImpl();}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(rect,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style){this.doRoundRectPath(rect.left,rect.top,rect.width(),rect.height(),radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft);this.applyFillOrStrokeToContent(style);}},{key:'drawPath',value:function drawPath(path,paint){}},{key:'drawText_count',value:function drawText_count(text,index,count,x,y,paint){if((index|count|index+count|text.length-index-count)<0){throw Error('new IndexOutOfBoundsException()');}this.drawText(text.substr(index,count),x,y,paint);}},{key:'drawText_end',value:function drawText_end(text,start,end,x,y,paint){if((start|end|end-start|text.length-end)<0){throw Error('new IndexOutOfBoundsException()');}this.drawText(text.substring(start,end),x,y,paint);}},{key:'drawText',value:function drawText(text,x,y,paint){var paintEmpty=!paint||paint.isEmpty();if(!paintEmpty){this.saveImpl();paint.applyToCanvas(this);}this.drawTextImpl(text,x,y,paint?paint.getStyle():null);if(!paintEmpty)this.restoreImpl();}},{key:'drawTextImpl',value:function drawTextImpl(text,x,y,style){switch(style){case graphics.Paint.Style.STROKE:this._mCanvasContent.strokeText(text,x,y);break;case graphics.Paint.Style.FILL_AND_STROKE:this._mCanvasContent.strokeText(text,x,y);this._mCanvasContent.fillText(text,x,y);break;case graphics.Paint.Style.FILL:default:this._mCanvasContent.fillText(text,x,y);break;}}},{key:'drawTextRun_count',value:function drawTextRun_count(text,index,count,contextIndex,contextCount,x,y,dir,paint){this.drawText_count(text,index,count,x,y,paint);}},{key:'drawTextRun_end',value:function drawTextRun_end(text,start,end,contextStart,contextEnd,x,y,dir,paint){this.drawText_end(text,start,end,x,y,paint);}},{key:'setColor',value:function setColor(color,style){if(color!=null){this.setColorImpl(color,style);}}},{key:'setColorImpl',value:function setColorImpl(color,style){var colorS=Color.toRGBAFunc(color);switch(style){case graphics.Paint.Style.STROKE:if(Color.parseColor(this._mCanvasContent.strokeStyle+'',0)!=color){this._mCanvasContent.strokeStyle=colorS;}break;case graphics.Paint.Style.FILL:if(Color.parseColor(this._mCanvasContent.fillStyle+'',0)!=color){this._mCanvasContent.fillStyle=colorS;}break;default:case graphics.Paint.Style.FILL_AND_STROKE:if(Color.parseColor(this._mCanvasContent.fillStyle+'',0)!=color){this._mCanvasContent.fillStyle=colorS;}if(Color.parseColor(this._mCanvasContent.strokeStyle+'',0)!=color){this._mCanvasContent.strokeStyle=colorS;}break;}}},{key:'multiplyGlobalAlpha',value:function multiplyGlobalAlpha(alpha){if(typeof alpha==='number'&&alpha<1){this.multiplyGlobalAlphaImpl(alpha);}}},{key:'multiplyGlobalAlphaImpl',value:function multiplyGlobalAlphaImpl(alpha){this._mCanvasContent.globalAlpha*=alpha;}},{key:'setGlobalAlpha',value:function setGlobalAlpha(alpha){if(typeof alpha==='number'){this.setGlobalAlphaImpl(alpha);}}},{key:'setGlobalAlphaImpl',value:function setGlobalAlphaImpl(alpha){this._mCanvasContent.globalAlpha=alpha;}},{key:'setTextAlign',value:function setTextAlign(align){if(align!=null)this.setTextAlignImpl(align);}},{key:'setTextAlignImpl',value:function setTextAlignImpl(align){this._mCanvasContent.textAlign=align;}},{key:'setLineWidth',value:function setLineWidth(width){if(width!=null)this.setLineWidthImpl(width);}},{key:'setLineWidthImpl',value:function setLineWidthImpl(width){this._mCanvasContent.lineWidth=width;}},{key:'setLineCap',value:function setLineCap(lineCap){if(lineCap!=null)this.setLineCapImpl(lineCap);}},{key:'setLineCapImpl',value:function setLineCapImpl(lineCap){this._mCanvasContent.lineCap=lineCap;}},{key:'setLineJoin',value:function setLineJoin(lineJoin){if(lineJoin!=null)this.setLineJoinImpl(lineJoin);}},{key:'setLineJoinImpl',value:function setLineJoinImpl(lineJoin){this._mCanvasContent.lineJoin=lineJoin;}},{key:'setShadow',value:function setShadow(radius,dx,dy,color){if(radius>0){this.setShadowImpl(radius,dx,dy,color);}}},{key:'setShadowImpl',value:function setShadowImpl(radius,dx,dy,color){this._mCanvasContent.shadowBlur=radius;this._mCanvasContent.shadowOffsetX=dx;this._mCanvasContent.shadowOffsetY=dy;this._mCanvasContent.shadowColor=Color.toRGBAFunc(color);}},{key:'setFontSize',value:function setFontSize(size){if(size!=null){this.setFontSizeImpl(size);}}},{key:'setFontSizeImpl',value:function setFontSizeImpl(size){var cFont=this._mCanvasContent.font;var fontParts=cFont.split(' ');if(Number.parseFloat(fontParts[fontParts.length-2])==size)return;fontParts[fontParts.length-2]=size+'px';this._mCanvasContent.font=fontParts.join(' ');}},{key:'setFont',value:function setFont(fontName){if(fontName!=null){this.setFontImpl(fontName);}}},{key:'setFontImpl',value:function setFontImpl(fontName){var cFont=this._mCanvasContent.font;var fontParts=cFont.split(' ');fontParts[fontParts.length-1]=fontName;var font=fontParts.join(' ');if(font!=cFont)this._mCanvasContent.font=font;}},{key:'isImageSmoothingEnabled',value:function isImageSmoothingEnabled(){return this.isImageSmoothingEnabledImpl();}},{key:'isImageSmoothingEnabledImpl',value:function isImageSmoothingEnabledImpl(){return this._mCanvasContent['imageSmoothingEnabled']||this._mCanvasContent['webkitImageSmoothingEnabled'];}},{key:'setImageSmoothingEnabled',value:function setImageSmoothingEnabled(enable){this.setImageSmoothingEnabledImpl(enable);}},{key:'setImageSmoothingEnabledImpl',value:function setImageSmoothingEnabledImpl(enable){if('imageSmoothingEnabled'in this._mCanvasContent){this._mCanvasContent['imageSmoothingEnabled']=enable;}else if('webkitImageSmoothingEnabled'in this._mCanvasContent){this._mCanvasContent['webkitImageSmoothingEnabled']=enable;}}}],[{key:'obtainRect',value:function obtainRect(copy){var rect=Canvas.sRectPool.acquire();if(!rect)rect=new Rect();if(copy)rect.set(copy);return rect;}},{key:'recycleRect',value:function recycleRect(rect){rect.setEmpty();Canvas.sRectPool.release(rect);}},{key:'measureText',value:function measureText(text,textSize){if(textSize==null||textSize===0)return 0;return Canvas.measureTextImpl(text,textSize);}},{key:'measureTextImpl',value:function measureTextImpl(text,textSize){var width=0;for(var i=0,length=text.length;i0&&arguments[0]!==undefined?arguments[0]:new Rect();bounds.set(this.mBounds);return bounds;}},{key:'getBounds',value:function getBounds(){if(this.mBounds==Drawable.ZERO_BOUNDS_RECT){this.mBounds=new Rect();}return this.mBounds;}},{key:'setDither',value:function setDither(dither){}},{key:'setCallback',value:function setCallback(cb){this.mCallback=new WeakReference(cb);}},{key:'getCallback',value:function getCallback(){if(this.mCallback!=null){return this.mCallback.get();}return null;}},{key:'setIgnoreNotifySizeChange',value:function setIgnoreNotifySizeChange(isIgnore){this.mIgnoreNotifySizeChange=isIgnore;}},{key:'notifySizeChangeSelf',value:function notifySizeChangeSelf(){if(this.mIgnoreNotifySizeChange)return;var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateSelf',value:function invalidateSelf(){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleSelf',value:function scheduleSelf(what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleSelf',value:function unscheduleSelf(what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'getAlpha',value:function getAlpha(){return 0xFF;}},{key:'isStateful',value:function isStateful(){return false;}},{key:'setState',value:function setState(stateSet){if(this.mStateSet+''!==stateSet+''){this.mStateSet=stateSet;return this.onStateChange(stateSet);}return false;}},{key:'getState',value:function getState(){return this.mStateSet;}},{key:'jumpToCurrentState',value:function jumpToCurrentState(){}},{key:'getCurrent',value:function getCurrent(){return this;}},{key:'setLevel',value:function setLevel(level){if(this.mLevel!=level){this.mLevel=level;return this.onLevelChange(level);}return false;}},{key:'getLevel',value:function getLevel(){return this.mLevel;}},{key:'setVisible',value:function setVisible(visible,restart){var changed=this.mVisible!=visible;if(changed){this.mVisible=visible;this.invalidateSelf();}return changed;}},{key:'isVisible',value:function isVisible(){return this.mVisible;}},{key:'setAutoMirrored',value:function setAutoMirrored(mirrored){}},{key:'isAutoMirrored',value:function isAutoMirrored(){return false;}},{key:'getOpacity',value:function getOpacity(){return PixelFormat.TRANSLUCENT;}},{key:'onStateChange',value:function onStateChange(state){return false;}},{key:'onLevelChange',value:function onLevelChange(level){return false;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return-1;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return-1;}},{key:'getMinimumWidth',value:function getMinimumWidth(){var intrinsicWidth=this.getIntrinsicWidth();return intrinsicWidth>0?intrinsicWidth:0;}},{key:'getMinimumHeight',value:function getMinimumHeight(){var intrinsicHeight=this.getIntrinsicHeight();return intrinsicHeight>0?intrinsicHeight:0;}},{key:'getPadding',value:function getPadding(padding){padding.set(0,0,0,0);return false;}},{key:'mutate',value:function mutate(){return this;}},{key:'getConstantState',value:function getConstantState(){return null;}},{key:'inflate',value:function inflate(r,parser){this.mVisible=parser.getAttribute('android:visible')!=='false';}}],[{key:'resolveOpacity',value:function resolveOpacity(op1,op2){if(op1==op2){return op1;}if(op1==PixelFormat.UNKNOWN||op2==PixelFormat.UNKNOWN){return PixelFormat.UNKNOWN;}if(op1==PixelFormat.TRANSLUCENT||op2==PixelFormat.TRANSLUCENT){return PixelFormat.TRANSLUCENT;}if(op1==PixelFormat.TRANSPARENT||op2==PixelFormat.TRANSPARENT){return PixelFormat.TRANSPARENT;}return PixelFormat.OPAQUE;}},{key:'createFromXml',value:function createFromXml(r,parser){var drawable=void 0;var name=parser.tagName.toLowerCase();switch(name){case"selector":drawable=new drawable_1.StateListDrawable();break;case"layer-list":drawable=new drawable_1.LayerDrawable(null);break;case"color":drawable=new drawable_1.ColorDrawable();break;case"scale":drawable=new drawable_1.ScaleDrawable();break;case"clip":drawable=new drawable_1.ClipDrawable();break;case"rotate":drawable=new drawable_1.RotateDrawable();break;case"animation-list":drawable=new drawable_1.AnimationDrawable();break;case"inset":drawable=new drawable_1.InsetDrawable(null,0);break;case"bitmap":var srcAttr=parser.getAttribute('src');if(!srcAttr)throw Error("XmlPullParserException: bitmap tag must have 'src' attribute");drawable=r.getDrawable(srcAttr);break;default:throw Error("XmlPullParserException: invalid drawable tag "+name);}drawable.inflate(r,parser);return drawable;}}]);return Drawable;}();Drawable.ZERO_BOUNDS_RECT=new Rect();drawable_1.Drawable=Drawable;})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var ColorDrawable=function(_drawable$Drawable){_inherits(ColorDrawable,_drawable$Drawable);function ColorDrawable(color){_classCallCheck(this,ColorDrawable);var _this8=_possibleConstructorReturn(this,(ColorDrawable.__proto__||Object.getPrototypeOf(ColorDrawable)).call(this));_this8.mMutated=false;_this8.mPaint=new graphics.Paint();_this8.mState=new ColorState();if(color!==undefined){_this8.setColor(color);}return _this8;}_createClass(ColorDrawable,[{key:'_setStateCopyFrom',value:function _setStateCopyFrom(state){this.mState=new ColorState(state);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(ColorDrawable.prototype.__proto__||Object.getPrototypeOf(ColorDrawable.prototype),'mutate',this).call(this)==this){this.mState=new ColorState(this.mState);this.mMutated=true;}return this;}},{key:'draw',value:function draw(canvas){if(this.mState.mUseColor>>>24!=0){this.mPaint.setColor(this.mState.mUseColor);canvas.drawRect(this.getBounds(),this.mPaint);}}},{key:'getColor',value:function getColor(){return this.mState.mUseColor;}},{key:'setColor',value:function setColor(color){if(this.mState.mBaseColor!=color||this.mState.mUseColor!=color){this.invalidateSelf();this.mState.mBaseColor=this.mState.mUseColor=color;}}},{key:'getAlpha',value:function getAlpha(){return this.mState.mUseColor>>>24;}},{key:'setAlpha',value:function setAlpha(alpha){alpha+=alpha>>7;var baseAlpha=this.mState.mBaseColor>>>24;var useAlpha=baseAlpha*alpha>>8;var oldUseColor=this.mState.mUseColor;this.mState.mUseColor=this.mState.mBaseColor<<8>>>8|useAlpha<<24;if(oldUseColor!=this.mState.mUseColor){this.invalidateSelf();}}},{key:'getOpacity',value:function getOpacity(){switch(this.mState.mUseColor>>>24){case 255:return graphics.PixelFormat.OPAQUE;case 0:return graphics.PixelFormat.TRANSPARENT;}return graphics.PixelFormat.TRANSLUCENT;}},{key:'inflate',value:function inflate(r,parser){_get2(ColorDrawable.prototype.__proto__||Object.getPrototypeOf(ColorDrawable.prototype),'inflate',this).call(this,r,parser);var state=this.mState;state.mBaseColor=androidui.attr.AttrValueParser.parseColor(r,parser.innerText,state.mBaseColor);state.mUseColor=state.mBaseColor;}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return ColorDrawable;}(drawable.Drawable);drawable.ColorDrawable=ColorDrawable;var ColorState=function(){function ColorState(state){_classCallCheck(this,ColorState);this.mBaseColor=0;this.mUseColor=0;if(state!=null){this.mBaseColor=state.mBaseColor;this.mUseColor=state.mUseColor;}}_createClass(ColorState,[{key:'newDrawable',value:function newDrawable(){var c=new ColorDrawable();c._setStateCopyFrom(this);return c;}}]);return ColorState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Drawable=android.graphics.drawable.Drawable;var ScrollBarDrawable=function(_Drawable){_inherits(ScrollBarDrawable,_Drawable);function ScrollBarDrawable(){_classCallCheck(this,ScrollBarDrawable);var _this9=_possibleConstructorReturn(this,(ScrollBarDrawable.__proto__||Object.getPrototypeOf(ScrollBarDrawable)).apply(this,arguments));_this9.mRange=0;_this9.mOffset=0;_this9.mExtent=0;_this9.mVertical=false;_this9.mChanged=false;_this9.mRangeChanged=false;_this9.mTempBounds=new graphics.Rect();_this9.mAlwaysDrawHorizontalTrack=false;_this9.mAlwaysDrawVerticalTrack=false;return _this9;}_createClass(ScrollBarDrawable,[{key:'setAlwaysDrawHorizontalTrack',value:function setAlwaysDrawHorizontalTrack(alwaysDrawTrack){this.mAlwaysDrawHorizontalTrack=alwaysDrawTrack;}},{key:'setAlwaysDrawVerticalTrack',value:function setAlwaysDrawVerticalTrack(alwaysDrawTrack){this.mAlwaysDrawVerticalTrack=alwaysDrawTrack;}},{key:'getAlwaysDrawVerticalTrack',value:function getAlwaysDrawVerticalTrack(){return this.mAlwaysDrawVerticalTrack;}},{key:'getAlwaysDrawHorizontalTrack',value:function getAlwaysDrawHorizontalTrack(){return this.mAlwaysDrawHorizontalTrack;}},{key:'setParameters',value:function setParameters(range,offset,extent,vertical){if(this.mVertical!=vertical){this.mChanged=true;}if(this.mRange!=range||this.mOffset!=offset||this.mExtent!=extent){this.mRangeChanged=true;}this.mRange=range;this.mOffset=offset;this.mExtent=extent;this.mVertical=vertical;}},{key:'draw',value:function draw(canvas){var vertical=this.mVertical;var extent=this.mExtent;var range=this.mRange;var drawTrack=true;var drawThumb=true;if(extent<=0||range<=extent){drawTrack=vertical?this.mAlwaysDrawVerticalTrack:this.mAlwaysDrawHorizontalTrack;drawThumb=false;}var r=this.getBounds();if(drawTrack){this.drawTrack(canvas,r,vertical);}if(drawThumb){var size=vertical?r.height():r.width();var thickness=vertical?r.width():r.height();var length=Math.round(size*extent/range);var offset=Math.round((size-length)*this.mOffset/(range-extent));var minLength=thickness*2;if(lengthsize){offset=size-length;}this.drawThumb(canvas,r,offset,length,vertical);}}},{key:'onBoundsChange',value:function onBoundsChange(bounds){_get2(ScrollBarDrawable.prototype.__proto__||Object.getPrototypeOf(ScrollBarDrawable.prototype),'onBoundsChange',this).call(this,bounds);this.mChanged=true;}},{key:'drawTrack',value:function drawTrack(canvas,bounds,vertical){var track=void 0;if(vertical){track=this.mVerticalTrack;}else{track=this.mHorizontalTrack;}if(track!=null){if(this.mChanged){track.setBounds(bounds);}track.draw(canvas);}}},{key:'drawThumb',value:function drawThumb(canvas,bounds,offset,length,vertical){var thumbRect=this.mTempBounds;var changed=this.mRangeChanged||this.mChanged;if(changed){if(vertical){thumbRect.set(bounds.left,bounds.top+offset,bounds.right,bounds.top+offset+length);}else{thumbRect.set(bounds.left+offset,bounds.top,bounds.left+offset+length,bounds.bottom);}}if(vertical){var thumb=this.mVerticalThumb;if(changed)thumb.setBounds(thumbRect);thumb.draw(canvas);}else{var _thumb=this.mHorizontalThumb;if(changed)_thumb.setBounds(thumbRect);_thumb.draw(canvas);}}},{key:'setVerticalThumbDrawable',value:function setVerticalThumbDrawable(thumb){if(thumb!=null){this.mVerticalThumb=thumb;}}},{key:'setVerticalTrackDrawable',value:function setVerticalTrackDrawable(track){this.mVerticalTrack=track;}},{key:'setHorizontalThumbDrawable',value:function setHorizontalThumbDrawable(thumb){if(thumb!=null){this.mHorizontalThumb=thumb;}}},{key:'setHorizontalTrackDrawable',value:function setHorizontalTrackDrawable(track){this.mHorizontalTrack=track;}},{key:'getSize',value:function getSize(vertical){if(vertical){return(this.mVerticalTrack!=null?this.mVerticalTrack:this.mVerticalThumb).getIntrinsicWidth();}else{return(this.mHorizontalTrack!=null?this.mHorizontalTrack:this.mHorizontalThumb).getIntrinsicHeight();}}},{key:'setAlpha',value:function setAlpha(alpha){if(this.mVerticalTrack!=null){this.mVerticalTrack.setAlpha(alpha);}this.mVerticalThumb.setAlpha(alpha);if(this.mHorizontalTrack!=null){this.mHorizontalTrack.setAlpha(alpha);}this.mHorizontalThumb.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mVerticalThumb.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return graphics.PixelFormat.TRANSLUCENT;}},{key:'toString',value:function toString(){return"ScrollBarDrawable: range="+this.mRange+" offset="+this.mOffset+" extent="+this.mExtent+(this.mVertical?" V":" H");}}]);return ScrollBarDrawable;}(Drawable);drawable.ScrollBarDrawable=ScrollBarDrawable;})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_2){var Integer=java.lang.Integer;var InsetDrawable=function(_drawable_2$Drawable){_inherits(InsetDrawable,_drawable_2$Drawable);function InsetDrawable(drawable,insetLeft){var insetTop=arguments.length>2&&arguments[2]!==undefined?arguments[2]:insetLeft;var insetRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:insetTop;var insetBottom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:insetRight;_classCallCheck(this,InsetDrawable);var _this10=_possibleConstructorReturn(this,(InsetDrawable.__proto__||Object.getPrototypeOf(InsetDrawable)).call(this));_this10.mTmpRect=new graphics.Rect();_this10.mMutated=false;_this10.mInsetState=new InsetState(null,_this10);_this10.mInsetState.mDrawable=drawable;_this10.mInsetState.mInsetLeft=insetLeft;_this10.mInsetState.mInsetTop=insetTop;_this10.mInsetState.mInsetRight=insetRight;_this10.mInsetState.mInsetBottom=insetBottom;if(drawable!=null){drawable.setCallback(_this10);}return _this10;}_createClass(InsetDrawable,[{key:'inflate',value:function inflate(r,parser){_get2(InsetDrawable.prototype.__proto__||Object.getPrototypeOf(InsetDrawable.prototype),'inflate',this).call(this,r,parser);this.mInsetState.mDrawable=null;var state=this.mInsetState;var a=r.obtainAttributes(parser);var dr=a.getDrawable("android:drawable");if(!dr&&parser.children[0]instanceof HTMLElement){dr=drawable_2.Drawable.createFromXml(r,parser.children[0]);}if(!dr){throw Error(" tag requires a 'drawable' attribute or child tag defining a drawable");}var inset=a.getDimensionPixelOffset("android:inset",Integer.MIN_VALUE);if(inset!=Integer.MIN_VALUE){state.mInsetLeft=inset;state.mInsetTop=inset;state.mInsetRight=inset;state.mInsetBottom=inset;}state.mInsetLeft=a.getDimensionPixelOffset("android:insetLeft",state.mInsetLeft);state.mInsetTop=a.getDimensionPixelOffset("android:insetTop",state.mInsetTop);state.mInsetRight=a.getDimensionPixelOffset("android:insetRight",state.mInsetRight);state.mInsetBottom=a.getDimensionPixelOffset("android:insetBottom",state.mInsetBottom);}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){this.mInsetState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){var pad=this.mInsetState.mDrawable.getPadding(padding);padding.left+=this.mInsetState.mInsetLeft;padding.right+=this.mInsetState.mInsetRight;padding.top+=this.mInsetState.mInsetTop;padding.bottom+=this.mInsetState.mInsetBottom;if(pad||(this.mInsetState.mInsetLeft|this.mInsetState.mInsetRight|this.mInsetState.mInsetTop|this.mInsetState.mInsetBottom)!=0){return true;}else{return false;}}},{key:'setVisible',value:function setVisible(visible,restart){this.mInsetState.mDrawable.setVisible(visible,restart);return _get2(InsetDrawable.prototype.__proto__||Object.getPrototypeOf(InsetDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mInsetState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mInsetState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mInsetState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mInsetState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mInsetState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){var r=this.mTmpRect;r.set(bounds);r.left+=this.mInsetState.mInsetLeft;r.top+=this.mInsetState.mInsetTop;r.right-=this.mInsetState.mInsetRight;r.bottom-=this.mInsetState.mInsetBottom;this.mInsetState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mInsetState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mInsetState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mInsetState.canConstantState()){return this.mInsetState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(InsetDrawable.prototype.__proto__||Object.getPrototypeOf(InsetDrawable.prototype),'mutate',this).call(this)==this){this.mInsetState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mInsetState.mDrawable;}}]);return InsetDrawable;}(drawable_2.Drawable);drawable_2.InsetDrawable=InsetDrawable;var InsetState=function(){function InsetState(orig,owner){_classCallCheck(this,InsetState);this.mInsetLeft=0;this.mInsetTop=0;this.mInsetRight=0;this.mInsetBottom=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mInsetLeft=orig.mInsetLeft;this.mInsetTop=orig.mInsetTop;this.mInsetRight=orig.mInsetRight;this.mInsetBottom=orig.mInsetBottom;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(InsetState,[{key:'newDrawable',value:function newDrawable(){var drawable=new InsetDrawable(null,0);drawable.mInsetState=new InsetState(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return InsetState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_3){var ShadowDrawable=function(_drawable_3$Drawable){_inherits(ShadowDrawable,_drawable_3$Drawable);function ShadowDrawable(drawable,radius,dx,dy,color){_classCallCheck(this,ShadowDrawable);var _this11=_possibleConstructorReturn(this,(ShadowDrawable.__proto__||Object.getPrototypeOf(ShadowDrawable)).call(this));_this11.mMutated=false;_this11.mState=new DrawableState(null,_this11);_this11.mState.mDrawable=drawable;_this11.mState.shadowDx=dx;_this11.mState.shadowDy=dy;_this11.mState.shadowRadius=radius;_this11.mState.shadowColor=color;if(drawable!=null){drawable.setCallback(_this11);}return _this11;}_createClass(ShadowDrawable,[{key:'setShadow',value:function setShadow(radius,dx,dy,color){this.mState.shadowDx=dx;this.mState.shadowDy=dy;this.mState.shadowRadius=radius;this.mState.shadowColor=color;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){if(!this.mState.shadowRadius||graphics.Color.alpha(this.mState.shadowColor)===0){this.mState.mDrawable.draw(canvas);return;}var saveCount=canvas.save();canvas.setShadow(this.mState.shadowRadius,this.mState.shadowDx,this.mState.shadowDy,this.mState.shadowColor);this.mState.mDrawable.draw(canvas);canvas.restoreToCount(saveCount);}},{key:'getPadding',value:function getPadding(padding){return this.mState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mState.mDrawable.setVisible(visible,restart);return _get2(ShadowDrawable.prototype.__proto__||Object.getPrototypeOf(ShadowDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return graphics.PixelFormat.TRANSPARENT;}},{key:'isStateful',value:function isStateful(){return this.mState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){this.mState.mDrawable.setBounds(bounds.left,bounds.top,bounds.right,bounds.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mState.canConstantState()){return this.mState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(ShadowDrawable.prototype.__proto__||Object.getPrototypeOf(ShadowDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mState.mDrawable;}}]);return ShadowDrawable;}(drawable_3.Drawable);drawable_3.ShadowDrawable=ShadowDrawable;var DrawableState=function(){function DrawableState(orig,owner){_classCallCheck(this,DrawableState);this.shadowDx=0;this.shadowDy=0;this.shadowRadius=0;this.shadowColor=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.shadowDx=orig.shadowDx;this.shadowDy=orig.shadowDy;this.shadowRadius=orig.shadowRadius;this.shadowColor=orig.shadowColor;}}_createClass(DrawableState,[{key:'newDrawable',value:function newDrawable(){var drawable=new ShadowDrawable(null,0,0,0,0);drawable.mState=new DrawableState(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return DrawableState;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var RoundRectDrawable=function(_drawable$Drawable2){_inherits(RoundRectDrawable,_drawable$Drawable2);function RoundRectDrawable(color,radiusTopLeft){var radiusTopRight=arguments.length>2&&arguments[2]!==undefined?arguments[2]:radiusTopLeft;var radiusBottomRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:radiusTopRight;var radiusBottomLeft=arguments.length>4&&arguments[4]!==undefined?arguments[4]:radiusBottomRight;_classCallCheck(this,RoundRectDrawable);var _this12=_possibleConstructorReturn(this,(RoundRectDrawable.__proto__||Object.getPrototypeOf(RoundRectDrawable)).call(this));_this12.mMutated=false;_this12.mPaint=new graphics.Paint();_this12.mState=new State();_this12.setColor(color);_this12.mState.mRadiusTopLeft=radiusTopLeft;_this12.mState.mRadiusTopRight=radiusTopRight;_this12.mState.mRadiusBottomRight=radiusBottomRight;_this12.mState.mRadiusBottomLeft=radiusBottomLeft;return _this12;}_createClass(RoundRectDrawable,[{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(RoundRectDrawable.prototype.__proto__||Object.getPrototypeOf(RoundRectDrawable.prototype),'mutate',this).call(this)==this){this.mState=new State(this.mState);this.mMutated=true;}return this;}},{key:'draw',value:function draw(canvas){if(this.mState.mUseColor>>>24!=0){this.mPaint.setColor(this.mState.mUseColor);canvas.drawRoundRect(this.getBounds(),this.mState.mRadiusTopLeft,this.mState.mRadiusTopRight,this.mState.mRadiusBottomRight,this.mState.mRadiusBottomLeft,this.mPaint);}}},{key:'getColor',value:function getColor(){return this.mState.mUseColor;}},{key:'setColor',value:function setColor(color){if(this.mState.mBaseColor!=color||this.mState.mUseColor!=color){this.invalidateSelf();this.mState.mBaseColor=this.mState.mUseColor=color;}}},{key:'getAlpha',value:function getAlpha(){return this.mState.mUseColor>>>24;}},{key:'setAlpha',value:function setAlpha(alpha){alpha+=alpha>>7;var baseAlpha=this.mState.mBaseColor>>>24;var useAlpha=baseAlpha*alpha>>8;var oldUseColor=this.mState.mUseColor;this.mState.mUseColor=this.mState.mBaseColor<<8>>>8|useAlpha<<24;if(oldUseColor!=this.mState.mUseColor){this.invalidateSelf();}}},{key:'getOpacity',value:function getOpacity(){switch(this.mState.mUseColor>>>24){case 255:return graphics.PixelFormat.OPAQUE;case 0:return graphics.PixelFormat.TRANSPARENT;}return graphics.PixelFormat.TRANSLUCENT;}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return RoundRectDrawable;}(drawable.Drawable);drawable.RoundRectDrawable=RoundRectDrawable;var State=function(){function State(state){_classCallCheck(this,State);this.mBaseColor=0;this.mUseColor=0;this.mRadiusTopLeft=0;this.mRadiusTopRight=0;this.mRadiusBottomRight=0;this.mRadiusBottomLeft=0;if(state!=null){this.mBaseColor=state.mBaseColor;this.mUseColor=state.mUseColor;this.mRadiusTopLeft=state.mRadiusTopLeft;this.mRadiusTopRight=state.mRadiusTopRight;this.mRadiusBottomRight=state.mRadiusBottomRight;this.mRadiusBottomLeft=state.mRadiusBottomLeft;}}_createClass(State,[{key:'newDrawable',value:function newDrawable(){var c=new RoundRectDrawable(0,0,0,0,0);c.mState=new State(this);return c;}}]);return State;}();})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var hashCodeGenerator=0;var JavaObject=function(){function JavaObject(){_classCallCheck(this,JavaObject);this.hash=hashCodeGenerator++;}_createClass(JavaObject,[{key:'hashCode',value:function hashCode(){return this.hash;}},{key:'getClass',value:function getClass(){return Class.getClass(this.constructor);}},{key:'equals',value:function equals(o){return this===o;}}],[{key:'class',get:function get(){return Class.getClass(this);}}]);return JavaObject;}();lang.JavaObject=JavaObject;var Class=function(){function Class(clazz){_classCallCheck(this,Class);this.clazz=clazz;}_createClass(Class,[{key:'getName',value:function getName(){return this.clazz.name;}},{key:'getSimpleName',value:function getSimpleName(){return this.clazz.name;}}],[{key:'getClass',value:function getClass(clazz){var c=Class.classCache.get(clazz);if(!c){c=new Class(clazz);Class.classCache.set(clazz,c);}return c;}}]);return Class;}();Class.classCache=new Map();lang.Class=Class;})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var lang;(function(lang){var util;(function(util){var concurrent;(function(concurrent){var CopyOnWriteArrayList=function(){function CopyOnWriteArrayList(){_classCallCheck(this,CopyOnWriteArrayList);this.mData=[];this.isDataNew=true;}_createClass(CopyOnWriteArrayList,[{key:'iterator',value:function iterator(){this.isDataNew=false;return this.mData;}},{key:Symbol.iterator,value:function value(){this.isDataNew=false;return this.mData[Symbol.iterator]();}},{key:'checkNewData',value:function checkNewData(){if(!this.isDataNew){this.isDataNew=true;this.mData=[].concat(_toConsumableArray(this.mData));}}},{key:'size',value:function size(){return this.mData.length;}},{key:'add',value:function add(){var _mData;this.checkNewData();(_mData=this.mData).push.apply(_mData,arguments);}},{key:'addAll',value:function addAll(array){var _mData2;this.checkNewData();(_mData2=this.mData).push.apply(_mData2,_toConsumableArray(array.mData));}},{key:'remove',value:function remove(item){this.checkNewData();this.mData.splice(this.mData.indexOf(item),1);}}]);return CopyOnWriteArrayList;}();concurrent.CopyOnWriteArrayList=CopyOnWriteArrayList;})(concurrent=util.concurrent||(util.concurrent={}));})(util=lang.util||(lang.util={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var util;(function(util){var Access=function(){function Access(){_classCallCheck(this,Access);}_createClass(Access,[{key:'get',value:function get(index){return this.mData[index];}},{key:'size',value:function size(){return this.mSize;}}]);return Access;}();var CopyOnWriteArray=function(){function CopyOnWriteArray(){_classCallCheck(this,CopyOnWriteArray);this.mData=[];this.mAccess=new Access();}_createClass(CopyOnWriteArray,[{key:'getArray',value:function getArray(){if(this.mStart){if(this.mDataCopy==null)this.mDataCopy=[].concat(_toConsumableArray(this.mData));return this.mDataCopy;}return this.mData;}},{key:'start',value:function start(){if(this.mStart)throw new Error("Iteration already started");this.mStart=true;this.mDataCopy=null;this.mAccess.mData=this.mData;this.mAccess.mSize=this.mData.length;return this.mAccess.mData;}},{key:'end',value:function end(){if(!this.mStart)throw new Error("Iteration not started");this.mStart=false;if(this.mDataCopy!=null){this.mData=this.mDataCopy;this.mAccess.mData=[];this.mAccess.mSize=0;}this.mDataCopy=null;}},{key:'size',value:function size(){return this.getArray().length;}},{key:'add',value:function add(){var _getArray;(_getArray=this.getArray()).push.apply(_getArray,arguments);}},{key:'addAll',value:function addAll(array){var _getArray2;(_getArray2=this.getArray()).push.apply(_getArray2,_toConsumableArray(array.mData));}},{key:'remove',value:function remove(item){this.getArray().splice(this.getArray().indexOf(item),1);}}]);return CopyOnWriteArray;}();util.CopyOnWriteArray=CopyOnWriteArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var CopyOnWriteArrayList=java.lang.util.concurrent.CopyOnWriteArrayList;var CopyOnWriteArray=android.util.CopyOnWriteArray;var ViewTreeObserver=function(){function ViewTreeObserver(){_classCallCheck(this,ViewTreeObserver);this.mAlive=true;}_createClass(ViewTreeObserver,[{key:'addOnGlobalLayoutListener',value:function addOnGlobalLayoutListener(listener){this.checkIsAlive();if(this.mOnGlobalLayoutListeners==null){this.mOnGlobalLayoutListeners=new CopyOnWriteArray();}this.mOnGlobalLayoutListeners.add(listener);}},{key:'removeGlobalOnLayoutListener',value:function removeGlobalOnLayoutListener(victim){this.removeOnGlobalLayoutListener(victim);}},{key:'removeOnGlobalLayoutListener',value:function removeOnGlobalLayoutListener(victim){this.checkIsAlive();if(this.mOnGlobalLayoutListeners==null){return;}this.mOnGlobalLayoutListeners.remove(victim);}},{key:'dispatchOnGlobalLayout',value:function dispatchOnGlobalLayout(){var listeners=this.mOnGlobalLayoutListeners;if(listeners!=null&&listeners.size()>0){var access=listeners.start();try{var count=access.length;for(var i=0;i0){var access=listeners.start();try{var count=access.length;for(var i=0;i0){var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=listeners[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var listener=_step3.value;listener.onTouchModeChanged(inTouchMode);}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}}}},{key:'addOnScrollChangedListener',value:function addOnScrollChangedListener(listener){this.checkIsAlive();if(this.mOnScrollChangedListeners==null){this.mOnScrollChangedListeners=new CopyOnWriteArray();}this.mOnScrollChangedListeners.add(listener);}},{key:'removeOnScrollChangedListener',value:function removeOnScrollChangedListener(victim){this.checkIsAlive();if(this.mOnScrollChangedListeners==null){return;}this.mOnScrollChangedListeners.remove(victim);}},{key:'dispatchOnScrollChanged',value:function dispatchOnScrollChanged(){var listeners=this.mOnScrollChangedListeners;if(listeners!=null&&listeners.size()>0){var access=listeners.start();try{var count=access.length;for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:window;var nameParts=classFullName.split('.');var finding=findInRoot;var _iteratorNormalCompletion5=true;var _didIteratorError5=false;var _iteratorError5=undefined;try{for(var _iterator5=nameParts[Symbol.iterator](),_step5;!(_iteratorNormalCompletion5=(_step5=_iterator5.next()).done);_iteratorNormalCompletion5=true){var part=_step5.value;var quickFind=finding[part.toLowerCase()];if(quickFind){finding=quickFind;continue;}var found=false;for(var key in finding){if(key.toUpperCase()===part.toUpperCase()){finding=finding[key];found=true;break;}}if(!found)return null;}}catch(err){_didIteratorError5=true;_iteratorError5=err;}finally{try{if(!_iteratorNormalCompletion5&&_iterator5.return){_iterator5.return();}}finally{if(_didIteratorError5){throw _iteratorError5;}}}if(finding===findInRoot){return null;}return finding;}},{key:'findViewClass',value:function findViewClass(className){var rootViewClass=ClassFinder._findViewClassCache[className];if(!rootViewClass)rootViewClass=ClassFinder.findClass(className,android.view);if(!rootViewClass)rootViewClass=ClassFinder.findClass(className,android['widget']);if(!rootViewClass)rootViewClass=ClassFinder.findClass(className,androidui['widget']);if(!rootViewClass)rootViewClass=ClassFinder.findClass(className);if(!rootViewClass){if(document.createElement(className)instanceof HTMLUnknownElement){console.warn('inflate: not find class '+className);}return null;}ClassFinder._findViewClassCache[className]=rootViewClass;return rootViewClass;}}]);return ClassFinder;}();ClassFinder._findViewClassCache={};util.ClassFinder=ClassFinder;})(util=androidui.util||(androidui.util={}));})(androidui||(androidui={}));var android;(function(android){var view;(function(view){var ClassFinder=androidui.util.ClassFinder;var LayoutInflater=function(){function LayoutInflater(context){_classCallCheck(this,LayoutInflater);this.mContext=context;}_createClass(LayoutInflater,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'inflate',value:function inflate(layout,viewParent){var _this13=this;var attachToRoot=arguments.length>2&&arguments[2]!==undefined?arguments[2]:viewParent!=null;var domtree=layout instanceof HTMLElement?layout:this.mContext.getResources().getLayout(layout);if(!domtree){console.error('not find layout: '+layout);return null;}var className=domtree.tagName;if(className.startsWith('ANDROID-')){className=className.substring('ANDROID-'.length);}if(className==='LAYOUT'){domtree=domtree.firstElementChild;}if(className==='INCLUDE'){var refLayoutId=domtree.getAttribute('layout');if(!refLayoutId)return null;var refEle=this.mContext.getResources().getLayout(refLayoutId);var _iteratorNormalCompletion6=true;var _didIteratorError6=false;var _iteratorError6=undefined;try{for(var _iterator6=Array.from(domtree.attributes)[Symbol.iterator](),_step6;!(_iteratorNormalCompletion6=(_step6=_iterator6.next()).done);_iteratorNormalCompletion6=true){var attr=_step6.value;var name=attr.name;if(name==='layout')continue;refEle.setAttribute(name,attr.value);}}catch(err){_didIteratorError6=true;_iteratorError6=err;}finally{try{if(!_iteratorNormalCompletion6&&_iterator6.return){_iterator6.return();}}finally{if(_didIteratorError6){throw _iteratorError6;}}}return this.inflate(refEle,viewParent);}else if(className==='MERGE'){if(!viewParent)throw Error('merge tag need ViewParent');Array.from(domtree.children).forEach(function(item){if(item instanceof HTMLElement){_this13.inflate(item,viewParent);}});return viewParent;}else if(className==='VIEW'){var overrideClass=domtree.className||domtree.getAttribute('android:class');if(overrideClass)className=overrideClass;}var rootViewClass=ClassFinder.findViewClass(className);if(!rootViewClass){return null;}var children=Array.from(domtree.children);var defStyle=void 0;var styleAttrValue=domtree.getAttribute('style');if(styleAttrValue){defStyle=this.mContext.getResources().getDefStyle(styleAttrValue);}var rootView=void 0;if(defStyle)rootView=new rootViewClass(this.mContext,domtree,defStyle);else rootView=new rootViewClass(this.mContext,domtree);if(rootView['onInflateAdapter']){rootView.onInflateAdapter(domtree,this.mContext,viewParent);domtree.parentNode.removeChild(domtree);}if(!(rootView instanceof view.View)){return rootView;}var params=void 0;if(viewParent){params=viewParent.generateLayoutParamsFromAttr(domtree);rootView.setLayoutParams(params);}if(rootView instanceof view.ViewGroup){(function(){var parent=rootView;children.forEach(function(item){if(item instanceof HTMLElement){_this13.inflate(item,parent);}});})();}rootView.onFinishInflate();if(attachToRoot&&viewParent){if(params){viewParent.addView(rootView,params);}else{viewParent.addView(rootView);}}return rootView;}}],[{key:'from',value:function from(context){return context.getLayoutInflater();}}]);return LayoutInflater;}();view.LayoutInflater=LayoutInflater;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var content;(function(content){var LayoutInflater=android.view.LayoutInflater;var Context=function(){function Context(androidUI){_classCallCheck(this,Context);this.androidUI=androidUI;this.mLayoutInflater=new LayoutInflater(this);this.mResources=new android.content.res.Resources(this);}_createClass(Context,[{key:'getApplicationContext',value:function getApplicationContext(){return this.androidUI.mApplication;}},{key:'getResources',value:function getResources(){return this.mResources;}},{key:'getLayoutInflater',value:function getLayoutInflater(){return this.mLayoutInflater;}},{key:'obtainStyledAttributes',value:function obtainStyledAttributes(attrs,defStyleAttr){return content.res.TypedArray.obtain(this.mResources,attrs,defStyleAttr);}}]);return Context;}();content.Context=Context;})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var R;(function(R){var _layout_data={"action_bar":"\n \n \n \n \n \n \n","alert_dialog":"\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n","alert_dialog_progress":"\n \n \n \n","popup_menu_item_layout":"\n\n \n \n \n \n\n \n\n \n\n \n\n \n \n","select_dialog":"","select_dialog_item":"","select_dialog_multichoice":"","select_dialog_singlechoice":"","simple_spinner_dropdown_item":"","simple_spinner_item":"","transient_notification":"\n\n \n\n"};var _tempDiv=document.createElement('div');var layout=function(){function layout(){_classCallCheck(this,layout);}_createClass(layout,null,[{key:'getLayoutData',value:function getLayoutData(layoutName){if(!layoutName)return null;if(!_layout_data[layoutName])return null;_tempDiv.innerHTML=_layout_data[layoutName];var data=_tempDiv.firstElementChild;_tempDiv.removeChild(data);return data;}}]);return layout;}();layout.action_bar='@android:layout/action_bar';layout.alert_dialog='@android:layout/alert_dialog';layout.alert_dialog_progress='@android:layout/alert_dialog_progress';layout.popup_menu_item_layout='@android:layout/popup_menu_item_layout';layout.select_dialog='@android:layout/select_dialog';layout.select_dialog_item='@android:layout/select_dialog_item';layout.select_dialog_multichoice='@android:layout/select_dialog_multichoice';layout.select_dialog_singlechoice='@android:layout/select_dialog_singlechoice';layout.simple_spinner_dropdown_item='@android:layout/simple_spinner_dropdown_item';layout.simple_spinner_item='@android:layout/simple_spinner_item';layout.transient_notification='@android:layout/transient_notification';R.layout=layout;})(R=android.R||(android.R={}));})(android||(android={}));var androidui;(function(androidui){var attr;(function(attr){var AttrValueParser=function(){function AttrValueParser(){_classCallCheck(this,AttrValueParser);}_createClass(AttrValueParser,null,[{key:'parseString',value:function parseString(r,value){var defValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:value;if(value==null)return defValue;if(value.startsWith('@')){try{return r.getString(value);}catch(e){console.warn(e);}}return defValue;}},{key:'parseBoolean',value:function parseBoolean(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getBoolean(value);}catch(e){console.warn(e);}}if(value==='false'||value==='0')return false;else if(value==='true'||value==='1'||value==='')return true;return defValue;}},{key:'parseInt',value:function(_parseInt){function parseInt(_x30,_x31,_x32){return _parseInt.apply(this,arguments);}parseInt.toString=function(){return _parseInt.toString();};return parseInt;}(function(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getInteger(value);}catch(e){console.warn(e);}}var v=parseInt(value);if(isNaN(v))return defValue;return v;})},{key:'parseFloat',value:function(_parseFloat){function parseFloat(_x33,_x34,_x35){return _parseFloat.apply(this,arguments);}parseFloat.toString=function(){return _parseFloat.toString();};return parseFloat;}(function(r,value,defValue){if(value==null)return defValue;if(value.startsWith('@')){try{return r.getFloat(value);}catch(e){console.warn(e);}}var v=parseFloat(value);if(isNaN(v))return defValue;if(value.endsWith('%'))v/=100;return v;})},{key:'parseColor',value:function parseColor(r,value,defValue){if(value==null)return defValue;try{if(value.startsWith('@')){return r.getColor(value);}else{return android.graphics.Color.parseColor(value);}}catch(e){console.warn(e);}return defValue;}},{key:'parseColorStateList',value:function parseColorStateList(r,value){if(value==null)return null;if(value.startsWith('@')){return r.getColorStateList(value);}else{try{var color=android.graphics.Color.parseColor(value);return android.content.res.ColorStateList.valueOf(color);}catch(e){console.warn(e);}}return null;}},{key:'parseDimension',value:function parseDimension(r,value,defValue){var baseValue=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimension(value,baseValue);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimension(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDimensionPixelOffset',value:function parseDimensionPixelOffset(r,value,defValue){var baseValue=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimensionPixelOffset(value,baseValue);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimensionPixelOffset(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDimensionPixelSize',value:function parseDimensionPixelSize(r,value,defValue){var baseValue=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(value==null)return defValue;if(value.startsWith('@')){try{return r.getDimensionPixelSize(value);}catch(e){console.warn(e);return defValue;}}try{return android.util.TypedValue.complexToDimensionPixelSize(value,baseValue);}catch(e){console.warn(e);}return defValue;}},{key:'parseDrawable',value:function parseDrawable(r,value){if(value==null)return null;if(value.startsWith('@')){try{return r.getDrawable(value);}catch(e){console.warn(e);}}else if(value.startsWith('url(')){value=value.substring('url('.length);if(value.endsWith(')'))value=value.substring(0,value.length-1);return new androidui.image.NetDrawable(value);}else{try{var color=android.graphics.Color.parseColor(value);return new android.graphics.drawable.ColorDrawable(color);}catch(e){}}return null;}},{key:'parseTextArray',value:function parseTextArray(r,value){if(value==null)return null;if(value.startsWith('@')){return r.getStringArray(value);}else{try{var json=JSON.parse(value);if(json instanceof Array)return json;}catch(e){}}return null;}}]);return AttrValueParser;}();attr.AttrValueParser=AttrValueParser;})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));var android;(function(android){var content;(function(content){var res;(function(res_1){var AttrValueParser=androidui.attr.AttrValueParser;var TypedArray=function(){function TypedArray(res,attrMap){_classCallCheck(this,TypedArray);this.mResources=res;this.attrMap=attrMap;}_createClass(TypedArray,[{key:'checkRecycled',value:function checkRecycled(){if(this.mRecycled){throw new Error("RuntimeException : Cannot make calls to a recycled instance!");}}},{key:'length',value:function length(){this.checkRecycled();if(!this.attrMap)return 0;return this.attrMap.size;}},{key:'getIndex',value:function getIndex(keyIndex){if(!this.attrMapKeysCache){this.attrMapKeysCache=Array.from(this.attrMap.keys());}return this.attrMapKeysCache[keyIndex];}},{key:'getLowerCaseNoNamespaceAttrNames',value:function getLowerCaseNoNamespaceAttrNames(){var keys=[];var _iteratorNormalCompletion7=true;var _didIteratorError7=false;var _iteratorError7=undefined;try{for(var _iterator7=this.attrMap.keys()[Symbol.iterator](),_step7;!(_iteratorNormalCompletion7=(_step7=_iterator7.next()).done);_iteratorNormalCompletion7=true){var key=_step7.value;keys.push(key.split(':').pop());}}catch(err){_didIteratorError7=true;_iteratorError7=err;}finally{try{if(!_iteratorNormalCompletion7&&_iterator7.return){_iterator7.return();}}finally{if(_didIteratorError7){throw _iteratorError7;}}}return keys;}},{key:'getResources',value:function getResources(){return this.mResources;}},{key:'getAttrValue',value:function getAttrValue(attrName){var name=attrName.toLowerCase();return this.attrMap&&(this.attrMap.get(name)||this.attrMap.get('android:'+name));}},{key:'getResourceId',value:function getResourceId(attrName,defaultResourceId){if(this.hasValueOrEmpty(attrName)){return this.getAttrValue(attrName);}return defaultResourceId;}},{key:'getText',value:function getText(attrName){return this.getString(attrName);}},{key:'getString',value:function getString(attrName){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseString(this.mResources,value,value);}},{key:'getBoolean',value:function getBoolean(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseBoolean(this.mResources,value,defValue);}},{key:'getInt',value:function getInt(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseInt(this.mResources,value,defValue);}},{key:'getFloat',value:function getFloat(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseFloat(this.mResources,value,defValue);}},{key:'getColor',value:function getColor(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseColor(this.mResources,value,defValue);}},{key:'getColorStateList',value:function getColorStateList(attrName){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseColorStateList(this.mResources,value);}},{key:'getInteger',value:function getInteger(attrName,defValue){return this.getInt(attrName,defValue);}},{key:'getLayoutDimension',value:function getLayoutDimension(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);if(value==='wrap_content')return-2;if(value==='fill_parent'||value==='match_parent')return-1;return AttrValueParser.parseDimension(this.mResources,value,defValue);}},{key:'getDimension',value:function getDimension(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseDimension(this.mResources,value,defValue);}},{key:'getDimensionPixelOffset',value:function getDimensionPixelOffset(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseDimensionPixelOffset(this.mResources,value,defValue);}},{key:'getDimensionPixelSize',value:function getDimensionPixelSize(attrName,defValue){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseDimensionPixelSize(this.mResources,value,defValue);}},{key:'getDrawable',value:function getDrawable(attrName){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseDrawable(this.mResources,value);}},{key:'getTextArray',value:function getTextArray(attrName){this.checkRecycled();var value=this.getAttrValue(attrName);return AttrValueParser.parseTextArray(this.mResources,value);}},{key:'hasValue',value:function hasValue(attrName){this.checkRecycled();return this.getAttrValue(attrName)!=null;}},{key:'hasValueOrEmpty',value:function hasValueOrEmpty(attrName){this.checkRecycled();var name=attrName.toLowerCase();return this.attrMap&&(this.attrMap.has(name)||this.attrMap.has('android:'+name));}},{key:'recycle',value:function recycle(){this.mRecycled=true;this.attrMap=null;this.attrMapKeysCache=null;this.mResources.mTypedArrayPool.release(this);}}],[{key:'obtain',value:function obtain(res,xml,defStyleAttr){var attrMap=new Map();if(defStyleAttr){var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=defStyleAttr.entries()[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var _step8$value=_slicedToArray(_step8.value,2),key=_step8$value[0],value=_step8$value[1];attrMap.set(key.toLowerCase(),value);}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally{try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally{if(_didIteratorError8){throw _iteratorError8;}}}}if(xml){var refStyleString=xml.getAttribute('android:style');if(refStyleString){var map=res.getStyleAsMap(refStyleString);if(map){var _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=map.entries()[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var _step9$value=_slicedToArray(_step9.value,2),key=_step9$value[0],value=_step9$value[1];attrMap.set(key.toLowerCase(),value);}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally{try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally{if(_didIteratorError9){throw _iteratorError9;}}}}}var _iteratorNormalCompletion10=true;var _didIteratorError10=false;var _iteratorError10=undefined;try{for(var _iterator10=Array.from(xml.attributes)[Symbol.iterator](),_step10;!(_iteratorNormalCompletion10=(_step10=_iterator10.next()).done);_iteratorNormalCompletion10=true){var attr=_step10.value;var name=attr.name;if(name==='android:style'||name==='style')continue;attrMap.set(name,attr.value);}}catch(err){_didIteratorError10=true;_iteratorError10=err;}finally{try{if(!_iteratorNormalCompletion10&&_iterator10.return){_iterator10.return();}}finally{if(_didIteratorError10){throw _iteratorError10;}}}}var attrs=res.mTypedArrayPool.acquire();if(attrs!=null){attrs.mRecycled=false;attrs.attrMap=attrMap;attrs.attrMapKeysCache=[];return attrs;}return new TypedArray(res,attrMap);}}]);return TypedArray;}();res_1.TypedArray=TypedArray;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var content;(function(content){var res;(function(res){var DisplayMetrics=android.util.DisplayMetrics;var Drawable=android.graphics.drawable.Drawable;var Color=android.graphics.Color;var SynchronizedPool=android.util.Pools.SynchronizedPool;var ColorDrawable=android.graphics.drawable.ColorDrawable;var Resources=function(){function Resources(context){var _this14=this;_classCallCheck(this,Resources);this.mTypedArrayPool=new SynchronizedPool(5);this.context=context;window.addEventListener('resize',function(){if(_this14.displayMetrics){_this14.fillDisplayMetrics(_this14.displayMetrics);}});}_createClass(Resources,[{key:'getDisplayMetrics',value:function getDisplayMetrics(){if(this.displayMetrics)return this.displayMetrics;this.displayMetrics=new DisplayMetrics();this.fillDisplayMetrics(this.displayMetrics);return this.displayMetrics;}},{key:'fillDisplayMetrics',value:function fillDisplayMetrics(displayMetrics){var density=window.devicePixelRatio;displayMetrics.xdpi=window.screen.deviceXDPI||DisplayMetrics.DENSITY_DEFAULT;displayMetrics.ydpi=window.screen.deviceYDPI||DisplayMetrics.DENSITY_DEFAULT;displayMetrics.density=density;displayMetrics.densityDpi=density*DisplayMetrics.DENSITY_DEFAULT;displayMetrics.scaledDensity=density;var contentEle=this.context?this.context.androidUI.androidUIElement:document.documentElement;displayMetrics.widthPixels=contentEle.offsetWidth*density;displayMetrics.heightPixels=contentEle.offsetHeight*density;}},{key:'getDefStyle',value:function getDefStyle(refString){if(refString==='@null')return null;if(refString.startsWith('@android:attr/')){refString=refString.substring('@android:attr/'.length);return android.R.attr[refString];}}},{key:'getDrawable',value:function getDrawable(refString){if(refString==='@null')return null;if(refString.startsWith('@android:drawable/')){refString=refString.substring('@android:drawable/'.length);return android.R.drawable[refString]||android.R.image[refString];}if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(color instanceof res.ColorStateList){color=color.getDefaultColor();}return new ColorDrawable(color);}if(Resources._AppBuildImageFileFinder){var drawable=Resources._AppBuildImageFileFinder(refString);if(drawable)return drawable;}if(!refString.startsWith('@')){refString='@drawable/'+refString;}var ele=this.getXml(refString);if(ele){return Drawable.createFromXml(this,ele);}ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:drawable/')||text.startsWith('@drawable/')){return this.getDrawable(text);}if(text.startsWith('@android:color/')||text.startsWith('@color/')){var _color2=this.getColor(text);return new ColorDrawable(_color2);}return Drawable.createFromXml(this,ele);}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getColor',value:function getColor(refString){if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(color instanceof res.ColorStateList){color=color.getDefaultColor();}return color;}else{if(!refString.startsWith('@color/')){refString='@color/'+refString;}var ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:color/')||text.startsWith('@color/')){return this.getColor(text);}return Color.parseColor(text);}ele=this.getXml(refString);if(ele){var colorList=res.ColorStateList.createFromXml(this,ele);if(colorList)return colorList.getDefaultColor();}}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getColorStateList',value:function getColorStateList(refString){if(refString==='@null')return null;if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);var color=android.R.color[refString];if(typeof color==="number"){color=res.ColorStateList.valueOf(color);}return color;}else{if(!refString.startsWith('@color/')){refString='@color/'+refString;}var ele=this.getXml(refString);if(ele){return res.ColorStateList.createFromXml(this,ele);}ele=this.getValue(refString);if(ele){var text=ele.innerText;if(text.startsWith('@android:color/')||text.startsWith('@color/')){return this.getColorStateList(text);}return res.ColorStateList.valueOf(Color.parseColor(text));}}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimension',value:function getDimension(refString){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimension(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimensionPixelOffset',value:function getDimensionPixelOffset(refString){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimensionPixelOffset(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getDimensionPixelSize',value:function getDimensionPixelSize(refString){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(!refString.startsWith('@dimen/'))refString='@dimen/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return android.util.TypedValue.complexToDimensionPixelSize(text,baseValue,this.getDisplayMetrics());}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getBoolean',value:function getBoolean(refString){if(!refString.startsWith('@bool/'))refString='@bool/'+refString;var ele=this.getValue(refString);if(ele){var text=ele.innerText;return text=='true';}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getInteger',value:function getInteger(refString){if(!refString.startsWith('@integer/'))refString='@integer/'+refString;var ele=this.getValue(refString);if(ele){return parseInt(ele.innerText);}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getIntArray',value:function getIntArray(refString){if(!refString.startsWith('@array/'))refString='@array/'+refString;var ele=this.getValue(refString);if(ele){var intArray=[];var _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=Array.from(ele.children)[Symbol.iterator](),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var child=_step11.value;intArray.push(parseInt(child.innerText));}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally{try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally{if(_didIteratorError11){throw _iteratorError11;}}}return intArray;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getFloat',value:function getFloat(refString){return this.getDimension(refString);}},{key:'getString',value:function getString(refString){if(refString.startsWith('@android:string/')){refString=refString.substring('@android:string/'.length);return android.R.string_[refString];}if(!refString.startsWith('@string/'))refString='@string/'+refString;var ele=this.getValue(refString);if(ele){return ele.innerText;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getStringArray',value:function getStringArray(refString){if(!refString.startsWith('@array/'))refString='@array/'+refString;var ele=this.getValue(refString);if(ele){var stringArray=[];var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=Array.from(ele.children)[Symbol.iterator](),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var child=_step12.value;stringArray.push(child.innerText);}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally{try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally{if(_didIteratorError12){throw _iteratorError12;}}}return stringArray;}throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getLayout',value:function getLayout(refString){if(!refString||!refString.trim().startsWith('@'))return null;if(refString==='@null')return null;if(refString.startsWith('@android:layout/')){refString=refString.substring('@android:layout/'.length);return android.R.layout.getLayoutData(refString);}if(!refString.startsWith('@layout/'))refString='@layout/'+refString;var ele=this.getXml(refString);if(ele)return ele;throw new Error("NotFoundException: Resource "+refString+" is not found");}},{key:'getAnimation',value:function getAnimation(refString){if(refString==='@null')return null;if(!refString||!refString.trim().startsWith('@'))return null;if(refString.startsWith('@android:anim/')){refString=refString.substring('@android:anim/'.length);return android.R.anim[refString];}}},{key:'getStyleAsMap',value:function getStyleAsMap(refString){var _this15=this;if(refString==='@null')return null;if(!refString.startsWith('@style/')){refString='@style/'+refString;}var styleMap=new Map();var parseStyle=function parseStyle(refString){var styleXml=_this15.getValue(refString);if(!styleXml)return;var parent=styleXml.getAttribute('parent');if(parent){if(!parent.startsWith('@style/')){parent='@style/'+parent;}parseStyle(parent);}var styleName=refString.substring('@style/'.length);if(styleName.includes('.')){var parts=styleName.split('.');parts.shift();var nameParent=parts.join('.');parseStyle('@style/'+nameParent);}var _iteratorNormalCompletion13=true;var _didIteratorError13=false;var _iteratorError13=undefined;try{for(var _iterator13=Array.from(styleXml.children)[Symbol.iterator](),_step13;!(_iteratorNormalCompletion13=(_step13=_iterator13.next()).done);_iteratorNormalCompletion13=true){var item=_step13.value;var name=item.getAttribute('name');if(name){styleMap.set(name,item.innerText);}}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally{try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally{if(_didIteratorError13){throw _iteratorError13;}}}};parseStyle(refString);return styleMap;}},{key:'getXml',value:function getXml(refString){if(refString==='@null')return null;if(Resources._AppBuildXmlFinder)return Resources._AppBuildXmlFinder(refString);}},{key:'getValue',value:function getValue(refString){var resolveRefs=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(refString==='@null')return null;if(Resources._AppBuildValueFinder){var ele=Resources._AppBuildValueFinder(refString);if(!ele)return null;if(resolveRefs&&ele.children.length==0){var str=ele.innerText;if(str.startsWith('@')){return this.getValue(refString,true)||ele;}}return ele;}}},{key:'obtainAttributes',value:function obtainAttributes(attrs){return res.TypedArray.obtain(this,attrs);}},{key:'obtainStyledAttributes',value:function obtainStyledAttributes(attrs,defStyleAttr){return res.TypedArray.obtain(this,attrs,defStyleAttr);}}],[{key:'getSystem',value:function getSystem(){return Resources.instance;}},{key:'from',value:function from(context){return context.getResources();}},{key:'getDisplayMetrics',value:function getDisplayMetrics(){return Resources.instance.getDisplayMetrics();}}]);return Resources;}();Resources.instance=new Resources();Resources._AppBuildImageFileFinder=null;Resources._AppBuildXmlFinder=null;Resources._AppBuildValueFinder=null;res.Resources=Resources;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var view;(function(view){var ViewConfiguration=function(){function ViewConfiguration(){_classCallCheck(this,ViewConfiguration);this.density=android.content.res.Resources.getDisplayMetrics().density;this.sizeAndDensity=this.density;this.mEdgeSlop=this.sizeAndDensity*ViewConfiguration.EDGE_SLOP;this.mFadingEdgeLength=this.sizeAndDensity*ViewConfiguration.FADING_EDGE_LENGTH;this.mMinimumFlingVelocity=this.density*ViewConfiguration.MINIMUM_FLING_VELOCITY;this.mMaximumFlingVelocity=this.density*ViewConfiguration.MAXIMUM_FLING_VELOCITY;this.mScrollbarSize=this.density*ViewConfiguration.SCROLL_BAR_SIZE;this.mTouchSlop=this.density*ViewConfiguration.TOUCH_SLOP;this.mDoubleTapTouchSlop=this.sizeAndDensity*ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP;this.mPagingTouchSlop=this.density*ViewConfiguration.PAGING_TOUCH_SLOP;this.mDoubleTapSlop=this.density*ViewConfiguration.DOUBLE_TAP_SLOP;this.mWindowTouchSlop=this.sizeAndDensity*ViewConfiguration.WINDOW_TOUCH_SLOP;this.mOverscrollDistance=this.sizeAndDensity*ViewConfiguration.OVERSCROLL_DISTANCE;this.mOverflingDistance=this.sizeAndDensity*ViewConfiguration.OVERFLING_DISTANCE;this.mMaximumDrawingCacheSize=android.content.res.Resources.getDisplayMetrics().widthPixels*android.content.res.Resources.getDisplayMetrics().heightPixels*4*2;}_createClass(ViewConfiguration,[{key:'getScaledScrollBarSize',value:function getScaledScrollBarSize(){return this.mScrollbarSize;}},{key:'getScaledFadingEdgeLength',value:function getScaledFadingEdgeLength(){return this.mFadingEdgeLength;}},{key:'getScaledEdgeSlop',value:function getScaledEdgeSlop(){return this.mEdgeSlop;}},{key:'getScaledTouchSlop',value:function getScaledTouchSlop(){return this.mTouchSlop;}},{key:'getScaledDoubleTapTouchSlop',value:function getScaledDoubleTapTouchSlop(){return this.mDoubleTapTouchSlop;}},{key:'getScaledPagingTouchSlop',value:function getScaledPagingTouchSlop(){return this.mPagingTouchSlop;}},{key:'getScaledDoubleTapSlop',value:function getScaledDoubleTapSlop(){return this.mDoubleTapSlop;}},{key:'getScaledWindowTouchSlop',value:function getScaledWindowTouchSlop(){return this.mWindowTouchSlop;}},{key:'getScaledMinimumFlingVelocity',value:function getScaledMinimumFlingVelocity(){return this.mMinimumFlingVelocity;}},{key:'getScaledMaximumFlingVelocity',value:function getScaledMaximumFlingVelocity(){return this.mMaximumFlingVelocity;}},{key:'getScaledMaximumDrawingCacheSize',value:function getScaledMaximumDrawingCacheSize(){return this.mMaximumDrawingCacheSize;}},{key:'getScaledOverscrollDistance',value:function getScaledOverscrollDistance(){return this.mOverscrollDistance;}},{key:'getScaledOverflingDistance',value:function getScaledOverflingDistance(){return this.mOverflingDistance;}}],[{key:'get',value:function get(arg){if(!ViewConfiguration.instance){ViewConfiguration.instance=new ViewConfiguration();}return ViewConfiguration.instance;}},{key:'getScrollBarFadeDuration',value:function getScrollBarFadeDuration(){return ViewConfiguration.SCROLL_BAR_FADE_DURATION;}},{key:'getScrollDefaultDelay',value:function getScrollDefaultDelay(){return ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY;}},{key:'getPressedStateDuration',value:function getPressedStateDuration(){return ViewConfiguration.PRESSED_STATE_DURATION;}},{key:'getLongPressTimeout',value:function getLongPressTimeout(){return ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;}},{key:'getKeyRepeatDelay',value:function getKeyRepeatDelay(){return ViewConfiguration.KEY_REPEAT_DELAY;}},{key:'getTapTimeout',value:function getTapTimeout(){return ViewConfiguration.TAP_TIMEOUT;}},{key:'getJumpTapTimeout',value:function getJumpTapTimeout(){return ViewConfiguration.JUMP_TAP_TIMEOUT;}},{key:'getDoubleTapTimeout',value:function getDoubleTapTimeout(){return ViewConfiguration.DOUBLE_TAP_TIMEOUT;}},{key:'getDoubleTapMinTime',value:function getDoubleTapMinTime(){return ViewConfiguration.DOUBLE_TAP_MIN_TIME;}},{key:'getScrollFriction',value:function getScrollFriction(){return ViewConfiguration.SCROLL_FRICTION;}}]);return ViewConfiguration;}();ViewConfiguration.SCROLL_BAR_SIZE=8;ViewConfiguration.SCROLL_BAR_FADE_DURATION=250;ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY=300;ViewConfiguration.FADING_EDGE_LENGTH=12;ViewConfiguration.PRESSED_STATE_DURATION=64;ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT=500;ViewConfiguration.KEY_REPEAT_DELAY=50;ViewConfiguration.GLOBAL_ACTIONS_KEY_TIMEOUT=500;ViewConfiguration.TAP_TIMEOUT=180;ViewConfiguration.JUMP_TAP_TIMEOUT=500;ViewConfiguration.DOUBLE_TAP_TIMEOUT=300;ViewConfiguration.DOUBLE_TAP_MIN_TIME=40;ViewConfiguration.HOVER_TAP_TIMEOUT=150;ViewConfiguration.HOVER_TAP_SLOP=20;ViewConfiguration.ZOOM_CONTROLS_TIMEOUT=3000;ViewConfiguration.EDGE_SLOP=12;ViewConfiguration.TOUCH_SLOP=8;ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP=ViewConfiguration.TOUCH_SLOP;ViewConfiguration.PAGING_TOUCH_SLOP=ViewConfiguration.TOUCH_SLOP*2;ViewConfiguration.DOUBLE_TAP_SLOP=100;ViewConfiguration.WINDOW_TOUCH_SLOP=16;ViewConfiguration.MINIMUM_FLING_VELOCITY=50;ViewConfiguration.MAXIMUM_FLING_VELOCITY=8000;ViewConfiguration.SCROLL_FRICTION=0.015;ViewConfiguration.OVERSCROLL_DISTANCE=800;ViewConfiguration.OVERFLING_DISTANCE=100;view.ViewConfiguration=ViewConfiguration;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var SystemClock=function(){function SystemClock(){_classCallCheck(this,SystemClock);}_createClass(SystemClock,null,[{key:'uptimeMillis',value:function uptimeMillis(){return new Date().getTime();}}]);return SystemClock;}();os.SystemClock=SystemClock;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var ViewConfiguration=android.view.ViewConfiguration;var tempBound=new Rect();var ID_FixID_Cache=[];var tmpTouchEvent={touches:null,changedTouches:null,type:null};function fixEventId(e){for(var i=0,length=e.changedTouches.length;i2&&arguments[2]!==undefined?arguments[2]:new Rect();var e=fixEventId(event);var now=android.os.SystemClock.uptimeMillis();var action=baseAction;var actionIndex=-1;var activeTouch=e.changedTouches[0];this._activeTouch=activeTouch;var activePointerId=activeTouch.id_fix;if(activePointerId==null)console.warn('activePointerId null, activeTouch.identifier: '+activeTouch['identifier']);for(var i=0,length=e.touches.length;iMotionEvent.HistoryMaxSize)moveHistory.shift();}break;}this.mTouchingPointers=Array.from(e.touches);if(baseAction===MotionEvent.ACTION_UP||baseAction===MotionEvent.ACTION_CANCEL){this.mTouchingPointers.splice(actionIndex,0,activeTouch);}if(this.mTouchingPointers.length>1){switch(action){case MotionEvent.ACTION_DOWN:action=MotionEvent.ACTION_POINTER_DOWN;action=actionIndex<>MotionEvent.ACTION_POINTER_INDEX_SHIFT;}},{key:'getDownTime',value:function getDownTime(){return this.mDownTime;}},{key:'getEventTime',value:function getEventTime(){return this.mEventTime;}},{key:'getX',value:function getX(){var pointerIndex=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var density=android.content.res.Resources.getDisplayMetrics().density;return this.mTouchingPointers[pointerIndex].pageX*density+this.mXOffset;}},{key:'getY',value:function getY(){var pointerIndex=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var density=android.content.res.Resources.getDisplayMetrics().density;return this.mTouchingPointers[pointerIndex].pageY*density+this.mYOffset;}},{key:'getPointerCount',value:function getPointerCount(){return this.mTouchingPointers.length;}},{key:'getPointerId',value:function getPointerId(pointerIndex){return this.mTouchingPointers[pointerIndex].id_fix;}},{key:'findPointerIndex',value:function findPointerIndex(pointerId){for(var i=0,length=this.mTouchingPointers.length;i0&&arguments[0]!==undefined?arguments[0]:this.mActivePointerId;var moveHistory=MotionEvent.TouchMoveRecord.get(id);return moveHistory?moveHistory.length:0;}},{key:'getHistoricalX',value:function getHistoricalX(pointerIndex,pos){var density=android.content.res.Resources.getDisplayMetrics().density;var moveHistory=MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);return moveHistory[pos].pageX*density+this.mXOffset;}},{key:'getHistoricalY',value:function getHistoricalY(pointerIndex,pos){var density=android.content.res.Resources.getDisplayMetrics().density;var moveHistory=MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);return moveHistory[pos].pageY*density+this.mYOffset;}},{key:'getHistoricalEventTime',value:function getHistoricalEventTime(){var pos=void 0,activePointerId=void 0;if(arguments.length===1){pos=arguments.length<=0?undefined:arguments[0];activePointerId=this.mActivePointerId;}else{pos=arguments.length<=1?undefined:arguments[1];activePointerId=this.getPointerId(arguments.length<=0?undefined:arguments[0]);}var moveHistory=MotionEvent.TouchMoveRecord.get(activePointerId);return moveHistory[pos].mEventTime;}},{key:'getTouchMajor',value:function getTouchMajor(pointerIndex){return Math.floor(android.content.res.Resources.getDisplayMetrics().density);}},{key:'getHistoricalTouchMajor',value:function getHistoricalTouchMajor(pointerIndex,pos){return Math.floor(android.content.res.Resources.getDisplayMetrics().density);}},{key:'getEdgeFlags',value:function getEdgeFlags(){return this.mEdgeFlags;}},{key:'setEdgeFlags',value:function setEdgeFlags(flags){this.mEdgeFlags=flags;}},{key:'setAction',value:function setAction(action){this.mAction=action;}},{key:'isTouchEvent',value:function isTouchEvent(){var action=this.getActionMasked();switch(action){case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_UP:case MotionEvent.ACTION_MOVE:case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_OUTSIDE:case MotionEvent.ACTION_POINTER_DOWN:case MotionEvent.ACTION_POINTER_UP:return true;}return false;}},{key:'isPointerEvent',value:function isPointerEvent(){return true;}},{key:'offsetLocation',value:function offsetLocation(deltaX,deltaY){this.mXOffset+=deltaX;this.mYOffset+=deltaY;}},{key:'setLocation',value:function setLocation(x,y){this.mXOffset=x-this.getRawX();this.mYOffset=y-this.getRawY();}},{key:'getPointerIdBits',value:function getPointerIdBits(){var idBits=0;var pointerCount=this.getPointerCount();for(var i=0;i=0;});return ev;}},{key:'getAxisValue',value:function getAxisValue(axis){var value=this._axisValues.get(axis);return value?value:0;}},{key:'toString',value:function toString(){return"MotionEvent{action="+this.getAction()+" x="+this.getX()+" y="+this.getY()+"}";}}],[{key:'obtainWithTouchEvent',value:function obtainWithTouchEvent(e,action){var event=new MotionEvent();event.initWithTouch(e,action);return event;}},{key:'obtain',value:function obtain(event){var newEv=new MotionEvent();Object.assign(newEv,event);return newEv;}},{key:'obtainWithAction',value:function obtainWithAction(downTime,eventTime,action,x,y){var metaState=arguments.length>5&&arguments[5]!==undefined?arguments[5]:0;var newEv=new MotionEvent();newEv.mAction=action;newEv.mDownTime=downTime;newEv.mEventTime=eventTime;var touch={id_fix:0,target:null,screenX:x,screenY:y,clientX:x,clientY:y,pageX:x,pageY:y};newEv.mTouchingPointers=[touch];return newEv;}}]);return MotionEvent;}();MotionEvent.INVALID_POINTER_ID=-1;MotionEvent.ACTION_MASK=0xff;MotionEvent.ACTION_DOWN=0;MotionEvent.ACTION_UP=1;MotionEvent.ACTION_MOVE=2;MotionEvent.ACTION_CANCEL=3;MotionEvent.ACTION_OUTSIDE=4;MotionEvent.ACTION_POINTER_DOWN=5;MotionEvent.ACTION_POINTER_UP=6;MotionEvent.ACTION_HOVER_MOVE=7;MotionEvent.ACTION_SCROLL=8;MotionEvent.ACTION_HOVER_ENTER=9;MotionEvent.ACTION_HOVER_EXIT=10;MotionEvent.EDGE_TOP=0x00000001;MotionEvent.EDGE_BOTTOM=0x00000002;MotionEvent.EDGE_LEFT=0x00000004;MotionEvent.EDGE_RIGHT=0x00000008;MotionEvent.ACTION_POINTER_INDEX_MASK=0xff00;MotionEvent.ACTION_POINTER_INDEX_SHIFT=8;MotionEvent.AXIS_VSCROLL=9;MotionEvent.AXIS_HSCROLL=10;MotionEvent.HistoryMaxSize=10;MotionEvent.TouchMoveRecord=new Map();MotionEvent.IdIndexCache=new Map();view.MotionEvent=MotionEvent;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var TouchDelegate=function(){function TouchDelegate(bounds,delegateView){_classCallCheck(this,TouchDelegate);this.mDelegateTargeted=false;this.mSlop=0;this.mBounds=bounds;this.mSlop=view.ViewConfiguration.get().getScaledTouchSlop();this.mSlopBounds=new Rect(bounds);this.mSlopBounds.inset(-this.mSlop,-this.mSlop);this.mDelegateView=delegateView;}_createClass(TouchDelegate,[{key:'onTouchEvent',value:function onTouchEvent(event){var x=event.getX();var y=event.getY();var sendToDelegate=false;var hit=true;var handled=false;switch(event.getAction()){case view.MotionEvent.ACTION_DOWN:var bounds=this.mBounds;if(bounds.contains(x,y)){this.mDelegateTargeted=true;sendToDelegate=true;}break;case view.MotionEvent.ACTION_UP:case view.MotionEvent.ACTION_MOVE:sendToDelegate=this.mDelegateTargeted;if(sendToDelegate){var slopBounds=this.mSlopBounds;if(!slopBounds.contains(x,y)){hit=false;}}break;case view.MotionEvent.ACTION_CANCEL:sendToDelegate=this.mDelegateTargeted;this.mDelegateTargeted=false;break;}if(sendToDelegate){var delegateView=this.mDelegateView;if(hit){event.setLocation(delegateView.getWidth()/2,delegateView.getHeight()/2);}else{var slop=this.mSlop;event.setLocation(-(slop*2),-(slop*2));}handled=delegateView.dispatchTouchEvent(event);}return handled;}}]);return TouchDelegate;}();view.TouchDelegate=TouchDelegate;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var StringBuilder=java.lang.StringBuilder;var Pools=android.util.Pools;var Message=function(){function Message(){_classCallCheck(this,Message);this.mType=Message.Type_Normal;this.what=0;this.arg1=0;this.arg2=0;this.when=0;}_createClass(Message,[{key:'recycle',value:function recycle(){this.clearForRecycle();Message.sPool.release(this);}},{key:'copyFrom',value:function copyFrom(o){this.mType=o.mType;this.what=o.what;this.arg1=o.arg1;this.arg2=o.arg2;this.obj=o.obj;}},{key:'setTarget',value:function setTarget(target){this.target=target;}},{key:'getTarget',value:function getTarget(){return this.target;}},{key:'sendToTarget',value:function sendToTarget(){this.target.sendMessage(this);}},{key:'clearForRecycle',value:function clearForRecycle(){this.mType=Message.Type_Normal;this.what=0;this.arg1=0;this.arg2=0;this.obj=null;this.when=0;this.target=null;this.callback=null;}},{key:'toString',value:function toString(){var now=arguments.length>0&&arguments[0]!==undefined?arguments[0]:os.SystemClock.uptimeMillis();var b=new StringBuilder();b.append("{ what=");b.append(this.what);b.append(" when=");b.append(this.when-now).append("ms");if(this.arg1!=0){b.append(" arg1=");b.append(this.arg1);}if(this.arg2!=0){b.append(" arg2=");b.append(this.arg2);}if(this.obj!=null){b.append(" obj=");b.append(this.obj);}b.append(" }");return b.toString();}}],[{key:'obtain',value:function obtain(){var m=Message.sPool.acquire();m=m||new Message();for(var _len13=arguments.length,args=Array(_len13),_key13=0;_key13<_len13;_key13++){args[_key13]=arguments[_key13];}if(args.length===1){if(args[0]instanceof Message){var orig=args[0];var _ref4=[orig.target,orig.what,orig.arg1,orig.arg2,orig.obj,orig.callback];m.target=_ref4[0];m.what=_ref4[1];m.arg1=_ref4[2];m.arg2=_ref4[3];m.obj=_ref4[4];m.callback=_ref4[5];}else if(args[0]instanceof os.Handler){m.target=args[0];}else{throw new Error('unknown args');}}else if(args.length===2){m.target=args[0];if(typeof args[1]==='number')m.what=args[1];else m.callback=args[1];}else if(args.length===3){m.target=args[0];m.what=args[1];m.obj=args[2];}else if(args.length===4){m.target=args[0];m.what=args[1];m.arg1=args[2];m.arg2=args[3];}else{m.target=args[0];m.what=args[1];var _args$39=args[2];m.arg1=_args$39===undefined?0:_args$39;m.arg2=args[3];m.obj=args[4];m.callback=args[5];}return m;}}]);return Message;}();Message.Type_Normal=0;Message.Type_Traversal=1;Message.sPool=new Pools.SynchronizedPool(10);os.Message=Message;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var os;(function(os){var requestAnimationFrame=window["requestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["oRequestAnimationFrame"]||window["msRequestAnimationFrame"];if(!requestAnimationFrame){requestAnimationFrame=function requestAnimationFrame(callback){return window.setTimeout(callback,1000/60);};}if(!window.requestAnimationFrame)window.requestAnimationFrame=requestAnimationFrame;var MessageQueue=function(){function MessageQueue(){_classCallCheck(this,MessageQueue);}_createClass(MessageQueue,null,[{key:'getMessages',value:function getMessages(h,args,object){var msgs=[];if(h==null){return msgs;}if(typeof args==="number"){var what=args;var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=MessageQueue.messages[Symbol.iterator](),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var p=_step14.value;if(p.target==h&&p.what==what&&(object==null||p.obj==object)){msgs.push(p);}}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}}else{var r=args;var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=MessageQueue.messages[Symbol.iterator](),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var _p=_step15.value;if(_p.target==h&&_p.callback==r&&(object==null||_p.obj==object)){msgs.push(_p);}}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}}return msgs;}},{key:'hasMessages',value:function hasMessages(h,args,object){return MessageQueue.getMessages(h,args,object).length>0;}},{key:'enqueueMessage',value:function enqueueMessage(msg,when){if(msg.target==null){throw new Error("Message must have a target.");}msg.when=when;MessageQueue.messages.add(msg);MessageQueue.checkLoop();return true;}},{key:'recycleMessage',value:function recycleMessage(handler,message){message.recycle();MessageQueue.messages.delete(message);}},{key:'removeMessages',value:function removeMessages(h,args,object){var p=MessageQueue.getMessages(h,args,object);if(p&&p.length>0){var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=p[Symbol.iterator](),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var item=_step16.value;MessageQueue.recycleMessage(h,item);}}catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}}}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(h,object){if(h==null){return;}var _iteratorNormalCompletion17=true;var _didIteratorError17=false;var _iteratorError17=undefined;try{for(var _iterator17=MessageQueue.messages[Symbol.iterator](),_step17;!(_iteratorNormalCompletion17=(_step17=_iterator17.next()).done);_iteratorNormalCompletion17=true){var p=_step17.value;if(p!=null&&p.target==h&&(object==null||p.obj==object)){MessageQueue.recycleMessage(h,p);}}}catch(err){_didIteratorError17=true;_iteratorError17=err;}finally{try{if(!_iteratorNormalCompletion17&&_iterator17.return){_iterator17.return();}}finally{if(_didIteratorError17){throw _iteratorError17;}}}}},{key:'checkLoop',value:function checkLoop(){if(!MessageQueue._loopActive){MessageQueue._loopActive=true;MessageQueue.requestNextLoop();}}},{key:'requestNextLoop',value:function requestNextLoop(){requestAnimationFrame(MessageQueue.loop);}},{key:'loop',value:function loop(){var normalMessages=[];var traversalMessages=[];var now=os.SystemClock.uptimeMillis();var _iteratorNormalCompletion18=true;var _didIteratorError18=false;var _iteratorError18=undefined;try{for(var _iterator18=MessageQueue.messages[Symbol.iterator](),_step18;!(_iteratorNormalCompletion18=(_step18=_iterator18.next()).done);_iteratorNormalCompletion18=true){var msg=_step18.value;if(msg.when<=now){if(msg.mType===os.Message.Type_Traversal)traversalMessages.push(msg);else normalMessages.push(msg);}}}catch(err){_didIteratorError18=true;_iteratorError18=err;}finally{try{if(!_iteratorNormalCompletion18&&_iterator18.return){_iterator18.return();}}finally{if(_didIteratorError18){throw _iteratorError18;}}}for(var i=0,length=normalMessages.length;i0)MessageQueue.requestNextLoop();else MessageQueue._loopActive=false;}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(MessageQueue.messages.has(msg)){MessageQueue.messages.delete(msg);msg.target.dispatchMessage(msg);MessageQueue.recycleMessage(msg.target,msg);}}}]);return MessageQueue;}();MessageQueue.messages=new Set();MessageQueue._loopActive=false;os.MessageQueue=MessageQueue;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var os;(function(os){var Handler=function(){function Handler(callback){_classCallCheck(this,Handler);this.mCallback=callback;}_createClass(Handler,[{key:'handleMessage',value:function handleMessage(msg){}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(msg.callback!=null){msg.callback.run();}else{if(this.mCallback!=null){if(this.mCallback.handleMessage(msg)){return;}}this.handleMessage(msg);}}},{key:'obtainMessage',value:function obtainMessage(){for(var _len14=arguments.length,args=Array(_len14),_key14=0;_key14<_len14;_key14++){args[_key14]=arguments[_key14];}if(args.length===2){var what=args[0],obj=args[1];return os.Message.obtain(this,what,obj);}else{var _what=args[0],arg1=args[1],arg2=args[2],_obj=args[3];return os.Message.obtain(this,_what,arg1,arg2,_obj);}}},{key:'post',value:function post(r){return this.sendMessageDelayed(Handler.getPostMessage(r),0);}},{key:'postAsTraversal',value:function postAsTraversal(r){var msg=Handler.getPostMessage(r);msg.mType=os.Message.Type_Traversal;return this.sendMessageDelayed(msg,0);}},{key:'postAtTime',value:function postAtTime(){for(var _len15=arguments.length,args=Array(_len15),_key15=0;_key15<_len15;_key15++){args[_key15]=arguments[_key15];}if(args.length===2){var r=args[0],uptimeMillis=args[1];return this.sendMessageAtTime(Handler.getPostMessage(r),uptimeMillis);}else{var _r=args[0],token=args[1],_uptimeMillis=args[2];return this.sendMessageAtTime(Handler.getPostMessage(_r,token),_uptimeMillis);}}},{key:'postDelayed',value:function postDelayed(r,delayMillis){return this.sendMessageDelayed(Handler.getPostMessage(r),delayMillis);}},{key:'postAtFrontOfQueue',value:function postAtFrontOfQueue(r){return this.post(r);}},{key:'removeCallbacks',value:function removeCallbacks(r,token){os.MessageQueue.removeMessages(this,r,token);}},{key:'sendMessage',value:function sendMessage(msg){return this.sendMessageDelayed(msg,0);}},{key:'sendEmptyMessage',value:function sendEmptyMessage(what){return this.sendEmptyMessageDelayed(what,0);}},{key:'sendEmptyMessageDelayed',value:function sendEmptyMessageDelayed(what,delayMillis){var msg=os.Message.obtain();msg.what=what;return this.sendMessageDelayed(msg,delayMillis);}},{key:'sendEmptyMessageAtTime',value:function sendEmptyMessageAtTime(what,uptimeMillis){var msg=os.Message.obtain();msg.what=what;return this.sendMessageAtTime(msg,uptimeMillis);}},{key:'sendMessageDelayed',value:function sendMessageDelayed(msg,delayMillis){if(delayMillis<0){delayMillis=0;}return this.sendMessageAtTime(msg,os.SystemClock.uptimeMillis()+delayMillis);}},{key:'sendMessageAtTime',value:function sendMessageAtTime(msg,uptimeMillis){msg.target=this;return os.MessageQueue.enqueueMessage(msg,uptimeMillis);}},{key:'sendMessageAtFrontOfQueue',value:function sendMessageAtFrontOfQueue(msg){return this.sendMessage(msg);}},{key:'removeMessages',value:function removeMessages(what,object){os.MessageQueue.removeMessages(this,what,object);}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(token){os.MessageQueue.removeCallbacksAndMessages(this,token);}},{key:'hasMessages',value:function hasMessages(what,object){return os.MessageQueue.hasMessages(this,what,object);}}],[{key:'getPostMessage',value:function getPostMessage(r,token){var m=os.Message.obtain();m.obj=token;m.callback=r;return m;}}]);return Handler;}();os.Handler=Handler;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var content;(function(content){var res;(function(res){var SparseArray=android.util.SparseArray;var StateSet=android.util.StateSet;var WeakReference=java.lang.ref.WeakReference;var Color=android.graphics.Color;var ColorStateList=function(){function ColorStateList(states,colors){_classCallCheck(this,ColorStateList);this.mDefaultColor=0xffff0000;this.mStateSpecs=states;this.mColors=colors;if(states&&states.length>0){this.mDefaultColor=colors[0];for(var i=0;i1;}},{key:'getColorForState',value:function getColorForState(stateSet,defaultColor){var setLength=this.mStateSpecs.length;for(var i=0;i tag requires a \'android:color\' attribute.');}var alphaMod=Math.floor(Color.alpha(color)*alpha);alphaMod=Math.min(alphaMod,255);alphaMod=Math.max(alphaMod,0);color=color&0xFFFFFF|alphaMod<<24;colorList.push(color);stateSpecList.push(stateSpec);}}catch(err){_didIteratorError19=true;_iteratorError19=err;}finally{try{if(!_iteratorNormalCompletion19&&_iterator19.return){_iterator19.return();}}finally{if(_didIteratorError19){throw _iteratorError19;}}}colorStateList=new ColorStateList(stateSpecList,colorList);}else{throw new Error('XmlPullParserException(invalid drawable tag: '+name);}return colorStateList;}}]);return ColorStateList;}();ColorStateList.EMPTY=[[]];ColorStateList.sCache=new SparseArray();res.ColorStateList=ColorStateList;})(res=content.res||(content.res={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var util;(function(util){var TypedValue=function(){function TypedValue(){_classCallCheck(this,TypedValue);}_createClass(TypedValue,null,[{key:'initUnit',value:function initUnit(){this.initUnit=null;var temp=document.createElement('div');document.body.appendChild(temp);temp.style.height=100+TypedValue.COMPLEX_UNIT_PT;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_PT,temp.offsetHeight/100);temp.style.height=1+TypedValue.COMPLEX_UNIT_IN;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_IN,temp.offsetHeight);temp.style.height=100+TypedValue.COMPLEX_UNIT_MM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_MM,temp.offsetHeight/100);temp.style.height=10+TypedValue.COMPLEX_UNIT_EM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_EM,temp.offsetHeight/10);temp.style.height=10+TypedValue.COMPLEX_UNIT_REM;TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_REM,temp.offsetHeight/10);document.body.removeChild(temp);}},{key:'applyDimension',value:function applyDimension(unit,size,dm){var scale=1;if(unit===TypedValue.COMPLEX_UNIT_DP||unit===TypedValue.COMPLEX_UNIT_DIP||unit===TypedValue.COMPLEX_UNIT_SP){scale=dm.density;}else{scale=TypedValue.UNIT_SCALE_MAP.get(unit)||1;}return size*scale;}},{key:'isDynamicUnitValue',value:function isDynamicUnitValue(valueWithUnit){if(typeof valueWithUnit!="string")return false;return valueWithUnit.match(TypedValue.COMPLEX_UNIT_VH+'$|'+TypedValue.COMPLEX_UNIT_VW+'$|'+TypedValue.COMPLEX_UNIT_FRACTION+'$')!=null;}},{key:'complexToDimension',value:function complexToDimension(valueWithUnit){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var metrics=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.content.res.Resources.getDisplayMetrics();if(this.initUnit)this.initUnit();if(valueWithUnit===undefined||valueWithUnit===null){throw Error('complexToDimensionPixelSize error: valueWithUnit is '+valueWithUnit);}if(valueWithUnit===''+Number.parseFloat(valueWithUnit))return Number.parseFloat(valueWithUnit);if(typeof valueWithUnit!=='string')valueWithUnit=valueWithUnit+"";var scale=1;if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PX)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PX,"");}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DP,"");scale=metrics.density;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DIP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DIP,"");scale=metrics.density;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_SP)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_SP,"");scale=metrics.density*(TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_SP)||1);}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PT)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PT,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_PT)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_IN)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_IN,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_IN)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_MM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_MM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_MM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_EM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_EM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_EM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_REM)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_REM,"");scale=TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_REM)||1;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VH)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VH,"");scale=metrics.heightPixels/100;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VW)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VW,"");scale=metrics.widthPixels/100;}else if(valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_FRACTION)){valueWithUnit=valueWithUnit.replace(TypedValue.COMPLEX_UNIT_FRACTION,"");scale=Number.parseFloat(valueWithUnit)/100;if(Number.isNaN(scale))return 0;valueWithUnit=baseValue;}var value=Number.parseFloat(valueWithUnit);if(Number.isNaN(value))throw Error('complexToDimensionPixelSize error: '+valueWithUnit);return value*scale;}},{key:'complexToDimensionPixelOffset',value:function complexToDimensionPixelOffset(valueWithUnit){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var metrics=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.content.res.Resources.getDisplayMetrics();var value=this.complexToDimension(valueWithUnit,baseValue,metrics);return Math.floor(value);}},{key:'complexToDimensionPixelSize',value:function complexToDimensionPixelSize(valueWithUnit){var baseValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var metrics=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.content.res.Resources.getDisplayMetrics();var value=this.complexToDimension(valueWithUnit,baseValue,metrics);var res=Math.ceil(value);if(res!=0)return res;if(value==0)return 0;if(value>0)return 1;return-1;}}]);return TypedValue;}();TypedValue.COMPLEX_UNIT_PX='px';TypedValue.COMPLEX_UNIT_DP='dp';TypedValue.COMPLEX_UNIT_DIP='dip';TypedValue.COMPLEX_UNIT_SP='sp';TypedValue.COMPLEX_UNIT_PT='pt';TypedValue.COMPLEX_UNIT_IN='in';TypedValue.COMPLEX_UNIT_MM='mm';TypedValue.COMPLEX_UNIT_EM='em';TypedValue.COMPLEX_UNIT_REM='rem';TypedValue.COMPLEX_UNIT_VH='vh';TypedValue.COMPLEX_UNIT_VW='vw';TypedValue.COMPLEX_UNIT_FRACTION='%';TypedValue.UNIT_SCALE_MAP=new Map();util.TypedValue=TypedValue;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var LinearInterpolator=function(){function LinearInterpolator(){_classCallCheck(this,LinearInterpolator);}_createClass(LinearInterpolator,[{key:'getInterpolation',value:function getInterpolation(input){return input;}}]);return LinearInterpolator;}();animation.LinearInterpolator=LinearInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var SystemClock=android.os.SystemClock;var AnimationUtils=function(){function AnimationUtils(){_classCallCheck(this,AnimationUtils);}_createClass(AnimationUtils,null,[{key:'currentAnimationTimeMillis',value:function currentAnimationTimeMillis(){return SystemClock.uptimeMillis();}},{key:'loadAnimation',value:function loadAnimation(context,id){return context.getResources().getAnimation(id);}}]);return AnimationUtils;}();animation.AnimationUtils=AnimationUtils;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var util;(function(util){var LayoutDirection=function LayoutDirection(){_classCallCheck(this,LayoutDirection);};LayoutDirection.LTR=0;LayoutDirection.RTL=1;LayoutDirection.INHERIT=2;LayoutDirection.LOCALE=3;util.LayoutDirection=LayoutDirection;})(util=android.util||(android.util={}));})(android||(android={}));var java;(function(java){var util;(function(util){var Arrays=function(){function Arrays(){_classCallCheck(this,Arrays);}_createClass(Arrays,null,[{key:'sort',value:function sort(a,fromIndex,toIndex){Arrays.rangeCheck(a.length,fromIndex,toIndex);var sort=androidui.util.ArrayCreator.newNumberArray(toIndex-fromIndex);for(var i=fromIndex;ib?1:-1;});for(var _i5=fromIndex;_i5toIndex){throw new Error("ArrayIndexOutOfBoundsException:fromIndex("+fromIndex+") > toIndex("+toIndex+")");}if(fromIndex<0){throw new Error('ArrayIndexOutOfBoundsException:'+fromIndex);}if(toIndex>arrayLength){throw new Error('ArrayIndexOutOfBoundsException:'+toIndex);}}},{key:'asList',value:function asList(array){var _list$array;var list=new util.ArrayList();(_list$array=list.array).push.apply(_list$array,_toConsumableArray(array));return list;}},{key:'equals',value:function equals(a,a2){if(a==a2)return true;if(a==null||a2==null)return false;var length=a.length;if(a2.length!=length)return false;for(var i=0;i0){var statedEntries=[];var _iteratorNormalCompletion24=true;var _didIteratorError24=false;var _iteratorError24=undefined;try{for(var _iterator24=styleMap.entries()[Symbol.iterator](),_step24;!(_iteratorNormalCompletion24=(_step24=_iterator24.next()).done);_iteratorNormalCompletion24=true){var entry=_step24.value;var _entry=_slicedToArray(entry,2),key=_entry[0],value=_entry[1];if(key.startsWith('android:state_')){statedEntries.push(entry);}else{_stateAttr.setAttr(key.toLowerCase(),value);}}}catch(err){_didIteratorError24=true;_iteratorError24=err;}finally{try{if(!_iteratorNormalCompletion24&&_iterator24.return){_iterator24.return();}}finally{if(_didIteratorError24){throw _iteratorError24;}}}var _iteratorNormalCompletion25=true;var _didIteratorError25=false;var _iteratorError25=undefined;try{for(var _iterator25=statedEntries[Symbol.iterator](),_step25;!(_iteratorNormalCompletion25=(_step25=_iterator25.next()).done);_iteratorNormalCompletion25=true){var _entry2=_step25.value;var _entry3=_slicedToArray(_entry2,2),key=_entry3[0],value=_entry3[1];this.addStatedAttrImpl(key,value,newInParseState);}}catch(err){_didIteratorError25=true;_iteratorError25=err;}finally{try{if(!_iteratorNormalCompletion25&&_iterator25.return){_iterator25.return();}}finally{if(_didIteratorError25){throw _iteratorError25;}}}}}else{var _iteratorNormalCompletion26=true;var _didIteratorError26=false;var _iteratorError26=undefined;try{for(var _iterator26=attrValue.split(';')[Symbol.iterator](),_step26;!(_iteratorNormalCompletion26=(_step26=_iterator26.next()).done);_iteratorNormalCompletion26=true){var part=_step26.value;var _part$split=part.split(':'),_part$split2=_slicedToArray(_part$split,2),name=_part$split2[0],value=_part$split2[1];name=name.trim();if(name){_stateAttr.setAttr('android:'+name.toLowerCase(),value.trim());}}}catch(err){_didIteratorError26=true;_iteratorError26=err;}finally{try{if(!_iteratorNormalCompletion26&&_iterator26.return){_iterator26.return();}}finally{if(_didIteratorError26){throw _iteratorError26;}}}}}}},{key:'getStateAttr',value:function getStateAttr(state){var _iteratorNormalCompletion27=true;var _didIteratorError27=false;var _iteratorError27=undefined;try{for(var _iterator27=this.originStateAttrList[Symbol.iterator](),_step27;!(_iteratorNormalCompletion27=(_step27=_iterator27.next()).done);_iteratorNormalCompletion27=true){var stateAttr=_step27.value;if(stateAttr.isStateEquals(state))return stateAttr;}}catch(err){_didIteratorError27=true;_iteratorError27=err;}finally{try{if(!_iteratorNormalCompletion27&&_iterator27.return){_iterator27.return();}}finally{if(_didIteratorError27){throw _iteratorError27;}}}}},{key:'getOrCreateStateAttr',value:function getOrCreateStateAttr(state){var stateAttr=this.getStateAttr(state);if(!stateAttr){stateAttr=new attr.StateAttr(state);this.originStateAttrList.push(stateAttr);}return stateAttr;}},{key:'getMatchedStateAttr',value:function getMatchedStateAttr(state){if(state==null)return null;var _iteratorNormalCompletion28=true;var _didIteratorError28=false;var _iteratorError28=undefined;try{for(var _iterator28=this.matchedStateAttrList[Symbol.iterator](),_step28;!(_iteratorNormalCompletion28=(_step28=_iterator28.next()).done);_iteratorNormalCompletion28=true){var stateAttr=_step28.value;if(stateAttr.isStateEquals(state))return stateAttr;}}catch(err){_didIteratorError28=true;_iteratorError28=err;}finally{try{if(!_iteratorNormalCompletion28&&_iterator28.return){_iterator28.return();}}finally{if(_didIteratorError28){throw _iteratorError28;}}}var matchedAttr=new attr.StateAttr(state);var _iteratorNormalCompletion29=true;var _didIteratorError29=false;var _iteratorError29=undefined;try{for(var _iterator29=this.originStateAttrList[Symbol.iterator](),_step29;!(_iteratorNormalCompletion29=(_step29=_iterator29.next()).done);_iteratorNormalCompletion29=true){var _stateAttr2=_step29.value;if(_stateAttr2.isDefaultState())continue;if(_stateAttr2.isStateMatch(state)){matchedAttr.putAll(_stateAttr2);}}}catch(err){_didIteratorError29=true;_iteratorError29=err;}finally{try{if(!_iteratorNormalCompletion29&&_iterator29.return){_iterator29.return();}}finally{if(_didIteratorError29){throw _iteratorError29;}}}this.matchedStateAttrList.push(matchedAttr);return matchedAttr;}},{key:'removeAttrAllState',value:function removeAttrAllState(attrName){var _iteratorNormalCompletion30=true;var _didIteratorError30=false;var _iteratorError30=undefined;try{for(var _iterator30=this.originStateAttrList[Symbol.iterator](),_step30;!(_iteratorNormalCompletion30=(_step30=_iterator30.next()).done);_iteratorNormalCompletion30=true){var stateAttr=_step30.value;stateAttr.getAttrMap().delete(attrName);}}catch(err){_didIteratorError30=true;_iteratorError30=err;}finally{try{if(!_iteratorNormalCompletion30&&_iterator30.return){_iterator30.return();}}finally{if(_didIteratorError30){throw _iteratorError30;}}}var _iteratorNormalCompletion31=true;var _didIteratorError31=false;var _iteratorError31=undefined;try{for(var _iterator31=this.matchedStateAttrList[Symbol.iterator](),_step31;!(_iteratorNormalCompletion31=(_step31=_iterator31.next()).done);_iteratorNormalCompletion31=true){var _stateAttr3=_step31.value;_stateAttr3.getAttrMap().delete(attrName);}}catch(err){_didIteratorError31=true;_iteratorError31=err;}finally{try{if(!_iteratorNormalCompletion31&&_iterator31.return){_iterator31.return();}}finally{if(_didIteratorError31){throw _iteratorError31;}}}}}],[{key:'getViewStateValue',value:function getViewStateValue(attrName){if(!STATE_MAP){STATE_MAP=new Map().set('state_window_focused',android.view.View.VIEW_STATE_WINDOW_FOCUSED).set('state_selected',android.view.View.VIEW_STATE_SELECTED).set('state_focused',android.view.View.VIEW_STATE_FOCUSED).set('state_enabled',android.view.View.VIEW_STATE_ENABLED).set('state_disabled',-android.view.View.VIEW_STATE_ENABLED).set('state_pressed',android.view.View.VIEW_STATE_PRESSED).set('state_activated',android.view.View.VIEW_STATE_ACTIVATED).set('state_hovered',android.view.View.VIEW_STATE_HOVERED).set('state_checked',android.view.View.VIEW_STATE_CHECKED);}return STATE_MAP.get(attrName.split(':').pop());}}]);return StateAttrList;}();attr.StateAttrList=StateAttrList;})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));function fixDefaultNamespaceAndLowerCase(key){key=key.toLowerCase();if(!key.includes(':'))key='android:'+key;return key;}var androidui;(function(androidui){var attr;(function(attr){var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var Color=android.graphics.Color;var ColorStateList=android.content.res.ColorStateList;var Resources=android.content.res.Resources;var AttrBinder=function(){function AttrBinder(host){_classCallCheck(this,AttrBinder);this.objectRefs=[];this.host=host;}_createClass(AttrBinder,[{key:'setClassAttrBind',value:function setClassAttrBind(classAttrBind){if(classAttrBind){this.classAttrBindMap=classAttrBind;}}},{key:'addAttr',value:function addAttr(attrName,onAttrChange,stashAttrValueWhenStateChange){if(!attrName)return;attrName=fixDefaultNamespaceAndLowerCase(attrName);if(onAttrChange){if(!this.attrChangeMap){this.attrChangeMap=new Map();}this.attrChangeMap.set(attrName,onAttrChange);}if(stashAttrValueWhenStateChange){this.attrStashMap=new Map();this.attrStashMap.set(attrName,stashAttrValueWhenStateChange);}}},{key:'onAttrChange',value:function onAttrChange(attrName,attrValue,context){this.mContext=context;if(!attrName)return;attrName=fixDefaultNamespaceAndLowerCase(attrName);var onAttrChangeCall=this.attrChangeMap&&this.attrChangeMap.get(attrName);if(onAttrChangeCall){onAttrChangeCall.call(this.host,attrValue,this.host);}if(this.classAttrBindMap){this.classAttrBindMap.callSetter(attrName,this.host,attrValue,this);}}},{key:'getAttrValue',value:function getAttrValue(attrName){if(!attrName)return undefined;attrName=fixDefaultNamespaceAndLowerCase(attrName);var getAttrCall=this.attrStashMap&&this.attrStashMap.get(attrName);var value=void 0;if(getAttrCall){value=getAttrCall.call(this.host);}else if(this.classAttrBindMap){value=this.classAttrBindMap.callGetter(attrName,this.host);}if(value==null)return null;if(typeof value==="number"||typeof value==="boolean"||typeof value==="string")return value+'';return this.setRefObject(value);}},{key:'getRefObject',value:function getRefObject(ref){if(ref&&ref.startsWith('@ref/')){ref=ref.substring('@ref/'.length);var index=Number.parseInt(ref);if(Number.isInteger(index)){return this.objectRefs[index];}}}},{key:'setRefObject',value:function setRefObject(obj){var index=this.objectRefs.indexOf(obj);if(index>=0)return'@ref/'+index;this.objectRefs.push(obj);return'@ref/'+(this.objectRefs.length-1);}},{key:'parsePaddingMarginTRBL',value:function parsePaddingMarginTRBL(value){var _this16=this;value=value+'';var parts=[];var _iteratorNormalCompletion32=true;var _didIteratorError32=false;var _iteratorError32=undefined;try{for(var _iterator32=value.split(' ')[Symbol.iterator](),_step32;!(_iteratorNormalCompletion32=(_step32=_iterator32.next()).done);_iteratorNormalCompletion32=true){var part=_step32.value;if(part)parts.push(part);}}catch(err){_didIteratorError32=true;_iteratorError32=err;}finally{try{if(!_iteratorNormalCompletion32&&_iterator32.return){_iterator32.return();}}finally{if(_didIteratorError32){throw _iteratorError32;}}}var trbl=void 0;switch(parts.length){case 1:trbl=[parts[0],parts[0],parts[0],parts[0]];break;case 2:trbl=[parts[0],parts[1],parts[0],parts[1]];break;case 3:trbl=[parts[0],parts[1],parts[2],parts[1]];break;case 4:trbl=[parts[0],parts[1],parts[2],parts[3]];break;}if(trbl){return trbl.map(function(v){return _this16.parseDimension(v);});}throw Error('not a padding or margin value : '+value);}},{key:'parseEnum',value:function parseEnum(value,enumMap,defaultValue){if(Number.isInteger(value)){return value;}if(enumMap.has(value)){return enumMap.get(value);}return defaultValue;}},{key:'parseBoolean',value:function parseBoolean(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(value===false)return false;else if(value===true)return true;var res=this.mContext?this.mContext.getResources():Resources.getSystem();if(typeof value==="string"){return attr.AttrValueParser.parseBoolean(res,value,defaultValue);}return defaultValue;}},{key:'parseGravity',value:function parseGravity(s){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:Gravity.NO_GRAVITY;var gravity=Number.parseInt(s);if(Number.isInteger(gravity))return gravity;return Gravity.parseGravity(s,defaultValue);}},{key:'parseDrawable',value:function parseDrawable(s){if(!s)return null;if(s instanceof Drawable)return s;if(s.startsWith('@ref/')){var refObj=this.getRefObject(s);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();s=(s+'').trim();return attr.AttrValueParser.parseDrawable(res,s);}},{key:'parseColor',value:function parseColor(value,defaultValue){var color=Number.parseInt(value);if(Number.isInteger(color))return color;var res=this.mContext?this.mContext.getResources():Resources.getSystem();color=attr.AttrValueParser.parseColor(res,value,defaultValue);if(isNaN(color)){return Color.BLACK;}return color;}},{key:'parseColorList',value:function parseColorList(value){if(!value)return null;if(value instanceof ColorStateList)return value;if(typeof value=='number')return ColorStateList.valueOf(value);if(value.startsWith('@ref/')){var refObj=this.getRefObject(value);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseColorStateList(res,value);}},{key:'parseInt',value:function parseInt(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseInt(res,value,defaultValue);}},{key:'parseFloat',value:function parseFloat(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseFloat(res,value,defaultValue);}},{key:'parseDimension',value:function parseDimension(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var baseValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimension(res,value,defaultValue,baseValue);}},{key:'parseNumberPixelOffset',value:function parseNumberPixelOffset(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var baseValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimensionPixelOffset(res,value,defaultValue,baseValue);}},{key:'parseNumberPixelSize',value:function parseNumberPixelSize(value){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var baseValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;if(typeof value=='number')return value;var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseDimensionPixelSize(res,value,defaultValue,baseValue);}},{key:'parseString',value:function parseString(value,defaultValue){var res=this.mContext?this.mContext.getResources():Resources.getSystem();if(typeof value==='string'){return attr.AttrValueParser.parseString(res,value,defaultValue);}return defaultValue;}},{key:'parseStringArray',value:function parseStringArray(value){if(typeof value==='string'){if(value.startsWith('@ref/')){var refObj=this.getRefObject(value);if(refObj)return refObj;}var res=this.mContext?this.mContext.getResources():Resources.getSystem();return attr.AttrValueParser.parseTextArray(res,value);}return null;}}]);return AttrBinder;}();attr.AttrBinder=AttrBinder;(function(AttrBinder){var ClassBinderMap=function(){function ClassBinderMap(copyBinderMap){_classCallCheck(this,ClassBinderMap);this.binderMap=new Map(copyBinderMap);}_createClass(ClassBinderMap,[{key:'set',value:function set(key,value){key=fixDefaultNamespaceAndLowerCase(key);this.binderMap.set(key,value);return this;}},{key:'get',value:function get(key){key=fixDefaultNamespaceAndLowerCase(key);return this.binderMap.get(key);}},{key:'callSetter',value:function callSetter(attrName,host,attrValue,attrBinder){if(!attrName)return;var value=this.get(attrName);if(value){value.setter.call(host,host,attrValue,attrBinder);}}},{key:'callGetter',value:function callGetter(attrName,host){if(!attrName)return;var value=this.get(attrName);if(value){return value.getter.call(host,host);}}}]);return ClassBinderMap;}();AttrBinder.ClassBinderMap=ClassBinderMap;})(AttrBinder=attr.AttrBinder||(attr.AttrBinder={}));})(attr=androidui.attr||(androidui.attr={}));})(androidui||(androidui={}));var androidui;(function(androidui){var util;(function(util){var ColorDrawable=android.graphics.drawable.ColorDrawable;var Color=android.graphics.Color;var PerformanceAdjuster=function(){function PerformanceAdjuster(){_classCallCheck(this,PerformanceAdjuster);}_createClass(PerformanceAdjuster,null,[{key:'noCanvasMode',value:function noCanvasMode(){android.graphics.Canvas.prototype=HackCanvas.prototype;android.view.View.prototype.onDrawVerticalScrollBar=function(canvas,scrollBar,l,t,r,b){var scrollBarEl=this.bindElement['VerticalScrollBar'];if(!scrollBarEl){scrollBarEl=document.createElement('div');this.bindElement['VerticalScrollBar']=scrollBarEl;scrollBarEl.style.zIndex='9';scrollBarEl.style.position='absolute';scrollBarEl.style.background='black';scrollBarEl.style.left='0px';scrollBarEl.style.top='0px';this.bindElement.appendChild(scrollBarEl);}var height=b-t;var width=r-l;var size=height;var thickness=width;var extent=this.mScrollCache.scrollBar.mExtent;var range=this.mScrollCache.scrollBar.mRange;var length=Math.round(size*extent/range);var offset=Math.round((size-length)*this.mScrollCache.scrollBar.mOffset/(range-extent));if(t<0)t=0;if(offset<0)offset=0;scrollBarEl.style.transform=scrollBarEl.style.webkitTransform='translate('+l+'px, '+(t+offset)+'px)';scrollBarEl.style.width=(r-l)/2+'px';scrollBarEl.style.height=length+'px';scrollBarEl.style.opacity=this.mScrollCache.scrollBar.mVerticalThumb.getAlpha()/255+'';};var oldSetBackground=android.view.View.prototype.setBackground;android.view.View.prototype.setBackground=function(drawable){oldSetBackground.call(this,drawable);if(drawable instanceof ColorDrawable){this.bindElement.style.background=Color.toRGBAFunc(this.mBackground.getColor());}};}}]);return PerformanceAdjuster;}();util.PerformanceAdjuster=PerformanceAdjuster;var HackCanvas=function(_android$graphics$Can){_inherits(HackCanvas,_android$graphics$Can);function HackCanvas(){_classCallCheck(this,HackCanvas);return _possibleConstructorReturn(this,(HackCanvas.__proto__||Object.getPrototypeOf(HackCanvas)).apply(this,arguments));}_createClass(HackCanvas,[{key:'init',value:function init(){}},{key:'recycle',value:function recycle(){}},{key:'translate',value:function translate(dx,dy){}},{key:'scale',value:function scale(sx,sy,px,py){}},{key:'rotate',value:function rotate(degrees,px,py){}},{key:'drawRGB',value:function drawRGB(r,g,b){}},{key:'drawARGB',value:function drawARGB(a,r,g,b){}},{key:'drawColor',value:function drawColor(color){}},{key:'clearColor',value:function clearColor(){}},{key:'save',value:function save(){return 1;}},{key:'restore',value:function restore(){}},{key:'restoreToCount',value:function restoreToCount(saveCount){}},{key:'getSaveCount',value:function getSaveCount(){return 1;}},{key:'clipRect',value:function clipRect(){return false;}},{key:'getClipBounds',value:function getClipBounds(bounds){return null;}},{key:'quickReject',value:function quickReject(){return false;}},{key:'drawCanvas',value:function drawCanvas(canvas,offsetX,offsetY){}},{key:'drawRect',value:function drawRect(){}},{key:'drawText',value:function drawText(text,x,y,paint){}}]);return HackCanvas;}(android.graphics.Canvas);})(util=androidui.util||(androidui.util={}));})(androidui||(androidui={}));var androidui;(function(androidui){var image;(function(image_1){var Paint=android.graphics.Paint;var Rect=android.graphics.Rect;var Drawable=android.graphics.drawable.Drawable;var NetDrawable=function(_Drawable2){_inherits(NetDrawable,_Drawable2);function NetDrawable(src,paint,overrideImageRatio){_classCallCheck(this,NetDrawable);var _this18=_possibleConstructorReturn(this,(NetDrawable.__proto__||Object.getPrototypeOf(NetDrawable)).call(this));_this18.mImageWidth=0;_this18.mImageHeight=0;var image=void 0;if(src instanceof image_1.NetImage){image=src;if(overrideImageRatio)image.mOverrideImageRatio=overrideImageRatio;}else{image=new image_1.NetImage(src,overrideImageRatio);}image.addLoadListener(function(){return _this18.onLoad();},function(){return _this18.onError();});_this18.mState=new State(image,paint);if(image.isImageLoaded())_this18.initBoundWithLoadedImage(image);return _this18;}_createClass(NetDrawable,[{key:'initBoundWithLoadedImage',value:function initBoundWithLoadedImage(image){var imageRatio=image.getImageRatio();this.mImageWidth=Math.floor(image.width/imageRatio*android.content.res.Resources.getDisplayMetrics().density);this.mImageHeight=Math.floor(image.height/imageRatio*android.content.res.Resources.getDisplayMetrics().density);}},{key:'setURL',value:function setURL(url){var hiddenWhenLoading=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(hiddenWhenLoading){this.mImageWidth=this.mImageHeight=0;}this.mState.mImage.src=url;}},{key:'draw',value:function draw(canvas){if(!this.isImageSizeEmpty()){var emptyTileX=this.mTileModeX==null||this.mTileModeX==NetDrawable.TileMode.DEFAULT;var emptyTileY=this.mTileModeY==null||this.mTileModeY==NetDrawable.TileMode.DEFAULT;if(emptyTileX&&emptyTileY){canvas.drawImage(this.mState.mImage,null,this.getBounds(),this.mState.paint);}else{this.drawTile(canvas);}}}},{key:'drawTile',value:function drawTile(canvas){var imageWidth=this.mImageWidth;var imageHeight=this.mImageHeight;if(imageHeight<=0||imageWidth<=0)return;var tileX=this.mTileModeX;var tileY=this.mTileModeY;var bound=this.getBounds();if(this.mTmpTileBound==null)this.mTmpTileBound=new Rect();var tmpBound=this.mTmpTileBound;tmpBound.setEmpty();function drawColumn(){if(tileY===NetDrawable.TileMode.REPEAT){tmpBound.bottom=imageHeight;while(tmpBound.isEmpty()||tmpBound.intersects(bound)){canvas.drawImage(this.mState.mImage,null,tmpBound,this.mState.paint);tmpBound.offset(0,imageHeight);}}else{tmpBound.bottom=bound.height();canvas.drawImage(this.mState.mImage,null,tmpBound,this.mState.paint);}}if(tileX===NetDrawable.TileMode.REPEAT){tmpBound.right=imageWidth;while(tmpBound.isEmpty()||tmpBound.intersects(bound)){drawColumn.call(this);tmpBound.offset(imageWidth,-tmpBound.top);}}else{tmpBound.right=bound.width();drawColumn.call(this);}}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.paint.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.paint.getAlpha();}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mImageWidth;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mImageHeight;}},{key:'onLoad',value:function onLoad(){this.initBoundWithLoadedImage(this.mState.mImage);if(this.mLoadListener)this.mLoadListener.onLoad(this);this.invalidateSelf();this.notifySizeChangeSelf();}},{key:'onError',value:function onError(){this.mImageWidth=this.mImageHeight=0;if(this.mLoadListener)this.mLoadListener.onError(this);this.invalidateSelf();this.notifySizeChangeSelf();}},{key:'isImageSizeEmpty',value:function isImageSizeEmpty(){return this.mImageWidth<=0||this.mImageHeight<=0;}},{key:'getImage',value:function getImage(){return this.mState.mImage;}},{key:'setLoadListener',value:function setLoadListener(loadListener){this.mLoadListener=loadListener;}},{key:'setTileMode',value:function setTileMode(tileX,tileY){this.mTileModeX=tileX;this.mTileModeY=tileY;this.invalidateSelf();}},{key:'getConstantState',value:function getConstantState(){return this.mState;}}]);return NetDrawable;}(Drawable);image_1.NetDrawable=NetDrawable;(function(NetDrawable){var TileMode;(function(TileMode){TileMode[TileMode["DEFAULT"]=0]="DEFAULT";TileMode[TileMode["REPEAT"]=1]="REPEAT";})(TileMode=NetDrawable.TileMode||(NetDrawable.TileMode={}));})(NetDrawable=image_1.NetDrawable||(image_1.NetDrawable={}));var State=function(){function State(image){var paint=arguments.length>1&&arguments[1]!==undefined?arguments[1]:new Paint();_classCallCheck(this,State);this.mImage=image;this.paint=new Paint();if(paint!=null)this.paint.set(paint);}_createClass(State,[{key:'newDrawable',value:function newDrawable(){return new NetDrawable(this.mImage.src,this.paint);}}]);return State;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var androidui;(function(androidui){var util;(function(util){var Platform=function Platform(){_classCallCheck(this,Platform);};Platform.isIOS=navigator.userAgent.match(/(iPhone|iPad|iPod|ios)/i)?true:false;Platform.isAndroid=navigator.userAgent.match('Android')?true:false;Platform.isWeChat=navigator.userAgent.match(/MicroMessenger/i)?true:false;util.Platform=Platform;})(util=androidui.util||(androidui.util={}));})(androidui||(androidui={}));var android;(function(android){var view;(function(view){var SystemClock=android.os.SystemClock;var Log=android.util.Log;var Platform=androidui.util.Platform;var DEBUG=false;var TAG="KeyEvent";var KeyEvent=function(){function KeyEvent(){_classCallCheck(this,KeyEvent);this._downingKeyEventMap=new Map();}_createClass(KeyEvent,[{key:'initKeyEvent',value:function initKeyEvent(keyEvent,action){this.mEventTime=SystemClock.uptimeMillis();this.mKeyCode=keyEvent.keyCode;this.mAltKey=keyEvent.altKey;this.mShiftKey=keyEvent.shiftKey;this.mCtrlKey=keyEvent.ctrlKey;this.mMetaKey=keyEvent.metaKey;var keyIdentifier=keyEvent['keyIdentifier']+'';if(keyIdentifier){this.mIsTypingKey=keyIdentifier.startsWith('U+');if(this.mIsTypingKey){this.mKeyCode=Number.parseInt(keyIdentifier.substr(2),16)||this.mKeyCode;}}if(this.mKeyCode>=KeyEvent.KEYCODE_Key_a&&this.mKeyCode<=KeyEvent.KEYCODE_Key_z&&this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode-=32;}if(this.mKeyCode>=KeyEvent.KEYCODE_KeyA&&this.mKeyCode<=KeyEvent.KEYCODE_KeyZ&&!this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode+=32;}if(Platform.isAndroid){if(!this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.noMeta[this.mKeyCode]||this.mKeyCode;}else if(this.mShiftKey&&!this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.shift[this.mKeyCode]||this.mKeyCode;}else if(!this.mShiftKey&&this.mCtrlKey&&!this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.ctrl[this.mKeyCode]||this.mKeyCode;}else if(!this.mShiftKey&&!this.mCtrlKey&&this.mAltKey&&!this.mMetaKey){this.mKeyCode=KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.alt[this.mKeyCode]||this.mKeyCode;}}this.mKeyCode=KeyEvent.FIX_MAP_KEYCODE[this.mKeyCode]||this.mKeyCode;if(action===KeyEvent.ACTION_DOWN){this.mDownTime=SystemClock.uptimeMillis();var keyEvents=this._downingKeyEventMap.get(keyEvent.keyCode);if(keyEvents==null){keyEvents=[];this._downingKeyEventMap.set(keyEvent.keyCode,keyEvents);}keyEvents.push(keyEvent);}else if(action===KeyEvent.ACTION_UP){this._downingKeyEventMap.delete(keyEvent.keyCode);}this.mAction=action;}},{key:'isAltPressed',value:function isAltPressed(){return this.mAltKey;}},{key:'isShiftPressed',value:function isShiftPressed(){return this.mShiftKey;}},{key:'isCtrlPressed',value:function isCtrlPressed(){return this.mCtrlKey;}},{key:'isMetaPressed',value:function isMetaPressed(){return this.mMetaKey;}},{key:'getAction',value:function getAction(){return this.mAction;}},{key:'startTracking',value:function startTracking(){this.mFlags|=KeyEvent.FLAG_START_TRACKING;}},{key:'isTracking',value:function isTracking(){return(this.mFlags&KeyEvent.FLAG_TRACKING)!=0;}},{key:'isLongPress',value:function isLongPress(){return this.getRepeatCount()===1;}},{key:'getKeyCode',value:function getKeyCode(){return this.mKeyCode;}},{key:'getRepeatCount',value:function getRepeatCount(){var downArray=this._downingKeyEventMap.get(this.mKeyCode);return downArray?downArray.length-1:0;}},{key:'getDownTime',value:function getDownTime(){return this.mDownTime;}},{key:'getEventTime',value:function getEventTime(){return this.mEventTime;}},{key:'dispatch',value:function dispatch(receiver,state,target){switch(this.mAction){case KeyEvent.ACTION_DOWN:{this.mFlags&=~KeyEvent.FLAG_START_TRACKING;if(DEBUG)Log.v(TAG,"Key down to "+target+" in "+state+": "+this);var res=receiver.onKeyDown(this.getKeyCode(),this);if(state!=null){if(res&&this.getRepeatCount()==0&&(this.mFlags&KeyEvent.FLAG_START_TRACKING)!=0){if(DEBUG)Log.v(TAG," Start tracking!");state.startTracking(this,target);}else if(this.isLongPress()&&state.isTracking(this)){if(receiver.onKeyLongPress(this.getKeyCode(),this)){if(DEBUG)Log.v(TAG," Clear from long press!");state.performedLongPress(this);res=true;}}}return res;}case KeyEvent.ACTION_UP:if(DEBUG)Log.v(TAG,"Key up to "+target+" in "+state+": "+this);if(state!=null){state.handleUpEvent(this);}return receiver.onKeyUp(this.getKeyCode(),this);}return false;}},{key:'hasNoModifiers',value:function hasNoModifiers(){if(this.isAltPressed())return false;if(this.isShiftPressed())return false;if(this.isCtrlPressed())return false;if(this.isMetaPressed())return false;return true;}},{key:'hasModifiers',value:function hasModifiers(modifiers){if((modifiers&KeyEvent.META_ALT_ON)===KeyEvent.META_ALT_ON&&this.isAltPressed())return true;if((modifiers&KeyEvent.META_SHIFT_ON)===KeyEvent.META_SHIFT_ON&&this.isShiftPressed())return true;if((modifiers&KeyEvent.META_META_ON)===KeyEvent.META_META_ON&&this.isMetaPressed())return true;if((modifiers&KeyEvent.META_CTRL_ON)===KeyEvent.META_CTRL_ON&&this.isCtrlPressed())return true;}},{key:'getMetaState',value:function getMetaState(){var meta=0;if(this.isAltPressed())meta|=KeyEvent.META_ALT_ON;if(this.isShiftPressed())meta|=KeyEvent.META_SHIFT_ON;if(this.isCtrlPressed())meta|=KeyEvent.META_CTRL_ON;if(this.isMetaPressed())meta|=KeyEvent.META_META_ON;return meta;}},{key:'toString',value:function toString(){return JSON.stringify(this);}},{key:'isCanceled',value:function isCanceled(){return false;}}],[{key:'obtain',value:function obtain(action,code){var ev=new KeyEvent();ev.mDownTime=SystemClock.uptimeMillis();ev.mEventTime=SystemClock.uptimeMillis();ev.mAction=action;ev.mKeyCode=code;return ev;}},{key:'isConfirmKey',value:function isConfirmKey(keyCode){switch(keyCode){case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:return true;default:return false;}}},{key:'actionToString',value:function actionToString(action){switch(action){case KeyEvent.ACTION_DOWN:return"ACTION_DOWN";case KeyEvent.ACTION_UP:return"ACTION_UP";default:return''+action;}}},{key:'keyCodeToString',value:function keyCodeToString(keyCode){return String.fromCharCode(keyCode);}}]);return KeyEvent;}();KeyEvent.KEYCODE_DPAD_UP=38;KeyEvent.KEYCODE_DPAD_DOWN=40;KeyEvent.KEYCODE_DPAD_LEFT=37;KeyEvent.KEYCODE_DPAD_RIGHT=39;KeyEvent.KEYCODE_DPAD_CENTER=13;KeyEvent.KEYCODE_ENTER=13;KeyEvent.KEYCODE_TAB=9;KeyEvent.KEYCODE_SPACE=32;KeyEvent.KEYCODE_ESCAPE=27;KeyEvent.KEYCODE_Backspace=8;KeyEvent.KEYCODE_PAGE_UP=33;KeyEvent.KEYCODE_PAGE_DOWN=34;KeyEvent.KEYCODE_MOVE_HOME=36;KeyEvent.KEYCODE_MOVE_END=35;KeyEvent.KEYCODE_Digit0=48;KeyEvent.KEYCODE_Digit1=49;KeyEvent.KEYCODE_Digit2=50;KeyEvent.KEYCODE_Digit3=51;KeyEvent.KEYCODE_Digit4=52;KeyEvent.KEYCODE_Digit5=53;KeyEvent.KEYCODE_Digit6=54;KeyEvent.KEYCODE_Digit7=55;KeyEvent.KEYCODE_Digit8=56;KeyEvent.KEYCODE_Digit9=57;KeyEvent.KEYCODE_Key_a=65;KeyEvent.KEYCODE_Key_b=66;KeyEvent.KEYCODE_Key_c=67;KeyEvent.KEYCODE_Key_d=68;KeyEvent.KEYCODE_Key_e=69;KeyEvent.KEYCODE_Key_f=70;KeyEvent.KEYCODE_Key_g=71;KeyEvent.KEYCODE_Key_h=72;KeyEvent.KEYCODE_Key_i=73;KeyEvent.KEYCODE_Key_j=74;KeyEvent.KEYCODE_Key_k=75;KeyEvent.KEYCODE_Key_l=76;KeyEvent.KEYCODE_Key_m=77;KeyEvent.KEYCODE_Key_n=78;KeyEvent.KEYCODE_Key_o=79;KeyEvent.KEYCODE_Key_p=80;KeyEvent.KEYCODE_Key_q=81;KeyEvent.KEYCODE_Key_r=82;KeyEvent.KEYCODE_Key_s=83;KeyEvent.KEYCODE_Key_t=84;KeyEvent.KEYCODE_Key_u=85;KeyEvent.KEYCODE_Key_v=86;KeyEvent.KEYCODE_Key_w=87;KeyEvent.KEYCODE_Key_x=88;KeyEvent.KEYCODE_Key_y=89;KeyEvent.KEYCODE_Key_z=90;KeyEvent.KEYCODE_KeyA=0x41;KeyEvent.KEYCODE_KeyB=0x42;KeyEvent.KEYCODE_KeyC=0x43;KeyEvent.KEYCODE_KeyD=0x44;KeyEvent.KEYCODE_KeyE=0x45;KeyEvent.KEYCODE_KeyF=0x46;KeyEvent.KEYCODE_KeyG=0x47;KeyEvent.KEYCODE_KeyH=0x48;KeyEvent.KEYCODE_KeyI=0x49;KeyEvent.KEYCODE_KeyJ=0x4a;KeyEvent.KEYCODE_KeyK=0x4b;KeyEvent.KEYCODE_KeyL=0x4c;KeyEvent.KEYCODE_KeyM=0x4d;KeyEvent.KEYCODE_KeyN=0x4e;KeyEvent.KEYCODE_KeyO=0x4f;KeyEvent.KEYCODE_KeyP=0x50;KeyEvent.KEYCODE_KeyQ=0x51;KeyEvent.KEYCODE_KeyR=0x52;KeyEvent.KEYCODE_KeyS=0x53;KeyEvent.KEYCODE_KeyT=0x54;KeyEvent.KEYCODE_KeyU=0x55;KeyEvent.KEYCODE_KeyV=0x56;KeyEvent.KEYCODE_KeyW=0x57;KeyEvent.KEYCODE_KeyX=0x58;KeyEvent.KEYCODE_KeyY=0x59;KeyEvent.KEYCODE_KeyZ=0x5a;KeyEvent.KEYCODE_Semicolon=0x3b;KeyEvent.KEYCODE_LessThan=0x3c;KeyEvent.KEYCODE_Equal=0x3d;KeyEvent.KEYCODE_MoreThan=0x3e;KeyEvent.KEYCODE_Question=0x3f;KeyEvent.KEYCODE_Comma=0x2c;KeyEvent.KEYCODE_Period=0x2e;KeyEvent.KEYCODE_Slash=0x2f;KeyEvent.KEYCODE_Quotation=0x27;KeyEvent.KEYCODE_LeftBracket=0x5b;KeyEvent.KEYCODE_Backslash=0x5c;KeyEvent.KEYCODE_RightBracket=0x5d;KeyEvent.KEYCODE_Minus=0x2d;KeyEvent.KEYCODE_Colon=0x3a;KeyEvent.KEYCODE_Double_Quotation=0x22;KeyEvent.KEYCODE_Backquote=0x60;KeyEvent.KEYCODE_Tilde=0x7e;KeyEvent.KEYCODE_Left_Brace=0x7b;KeyEvent.KEYCODE_Or=0x7c;KeyEvent.KEYCODE_Right_Brace=0x7d;KeyEvent.KEYCODE_Del=0x7f;KeyEvent.KEYCODE_Exclamation=0x21;KeyEvent.KEYCODE_Right_Parenthesis=0x29;KeyEvent.KEYCODE_AT=0x40;KeyEvent.KEYCODE_Sharp=0x23;KeyEvent.KEYCODE_Dollar=0x24;KeyEvent.KEYCODE_Percent=0x25;KeyEvent.KEYCODE_Power=0x5e;KeyEvent.KEYCODE_And=0x26;KeyEvent.KEYCODE_Asterisk=0x2a;KeyEvent.KEYCODE_Left_Parenthesis=0x28;KeyEvent.KEYCODE_Underline=0x5f;KeyEvent.KEYCODE_Add=0x2b;KeyEvent.KEYCODE_BACK=-1;KeyEvent.KEYCODE_MENU=-2;KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME={noMeta:{186:KeyEvent.KEYCODE_Semicolon,187:KeyEvent.KEYCODE_Equal,188:KeyEvent.KEYCODE_Comma,189:KeyEvent.KEYCODE_Minus,190:KeyEvent.KEYCODE_Period,191:KeyEvent.KEYCODE_Slash,192:KeyEvent.KEYCODE_Quotation,219:KeyEvent.KEYCODE_LeftBracket,220:KeyEvent.KEYCODE_Backslash,221:KeyEvent.KEYCODE_RightBracket},shift:{186:KeyEvent.KEYCODE_Colon,187:KeyEvent.KEYCODE_Add,188:KeyEvent.KEYCODE_LessThan,189:KeyEvent.KEYCODE_Underline,190:KeyEvent.KEYCODE_MoreThan,191:KeyEvent.KEYCODE_Question,192:KeyEvent.KEYCODE_Double_Quotation,219:KeyEvent.KEYCODE_Left_Brace,220:KeyEvent.KEYCODE_Or,221:KeyEvent.KEYCODE_Right_Brace},ctrl:{},alt:{}};KeyEvent.FIX_MAP_KEYCODE={186:KeyEvent.KEYCODE_Semicolon,187:KeyEvent.KEYCODE_Equal,188:KeyEvent.KEYCODE_Comma,189:KeyEvent.KEYCODE_Minus,190:KeyEvent.KEYCODE_Period,191:KeyEvent.KEYCODE_Slash,192:KeyEvent.KEYCODE_Backquote,219:KeyEvent.KEYCODE_LeftBracket,220:KeyEvent.KEYCODE_Backslash,221:KeyEvent.KEYCODE_RightBracket,222:KeyEvent.KEYCODE_Quotation,96:KeyEvent.KEYCODE_Digit0,97:KeyEvent.KEYCODE_Digit1,98:KeyEvent.KEYCODE_Digit2,99:KeyEvent.KEYCODE_Digit3,100:KeyEvent.KEYCODE_Digit4,101:KeyEvent.KEYCODE_Digit5,102:KeyEvent.KEYCODE_Digit6,103:KeyEvent.KEYCODE_Digit7,104:KeyEvent.KEYCODE_Digit8,105:KeyEvent.KEYCODE_Digit9};KeyEvent.ACTION_DOWN=0;KeyEvent.ACTION_UP=1;KeyEvent.META_MASK_SHIFT=16;KeyEvent.META_ALT_ON=0x02;KeyEvent.META_SHIFT_ON=0x1;KeyEvent.META_CTRL_ON=0x1000;KeyEvent.META_META_ON=0x10000;KeyEvent.FLAG_CANCELED=0x20;KeyEvent.FLAG_CANCELED_LONG_PRESS=0x100;KeyEvent.FLAG_LONG_PRESS=0x80;KeyEvent.FLAG_TRACKING=0x200;KeyEvent.FLAG_START_TRACKING=0x40000000;view.KeyEvent=KeyEvent;(function(KeyEvent){var DispatcherState=function(){function DispatcherState(){_classCallCheck(this,DispatcherState);this.mActiveLongPresses=new android.util.SparseArray();}_createClass(DispatcherState,[{key:'reset',value:function reset(target){if(target==null){if(DEBUG)Log.v(TAG,"Reset: "+this);this.mDownKeyCode=0;this.mDownTarget=null;this.mActiveLongPresses.clear();}else{if(this.mDownTarget==target){if(DEBUG)Log.v(TAG,"Reset in "+target+": "+this);this.mDownKeyCode=0;this.mDownTarget=null;}}}},{key:'startTracking',value:function startTracking(event,target){if(event.getAction()!=KeyEvent.ACTION_DOWN){throw new Error("Can only start tracking on a down event");}if(DEBUG)Log.v(TAG,"Start trackingt in "+target+": "+this);this.mDownKeyCode=event.getKeyCode();this.mDownTarget=target;}},{key:'isTracking',value:function isTracking(event){return this.mDownKeyCode==event.getKeyCode();}},{key:'performedLongPress',value:function performedLongPress(event){this.mActiveLongPresses.put(event.getKeyCode(),1);}},{key:'handleUpEvent',value:function handleUpEvent(event){var keyCode=event.getKeyCode();if(DEBUG)Log.v(TAG,"Handle key up "+event+": "+this);var index=this.mActiveLongPresses.indexOfKey(keyCode);if(index>=0){if(DEBUG)Log.v(TAG," Index: "+index);event.mFlags|=KeyEvent.FLAG_CANCELED|KeyEvent.FLAG_CANCELED_LONG_PRESS;this.mActiveLongPresses.removeAt(index);}if(this.mDownKeyCode==keyCode){if(DEBUG)Log.v(TAG," Tracking!");event.mFlags|=KeyEvent.FLAG_TRACKING;this.mDownKeyCode=0;this.mDownTarget=null;}}}]);return DispatcherState;}();KeyEvent.DispatcherState=DispatcherState;})(KeyEvent=view.KeyEvent||(view.KeyEvent={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_4){var PixelFormat=android.graphics.PixelFormat;var Rect=android.graphics.Rect;var System=java.lang.System;var Drawable=android.graphics.drawable.Drawable;var LayerDrawable=function(_Drawable3){_inherits(LayerDrawable,_Drawable3);function LayerDrawable(layers){var state=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;_classCallCheck(this,LayerDrawable);var _this19=_possibleConstructorReturn(this,(LayerDrawable.__proto__||Object.getPrototypeOf(LayerDrawable)).call(this));_this19.mOpacityOverride=PixelFormat.UNKNOWN;_this19.mTmpRect=new Rect();var _as=_this19.createConstantState(state);_this19.mLayerState=_as;if(_as.mNum>0){_this19.ensurePadding();}if(layers!=null){var length=layers.length;var r=new Array(length);for(var i=0;i tag requires a \'drawable\' attribute or child tag defining a drawable)');}this.addLayer(dr,id,left,top,right,bottom);}}catch(err){_didIteratorError33=true;_iteratorError33=err;}finally{try{if(!_iteratorNormalCompletion33&&_iterator33.return){_iterator33.return();}}finally{if(_didIteratorError33){throw _iteratorError33;}}}this.ensurePadding();this.onStateChange(this.getState());}},{key:'addLayer',value:function addLayer(layer,id){var left=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var top=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var right=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;var bottom=arguments.length>5&&arguments[5]!==undefined?arguments[5]:0;var st=this.mLayerState;var N=st.mChildren!=null?st.mChildren.length:0;var i=st.mNum;if(i>=N){var nu=new Array(N+10);if(i>0){System.arraycopy(st.mChildren,0,nu,0,i);}st.mChildren=nu;}var childDrawable=new LayerDrawable.ChildDrawable();st.mChildren[i]=childDrawable;childDrawable.mId=id;childDrawable.mDrawable=layer;childDrawable.mDrawable.setAutoMirrored(this.isAutoMirrored());childDrawable.mInsetL=left;childDrawable.mInsetT=top;childDrawable.mInsetR=right;childDrawable.mInsetB=bottom;st.mNum++;layer.setCallback(this);}},{key:'findDrawableByLayerId',value:function findDrawableByLayerId(id){var layers=this.mLayerState.mChildren;for(var i=this.mLayerState.mNum-1;i>=0;i--){if(layers[i].mId==id){return layers[i].mDrawable;}}return null;}},{key:'setId',value:function setId(index,id){this.mLayerState.mChildren[index].mId=id;}},{key:'getNumberOfLayers',value:function getNumberOfLayers(){return this.mLayerState.mNum;}},{key:'getDrawable',value:function getDrawable(index){return this.mLayerState.mChildren[index].mDrawable;}},{key:'getId',value:function getId(index){return this.mLayerState.mChildren[index].mId;}},{key:'setDrawableByLayerId',value:function setDrawableByLayerId(id,drawable){var layers=this.mLayerState.mChildren;for(var i=this.mLayerState.mNum-1;i>=0;i--){if(layers[i].mId==id){if(layers[i].mDrawable!=null){if(drawable!=null){var bounds=layers[i].mDrawable.getBounds();drawable.setBounds(bounds);}layers[i].mDrawable.setCallback(null);}if(drawable!=null){drawable.setCallback(this);}layers[i].mDrawable=drawable;return true;}}return false;}},{key:'setLayerInset',value:function setLayerInset(index,l,t,r,b){var childDrawable=this.mLayerState.mChildren[index];childDrawable.mInsetL=l;childDrawable.mInsetT=t;childDrawable.mInsetR=r;childDrawable.mInsetB=b;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;i0){return array[0].mDrawable.getAlpha();}else{return _get2(LayerDrawable.prototype.__proto__||Object.getPrototypeOf(LayerDrawable.prototype),'getAlpha',this).call(this);}}},{key:'setOpacity',value:function setOpacity(opacity){this.mOpacityOverride=opacity;}},{key:'getOpacity',value:function getOpacity(){if(this.mOpacityOverride!=PixelFormat.UNKNOWN){return this.mOpacityOverride;}return this.mLayerState.getOpacity();}},{key:'setAutoMirrored',value:function setAutoMirrored(mirrored){this.mLayerState.mAutoMirrored=mirrored;var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;iwidth){width=w;}padL+=this.mPaddingL[i];padR+=this.mPaddingR[i];}return width;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){var height=-1;var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;var padT=0,padB=0;for(var i=0;iheight){height=h;}padT+=this.mPaddingT[i];padB+=this.mPaddingB[i];}return height;}},{key:'reapplyPadding',value:function reapplyPadding(i,r){var rect=this.mTmpRect;r.mDrawable.getPadding(rect);if(rect.left!=this.mPaddingL[i]||rect.top!=this.mPaddingT[i]||rect.right!=this.mPaddingR[i]||rect.bottom!=this.mPaddingB[i]){this.mPaddingL[i]=rect.left;this.mPaddingT[i]=rect.top;this.mPaddingR[i]=rect.right;this.mPaddingB[i]=rect.bottom;return true;}return false;}},{key:'ensurePadding',value:function ensurePadding(){var N=this.mLayerState.mNum;if(this.mPaddingL!=null&&this.mPaddingL.length>=N){return;}this.mPaddingL=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingT=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingR=androidui.util.ArrayCreator.newNumberArray(N);this.mPaddingB=androidui.util.ArrayCreator.newNumberArray(N);for(var i=0;i0?this.mChildren[0].mDrawable.getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i");}this.mState.mDrawable=drawable;this.mState.mPivotXRel=pivotXRel;this.mState.mPivotX=pivotX;this.mState.mPivotYRel=pivotYRel;this.mState.mPivotY=pivotY;this.mState.mFromDegrees=this.mState.mCurrentDegrees=fromDegrees;this.mState.mToDegrees=toDegrees;if(drawable!=null){drawable.setCallback(this);}}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(RotateDrawable.prototype.__proto__||Object.getPrototypeOf(RotateDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}}]);return RotateDrawable;}(Drawable);RotateDrawable.MAX_LEVEL=10000.0;drawable_5.RotateDrawable=RotateDrawable;(function(RotateDrawable){var RotateState=function(){function RotateState(source,owner){_classCallCheck(this,RotateState);this.mPivotX=0;this.mPivotY=0;this.mFromDegrees=0;this.mToDegrees=0;this.mCurrentDegrees=0;if(source!=null){this.mDrawable=source.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mPivotXRel=source.mPivotXRel;this.mPivotX=source.mPivotX;this.mPivotYRel=source.mPivotYRel;this.mPivotY=source.mPivotY;this.mFromDegrees=this.mCurrentDegrees=source.mFromDegrees;this.mToDegrees=source.mToDegrees;this.mCanConstantState=this.mCheckedConstantState=true;}}_createClass(RotateState,[{key:'newDrawable',value:function newDrawable(){return new RotateDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return RotateState;}();RotateDrawable.RotateState=RotateState;})(RotateDrawable=drawable_5.RotateDrawable||(drawable_5.RotateDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Float=function(){function Float(){_classCallCheck(this,Float);}_createClass(Float,null,[{key:'parseFloat',value:function parseFloat(value){return Number.parseFloat(value);}}]);return Float;}();Float.MIN_VALUE=Number.MIN_VALUE;Float.MAX_VALUE=Number.MAX_VALUE;lang.Float=Float;})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_6){var Rect=android.graphics.Rect;var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var ScaleDrawable=function(_Drawable5){_inherits(ScaleDrawable,_Drawable5);function ScaleDrawable(){_classCallCheck(this,ScaleDrawable);var _this21=_possibleConstructorReturn(this,(ScaleDrawable.__proto__||Object.getPrototypeOf(ScaleDrawable)).call(this));_this21.mTmpRect=new Rect();if(arguments.length<=1){_this21.mScaleState=new ScaleDrawable.ScaleState(arguments.length<=0?undefined:arguments[0],_this21);return _possibleConstructorReturn(_this21);}var drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var scaleWidth=arguments.length<=2?undefined:arguments[2];var scaleHeight=arguments.length<=3?undefined:arguments[3];_this21.mScaleState=new ScaleDrawable.ScaleState(null,_this21);_this21.mScaleState.mDrawable=drawable;_this21.mScaleState.mGravity=gravity;_this21.mScaleState.mScaleWidth=scaleWidth;_this21.mScaleState.mScaleHeight=scaleHeight;if(drawable!=null){drawable.setCallback(_this21);}return _this21;}_createClass(ScaleDrawable,[{key:'getDrawable',value:function getDrawable(){return this.mScaleState.mDrawable;}},{key:'inflate',value:function inflate(r,parser){_get2(ScaleDrawable.prototype.__proto__||Object.getPrototypeOf(ScaleDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var sw=a.getFloat("android:scaleWidth",1);var sh=a.getFloat("android:scaleHeight",1);var gStr=a.getString("android:scaleGravity");var g=Gravity.parseGravity(gStr,Gravity.LEFT);var min=a.getBoolean("android:useIntrinsicSizeAsMinimum",false);var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&parser.children[0]instanceof HTMLElement){dr=Drawable.createFromXml(r,parser.children[0]);}if(dr==null){throw Error('new IllegalArgumentException("No drawable specified for ")');}this.mScaleState.mDrawable=dr;this.mScaleState.mScaleWidth=sw;this.mScaleState.mScaleHeight=sh;this.mScaleState.mGravity=g;this.mScaleState.mUseIntrinsicSizeAsMin=min;if(dr!=null){dr.setCallback(this);}}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){if(this.getCallback()!=null){this.getCallback().invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(this.getCallback()!=null){this.getCallback().scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(this.getCallback()!=null){this.getCallback().unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){if(this.mScaleState.mDrawable.getLevel()!=0)this.mScaleState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){return this.mScaleState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mScaleState.mDrawable.setVisible(visible,restart);return _get2(ScaleDrawable.prototype.__proto__||Object.getPrototypeOf(ScaleDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mScaleState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mScaleState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mScaleState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mScaleState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mScaleState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onLevelChange',value:function onLevelChange(level){this.mScaleState.mDrawable.setLevel(level);this.onBoundsChange(this.getBounds());this.invalidateSelf();return true;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){var r=this.mTmpRect;var min=this.mScaleState.mUseIntrinsicSizeAsMin;var level=this.getLevel();var w=bounds.width();if(this.mScaleState.mScaleWidth>0){var iw=min?this.mScaleState.mDrawable.getIntrinsicWidth():0;w-=Math.floor((w-iw)*(10000-level)*this.mScaleState.mScaleWidth/10000);}var h=bounds.height();if(this.mScaleState.mScaleHeight>0){var ih=min?this.mScaleState.mDrawable.getIntrinsicHeight():0;h-=Math.floor((h-ih)*(10000-level)*this.mScaleState.mScaleHeight/10000);}Gravity.apply(this.mScaleState.mGravity,w,h,bounds,r);if(w>0&&h>0){this.mScaleState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mScaleState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mScaleState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mScaleState.canConstantState()){return this.mScaleState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(ScaleDrawable.prototype.__proto__||Object.getPrototypeOf(ScaleDrawable.prototype),'mutate',this).call(this)==this){this.mScaleState.mDrawable.mutate();this.mMutated=true;}return this;}}]);return ScaleDrawable;}(Drawable);drawable_6.ScaleDrawable=ScaleDrawable;(function(ScaleDrawable){var ScaleState=function(){function ScaleState(orig,owner){_classCallCheck(this,ScaleState);this.mScaleWidth=0;this.mScaleHeight=0;this.mGravity=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mScaleWidth=orig.mScaleWidth;this.mScaleHeight=orig.mScaleHeight;this.mGravity=orig.mGravity;this.mUseIntrinsicSizeAsMin=orig.mUseIntrinsicSizeAsMin;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(ScaleState,[{key:'newDrawable',value:function newDrawable(){return new ScaleDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return ScaleState;}();ScaleDrawable.ScaleState=ScaleState;})(ScaleDrawable=drawable_6.ScaleDrawable||(drawable_6.ScaleDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Animatable;(function(Animatable){function isImpl(obj){return obj&&obj['start']&&obj['stop']&&obj['isRunning'];}Animatable.isImpl=isImpl;})(Animatable=drawable.Animatable||(drawable.Animatable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable){var Rect=android.graphics.Rect;var PixelFormat=android.graphics.PixelFormat;var Log=android.util.Log;var SparseArray=android.util.SparseArray;var SystemClock=android.os.SystemClock;var DrawableContainer=function(_drawable$Drawable3){_inherits(DrawableContainer,_drawable$Drawable3);function DrawableContainer(){_classCallCheck(this,DrawableContainer);var _this22=_possibleConstructorReturn(this,(DrawableContainer.__proto__||Object.getPrototypeOf(DrawableContainer)).apply(this,arguments));_this22.mAlpha=0xFF;_this22.mCurIndex=-1;_this22.mMutated=false;_this22.mEnterAnimationEnd=0;_this22.mExitAnimationEnd=0;return _this22;}_createClass(DrawableContainer,[{key:'draw',value:function draw(canvas){if(this.mCurrDrawable!=null){this.mCurrDrawable.draw(canvas);}if(this.mLastDrawable!=null){this.mLastDrawable.draw(canvas);}}},{key:'needsMirroring',value:function needsMirroring(){return false&&this.isAutoMirrored();}},{key:'getPadding',value:function getPadding(padding){var r=this.mDrawableContainerState.getConstantPadding();var result=void 0;if(r!=null){padding.set(r);result=(r.left|r.top|r.bottom|r.right)!=0;}else{if(this.mCurrDrawable!=null){result=this.mCurrDrawable.getPadding(padding);}else{result=_get2(DrawableContainer.prototype.__proto__||Object.getPrototypeOf(DrawableContainer.prototype),'getPadding',this).call(this,padding);}}if(this.needsMirroring()){var left=padding.left;var right=padding.right;padding.left=right;padding.right=left;}return result;}},{key:'setAlpha',value:function setAlpha(alpha){if(this.mAlpha!=alpha){this.mAlpha=alpha;if(this.mCurrDrawable!=null){if(this.mEnterAnimationEnd==0){this.mCurrDrawable.mutate().setAlpha(alpha);}else{this.animate(false);}}}}},{key:'getAlpha',value:function getAlpha(){return this.mAlpha;}},{key:'setDither',value:function setDither(dither){if(this.mDrawableContainerState.mDither!=dither){this.mDrawableContainerState.mDither=dither;if(this.mCurrDrawable!=null){this.mCurrDrawable.mutate().setDither(this.mDrawableContainerState.mDither);}}}},{key:'setEnterFadeDuration',value:function setEnterFadeDuration(ms){this.mDrawableContainerState.mEnterFadeDuration=ms;}},{key:'setExitFadeDuration',value:function setExitFadeDuration(ms){this.mDrawableContainerState.mExitFadeDuration=ms;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){if(this.mLastDrawable!=null){this.mLastDrawable.setBounds(bounds);}if(this.mCurrDrawable!=null){this.mCurrDrawable.setBounds(bounds);}}},{key:'isStateful',value:function isStateful(){return this.mDrawableContainerState.isStateful();}},{key:'setAutoMirrored',value:function setAutoMirrored(mirrored){this.mDrawableContainerState.mAutoMirrored=mirrored;if(this.mCurrDrawable!=null){this.mCurrDrawable.mutate().setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);}}},{key:'isAutoMirrored',value:function isAutoMirrored(){return this.mDrawableContainerState.mAutoMirrored;}},{key:'jumpToCurrentState',value:function jumpToCurrentState(){var changed=false;if(this.mLastDrawable!=null){this.mLastDrawable.jumpToCurrentState();this.mLastDrawable=null;changed=true;}if(this.mCurrDrawable!=null){this.mCurrDrawable.jumpToCurrentState();this.mCurrDrawable.mutate().setAlpha(this.mAlpha);}if(this.mExitAnimationEnd!=0){this.mExitAnimationEnd=0;changed=true;}if(this.mEnterAnimationEnd!=0){this.mEnterAnimationEnd=0;changed=true;}if(changed){this.invalidateSelf();}}},{key:'onStateChange',value:function onStateChange(state){if(this.mLastDrawable!=null){return this.mLastDrawable.setState(state);}if(this.mCurrDrawable!=null){return this.mCurrDrawable.setState(state);}return false;}},{key:'onLevelChange',value:function onLevelChange(level){if(this.mLastDrawable!=null){return this.mLastDrawable.setLevel(level);}if(this.mCurrDrawable!=null){return this.mCurrDrawable.setLevel(level);}return false;}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantWidth();}return this.mCurrDrawable!=null?this.mCurrDrawable.getIntrinsicWidth():-1;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantHeight();}return this.mCurrDrawable!=null?this.mCurrDrawable.getIntrinsicHeight():-1;}},{key:'getMinimumWidth',value:function getMinimumWidth(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantMinimumWidth();}return this.mCurrDrawable!=null?this.mCurrDrawable.getMinimumWidth():0;}},{key:'getMinimumHeight',value:function getMinimumHeight(){if(this.mDrawableContainerState.isConstantSize()){return this.mDrawableContainerState.getConstantMinimumHeight();}return this.mCurrDrawable!=null?this.mCurrDrawable.getMinimumHeight():0;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(who==this.mCurrDrawable&&callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(who==this.mCurrDrawable&&this.getCallback()!=null){this.getCallback().unscheduleDrawable(this,what);}}},{key:'setVisible',value:function setVisible(visible,restart){var changed=_get2(DrawableContainer.prototype.__proto__||Object.getPrototypeOf(DrawableContainer.prototype),'setVisible',this).call(this,visible,restart);if(this.mLastDrawable!=null){this.mLastDrawable.setVisible(visible,restart);}if(this.mCurrDrawable!=null){this.mCurrDrawable.setVisible(visible,restart);}return changed;}},{key:'getOpacity',value:function getOpacity(){return this.mCurrDrawable==null||!this.mCurrDrawable.isVisible()?PixelFormat.TRANSPARENT:this.mDrawableContainerState.getOpacity();}},{key:'selectDrawable',value:function selectDrawable(idx){var _this23=this;if(idx==this.mCurIndex){return false;}var now=SystemClock.uptimeMillis();if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" from "+this.mCurIndex+" to "+idx+": exit="+this.mDrawableContainerState.mExitFadeDuration+" enter="+this.mDrawableContainerState.mEnterFadeDuration);if(this.mDrawableContainerState.mExitFadeDuration>0){if(this.mLastDrawable!=null){this.mLastDrawable.setVisible(false,false);}if(this.mCurrDrawable!=null){this.mLastDrawable=this.mCurrDrawable;this.mExitAnimationEnd=now+this.mDrawableContainerState.mExitFadeDuration;}else{this.mLastDrawable=null;this.mExitAnimationEnd=0;}}else if(this.mCurrDrawable!=null){this.mCurrDrawable.setVisible(false,false);}if(idx>=0&&idx0){this.mEnterAnimationEnd=now+this.mDrawableContainerState.mEnterFadeDuration;}else{d.setAlpha(this.mAlpha);}d.setVisible(this.isVisible(),true);d.setDither(this.mDrawableContainerState.mDither);d.setState(this.getState());d.setLevel(this.getLevel());d.setBounds(this.getBounds());d.setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);}else{}}else{this.mCurrDrawable=null;this.mCurIndex=-1;}if(this.mEnterAnimationEnd!=0||this.mExitAnimationEnd!=0){if(this.mAnimationRunnable==null){(function(){var t=_this23;_this23.mAnimationRunnable={run:function run(){t.animate(true);t.invalidateSelf();}};})();}else{this.unscheduleSelf(this.mAnimationRunnable);}this.animate(true);}this.invalidateSelf();return true;}},{key:'animate',value:function animate(schedule){var now=SystemClock.uptimeMillis();var animating=false;if(this.mCurrDrawable!=null){if(this.mEnterAnimationEnd!=0){if(this.mEnterAnimationEnd<=now){this.mCurrDrawable.mutate().setAlpha(this.mAlpha);this.mEnterAnimationEnd=0;}else{var animAlpha=(this.mEnterAnimationEnd-now)*255/this.mDrawableContainerState.mEnterFadeDuration;if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" cur alpha "+animAlpha);this.mCurrDrawable.mutate().setAlpha((255-animAlpha)*this.mAlpha/255);animating=true;}}}else{this.mEnterAnimationEnd=0;}if(this.mLastDrawable!=null){if(this.mExitAnimationEnd!=0){if(this.mExitAnimationEnd<=now){this.mLastDrawable.setVisible(false,false);this.mLastDrawable=null;this.mExitAnimationEnd=0;}else{var _animAlpha=(this.mExitAnimationEnd-now)*255/this.mDrawableContainerState.mExitFadeDuration;if(DrawableContainer.DEBUG)android.util.Log.i(DrawableContainer.TAG,toString()+" last alpha "+_animAlpha);this.mLastDrawable.mutate().setAlpha(_animAlpha*this.mAlpha/255);animating=true;}}}else{this.mExitAnimationEnd=0;}if(schedule&&animating){this.scheduleSelf(this.mAnimationRunnable,now+1000/60);}}},{key:'getCurrent',value:function getCurrent(){return this.mCurrDrawable;}},{key:'getConstantState',value:function getConstantState(){if(this.mDrawableContainerState.canConstantState()){return this.mDrawableContainerState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(DrawableContainer.prototype.__proto__||Object.getPrototypeOf(DrawableContainer.prototype),'mutate',this).call(this)==this){this.mDrawableContainerState.mutate();this.mMutated=true;}return this;}},{key:'setConstantState',value:function setConstantState(state){this.mDrawableContainerState=state;}}]);return DrawableContainer;}(drawable.Drawable);DrawableContainer.DEBUG=Log.DBG_DrawableContainer;DrawableContainer.TAG="DrawableContainer";DrawableContainer.DEFAULT_DITHER=true;drawable.DrawableContainer=DrawableContainer;(function(DrawableContainer){var DrawableContainerState=function(){function DrawableContainerState(orig,owner){_classCallCheck(this,DrawableContainerState);this.mVariablePadding=false;this.mPaddingChecked=false;this.mConstantSize=false;this.mComputedConstantSize=false;this.mConstantWidth=0;this.mConstantHeight=0;this.mConstantMinimumWidth=0;this.mConstantMinimumHeight=0;this.mCheckedOpacity=false;this.mOpacity=0;this.mCheckedStateful=false;this.mStateful=false;this.mCheckedConstantState=false;this.mCanConstantState=false;this.mDither=DrawableContainer.DEFAULT_DITHER;this.mMutated=false;this.mEnterFadeDuration=0;this.mExitFadeDuration=0;this.mAutoMirrored=false;this.mOwner=owner;if(orig!=null){this.mCheckedConstantState=true;this.mCanConstantState=true;this.mVariablePadding=orig.mVariablePadding;this.mConstantSize=orig.mConstantSize;this.mDither=orig.mDither;this.mMutated=orig.mMutated;this.mEnterFadeDuration=orig.mEnterFadeDuration;this.mExitFadeDuration=orig.mExitFadeDuration;this.mAutoMirrored=orig.mAutoMirrored;this.mConstantPadding=orig.getConstantPadding();this.mPaddingChecked=true;this.mConstantWidth=orig.getConstantWidth();this.mConstantHeight=orig.getConstantHeight();this.mConstantMinimumWidth=orig.getConstantMinimumWidth();this.mConstantMinimumHeight=orig.getConstantMinimumHeight();this.mComputedConstantSize=true;this.mOpacity=orig.getOpacity();this.mCheckedOpacity=true;this.mStateful=orig.isStateful();this.mCheckedStateful=true;var origDr=orig.mDrawables;this.mDrawables=new Array(0);var origDf=orig.mDrawableFutures;if(origDf!=null){this.mDrawableFutures=origDf.clone();}else{this.mDrawableFutures=new SparseArray(this.mNumChildren);}var N=this.mNumChildren;for(var i=0;i=0){var prepared=this.mDrawableFutures.valueAt(keyIndex).get(this);this.mDrawables[index]=prepared;this.mDrawableFutures.removeAt(keyIndex);return prepared;}}return null;}},{key:'mutate',value:function mutate(){var N=this.mNumChildren;var drawables=this.mDrawables;for(var i=0;ir.left)r.left=t.left;if(t.top>r.top)r.top=t.top;if(t.right>r.right)r.right=t.right;if(t.bottom>r.bottom)r.bottom=t.bottom;}}this.mPaddingChecked=true;return this.mConstantPadding=r;}},{key:'setConstantSize',value:function setConstantSize(constant){this.mConstantSize=constant;}},{key:'isConstantSize',value:function isConstantSize(){return this.mConstantSize;}},{key:'getConstantWidth',value:function getConstantWidth(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantWidth;}},{key:'getConstantHeight',value:function getConstantHeight(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantHeight;}},{key:'getConstantMinimumWidth',value:function getConstantMinimumWidth(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantMinimumWidth;}},{key:'getConstantMinimumHeight',value:function getConstantMinimumHeight(){if(!this.mComputedConstantSize){this.computeConstantSize();}return this.mConstantMinimumHeight;}},{key:'computeConstantSize',value:function computeConstantSize(){this.mComputedConstantSize=true;this.createAllFutures();var N=this.mNumChildren;var drawables=this.mDrawables;this.mConstantWidth=this.mConstantHeight=-1;this.mConstantMinimumWidth=this.mConstantMinimumHeight=0;for(var i=0;ithis.mConstantWidth)this.mConstantWidth=s;s=dr.getIntrinsicHeight();if(s>this.mConstantHeight)this.mConstantHeight=s;s=dr.getMinimumWidth();if(s>this.mConstantMinimumWidth)this.mConstantMinimumWidth=s;s=dr.getMinimumHeight();if(s>this.mConstantMinimumHeight)this.mConstantMinimumHeight=s;}}},{key:'setEnterFadeDuration',value:function setEnterFadeDuration(duration){this.mEnterFadeDuration=duration;}},{key:'getEnterFadeDuration',value:function getEnterFadeDuration(){return this.mEnterFadeDuration;}},{key:'setExitFadeDuration',value:function setExitFadeDuration(duration){this.mExitFadeDuration=duration;}},{key:'getExitFadeDuration',value:function getExitFadeDuration(){return this.mExitFadeDuration;}},{key:'getOpacity',value:function getOpacity(){if(this.mCheckedOpacity){return this.mOpacity;}this.createAllFutures();this.mCheckedOpacity=true;var N=this.mNumChildren;var drawables=this.mDrawables;var op=N>0?drawables[0].getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i-1;}},{key:'run',value:function run(){this.nextFrame(false);}},{key:'unscheduleSelf',value:function unscheduleSelf(what){this.mCurFrame=-1;_get2(AnimationDrawable.prototype.__proto__||Object.getPrototypeOf(AnimationDrawable.prototype),'unscheduleSelf',this).call(this,what);}},{key:'getNumberOfFrames',value:function getNumberOfFrames(){return this.mAnimationState.getChildCount();}},{key:'getFrame',value:function getFrame(index){return this.mAnimationState.getChild(index);}},{key:'getDuration',value:function getDuration(i){return this.mAnimationState.mDurations[i];}},{key:'isOneShot',value:function isOneShot(){return this.mAnimationState.mOneShot;}},{key:'setOneShot',value:function setOneShot(oneShot){this.mAnimationState.mOneShot=oneShot;}},{key:'addFrame',value:function addFrame(frame,duration){this.mAnimationState.addFrame(frame,duration);if(this.mCurFrame<0){this.setFrame(0,true,false);}}},{key:'nextFrame',value:function nextFrame(unschedule){var next=this.mCurFrame+1;var N=this.mAnimationState.getChildCount();if(next>=N){next=0;}this.setFrame(next,unschedule,!this.mAnimationState.mOneShot||next=this.mAnimationState.getChildCount()){return;}this.mCurFrame=frame;this.selectDrawable(frame);if(unschedule){this.unscheduleSelf(this);}if(animate){this.mCurFrame=frame;this.scheduleSelf(this,SystemClock.uptimeMillis()+this.mAnimationState.mDurations[frame]);}}},{key:'inflate',value:function inflate(r,parser){_get2(AnimationDrawable.prototype.__proto__||Object.getPrototypeOf(AnimationDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);this.mAnimationState.setVariablePadding(a.getBoolean("android:variablePadding",false));this.mAnimationState.mOneShot=a.getBoolean("android:oneshot",false);a.recycle();var _iteratorNormalCompletion34=true;var _didIteratorError34=false;var _iteratorError34=undefined;try{for(var _iterator34=Array.from(parser.children)[Symbol.iterator](),_step34;!(_iteratorNormalCompletion34=(_step34=_iterator34.next()).done);_iteratorNormalCompletion34=true){var child=_step34.value;var item=child;if(item.tagName.toLowerCase()!=='item'){continue;}a=r.obtainAttributes(item);var duration=a.getInt("android:duration",-1);if(duration<0){throw Error('new XmlPullParserException(parser.getPositionDescription() + ": tag requires a \'duration\' attribute")');}var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&item.children[0]instanceof HTMLElement){dr=Drawable.createFromXml(r,item.children[0]);}if(!dr){throw Error('new XmlPullParserException( tag requires a \'drawable\' attribute or child tag defining a drawable)');}this.mAnimationState.addFrame(dr,duration);if(dr!=null){dr.setCallback(this);}}}catch(err){_didIteratorError34=true;_iteratorError34=err;}finally{try{if(!_iteratorNormalCompletion34&&_iterator34.return){_iterator34.return();}}finally{if(_didIteratorError34){throw _iteratorError34;}}}this.setFrame(0,true,false);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(AnimationDrawable.prototype.__proto__||Object.getPrototypeOf(AnimationDrawable.prototype),'mutate',this).call(this)==this){this.mAnimationState.mDurations=[].concat(_toConsumableArray(this.mAnimationState.mDurations));this.mMutated=true;}return this;}}]);return AnimationDrawable;}(DrawableContainer);drawable.AnimationDrawable=AnimationDrawable;(function(AnimationDrawable){var AnimationState=function(_DrawableContainer$Dr){_inherits(AnimationState,_DrawableContainer$Dr);function AnimationState(orig,owner){_classCallCheck(this,AnimationState);var _this25=_possibleConstructorReturn(this,(AnimationState.__proto__||Object.getPrototypeOf(AnimationState)).call(this,orig,owner));if(orig!=null){_this25.mDurations=orig.mDurations;_this25.mOneShot=orig.mOneShot;}else{_this25.mDurations=androidui.util.ArrayCreator.newNumberArray(_this25.getCapacity());_this25.mOneShot=true;}return _this25;}_createClass(AnimationState,[{key:'newDrawable',value:function newDrawable(){return new AnimationDrawable(this);}},{key:'addFrame',value:function addFrame(dr,dur){var pos=_get2(AnimationState.prototype.__proto__||Object.getPrototypeOf(AnimationState.prototype),'addChild',this).call(this,dr);this.mDurations[pos]=dur;}}]);return AnimationState;}(DrawableContainer.DrawableContainerState);AnimationDrawable.AnimationState=AnimationState;})(AnimationDrawable=drawable.AnimationDrawable||(drawable.AnimationDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_7){var DEBUG=android.util.Log.DBG_StateListDrawable;var TAG="StateListDrawable";var DEFAULT_DITHER=true;var StateListDrawable=function(_drawable_7$DrawableC){_inherits(StateListDrawable,_drawable_7$DrawableC);function StateListDrawable(){_classCallCheck(this,StateListDrawable);var _this26=_possibleConstructorReturn(this,(StateListDrawable.__proto__||Object.getPrototypeOf(StateListDrawable)).call(this));_this26.initWithState(null);return _this26;}_createClass(StateListDrawable,[{key:'initWithState',value:function initWithState(state){var _as=new StateListState(state,this);this.mStateListState=_as;this.setConstantState(_as);this.onStateChange(this.getState());}},{key:'addState',value:function addState(stateSet,drawable){if(drawable!=null){this.mStateListState.addStateSet(stateSet,drawable);this.onStateChange(this.getState());}}},{key:'isStateful',value:function isStateful(){return true;}},{key:'onStateChange',value:function onStateChange(stateSet){var idx=this.mStateListState.indexOfStateSet(stateSet);if(DEBUG)android.util.Log.i(TAG,"onStateChange "+this+" states "+stateSet+" found "+idx);if(idx<0){idx=this.mStateListState.indexOfStateSet(android.util.StateSet.WILD_CARD);}if(this.selectDrawable(idx)){return true;}return _get2(StateListDrawable.prototype.__proto__||Object.getPrototypeOf(StateListDrawable.prototype),'onStateChange',this).call(this,stateSet);}},{key:'inflate',value:function inflate(r,parser){_get2(StateListDrawable.prototype.__proto__||Object.getPrototypeOf(StateListDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var state=this.mStateListState;state.mVariablePadding=a.getBoolean("android:variablePadding",state.mVariablePadding);state.mConstantSize=a.getBoolean("android:constantSize",state.mConstantSize);state.mEnterFadeDuration=a.getInt("android:enterFadeDuration",state.mEnterFadeDuration);state.mExitFadeDuration=a.getInt("android:exitFadeDuration",state.mExitFadeDuration);state.mDither=a.getBoolean("android:dither",state.mDither);state.mAutoMirrored=a.getBoolean("android:autoMirrored",state.mAutoMirrored);a.recycle();var _iteratorNormalCompletion35=true;var _didIteratorError35=false;var _iteratorError35=undefined;try{for(var _iterator35=Array.from(parser.children)[Symbol.iterator](),_step35;!(_iteratorNormalCompletion35=(_step35=_iterator35.next()).done);_iteratorNormalCompletion35=true){var child=_step35.value;var item=child;if(item.tagName.toLowerCase()!=='item'){continue;}var dr=void 0;var stateSpec=[];var typedArray=r.obtainAttributes(item);var _iteratorNormalCompletion36=true;var _didIteratorError36=false;var _iteratorError36=undefined;try{for(var _iterator36=typedArray.getLowerCaseNoNamespaceAttrNames()[Symbol.iterator](),_step36;!(_iteratorNormalCompletion36=(_step36=_iterator36.next()).done);_iteratorNormalCompletion36=true){var attrName=_step36.value;if(attrName==='drawable'){dr=typedArray.getDrawable(attrName);}else if(attrName.startsWith('state_')){var _state=attrName.substring('state_'.length);var stateValue=android.view.View['VIEW_STATE_'+_state.toUpperCase()];if(typeof stateValue==="number"){stateSpec.push(typedArray.getBoolean(attrName,true)?stateValue:-stateValue);}}}}catch(err){_didIteratorError36=true;_iteratorError36=err;}finally{try{if(!_iteratorNormalCompletion36&&_iterator36.return){_iterator36.return();}}finally{if(_didIteratorError36){throw _iteratorError36;}}}if(!dr&&item.children[0]instanceof HTMLElement){dr=drawable_7.Drawable.createFromXml(r,item.children[0]);}if(!dr){throw new Error(": tag requires a 'drawable' attribute or child tag defining a drawable");}state.addStateSet(stateSpec,dr);}}catch(err){_didIteratorError35=true;_iteratorError35=err;}finally{try{if(!_iteratorNormalCompletion35&&_iterator35.return){_iterator35.return();}}finally{if(_didIteratorError35){throw _iteratorError35;}}}this.onStateChange(this.getState());}},{key:'getStateListState',value:function getStateListState(){return this.mStateListState;}},{key:'getStateCount',value:function getStateCount(){return this.mStateListState.getChildCount();}},{key:'getStateSet',value:function getStateSet(index){return this.mStateListState.mStateSets[index];}},{key:'getStateDrawable',value:function getStateDrawable(index){return this.mStateListState.getChild(index);}},{key:'getStateDrawableIndex',value:function getStateDrawableIndex(stateSet){return this.mStateListState.indexOfStateSet(stateSet);}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(StateListDrawable.prototype.__proto__||Object.getPrototypeOf(StateListDrawable.prototype),'mutate',this).call(this)==this){var sets=this.mStateListState.mStateSets;var count=sets.length;this.mStateListState.mStateSets=new Array(count);for(var i=0;idrawingCacheSize)return null;cache=this.mNinePatchDrawCache=new Canvas(bound.width(),bound.height());this.drawNinePatch(cache);return cache;}},{key:'drawNinePatch',value:function drawNinePatch(canvas){var _this31=this;var smoothEnableBak=canvas.isImageSmoothingEnabled();canvas.setImageSmoothingEnabled(false);var imageWidth=this.mImageWidth;var imageHeight=this.mImageHeight;if(imageHeight<=0||imageWidth<=0)return;var image=this.getImage();var bound=this.getBounds();var staticRatioScale=android.content.res.Resources.getDisplayMetrics().density/image.getImageRatio();var staticWidthSum=this.mNinePatchBorderInfo.getHorizontalStaticLengthSum();var staticHeightSum=this.mNinePatchBorderInfo.getVerticalStaticLengthSum();var extraWidth=bound.width()-Math.floor(staticWidthSum*staticRatioScale);var extraHeight=bound.height()-Math.floor(staticHeightSum*staticRatioScale);var staticWidthPartScale=extraWidth>=0||staticWidthSum==0?1:bound.width()/staticWidthSum;var staticHeightPartScale=extraHeight>=0||staticHeightSum==0?1:bound.height()/staticHeightSum;staticWidthPartScale*=staticRatioScale;staticHeightPartScale*=staticRatioScale;var scaleHorizontalWeightSum=this.mNinePatchBorderInfo.getHorizontalScaleLengthSum();var scaleVerticalWeightSum=this.mNinePatchBorderInfo.getVerticalScaleLengthSum();var drawColumn=function drawColumn(srcFromX,srcToX,dstFromX,dstToX){var heightParts=_this31.mNinePatchBorderInfo.getVerticalTypedValues();var srcFromY=1;var dstFromY=0;for(var i=0,size=heightParts.length;i=3){this.paddingLeft=Math.max(0,this.horizontalTypedValues[0]);this.paddingRight=Math.max(0,this.horizontalTypedValues[this.horizontalTypedValues.length-1]);}if(this.verticalTypedValues.length>=3){this.paddingTop=Math.max(0,this.verticalTypedValues[0]);this.paddingBottom=Math.max(0,this.verticalTypedValues[this.verticalTypedValues.length-1]);}for(var i=0,length=rightBorder.length;i200&&Color.red(color)<50&&Color.green(color)<50&&Color.blue(color)<50;}},{key:'isScaleType',value:function isScaleType(typedValue){return typedValue<0;}},{key:'getValueUnpack',value:function getValueUnpack(typedValue){return Math.abs(typedValue);}}]);return NinePatchBorderInfo;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var androidui;(function(androidui){var image;(function(image){var Drawable=android.graphics.drawable.Drawable;var Rect=android.graphics.Rect;var ChangeImageSizeDrawable=function(_Drawable6){_inherits(ChangeImageSizeDrawable,_Drawable6);function ChangeImageSizeDrawable(drawable,overrideWidth){var overrideHeight=arguments.length>2&&arguments[2]!==undefined?arguments[2]:overrideWidth;_classCallCheck(this,ChangeImageSizeDrawable);var _this32=_possibleConstructorReturn(this,(ChangeImageSizeDrawable.__proto__||Object.getPrototypeOf(ChangeImageSizeDrawable)).call(this));_this32.mTmpRect=new Rect();_this32.mMutated=false;_this32.mState=new State(null,_this32);_this32.mState.mDrawable=drawable;_this32.mState.mOverrideWidth=overrideWidth;_this32.mState.mOverrideHeight=overrideHeight;if(drawable!=null){drawable.setCallback(_this32);}return _this32;}_createClass(ChangeImageSizeDrawable,[{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'draw',value:function draw(canvas){this.mState.mDrawable.draw(canvas);}},{key:'getPadding',value:function getPadding(padding){return this.mState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mState.mDrawable.setVisible(visible,restart);return _get2(ChangeImageSizeDrawable.prototype.__proto__||Object.getPrototypeOf(ChangeImageSizeDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){var changed=this.mState.mDrawable.setState(state);this.onBoundsChange(this.getBounds());return changed;}},{key:'onBoundsChange',value:function onBoundsChange(r){this.mState.mDrawable.setBounds(r.left,r.top,r.right,r.bottom);}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mState.mOverrideWidth;}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mState.mOverrideHeight;}},{key:'getConstantState',value:function getConstantState(){if(this.mState.canConstantState()){return this.mState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(ChangeImageSizeDrawable.prototype.__proto__||Object.getPrototypeOf(ChangeImageSizeDrawable.prototype),'mutate',this).call(this)==this){this.mState.mDrawable.mutate();this.mMutated=true;}return this;}},{key:'getDrawable',value:function getDrawable(){return this.mState.mDrawable;}}]);return ChangeImageSizeDrawable;}(Drawable);image.ChangeImageSizeDrawable=ChangeImageSizeDrawable;var State=function(){function State(orig,owner){_classCallCheck(this,State);this.mOverrideWidth=0;this.mOverrideHeight=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mOverrideWidth=orig.mOverrideWidth;this.mOverrideHeight=orig.mOverrideHeight;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(State,[{key:'newDrawable',value:function newDrawable(){var drawable=new ChangeImageSizeDrawable(null,0);drawable.mState=new State(this,drawable);return drawable;}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return State;}();})(image=androidui.image||(androidui.image={}));})(androidui||(androidui={}));var android;(function(android){var R;(function(R){var NetImage=androidui.image.NetImage;var data={"actionbar_ic_back_white":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAzCAMAAABR9YM8AAAAclBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9eWEHEAAAAJXRSTlMA+wjy9g/JaUDVsqZONr6IFePdmHhbJBzr6c4tVEm9o5OCcF0v6lgICQAAALZJREFUOMu11EcSgzAQRFEZRBbZJjtb97+iS1PFrpuV+Nu3UphRpFq3KSNr7cLJdpCu1pVweiNKhGpOL0S3i6Me0Sb0RGSECkR3oRxRqoUCShWiMqT0E4ojQOtEaRDKGkQtpVGoGxF1lJrMUTtQmhFFi6NpRRQ7ChGpQqhUKHkVo2DZfmh6+0t0gLFvTLVgcICVBwTf9oHRCOa+cdtHhQ9m4Ru/9gATwf4crBVfdlpxnBXpE87mD+wlJVcMMSJcAAAAAElFTkSuQmCC"],"btn_check_off_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAFVBMVEUAAAAAmcwzMzMAmcwAmcwAmcwAmcySYuXAAAAAB3RSTlMAZk1gRhAMJ+/C7AAAAGhJREFUWMPt1rEJgFAMBuE02gedwA0EtRcXEFxAcP8dXCDvb14gzV3/9WdEVNJwebPtDsDnoiMApwJzAFYFpgC4WzP3JLA0SgQWBgAAAAAAANAJ8m+m5Mj0JGZs6KPAHoBRrfRrRFTRD3MwONmn2VynAAAAAElFTkSuQmCC"],"btn_check_off_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMATX7+8BUAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII="],"btn_check_off_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcwAmcwAmcwxNTcAmcwAmcwAmcwAmcwAmcwAmcwvOT0AmcwAmcwAmcwAmczmhCwqAAAAEHRSTlMAmRIfzgUJGg4WJtCScyQtx2HoRgAAAORJREFUWMNjGAWjYEgC1lAcIACr8tDQNJwgNBSL8WEdSjhBR2oApgVN04uNcQDzSo1QDAsi9O8I4gRnP7ViaEj6I4gHnFcLQNfQeRGfBtkZ6BpC2w/i0yBTga6BTV1QcNVj7H62WyUoWJSApiFMWVBwcSX2QJ1uJSholIpFw/PdLljB7jocGiy3YNfgPRmHBiMX7GnMRXlUw6iGUQ2jGkY1jGoY1TCqgRINhBsnlDd/CDewKG3CsRJqJJLeDKW0ocsQpoWvKb0oFbOxnoSvsa4WSn53AKEDX4cjgNQuzSgYBUMRAABvBwmfTLNSCwAAAABJRU5ErkJggg=="],"btn_check_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMAzORBQ6MAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII="],"btn_check_off_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAGFBMVEVPT080NDQ0NDRHR0cAAABPT09PT09PT0+86ZyxAAAACHRSTlMm1MgyABYeBtShLDEAAAB4SURBVFjD7dixDYAwEATBSzAxLdACLbxzAkukLoGE/qEAXmIlZ9ym1uTvU8TV9bFyRCiqQO0BnYASqkI1nQzM2hmY1Bkocs4Nak1KwZKUg+21HCQvBgYGBgYGBv8A+HRI4uePc25M+IuPRwQ8U+AhhE4tfMzBc9ENzCYkZWqWtP8AAAAASUVORK5CYII="],"btn_check_on_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcw9PT09PT09PT09PT09PT0AmcwAmcwAmcw9PT09PT09PT09PT0Amcw9PT1vR1UqAAAAEHRSTlMAZoBNQTg7Xj8IR0pEMVYjBJa89wAAASlJREFUWMPt1rFJBEEYhuENVsE7DSbS+GfPyEC4BhYrGKxA7OBCQxsQM/MrQazgSrAKQ7ECXZnzRdmd7x84OIT50uWZN5mFaerq6vayo4cwuknwFArBfSlYlYLMp1lfCNbdBFiO7PIrYNYXgY1ZNwGasR2bkfCAzQAu/KC17727wZUNO/cVCNwIIAIAFdDgloALHBIQQAQAIqDANQEXOEgBBV5cAcDc+r+BEHLg2brfAQHm6fYTEGCdTiWQB7PtsSc/gWUWfGzPfbVhiyYLuJ4xBWIe8AMsCGQBiRRQgAQBCVpAlIAEAQlIRA1IEFCARHQAEgQEIBE9gEQKSEAiugAJAj7QRidgFfwjML4dgqntCKxCZqe+Zyg78z102Z3rKc3eHpu6urp97BNIunQiihmctwAAAABJRU5ErkJggg=="],"btn_check_on_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAG1BMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT1gyl+KAAAACXRSTlMAgE05QT1HMyNi/YIlAAAA6ElEQVRYw+3TwQ2CQBRFUaOo6x/AtRILGDvADrQESrAD7VwxQ+4G/I/EhSb/bcmZGzKwiMVise9v084EXTXxoBnZ/hUwa2eBzqyaAONvYEZCAV0Pdjoo7L27DM7Wr9YKBC4yuBKQwJqAAghIgECSAIFyoYIVAQ2cCLjADwCOUgCwtFYJAA5WCwHAcrjYbQ54oBtu9pYDDtgM3w6B5iN45HMJOKDIBxNwQP7DSgIeyIkc8AAJAi4oAMkFJAi4gETyAQkCLuAuBECCgANIJAWQyAEXkEgSIEFAA0USAQvwR2Bi80EsFov98J52GzL3vLeyTQAAAABJRU5ErkJggg=="],"btn_check_on_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABfVBMVEUAAAAAmcwfqdodqNotsuIBms0AmcwyteU8Pj8yteUyteUyteU7QUMEm84yteU7QUQzteUyteUFnM8yteUyteUyteUyteUzteUyteUyteUyteUEm84yteUBms0zteUyteUyteUJntEAUWsMn9IFnM8NLjsIndAMLDczteUCms0tseIyteUAV3QwtOQEm848QkUto84yteUsqtgwtOQrcokEm84IHSYcqdoDms0KJjEXo9Qiq9s6Q0cJIiszteUVotI7REgPN0UzteUnqdcdaoYeqNkDm84mi7AIGyIys+Mql74niq8jfZ8wfJYFnM8pkrgpbIMmZnsATmgwqtc7Rkksan8sdo8kXnEAmcwAmcwAmcwAmcwAmcwysuElnstChJodcY48eY4lYXUKIy0vp9QwYHAAPlMAOEoMKjUOMkASQVIUR1oAmcwAl8oAksMCms0Al8k/stkAjbwPn88RoNAAjLsqqtUtq9U+stgoqdRavd5Ftdo3r9cAkcEmqNRtLj6xAAAAbHRSTlMAmQMIBR8SDM4VDhzOFBLPIRAhGRclHik9NCMlMZ04LkMZyBcLeg93LKA7Ns0rHNRLSEdBzaZsJKFzMC7Rb1Ur1IFOQTo1o0NpXEs5MtOqSMrGxUzWyNDCko6HbmdiPdPRzsNhVL+3s2RdRkIKm20RAAAGAUlEQVRo3u2Y+VsSQRjHTS6BOASWBXYTNkxQAxJKFCQ88ii7s/u+T8vSsvtv731nZnc22Jhln/qh5+H7PPqDwucz78zszOwMDTLIIP9Lho38SzbPX6e7TfmbDkbvyt8ycLrLFFuKYTsxgX1GzIoeeLdLlHGSCZIAkgMY3dHTgHj4prdnQph8Pq9pWj4fDo/qoQ5q+KMA8CGtXPb0TAyjYOoxLeFnQVWAGP5cwrB73KvcuXXATg5BJicn68lgPJGIw08CHFCFYbAuYEK52Q9+bq4NBhqQgGGUGFBgXUDotm0+4ufWmvVMlAZKwSJ6CLAA7UY//LW1E82SLEnSqY3HZ1EBhh4lgMBbxu/D6InGt91uNBqrkGapJMunZu8/3DibQQOOg1jg0UKW0xOD07PsidXr7SZEzUJOtc59/Xp8VjdACX8WeIhAW4gctE6EZAGyCNlaVNV0er117v337++JIRiHEoQCTygy0ivoqNCk09PrrWufv+ztfSIGLIH0UW+B9+CI/rfuFcjnGw3748GoJBfV9PTY+jzwd9+92yUGUgIdBLGgc3mjeM7Pqumx1AXKf/Pm3e6X/Qcb0SQR+ASC0MERjuVxIT/A+dNTqQuF44SP2d7eef4aBaN2BZzM4kO+PxFPIh+aXzsD/E+Uv73z9sPRDRwEmwKO5mt+AJufCJr57038w7PtTJKOgVjA+0SHAx3x0D0ZqaRa8VsNmQiEsygG05TjkYwJh/2IT0YzchH5uS7+ZlGKMoHbhoDhgYxoP9IJng1v7ljh4m/8+XtqSYric+CzIwA+wyM6EQd4MIl4bD7hH+nkp7NyBgRhG4J8ZAT5OKZAZ+wo0AGfJd3fxS+sjKlFWe8hGwLgUzzSgY1wuVRUAQ/Nn7ly5GoHf2pa0EMdAugfwkc8g2eBPg34GvIv/cY/cqxGBKQAmwJ8pPxkVGE32czq9FQuN0P4+3tmfq6WmkqXcJKy7UAsMJ4p3E1am9OEXgP6zPKTLv5MrrqystqUggmjALHA4ONuMr+eqtWw8cvLyyc7+IVjuVz1/PnzJ5r1II4AK0AgYGtaBvhkNymcmaH0kyeXuvi1WhX4JxogYB0kEGgowAKQD6sl7iaFY0CHnF561Nn/qdRKFfhrjXqcTiEsQCggBSCf7SYXjzwB+mkr/tTU1MoJIkgEKN+mIBndeLD/E2cjMSwB/u7SdRP/I+GPbW2hYG2uEfNzvkgwGoYeevVsZ3sbWNRwdemuJT9d2Vq9B/zJtsfLZ5AtQWbj6Ie3oDAMnfwq8rOVxcYq8CfbZe8454u7CARnZ7lhb//b1affLPhyZbG5CvxDijbh4nw7Y5CRN1smw6dvlnypsthuAJ8IkC8W5PVBlopmw+7e3q4FP1pZrDeAf0jJj/MJKhTgcwACdX2eGVi6+cHKQr19CBJDwZBNAaylIMjA5s4MnfwrBj8eWYihADaqcfeQbQEbhGJ67EKBG6z4/siCRwE+CobtC1gflWD/5QbePyZ+OBIpK8DvU2CUoI6lzjCDNT8wEtGUA/0KXHoJMArcQPmFas3M94EgRs9TLpuCEAhYCVF6yGK9hPzLhWoK9kfOB0GeCrz9CMBAlwupaBh2CH8Fmq8WOd/lSOB20U5CQymr4nvA0Y8/fny8PA/nB+RnDD4IQv0JPPRk52PbJnvVQAPwKV7CYzTju/sT8MMvN2RkPHDBqnG5tapmizI038R3jxwMefoWDIOAGWBni0oSHIw2X7xsFkvQevLSzd+InQl0w2hYP32BRIZfDB82+A4EXhBwAzu2J9mNAcEjn+3vKPD2LxhCA46DoYjzOw+KN/ZfZwJm0E/Z5BQP8QOd4XW+Q4HZQBwgwbCbLRfnOxUwA3+VYum4mnMuYAaM4HLRkUBwO4p45DsT4FLRVyKC50B8nRPpSMd/FzTFWiC+kAr1ivEhzUME5R4C8ZVazIinK4oiFvBLQce5oU0IBPRa03FuhwTnLn4x6yg3FVEB/GrZQW7dUbyiAsyX432mXNZCE+PCAvj1ft+ZADw/WYsUTsLxYoXDDA0yyCCDDPKP8guHrOe8HDBTsAAAAABJRU5ErkJggg=="],"btn_check_on_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_check_on_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAANlBMVEVPT08+Pj4+Pj5KSkpAQEAAAAA/Pz9PT08/Pz9PT09PT08/Pz9AQEBAQEBPT09PT09CQkI9PT36oQq5AAAAEXRSTlMm1MgyiACTFp4eAZeNggYHXQY8LIYAAAExSURBVGje7drBbsJAFENRtx0YJlAg//+zTaRWruQNU+NFxfMa3SOxSBZ5OGy79oGnb/Tb3t6ApSO0vuzAMhDbWDagI7h+wBXR3dARXcdAdAO1Wq1We6mdjojutK6Twtuj++lTCABbn8LDwNT/I4IPaH/bOQGc11+7PxXQfoMBGH0DOErfBPw+gVCfgNv3gYv2fcDvE7D6PtCk7wCns99XQN8mfl8Bvk3svgLsU3D7CvBpf8H3Pu0+AfYpaJ+/ngfuUpO+AejzRvomoIL0PUAF6dsABe3bgAra9wEK2vcBCtr3ARG07wMUpO8DIrCfACg0JAAKDQmAQkMCoNCQACg0ZACugAJeC/iY2F+Auc0D75NDrVar1Wqz+0/fxEf8aCB+9pA+3IifnuSPZ5LnP9e9/QXc5ydUPu9cjgAAAABJRU5ErkJggg=="],"btn_default_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAM1BMVEUAAAAzteUAmcwAAAAAAAAAkMAAmcwAjbwAmMsAM0UAAAAAgq4AfqgAbpMAgawAAAD/AAA0FdE+AAAAD3RSTlMAHz4TD0I5PSkZCjIyDQj2gUbVAAAAn0lEQVRYw+3ZSw6DMAxFUZq2zodP2P9qKzGqGFjYqkoC9y7gjDLJ83CoujWc0QoICHgJcN+SJJiStGjeLMGczAqYgqOkgOIBRQGDq/+Dj8MBdgFWQEBAQEBAQD9YAW8Atv8OAQEBAQE3sPkPOGAvYMvrnPwaHD3eqIA52r2YFbDkKb5NxSkXbRh/OtKX9vIyVnq7BQAC+sD1K8/Beid8AI8uHiWs1BycAAAAAElFTkSuQmCC"],"btn_default_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAbFBMVEUAAACZmZl5eXl0dHQAAAAAAACHh4dsbGyWlpZbW1uNjY1kZGQjIyOWlpZwcHAAAAAAAAB4eHhubm6Li4teXl5aWlqUlJSIiIhzc3NgYGBTU1N6enqMjIyXl5eIiIiXl5eMjIwAAAAAAAD/AADhocx4AAAAInRSTlMAJ4CAJh6AgICAgIAwJxUUAnp6eHh2dGNjX15cWjIxMDADER06CAAAAMlJREFUWMPt2TkOgzAQhWHALIltMPu+Be5/x0hUUYoRQxOjvP8An1y4mRnnVNuR84t2gAAB2gAmY/1gVY8J5SeFlCErKQtKHMJmcllNTTgQYOYtLrPFywhQeC47TwAEaBu4AQQIECBAgACvgxvAPwDt/4cAAQIECPAArR/AAd4BjLleTIK5WLngKnIC7KJ2jlnvm9uoI0BdKhWxUqrUBOjrvnqyqnrtE6DxL2SIxfgr4HtBSoBOagJmJr35cQEgwHPg/tGVg/WX8AZv3Su8QPHBAAAAAABJRU5ErkJggg=="],"btn_default_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAS1BMVEUAAAAzteUAmcwAAAAAiLUAAAAAmcwAHigAmcwAAAAAgasAhLEAk8QAksIAa44AcpgAmcwAAAAAAAAAAAAAAAAAmcwAmcwAAAD/AAAMZPkMAAAAF3RSTlMAZsyA5mbAiYgH3NvUy8S8tm5fSz8gFpzXpUMAAACoSURBVFjD7dk5DsMwDABBR0l0+L7l/780gKsgBWGxiGV49wFTsSFZHCruFWe0AQIC5gCuvjdJ9X6V/MWa5OwigN4o8gJoNaAVQKPq/+DjcID3BCMgICAgICCgHoyANwDzn0NAQEBAwB3MfgEH1IGXvs41Gq8RwE4DdgLoqjqVqysngJNry1dSZesmAQzDM7khSIfxMI/vpMY5XPwXAAh4Erh9pXlY/wgfdZAio63fx68AAAAASUVORK5CYII="],"btn_default_normal_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAflBMVEUAAACZmZkAAAB3d3eTk5MsLCzb29sAAABZWVnAwMAAAAAAAACYmJijo6OLi4sAAAAAAAA0NDRSUlLIyMhvb28WFhagoKAAAAAqKirY2NhISEjNzc0mJibDw8NfX1+5ubmzs7NBQUF+fn7R0dGRkZGioqIAAAAAAAAAAAD/AAAgdn43AAAAKHRSTlMAZhB2aLOnMIiEBAFnbWwOCqONino4FxOolZWTi4d+fXlzcW1kVSwjhumNDwAAAOlJREFUWMPt2ckOgjAUhWEFnFpoC4I4Mo/v/4ISVsakxIsaMJ5/3y9p0k3vXbxU07eYohYgQIAzAPkhP61JnfID19i9t7/sbztCt+7AgMjKOHGWpJwkLpkWVIXTeUTRKZQWlNlyRJnUgoZp0T3LNAACfA9sAAIECBAgQIDjwQbgH4Dzf4cAAQIECLAHZ/8BB/gF0P4s6AsyaAt/AIxMYVM9M9KDMvV8Qbm1bQnfS6UWVIHrnr0tIe/suoHSgiwMrscVqeM1CJkW5Cysqw2pqg4ZHxiMMyUNUlIx/tO7AIAApwLbh8YsrJ+EOyFWMqRTaWfwAAAAAElFTkSuQmCC"],"btn_default_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAclBMVEUAAABmZmYAAABkZGRaWlo3NzcAAAC7u7tNTU2Xl5cAAAAAAABycnIAAAA8PDyioqJISEiJiYlXV1eGhoYAAABcXFy6urqnp6eamppPT08uLi6xsbE9PT0VFRUaGhoAAABiYmJiYmJ4eHh3d3cAAAD/AAABlB2hAAAAJHRSTlMAZg9nbowwmnd+BAFrCoSCe3ZwFxRskomAcXFoYzkyI2RjU1NCIACPAAAA10lEQVRYw+3ZyQ6DIBSF4Sp2AlFRtM520Pd/xRpXTROI1400Pf+eLyzYcO9hVePSYY8mgAABOgCKrCnOpIomE2ZeZPEtLq+EyvmAReQvpUKPVKjUkxtB+QhnjyiGd2kE/dzbUO5bQEb3WGABA4AAV4AjQIAAAQIECHA7OAL8A9D9dwgQIECAABfQ+Q84QPfBlDGyx1ILWAV0MKgsYJukjBHvl7RmUPZRlFxIJVHUSyPIdVcfidWd5kZQcD2ciA2aC8tgnEufmOTip3cBAAHuBU4fbVlYfwlvr34uoI6kYcYAAAAASUVORK5CYII="],"btn_radio_off_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAAzteU9PT0zteU9PT09PT0zteUzteUzteU9PT0zteUzteU9PT09PT0zteU9PT0zteUzteU9PT0zteU9PT0zteUzteU9PT09PT09PT09PT0zteUzteUzteU9PT0zteUzteUzteU9PT3dmb2uAAAAI3RSTlMAZkxgRwQ4EkgOBiARPFMuWyYXTTYyLEAgCioMFkMyGxg/J0SE03YAAAMlSURBVGje7VnXltsgEEUDqlbv1Wv7/z8yoS2J4zVgmc0+6D75mIEpd4YyQgcOHDhw4DuxVMGW557n4TzfumpBb8VpK707lNcTehPCK/YeAgch2o9L5D1BtO61Xi3fBH0Ysv/WPmiUij1sJIEMRlQld0NVJMe6183P+RL5KXmo/iTGmxedqDi3ZfVEpOROvJRQHZ/bI4FpLNoMAEjWFuMkvei4FT2yRsApFMGJZwJ/gcyxUMG56F5YXxlWU8uhHevYR8iP67GF38hqPtoLDfbxwR/c+gyAnGv/z3G/PhOAjHvxga2jdGLrh2ypAgBuanWlYwaAmQ2sTIMF0yH+XD8eAAr/sdhUAGTTpwa8GNcXy28Wn5TAEH8tmQ5A0k+XGyuCe8YuQOs/E/VboaG3IHqhshszEKDQCPtnAKYhMg9SQ8s3ofEndH0dzkAmGldKQ4QM8EEdqKhxA7SIQxOljIaxovNCEwckXQUMPjLRQODGJpq5cKGGrJyAFOnBJWPput6Fq3RggBkZooBMuhBoawCLEqiBqADpg5SKYsAaUUZVSX9kMCJj3Hg6YIMNYxNupswBCxdiUaFXjSgWFM+cAXMWbiJBSs02J8NIo2qBFAZJ4PNq7kUux0CQFQjQco60JARiyxrhjKzQwqimP4E0oaDyNrjBLBJ1eyqXi2LMoEZWqFmirtpTgd5zEhFSK8QwiJ0+12Yp58xHVphYViTaPPWEAgBkBx+ImI//rwJMOXATIkXyspNk52nqptBGVWgut4qOTne+2Zlu17GL7VodOIWjAwdFzo5M94e++2uLunhFOy5eDq+OF7Oro7rDFkAmwwDNaqLd9T3zLa/vq+0D5Gz+ACmFA3qETp9Q9o9A0D0C9z9jJXH5j3mIi3d1ucpWAtG0Ei68lWDfLKoQd0LTDKlkZ8a+nRPctXPYgnftHCnqrCHVqHbR7pZaNjDLM9VSQ71oqf3EpuCfbc0vck2OL7sbs2Vw+WdPDLAY7NAOhI0ngKOgEq3lsA8iLP+Pwr3N8cZRc1xh/bK9fw3Re5A8+kCxndBbEcpPLF6eb0G1oAMHDhw48I34BUmSKxG/3YRpAAAAAElFTkSuQmCC"],"btn_radio_off_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1STLyxAAAAEHRSTlMATAUMRyoWMBA7P0MhNh49I5b3UAAAAXZJREFUWMNjGAWjYBSMAsoB8/NZgiJr6wyIVW/qKAgGIsHEqc8UFLyTwcDUdlZQcBox6u0F3ZMgLLUSwcmE1asKiirA2EyBggEE/btQXAHBYyqUIuTzFmkUFRwbPfCrZxO8hCqgK5iAV0OjOLpIoQReHzgWoAuxi+DzBZcsptjFBXg0BG7CFNMWxeMiwQZMQQ5B3G7iFMVq7QScGhKdsImqiOHUMPEANlEeSZxeEFHAJszkiMsTrKI4wg5XCuSWwBH9G3BoMHTALs4ijEPDwwLs4uxyuOL5AHZxHlFcoZqAI83L4tCw0QBHcEvj0OCogF2cSQSHBkEGXBKUaiDsJAo9TThYJSmNOMJJg9LERzh5U5qBCGdRcgsByosZfuwF2QfKi0qEYU5YXCSKr7iXUsAIo4ULSKtQeEUMyKqyKK8UEdVuA1q1S1nFTrjpEMRAEHQhN05WENv8SWZgMIM3fyhvYGH6/PgsQcGVNQYMo2AUjIJRQDEAAKdsRGG19ZMWAAAAAElFTkSuQmCC"],"btn_radio_off_focused_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAwFBMVEUAAAAzteU9PT0zteUzteUzteU9PT0zteUzteUzteUzteUzteUzteU9PT0zteUzteUzteUzteU9PT09PT09PT0zteUzteU9PT09PT09PT0zteU9PT0zteU9PT09PT0zteU9PT09PT0zteUzteU9PT09PT09PT09PT09PT09PT0zteUzteU9PT09PT09PT09PT09PT0zteU9PT09PT09PT0zteUzteU9PT0zteUzteU9PT09PT0zteU9PT09PT09PT2npJ6rAAAAQHRSTlMAmcwElCDAN48ValInxnBLPVclpJCHMQy1nnorizK6dGo6CYB9VhkKhHBkQz8eBwV5X6yYdR0PXSwaKRR3TCKGCl/ORQAAA8lJREFUaN7tWNl6qjAQxmErIIq74r4r7kvtqT3tef+3OkwCtLYWEii94r9Rv0xmnCWTyS9kyJAhQ4bfhKYajm1LuZxk205R1X5UuVh3arlPqB3q4g+plw8Pubt4KD0LyZEv5EKgy0kj/66+YFiyLLrxkmWr1H83oSWJvSFRLZKuXm6XLpburxVj50KzqQr7fjpH6piu/43phCrRclG/F7FqNNv1OPpXdO/K//eb6f5UMQGUymn/OvODuKIVZvHrL9EUjuiv8rIJN2gOyl4ydCJYjKVfWtEfwxYAmNXp8LoThO11OK2aANAaeq5KMSwUif48+X6tACiL9fbj+ny9UFwT1Is/EneUVNzRIYdoewYwB42vMo2lCbDckbNOEvGHoz4lTO8jSW0FYPJyX2w2AajMiAWygblaxXEQn64Cx/L3ku0m9NpBlPqsJ84IQjo0oToPE21UQekGRV3kCJBD/r8Jkwjh3QJM4oOOXl+YDGAjq40w/grqj8ICepiHESZaZ+rP6KyK9VOBKoP87gStnV95LN27gK0Zv5yh2RAY0GjCwPdcZ3RAxgoBaAtM6IJZ9ndG33EH34EKLAVG7OHku1CKPAOSdybX0JuzGmgogLVax+MvMjSJmkgceBKYMSAuiB13c9TV4LgyBsmAgg6wu7DBFhwdI/HBS/EZzgIHJjDw0lwLF3zEpoUR6vklxFpIRz+B4S3P8mq5DIrABQVm3hlSI/ocbVlT+MdnoAqvwfYw6F4d7LGGePAES68GD6FyeBPgRdOCIZ+BNelbMk5JoXJYyReS4w2fgTLJ8sXdPg6VwzIQSc7mfAZeoIk9O7JOcy7wE0DgQwMUb/9DmgZENBAZolHCEKWT5DeSZA2TnHqZMh20CUxjHzTGVrGI0yqKuD31Zsfarq987boZtGvWC2eZyoUj6EmvzEMql/5T+KWffGzp3YwtzIPXgH3wagWDF/vo2GUeHdsAHKOj0P8w/L5wD79c4/sRWluG8b3KOb6/P0DeFFiwP0A6xAEWPMd/QmlpPAJNrkcg/zNWaZPEode2yPcQJxW3OQLsOR/i/FSCMpjfic4goBLylErgJ0PUgAzpTW7JkO1HMsSiZEgcusigUV37dA5RWL6lc0RPNB4hVYgkpEYFfkKKoviVUmtVwIVLqU1DKDVuUnCshojEJQUptLFPa37DaPu0pxafmM1RdEr5z0v5UicZMUvxGHDIElLLhASTZcsoSAHjnJQgz/dzISjI6dL7VH1yiKrT+ay95tRF4SehWYZuk7KybcdQNSFDhgwZMvwi/gPvHkn+qOIQ7AAAAABJRU5ErkJggg=="],"btn_radio_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1Pag0XAAAAI3RSTlMAzL8LJcV8OyqQpLpwhGsbtp0zFwcFsZd3VFovqkEfoWEPTH3CfAwAAAGvSURBVGje7ZjpboMwEIR3bHxwhisQyJ33f8hKVSo1akS8hkRU8veXEWgZH7tDgUAgEAgEAh9mM+g+UYBIen3b0MJEWYkHyiKi5TAVABUPxm6JWmvGWAGoDC2DTQCRm5Z+IY+5AKolqmh3gCok/UFmCsi2NJNTAuiGntJoIJlp916giyYed0jtLHcVYjklkDFETd7UCvqFZJtDeddwEtCvVTlSTx/aA2IH2bbH2W8t7dBJF921ROG1gADrqlQR8UmQudfaE5sjUumqvQrUHgWM7uILvwQLId3VUuBEPDJkHLlmL6QUlrXn0RGLCIJYCDQs/YCcWMS4sfQaI7G4IGPpKxhiYRAzPd5wTTswPZPEokHJ0gPEQ0Ks6wM+v2hdJvss03VttNHjqFjXYff245p27AtnbVcm+9J/b9uSovZpvAp3wyq/1nHv6hciv+a3bHjNL799P7cO7Xvs275TJJC7DSBrHaHchkBV0wzq6THWdhB25iB+4A/i/ChBPI0SiokogR2GpNq0D591CEMYHM/3OOf7hZEZ7nHO/wmkfiK1KgGApNfDhgKBQCAQCAQ+yxdkJhHOkHWlWgAAAABJRU5ErkJggg=="],"btn_radio_off_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAb1BMVEVPT08AAAA+Pj5PT09PT09PT09PT09PT09PT09KSkpPT09PT08+Pj5EREQ+Pj5GRkY+Pj5PT08+Pj5AQEBAQEBBQUE+Pj4+Pj4/Pz9FRUVMTExAQEBAQEA/Pz9DQ0M/Pz9HR0dDQ0NEREQ+Pj5DQ0Mt5iyXAAAAJXRSTlMmANQNAyQiHxswCRfIS8NBvhHMhYxtsayTRiuJdp9XpDxaULhc1kjPGwAAAu5JREFUaN7M1cmS4jAQRdFHavY8gDHGjF3//41NrWiilLJU9qLPmuDaSmUYuygya3NrtFaA0trYvM3kLkpEQIrcwMPkQq4PyNYiwAq5KiCswgJlxa8DrUYUE0og4e95WiQHhEYSkyUFpEUyK+MDQoGRfk7gHz9dHhWQBr9m5HIg01hBZ0sBobCKEuGAwFpKhAICGxB8QGALKuMCmcJGBX9AKmxES2/AYDPWF8ixofZnQGBT4h1gBrDNGN4BiyX1YX9rOqKuue0PNZbkn4EMYae+og9Nf0JY9hEwCHkciai4zNfaAa5+zON37nhFiPk30CKgHIiKvsSH8ly8EqfwnN8BDdZ0Jqpmhx/cXBH1E1j6HWjBqgei3sHLvdrDfeEVEH6BZ0FNCVbZUFGGp4Dgjl07ujgEuBt11+BFQmgHnh2NCJtG6srQLiCwxHVBeywaqeLmoOQrwI94GuiCCBcaJn7M4JdsT41DBNdQDz/7HZDwKz2Hy/2STuwZgb1DA/WItKcje0bgPjRfVDlEcgU9uHsEbssGOiDaTEdu1yC5cy0mRHMFN4UdMu5Yz0gwcgPL0MKrohIJntTASyCHT00VkhRUw6eFhc+BRiS5MHfCwjAjOCDJTGcmoOFzpCuSfNENPgYKPg3dkaSmP/DR7MwcktyZW6HgR4Q0jrr/K/C3WTNKQRgGgmg1oQlN8KPgRxUEzf3vqCD+yXR182gv0EDa7s7Mm35XhL9k/DPFfzR8VODDDh/X+MKhVya+9HHZ0kd4XYXwktJx8UtHWvxq+d46yfc4cAbEb6EGZaHyqgm8O03guo291WNbtI19CBtrMeLNYcTtUcL54ogS4DDEHuecPHEOH0gdii1Sq/Nc/4jU+FCQjzXFwHDClkGgFQdq+R6Oj0Q4zsf7AuA4ns8iFhoS0ZiLBnXbo8bXCQWFpZpWa9zLAusSf0PuqSty997TGPZYe7AWN8rkq56ErGshce/lmc8hUyg5pXf9J+VcgrX+8wRytCpX/RrehwAAAABJRU5ErkJggg=="],"btn_radio_on_disabled_focused_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_disabled_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAAzMzP///////89PT3///////89PT09PT09PT0+Pj49PT09PT1aWlo6OjoaGhogICA9PT09PT09PT04ODhFRUU9PT09PT1NTU09PT0uLi4dHR09PT1jY2NYWFg9PT08PDy6urpDQ0MxMTEmJiZoaGgUFBQYGBgjIyMlJSV3d3eYmJjr6+tfX19CQkJpaWlhYWEoKCgvLy8hISEWFhYrKysuLi5WVlZBQUEnJydHR0eJLZnuAAAAO3RSTlMAgAIFTQkMSSoDLw4WJDVSSCALPoAsOxGAf3hiQwV/RjIRgH1iH1lURUIcFQ54CICAbWdnVz48eHdubc5A5usAAAMCSURBVGje7VjZcuIwEIRkEskHMsY2+MQO933m/v8PWxGfIng3ltlUUqV+g3J1qzUjaWYaAgICAgICAgLfjI4udw0EgAwi651rsys4BAYhVq5Ir3YBABFdVaRGQ1JUnQBFV73W6g3KHqmU+yYBVVEjRCWu4ULClB4HN58QYCqBpdqhNQDkzc1FbGQAo2a4ewh8JWO8TZD9ofiAerWii4AELDurERBAaq31ywX2uwwFDbmGh07GH7PfZ6A/MoUIQs44SAaQnJ/SL8eWRYhljZcnicwEAYMvlzD4QU6/GsvPbU2bTDSt/SyPV/eZicAHzHW+AHoJP139wppNR+/r9Xa7Xr+PpjNrQV0kCj0AnhPXBRzvD+V/aM21w3q76/dtu9/fbdcHbd56yBQwdDkyFEIp52+PXnZ9e+CYzabpDOz+7mXUPinEAlIIKocBvchP1+40MzjUR1FBr25BASSlATjx2wOzWYA5sE8K6SZJqHIUMODUwGI+svPl5ybs0XyRWsCVE8mHXsx/t7K015SfVXjVrNVdrNADv+IhBtRIDIxnh0G6P+wuDQ6zcWKhgaDacdYhSgXkqZPzswrOVE4FItCrhSDOIcq/fPIcp3kRjuM9LalCnEe4YpKqiYFWe2+alwVMc99uJRZUIBVj3EkELM0tF3A1KxHoVIwyAikRiB6HDD+jMHyMEgEJUCUBgDTGZNL8CyYkjTLA/xWQAPi3qJw/36IAEH+QywWYIHOn6Vu5wFshTbv8B61cID5ot/FB478q3NIdYq4K/svuWCZwzC+7EDo1rmu3xEB+XSvg13lwvOHFHPWYB6fWk+ldjDD7ZNZ79D97GHrso1+3bPHO4uB6dcuWhnFWeB0LJobHs8LLuErp6O1d6sN19x5/6cgmUrj5SvG7CQHzlu9GwJTvLUsmRLZaTPke0M8k7gYk+ncDQgB1fmoLxTSBt2coNIE/uY39SiP+00cJ6TBEPh+GyJTeUK4+zvkQVHWCPsY5v2cglY/UgMLonkZqAgICAgICAgLfiz+OHkqDTzvSAwAAAABJRU5ErkJggg=="],"btn_radio_on_focused_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_radio_on_pressed_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAkFBMVEVPT08AAAA+Pj5OTk5PT09PT09PT09PT09PT09PT09PT09GRkY+Pj5PT09KSkpPT08+Pj5FRUVAQEBAQEBDQ0M+Pj4+Pj5EREREREQ9PT0+Pj5PT08+Pj4+Pj4/Pz8+Pj4/Pz8/Pz9AQEBBQUFMTEw9PT1DQ0NBQUE9PT0/Pz9KSko+Pj5AQEBCQkJCQkI9PT27eu1wAAAAL3RSTlMmANQnDQMiHwkPGT/RATAVykWLhlrHvkpO9sMcsayQzp+ZeGor7Fdx4aQyuHxeYgwIBCAAAANrSURBVGjezJTJkuIwEESTkiUveGOxjcHsO9M9/v+/G0dMRMt0q4QBH/rdOKCnUmYZg05Iz08CVyk0KOUGie/JQSc6CKSTuDDgJo58XyD9BSwsfPmWwAnwkMB5VRD5Cp1w/cgq4I/vjOIUvMBReArXe0ogAzxNILsLHLyCchjBu9fXJFEXgXTxMq58LPAU3kB5jwQO3sSxC3ygZwOY+/dmQO/nAx4n8NATnlkg0RdKmgSRi95YRAZBgh5JtIAJuLcqgQmgpxi0IMAjhvvxNU+J0vw63g87PxK6NXQ0mdMd+WTUravo0CAxXRJRtj2fhjchbsPpeZsR0fIEG25b4MNCURFlk0LcOWfjtFFYp3C0IFJgOYxDmu9i/CDeZRRODmBR0ZfAt0RbNafEMBI37mr4YATYB5hllBdgmeWUFfYUYN2x05o2MSzcrrQ+WYsE2w7M1rQSsCJWtGZnCP4LJPv+qT7fZsjYHGQj4CM+VLQReIjYUHXgY24E3JKNKY/RgVtOE5hZNAL2hYowLL4t9DY9luUx3U7FfVRhOGLfCFyHRHV/L7G71F9cPsT9rEv2jcB1aErzGJpRWN9BI2jijKbcNxUDBSMV7aH5W9bfOH5Cs6Mlt2uQzApQdmiNU9Y/KPetEVJiUojgcRUatxbiWBsoWx1YcUXy4JsjnlOhf4S1ERKtgXMY8ZHAxIjmrReuGT70HVIamlPGAibOtNV/vnCCix5hQ3uYCODCxIrOOuGa5VNPyYSwgIKJJemP8JYXbFprc4UJF2by1pOmvGDdCu0PTCiYSUmv8ZEXHHWTaY5noFYFy5pHrxqlv0vwr1lzWUEYhoKoSmoUKihYtO1CwdciiP//dwpdBCEhtzecNtl1VUib3JkzA2wR9ZHx3xQ/aPhVgV929HVtRAPn0OoHjmxkvkNvkI1M9dBvb6Khr5ctJ6ls4YVX5R/jgtBLx8/jch0lHXnxG5fvLlu+b6cxIMses1BJE3jMNIFpG/vcr1zCxp7jNlZkxF2GEZejhNc9hBK6FEqgYYgK5ywGnNMJcA4OpFRIranrRoHUWCjIY02/SQyYjUcr+mV3QTi+BuA4hPfpgIKOWOiQiI656KBu/qgRDUt9Wq2Le8sJrH/LWEXkDpYGTIG1B3lxY4NWT0xVennmr/5jh/qP7UfUf77mb6LnjEYeBwAAAABJRU5ErkJggg=="],"btn_rating_star_off_normal_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_off_pressed_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_on_normal_holo_light":[null,null,null,"data:image/png;base64,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"],"btn_rating_star_on_pressed_holo_light":[null,null,null,"data:image/png;base64,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"],"dropdown_background_dark":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAA2CAMAAACiEHRJAAAAflBMVEVAQEAAAABBQUEAAAAAAAATExMlJSU+Pj5BQUEAAAAAAAA4ODggICAvLy8WFhYAAAAAAAAAAAAAAAAfHx8NDQ0AAAAvLy8kJCQgICAQEBAAAAA3NzcWFhYkJCQXFxcAAAASEhIAAAAjIyMAAAAwMDAjIyMAAAAAAAAAAAAAAACu+DqjAAAAKXRSTlPmCekADkqr4e4qFcCA2KhEYwUShjwb1K5/Nge9pZ2YXUxALSTIrGZVSewvjJ0AAAC8SURBVEjH7da3EsIwEEVRr5AjJig4Z5uk//9BJNFBw+zQMLO339Ns84Lde+abPq6cs6q6rnN0avWOAD10e3zdoEFYB/hcsQQfq2YO3gmjmAXYWByFHAw55JBDDjk/dgw5f/UvcsghhxyUEyQMm3f8nofweinL8oCtCsE5LTS5Gsf+iKxXDbTWETzb9OM+nXHdpjTjwjkgi7TRywnZUkhwjoeKLUXnGOs4iEuZoQPhHQeJFvBZxTk+g+8FPAE5Rz/0d6kkJAAAAABJRU5ErkJggg=="],"editbox_background_focus_yellow":[null,null,"data:image/png;base64,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"],"editbox_background_normal":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAA3CAMAAADT7y+MAAAA0lBMVEUAAAAAAACzs7Oenp7+/v6xsbGmpqYAAAAAAAAAAAAAAAAAAAD9/f36+vqvr6/+/v6Xl5fw8PBUVFTs7OypqampqamEhIQdHR3c3Nzz8/Pd3d3x8fHu7u7S0tLHx8fa2tqenp6+vr6ampqioqKgoKCBgYGSkpIAAAA3NzdSUlIAAAD39/fr6+v39/f09PTo6Ojb29vX19fk5OTf39+srKycnJympqaSkpKMjIyUlJSPj48sLCxoaGhqamoAAAD///8AAAD8/Pzz8/Pm5ub39/fl5eUurhQ7AAAAP3RSTlMAEX19/nZzGAIGCQ34/nT7avwk+GpiTCvn2tfTy7i1qX53cXBjRkMlJB8V+Ozi39/MzLezgXl4aV5ZSSgjIhntDpQOAAABGklEQVRYw+3Yx27CQBCAYTtskm3ujd5DgPTeszGB93+lHIwi2cvFYofT/C/waS4jzVi7+tk3C8PqR7mwDSc43QWxMPWfhg2DDRt+GjKqj/Tx0m9ufo22afbHmTYYO3++i4KV4YKo/ZixihT6t9HayQ3nrIP2OCyPxc96QU6U8Ui+6qW8RInXS0eB5NxMxRYpVqPtA0mKXLh2AW2p5SRXQDkV6vSEKKDy4yqloCJIIYUUUkghhRRSSNWkvg9HLScKKs8tU8JXUMl/qki8XREFknediMp9dS8VTA/vvETRr7gLYslO/Emrt/CoKz3TkCc7o4xpF/58OmhJw1JrEM851f8Wi1niHhnNTWaLYiYNM/+NYdTCsBpBfqT/AK7giup/9WGpAAAAAElFTkSuQmCC"],"ic_menu_moreoverflow_normal_holo_dark":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlMAgJsrThgAAAAdSURBVDjLYxhhoP7/kOcgwGjoEB06o0EF44wsAABBWUMn9krmtgAAAABJRU5ErkJggg=="],"menu_panel_holo_dark":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAAw1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwVFRU0NDQgICA1NTUfHx9OTk5DQ0NEREQ8PDwwMDAAAAAsLCw4ODj/AAAqKiogICAiIiIkJCRKSkpMTExHR0dFRUVOTk46OjoxMTEiZHnYAAAAMXRSTlMABA0CJBAIChgTGyAqNlAWSWc8X3aJfI8eLidAMkU5TFtWPW9Ug3nti2Dt29rj4srKKLM+WwAAA8dJREFUaN7t2dlW2zAQBuAsTqLIK06gtmRbjhPC2oUlFFoovP9TdUZGh0SmoaeVwBf5H0D6jmacyOPOq7m0lE47s+p8eHaEHWFHeJPQX0vXQNbX+xvClp0NWbYT1ObDOiNjGdZREI3QBKjdewajHE3ESgfg7rj3ADI2GFwPJehQiCZBCRCA24fPIf8VtQoyEKEMDYICjOrtQ0IpTTCugSQYWJCENWOkEE2CrMEzQG7uGIuEPCNkNV4joEACnJMv9w9a7vX8eC0/G/ml5/OJgwhpeCZcvgi6KBiE4cm3x8drY3ncyMPD15MwHKABS6EIqgzyDEJKz66fni5s5enxjNIQz0GWokGAMyA0ObImQML1UUIJnMM6QSL60Ai9HpxB4rCrC6u5Yk4C59DrQTs0CNAHics82wSPuQn0g0aoyzAm1GVpZpuQpcylZFyXYp2AvUigDJlvm+BnUAqCHblJGI6wE1wv9WPbhNhPPRe7YTRsEhIgFJVtQlUAIWkSsBmJ66RZldsm5FWWOi7Bhnwh9GsCNqPP7RO4jw1ZE/oaAZqxyCPbhCgvoCEbhCEQCHU8IAjbBAEEz6EECEOdkDDPj6PANiGIYt9jySuEMUVC9R6ECgl0rBFGAySkBRcL24SF4EWKhMGoXYSuJLgeEma2CTMkeK4kdJuEmAf2CQGPd4TWEvqKULwPAduxfQ9lKwgt+IH+0L8piPZnbdnQ/LPuaFcWcXRzYTFXR6JxZcFsXNyOz+9utufqn3Nzc368cXHrrBN69fWV5+Xx6e33t3K7NXd/zOlxmfP6+tp7IWiXeC6CcrI3ny4PDvf39z8ZCSx0eLCczvcmZSC4dolfqemCIsBjKWblXm04BIWJwEJSsFfOBDySitDdJNQ/TvBMQDcEi3ICiPl0ulweGMhyOZ3OATApFwF0AjwP9Q+TIsio11qHpVnFo2BWThABCiOZS8CknAURr7KUOeq1Vs2aXl7uiSxFwXMhFrMSGWaC25ezhRA5L2QZiHq51whyxMGgFDHPIxEgAhgGUpYICESU8xjKwOSIo0Hoq1ETnAMgiorneRQJIQIDgWWiKM95VQAAzkANm/qKoM+aoB9S348rDgpwGEgO4byKfT+FPtBnTSt97Ij94DAvTbPM94uiiA0ElvH9LEtTjznYB5uDx1Vz7kjRwDypAIeBZJnc32MooNrcUR8A4zkAAhQ4/GUgMRJYSA6BEwqA+gzaOYNGg0SoWXxICDUYQkI1h1eD+BZ+j1CfZWoFngVKjEV9HML9JaDfsm9TKy2XlqPv1/kNylczeSvTmjMAAAAASUVORK5CYII="],"menu_panel_holo_light":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAA5FBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd3d0AAADJycnMzMy6urrs7Ozu7u51dXV8fHwkJCRjY2PQ0NDb29vt7e3s7Oz39/fy8vLv7+8AAADx8fHk5OT/AAD39/f19fXm5ubr6+vo6OjHx8fKysrNzc3Pz8/R0dHT09Pz8/P5+flMDi8tAAAAOnRSTlMAAwkNFwYkEBMgHDsqNlBJGnaJfF+PZycwLUEzPk1HW1ZEb1JkgWCGaP1qY+ff3c6KiVsm+vf09OvngRpQJAAAA7pJREFUaN7t2Wl3mkAUBmBsCJEdY1qWYVUkLtnTVY1ZuqQ1////9F6QAKOx51Qm8YNvPod5zp0ZmLlyKzNhFG47M+PePDvCjrAj/JPQYJi1BHr8/ZpTKNYSirHfMUghoQg0oBh+r8YUjBKCJhTj49gHkGaNweehpFC8SMgB8F98rUHGAkERaAAOj6MbhgQRa4oEMQx0ICNH0IS8BBkgG16oLRkjQ+SFoAkoyADXo2/zu7W5/c88Pd1+HV0jAg05YVIqAgoOeH50Pp8yynx+dz7i+QM0PJdhUhU0YQrOpmOGmZ7BdDTLhkl5GrAGkvh5zDLTL6KEdSimYgJ/GQH2AtZAML+PmebBFLAOsC8oAk5DWgNTYU1QTKxDNhUFoYEEXAiiaRPWBGKbIi4HJDTKBFyLOA2WypqgWjgVsCKrhH0gNGEaFFuVWRNk1VZgKppA2F9FsGSXNcGVrZUEXIyGKNjEjVgTIpfYgmjggiwIjZwAK8HxWRN8B1ZDTmhQBMEkaqSzJuiRSkxhNUESFCL7HmuC58tEEaRVBEMyFVXWNdYETZdVxZSMZUITCLbqvgbBVW0gNKsEfDciQXa9LmtC13NlJOD7kSaIQHBeg+AAQVxNUCwghKwJIRAsZQ1BY0/QdoQdoULY1k35Bq+m7XpBlz9T9+PlsP1McfTH+hNTw8Ng+WPNVY4scqSfDMYMc3OiRzJ1ZMFUDm4Xp4+Dmw1z/0JuBqeXlYMbVybs5cfXq4vTH6vzcym/qDyW8ruUP4t8PLm8yo+vewWBPsTrWpAMO61Wr3d8eHj4vobAY457vVarM0wCTacP8TOKANvS98Ig7nda7TYgQLF5jgHQbrc6/TgIPR+2JE0o7pQG7glYDVo3OAIEVAIcdaQFFQDAUdDVYCXgfjCKOyUQMBmBxzslcR1dC4Mk7g87oKgl8KBhP06CUNMdl+Cdks8IXInQyC/3eKt0It3rhkGQJHH8oYbEcZIEQdj19MjBG2V+uW/khGqLw1QsVXYj39MAATmqIUGAAM3zI1dWLcXMWxw0AQxphwHqQADhRL6v656n1RDP03XfjxwAEKhB2l0AQUGge02CaVsqIpwIGODYND4MHzkIUC3bFOhe04xuO/IGIhTbsogKkJoCjyKWZSsIyGqQC5BA9x0zAyBQQYhaQwjB8QGQCqi+I9V9RUTW/k2bvyZIagk8KG0CSwjIO8Db2INODYjIe/HgWETaKMYifNGHBwAKtvD3CDQ8I1IHSmpL8eMQAjBb9tvUjMqEcejxuL9XNZodPDUZeAAAAABJRU5ErkJggg=="],"popup_bottom_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAjVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0BAQEAAAAAAAAAAAAAAABaWloAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAaGhpoaGhQUFAeHh5ZWVlaWlr///8AAABqampXV1fx8fGbm5tSUlJgYGBRUVH5+fljY2MLHkH2AAAAJHRSTlMAAwYME1IpDwpBITgvThvHSx0WJDP1RW48Oi0ZPUlm4pBe9LzqzGhUAAACDklEQVRYw+3S3VLbMBCG4YQkwrJsodjGjSwrP6X8lAD3f3nd3dkwTIMSK+aEQe+xNc98kifR3WPxx/jIdHo1u57rXBRKmsXi5vHh6U98Tw+PN4uFkaoQuZ5fz66mU1aSk5zkJCc5yUlOcpKTnOQkJznJ+ZlOBo77QseBkwX2uKXolPQjHS9VJ5YudG8ZO70vRzml79nJwk7dNeCUI5wSnKarTzizeUVOO9Jpyanms1OOaKw0ZoRjjLSNOOfQD+f9CMd7+t3+dyh2Dg/UtuC8XuC8gtO2h+dhhzt2rJR3b/u/l7R/u5PSnnI+Xlwvt5v988vLc1R4YL/Zyv7DtbFzPEjnMEj15XZz+/s2Mjix2Za9gjm5PswJODgIb87sduv1+ldM8P1uZ/DWaE7YQaiCFxJFY63tZeuNKYdmjG9lD+eaQsDrVMh87vAgTZBayQscuVLEaJ5DzvEghvJadCDBIrAGBgasAaUTdQ5MaA4Pel+EUqOUxVbnsphSDSrva3jOscODCMprogrABlYUhNQ5MTgn5DCEixxISMVECCgO1xCDTmAQQyQtwQJsYDkYS1KYCczBEKI3QqlyTgM2OK2dq0DBOyOGlfDV4SSkAIsICERwzIlLY4gloNBCbVAkoIEIKcyEIZaQii9jhZkBEJXFRWfOMwwhxVpMLDDCzDlrVEFjvDpJpVKp79R9fJNg/wAgGweRXaclSwAAAABJRU5ErkJggg=="],"popup_center_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAAALCAMAAABVqWPqAAAAS1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVlEREQODg4AAAAAAAAAAAAAAAD///8AAABbW1vd3d2VlZVSUlKKX/cCAAAAE3RSTlMAUAcDQjkoIRoUDwvvsGdNSTEu3NAXBQAAAEtJREFUOMtjIBWIQAHJ+iAUMzMTNxcnBzubECuLACMjr6iomDAZQFyCh4+Rn4VVkI2dg5OLm4mJGWrLqD2j9ozaQ749+HIwyQCPaQAIoTUzantFuwAAAABJRU5ErkJggg=="],"popup_full_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABnCAMAAAAqn6zLAAAAq1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSk8PDw2NjYuLi4AAAA+Pj44ODgqKio5OTlEREQwMDBhYWE0NDQTExNra2tqamppaWlFRUVqampqamr///9cXFwAAABTU1NWVlbBwcHHx8fLy8u9vb1jY2PT09OioqKZmZkZwWr6AAAALHRSTlMABgoOTSMTTxY9Kx0ZETMvHydIRkA2ODqBn5WJRJqQe3iFgf1qUOrf2pTl5E4lyI0AAAMkSURBVGje7drbctMwEAbghDhO5Pgoy1YBA06bHji0TYEA7/9k7Frd2jOtHEnN9DT6M8MNcr/5Vd9kt5OxXFlm8vIzhY/ZqanbD586xgYk5J1lzCWq0hMzw/SYkaQQAhKrKM5A6rugEYbh0irwAFokjYWUBI04jlcWgeNgAbWv0pSYBBAg8nxulTwHDCiSxtugAkXAKIoisggcBwukMEQIC2nqEIMKEFmWpRaB42ApaTZWiJhOAaOqaymZYaSs6ypFak4QFtLWUQwikgnRNE1pFDgoBJN1ilAeLxMFPRBi4nweZWnNRFNyHgTBwihwkPOyEQwkbBQmmkJYB2+tYyopJUFmIUZKBdHNaeus8NKkON20x8fHRx8tcgQPtBsOjaIip0IPBBysU0SpZKfr77tLh+wuWi7rLFKFdH1mSVenYnL97WR77ZDtycVGSlUIL+6+MumuLV7NoY5gX3fbvzcO+bfdtUzU8BuKl3RxmmuDOo34dLn988MhN9eXX0QjU+3FTTtniU4teAPOLxfnNzhNw+DiVvHQuYKPinLUtQXlY5ySiyorco2Dr0GonCbgj3E4F/U+B99qVgb8vbtzxINGwosw5qjXoFwEj3GC4PZFeCIHX+wxR/DX4pRP4yyMnPoADvOOd7zjHe94xzve8Y53vOOdV+BUB3De1vfGwffgl/C9/mDO889dDjlHeqa52B1z6xxozqd1Dj+31PS5N4f96RDNHFY/Vz5znSufbyTTzZXJGc7Jz9zm5OctZzQn3zv3r6Q4bdefIR8sgufXLRdy39x/uMdgbnsMCQ8O9xij658CIWRAWRgnCGgvE82xDl6bfjuX3EIpSqLbMnGDwDG1aKqgDTDaOlSo35ul3UpLRbCR0H/KukqhzJCZji/oYoAKWgNWRlGLwAgUtZ6jOppCg4UjUl0yg9BmE3eoPTMdX6Aqida08LDJB4NIbLCnpYUwrZ1XmNwoeBIRUEYZyv01emyUfpHer7dNFvbKgoSGwbMzRKjMvpBEmFmIIGUf1NV1+asNMowUsvAfx9w9byTRMUuBAKtgf4cnfHx8fF58ruwz0eY/HRQD4ERyIRoAAAAASUVORK5CYII="],"popup_top_bright":[null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYAAAAAAAAAAAA5OTlpaWlYWFgjIyNWVlZFRUX///8AAABqampXV1fx8fFcXFxUVFTHx8e+vr5kZGQwQJg3AAAAIXRSTlMAA1IGChNMIRovKA9BOMcNF0g0JSw+HpUcOkWN9aVcv4I+EWOzAAAB1klEQVRYw+3YUU/CMBQFYJxattGpA1q3qqgIKPz/H+i5vUsmiYV2I8aHe567fDmnfdrkZNYpmSTnalzSmOshiYd64yY9vRWnsHGfGrYipE5hYzab3aYE59nqpBNMrzDxkBLGfkjnGChE5HneIDYmDYLzwFhi6AxDCgw7nU4X8cFpC4ukkxBN6stAAQKjLMtlfHB6QRRJvtIVEqrTMXa6AFEU85QUxXIJynZQqBDXIaYhBUZVta2JTdtWFSySGkAoFHT83TBTzKvWaO2cq+OCk1qbtpoXDM0YCtVhBmWggFBKZXHBSWCQUImhQCG6HVott2AwGEOQIlMzg/kA2ZyWu/6tUF+nRBu9entCHlNCH7ytNBqVXaGQQ3WwGkZbvTzvhuT5ZYXpsBwVIicwm69TGQPmc0gAGVNxIR4uMJulOlq/7g77r/TsD7tXramQDQwHhx517us4d7f5eB+Sj82dc75QjqcdcDCbd3Rdw9kOYLZw6lp7xw/XO+sjp6HZnFIjHKUcDdccOesjh6/HjHYMHHveqVU2wslUfdbpricb5WTdBQUdPDd7McfiwYWci/b5P44a6ShxxBFHHHHEEUccccQRRxxxxBFHHHHEEedv//OFs07PJJhvB2dQcPxwm8wAAAAASUVORK5CYII="],"progressbar_indeterminate_holo1":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAKlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWZdn3rAAAADXRSTlMABRAKFywhOfYnMR3v8BlJngAAAUFJREFUaN7s0D1qAlEUxfE7hBRJNc9ZgZk0IU3GZAXGzsZG0A1o4QIEewsFQURBtLHyoxURXIS9he7F8jRPEN6c7vzaPxwu10RERERERESe4R5ACYExmtgi+oXolvx6ZXGEEgBjLM4c+0L0zEofXmkcoQTAGEtmCftC9NQ+K17lnxeUABhjSa3EvhC9bNWW1yFLUAJgjKTz7/6O5AvR93aqey2LBZQAGCNp7t33jHwh+tTaXa9dsbDo5gBjJL2J+9qQL0Rf2/nmdRm/jW45wBjLwObsC9GvD/9Ve8VAAIyx9K1BvBBd/8r1X6t3DATAGMvQtsQL0fUv/evenh3bAACDMBDcf2tW4CUapLsRKBKwzevNvLz3/seDedlX277qHmr3kHu73dvynJbnyAtbXiiPbnm0vqP1Hfq02KcBAADAwgBwBEHj/3RdFwAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo2":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAALVBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUW/iK7AAAADnRSTlMABQoQITkYLCcz9hTw7fhFXIgAAAF4SURBVGje7dmxSgNBEAbgOUE03e5aWm0C9l7ExtJDlDRpUtgmcgg+QCS1KGqTQkHyAmIjKEF8Ct8iRQrvGcRrdCN7e4ObsBf+rzpuYJYZuGN3lgAAAAAAAADKkAUERdKnmdUCyy0ockdJ1e0kybpHWkTGaoHlliSdUU2Npp0m1fQoFpGxWmC5NSlnNKbd1C4WjbfUn55W5mpec6/spQzcas9i+o72aJzYvcqtxKOWVifJL4HlLq62m0dbdNq3Ot+XO1d9fy62Nw6NF0Hlzqt1RS/pqGN1fCvf7zv+PLxsXhsvgsqdV+uK3tFHZjelm8ynYS2bm+H6c8bArvYxj34W9mtCg8r0q73G6Re/2icaLLxf7dWf56r1a4p+saqdlOrXqDr9qv2/X6PiKPrF6xe+R873iP9X8P/7Zd9PYL/6Z7+K8xDvPITzNvO8PXbMMDw6mJm5BJa7W2aeg3khb16IeTRvHo37Dt59B+7TmPdpAAAAAAAAACV8AcebDMLiSs2oAAAAAElFTkSuQmCC"],"progressbar_indeterminate_holo3":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABQIKDyEsGDkm9TMU8fft+mrRFgAAAchJREFUeNrs0ttuwyAQBNBZLsYY4vL/X1sbq/CKKky16pyHJJZWuyNnQERERERERERERERERP+BaT/mQ2UUgarIA2nXH+t9uj9E7m9jZLq2WRFdiVem7cfGBw3EWrkfxb5ABBCxiogARk3ilWl7TcYHBda56/l6ctO1zYroSrwybT82PmjhQnbWGOtymO/ZHBT5eRc6LEzbajI2KHXQIXsfrIgN/gX52axItmL0JF6aNtRjo4O55kOI0TsR5+M2Xdushq7EK9P2Y+ODMcCnFLNIjmmfrm1WQ1filWn7sfHB5PEp5YhAPMobEpCKKqm+Cy1Wpj23sWO1T/5TLl+1XhuwsV6PHdj01Gtl2jONHat9ikvqtQN7UYX1mlKvjfX68z9MV9pz/2W9EpBYr5Y4qarXsrTn6LEjsV7f7dsxCoAwEATAMlb+/7m2WlgYONjFmRccKCRcdhM+WNe0H34vh2PCcdM17Xm4e1V9sK5pA6/2FhMP1dPuLCasVa1VB9eqHoWKJy54FPKk3TtxwZP2aCBn1QVyVlUgZ8UHcsQJb8QJ32zGCYWhmyfOD0OrcqhyzFU5FNGaJ84voqnRqtGO1WgBAAAAAAD4gwuJzBUuUw2jkAAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo4":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMAAwoGDyEsGDkmMxT39O9TQliZAAABzElEQVRo3u3ZP0sCcRgH8MehoCZ/6hvwDzSfNzZlRoOrIubiJAi1hHFEi6O01GJBEbgEBULQH6I3IOLSFjT5ElxFtOvH1XYafPGODvx+lpueh+89cMfvjxARERERES0tpVRYP0IK4dT5woniMecFF84hWliUaZqGEhU1EUrX+cOJ4jUjHFIL51C6iZJ0QjMkmgBgBQHonAyH0niOGU2SkspqSZXOArCCAHTOGNEUnmNGk4zsWpZ1klGpVwuhCyx/OFG8Vo9HchZg5kie49FcXV4K2qHaKEAegYIAdC7HI0dgiXskRd2kLMfVarWWVzsXVUAtbwIFWGfDh86t7Vhp4RytrVjpUvaazebptfl21wRgBf/f+f5p82rRHE6TWxna2qfc2JCxPNj+GOso3muvDWxM15Vjer4y/PqZ14ccBGVeIx3Fe41VdF59V45pZW3wO6+u7KNvdWb7YwREQeb1js7LlWNSWeW85ur9Na++dIIzr47tvcY6PC9Xjkmb88Lmxe9xvh7/Xx7877meANcTXK9i61Xuh7D9EPfb4H4bP89BCwLQuejZeQ7PC2eZf17I82jsPJr3Hdh9B+/TsPs03teC97VERERERERL6hv2rPU7MZ28hgAAAABJRU5ErkJggg=="],"progressbar_indeterminate_holo5":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAANlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteV6AHYNAAAAEXRSTlMABQoQFyw5ITIm9R889PfwHc7yYP0AAAGqSURBVHja7NLbbsQgDARQc12T7KbL//9scfqQSyshdYWFpTmPEbFHMAQAAAAAAAAAAAAAAAAA8An3y/5VwbHMIBu5Tyn1Z5Nw/ka+O+cVHMvMsZH7lFJ/9k+/fLjx8p8PCo5l5tjIfUqpPlsONCHeBC+dizpaCNeWmSOXN3/ucSn7NZEDTVwfF2uUF29fFRzLjLGR+5RSf7YcIKJ3SRdlDc6FtSQFxzJjbOQembK8O7NlORE9OF9wkf8KZw1conOxLTNmzx1mzz0wZb8mcoCIvurNqxCVV1XCRFwN4v2SZjcw5ZY6s6VHf9RrSURpqUoyUa4G5f2SZjcw5cad2UtCvWZ8OBsp/10vJmK1m3sSPatBLTfPX6+BKbfcmb0w6jXjw9lIiXp9t2/HNgDDMAzA/v+6szcDHSIZ5AUCkqGN5aHn4DpSul5Dz8F1pFxcL5/2iR/NHSn9OQ49B9eRcnO9PKsGPlh2pNw8qxoK5Y1bOlJuhkJG2qdzJ4y0FXLO5k4o5KgTphX1OlIu6oTK0LdzB5ShrXLczR2wymER7XDu94toAAAAAAAAAD98BS4GIUUirlsAAAAASUVORK5CYII="],"progressbar_indeterminate_holo6":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABAoXECA5LAb1JjENTd7cUtpBCwAAAcdJREFUeNrt291ygyAQhuFdQCVgk9z/1ZbGtkfgTH/QVd+HQ2bYb8IeGEEBAAAAAAAAAAAAgL9Q1VgZqvXJ/uOrcjzcWIJbTt4h4LJmcyq6uo8sGl1P5iqfPfgSsMeazSkXqmanIurm0JG1ymcP3iHgsmZ0c3Uqisy+LjgRF/wOglMtlY+nBBfTwXsEDFHUhWYL+aHOO1Xnh57MVT578B4Bg1Odfauc+DTVpCGohiFNPRmrfPbgPQImP2ssazbKyTBW5RRiDCmPm8vJx+hL5aN5BQ+Gg/cImIegjd3KKajcnnW3JJLK5A6ySH4eUX79ZIZ1CPgIIm/NFmq31yQy7fNbjSLj84hK8Ml0e3UI+PDt9ppoL+O7Zz7g/ZftlUUy7fXT4Nl6e/13wPvQbq9MexnfPfMBaa82+7tnPiDt1WZ/98wHXG0vHu2NPzmbD3jnn2OT/d0zH3D9xQSvVW2/tTQfcP21KodCps9czAdcPxTiSPtCwXc40uZCzoWC9wjoVy/kcJ3Q9m098wHnteuEXIa+UPDtL0PzKceVgu/wKYe2SKE9Gax89uBSbLimvGhlfNPNxyc93LCffLHVkgAAAAAAAAAAALiGdyuD+5ssDOz3AAAAAElFTkSuQmCC"],"progressbar_indeterminate_holo7":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQIKEBcsOSEm9jMd+vBmaXrxAAABc0lEQVRo3u2Zv0rDUBjFPzNEShZN4p7aJ4j6AkF9AFG3Dp0Et2wdfAFBBwe3OgtOydpdB1/A1UdwFy7xZvLDofY09HJpzm9qPw4/woGE+0cIIYQQQgghpLfsa9RgZTKRAIjjdnHq0in7c7iribPADmAAh0/21oWlMkkONXkW2EE38p0twIHbg8StS3cSy9GJ5jge2gEM4PDJ3rqwVC6nl5qLg5EdwAAOn+ytC0sVMr7VvOWJGuDgDtw+Gjt16dT9ubxfaZ6K1A5gAIdP9tYFpa5f5W6qmRfpbNqR+dke4MDt6cypS3dy8yhfjeb7YVA1HTF19AnEYfugcusyk9/Uy9++JmH3p6mjZo2UYeXWZepwvX2V2/rfRvX1zL7+xZQL+qoj7/uKKrcuo1If7Avri+/jEn3x++XV975P6wmuVxevV7kfwvZD3G9j+22e52DnOTwvhFIFz6OhVM77Duy+g/dpUCrjfS12X0sIIYQQQgghfeUH+E4C2CXdn30AAAAASUVORK5CYII="],"progressbar_indeterminate_holo8":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQMQFwksOSEy9h4L8O0G0W7OAAABgElEQVRo3u3ZsU7CUBQG4GMHlc0WuzG0TdxcDJCY6GJgKwuSvoFhwIWtcXZpZWGT8ABGpg4Y4kr0PXgMw2Jd1Jv0NjbXHG5K+L/xkvzDP9B7zyEAAAAAAICd5WU5RGR4HBy1IPV00pTz2wiRa0o88kwWlmO4Zo5ypRfniEYssgOJRW7Aonu0ZwfsRLph68kRjXSpV5csvVqdxaXlvuWdlyu9OEc00qRGW9L0em0WreuTRt55udKLc0QjLfKjrFHHfH+NOLwsa37ETqSf+npyRh3ru5E5LfqSuXnRZ3F7Vl3knZcrvThHNHJDcZh1d2+eP4YcJlfHcchOpFdjPTmikQmtUskzPaQ8xpV0g8aHiaacp59GPmmV9+sg5TE8SDdouJ9oypnRAH0p5Kz/7GtG0+3oq5JoyvmgKfpCX+hrK/rC/33WGt/Hf94ncF9Vu6/iPaT2HsJ7W+29jXmO2jwH80K1eSHm0WrzaOw71PYd2Kep7dOwr1Xb1wIAAAAAAOyqL3DZCqyBVRiEAAAAAElFTkSuQmCC"],"rate_star_big_half_holo_light":[null,null,null,"data:image/png;base64,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"],"rate_star_big_off_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAyVBMVEUAAAAAAAA8PDwAAAAAAAAAAAAAAABoaGhBQUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJiYkAAAAAAAAAAAA1NTUJCQkAAAAAAAAAAAChoaGPj48kJCQAAAAAAAAAAACmpqajo6Ofn5+WlpaUlJR1dXUVFRUAAACrq6uampqYmJhwcHBgYGAAAAAAAAAAAAC0tLSxsbF/f394eHgAAAAAAACMjIyFhYV9fX1tbW0sLCwAAAAAAACioqIAAACvr69YWFhUVFS3t7eP8DjqAAAAQnRSTlMAgJkyeRpOs5x+BQNzDmEWOsxaaAmVg29TLuTSjkQlHurn4tjXvIg18d3aua5kPhH7+MS+ZijPycK2klZJ5mz1qadtR87CAAAEB0lEQVRo3u2ZiVbaQBSG5wshhbCGTdZKVVQExIXW3bbz/g/VTMSGJUgWxp6ew/cA5Myd//73/oPYs2fPv2Ba/S4+g1wVcyo+gTOgKfRjm7ikhXbKUIei0E0uD8fAodBMCx7l4BNuqQqOPIdsQWjlEE6llBnoCa1U4Nb90BGYttBIIQvn0qUOKaGRS8hIRQdmQh9K20Pp0dDatF+Vtt8YgSW08QQ38o2+TjkoKfyUcwyNcigrKbzzQ6PhVeFE/gXQNJZKyhV8xnAptPAMD9JnCAdCB6qJ2nKBro5h4TeRz0BTKzXhXnrobaWaqfx0iTpoWLxSYMhl7qAidk4RfshlriFbE4od249cJQNnQqHHfnw6Gmxopuxnjd0vKVNoyHUyUE5kAmmPVmrOs1WEsVznGA4sq5yak/bYpg/3dy8tqzKbZQmkLQPoEsjrbGJZPffL9qq9NKts4U4GcdzlY/KVVG5BuyzTMDzGX+Y4zpHcRN9xRl/mZAzFKcu0ln0M93dvHWf48nIlE9N/aTvOjftl4GDxzuwiau/YNUNVu5IQq18ayd3SWf2Owq4Av+UuuVXfma73jgUY3+SuuPoFVAsb7IzTodwN7TrwZG9Ic1n8WZCMC/hoSTrMozad5NwB5kfTtzABMokvarQmt2BJNI5lEr6pNi1uHR+pLGrdic9JA7ByYivpg0TlU92TDTfga5X45Wsbyt1KoRcEVb7buGXzuydk+Yy2jMgAMKPFM/tJle8ketleSyIiZ2bE8p3g0rRj5K5o5RvNyxYDu4nLRbgm9csWh5QJXRkGZQaWnSC25lVWCQFkW0mDeF+GoAuFRBlCBfEwjKGcMEOMw2q7mCh9hVJd8lxRU+lrO8kz2Rlkwu9wlUQvqB0ZjuskbwG2CdcyJAZ8TfBWYsiw3CR4R3mOsvj3wczFf2Xqy9DUY79BHW5y1OAANYj9ut+DQVCaNDCCtHgE1diGup4ozx9QGAFZ8zSmsdaCDPX4FDCDw/M4pjm04NdqV3rHseyU6U/55ObQBGcli3SBAyWtaZH1hHMdT+C51YfAqwEL87ps+otzMoGnob6UsB+BvO8ypYl3qOQCLy+n9HtcmrXFI19mVw51FGv6VRZn3lFdHWce4VYO1VmafnacK7p+vx3vOE/+cVYO9eJPv+gOfug794kSm9kK3seqiz11A70YVzTwgyKVwqaT99ShHi/eL2kS44q8KOageuejgF0q4vKlr2oco5Py3n9SF0oE2Z69xUPyQKPzNmbTkTfHrjwf4VIsbbfFZ1zqQ/kQ2e6+w+97fBFsI+2JIuOAFVkLDVysWth2UJ6kKEZdFxSTdJRqW1mI/OeVBcyiNt+0qWotInGZt77GyVO914nYs2fPf88fm/2TZoiTETIAAAAASUVORK5CYII="],"rate_star_big_on_holo_light":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAvVBMVEUAAAAAAAAAAAAAAAARPEwdZ4ISQFIAAAAAAAAtoMsAAAAAAAAAAAAAAAAmia0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqlLwONEICCQwupNAsncYnjbMjfZ4hdZMKJC0AAAAqlr4GFRoAAAAAAAAvqtcebYobX3kAAAAAAAAAAAAysuErmcIpkrklhakfcY8AAAAMLDgAAAAxr94xrtwieZkYVWwQOUkkgqQAAAAzteXrvX7WAAAAPnRSTlMAgBkzmbOcfAXmA2FzTc14Og9uVC1pWiUUfmXYlYPq4tLDvY5E24g1C/G3rlA+CPve18u6HZJJ+PbAqJjHIJaA4UwAAAP2SURBVGje7dkHduIwEAZg/YaAwdh0FkyvIfSEtE2Z+x9rPQ5ZAzbgpuzb9/gOgKPRzEijiKurq3+hXq2In5CtIl0XP+AWQFnIp+ZhUYR0BaAFaEK2bA5oAngUklWAJ9r+wC5VAYPugEZRSPUJTIgoBYyEVDVgQERdIK8KiYoN4I4sLSAhJFoCKWI9wBTycG5vyNaWWrS/OLe/zABdSFMG+vSlIzMdpg3glXbeJaZDgVPhmyGx4VWBe/oLgKTuoHBXcMyBpZDiGZiRYwOUhAxcRBnaM3QOCxlF5NhKKiWniOSW0irN/fRAC5Bw8UoASTr0AdRE7DTAoEOvQGMlWMwnER1LAbeCyWk/jp6ENmRy+3GJ/5JSB9rklgIKkZqAYqskdp51DZiTWxMo6XohsaPYpuI863eXul4zzTQ8ZcjDEJ6qpqnrI+vL6nF7KVdxwQN5aQ5xXq6WyO4dnTjUTtrmNzsPRpdO6RjG9mYnlWQT7DvsHgsA1u8ODGOTyawpsk4mYxh968sASvs1rWoAPihuY45dXYjjL20pXj3nOw61BuCN4vTb/R2WtfcpQ3FZv3GaF0+0M0w2FI9uC0BZPTHNcakacaXBuUvSZw5804nuAUC+cu7UMQGkIm/UjNNAOd9OdW4MTYoiw2WqTS/eDXij+hResw1Az4qLlFKk8HH1pP0d8Kta+PBlktzdFN8XBA7fbwruvu2qnkvhC9UmBhy2YOOZWrbDJy9sjlsO3yBI2OAKm5TwbV1hCxY+jP0dqXbY6iIkLt4h+cHNYKFGuDfmeFbxAWhUog7iHfJhGHFEL/Ig7sccKEScIeZ+c1uLNn15Z13cc8WUpy9PMc9kt0DK/x2uFukFtUf+vADp0HWkpoEX8ikJ/IrwVpIkv/oR3lGeg1we+B0lG/6VqUO+tUK/QT2e6qjrU8frSIQy8j74mu9498rFLlAN3VDdE+XdDOy9Sy6TkI116tVQmxMAee/heR6yOVTcg9mrvRxdTeSdUz56cyi7/urxEEDpk48PDe4J5yVcgmfzR4frevC1nL07ZioTQ4IrQIv2bJ4A5JwuUzftRUVP8AIwO7q7o7zaX/LyeFFdQAvVuccHEykv55BiL6p3cPqpgbdor3Ov+/ZyXKOVa1GpEB380enc98PTE6lSheXD6eCjEFs0cAZF1IqnVj7iRT2NvzfJDLFFze/5GqVzAalrsNx0OMZAOmgl5YBXojEnQXqkXughOQDt3tcxqwS+OQ7pbguLVr88jD7D0trQTeB29wt468MzCc4kRcoA9MC50IZlsfJbDoU8bFrQ6wLTggR8qjeAwP+8WgAwgxZffcGxFoEsc4swtzRlVNLE1dXVf+8PiLJs5G2Z9ooAAAAASUVORK5CYII="],"scrubber_control_disabled_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIg4st+Ci486sd5LqMtwlaJJqc0zteWzIZSAAAAAE3RSTlMATUg+Ihs3AywVCEUP4FHVmWCf15i9tgAAAYlJREFUaN7t2Itu6yAMBmD/NhBuabuT93/XI03TOm0qJXasdVK+B4iFTQyYTqfT6S/pIScRBlgk5dDpSDUkxjecQqVDLDHhgRQX++cDY4CDMURgPMGB9IpgghRtdjImZVWeqmCaVEV6GDvw7jRF7BQV33eMEAHXCAUq03WoDBWuNGURKMlCMzLUslMB7oo5QfYkBZiEpwtgmPBiWoB9CUuDUVssPcLeMRLMEg1UHKDqS2wvcwJ8c8Q4ANNDHYfoviUAgrpRX27XbbveLhjL2hq/rdu79U1bZcHIZd0+rOM1CD3SMHLbPv3DSFPu0us9wKrcpxjavsCQewD3FLkX2X2buv9ov9cqIg4R3du194HjfmS6H/ru1xbvi5f71dH98ut+ffd/gPg/ocYEBkLPdRj0V3iIG5IkLzIMIeqqCNydB0bllUZq96Gj39ixN+zQOu1WE6alShphvgEp9YQJ0kkvNjzRItlEwYBEsiuZH2zNXOgYS8ztR2pyXOhItYQsH3IolU6n0+kP+Q9bEx2UrsdzRwAAAABJRU5ErkJggg=="],"scrubber_control_focused_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVtyu1yzO1ryuxexetjx+tTwelvy+1yzO1yzO1xzO1syuxqyuxwzO1wy+1nyOxZw+pNv+hxy+1wy+wzteU1tuVOv+k9ueY4t+ZixutDu+dJvehVwelYwupSwelryuxGvOiB2w4OAAAAJXRSTlMATQYKEQ0XGh02RUkgQSwmMjvw1flze2To3M/j3IyrpYRsX62hrNdO2wAAAttJREFUaN7tWWlz2jAQrZb4Ej6wjc0dIC2+OfL//1xllxl1Wq9AVjQhGV6+BD68xx7aXa1+PPHEE5KA7k8LoMXoCmjxseSM1TCMlyvYv+yLjxJp2Rm1aZqWZXewLPaBybQa6uzQsVt24IQepYSBUi90AtvqNABAmd5k5B75Dx4TMdUkOnrLnVCCgE5cq5MYTm+6zpgIMHbcP1YM4mfO4fS4BHPUAIXOOz4ld4D6nZ+k+U03JHcidE1UAXdPQMndoAHiJpzf8okUfEtCoeWfEElMWoX7+R0iDQdRwH+/sg14/vhkEPx7cgnAMAMyEIFpANx2kEuHClCXO0kQgJAMRngrDAA8AEPDACA2wKYqAtTmJiAGOEQJDjcBifBYTWAsjDM3QM0EXQZwE3ADhDVi9mu5jqbr5XYvrBjMBPwMeARFuqhO54bhfKoWO4LCQ88CE8CLxNuyOtdFWWZZWRZ1XsUzvGAwAekQJ/NjXWaHK7KyPkaJdJhHBuqh/TQvGD1HVuTTBPWRMcJO8Rjxz5zzc4XoDckj5DTDCC1D8ZHzc4VjjBakEUgl6aaqOT9XqKuNVKKCgRXqRV4eelDmK6xoIwJIjJPOgF4TEiTKvQJopX49FYdeFMdXtGbLJNGy9VC/j2KJNAJ4sUkv5k3WL5A1EelFv8AIE5iiAu9TGQHQJ8BjoNVFoCHIymn6U5ym6gctxQ4aUouQUrFSLxXifrNDi52o46iX6/NCslzjDWcW9TacmaDhSLbMtKdlXlLBWCHd9NPon6Z/jlJB0x8wtsziKq+LMmPoxpaFeGwZMnjtVtUpb5r3Jj9V882NwWvY6LjfxuvLZR1vE9nRUf/wy6uF+vhuGZ95AeGZqmIA6L4Ear/G6r6I614laF+G6F7nfP5CSm2lpnspCA+y1hy8mNW8WoaHWo7Lr/cf74FC6onlUR+JdD1z4Q919hV/PdR9hafGG4+lX+e994knvjF+A/DCfuTfcOFvAAAAAElFTkSuQmCC"],"scrubber_control_normal_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAhFBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVKvugzteUzteUzteUzteUzteUzteU/uuczteUzteVJvehJvegzteUzteVKvug7uOZHvOhHvOhDu+dDu+czteU5t+Y8ueZAuudFvOclVTOqAAAAJ3RSTlOZAAQJDxgTITo2HSomlX0uijJC6IZuYVFMSbJmgf74kHjvp8/MvLsvv+3mAAADbElEQVRo3syU23aiQBBFz4w0NA2t3AXvmqxE8P//bxqMFip0G4W1Zr8keTmbOlUd/BmZ/0fw945hBJQ9mUwsy7Ib1C/qT7K8J2jCVTJjQjg/CMGY8jQSo8CYrr6bCcf3ZqHLf3DDmec7gqlZyPGC4PztzPFnLs+zdBcEgQSk+rFLs5y7M99h5zl0An08Eyq9WE63eGA7XRbKIZheAU28+njPjZYJekmWkeupMTRFoTffquPnUwktcjqvFVbvEOiLt0UdjyeoFcLuU6Dv8/2woHiTogj9viHQma8+n6cSTyNTroYgg1bQtB/mAX5FkIfNJsyCph43k/glMnP9LgM68j2+wwvsuNdhwEO+8KIVXmIVeeLBgI78BC+SdBjw0E8U4GWC6KEl3NxnnZ/gDRKuNn1zrbi5f+bzFd5ipQz0Hu4EE9txd3iTnevYkzsBLTjM8DZZeLNo3Cwgl3gbmXvtNaBVkM8DDEDA/VZJaBeUYhBSKqktYF4hMQiy8BgJWhc0xUBMW5cEGmCOwZjTCKABVsCAI1y2gBEGoBFIYAnawDAjCIsEzRuIJAZERvVbIIHFZksMynLGrLbAcRMYOXzG8Xodx58HGElchwR1QwVMfO1PVVUqquq0/4KJou7oKjA3dIhP1fH43XA8lqf4YO6IBOYbWmwqlU4cq83CfEdXge3wrT5/XZ7zyVCu9YYtd+yLQK0g1/ezoXwybPQt5WoJjaBZQQYdMfXTbimGjqxewlWQau/nRPltw0l7SykJLBFqd7wvvzsp99oth8K6CrTPbEED3I+w0D41EuiP6KPqE1Qf+jO6CNSVSt2Ky+8eSt2apbrT5wSbfsHmaQE0rPsFa2jQTDC8YPyKtuMsmc40GO1Mx39o4/+rMP+z+1etGeMACEIx1BuQqJPRwUQG739BHYzFEMNHfBE5AAwov+2rv3vsfOKx0wHYc80PHH5k8kPfLlvWfNmSJbx8KLy8VXhJOhr837B08zTN3TLYpaPEb7kBjP8CXL7DBoS3UKAJHOVjcRvLG3E+SuDDED7O4QMpPlLjQ0E+1lQwW3TRfasLAKNlOhyn430aUNCI5XtIdGAu9wxz1QHqAtQ4mj6eEzXWA0vzca/2Nx2gIwzAWtu/gdybfZmQe35pwF1LAy4oDdRce0gVN/5SPYlXTe2cDUmLl89GXuGIAAAAAElFTkSuQmCC"],"scrubber_control_pressed_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA1VBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVsyu0zteVuy+0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVdxOszteVpyexuy+1tyuwzteUzteVZw+pNv+huy+1xy+1lx+xgxuszteUzteVryuwzteUzteVSweluy+1uy+0zteUzteUzteUzteU1tuVOv+k8uOZVwuo4t+ZJvehCu+dgxutjx+tEu+dGvOfyQddBAAAAO3RSTlNmAHzex6Jq682mwiLmgYUv7m3hTPX14fmJNNmeY1HSvbCMmI47/e21tI+IeufcnZRyHf4Gn4DVv2BIOFolky4AAARISURBVGje5Zr9e5owEMdvIKiooCKgnS9Tu9p29r3dW0Sttv3//6Stu0BkJQlIfLY9+/5qnnzkcsld7gLvDqz/B1AbaJNSpRIQElQq1qTl1hQCbvrVOnmjerV/owJQ03TCla7VCgL6FSJRpV8AYJZJBpXNPQH9JsmoJuwBcI+Sc1RODdu2TQDTtrvGaJikH7k5AbVJws5VDd5IqybWp+TkAbgeidU2TODINNpsnOdmB2gklmWDULbFxmoZAU6JTd8AqRpWwkxyQC9e3foZZNJZvM/1nhzwPfZ9AzLLiPfEsQxwHERDu5BD3ehvBcdiQC8aWGpBLplW9Md6IoAT2f8D5NaHaB0cASDynyrsoWr08TwA8//3sJfeR/uBB3AT/7/AN7jpAMfj2D/3OnhOKqBETQgFZNE50gDfqJu1igBa1M2/pQCG+NMYCqlL48NbgCk8H3KfGuYbAEaoOhRWHSPg3W+AFoLPigPOcKbWbwBcHAsUyEJnSQK+IrahAtDAub4mABi/dVAiHTOFXUANobYagI2z1XYA+FVtUKQ22nsH0M60B85nF/7trX8xe8i0F9oMcEM3B4h0OX9ahY8/Fa6e5lcgEt20NzGgL1/iT/42fF6uFz+1Xj6H24tP8mXux4CqNAxMO6vNekGoFuvNqnMuDQzVGIC7WxPM/zFc4vQRYhl+FBA0PHcQEDlpU2CfDpufEToCKzXRUSlggBsDuPJXbH5GWF0AV7hxBxSAH3TK95/ths3PCM9bvi+dotEpwJCkEifhmqRoHfqSBMOgAEscyqb4ASmf8MRd5zEezhRwJHaiL6slSdVyNRO70RECaCy45i4xWijNRp+Bo2uMCRTgYQgCjjqPi3TA4vEEOMIA6VEADgeePr4QHqADPOEICgjwqDscoIlrcDgT6ehFh1vkIQagw7npSJwSXRXYaAWPirnsqCh22G3kh93Bj+usAechd8ApY8DJHDKv0kLmVB4yk0HfyBf0p9LEiAV9kF/OHvxtuInSlk249YVpC173AAEsNQWhLk9eE6+Xl9fE6+QShGLJaSJ1nIBY05k/v72d+7NzEGtCU0cG6KpNfvFw6+4Aeuz+oe4G0tu9gAzVX0CGiRsOKPwEjboMA7Bb7EgFYIQHQ/o1dgyFNU6/xt55qi7i6PLeHaeUcA8Fdc8rJdDITLpKiiF6SrXFJQp2m0lrtK6gIGWpL0hROYGqklrgpBcFB0WLggZBDXhlzbGasmbjjxRmUY6uqLQsL45bZk7/HBGU18tY3q/nK+/XZeV9RigTqvv8y0uaxxlaLHreFsu4zVosOZtEIw2k0kZ5mkSoRvY2V8NiYxs5GnVBxkadzsYFgzytRqckbzUapWSrsViztIzN0l9W+dUsTXaCdXePdq/pkYzyWns2rLEbIFPz+q5Ay30om37YL/pooCF6NGDXlDx7MNOfPZg19Q83XmemDzf+tacnfy/gB/s76qMkz3F7AAAAAElFTkSuQmCC"],"spinner_76_inner_holo":[null,null,null,"data:image/png;base64,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"],"spinner_76_outer_holo":[null,null,null,"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOQAAADkCAMAAAC/iXi/AAAAsVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+3mHKcAAAAO3RSTlMABgoSH/3yGiQO7CkW9vouMkDkRTfJzjvf0+jESqBcV2Hbt66ldlLXv06yZWmBqZtxu49tl5OLfXqFiHO5Lf0AAAtLSURBVHja7NxrU9NAFMbxZzeRNk1qYmxLWyxQLhYsooKI+v0/mHshOXu8dDTNZXHyO4X3/zmbDcMwoNfr9Xq9Xq/X6/V6vV6v1+v1er2eH7bb7WmWZSn+Zy8KL6cXj8eZxPMnNJhxI6n05fzT4ys8X8KCsIXit5HGwbvLCZ4fYVCjQIEl6nmyPN8GeEaEFAqvLEOdRP1FxuPxu9Nn0imkIhgq/M0mqVFnjlaH8J2QmmCVsIOdmxzrz9hY3Hh945pEW+k2FscVPNImUqbZpbH8NoCnTCJtkkDs3iRVlg4eQniIEqmSNqnnj5ukNVLkwejOu20KGUleyTa5+3alTGpUn+VXr55NlagaI75IsnuTFFk0HujRZq/hDRkp1PhLJuzs2iQVUqW28uTMikj5tfLXh3LHJsdm3MhCfi/Qvaiw48BCwCGyLJtst9/PZ/znHdZImdMMHROBE0mZbiV2iK8/3uZ079BZpcbRwfIGnZJB4FTyREmFu4XHF8sxXyQzGt0G6IyIqJGfV9uIv3f4PWfXThloZzFBR2Sg8UyKxL96czHii3RCR6OP6ET0lEiVdF4FqohOP9kfBHif/X4RoX2BZit/PrCobnLOd2hDjaME7aJGXikV7Ce7OKBd6sCychaiVcJJ5JXYX/yhSKQDa2xStIEaEzeTEuuRHbG7tTQ/RGtEQonu3SNQm22uEmmPhfwaLZGJolfJlylRp+Dzbza5XC5P0AqZGAHvjARqNpkVbdQ4Wuav0QKRWO5jGQUS9ZMf2Fld2plnaBg18kyBRpzmJo8qtXWMJlEjP7AR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"]};var imageCache={actionbar_ic_back_white:null,btn_check_off_disabled_focused_holo_light:null,btn_check_off_disabled_holo_light:null,btn_check_off_focused_holo_light:null,btn_check_off_holo_light:null,btn_check_off_pressed_holo_light:null,btn_check_on_disabled_focused_holo_light:null,btn_check_on_disabled_holo_light:null,btn_check_on_focused_holo_light:null,btn_check_on_holo_light:null,btn_check_on_pressed_holo_light:null,btn_default_disabled_focused_holo_light:null,btn_default_disabled_holo_light:null,btn_default_focused_holo_light:null,btn_default_normal_holo_light:null,btn_default_pressed_holo_light:null,btn_radio_off_disabled_focused_holo_light:null,btn_radio_off_disabled_holo_light:null,btn_radio_off_focused_holo_light:null,btn_radio_off_holo_light:null,btn_radio_off_pressed_holo_light:null,btn_radio_on_disabled_focused_holo_light:null,btn_radio_on_disabled_holo_light:null,btn_radio_on_focused_holo_light:null,btn_radio_on_holo_light:null,btn_radio_on_pressed_holo_light:null,btn_rating_star_off_normal_holo_light:null,btn_rating_star_off_pressed_holo_light:null,btn_rating_star_on_normal_holo_light:null,btn_rating_star_on_pressed_holo_light:null,dropdown_background_dark:null,editbox_background_focus_yellow:null,editbox_background_normal:null,ic_menu_moreoverflow_normal_holo_dark:null,menu_panel_holo_dark:null,menu_panel_holo_light:null,popup_bottom_bright:null,popup_center_bright:null,popup_full_bright:null,popup_top_bright:null,progressbar_indeterminate_holo1:null,progressbar_indeterminate_holo2:null,progressbar_indeterminate_holo3:null,progressbar_indeterminate_holo4:null,progressbar_indeterminate_holo5:null,progressbar_indeterminate_holo6:null,progressbar_indeterminate_holo7:null,progressbar_indeterminate_holo8:null,rate_star_big_half_holo_light:null,rate_star_big_off_holo_light:null,rate_star_big_on_holo_light:null,scrubber_control_disabled_holo:null,scrubber_control_focused_holo:null,scrubber_control_normal_holo:null,scrubber_control_pressed_holo:null,spinner_76_inner_holo:null,spinner_76_outer_holo:null};function findRatioImage(array){if(array[window.devicePixelRatio])return new NetImage(array[window.devicePixelRatio],window.devicePixelRatio);for(var i=array.length;i>=0;i--){if(array[i]){return new NetImage(array[i],i);}}throw Error('Not find radio image. May something error in build.');}var image_base64=function(){function image_base64(){_classCallCheck(this,image_base64);}_createClass(image_base64,null,[{key:'actionbar_ic_back_white',get:function get(){return imageCache.actionbar_ic_back_white||(imageCache.actionbar_ic_back_white=findRatioImage(data.actionbar_ic_back_white));}},{key:'btn_check_off_disabled_focused_holo_light',get:function get(){return imageCache.btn_check_off_disabled_focused_holo_light||(imageCache.btn_check_off_disabled_focused_holo_light=findRatioImage(data.btn_check_off_disabled_focused_holo_light));}},{key:'btn_check_off_disabled_holo_light',get:function get(){return imageCache.btn_check_off_disabled_holo_light||(imageCache.btn_check_off_disabled_holo_light=findRatioImage(data.btn_check_off_disabled_holo_light));}},{key:'btn_check_off_focused_holo_light',get:function get(){return imageCache.btn_check_off_focused_holo_light||(imageCache.btn_check_off_focused_holo_light=findRatioImage(data.btn_check_off_focused_holo_light));}},{key:'btn_check_off_holo_light',get:function get(){return imageCache.btn_check_off_holo_light||(imageCache.btn_check_off_holo_light=findRatioImage(data.btn_check_off_holo_light));}},{key:'btn_check_off_pressed_holo_light',get:function get(){return imageCache.btn_check_off_pressed_holo_light||(imageCache.btn_check_off_pressed_holo_light=findRatioImage(data.btn_check_off_pressed_holo_light));}},{key:'btn_check_on_disabled_focused_holo_light',get:function get(){return imageCache.btn_check_on_disabled_focused_holo_light||(imageCache.btn_check_on_disabled_focused_holo_light=findRatioImage(data.btn_check_on_disabled_focused_holo_light));}},{key:'btn_check_on_disabled_holo_light',get:function get(){return imageCache.btn_check_on_disabled_holo_light||(imageCache.btn_check_on_disabled_holo_light=findRatioImage(data.btn_check_on_disabled_holo_light));}},{key:'btn_check_on_focused_holo_light',get:function get(){return imageCache.btn_check_on_focused_holo_light||(imageCache.btn_check_on_focused_holo_light=findRatioImage(data.btn_check_on_focused_holo_light));}},{key:'btn_check_on_holo_light',get:function get(){return imageCache.btn_check_on_holo_light||(imageCache.btn_check_on_holo_light=findRatioImage(data.btn_check_on_holo_light));}},{key:'btn_check_on_pressed_holo_light',get:function get(){return imageCache.btn_check_on_pressed_holo_light||(imageCache.btn_check_on_pressed_holo_light=findRatioImage(data.btn_check_on_pressed_holo_light));}},{key:'btn_default_disabled_focused_holo_light',get:function get(){return imageCache.btn_default_disabled_focused_holo_light||(imageCache.btn_default_disabled_focused_holo_light=findRatioImage(data.btn_default_disabled_focused_holo_light));}},{key:'btn_default_disabled_holo_light',get:function get(){return imageCache.btn_default_disabled_holo_light||(imageCache.btn_default_disabled_holo_light=findRatioImage(data.btn_default_disabled_holo_light));}},{key:'btn_default_focused_holo_light',get:function get(){return imageCache.btn_default_focused_holo_light||(imageCache.btn_default_focused_holo_light=findRatioImage(data.btn_default_focused_holo_light));}},{key:'btn_default_normal_holo_light',get:function get(){return imageCache.btn_default_normal_holo_light||(imageCache.btn_default_normal_holo_light=findRatioImage(data.btn_default_normal_holo_light));}},{key:'btn_default_pressed_holo_light',get:function get(){return imageCache.btn_default_pressed_holo_light||(imageCache.btn_default_pressed_holo_light=findRatioImage(data.btn_default_pressed_holo_light));}},{key:'btn_radio_off_disabled_focused_holo_light',get:function get(){return imageCache.btn_radio_off_disabled_focused_holo_light||(imageCache.btn_radio_off_disabled_focused_holo_light=findRatioImage(data.btn_radio_off_disabled_focused_holo_light));}},{key:'btn_radio_off_disabled_holo_light',get:function get(){return imageCache.btn_radio_off_disabled_holo_light||(imageCache.btn_radio_off_disabled_holo_light=findRatioImage(data.btn_radio_off_disabled_holo_light));}},{key:'btn_radio_off_focused_holo_light',get:function get(){return imageCache.btn_radio_off_focused_holo_light||(imageCache.btn_radio_off_focused_holo_light=findRatioImage(data.btn_radio_off_focused_holo_light));}},{key:'btn_radio_off_holo_light',get:function get(){return imageCache.btn_radio_off_holo_light||(imageCache.btn_radio_off_holo_light=findRatioImage(data.btn_radio_off_holo_light));}},{key:'btn_radio_off_pressed_holo_light',get:function get(){return imageCache.btn_radio_off_pressed_holo_light||(imageCache.btn_radio_off_pressed_holo_light=findRatioImage(data.btn_radio_off_pressed_holo_light));}},{key:'btn_radio_on_disabled_focused_holo_light',get:function get(){return imageCache.btn_radio_on_disabled_focused_holo_light||(imageCache.btn_radio_on_disabled_focused_holo_light=findRatioImage(data.btn_radio_on_disabled_focused_holo_light));}},{key:'btn_radio_on_disabled_holo_light',get:function get(){return imageCache.btn_radio_on_disabled_holo_light||(imageCache.btn_radio_on_disabled_holo_light=findRatioImage(data.btn_radio_on_disabled_holo_light));}},{key:'btn_radio_on_focused_holo_light',get:function get(){return imageCache.btn_radio_on_focused_holo_light||(imageCache.btn_radio_on_focused_holo_light=findRatioImage(data.btn_radio_on_focused_holo_light));}},{key:'btn_radio_on_holo_light',get:function get(){return imageCache.btn_radio_on_holo_light||(imageCache.btn_radio_on_holo_light=findRatioImage(data.btn_radio_on_holo_light));}},{key:'btn_radio_on_pressed_holo_light',get:function get(){return imageCache.btn_radio_on_pressed_holo_light||(imageCache.btn_radio_on_pressed_holo_light=findRatioImage(data.btn_radio_on_pressed_holo_light));}},{key:'btn_rating_star_off_normal_holo_light',get:function get(){return imageCache.btn_rating_star_off_normal_holo_light||(imageCache.btn_rating_star_off_normal_holo_light=findRatioImage(data.btn_rating_star_off_normal_holo_light));}},{key:'btn_rating_star_off_pressed_holo_light',get:function get(){return imageCache.btn_rating_star_off_pressed_holo_light||(imageCache.btn_rating_star_off_pressed_holo_light=findRatioImage(data.btn_rating_star_off_pressed_holo_light));}},{key:'btn_rating_star_on_normal_holo_light',get:function get(){return imageCache.btn_rating_star_on_normal_holo_light||(imageCache.btn_rating_star_on_normal_holo_light=findRatioImage(data.btn_rating_star_on_normal_holo_light));}},{key:'btn_rating_star_on_pressed_holo_light',get:function get(){return imageCache.btn_rating_star_on_pressed_holo_light||(imageCache.btn_rating_star_on_pressed_holo_light=findRatioImage(data.btn_rating_star_on_pressed_holo_light));}},{key:'dropdown_background_dark',get:function get(){return imageCache.dropdown_background_dark||(imageCache.dropdown_background_dark=findRatioImage(data.dropdown_background_dark));}},{key:'editbox_background_focus_yellow',get:function get(){return imageCache.editbox_background_focus_yellow||(imageCache.editbox_background_focus_yellow=findRatioImage(data.editbox_background_focus_yellow));}},{key:'editbox_background_normal',get:function get(){return imageCache.editbox_background_normal||(imageCache.editbox_background_normal=findRatioImage(data.editbox_background_normal));}},{key:'ic_menu_moreoverflow_normal_holo_dark',get:function get(){return imageCache.ic_menu_moreoverflow_normal_holo_dark||(imageCache.ic_menu_moreoverflow_normal_holo_dark=findRatioImage(data.ic_menu_moreoverflow_normal_holo_dark));}},{key:'menu_panel_holo_dark',get:function get(){return imageCache.menu_panel_holo_dark||(imageCache.menu_panel_holo_dark=findRatioImage(data.menu_panel_holo_dark));}},{key:'menu_panel_holo_light',get:function get(){return imageCache.menu_panel_holo_light||(imageCache.menu_panel_holo_light=findRatioImage(data.menu_panel_holo_light));}},{key:'popup_bottom_bright',get:function get(){return imageCache.popup_bottom_bright||(imageCache.popup_bottom_bright=findRatioImage(data.popup_bottom_bright));}},{key:'popup_center_bright',get:function get(){return imageCache.popup_center_bright||(imageCache.popup_center_bright=findRatioImage(data.popup_center_bright));}},{key:'popup_full_bright',get:function get(){return imageCache.popup_full_bright||(imageCache.popup_full_bright=findRatioImage(data.popup_full_bright));}},{key:'popup_top_bright',get:function get(){return imageCache.popup_top_bright||(imageCache.popup_top_bright=findRatioImage(data.popup_top_bright));}},{key:'progressbar_indeterminate_holo1',get:function get(){return imageCache.progressbar_indeterminate_holo1||(imageCache.progressbar_indeterminate_holo1=findRatioImage(data.progressbar_indeterminate_holo1));}},{key:'progressbar_indeterminate_holo2',get:function get(){return imageCache.progressbar_indeterminate_holo2||(imageCache.progressbar_indeterminate_holo2=findRatioImage(data.progressbar_indeterminate_holo2));}},{key:'progressbar_indeterminate_holo3',get:function get(){return imageCache.progressbar_indeterminate_holo3||(imageCache.progressbar_indeterminate_holo3=findRatioImage(data.progressbar_indeterminate_holo3));}},{key:'progressbar_indeterminate_holo4',get:function get(){return imageCache.progressbar_indeterminate_holo4||(imageCache.progressbar_indeterminate_holo4=findRatioImage(data.progressbar_indeterminate_holo4));}},{key:'progressbar_indeterminate_holo5',get:function get(){return imageCache.progressbar_indeterminate_holo5||(imageCache.progressbar_indeterminate_holo5=findRatioImage(data.progressbar_indeterminate_holo5));}},{key:'progressbar_indeterminate_holo6',get:function get(){return imageCache.progressbar_indeterminate_holo6||(imageCache.progressbar_indeterminate_holo6=findRatioImage(data.progressbar_indeterminate_holo6));}},{key:'progressbar_indeterminate_holo7',get:function get(){return imageCache.progressbar_indeterminate_holo7||(imageCache.progressbar_indeterminate_holo7=findRatioImage(data.progressbar_indeterminate_holo7));}},{key:'progressbar_indeterminate_holo8',get:function get(){return imageCache.progressbar_indeterminate_holo8||(imageCache.progressbar_indeterminate_holo8=findRatioImage(data.progressbar_indeterminate_holo8));}},{key:'rate_star_big_half_holo_light',get:function get(){return imageCache.rate_star_big_half_holo_light||(imageCache.rate_star_big_half_holo_light=findRatioImage(data.rate_star_big_half_holo_light));}},{key:'rate_star_big_off_holo_light',get:function get(){return imageCache.rate_star_big_off_holo_light||(imageCache.rate_star_big_off_holo_light=findRatioImage(data.rate_star_big_off_holo_light));}},{key:'rate_star_big_on_holo_light',get:function get(){return imageCache.rate_star_big_on_holo_light||(imageCache.rate_star_big_on_holo_light=findRatioImage(data.rate_star_big_on_holo_light));}},{key:'scrubber_control_disabled_holo',get:function get(){return imageCache.scrubber_control_disabled_holo||(imageCache.scrubber_control_disabled_holo=findRatioImage(data.scrubber_control_disabled_holo));}},{key:'scrubber_control_focused_holo',get:function get(){return imageCache.scrubber_control_focused_holo||(imageCache.scrubber_control_focused_holo=findRatioImage(data.scrubber_control_focused_holo));}},{key:'scrubber_control_normal_holo',get:function get(){return imageCache.scrubber_control_normal_holo||(imageCache.scrubber_control_normal_holo=findRatioImage(data.scrubber_control_normal_holo));}},{key:'scrubber_control_pressed_holo',get:function get(){return imageCache.scrubber_control_pressed_holo||(imageCache.scrubber_control_pressed_holo=findRatioImage(data.scrubber_control_pressed_holo));}},{key:'spinner_76_inner_holo',get:function get(){return imageCache.spinner_76_inner_holo||(imageCache.spinner_76_inner_holo=findRatioImage(data.spinner_76_inner_holo));}},{key:'spinner_76_outer_holo',get:function get(){return imageCache.spinner_76_outer_holo||(imageCache.spinner_76_outer_holo=findRatioImage(data.spinner_76_outer_holo));}}]);return image_base64;}();R.image_base64=image_base64;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var R;(function(R){var NetDrawable=androidui.image.NetDrawable;var ChangeImageSizeDrawable=androidui.image.ChangeImageSizeDrawable;var NinePatchDrawable=androidui.image.NinePatchDrawable;var density=android.content.res.Resources.getDisplayMetrics().density;var image=function(){function image(){_classCallCheck(this,image);}_createClass(image,null,[{key:'actionbar_ic_back_white',get:function get(){return new NetDrawable(R.image_base64.actionbar_ic_back_white);}},{key:'btn_check_off_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_disabled_focused_holo_light);}},{key:'btn_check_off_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_disabled_holo_light);}},{key:'btn_check_off_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_focused_holo_light);}},{key:'btn_check_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_holo_light);}},{key:'btn_check_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_off_pressed_holo_light);}},{key:'btn_check_on_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_disabled_focused_holo_light);}},{key:'btn_check_on_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_disabled_holo_light);}},{key:'btn_check_on_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_focused_holo_light);}},{key:'btn_check_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_holo_light);}},{key:'btn_check_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_check_on_pressed_holo_light);}},{key:'btn_default_disabled_focused_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_disabled_focused_holo_light);}},{key:'btn_default_disabled_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_disabled_holo_light);}},{key:'btn_default_focused_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_focused_holo_light);}},{key:'btn_default_normal_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_normal_holo_light);}},{key:'btn_default_pressed_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.btn_default_pressed_holo_light);}},{key:'btn_radio_off_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_disabled_focused_holo_light);}},{key:'btn_radio_off_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_disabled_holo_light);}},{key:'btn_radio_off_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_focused_holo_light);}},{key:'btn_radio_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_holo_light);}},{key:'btn_radio_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_off_pressed_holo_light);}},{key:'btn_radio_on_disabled_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_disabled_focused_holo_light);}},{key:'btn_radio_on_disabled_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_disabled_holo_light);}},{key:'btn_radio_on_focused_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_focused_holo_light);}},{key:'btn_radio_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_holo_light);}},{key:'btn_radio_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_radio_on_pressed_holo_light);}},{key:'btn_rating_star_off_normal_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_off_normal_holo_light);}},{key:'btn_rating_star_off_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_off_pressed_holo_light);}},{key:'btn_rating_star_on_normal_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_on_normal_holo_light);}},{key:'btn_rating_star_on_pressed_holo_light',get:function get(){return new NetDrawable(R.image_base64.btn_rating_star_on_pressed_holo_light);}},{key:'dropdown_background_dark',get:function get(){return new NinePatchDrawable(R.image_base64.dropdown_background_dark);}},{key:'editbox_background_focus_yellow',get:function get(){return new NinePatchDrawable(R.image_base64.editbox_background_focus_yellow);}},{key:'editbox_background_normal',get:function get(){return new NinePatchDrawable(R.image_base64.editbox_background_normal);}},{key:'ic_menu_moreoverflow_normal_holo_dark',get:function get(){return new NetDrawable(R.image_base64.ic_menu_moreoverflow_normal_holo_dark);}},{key:'menu_panel_holo_dark',get:function get(){return new NinePatchDrawable(R.image_base64.menu_panel_holo_dark);}},{key:'menu_panel_holo_light',get:function get(){return new NinePatchDrawable(R.image_base64.menu_panel_holo_light);}},{key:'popup_bottom_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_bottom_bright);}},{key:'popup_center_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_center_bright);}},{key:'popup_full_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_full_bright);}},{key:'popup_top_bright',get:function get(){return new NinePatchDrawable(R.image_base64.popup_top_bright);}},{key:'progressbar_indeterminate_holo1',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo1);}},{key:'progressbar_indeterminate_holo2',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo2);}},{key:'progressbar_indeterminate_holo3',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo3);}},{key:'progressbar_indeterminate_holo4',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo4);}},{key:'progressbar_indeterminate_holo5',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo5);}},{key:'progressbar_indeterminate_holo6',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo6);}},{key:'progressbar_indeterminate_holo7',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo7);}},{key:'progressbar_indeterminate_holo8',get:function get(){return new NetDrawable(R.image_base64.progressbar_indeterminate_holo8);}},{key:'rate_star_big_half_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_half_holo_light);}},{key:'rate_star_big_off_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_off_holo_light);}},{key:'rate_star_big_on_holo_light',get:function get(){return new NetDrawable(R.image_base64.rate_star_big_on_holo_light);}},{key:'scrubber_control_disabled_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_disabled_holo);}},{key:'scrubber_control_focused_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_focused_holo);}},{key:'scrubber_control_normal_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_normal_holo);}},{key:'scrubber_control_pressed_holo',get:function get(){return new NetDrawable(R.image_base64.scrubber_control_pressed_holo);}},{key:'spinner_76_inner_holo',get:function get(){return new NetDrawable(R.image_base64.spinner_76_inner_holo);}},{key:'spinner_76_outer_holo',get:function get(){return new NetDrawable(R.image_base64.spinner_76_outer_holo);}},{key:'spinner_48_outer_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_outer_holo,48*density,48*density);}},{key:'spinner_48_inner_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_inner_holo,48*density,48*density);}},{key:'spinner_16_outer_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_outer_holo,16*density,16*density);}},{key:'spinner_16_inner_holo',get:function get(){return new ChangeImageSizeDrawable(image.spinner_76_inner_holo,16*density,16*density);}},{key:'rate_star_small_off_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_half_holo_light,16*density,16*density);}},{key:'rate_star_small_half_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_off_holo_light,16*density,16*density);}},{key:'rate_star_small_on_holo_light',get:function get(){return new ChangeImageSizeDrawable(image.rate_star_big_on_holo_light,16*density,16*density);}}]);return image;}();R.image=image;R.image_base64.actionbar_ic_back_white;R.image_base64.btn_default_normal_holo_light;R.image_base64.dropdown_background_dark;R.image_base64.editbox_background_normal;R.image_base64.ic_menu_moreoverflow_normal_holo_dark;R.image_base64.menu_panel_holo_dark;R.image_base64.menu_panel_holo_light;R.image_base64.popup_bottom_bright;R.image_base64.popup_center_bright;R.image_base64.popup_full_bright;R.image_base64.popup_top_bright;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var R;(function(R){var ColorStateList=android.content.res.ColorStateList;var Color=android.graphics.Color;var color=function(){function color(){_classCallCheck(this,color);}_createClass(color,null,[{key:'textView_textColor',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0xffc0c0c0,0xff333333];var DefaultStyleTextColor=function(_ColorStateList){_inherits(DefaultStyleTextColor,_ColorStateList);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,(DefaultStyleTextColor.__proto__||Object.getPrototypeOf(DefaultStyleTextColor)).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}},{key:'primary_text_light_disable_only',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0x80000000,0xff000000];var DefaultStyleTextColor=function(_ColorStateList2){_inherits(DefaultStyleTextColor,_ColorStateList2);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,(DefaultStyleTextColor.__proto__||Object.getPrototypeOf(DefaultStyleTextColor)).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}},{key:'primary_text_dark_disable_only',get:function get(){var _defaultStates=[[-android.view.View.VIEW_STATE_ENABLED],[]];var _defaultColors=[0x80000000,0xffffffff];var DefaultStyleTextColor=function(_ColorStateList3){_inherits(DefaultStyleTextColor,_ColorStateList3);function DefaultStyleTextColor(){_classCallCheck(this,DefaultStyleTextColor);return _possibleConstructorReturn(this,(DefaultStyleTextColor.__proto__||Object.getPrototypeOf(DefaultStyleTextColor)).call(this,_defaultStates,_defaultColors));}return DefaultStyleTextColor;}(ColorStateList);return new DefaultStyleTextColor();}}]);return color;}();color.white=Color.WHITE;color.black=Color.BLACK;color.transparent=Color.TRANSPARENT;R.color=color;})(R=android.R||(android.R={}));})(android||(android={}));var goog;(function(goog){var math;(function(math){var Long=function(){function Long(low,high){_classCallCheck(this,Long);this.low_=low|0;this.high_=high|0;}_createClass(Long,[{key:'toInt',value:function toInt(){return this.low_;}},{key:'toNumber',value:function toNumber(){return this.high_*Long.TWO_PWR_32_DBL_+this.getLowBitsUnsigned();}},{key:'toString',value:function toString(opt_radix){var radix=opt_radix||10;if(radix<2||36=0?this.low_:Long.TWO_PWR_32_DBL_+this.low_;}},{key:'getNumBitsAbs',value:function getNumBitsAbs(){if(this.isNegative()){if(this.equals(Long.MIN_VALUE)){return 64;}else{return this.negate().getNumBitsAbs();}}else{var val=this.high_!=0?this.high_:this.low_;for(var bit=31;bit>0;bit--){if((val&1<0;}},{key:'greaterThanOrEqual',value:function greaterThanOrEqual(other){return this.compare(other)>=0;}},{key:'compare',value:function compare(other){if(this.equals(other)){return 0;}var thisNeg=this.isNegative();var otherNeg=other.isNegative();if(thisNeg&&!otherNeg){return-1;}if(!thisNeg&&otherNeg){return 1;}if(this.subtract(other).isNegative()){return-1;}else{return 1;}}},{key:'negate',value:function negate(){if(this.equals(Long.MIN_VALUE)){return Long.MIN_VALUE;}else{return this.not().add(Long.ONE);}}},{key:'add',value:function add(other){var a48=this.high_>>>16;var a32=this.high_&0xFFFF;var a16=this.low_>>>16;var a00=this.low_&0xFFFF;var b48=other.high_>>>16;var b32=other.high_&0xFFFF;var b16=other.low_>>>16;var b00=other.low_&0xFFFF;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=0xFFFF;c16+=a16+b16;c32+=c16>>>16;c16&=0xFFFF;c32+=a32+b32;c48+=c32>>>16;c32&=0xFFFF;c48+=a48+b48;c48&=0xFFFF;return Long.fromBits(c16<<16|c00,c48<<16|c32);}},{key:'subtract',value:function subtract(other){return this.add(other.negate());}},{key:'multiply',value:function multiply(other){if(this.isZero()){return Long.ZERO;}else if(other.isZero()){return Long.ZERO;}if(this.equals(Long.MIN_VALUE)){return other.isOdd()?Long.MIN_VALUE:Long.ZERO;}else if(other.equals(Long.MIN_VALUE)){return this.isOdd()?Long.MIN_VALUE:Long.ZERO;}if(this.isNegative()){if(other.isNegative()){return this.negate().multiply(other.negate());}else{return this.negate().multiply(other).negate();}}else if(other.isNegative()){return this.multiply(other.negate()).negate();}if(this.lessThan(Long.TWO_PWR_24_)&&other.lessThan(Long.TWO_PWR_24_)){return Long.fromNumber(this.toNumber()*other.toNumber());}var a48=this.high_>>>16;var a32=this.high_&0xFFFF;var a16=this.low_>>>16;var a00=this.low_&0xFFFF;var b48=other.high_>>>16;var b32=other.high_&0xFFFF;var b16=other.low_>>>16;var b00=other.low_&0xFFFF;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=0xFFFF;c16+=a16*b00;c32+=c16>>>16;c16&=0xFFFF;c16+=a00*b16;c32+=c16>>>16;c16&=0xFFFF;c32+=a32*b00;c48+=c32>>>16;c32&=0xFFFF;c32+=a16*b16;c48+=c32>>>16;c32&=0xFFFF;c32+=a00*b32;c48+=c32>>>16;c32&=0xFFFF;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=0xFFFF;return Long.fromBits(c16<<16|c00,c48<<16|c32);}},{key:'div',value:function div(other){if(other.isZero()){throw Error('division by zero');}else if(this.isZero()){return Long.ZERO;}if(this.equals(Long.MIN_VALUE)){if(other.equals(Long.ONE)||other.equals(Long.NEG_ONE)){return Long.MIN_VALUE;}else if(other.equals(Long.MIN_VALUE)){return Long.ONE;}else{var halfThis=this.shiftRight(1);var approx=halfThis.div(other).shiftLeft(1);if(approx.equals(Long.ZERO)){return other.isNegative()?Long.ONE:Long.NEG_ONE;}else{var _rem2=this.subtract(other.multiply(approx));var result=approx.add(_rem2.div(other));return result;}}}else if(other.equals(Long.MIN_VALUE)){return Long.ZERO;}if(this.isNegative()){if(other.isNegative()){return this.negate().div(other.negate());}else{return this.negate().div(other).negate();}}else if(other.isNegative()){return this.div(other.negate()).negate();}var res=Long.ZERO;var rem=this;while(rem.greaterThanOrEqual(other)){var _approx=Math.max(1,Math.floor(rem.toNumber()/other.toNumber()));var log2=Math.ceil(Math.log(_approx)/Math.LN2);var delta=log2<=48?1:Math.pow(2,log2-48);var approxRes=Long.fromNumber(_approx);var approxRem=approxRes.multiply(other);while(approxRem.isNegative()||approxRem.greaterThan(rem)){_approx-=delta;approxRes=Long.fromNumber(_approx);approxRem=approxRes.multiply(other);}if(approxRes.isZero()){approxRes=Long.ONE;}res=res.add(approxRes);rem=rem.subtract(approxRem);}return res;}},{key:'modulo',value:function modulo(other){return this.subtract(this.div(other).multiply(other));}},{key:'not',value:function not(){return Long.fromBits(~this.low_,~this.high_);}},{key:'and',value:function and(other){return Long.fromBits(this.low_&other.low_,this.high_&other.high_);}},{key:'or',value:function or(other){return Long.fromBits(this.low_|other.low_,this.high_|other.high_);}},{key:'xor',value:function xor(other){return Long.fromBits(this.low_^other.low_,this.high_^other.high_);}},{key:'shiftLeft',value:function shiftLeft(numBits){numBits&=63;if(numBits==0){return this;}else{var low=this.low_;if(numBits<32){var high=this.high_;return Long.fromBits(low<>>32-numBits);}else{return Long.fromBits(0,low<>>numBits|high<<32-numBits,high>>numBits);}else{return Long.fromBits(high>>numBits-32,high>=0?0:-1);}}}},{key:'shiftRightUnsigned',value:function shiftRightUnsigned(numBits){numBits&=63;if(numBits==0){return this;}else{var high=this.high_;if(numBits<32){var low=this.low_;return Long.fromBits(low>>>numBits|high<<32-numBits,high>>>numBits);}else if(numBits==32){return Long.fromBits(high,0);}else{return Long.fromBits(high>>>numBits-32,0);}}}}],[{key:'fromInt',value:function fromInt(value){if(-128<=value&&value<128){var cachedObj=Long.IntCache_[value];if(cachedObj){return cachedObj;}}var obj=new Long(value|0,value<0?-1:0);if(-128<=value&&value<128){Long.IntCache_[value]=obj;}return obj;}},{key:'fromNumber',value:function fromNumber(value){if(isNaN(value)||!isFinite(value)){return Long.ZERO;}else if(value<=-Long.TWO_PWR_63_DBL_){return Long.MIN_VALUE;}else if(value+1>=Long.TWO_PWR_63_DBL_){return Long.MAX_VALUE;}else if(value<0){return Long.fromNumber(-value).negate();}else{return new Long(value%Long.TWO_PWR_32_DBL_|0,value/Long.TWO_PWR_32_DBL_|0);}}},{key:'fromBits',value:function fromBits(lowBits,highBits){return new Long(lowBits,highBits);}},{key:'fromString',value:function fromString(str,opt_radix){if(str.length==0){throw Error('number format error: empty string');}var radix=opt_radix||10;if(radix<2||36=0){throw Error('number format error: interior "-" character: '+str);}var radixToPower=Long.fromNumber(Math.pow(radix,8));var result=Long.ZERO;for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:1;_classCallCheck(this,DecelerateInterpolator);this.mFactor=factor;}_createClass(DecelerateInterpolator,[{key:'getInterpolation',value:function getInterpolation(input){var result=void 0;if(this.mFactor==1.0){result=1.0-(1.0-input)*(1.0-input);}else{result=1.0-Math.pow(1.0-input,2*this.mFactor);}return result;}}]);return DecelerateInterpolator;}();animation.DecelerateInterpolator=DecelerateInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Matrix=android.graphics.Matrix;var StringBuilder=java.lang.StringBuilder;var Transformation=function(){function Transformation(){_classCallCheck(this,Transformation);this.mAlpha=0;this.mTransformationType=0;this.clear();}_createClass(Transformation,[{key:'clear',value:function clear(){if(this.mMatrix==null){this.mMatrix=new Matrix();}else{this.mMatrix.reset();}this.mAlpha=1.0;this.mTransformationType=Transformation.TYPE_BOTH;}},{key:'getTransformationType',value:function getTransformationType(){return this.mTransformationType;}},{key:'setTransformationType',value:function setTransformationType(transformationType){this.mTransformationType=transformationType;}},{key:'set',value:function set(t){this.mAlpha=t.getAlpha();this.mMatrix.set(t.getMatrix());this.mTransformationType=t.getTransformationType();}},{key:'compose',value:function compose(t){this.mAlpha*=t.getAlpha();this.mMatrix.preConcat(t.getMatrix());}},{key:'postCompose',value:function postCompose(t){this.mAlpha*=t.getAlpha();this.mMatrix.postConcat(t.getMatrix());}},{key:'getMatrix',value:function getMatrix(){return this.mMatrix;}},{key:'setAlpha',value:function setAlpha(alpha){this.mAlpha=alpha;}},{key:'getAlpha',value:function getAlpha(){return this.mAlpha;}},{key:'toString',value:function toString(){var sb=new StringBuilder(64);sb.append("Transformation");this.toShortString(sb);return sb.toString();}},{key:'toShortString',value:function toShortString(sb){sb=sb||new StringBuilder(64);sb.append("{alpha=");sb.append(this.mAlpha);sb.append(" matrix=");this.mMatrix.toShortString(sb);sb.append('}');}}]);return Transformation;}();Transformation.TYPE_IDENTITY=0x0;Transformation.TYPE_ALPHA=0x1;Transformation.TYPE_MATRIX=0x2;Transformation.TYPE_BOTH=Transformation.TYPE_ALPHA|Transformation.TYPE_MATRIX;animation.Transformation=Transformation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation_1){var RectF=android.graphics.RectF;var TypedValue=android.util.TypedValue;var Long=java.lang.Long;var AccelerateDecelerateInterpolator=android.view.animation.AccelerateDecelerateInterpolator;var AnimationUtils=android.view.animation.AnimationUtils;var Transformation=android.view.animation.Transformation;var Animation=function(){function Animation(){_classCallCheck(this,Animation);this.mEnded=false;this.mStarted=false;this.mCycleFlip=false;this.mInitialized=false;this.mFillBefore=true;this.mFillAfter=false;this.mFillEnabled=false;this.mStartTime=-1;this.mStartOffset=0;this.mDuration=0;this.mRepeatCount=0;this.mRepeated=0;this.mRepeatMode=Animation.RESTART;this.mZAdjustment=0;this.mBackgroundColor=0;this.mScaleFactor=1;this.mDetachWallpaper=false;this.mMore=true;this.mOneMoreTime=true;this.mPreviousRegion=new RectF();this.mRegion=new RectF();this.mTransformation=new Transformation();this.mPreviousTransformation=new Transformation();this.ensureInterpolator();}_createClass(Animation,[{key:'reset',value:function reset(){this.mPreviousRegion.setEmpty();this.mPreviousTransformation.clear();this.mInitialized=false;this.mCycleFlip=false;this.mRepeated=0;this.mMore=true;this.mOneMoreTime=true;this.mListenerHandler=null;}},{key:'cancel',value:function cancel(){if(this.mStarted&&!this.mEnded){this.fireAnimationEnd();this.mEnded=true;}this.mStartTime=Long.MIN_VALUE;this.mMore=this.mOneMoreTime=false;}},{key:'detach',value:function detach(){if(this.mStarted&&!this.mEnded){this.mEnded=true;this.fireAnimationEnd();}}},{key:'isInitialized',value:function isInitialized(){return this.mInitialized;}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){this.reset();this.mInitialized=true;}},{key:'setListenerHandler',value:function setListenerHandler(handler){var _this36=this;if(this.mListenerHandler==null){(function(){var inner_this=_this36;_this36.mOnStart={run:function run(){if(inner_this.mListener!=null){inner_this.mListener.onAnimationStart(inner_this);}}};_this36.mOnRepeat={run:function run(){if(inner_this.mListener!=null){inner_this.mListener.onAnimationRepeat(inner_this);}}};_this36.mOnEnd={run:function run(){if(inner_this.mListener!=null){inner_this.mListener.onAnimationEnd(inner_this);}}};})();}this.mListenerHandler=handler;}},{key:'setInterpolator',value:function setInterpolator(i){this.mInterpolator=i;}},{key:'setStartOffset',value:function setStartOffset(startOffset){this.mStartOffset=startOffset;}},{key:'setDuration',value:function setDuration(durationMillis){if(durationMillis<0){throw Error('new IllegalArgumentException("Animation duration cannot be negative")');}this.mDuration=durationMillis;}},{key:'restrictDuration',value:function restrictDuration(durationMillis){if(this.mStartOffset>durationMillis){this.mStartOffset=durationMillis;this.mDuration=0;this.mRepeatCount=0;return;}var dur=this.mDuration+this.mStartOffset;if(dur>durationMillis){this.mDuration=durationMillis-this.mStartOffset;dur=durationMillis;}if(this.mDuration<=0){this.mDuration=0;this.mRepeatCount=0;return;}if(this.mRepeatCount<0||this.mRepeatCount>durationMillis||dur*this.mRepeatCount>durationMillis){this.mRepeatCount=Math.floor(durationMillis/dur)-1;if(this.mRepeatCount<0){this.mRepeatCount=0;}}}},{key:'scaleCurrentDuration',value:function scaleCurrentDuration(scale){this.mDuration=Math.floor(this.mDuration*scale);this.mStartOffset=Math.floor(this.mStartOffset*scale);}},{key:'setStartTime',value:function setStartTime(startTimeMillis){this.mStartTime=startTimeMillis;this.mStarted=this.mEnded=false;this.mCycleFlip=false;this.mRepeated=0;this.mMore=true;}},{key:'start',value:function start(){this.setStartTime(-1);}},{key:'startNow',value:function startNow(){this.setStartTime(AnimationUtils.currentAnimationTimeMillis());}},{key:'setRepeatMode',value:function setRepeatMode(repeatMode){this.mRepeatMode=repeatMode;}},{key:'setRepeatCount',value:function setRepeatCount(repeatCount){if(repeatCount<0){repeatCount=Animation.INFINITE;}this.mRepeatCount=repeatCount;}},{key:'isFillEnabled',value:function isFillEnabled(){return this.mFillEnabled;}},{key:'setFillEnabled',value:function setFillEnabled(fillEnabled){this.mFillEnabled=fillEnabled;}},{key:'setFillBefore',value:function setFillBefore(fillBefore){this.mFillBefore=fillBefore;}},{key:'setFillAfter',value:function setFillAfter(fillAfter){this.mFillAfter=fillAfter;}},{key:'setZAdjustment',value:function setZAdjustment(zAdjustment){this.mZAdjustment=zAdjustment;}},{key:'setBackgroundColor',value:function setBackgroundColor(bg){this.mBackgroundColor=bg;}},{key:'getScaleFactor',value:function getScaleFactor(){return this.mScaleFactor;}},{key:'setDetachWallpaper',value:function setDetachWallpaper(detachWallpaper){this.mDetachWallpaper=detachWallpaper;}},{key:'getInterpolator',value:function getInterpolator(){return this.mInterpolator;}},{key:'getStartTime',value:function getStartTime(){return this.mStartTime;}},{key:'getDuration',value:function getDuration(){return this.mDuration;}},{key:'getStartOffset',value:function getStartOffset(){return this.mStartOffset;}},{key:'getRepeatMode',value:function getRepeatMode(){return this.mRepeatMode;}},{key:'getRepeatCount',value:function getRepeatCount(){return this.mRepeatCount;}},{key:'getFillBefore',value:function getFillBefore(){return this.mFillBefore;}},{key:'getFillAfter',value:function getFillAfter(){return this.mFillAfter;}},{key:'getZAdjustment',value:function getZAdjustment(){return this.mZAdjustment;}},{key:'getBackgroundColor',value:function getBackgroundColor(){return this.mBackgroundColor;}},{key:'getDetachWallpaper',value:function getDetachWallpaper(){return this.mDetachWallpaper;}},{key:'willChangeTransformationMatrix',value:function willChangeTransformationMatrix(){return true;}},{key:'willChangeBounds',value:function willChangeBounds(){return true;}},{key:'setAnimationListener',value:function setAnimationListener(listener){this.mListener=listener;}},{key:'ensureInterpolator',value:function ensureInterpolator(){if(this.mInterpolator==null){this.mInterpolator=new AccelerateDecelerateInterpolator();}}},{key:'computeDurationHint',value:function computeDurationHint(){return(this.getStartOffset()+this.getDuration())*(this.getRepeatCount()+1);}},{key:'getTransformation',value:function getTransformation(currentTime,outTransformation,scale){if(scale!=null)this.mScaleFactor=scale;if(this.mStartTime==-1){this.mStartTime=currentTime;}var startOffset=this.getStartOffset();var duration=this.mDuration;var normalizedTime=void 0;if(duration!=0){normalizedTime=(currentTime-(this.mStartTime+startOffset))/duration;}else{normalizedTime=currentTime=1.0;this.mMore=!expired;if(!this.mFillEnabled)normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);if((normalizedTime>=0.0||this.mFillBefore)&&(normalizedTime<=1.0||this.mFillAfter)){if(!this.mStarted){this.fireAnimationStart();this.mStarted=true;}if(this.mFillEnabled)normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);if(this.mCycleFlip){normalizedTime=1.0-normalizedTime;}var interpolatedTime=this.mInterpolator.getInterpolation(normalizedTime);this.applyTransformation(interpolatedTime,outTransformation);}if(expired){if(this.mRepeatCount==this.mRepeated){if(!this.mEnded){this.mEnded=true;this.fireAnimationEnd();}}else{if(this.mRepeatCount>0){this.mRepeated++;}if(this.mRepeatMode==Animation.REVERSE){this.mCycleFlip=!this.mCycleFlip;}this.mStartTime=-1;this.mMore=true;this.fireAnimationRepeat();}}if(!this.mMore&&this.mOneMoreTime){this.mOneMoreTime=false;return true;}return this.mMore;}},{key:'fireAnimationStart',value:function fireAnimationStart(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationStart(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnStart);}}},{key:'fireAnimationRepeat',value:function fireAnimationRepeat(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationRepeat(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnRepeat);}}},{key:'fireAnimationEnd',value:function fireAnimationEnd(){if(this.mListener!=null){if(this.mListenerHandler==null)this.mListener.onAnimationEnd(this);else this.mListenerHandler.postAtFrontOfQueue(this.mOnEnd);}}},{key:'hasStarted',value:function hasStarted(){return this.mStarted;}},{key:'hasEnded',value:function hasEnded(){return this.mEnded;}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){}},{key:'resolveSize',value:function resolveSize(type,value,size,parentSize){switch(type){case Animation.ABSOLUTE:return value;case Animation.RELATIVE_TO_SELF:return size*value;case Animation.RELATIVE_TO_PARENT:return parentSize*value;default:return value;}}},{key:'getInvalidateRegion',value:function getInvalidateRegion(left,top,right,bottom,invalidate,transformation){var tempRegion=this.mRegion;var previousRegion=this.mPreviousRegion;invalidate.set(left,top,right,bottom);transformation.getMatrix().mapRect(invalidate);invalidate.inset(-1.0,-1.0);tempRegion.set(invalidate);invalidate.union(previousRegion);previousRegion.set(tempRegion);var tempTransformation=this.mTransformation;var previousTransformation=this.mPreviousTransformation;tempTransformation.set(transformation);transformation.set(previousTransformation);previousTransformation.set(tempTransformation);}},{key:'initializeInvalidateRegion',value:function initializeInvalidateRegion(left,top,right,bottom){var region=this.mPreviousRegion;region.set(left,top,right,bottom);region.inset(-1.0,-1.0);if(this.mFillBefore){var previousTransformation=this.mPreviousTransformation;this.applyTransformation(this.mInterpolator.getInterpolation(0.0),previousTransformation);}}},{key:'hasAlpha',value:function hasAlpha(){return false;}}]);return Animation;}();Animation.INFINITE=-1;Animation.RESTART=1;Animation.REVERSE=2;Animation.START_ON_FIRST_FRAME=-1;Animation.ABSOLUTE=0;Animation.RELATIVE_TO_SELF=1;Animation.RELATIVE_TO_PARENT=2;Animation.ZORDER_NORMAL=0;Animation.ZORDER_TOP=1;Animation.ZORDER_BOTTOM=-1;Animation.USE_CLOSEGUARD=false;animation_1.Animation=Animation;(function(Animation){var Description=function(){function Description(){_classCallCheck(this,Description);this.type=0;this.value=0;}_createClass(Description,null,[{key:'parseValue',value:function parseValue(value){var d=new Description();if(value==null){d.type=Animation.ABSOLUTE;d.value=0;}else{if(value.endsWith('%p')){d.type=Animation.RELATIVE_TO_PARENT;d.value=Number.parseFloat(value.substring(0,value.length-2));}else if(value.endsWith('%')){d.type=Animation.RELATIVE_TO_SELF;d.value=Number.parseFloat(value.substring(0,value.length-1));}else{d.type=Animation.ABSOLUTE;d.value=TypedValue.complexToDimensionPixelSize(value);}}d.type=Animation.ABSOLUTE;d.value=0.0;return d;}}]);return Description;}();Animation.Description=Description;})(Animation=animation_1.Animation||(animation_1.Animation={}));})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var R;(function(R){var attr=function attr(){_classCallCheck(this,attr);};attr.textViewStyle=new Map().set('android:textSize','14sp').set('android:layerType','software').set('android:textColor','@android:color/textView_textColor').set('android:textColorHint','#ff808080');attr.buttonStyle=new Map(attr.textViewStyle).set('android:background','@android:drawable/btn_default').set('android:focusable','true').set('android:clickable','true').set('android:minHeight','48dp').set('android:minWidth','64dp').set('android:textSize','18sp').set('android:gravity','center');attr.editTextStyle=new Map(attr.textViewStyle).set('android:background','@android:drawable/editbox_background').set('android:focusable','true').set('android:focusableInTouchMode','true').set('android:clickable','true').set('android:textSize','18sp').set('android:gravity','center_vertical');attr.imageButtonStyle=new Map().set('android:background','@android:drawable/btn_default').set('android:focusable','true').set('android:clickable','true').set('android:gravity','center');attr.checkboxStyle=new Map(attr.buttonStyle).set('android:background','@null').set('android:button','@android:drawable/btn_check');attr.radiobuttonStyle=new Map(attr.buttonStyle).set('android:background','@null').set('android:button','@android:drawable/btn_radio');attr.checkedTextViewStyle=new Map().set('android:textAlignment','viewStart');attr.progressBarStyle=new Map().set('android:indeterminateOnly','true').set('android:indeterminateDrawable','@android:drawable/progress_medium_holo').set('android:indeterminateBehavior','repeat').set('android:indeterminateDuration','3500').set('android:minWidth','48dp').set('android:maxWidth','48dp').set('android:minHeight','48dp').set('android:maxHeight','48dp').set('android:mirrorForRtl','false');attr.progressBarStyleHorizontal=new Map().set('android:indeterminateOnly','false').set('android:progressDrawable','@android:drawable/progress_horizontal_holo').set('android:indeterminateDrawable','@android:drawable/progress_indeterminate_horizontal_holo').set('android:indeterminateBehavior','repeat').set('android:indeterminateDuration','3500').set('android:minHeight','20dp').set('android:maxHeight','20dp').set('android:mirrorForRtl','true');attr.progressBarStyleSmall=new Map(attr.progressBarStyle).set('android:indeterminateDrawable','@android:drawable/progress_small_holo').set('android:minWidth','16dp').set('android:maxWidth','16dp').set('android:minHeight','16dp').set('android:maxHeight','16dp');attr.progressBarStyleLarge=new Map(attr.progressBarStyle).set('android:indeterminateDrawable','@android:drawable/progress_large_holo').set('android:minWidth','76dp').set('android:maxWidth','76dp').set('android:minHeight','76dp').set('android:maxHeight','76dp');attr.seekBarStyle=new Map().set('android:indeterminateOnly','false').set('android:progressDrawable','@android:drawable/scrubber_progress_horizontal_holo_light').set('android:indeterminateDrawable','@android:drawable/scrubber_progress_horizontal_holo_light').set('android:minHeight','13dp').set('android:maxHeight','13dp').set('android:thumb','@android:drawable/scrubber_control_selector_holo').set('android:thumbOffset','16dp').set('android:focusable','true').set('android:paddingLeft','16dp').set('android:paddingRight','16dp').set('android:mirrorForRtl','true');attr.ratingBarStyle=new Map().set('android:indeterminateOnly','false').set('android:progressDrawable','@android:drawable/ratingbar_full_holo_light').set('android:indeterminateDrawable','@android:drawable/ratingbar_full_holo_light').set('android:minHeight','48dip').set('android:maxHeight','48dip').set('android:numStars','5').set('android:stepSize','0.5').set('android:thumb','@null').set('android:mirrorForRtl','true');attr.ratingBarStyleIndicator=new Map(attr.ratingBarStyle).set('android:indeterminateOnly','false').set('android:progressDrawable','@android:drawable/ratingbar_holo_light').set('android:indeterminateDrawable','@android:drawable/ratingbar_holo_light').set('android:minHeight','35dip').set('android:maxHeight','35dip').set('android:thumb','@null').set('android:isIndicator','true');attr.ratingBarStyleSmall=new Map(attr.ratingBarStyle).set('android:indeterminateOnly','false').set('android:progressDrawable','@android:drawable/ratingbar_small_holo_light').set('android:indeterminateDrawable','@android:drawable/ratingbar_small_holo_light').set('android:minHeight','16dip').set('android:maxHeight','16dip').set('android:thumb','@null').set('android:isIndicator','true');attr.absListViewStyle=new Map().set('android:scrollbars','vertical').set('android:fadingEdge','vertical');attr.gridViewStyle=new Map(attr.absListViewStyle).set('android:listSelector','@android:drawable/list_selector_background').set('android:numColumns','1');attr.listViewStyle=new Map(attr.absListViewStyle).set('android:divider','@android:drawable/list_divider').set('android:listSelector','@android:drawable/list_selector_background').set('android:dividerHeight','1');attr.expandableListViewStyle=new Map(attr.listViewStyle).set('android:childDivider','@android:drawable/list_divider');attr.numberPickerStyle=new Map().set('android:orientation','vertical').set('android:solidColor','transparent').set('android:selectionDivider','#cc33b5e5').set('android:selectionDividerHeight','2dp').set('android:selectionDividersDistance','48dp').set('android:internalMinWidth','64dp').set('android:internalMaxHeight','180dp').set('android:virtualButtonPressedDrawable','@android:drawable/item_background');attr.popupWindowStyle=new Map().set('android:popupBackground','@android:drawable/dropdown_background_dark').set('android:popupEnterAnimation','@android:anim/grow_fade_in_center').set('android:popupExitAnimation','@android:anim/shrink_fade_out_center');attr.listPopupWindowStyle=new Map().set('android:popupBackground','@android:drawable/menu_panel_holo_light').set('android:popupEnterAnimation','@android:anim/grow_fade_in_center').set('android:popupExitAnimation','@android:anim/shrink_fade_out_center');attr.popupMenuStyle=new Map().set('android:popupBackground','@android:drawable/menu_panel_holo_dark');attr.dropDownListViewStyle=new Map(attr.listViewStyle);attr.spinnerStyle=new Map().set('android:clickable','true').set('android:spinnerMode','dropdown').set('android:gravity','start|center_vertical').set('android:disableChildrenWhenDisabled','true').set('android:background','@android:drawable/btn_default').set('android:popupBackground','@android:drawable/menu_panel_holo_light').set('android:dropDownVerticalOffset','0dp').set('android:dropDownHorizontalOffset','0dp').set('android:dropDownWidth','wrap_content');attr.actionBarStyle=new Map().set('android:background','#ff333333');attr.scrollViewStyle=new Map().set('android:scrollbars','vertical').set('android:fadingEdge','vertical');R.attr=attr;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var view;(function(view_1){var LayoutDirection=android.util.LayoutDirection;var ColorDrawable=android.graphics.drawable.ColorDrawable;var ScrollBarDrawable=android.graphics.drawable.ScrollBarDrawable;var InsetDrawable=android.graphics.drawable.InsetDrawable;var ShadowDrawable=android.graphics.drawable.ShadowDrawable;var RoundRectDrawable=android.graphics.drawable.RoundRectDrawable;var PixelFormat=android.graphics.PixelFormat;var Matrix=android.graphics.Matrix;var Paint=android.graphics.Paint;var StringBuilder=java.lang.StringBuilder;var JavaObject=java.lang.JavaObject;var System=java.lang.System;var SystemClock=android.os.SystemClock;var Log=android.util.Log;var Rect=android.graphics.Rect;var RectF=android.graphics.RectF;var Point=android.graphics.Point;var Canvas=android.graphics.Canvas;var CopyOnWriteArrayList=java.lang.util.concurrent.CopyOnWriteArrayList;var ArrayList=java.util.ArrayList;var Resources=android.content.res.Resources;var Pools=android.util.Pools;var LinearInterpolator=android.view.animation.LinearInterpolator;var AnimationUtils=android.view.animation.AnimationUtils;var AttrBinder=androidui.attr.AttrBinder;var KeyEvent=android.view.KeyEvent;var Animation=android.view.animation.Animation;var Transformation=android.view.animation.Transformation;var View=function(_JavaObject){_inherits(View,_JavaObject);function View(context,bindElement,defStyleAttr){_classCallCheck(this,View);var _this37=_possibleConstructorReturn(this,(View.__proto__||Object.getPrototypeOf(View)).call(this));_this37.mPrivateFlags=0;_this37.mPrivateFlags2=0;_this37.mPrivateFlags3=0;_this37.mCurrentAnimation=null;_this37.mOldWidthMeasureSpec=Number.MIN_SAFE_INTEGER;_this37.mOldHeightMeasureSpec=Number.MIN_SAFE_INTEGER;_this37.mMeasuredWidth=0;_this37.mMeasuredHeight=0;_this37.mBackgroundSizeChanged=false;_this37.mBackgroundWidth=0;_this37.mBackgroundHeight=0;_this37.mHasPerformedLongPress=false;_this37.mMinWidth=0;_this37.mMinHeight=0;_this37.mDrawingCacheBackgroundColor=0;_this37.mTouchSlop=0;_this37.mVerticalScrollFactor=0;_this37.mOverScrollMode=View.OVER_SCROLL_IF_CONTENT_SCROLLS;_this37.mViewFlags=0;_this37.mLayerType=View.LAYER_TYPE_NONE;_this37.mCachingFailed=false;_this37.mWindowAttachCount=0;_this37.mTransientStateCount=0;_this37.mLastIsOpaque=false;_this37._mLeft=0;_this37._mRight=0;_this37._mTop=0;_this37._mBottom=0;_this37._mScrollX=0;_this37._mScrollY=0;_this37.mPaddingLeft=0;_this37.mPaddingRight=0;_this37.mPaddingTop=0;_this37.mPaddingBottom=0;_this37.mCornerRadiusTopLeft=0;_this37.mCornerRadiusTopRight=0;_this37.mCornerRadiusBottomRight=0;_this37.mCornerRadiusBottomLeft=0;_this37._stateAttrList=new androidui.attr.StateAttrList(_this37);_this37._attrBinder=new AttrBinder(_this37);_this37.mContext=context;_this37.mTouchSlop=view_1.ViewConfiguration.get().getScaledTouchSlop();_this37.initBindAttr();_this37.initBindElement(bindElement);var a=context.obtainStyledAttributes(bindElement,defStyleAttr);var background=null;var leftPadding=-1;var topPadding=-1;var rightPadding=-1;var bottomPadding=-1;var padding=-1;var viewFlagValues=0;var viewFlagMasks=0;var setScrollContainer=false;var x=0;var y=0;var tx=0;var ty=0;var rotation=0;var rotationX=0;var rotationY=0;var sx=1;var sy=1;var transformSet=false;var overScrollMode=_this37.mOverScrollMode;var initializeScrollbars=false;var _iteratorNormalCompletion39=true;var _didIteratorError39=false;var _iteratorError39=undefined;try{for(var _iterator39=a.getLowerCaseNoNamespaceAttrNames()[Symbol.iterator](),_step39;!(_iteratorNormalCompletion39=(_step39=_iterator39.next()).done);_iteratorNormalCompletion39=true){var attr=_step39.value;switch(attr){case'background':background=a.getDrawable(attr);break;case'padding':padding=a.getDimensionPixelSize(attr,-1);break;case'paddingleft':leftPadding=a.getDimensionPixelSize(attr,-1);break;case'paddingtop':topPadding=a.getDimensionPixelSize(attr,-1);break;case'paddingright':rightPadding=a.getDimensionPixelSize(attr,-1);break;case'paddingbottom':bottomPadding=a.getDimensionPixelSize(attr,-1);break;case'paddingstart':leftPadding=a.getDimensionPixelSize(attr,-1);break;case'paddingend':rightPadding=a.getDimensionPixelSize(attr,-1);break;case'scrollx':x=a.getDimensionPixelOffset(attr,0);break;case'scrolly':y=a.getDimensionPixelOffset(attr,0);break;case'alpha':_this37.setAlpha(a.getFloat(attr,1));break;case'transformpivotx':_this37.setPivotX(a.getDimensionPixelOffset(attr,0));break;case'transformpivoty':_this37.setPivotY(a.getDimensionPixelOffset(attr,0));break;case'translationx':tx=a.getDimensionPixelOffset(attr,0);transformSet=true;break;case'translationy':ty=a.getDimensionPixelOffset(attr,0);transformSet=true;break;case'rotation':rotation=a.getFloat(attr,0);transformSet=true;break;case'rotationx':rotationX=a.getFloat(attr,0);transformSet=true;break;case'rotationy':rotationY=a.getFloat(attr,0);transformSet=true;break;case'scalex':sx=a.getFloat(attr,1);transformSet=true;break;case'scaley':sy=a.getFloat(attr,1);transformSet=true;break;case'id':_this37.mID=a.getString(attr);break;case'tag':_this37.mTag=a.getText(attr);break;case'fitssystemwindows':break;case'focusable':if(a.getBoolean(attr,false)){viewFlagValues|=View.FOCUSABLE;viewFlagMasks|=View.FOCUSABLE_MASK;}break;case'focusableintouchmode':if(a.getBoolean(attr,false)){viewFlagValues|=View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE;viewFlagMasks|=View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE_MASK;}break;case'clickable':if(a.getBoolean(attr,false)){viewFlagValues|=View.CLICKABLE;viewFlagMasks|=View.CLICKABLE;}break;case'longclickable':if(a.getBoolean(attr,false)){viewFlagValues|=View.LONG_CLICKABLE;viewFlagMasks|=View.LONG_CLICKABLE;}break;case'saveenabled':break;case'duplicateparentstate':if(a.getBoolean(attr,false)){viewFlagValues|=View.DUPLICATE_PARENT_STATE;viewFlagMasks|=View.DUPLICATE_PARENT_STATE;}break;case'visibility':var visibility=a.getAttrValue(attr);if(visibility==='gone'){viewFlagValues|=View.GONE;viewFlagMasks|=View.VISIBILITY_MASK;}else if(visibility==='invisible'){viewFlagValues|=View.INVISIBLE;viewFlagMasks|=View.VISIBILITY_MASK;}else if(visibility==='visible'){viewFlagValues|=View.VISIBLE;viewFlagMasks|=View.VISIBILITY_MASK;}break;case'layoutdirection':break;case'drawingcachequality':break;case'contentdescription':break;case'labelfor':break;case'soundeffectsenabled':break;case'hapticfeedbackenabled':break;case'scrollbars':var scrollbars=a.getAttrValue(attr);if(scrollbars==='horizontal'){viewFlagValues|=View.SCROLLBARS_HORIZONTAL;viewFlagMasks|=View.SCROLLBARS_MASK;initializeScrollbars=true;}else if(scrollbars==='vertical'){viewFlagValues|=View.SCROLLBARS_VERTICAL;viewFlagMasks|=View.SCROLLBARS_MASK;initializeScrollbars=true;}break;case'fadingedge':case'requiresfadingedge':break;case'scrollbarstyle':break;case'isscrollcontainer':setScrollContainer=true;if(a.getBoolean(attr,false)){_this37.setScrollContainer(true);}break;case'keepscreenon':break;case'filtertoucheswhenobscured':break;case'nextfocusleft':_this37.mNextFocusLeftId=a.getResourceId(attr,View.NO_ID);break;case'nextfocusright':_this37.mNextFocusRightId=a.getResourceId(attr,View.NO_ID);break;case'nextfocusup':_this37.mNextFocusUpId=a.getResourceId(attr,View.NO_ID);break;case'nextfocusdown':_this37.mNextFocusDownId=a.getResourceId(attr,View.NO_ID);break;case'nextfocusforward':_this37.mNextFocusForwardId=a.getResourceId(attr,View.NO_ID);break;case'minwidth':_this37.mMinWidth=a.getDimensionPixelSize(attr,0);break;case'minheight':_this37.mMinHeight=a.getDimensionPixelSize(attr,0);break;case'onclick':_this37.setOnClickListenerByAttrValueString(a.getString(attr));break;case'overscrollmode':var scrollMode=View[('OVER_SCROLL_'+a.getAttrValue(attr)).toUpperCase()];overScrollMode=scrollMode||View.OVER_SCROLL_IF_CONTENT_SCROLLS;break;case'verticalscrollbarposition':break;case'layertype':if((a.getAttrValue(attr)+'').toLowerCase()=='software'){_this37.setLayerType(View.LAYER_TYPE_SOFTWARE);}else{_this37.setLayerType(View.LAYER_TYPE_NONE);}break;case'textdirection':break;case'textalignment':break;case'importantforaccessibility':break;case'accessibilityliveregion':break;case'cornerradius':case'cornerradiustopleft':case'cornerradiustopright':case'cornerradiusbottomleft':case'cornerradiusbottomright':case'viewshadowcolor':case'viewshadowdx':case'viewshadowdy':case'viewshadowradius':_this37._attrBinder.onAttrChange(attr,a.getAttrValue(attr),_this37.getContext());break;default:if(attr&&attr.startsWith('state_')){_this37._stateAttrList.addStatedAttr(attr,a.getAttrValue(attr));}}}}catch(err){_didIteratorError39=true;_iteratorError39=err;}finally{try{if(!_iteratorNormalCompletion39&&_iterator39.return){_iterator39.return();}}finally{if(_didIteratorError39){throw _iteratorError39;}}}_this37.setOverScrollMode(overScrollMode);if(background!=null){_this37.setBackground(background);}if(padding>=0){leftPadding=padding;topPadding=padding;rightPadding=padding;bottomPadding=padding;}_this37.setPadding(leftPadding>=0?leftPadding:_this37.mPaddingLeft,topPadding>=0?topPadding:_this37.mPaddingTop,rightPadding>=0?rightPadding:_this37.mPaddingRight,bottomPadding>=0?bottomPadding:_this37.mPaddingBottom);if(viewFlagMasks!=0){_this37.setFlags(viewFlagValues,viewFlagMasks);}if(initializeScrollbars){_this37.initializeScrollbars(a);}a.recycle();if(x!=0||y!=0){scrollTo(x,y);}if(transformSet){_this37.setTranslationX(tx);_this37.setTranslationY(ty);_this37.setRotation(rotation);_this37.setRotationX(rotationX);_this37.setRotationY(rotationY);_this37.setScaleX(sx);_this37.setScaleY(sy);}if(!setScrollContainer&&(viewFlagValues&View.SCROLLBARS_VERTICAL)!=0){_this37.setScrollContainer(true);}_this37.computeOpaqueFlags();return _this37;}_createClass(View,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'getWidth',value:function getWidth(){return this.mRight-this.mLeft;}},{key:'getHeight',value:function getHeight(){return this.mBottom-this.mTop;}},{key:'getPaddingLeft',value:function getPaddingLeft(){return this.mPaddingLeft;}},{key:'getPaddingTop',value:function getPaddingTop(){return this.mPaddingTop;}},{key:'getPaddingRight',value:function getPaddingRight(){return this.mPaddingRight;}},{key:'getPaddingBottom',value:function getPaddingBottom(){return this.mPaddingBottom;}},{key:'setPaddingLeft',value:function setPaddingLeft(left){if(this.mPaddingLeft!=left){this.mPaddingLeft=left;this.requestLayout();}}},{key:'setPaddingTop',value:function setPaddingTop(top){if(this.mPaddingTop!=top){this.mPaddingTop=top;this.requestLayout();}}},{key:'setPaddingRight',value:function setPaddingRight(right){if(this.mPaddingRight!=right){this.mPaddingRight=right;this.requestLayout();}}},{key:'setPaddingBottom',value:function setPaddingBottom(bottom){if(this.mPaddingBottom!=bottom){this.mPaddingBottom=bottom;this.requestLayout();}}},{key:'setPadding',value:function setPadding(left,top,right,bottom){var changed=false;if(this.mPaddingLeft!=left){changed=true;this.mPaddingLeft=left;}if(this.mPaddingTop!=top){changed=true;this.mPaddingTop=top;}if(this.mPaddingRight!=right){changed=true;this.mPaddingRight=right;}if(this.mPaddingBottom!=bottom){changed=true;this.mPaddingBottom=bottom;}if(changed){this.requestLayout();}}},{key:'resolvePadding',value:function resolvePadding(){}},{key:'setScrollX',value:function setScrollX(value){this.scrollTo(value,this.mScrollY);}},{key:'setScrollY',value:function setScrollY(value){this.scrollTo(this.mScrollX,value);}},{key:'getScrollX',value:function getScrollX(){return this.mScrollX;}},{key:'getScrollY',value:function getScrollY(){return this.mScrollY;}},{key:'offsetTopAndBottom',value:function offsetTopAndBottom(offset){if(offset!=0){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){var p=this.mParent;if(p!=null&&this.mAttachInfo!=null){var r=this.mAttachInfo.mTmpInvalRect;var minTop=void 0;var maxBottom=void 0;var yLoc=void 0;if(offset<0){minTop=this.mTop+offset;maxBottom=this.mBottom;yLoc=offset;}else{minTop=this.mTop;maxBottom=this.mBottom+offset;yLoc=0;}r.set(0,yLoc,this.mRight-this.mLeft,maxBottom-minTop);p.invalidateChild(this,r);}}else{this.invalidateViewProperty(false,false);}this.mTop+=offset;this.mBottom+=offset;if(!matrixIsIdentity){this.invalidateViewProperty(false,true);}this.invalidateParentIfNeeded();}}},{key:'offsetLeftAndRight',value:function offsetLeftAndRight(offset){if(offset!=0){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){var p=this.mParent;if(p!=null&&this.mAttachInfo!=null){var r=this.mAttachInfo.mTmpInvalRect;var minLeft=void 0;var maxRight=void 0;if(offset<0){minLeft=this.mLeft+offset;maxRight=this.mRight;}else{minLeft=this.mLeft;maxRight=this.mRight+offset;}r.set(0,0,maxRight-minLeft,this.mBottom-this.mTop);p.invalidateChild(this,r);}}else{this.invalidateViewProperty(false,false);}this.mLeft+=offset;this.mRight+=offset;if(!matrixIsIdentity){this.invalidateViewProperty(false,true);}this.invalidateParentIfNeeded();}}},{key:'getMatrix',value:function getMatrix(){if(this.mTransformationInfo!=null){this.updateMatrix();return this.mTransformationInfo.mMatrix;}return Matrix.IDENTITY_MATRIX;}},{key:'hasIdentityMatrix',value:function hasIdentityMatrix(){if(this.mTransformationInfo!=null){this.updateMatrix();return this.mTransformationInfo.mMatrixIsIdentity;}return true;}},{key:'ensureTransformationInfo',value:function ensureTransformationInfo(){if(this.mTransformationInfo==null){this.mTransformationInfo=new View.TransformationInfo();}}},{key:'updateMatrix',value:function updateMatrix(){var info=this.mTransformationInfo;if(info==null){this._syncMatrixToElement();return;}if(info.mMatrixDirty){if((this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==0){if(this.mRight-this.mLeft!=info.mPrevWidth||this.mBottom-this.mTop!=info.mPrevHeight){info.mPrevWidth=this.mRight-this.mLeft;info.mPrevHeight=this.mBottom-this.mTop;info.mPivotX=info.mPrevWidth/2;info.mPivotY=info.mPrevHeight/2;}}info.mMatrix.reset();info.mMatrix.setTranslate(info.mTranslationX,info.mTranslationY);info.mMatrix.preRotate(info.mRotation,info.mPivotX,info.mPivotY);info.mMatrix.preScale(info.mScaleX,info.mScaleY,info.mPivotX,info.mPivotY);info.mMatrixDirty=false;info.mMatrixIsIdentity=info.mMatrix.isIdentity();info.mInverseMatrixDirty=true;}this._syncMatrixToElement();}},{key:'getRotation',value:function getRotation(){return this.mTransformationInfo!=null?this.mTransformationInfo.mRotation:0;}},{key:'setRotation',value:function setRotation(rotation){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mRotation!=rotation){this.invalidateViewProperty(true,false);info.mRotation=rotation;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getRotationY',value:function getRotationY(){return 0;}},{key:'setRotationY',value:function setRotationY(rotationY){}},{key:'getRotationX',value:function getRotationX(){return 0;}},{key:'setRotationX',value:function setRotationX(rotationX){}},{key:'getScaleX',value:function getScaleX(){return this.mTransformationInfo!=null?this.mTransformationInfo.mScaleX:1;}},{key:'setScaleX',value:function setScaleX(scaleX){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mScaleX!=scaleX){this.invalidateViewProperty(true,false);info.mScaleX=scaleX;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getScaleY',value:function getScaleY(){return this.mTransformationInfo!=null?this.mTransformationInfo.mScaleY:1;}},{key:'setScaleY',value:function setScaleY(scaleY){this.ensureTransformationInfo();var info=this.mTransformationInfo;if(info.mScaleY!=scaleY){this.invalidateViewProperty(true,false);info.mScaleY=scaleY;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getPivotX',value:function getPivotX(){return this.mTransformationInfo!=null?this.mTransformationInfo.mPivotX:0;}},{key:'setPivotX',value:function setPivotX(pivotX){this.ensureTransformationInfo();var info=this.mTransformationInfo;var pivotSet=(this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==View.PFLAG_PIVOT_EXPLICITLY_SET;if(info.mPivotX!=pivotX||!pivotSet){this.mPrivateFlags|=View.PFLAG_PIVOT_EXPLICITLY_SET;this.invalidateViewProperty(true,false);info.mPivotX=pivotX;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getPivotY',value:function getPivotY(){return this.mTransformationInfo!=null?this.mTransformationInfo.mPivotY:0;}},{key:'setPivotY',value:function setPivotY(pivotY){this.ensureTransformationInfo();var info=this.mTransformationInfo;var pivotSet=(this.mPrivateFlags&View.PFLAG_PIVOT_EXPLICITLY_SET)==View.PFLAG_PIVOT_EXPLICITLY_SET;if(info.mPivotY!=pivotY||!pivotSet){this.mPrivateFlags|=View.PFLAG_PIVOT_EXPLICITLY_SET;this.invalidateViewProperty(true,false);info.mPivotY=pivotY;info.mMatrixDirty=true;this.invalidateViewProperty(false,true);if((this.mPrivateFlags2&View.PFLAG2_VIEW_QUICK_REJECTED)==View.PFLAG2_VIEW_QUICK_REJECTED){this.invalidateParentIfNeeded();}}}},{key:'getAlpha',value:function getAlpha(){return this.mTransformationInfo!=null?this.mTransformationInfo.mAlpha:1;}},{key:'hasOverlappingRendering',value:function hasOverlappingRendering(){return true;}},{key:'setAlpha',value:function setAlpha(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mAlpha!=alpha){this.mTransformationInfo.mAlpha=alpha;if(this.onSetAlpha(Math.floor(alpha*255))){this.mPrivateFlags|=View.PFLAG_ALPHA_SET;this.invalidateParentCaches();this.invalidate(true);}else{this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;this.invalidateViewProperty(true,false);}}}},{key:'setAlphaNoInvalidation',value:function setAlphaNoInvalidation(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mAlpha!=alpha){this.mTransformationInfo.mAlpha=alpha;var subclassHandlesAlpha=this.onSetAlpha(Math.floor(alpha*255));if(subclassHandlesAlpha){this.mPrivateFlags|=View.PFLAG_ALPHA_SET;return true;}else{this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;}}return false;}},{key:'setTransitionAlpha',value:function setTransitionAlpha(alpha){this.ensureTransformationInfo();if(this.mTransformationInfo.mTransitionAlpha!=alpha){this.mTransformationInfo.mTransitionAlpha=alpha;this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;this.invalidateViewProperty(true,false);}}},{key:'getFinalAlpha',value:function getFinalAlpha(){if(this.mTransformationInfo!=null){return this.mTransformationInfo.mAlpha*this.mTransformationInfo.mTransitionAlpha;}return 1;}},{key:'getTransitionAlpha',value:function getTransitionAlpha(){return this.mTransformationInfo!=null?this.mTransformationInfo.mTransitionAlpha:1;}},{key:'getTop',value:function getTop(){return this.mTop;}},{key:'setTop',value:function setTop(top){if(top!=this.mTop){this.updateMatrix();var matrixIsIdentity=this.mTransformationInfo==null||this.mTransformationInfo.mMatrixIsIdentity;if(matrixIsIdentity){if(this.mAttachInfo!=null){var minTop=void 0;var yLoc=void 0;if(top2&&arguments[2]!==undefined?arguments[2]:0;return localX>=-slop&&localY>=-slop&&localXthis.mTop&&this.mRight>this.mLeft){this.mParent.focusableViewAvailable(this);}}}if((changed&View.GONE)!=0){this.requestLayout();if((this.mViewFlags&View.VISIBILITY_MASK)==View.GONE){if(this.hasFocus())this.clearFocus();this.destroyDrawingCache();if(this.mParent instanceof View){this.mParent.invalidate(true);}this.mPrivateFlags|=View.PFLAG_DRAWN;}}if((changed&View.INVISIBLE)!=0){this.mPrivateFlags|=View.PFLAG_DRAWN;if((this.mViewFlags&View.VISIBILITY_MASK)==View.INVISIBLE){if(this.getRootView()!=this){if(this.hasFocus())this.clearFocus();}}}if((changed&View.VISIBILITY_MASK)!=0){if(newVisibility!=View.VISIBLE){this.cleanupDraw();}if(this.mParent instanceof view_1.ViewGroup){this.mParent.onChildVisibilityChanged(this,changed&View.VISIBILITY_MASK,newVisibility);this.mParent.invalidate(true);}else if(this.mParent!=null){this.mParent.invalidateChild(this,null);}this.dispatchVisibilityChanged(this,newVisibility);this.syncVisibleToElement();}if((changed&View.WILL_NOT_CACHE_DRAWING)!=0){this.destroyDrawingCache();}if((changed&View.DRAWING_CACHE_ENABLED)!=0){this.destroyDrawingCache();this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;this.invalidateParentCaches();}if((changed&View.DRAW_MASK)!=0){if((this.mViewFlags&View.WILL_NOT_DRAW)!=0){if(this.mBackground!=null){this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;this.mPrivateFlags|=View.PFLAG_ONLY_DRAWS_BACKGROUND;}else{this.mPrivateFlags|=View.PFLAG_SKIP_DRAW;}}else{this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;}this.requestLayout();this.invalidate(true);}}},{key:'bringToFront',value:function bringToFront(){if(this.mParent!=null){this.mParent.bringChildToFront(this);}}},{key:'onScrollChanged',value:function onScrollChanged(l,t,oldl,oldt){this.mBackgroundSizeChanged=true;var rootImpl=this.getViewRootImpl();if(rootImpl!=null){rootImpl.mViewScrollChanged=true;}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){}},{key:'getTouchables',value:function getTouchables(){var result=new ArrayList();this.addTouchables(result);return result;}},{key:'addTouchables',value:function addTouchables(views){var viewFlags=this.mViewFlags;if(((viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE)&&(viewFlags&View.ENABLED_MASK)==View.ENABLED){views.add(this);}}},{key:'requestRectangleOnScreen',value:function requestRectangleOnScreen(rectangle){var immediate=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(this.mParent==null){return false;}var child=this;var position=this.mAttachInfo!=null?this.mAttachInfo.mTmpTransformRect:new RectF();position.set(rectangle);var parent=this.mParent;var scrolled=false;while(parent!=null){rectangle.set(Math.floor(position.left),Math.floor(position.top),Math.floor(position.right),Math.floor(position.bottom));scrolled=parent.requestChildRectangleOnScreen(child,rectangle,immediate)||scrolled;if(!child.hasIdentityMatrix()){child.getMatrix().mapRect(position);}position.offset(child.mLeft,child.mTop);if(!(parent instanceof View)){break;}var parentView=parent;position.offset(-parentView.getScrollX(),-parentView.getScrollY());child=parentView;parent=child.getParent();}return scrolled;}},{key:'onFocusLost',value:function onFocusLost(){this.resetPressedState();}},{key:'resetPressedState',value:function resetPressedState(){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return;}if(this.isPressed()){this.setPressed(false);if(!this.mHasPerformedLongPress){this.removeLongPressCallback();}}}},{key:'isFocused',value:function isFocused(){return(this.mPrivateFlags&View.PFLAG_FOCUSED)!=0;}},{key:'findFocus',value:function findFocus(){return(this.mPrivateFlags&View.PFLAG_FOCUSED)!=0?this:null;}},{key:'getNextFocusLeftId',value:function getNextFocusLeftId(){return this.mNextFocusLeftId;}},{key:'setNextFocusLeftId',value:function setNextFocusLeftId(nextFocusLeftId){this.mNextFocusLeftId=nextFocusLeftId;}},{key:'getNextFocusRightId',value:function getNextFocusRightId(){return this.mNextFocusRightId;}},{key:'setNextFocusRightId',value:function setNextFocusRightId(nextFocusRightId){this.mNextFocusRightId=nextFocusRightId;}},{key:'getNextFocusUpId',value:function getNextFocusUpId(){return this.mNextFocusUpId;}},{key:'setNextFocusUpId',value:function setNextFocusUpId(nextFocusUpId){this.mNextFocusUpId=nextFocusUpId;}},{key:'getNextFocusDownId',value:function getNextFocusDownId(){return this.mNextFocusDownId;}},{key:'setNextFocusDownId',value:function setNextFocusDownId(nextFocusDownId){this.mNextFocusDownId=nextFocusDownId;}},{key:'getNextFocusForwardId',value:function getNextFocusForwardId(){return this.mNextFocusForwardId;}},{key:'setNextFocusForwardId',value:function setNextFocusForwardId(nextFocusForwardId){this.mNextFocusForwardId=nextFocusForwardId;}},{key:'setFocusable',value:function setFocusable(focusable){if(!focusable){this.setFlags(0,View.FOCUSABLE_IN_TOUCH_MODE);}this.setFlags(focusable?View.FOCUSABLE:View.NOT_FOCUSABLE,View.FOCUSABLE_MASK);}},{key:'isFocusable',value:function isFocusable(){return View.FOCUSABLE==(this.mViewFlags&View.FOCUSABLE_MASK);}},{key:'setFocusableInTouchMode',value:function setFocusableInTouchMode(focusableInTouchMode){this.setFlags(focusableInTouchMode?View.FOCUSABLE_IN_TOUCH_MODE:0,View.FOCUSABLE_IN_TOUCH_MODE);if(focusableInTouchMode){this.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}}},{key:'isFocusableInTouchMode',value:function isFocusableInTouchMode(){return View.FOCUSABLE_IN_TOUCH_MODE==(this.mViewFlags&View.FOCUSABLE_IN_TOUCH_MODE);}},{key:'hasFocusable',value:function hasFocusable(){return(this.mViewFlags&View.VISIBILITY_MASK)==View.VISIBLE&&this.isFocusable();}},{key:'clearFocus',value:function clearFocus(){if(View.DBG){System.out.println(this+" clearFocus()");}this.clearFocusInternal(true,true);}},{key:'clearFocusInternal',value:function clearFocusInternal(propagate,refocus){if((this.mPrivateFlags&View.PFLAG_FOCUSED)!=0){this.mPrivateFlags&=~View.PFLAG_FOCUSED;if(propagate&&this.mParent!=null){this.mParent.clearChildFocus(this);}this.onFocusChanged(false,0,null);this.refreshDrawableState();if(propagate&&(!refocus||!this.rootViewRequestFocus())){this.notifyGlobalFocusCleared(this);}}}},{key:'notifyGlobalFocusCleared',value:function notifyGlobalFocusCleared(oldFocus){}},{key:'rootViewRequestFocus',value:function rootViewRequestFocus(){var root=this.getRootView();return root!=null&&root.requestFocus();}},{key:'unFocus',value:function unFocus(){if(View.DBG){System.out.println(this+" unFocus()");}this.clearFocusInternal(false,false);}},{key:'hasFocus',value:function hasFocus(){return(this.mPrivateFlags&View.PFLAG_FOCUSED)!=0;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){if(!gainFocus){if(this.isPressed()){this.setPressed(false);}this.onFocusLost();}this.invalidate(true);var li=this.mListenerInfo;if(li!=null&&li.mOnFocusChangeListener!=null){li.mOnFocusChangeListener.onFocusChange(this,gainFocus);}if(this.mAttachInfo!=null){this.mAttachInfo.mKeyDispatchState.reset(this);}}},{key:'focusSearch',value:function focusSearch(direction){if(this.mParent!=null){return this.mParent.focusSearch(this,direction);}else{return null;}}},{key:'dispatchUnhandledMove',value:function dispatchUnhandledMove(focused,direction){return false;}},{key:'findUserSetNextFocus',value:function findUserSetNextFocus(root,direction){var _this38=this;switch(direction){case View.FOCUS_LEFT:if(!this.mNextFocusLeftId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusLeftId);case View.FOCUS_RIGHT:if(!this.mNextFocusRightId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusRightId);case View.FOCUS_UP:if(!this.mNextFocusUpId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusUpId);case View.FOCUS_DOWN:if(!this.mNextFocusDownId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusDownId);case View.FOCUS_FORWARD:if(!this.mNextFocusForwardId)return null;return this.findViewInsideOutShouldExist(root,this.mNextFocusForwardId);case View.FOCUS_BACKWARD:{var _ret4=function(){if(!_this38.mID)return{v:null};var id=_this38.mID;return{v:root.findViewByPredicateInsideOut(_this38,{apply:function apply(t){return t.mNextFocusForwardId==id;}})};}();if((typeof _ret4==='undefined'?'undefined':_typeof(_ret4))==="object")return _ret4.v;}}return null;}},{key:'findViewInsideOutShouldExist',value:function findViewInsideOutShouldExist(root,id){if(this.mMatchIdPredicate==null){this.mMatchIdPredicate=new MatchIdPredicate();}this.mMatchIdPredicate.mId=id;var result=root.findViewByPredicateInsideOut(this,this.mMatchIdPredicate);if(result==null){Log.w(View.VIEW_LOG_TAG,"couldn't find view with id "+id);}return result;}},{key:'getFocusables',value:function getFocusables(direction){var result=new ArrayList(24);this.addFocusables(result,direction);return result;}},{key:'addFocusables',value:function addFocusables(views,direction){var focusableMode=arguments.length>2&&arguments[2]!==undefined?arguments[2]:View.FOCUSABLES_TOUCH_MODE;if(views==null){return;}if(!this.isFocusable()){return;}if((focusableMode&View.FOCUSABLES_TOUCH_MODE)==View.FOCUSABLES_TOUCH_MODE&&this.isInTouchMode()&&!this.isFocusableInTouchMode()){return;}views.add(this);}},{key:'setOnFocusChangeListener',value:function setOnFocusChangeListener(l){if(typeof l=="function"){l=View.OnFocusChangeListener.fromFunction(l);}this.getListenerInfo().mOnFocusChangeListener=l;}},{key:'getOnFocusChangeListener',value:function getOnFocusChangeListener(){var li=this.mListenerInfo;return li!=null?li.mOnFocusChangeListener:null;}},{key:'requestFocus',value:function requestFocus(){var direction=arguments.length>0&&arguments[0]!==undefined?arguments[0]:View.FOCUS_DOWN;var previouslyFocusedRect=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;return this.requestFocusNoSearch(direction,previouslyFocusedRect);}},{key:'requestFocusNoSearch',value:function requestFocusNoSearch(direction,previouslyFocusedRect){if((this.mViewFlags&View.FOCUSABLE_MASK)!=View.FOCUSABLE||(this.mViewFlags&View.VISIBILITY_MASK)!=View.VISIBLE){return false;}if(this.isInTouchMode()&&View.FOCUSABLE_IN_TOUCH_MODE!=(this.mViewFlags&View.FOCUSABLE_IN_TOUCH_MODE)){return false;}if(this.hasAncestorThatBlocksDescendantFocus()){return false;}this.handleFocusGainInternal(direction,previouslyFocusedRect);return true;}},{key:'requestFocusFromTouch',value:function requestFocusFromTouch(){if(this.isInTouchMode()){var viewRoot=this.getViewRootImpl();if(viewRoot!=null){viewRoot.ensureTouchMode(false);}}return this.requestFocus(View.FOCUS_DOWN);}},{key:'hasAncestorThatBlocksDescendantFocus',value:function hasAncestorThatBlocksDescendantFocus(){var ancestor=this.mParent;while(ancestor instanceof view_1.ViewGroup){var vgAncestor=ancestor;if(vgAncestor.getDescendantFocusability()==view_1.ViewGroup.FOCUS_BLOCK_DESCENDANTS){return true;}else{ancestor=vgAncestor.getParent();}}return false;}},{key:'handleFocusGainInternal',value:function handleFocusGainInternal(direction,previouslyFocusedRect){if(View.DBG){System.out.println(this+" requestFocus()");}if((this.mPrivateFlags&View.PFLAG_FOCUSED)==0){this.mPrivateFlags|=View.PFLAG_FOCUSED;var oldFocus=this.mAttachInfo!=null?this.getRootView().findFocus():null;if(this.mParent!=null){this.mParent.requestChildFocus(this,this);}this.onFocusChanged(true,direction,previouslyFocusedRect);this.refreshDrawableState();}}},{key:'hasTransientState',value:function hasTransientState(){return(this.mPrivateFlags2&View.PFLAG2_HAS_TRANSIENT_STATE)==View.PFLAG2_HAS_TRANSIENT_STATE;}},{key:'setHasTransientState',value:function setHasTransientState(hasTransientState){this.mTransientStateCount=hasTransientState?this.mTransientStateCount+1:this.mTransientStateCount-1;if(this.mTransientStateCount<0){this.mTransientStateCount=0;Log.e(View.VIEW_LOG_TAG,"hasTransientState decremented below 0: "+"unmatched pair of setHasTransientState calls");}else if(hasTransientState&&this.mTransientStateCount==1||!hasTransientState&&this.mTransientStateCount==0){this.mPrivateFlags2=this.mPrivateFlags2&~View.PFLAG2_HAS_TRANSIENT_STATE|(hasTransientState?View.PFLAG2_HAS_TRANSIENT_STATE:0);if(this.mParent!=null){this.mParent.childHasTransientStateChanged(this,hasTransientState);}}}},{key:'isScrollContainer',value:function isScrollContainer(){return(this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0;}},{key:'setScrollContainer',value:function setScrollContainer(isScrollContainer){if(isScrollContainer){if(this.mAttachInfo!=null&&(this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)==0){this.mAttachInfo.mScrollContainers.add(this);this.mPrivateFlags|=View.PFLAG_SCROLL_CONTAINER_ADDED;}this.mPrivateFlags|=View.PFLAG_SCROLL_CONTAINER;}else{if((this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0){this.mAttachInfo.mScrollContainers.delete(this);}this.mPrivateFlags&=~(View.PFLAG_SCROLL_CONTAINER|View.PFLAG_SCROLL_CONTAINER_ADDED);}}},{key:'isInTouchMode',value:function isInTouchMode(){if(this.getViewRootImpl()!=null){return this.getViewRootImpl().mInTouchMode;}else{return false;}}},{key:'isShown',value:function isShown(){var current=this;do{if((current.mViewFlags&View.VISIBILITY_MASK)!=View.VISIBLE){return false;}var parent=current.mParent;if(parent==null){return false;}if(!(parent instanceof View)){return true;}current=parent;}while(current!=null);return false;}},{key:'getVisibility',value:function getVisibility(){return this.mViewFlags&View.VISIBILITY_MASK;}},{key:'setVisibility',value:function setVisibility(visibility){this.setFlags(visibility,View.VISIBILITY_MASK);if(this.mBackground!=null)this.mBackground.setVisible(visibility==View.VISIBLE,false);}},{key:'dispatchVisibilityChanged',value:function dispatchVisibilityChanged(changedView,visibility){this.onVisibilityChanged(changedView,visibility);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){if(visibility==View.VISIBLE){if(this.mAttachInfo!=null){this.initialAwakenScrollBars();}else{this.mPrivateFlags|=View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;}}}},{key:'dispatchDisplayHint',value:function dispatchDisplayHint(hint){this.onDisplayHint(hint);}},{key:'onDisplayHint',value:function onDisplayHint(hint){}},{key:'dispatchWindowVisibilityChanged',value:function dispatchWindowVisibilityChanged(visibility){this.onWindowVisibilityChanged(visibility);}},{key:'onWindowVisibilityChanged',value:function onWindowVisibilityChanged(visibility){if(visibility==View.VISIBLE){this.initialAwakenScrollBars();}}},{key:'getWindowVisibility',value:function getWindowVisibility(){return this.mAttachInfo!=null?this.mAttachInfo.mWindowVisibility:View.GONE;}},{key:'isEnabled',value:function isEnabled(){return(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED;}},{key:'setEnabled',value:function setEnabled(enabled){if(enabled==this.isEnabled())return;this.setFlags(enabled?View.ENABLED:View.DISABLED,View.ENABLED_MASK);this.refreshDrawableState();this.invalidate(true);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(event){if(event.isPointerEvent()){var action=event.getAction();if(action==view_1.MotionEvent.ACTION_HOVER_ENTER||action==view_1.MotionEvent.ACTION_HOVER_MOVE||action==view_1.MotionEvent.ACTION_HOVER_EXIT){}else if(this.dispatchGenericPointerEvent(event)){return true;}}if(this.dispatchGenericMotionEventInternal(event)){return true;}return false;}},{key:'dispatchGenericMotionEventInternal',value:function dispatchGenericMotionEventInternal(event){var li=this.mListenerInfo;if(li!=null&&li.mOnGenericMotionListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnGenericMotionListener.onGenericMotion(this,event)){return true;}if(this.onGenericMotionEvent(event)){return true;}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'dispatchGenericPointerEvent',value:function dispatchGenericPointerEvent(event){return false;}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var li=this.mListenerInfo;if(li!=null&&li.mOnKeyListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnKeyListener.onKey(this,event.getKeyCode(),event)){return true;}if(event.dispatch(this,this.mAttachInfo!=null?this.mAttachInfo.mKeyDispatchState:null,this)){return true;}return false;}},{key:'setOnKeyListener',value:function setOnKeyListener(l){if(typeof l=="function"){l=View.OnKeyListener.fromFunction(l);}this.getListenerInfo().mOnKeyListener=l;}},{key:'getKeyDispatcherState',value:function getKeyDispatcherState(){return this.mAttachInfo!=null?this.mAttachInfo.mKeyDispatchState:null;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var result=false;if(KeyEvent.isConfirmKey(keyCode)){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return true;}if(((this.mViewFlags&View.CLICKABLE)==View.CLICKABLE||(this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE)&&event.getRepeatCount()==0){this.setPressed(true);this.checkForLongClick(0);return true;}}return result;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(KeyEvent.isConfirmKey(keyCode)){if((this.mViewFlags&View.ENABLED_MASK)==View.DISABLED){return true;}if((this.mViewFlags&View.CLICKABLE)==View.CLICKABLE&&this.isPressed()){this.setPressed(false);if(!this.mHasPerformedLongPress){this.removeLongPressCallback();return this.performClick();}}}return false;}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(event){if(this.onFilterTouchEventForSecurity(event)){var li=this.mListenerInfo;if(li!=null&&li.mOnTouchListener!=null&&(this.mViewFlags&View.ENABLED_MASK)==View.ENABLED&&li.mOnTouchListener.onTouch(this,event)){return true;}if(this.onTouchEvent(event)){return true;}}return false;}},{key:'onFilterTouchEventForSecurity',value:function onFilterTouchEventForSecurity(event){return true;}},{key:'onTouchEvent',value:function onTouchEvent(event){var viewFlags=this.mViewFlags;if((viewFlags&View.ENABLED_MASK)==View.DISABLED){if(event.getAction()==view_1.MotionEvent.ACTION_UP&&(this.mPrivateFlags&View.PFLAG_PRESSED)!=0){this.setPressed(false);}return(viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE;}if(this.mTouchDelegate!=null){if(this.mTouchDelegate.onTouchEvent(event)){return true;}}if((viewFlags&View.CLICKABLE)==View.CLICKABLE||(viewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE){switch(event.getAction()){case view_1.MotionEvent.ACTION_UP:var prepressed=(this.mPrivateFlags&View.PFLAG_PREPRESSED)!=0;if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0||prepressed){var focusTaken=false;if(this.isFocusable()&&this.isFocusableInTouchMode()&&!this.isFocused()){focusTaken=this.requestFocus();}if(prepressed){this.setPressed(true);}if(!this.mHasPerformedLongPress){this.removeLongPressCallback();if(!focusTaken){if(this.mPerformClick==null){this.mPerformClick=new PerformClick(this);}if(prepressed){if(this.mPerformClickAfterPressDraw==null){this.mPerformClickAfterPressDraw=new PerformClickAfterPressDraw(this);}this.post(this.mPerformClickAfterPressDraw);}else if(!this.post(this.mPerformClick)){this.performClick(event);}}}if(this.mUnsetPressedState==null){this.mUnsetPressedState=new UnsetPressedState(this);}if(prepressed){this.postDelayed(this.mUnsetPressedState,view_1.ViewConfiguration.getPressedStateDuration());}else if(!this.post(this.mUnsetPressedState)){this.mUnsetPressedState.run();}this.removeTapCallback();}break;case view_1.MotionEvent.ACTION_DOWN:this.mHasPerformedLongPress=false;var isInScrollingContainer=this.isInScrollingContainer();if(isInScrollingContainer){this.mPrivateFlags|=View.PFLAG_PREPRESSED;if(this.mPendingCheckForTap==null){this.mPendingCheckForTap=new CheckForTap(this);}this.postDelayed(this.mPendingCheckForTap,view_1.ViewConfiguration.getTapTimeout());}else{this.setPressed(true);this.checkForLongClick(0);}break;case view_1.MotionEvent.ACTION_CANCEL:this.setPressed(false);this.removeTapCallback();this.removeLongPressCallback();break;case view_1.MotionEvent.ACTION_MOVE:var _x80=event.getX();var _y=event.getY();if(!this.pointInView(_x80,_y,this.mTouchSlop)){this.removeTapCallback();if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0){this.removeLongPressCallback();this.setPressed(false);}}break;}return true;}return false;}},{key:'isInScrollingContainer',value:function isInScrollingContainer(){var p=this.getParent();while(p!=null&&p instanceof view_1.ViewGroup){if(p.shouldDelayChildPressedState()){return true;}p=p.getParent();}return false;}},{key:'cancelPendingInputEvents',value:function cancelPendingInputEvents(){this.dispatchCancelPendingInputEvents();}},{key:'dispatchCancelPendingInputEvents',value:function dispatchCancelPendingInputEvents(){this.mPrivateFlags3&=~View.PFLAG3_CALLED_SUPER;this.onCancelPendingInputEvents();if((this.mPrivateFlags3&View.PFLAG3_CALLED_SUPER)!=View.PFLAG3_CALLED_SUPER){throw Error('new SuperNotCalledException("View " + this.getClass().getSimpleName() + " did not call through to super.onCancelPendingInputEvents()")');}}},{key:'onCancelPendingInputEvents',value:function onCancelPendingInputEvents(){this.removePerformClickCallback();this.cancelLongPress();this.mPrivateFlags3|=View.PFLAG3_CALLED_SUPER;}},{key:'removeLongPressCallback',value:function removeLongPressCallback(){if(this.mPendingCheckForLongPress!=null){this.removeCallbacks(this.mPendingCheckForLongPress);}}},{key:'removePerformClickCallback',value:function removePerformClickCallback(){if(this.mPerformClick!=null){this.removeCallbacks(this.mPerformClick);}if(this.mPerformClickAfterPressDraw!=null){this.removeCallbacks(this.mPerformClickAfterPressDraw);}}},{key:'removeUnsetPressCallback',value:function removeUnsetPressCallback(){if((this.mPrivateFlags&View.PFLAG_PRESSED)!=0&&this.mUnsetPressedState!=null){this.setPressed(false);this.removeCallbacks(this.mUnsetPressedState);}}},{key:'removeTapCallback',value:function removeTapCallback(){if(this.mPendingCheckForTap!=null){this.mPrivateFlags&=~View.PFLAG_PREPRESSED;this.removeCallbacks(this.mPendingCheckForTap);}}},{key:'cancelLongPress',value:function cancelLongPress(){this.removeLongPressCallback();this.removeTapCallback();}},{key:'setTouchDelegate',value:function setTouchDelegate(delegate){this.mTouchDelegate=delegate;}},{key:'getTouchDelegate',value:function getTouchDelegate(){return this.mTouchDelegate;}},{key:'getListenerInfo',value:function getListenerInfo(){if(this.mListenerInfo!=null){return this.mListenerInfo;}this.mListenerInfo=new View.ListenerInfo();return this.mListenerInfo;}},{key:'addOnLayoutChangeListener',value:function addOnLayoutChangeListener(listener){var li=this.getListenerInfo();if(li.mOnLayoutChangeListeners==null){li.mOnLayoutChangeListeners=new ArrayList();}if(!li.mOnLayoutChangeListeners.contains(listener)){li.mOnLayoutChangeListeners.add(listener);}}},{key:'removeOnLayoutChangeListener',value:function removeOnLayoutChangeListener(listener){var li=this.mListenerInfo;if(li==null||li.mOnLayoutChangeListeners==null){return;}li.mOnLayoutChangeListeners.remove(listener);}},{key:'addOnAttachStateChangeListener',value:function addOnAttachStateChangeListener(listener){var li=this.getListenerInfo();if(li.mOnAttachStateChangeListeners==null){li.mOnAttachStateChangeListeners=new CopyOnWriteArrayList();}li.mOnAttachStateChangeListeners.add(listener);}},{key:'removeOnAttachStateChangeListener',value:function removeOnAttachStateChangeListener(listener){var li=this.mListenerInfo;if(li==null||li.mOnAttachStateChangeListeners==null){return;}li.mOnAttachStateChangeListeners.remove(listener);}},{key:'setOnClickListenerByAttrValueString',value:function setOnClickListenerByAttrValueString(onClickAttrString){this.setOnClickListener(function(view){if(!onClickAttrString)return;var activityClickMethod=view.getContext()[onClickAttrString];if(typeof activityClickMethod==='function'){try{activityClickMethod.call(view.getContext(),view);}catch(e){console.error(e);throw new Error('Could not execute method \''+onClickAttrString+'\' of the activity');}return;}else{try{new Function(onClickAttrString).call(view);}catch(e){console.error(e);throw new Error("Could not execute or find a method "+onClickAttrString+"(View) in the activity "+view.getContext().constructor.name+" for onClick handler"+" on view "+view.getClass()+view.getId());}}});}},{key:'setOnClickListener',value:function setOnClickListener(l){if(!this.isClickable()){this.setClickable(true);}if(typeof l=="function"){l=View.OnClickListener.fromFunction(l);}this.getListenerInfo().mOnClickListener=l;}},{key:'hasOnClickListeners',value:function hasOnClickListeners(){var li=this.mListenerInfo;return li!=null&&li.mOnClickListener!=null;}},{key:'setOnLongClickListener',value:function setOnLongClickListener(l){if(!this.isLongClickable()){this.setLongClickable(true);}if(typeof l=="function"){l=View.OnLongClickListener.fromFunction(l);}this.getListenerInfo().mOnLongClickListener=l;}},{key:'playSoundEffect',value:function playSoundEffect(soundConstant){}},{key:'performHapticFeedback',value:function performHapticFeedback(feedbackConstant){return false;}},{key:'performClick',value:function performClick(event){var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){li.mOnClickListener.onClick(this);return true;}return false;}},{key:'callOnClick',value:function callOnClick(){var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){li.mOnClickListener.onClick(this);return true;}return false;}},{key:'performLongClick',value:function performLongClick(){var handled=false;var li=this.mListenerInfo;if(li!=null&&li.mOnLongClickListener!=null){handled=li.mOnLongClickListener.onLongClick(this);}return handled;}},{key:'performButtonActionOnTouchDown',value:function performButtonActionOnTouchDown(event){return false;}},{key:'checkForLongClick',value:function checkForLongClick(){var delayOffset=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;if((this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE){this.mHasPerformedLongPress=false;if(this.mPendingCheckForLongPress==null){this.mPendingCheckForLongPress=new CheckForLongPress(this);}this.mPendingCheckForLongPress.rememberWindowAttachCount();this.postDelayed(this.mPendingCheckForLongPress,view_1.ViewConfiguration.getLongPressTimeout()-delayOffset);}}},{key:'setOnTouchListener',value:function setOnTouchListener(l){if(typeof l=="function"){l=View.OnTouchListener.fromFunction(l);}this.getListenerInfo().mOnTouchListener=l;}},{key:'isClickable',value:function isClickable(){return(this.mViewFlags&View.CLICKABLE)==View.CLICKABLE;}},{key:'setClickable',value:function setClickable(clickable){this.setFlags(clickable?View.CLICKABLE:0,View.CLICKABLE);}},{key:'isLongClickable',value:function isLongClickable(){return(this.mViewFlags&View.LONG_CLICKABLE)==View.LONG_CLICKABLE;}},{key:'setLongClickable',value:function setLongClickable(longClickable){this.setFlags(longClickable?View.LONG_CLICKABLE:0,View.LONG_CLICKABLE);}},{key:'setPressed',value:function setPressed(pressed){var needsRefresh=pressed!=((this.mPrivateFlags&View.PFLAG_PRESSED)==View.PFLAG_PRESSED);if(pressed){this.mPrivateFlags|=View.PFLAG_PRESSED;}else{this.mPrivateFlags&=~View.PFLAG_PRESSED;}if(needsRefresh){this.refreshDrawableState();}this.dispatchSetPressed(pressed);}},{key:'dispatchSetPressed',value:function dispatchSetPressed(pressed){}},{key:'isPressed',value:function isPressed(){return(this.mPrivateFlags&View.PFLAG_PRESSED)==View.PFLAG_PRESSED;}},{key:'setSelected',value:function setSelected(selected){if((this.mPrivateFlags&View.PFLAG_SELECTED)!=0!=selected){this.mPrivateFlags=this.mPrivateFlags&~View.PFLAG_SELECTED|(selected?View.PFLAG_SELECTED:0);if(!selected)this.resetPressedState();this.invalidate(true);this.refreshDrawableState();this.dispatchSetSelected(selected);}}},{key:'dispatchSetSelected',value:function dispatchSetSelected(selected){}},{key:'isSelected',value:function isSelected(){return(this.mPrivateFlags&View.PFLAG_SELECTED)!=0;}},{key:'setActivated',value:function setActivated(activated){if((this.mPrivateFlags&View.PFLAG_ACTIVATED)!=0!=activated){this.mPrivateFlags=this.mPrivateFlags&~View.PFLAG_ACTIVATED|(activated?View.PFLAG_ACTIVATED:0);this.invalidate(true);this.refreshDrawableState();this.dispatchSetActivated(activated);}}},{key:'dispatchSetActivated',value:function dispatchSetActivated(activated){}},{key:'isActivated',value:function isActivated(){return(this.mPrivateFlags&View.PFLAG_ACTIVATED)!=0;}},{key:'getViewTreeObserver',value:function getViewTreeObserver(){if(this.mAttachInfo!=null){return this.mAttachInfo.mViewRootImpl.mTreeObserver;}if(this.mFloatingTreeObserver==null){this.mFloatingTreeObserver=new view_1.ViewTreeObserver();}return this.mFloatingTreeObserver;}},{key:'setLayoutDirection',value:function setLayoutDirection(layoutDirection){}},{key:'getLayoutDirection',value:function getLayoutDirection(){return View.LAYOUT_DIRECTION_LTR;}},{key:'isLayoutRtl',value:function isLayoutRtl(){return this.getLayoutDirection()==View.LAYOUT_DIRECTION_RTL;}},{key:'getTextDirection',value:function getTextDirection(){return View.TEXT_DIRECTION_LTR;}},{key:'setTextDirection',value:function setTextDirection(textDirection){}},{key:'getTextAlignment',value:function getTextAlignment(){return View.TEXT_ALIGNMENT_DEFAULT;}},{key:'setTextAlignment',value:function setTextAlignment(textAlignment){}},{key:'getBaseline',value:function getBaseline(){return-1;}},{key:'isLayoutRequested',value:function isLayoutRequested(){return(this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT;}},{key:'getLayoutParams',value:function getLayoutParams(){return this.mLayoutParams;}},{key:'setLayoutParams',value:function setLayoutParams(params){if(params==null){throw new Error("Layout parameters cannot be null");}this.mLayoutParams=params;var p=this.mParent;if(p instanceof view_1.ViewGroup){p.onSetLayoutParams(this,params);}this.requestLayout();}},{key:'isInLayout',value:function isInLayout(){var viewRoot=this.getViewRootImpl();return viewRoot!=null&&viewRoot.isInLayout();}},{key:'requestLayout',value:function requestLayout(){if(this.mMeasureCache!=null)this.mMeasureCache.clear();if(this.mAttachInfo!=null&&this.mAttachInfo.mViewRequestingLayout==null){var viewRoot=this.getViewRootImpl();if(viewRoot!=null&&viewRoot.isInLayout()){if(!viewRoot.requestLayoutDuringLayout(this)){return;}}this.mAttachInfo.mViewRequestingLayout=this;}this.mPrivateFlags|=View.PFLAG_FORCE_LAYOUT;this.mPrivateFlags|=View.PFLAG_INVALIDATED;if(this.mParent!=null&&!this.mParent.isLayoutRequested()){this.mParent.requestLayout();}if(this.mAttachInfo!=null&&this.mAttachInfo.mViewRequestingLayout==this){this.mAttachInfo.mViewRequestingLayout=null;}}},{key:'forceLayout',value:function forceLayout(){if(this.mMeasureCache!=null)this.mMeasureCache.clear();this.mPrivateFlags|=View.PFLAG_FORCE_LAYOUT;this.mPrivateFlags|=View.PFLAG_INVALIDATED;}},{key:'isLaidOut',value:function isLaidOut(){return(this.mPrivateFlags3&View.PFLAG3_IS_LAID_OUT)==View.PFLAG3_IS_LAID_OUT;}},{key:'layout',value:function layout(l,t,r,b){if((this.mPrivateFlags3&View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT)!=0){this.onMeasure(this.mOldWidthMeasureSpec,this.mOldHeightMeasureSpec);this.mPrivateFlags3&=~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}var oldL=this.mLeft;var oldT=this.mTop;var oldB=this.mBottom;var oldR=this.mRight;var changed=this.setFrame(l,t,r,b);if(changed||(this.mPrivateFlags&View.PFLAG_LAYOUT_REQUIRED)==View.PFLAG_LAYOUT_REQUIRED){this.onLayout(changed,l,t,r,b);this.mPrivateFlags&=~View.PFLAG_LAYOUT_REQUIRED;var li=this.mListenerInfo;if(li!=null&&li.mOnLayoutChangeListeners!=null){var listenersCopy=li.mOnLayoutChangeListeners.clone();var numListeners=listenersCopy.size();for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:null;var width=this.mRight-this.mLeft;var height=this.mBottom-this.mTop;if(width>0&&height>0){r.set(0,0,width,height);if(globalOffset!=null){globalOffset.set(-this.mScrollX,-this.mScrollY);}return this.mParent==null||this.mParent.getChildVisibleRect(this,r,globalOffset);}return false;}},{key:'getLocationOnScreen',value:function getLocationOnScreen(location){this.getLocationInWindow(location);var info=this.mAttachInfo;}},{key:'getLocationInWindow',value:function getLocationInWindow(location){if(location==null||location.length<2){throw Error('new IllegalArgumentException("location must be an array of two integers")');}if(this.mAttachInfo==null){location[0]=location[1]=0;return;}var position=this.mAttachInfo.mTmpTransformLocation;position[0]=position[1]=0.0;if(!this.hasIdentityMatrix()){this.getMatrix().mapPoints(position);}position[0]+=this.mLeft;position[1]+=this.mTop;var viewParent=this.mParent;while(viewParent instanceof View){var _view=viewParent;position[0]-=_view.mScrollX;position[1]-=_view.mScrollY;if(!_view.hasIdentityMatrix()){_view.getMatrix().mapPoints(position);}position[0]+=_view.mLeft;position[1]+=_view.mTop;viewParent=_view.mParent;}location[0]=Math.floor(position[0]+0.5);location[1]=Math.floor(position[1]+0.5);}},{key:'getWindowVisibleDisplayFrame',value:function getWindowVisibleDisplayFrame(outRect){if(this.mAttachInfo!=null){var rootView=this.mAttachInfo.mRootView;var xy=[0,0];rootView.getLocationOnScreen(xy);outRect.set(xy[0],xy[1],rootView.getWidth()+xy[0],rootView.getHeight()+xy[1]);return;}var dm=Resources.getSystem().getDisplayMetrics();outRect.set(0,0,dm.widthPixels,dm.heightPixels);}},{key:'isVisibleToUser',value:function isVisibleToUser(){var boundInView=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;if(this.mAttachInfo!=null){if(this.mAttachInfo.mWindowVisibility!=View.VISIBLE){return false;}var current=this;while(current instanceof View){var _view2=current;if(_view2.getAlpha()<=0||_view2.getTransitionAlpha()<=0||_view2.getVisibility()!=View.VISIBLE){return false;}current=_view2.mParent;}var visibleRect=this.mAttachInfo.mTmpInvalRect;var offset=this.mAttachInfo.mPoint;if(!this.getGlobalVisibleRect(visibleRect,offset)){return false;}if(boundInView!=null){visibleRect.offset(-offset.x,-offset.y);return boundInView.intersect(visibleRect);}return true;}return false;}},{key:'getMeasuredWidth',value:function getMeasuredWidth(){return this.mMeasuredWidth&View.MEASURED_SIZE_MASK;}},{key:'getMeasuredWidthAndState',value:function getMeasuredWidthAndState(){return this.mMeasuredWidth;}},{key:'getMeasuredHeight',value:function getMeasuredHeight(){return this.mMeasuredHeight&View.MEASURED_SIZE_MASK;}},{key:'getMeasuredHeightAndState',value:function getMeasuredHeightAndState(){return this.mMeasuredHeight;}},{key:'getMeasuredState',value:function getMeasuredState(){return this.mMeasuredWidth&View.MEASURED_STATE_MASK|this.mMeasuredHeight>>View.MEASURED_HEIGHT_STATE_SHIFT&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT;}},{key:'measure',value:function measure(widthMeasureSpec,heightMeasureSpec){var key=widthMeasureSpec+','+heightMeasureSpec;if(this.mMeasureCache==null)this.mMeasureCache=new Map();if((this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT||widthMeasureSpec!=this.mOldWidthMeasureSpec||heightMeasureSpec!=this.mOldHeightMeasureSpec){this.mPrivateFlags&=~View.PFLAG_MEASURED_DIMENSION_SET;var cacheValue=(this.mPrivateFlags&View.PFLAG_FORCE_LAYOUT)==View.PFLAG_FORCE_LAYOUT?null:this.mMeasureCache.get(key);if(cacheValue==null){this.onMeasure(widthMeasureSpec,heightMeasureSpec);this.mPrivateFlags3&=~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}else{this.setMeasuredDimension(cacheValue[0],cacheValue[1]);this.mPrivateFlags3|=View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}if((this.mPrivateFlags&View.PFLAG_MEASURED_DIMENSION_SET)!=View.PFLAG_MEASURED_DIMENSION_SET){throw new Error("onMeasure() did not set the"+" measured dimension by calling"+" setMeasuredDimension()");}this.mPrivateFlags|=View.PFLAG_LAYOUT_REQUIRED;}this.mOldWidthMeasureSpec=widthMeasureSpec;this.mOldHeightMeasureSpec=heightMeasureSpec;this.mMeasureCache.set(key,[this.mMeasuredWidth,this.mMeasuredHeight]);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){this.setMeasuredDimension(View.getDefaultSize(this.getSuggestedMinimumWidth(),widthMeasureSpec),View.getDefaultSize(this.getSuggestedMinimumHeight(),heightMeasureSpec));}},{key:'setMeasuredDimension',value:function setMeasuredDimension(measuredWidth,measuredHeight){this.mMeasuredWidth=measuredWidth;this.mMeasuredHeight=measuredHeight;this.mPrivateFlags|=View.PFLAG_MEASURED_DIMENSION_SET;}},{key:'getSuggestedMinimumHeight',value:function getSuggestedMinimumHeight(){return this.mBackground==null?this.mMinHeight:Math.max(this.mMinHeight,this.mBackground.getMinimumHeight());}},{key:'getSuggestedMinimumWidth',value:function getSuggestedMinimumWidth(){return this.mBackground==null?this.mMinWidth:Math.max(this.mMinWidth,this.mBackground.getMinimumWidth());}},{key:'getMinimumHeight',value:function getMinimumHeight(){return this.mMinHeight;}},{key:'setMinimumHeight',value:function setMinimumHeight(minHeight){this.mMinHeight=minHeight;this.requestLayout();}},{key:'getMinimumWidth',value:function getMinimumWidth(){return this.mMinWidth;}},{key:'setMinimumWidth',value:function setMinimumWidth(minWidth){this.mMinWidth=minWidth;this.requestLayout();}},{key:'getAnimation',value:function getAnimation(){return this.mCurrentAnimation;}},{key:'startAnimation',value:function startAnimation(animation){animation.setStartTime(Animation.START_ON_FIRST_FRAME);this.setAnimation(animation);this.invalidateParentCaches();this.invalidate(true);}},{key:'clearAnimation',value:function clearAnimation(){if(this.mCurrentAnimation!=null){this.mCurrentAnimation.detach();}this.mCurrentAnimation=null;this.invalidateParentIfNeeded();}},{key:'setAnimation',value:function setAnimation(animation){this.mCurrentAnimation=animation;if(animation!=null){animation.reset();}}},{key:'onAnimationStart',value:function onAnimationStart(){this.mPrivateFlags|=View.PFLAG_ANIMATION_STARTED;}},{key:'onAnimationEnd',value:function onAnimationEnd(){this.mPrivateFlags&=~View.PFLAG_ANIMATION_STARTED;}},{key:'onSetAlpha',value:function onSetAlpha(alpha){return false;}},{key:'_invalidateRect',value:function _invalidateRect(l,t,r,b){if(this.skipInvalidate()){return;}if((this.mPrivateFlags&(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS))==(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS)||(this.mPrivateFlags&View.PFLAG_DRAWING_CACHE_VALID)==View.PFLAG_DRAWING_CACHE_VALID||(this.mPrivateFlags&View.PFLAG_INVALIDATED)!=View.PFLAG_INVALIDATED){this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;this.mPrivateFlags|=View.PFLAG_INVALIDATED;this.mPrivateFlags|=View.PFLAG_DIRTY;var p=this.mParent;var ai=this.mAttachInfo;if(p!=null&&ai!=null&&l0&&arguments[0]!==undefined?arguments[0]:true;if(this.skipInvalidate()){return;}if((this.mPrivateFlags&(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS))==(View.PFLAG_DRAWN|View.PFLAG_HAS_BOUNDS)||invalidateCache&&(this.mPrivateFlags&View.PFLAG_DRAWING_CACHE_VALID)==View.PFLAG_DRAWING_CACHE_VALID||(this.mPrivateFlags&View.PFLAG_INVALIDATED)!=View.PFLAG_INVALIDATED||this.isOpaque()!=this.mLastIsOpaque){this.mLastIsOpaque=this.isOpaque();this.mPrivateFlags&=~View.PFLAG_DRAWN;this.mPrivateFlags|=View.PFLAG_DIRTY;if(invalidateCache){this.mPrivateFlags|=View.PFLAG_INVALIDATED;this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;}var ai=this.mAttachInfo;var p=this.mParent;if(p!=null&&ai!=null){var r=ai.mTmpInvalRect;r.set(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);p.invalidateChild(this,r);}}}},{key:'invalidate',value:function invalidate(){if(arguments.length===0){this._invalidateCache(true);}else if(arguments.length===1&&(arguments.length<=0?undefined:arguments[0])instanceof Rect){var rect=arguments.length<=0?undefined:arguments[0];this._invalidateRect(rect.left,rect.top,rect.right,rect.bottom);}else if(arguments.length===1){this._invalidateCache(arguments.length<=0?undefined:arguments[0]);}else if(arguments.length===4){this._invalidateRect.apply(this,arguments);}}},{key:'invalidateViewProperty',value:function invalidateViewProperty(invalidateParent,forceRedraw){if((this.mPrivateFlags&View.PFLAG_DRAW_ANIMATION)==View.PFLAG_DRAW_ANIMATION){if(invalidateParent){this.invalidateParentCaches();}if(forceRedraw){this.mPrivateFlags|=View.PFLAG_DRAWN;}this.invalidate(false);}else{var ai=this.mAttachInfo;var p=this.mParent;if(p!=null&&ai!=null){var r=ai.mTmpInvalRect;r.set(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);if(this.mParent instanceof view_1.ViewGroup){this.mParent.invalidateChildFast(this,r);}else{this.mParent.invalidateChild(this,r);}}}}},{key:'invalidateParentCaches',value:function invalidateParentCaches(){if(this.mParent instanceof View){this.mParent.mPrivateFlags|=View.PFLAG_INVALIDATED;}}},{key:'invalidateParentIfNeeded',value:function invalidateParentIfNeeded(){}},{key:'postInvalidate',value:function postInvalidate(l,t,r,b){this.postInvalidateDelayed(0,l,t,r,b);}},{key:'postInvalidateDelayed',value:function postInvalidateDelayed(delayMilliseconds,left,top,right,bottom){var attachInfo=this.mAttachInfo;if(attachInfo!=null){if(!Number.isInteger(left)||!Number.isInteger(top)||!Number.isInteger(right)||!Number.isInteger(bottom)){attachInfo.mViewRootImpl.dispatchInvalidateDelayed(this,delayMilliseconds);}else{var info=View.AttachInfo.InvalidateInfo.obtain();info.target=this;info.left=left;info.top=top;info.right=right;info.bottom=bottom;attachInfo.mViewRootImpl.dispatchInvalidateRectDelayed(info,delayMilliseconds);}}}},{key:'postInvalidateOnAnimation',value:function postInvalidateOnAnimation(left,top,right,bottom){var attachInfo=this.mAttachInfo;if(attachInfo!=null){if(!Number.isInteger(left)||!Number.isInteger(top)||!Number.isInteger(right)||!Number.isInteger(bottom)){attachInfo.mViewRootImpl.dispatchInvalidateOnAnimation(this);}else{var info=View.AttachInfo.InvalidateInfo.obtain();info.target=this;info.left=left;info.top=top;info.right=right;info.bottom=bottom;attachInfo.mViewRootImpl.dispatchInvalidateRectOnAnimation(info);}}}},{key:'skipInvalidate',value:function skipInvalidate(){return(this.mViewFlags&View.VISIBILITY_MASK)!=View.VISIBLE&&this.mCurrentAnimation==null;}},{key:'isOpaque',value:function isOpaque(){return(this.mPrivateFlags&View.PFLAG_OPAQUE_MASK)==View.PFLAG_OPAQUE_MASK&&this.getFinalAlpha()>=1;}},{key:'computeOpaqueFlags',value:function computeOpaqueFlags(){if(this.mBackground!=null&&this.mBackground.getOpacity()==PixelFormat.OPAQUE){this.mPrivateFlags|=View.PFLAG_OPAQUE_BACKGROUND;}else{this.mPrivateFlags&=~View.PFLAG_OPAQUE_BACKGROUND;}var flags=this.mViewFlags;if((flags&View.SCROLLBARS_VERTICAL)==0&&(flags&View.SCROLLBARS_HORIZONTAL)==0){this.mPrivateFlags|=View.PFLAG_OPAQUE_SCROLLBARS;}else{this.mPrivateFlags&=~View.PFLAG_OPAQUE_SCROLLBARS;}}},{key:'setLayerType',value:function setLayerType(layerType){if(layerTypeView.LAYER_TYPE_SOFTWARE){throw Error('new IllegalArgumentException("Layer type can only be one of: LAYER_TYPE_NONE, " + "LAYER_TYPE_SOFTWARE")');}if(layerType==this.mLayerType){return;}switch(this.mLayerType){case View.LAYER_TYPE_SOFTWARE:this.destroyDrawingCache();break;default:break;}this.mLayerType=layerType;var layerDisabled=this.mLayerType==View.LAYER_TYPE_NONE;this.mLocalDirtyRect=layerDisabled?null:new Rect();this.invalidateParentCaches();this.invalidate(true);}},{key:'getLayerType',value:function getLayerType(){return this.mLayerType;}},{key:'setClipBounds',value:function setClipBounds(clipBounds){if(clipBounds!=null){if(clipBounds.equals(this.mClipBounds)){return;}if(this.mClipBounds==null){this.invalidate();this.mClipBounds=new Rect(clipBounds);}else{this.invalidate(Math.min(this.mClipBounds.left,clipBounds.left),Math.min(this.mClipBounds.top,clipBounds.top),Math.max(this.mClipBounds.right,clipBounds.right),Math.max(this.mClipBounds.bottom,clipBounds.bottom));this.mClipBounds.set(clipBounds);}}else{if(this.mClipBounds!=null){this.invalidate();this.mClipBounds=null;}}}},{key:'getClipBounds',value:function getClipBounds(){return this.mClipBounds!=null?new Rect(this.mClipBounds):null;}},{key:'setCornerRadius',value:function setCornerRadius(radiusTopLeft){var radiusTopRight=arguments.length>1&&arguments[1]!==undefined?arguments[1]:radiusTopLeft;var radiusBottomRight=arguments.length>2&&arguments[2]!==undefined?arguments[2]:radiusTopRight;var radiusBottomLeft=arguments.length>3&&arguments[3]!==undefined?arguments[3]:radiusBottomRight;this.setCornerRadiusTopLeft(radiusTopLeft);this.setCornerRadiusTopRight(radiusTopRight);this.setCornerRadiusBottomRight(radiusBottomRight);this.setCornerRadiusBottomLeft(radiusBottomLeft);}},{key:'setCornerRadiusTopLeft',value:function setCornerRadiusTopLeft(value){if(this.mCornerRadiusTopLeft!=value){this.mCornerRadiusTopLeft=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusTopLeft',value:function getCornerRadiusTopLeft(){return this.mCornerRadiusTopLeft;}},{key:'setCornerRadiusTopRight',value:function setCornerRadiusTopRight(value){if(this.mCornerRadiusTopRight!=value){this.mCornerRadiusTopRight=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusTopRight',value:function getCornerRadiusTopRight(){return this.mCornerRadiusTopRight;}},{key:'setCornerRadiusBottomRight',value:function setCornerRadiusBottomRight(value){if(this.mCornerRadiusBottomRight!=value){this.mCornerRadiusBottomRight=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusBottomRight',value:function getCornerRadiusBottomRight(){return this.mCornerRadiusBottomRight;}},{key:'setCornerRadiusBottomLeft',value:function setCornerRadiusBottomLeft(value){if(this.mCornerRadiusBottomLeft!=value){this.mCornerRadiusBottomLeft=value;this.mShadowDrawable=null;this.invalidate();}}},{key:'getCornerRadiusBottomLeft',value:function getCornerRadiusBottomLeft(){return this.mCornerRadiusBottomLeft;}},{key:'setShadowView',value:function setShadowView(radius,dx,dy,color){if(!this.mShadowPaint)this.mShadowPaint=new Paint();this.mShadowPaint.setShadowLayer(radius,dx,dy,color);this.invalidate();}},{key:'getDrawingTime',value:function getDrawingTime(){return this.getViewRootImpl()!=null?this.getViewRootImpl().mDrawingTime:0;}},{key:'drawFromParent',value:function drawFromParent(canvas,parent,drawingTime){var useDisplayListProperties=false;var more=false;var childHasIdentityMatrix=this.hasIdentityMatrix();var flags=parent.mGroupFlags;if((flags&view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION)==view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION){parent.getChildTransformation().clear();parent.mGroupFlags&=~view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}var transformToApply=null;var concatMatrix=false;var scalingRequired=false;var caching=false;var layerType=this.getLayerType();var hardwareAccelerated=false;var nativeAccelerated=canvas.isNativeAccelerated();if((flags&view_1.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE)!=0||(flags&view_1.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE)!=0){caching=true;}else{caching=layerType!=View.LAYER_TYPE_NONE||hardwareAccelerated||nativeAccelerated;}var a=this.getAnimation();if(a!=null){more=this.drawAnimation(parent,drawingTime,a,scalingRequired);concatMatrix=a.willChangeTransformationMatrix();if(concatMatrix){this.mPrivateFlags3|=View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM;}transformToApply=parent.getChildTransformation();}else{if(!useDisplayListProperties&&(flags&view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS)!=0){var t=parent.getChildTransformation();var hasTransform=parent.getChildStaticTransformation(this,t);if(hasTransform){var transformType=t.getTransformationType();transformToApply=transformType!=Transformation.TYPE_IDENTITY?t:null;concatMatrix=(transformType&Transformation.TYPE_MATRIX)!=0;}}}concatMatrix=!childHasIdentityMatrix||concatMatrix;this.mPrivateFlags|=View.PFLAG_DRAWN;if(!concatMatrix&&(flags&(view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS|view_1.ViewGroup.FLAG_CLIP_CHILDREN))==view_1.ViewGroup.FLAG_CLIP_CHILDREN&&canvas.quickReject(this.mLeft,this.mTop,this.mRight,this.mBottom)&&(this.mPrivateFlags&View.PFLAG_DRAW_ANIMATION)==0){this.mPrivateFlags2|=View.PFLAG2_VIEW_QUICK_REJECTED;return more;}this.mPrivateFlags2&=~View.PFLAG2_VIEW_QUICK_REJECTED;var cache=null;if(caching){if(layerType!=View.LAYER_TYPE_NONE){layerType=View.LAYER_TYPE_SOFTWARE;this.buildDrawingCache(true);}cache=this.getDrawingCache(true);}this.computeScroll();var sx=this.mScrollX;var sy=this.mScrollY;this.requestSyncBoundToElement();var hasNoCache=cache==null;var offsetForScroll=cache==null;var restoreTo=canvas.save();if(offsetForScroll){canvas.translate(this.mLeft-sx,this.mTop-sy);}else{canvas.translate(this.mLeft,this.mTop);}var alpha=this.getAlpha()*this.getTransitionAlpha();if(transformToApply!=null||alpha<1||!this.hasIdentityMatrix()||(this.mPrivateFlags3&View.PFLAG3_VIEW_IS_ANIMATING_ALPHA)==View.PFLAG3_VIEW_IS_ANIMATING_ALPHA){if(transformToApply!=null||!childHasIdentityMatrix){var transX=0;var transY=0;if(offsetForScroll){transX=-sx;transY=-sy;}if(transformToApply!=null){if(concatMatrix){canvas.translate(-transX,-transY);canvas.concat(transformToApply.getMatrix());canvas.translate(transX,transY);parent.mGroupFlags|=view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}var transformAlpha=transformToApply.getAlpha();if(transformAlpha<1){alpha*=transformAlpha;parent.mGroupFlags|=view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;}}if(!childHasIdentityMatrix&&!useDisplayListProperties){canvas.translate(-transX,-transY);canvas.concat(this.getMatrix());canvas.translate(transX,transY);}}if(alpha<1||(this.mPrivateFlags3&View.PFLAG3_VIEW_IS_ANIMATING_ALPHA)==View.PFLAG3_VIEW_IS_ANIMATING_ALPHA){if(alpha<1){this.mPrivateFlags3|=View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;}else{this.mPrivateFlags3&=~View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;}parent.mGroupFlags|=view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;if(hasNoCache){var multipliedAlpha=Math.floor(255*alpha);if(!this.onSetAlpha(multipliedAlpha)){canvas.multiplyGlobalAlpha(alpha);}else{this.mPrivateFlags|=View.PFLAG_ALPHA_SET;}}}}else if((this.mPrivateFlags&View.PFLAG_ALPHA_SET)==View.PFLAG_ALPHA_SET){this.onSetAlpha(255);this.mPrivateFlags&=~View.PFLAG_ALPHA_SET;}if(this.mShadowPaint!=null)this.drawShadow(canvas);if((flags&view_1.ViewGroup.FLAG_CLIP_CHILDREN)==view_1.ViewGroup.FLAG_CLIP_CHILDREN&&!useDisplayListProperties&&cache==null){if(offsetForScroll){canvas.clipRect(sx,sy,sx+(this.mRight-this.mLeft),sy+(this.mBottom-this.mTop),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}else{if(!scalingRequired||cache==null){canvas.clipRect(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop,this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}else{canvas.clipRect(0,0,cache.getWidth(),cache.getHeight(),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);}}}if(hasNoCache){if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)==View.PFLAG_SKIP_DRAW){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;this.dispatchDraw(canvas);}else{this.draw(canvas);}}else if(cache!=null){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;canvas.multiplyGlobalAlpha(alpha);if(layerType==View.LAYER_TYPE_NONE){if(alpha<1){parent.mGroupFlags|=view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;}else if((flags&view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE)!=0){parent.mGroupFlags&=~view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;}}canvas.clipRect(0,0,cache.getWidth(),cache.getHeight(),this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomRight,this.mCornerRadiusBottomLeft);canvas.drawCanvas(cache,0,0);}if(restoreTo>=0){canvas.restoreToCount(restoreTo);}if(a!=null&&!more){if(!hardwareAccelerated&&!a.getFillAfter()){this.onSetAlpha(255);}parent.finishAnimatingView(this,a);}return more;}},{key:'drawShadow',value:function drawShadow(canvas){var shadowPaint=this.mShadowPaint;if(!shadowPaint||!shadowPaint.shadowRadius)return;var color=shadowPaint.shadowColor;if(!this.mShadowDrawable){var drawable=new RoundRectDrawable(shadowPaint.shadowColor,this.mCornerRadiusTopLeft,this.mCornerRadiusTopRight,this.mCornerRadiusBottomLeft,this.mCornerRadiusBottomRight);this.mShadowDrawable=new ShadowDrawable(drawable,shadowPaint.shadowRadius,shadowPaint.shadowDx,shadowPaint.shadowDy,shadowPaint.shadowColor);}this.mShadowDrawable.draw(canvas);}},{key:'draw',value:function draw(canvas){if(this.mClipBounds!=null){canvas.clipRect(this.mClipBounds);}var privateFlags=this.mPrivateFlags;var dirtyOpaque=(privateFlags&View.PFLAG_DIRTY_MASK)==View.PFLAG_DIRTY_OPAQUE&&(this.getViewRootImpl()==null||!this.getViewRootImpl().mIgnoreDirtyState);this.mPrivateFlags=privateFlags&~View.PFLAG_DIRTY_MASK|View.PFLAG_DRAWN;if(!dirtyOpaque){var _background=this.mBackground;if(_background!=null){var scrollX=this.mScrollX;var scrollY=this.mScrollY;if(this.mBackgroundSizeChanged){_background.setBounds(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);this.mBackgroundSizeChanged=false;}if((scrollX|scrollY)==0){_background.draw(canvas);}else{canvas.translate(scrollX,scrollY);_background.draw(canvas);canvas.translate(-scrollX,-scrollY);}}}if(!dirtyOpaque)this.onDraw(canvas);this.dispatchDraw(canvas);this.onDrawScrollBars(canvas);if(this.mOverlay!=null&&!this.mOverlay.isEmpty()){this.mOverlay.getOverlayView().dispatchDraw(canvas);}}},{key:'onDraw',value:function onDraw(canvas){}},{key:'dispatchDraw',value:function dispatchDraw(canvas){}},{key:'drawAnimation',value:function drawAnimation(parent,drawingTime,a,scalingRequired){var invalidationTransform=void 0;var flags=parent.mGroupFlags;var initialized=a.isInitialized();if(!initialized){a.initialize(this.mRight-this.mLeft,this.mBottom-this.mTop,parent.getWidth(),parent.getHeight());a.initializeInvalidateRegion(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop);if(this.mAttachInfo!=null)a.setListenerHandler(this.mAttachInfo.mHandler);this.onAnimationStart();}var t=parent.getChildTransformation();var more=a.getTransformation(drawingTime,t,1);invalidationTransform=t;if(more){if(!a.willChangeBounds()){if((flags&(view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE|view_1.ViewGroup.FLAG_ANIMATION_DONE))==view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE){parent.mGroupFlags|=view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED;}else if((flags&view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED)==0){parent.mPrivateFlags|=View.PFLAG_DRAW_ANIMATION;parent.invalidate(this.mLeft,this.mTop,this.mRight,this.mBottom);}}else{if(parent.mInvalidateRegion==null){parent.mInvalidateRegion=new RectF();}var region=parent.mInvalidateRegion;a.getInvalidateRegion(0,0,this.mRight-this.mLeft,this.mBottom-this.mTop,region,invalidationTransform);parent.mPrivateFlags|=View.PFLAG_DRAW_ANIMATION;var left=this.mLeft+Math.floor(region.left);var top=this.mTop+Math.floor(region.top);parent.invalidate(left,top,left+Math.floor(region.width()+.5),top+Math.floor(region.height()+.5));}}return more;}},{key:'onDrawScrollBars',value:function onDrawScrollBars(canvas){var cache=this.mScrollCache;if(cache!=null){var state=cache.state;if(state==ScrollabilityCache.OFF){return;}var invalidate=false;if(state==ScrollabilityCache.FADING){cache._computeAlphaToScrollBar();invalidate=true;}else{cache.scrollBar.setAlpha(255);}var viewFlags=this.mViewFlags;var drawHorizontalScrollBar=(viewFlags&View.SCROLLBARS_HORIZONTAL)==View.SCROLLBARS_HORIZONTAL;var drawVerticalScrollBar=(viewFlags&View.SCROLLBARS_VERTICAL)==View.SCROLLBARS_VERTICAL&&!this.isVerticalScrollBarHidden();if(drawVerticalScrollBar||drawHorizontalScrollBar){var width=this.mRight-this.mLeft;var height=this.mBottom-this.mTop;var scrollBar=cache.scrollBar;var scrollX=this.mScrollX;var scrollY=this.mScrollY;var inside=true;var left=void 0;var top=void 0;var right=void 0;var bottom=void 0;if(drawHorizontalScrollBar){var size=scrollBar.getSize(false);if(size<=0){size=cache.scrollBarSize;}scrollBar.setParameters(this.computeHorizontalScrollRange(),this.computeHorizontalScrollOffset(),this.computeHorizontalScrollExtent(),false);var verticalScrollBarGap=drawVerticalScrollBar?this.getVerticalScrollbarWidth():0;top=scrollY+height-size;left=scrollX+this.mPaddingLeft;right=scrollX+width- -verticalScrollBarGap;bottom=top+size;this.onDrawHorizontalScrollBar(canvas,scrollBar,left,top,right,bottom);if(invalidate){this.invalidate(left,top,right,bottom);}}if(drawVerticalScrollBar){var _size=scrollBar.getSize(true);if(_size<=0){_size=cache.scrollBarSize;}scrollBar.setParameters(this.computeVerticalScrollRange(),this.computeVerticalScrollOffset(),this.computeVerticalScrollExtent(),true);left=scrollX+width-_size;top=scrollY+this.mPaddingTop;right=left+_size;bottom=scrollY+height;this.onDrawVerticalScrollBar(canvas,scrollBar,left,top,right,bottom);if(invalidate){this.invalidate(left,top,right,bottom);}}}}}},{key:'isVerticalScrollBarHidden',value:function isVerticalScrollBarHidden(){return false;}},{key:'onDrawHorizontalScrollBar',value:function onDrawHorizontalScrollBar(canvas,scrollBar,l,t,r,b){scrollBar.setBounds(l,t,r,b);scrollBar.draw(canvas);}},{key:'onDrawVerticalScrollBar',value:function onDrawVerticalScrollBar(canvas,scrollBar,l,t,r,b){scrollBar.setBounds(l,t,r,b);scrollBar.draw(canvas);}},{key:'isHardwareAccelerated',value:function isHardwareAccelerated(){return false;}},{key:'setDrawingCacheEnabled',value:function setDrawingCacheEnabled(enabled){this.mCachingFailed=false;this.setFlags(enabled?View.DRAWING_CACHE_ENABLED:0,View.DRAWING_CACHE_ENABLED);}},{key:'isDrawingCacheEnabled',value:function isDrawingCacheEnabled(){return(this.mViewFlags&View.DRAWING_CACHE_ENABLED)==View.DRAWING_CACHE_ENABLED;}},{key:'getDrawingCache',value:function getDrawingCache(){var autoScale=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if((this.mViewFlags&View.WILL_NOT_CACHE_DRAWING)==View.WILL_NOT_CACHE_DRAWING){return null;}if((this.mViewFlags&View.DRAWING_CACHE_ENABLED)==View.DRAWING_CACHE_ENABLED){this.buildDrawingCache(autoScale);}return this.mUnscaledDrawingCache;}},{key:'setDrawingCacheBackgroundColor',value:function setDrawingCacheBackgroundColor(color){if(color!=this.mDrawingCacheBackgroundColor){this.mDrawingCacheBackgroundColor=color;this.mPrivateFlags&=~View.PFLAG_DRAWING_CACHE_VALID;}}},{key:'getDrawingCacheBackgroundColor',value:function getDrawingCacheBackgroundColor(){return this.mDrawingCacheBackgroundColor;}},{key:'destroyDrawingCache',value:function destroyDrawingCache(){if(this.mUnscaledDrawingCache!=null){this.mUnscaledDrawingCache.recycle();this.mUnscaledDrawingCache=null;}}},{key:'buildDrawingCache',value:function buildDrawingCache(){var autoScale=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if((this.mPrivateFlags&View.PFLAG_DRAWING_CACHE_VALID)==0||this.mUnscaledDrawingCache==null){this.mCachingFailed=false;var width=this.mRight-this.mLeft;var height=this.mBottom-this.mTop;var attachInfo=this.mAttachInfo;var drawingCacheBackgroundColor=this.mDrawingCacheBackgroundColor;var opaque=drawingCacheBackgroundColor!=0||this.isOpaque();var projectedBitmapSize=width*height*4;var drawingCacheSize=view_1.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();if(width<=0||height<=0||projectedBitmapSize>drawingCacheSize){if(width>0&&height>0){Log.w(View.VIEW_LOG_TAG,"View too large to fit into drawing cache, needs "+projectedBitmapSize+" bytes, only "+drawingCacheSize+" available");}this.destroyDrawingCache();this.mCachingFailed=true;return;}if(this.mUnscaledDrawingCache&&(this.mUnscaledDrawingCache.getWidth()!==width||this.mUnscaledDrawingCache.getHeight()!==height)){this.mUnscaledDrawingCache.recycle();this.mUnscaledDrawingCache=null;}if(this.mUnscaledDrawingCache){this.mUnscaledDrawingCache.clearColor();}else{this.mUnscaledDrawingCache=new Canvas(width,height);}var canvas=this.mUnscaledDrawingCache;this.computeScroll();var restoreCount=canvas.save();canvas.translate(-this.mScrollX,-this.mScrollY);this.mPrivateFlags|=View.PFLAG_DRAWN;if(this.mAttachInfo==null||this.mLayerType!=View.LAYER_TYPE_NONE){this.mPrivateFlags|=View.PFLAG_DRAWING_CACHE_VALID;}if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)==View.PFLAG_SKIP_DRAW){this.mPrivateFlags&=~View.PFLAG_DIRTY_MASK;this.dispatchDraw(canvas);if(this.mOverlay!=null&&!this.mOverlay.isEmpty()){this.mOverlay.getOverlayView().draw(canvas);}}else{this.draw(canvas);}canvas.restoreToCount(restoreCount);}}},{key:'setWillNotDraw',value:function setWillNotDraw(willNotDraw){this.setFlags(willNotDraw?View.WILL_NOT_DRAW:0,View.DRAW_MASK);}},{key:'willNotDraw',value:function willNotDraw(){return(this.mViewFlags&View.DRAW_MASK)==View.WILL_NOT_DRAW;}},{key:'setWillNotCacheDrawing',value:function setWillNotCacheDrawing(willNotCacheDrawing){this.setFlags(willNotCacheDrawing?View.WILL_NOT_CACHE_DRAWING:0,View.WILL_NOT_CACHE_DRAWING);}},{key:'willNotCacheDrawing',value:function willNotCacheDrawing(){return(this.mViewFlags&View.WILL_NOT_CACHE_DRAWING)==View.WILL_NOT_CACHE_DRAWING;}},{key:'drawableSizeChange',value:function drawableSizeChange(who){if(who===this.mBackground){var w=who.getIntrinsicWidth();if(w<0)w=this.mBackgroundWidth;var h=who.getIntrinsicHeight();if(h<0)h=this.mBackgroundHeight;if(w!=this.mBackgroundWidth||h!=this.mBackgroundHeight){var _padding=new Rect();if(who.getPadding(_padding)){this.setPadding(_padding.left,_padding.top,_padding.right,_padding.bottom);}this.mBackgroundWidth=w;this.mBackgroundHeight=h;this.requestLayout();}}else if(this.verifyDrawable(who)){this.requestLayout();}}},{key:'invalidateDrawable',value:function invalidateDrawable(drawable){if(this.verifyDrawable(drawable)){var dirty=drawable.getBounds();var scrollX=this.mScrollX;var scrollY=this.mScrollY;this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){if(this.verifyDrawable(who)&&what!=null){var delay=when-SystemClock.uptimeMillis();if(this.mAttachInfo!=null){this.mAttachInfo.mHandler.postAtTime(what,who,when);}else{view_1.ViewRootImpl.getRunQueue().postDelayed(what,delay);}}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){if(this.verifyDrawable(who)&&what!=null){if(this.mAttachInfo!=null){this.mAttachInfo.mHandler.removeCallbacks(what,who);}else{view_1.ViewRootImpl.getRunQueue().removeCallbacks(what);}}else if(what===null){if(this.mAttachInfo!=null&&who!=null){this.mAttachInfo.mHandler.removeCallbacksAndMessages(who);}}}},{key:'verifyDrawable',value:function verifyDrawable(who){return who==this.mBackground;}},{key:'drawableStateChanged',value:function drawableStateChanged(){this.getDrawableState();var d=this.mBackground;if(d!=null&&d.isStateful()){d.setState(this.getDrawableState());}}},{key:'resolveDrawables',value:function resolveDrawables(){}},{key:'refreshDrawableState',value:function refreshDrawableState(){this.mPrivateFlags|=View.PFLAG_DRAWABLE_STATE_DIRTY;this.drawableStateChanged();var parent=this.mParent;if(parent!=null){parent.childDrawableStateChanged(this);}}},{key:'getDrawableState',value:function getDrawableState(){if(this.mDrawableState!=null&&(this.mPrivateFlags&View.PFLAG_DRAWABLE_STATE_DIRTY)==0){return this.mDrawableState;}else{var oldDrawableState=this.mDrawableState;this.mDrawableState=this.onCreateDrawableState(0);this.mPrivateFlags&=~View.PFLAG_DRAWABLE_STATE_DIRTY;this._fireStateChangeToAttribute(oldDrawableState,this.mDrawableState);return this.mDrawableState;}}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if((this.mViewFlags&View.DUPLICATE_PARENT_STATE)==View.DUPLICATE_PARENT_STATE&&this.mParent instanceof View){return this.mParent.onCreateDrawableState(extraSpace);}var drawableState=void 0;var privateFlags=this.mPrivateFlags;var viewStateIndex=0;if((privateFlags&View.PFLAG_PRESSED)!=0)viewStateIndex|=View.VIEW_STATE_PRESSED;if((this.mViewFlags&View.ENABLED_MASK)==View.ENABLED)viewStateIndex|=View.VIEW_STATE_ENABLED;if(this.isFocused())viewStateIndex|=View.VIEW_STATE_FOCUSED;if((privateFlags&View.PFLAG_SELECTED)!=0)viewStateIndex|=View.VIEW_STATE_SELECTED;if(this.hasWindowFocus())viewStateIndex|=View.VIEW_STATE_WINDOW_FOCUSED;if((privateFlags&View.PFLAG_ACTIVATED)!=0)viewStateIndex|=View.VIEW_STATE_ACTIVATED;var privateFlags2=this.mPrivateFlags2;drawableState=View.VIEW_STATE_SETS[viewStateIndex];if(extraSpace==0){return drawableState;}var fullState=void 0;if(drawableState!=null){fullState=androidui.util.ArrayCreator.newNumberArray(drawableState.length+extraSpace);System.arraycopy(drawableState,0,fullState,0,drawableState.length);}else{fullState=androidui.util.ArrayCreator.newNumberArray(extraSpace);}return fullState;}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){if(this.mBackground!=null){this.mBackground.jumpToCurrentState();}}},{key:'setBackgroundColor',value:function setBackgroundColor(color){if(this.mBackground instanceof ColorDrawable){this.mBackground.mutate().setColor(color);this.computeOpaqueFlags();}else{this.setBackground(new ColorDrawable(color));}}},{key:'setBackground',value:function setBackground(background){this.setBackgroundDrawable(background);}},{key:'getBackground',value:function getBackground(){return this.mBackground;}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(background){this.computeOpaqueFlags();if(background==this.mBackground){return;}var requestLayout=false;if(this.mBackground!=null){this.mBackground.setCallback(null);this.unscheduleDrawable(this.mBackground);}if(background!=null){var _padding2=new Rect();if(background.getPadding(_padding2)){this.setPadding(_padding2.left,_padding2.top,_padding2.right,_padding2.bottom);}if(this.mBackground==null||this.mBackground.getMinimumHeight()!=background.getMinimumHeight()||this.mBackground.getMinimumWidth()!=background.getMinimumWidth()){requestLayout=true;}background.setCallback(this);if(background.isStateful()){background.setState(this.getDrawableState());}background.setVisible(this.getVisibility()==View.VISIBLE,false);this.mBackground=background;this.mBackgroundWidth=background.getIntrinsicWidth();this.mBackgroundHeight=background.getIntrinsicHeight();if((this.mPrivateFlags&View.PFLAG_SKIP_DRAW)!=0){this.mPrivateFlags&=~View.PFLAG_SKIP_DRAW;this.mPrivateFlags|=View.PFLAG_ONLY_DRAWS_BACKGROUND;requestLayout=true;}}else{this.mBackground=null;this.mBackgroundWidth=this.mBackgroundHeight=-1;if((this.mPrivateFlags&View.PFLAG_ONLY_DRAWS_BACKGROUND)!=0){this.mPrivateFlags&=~View.PFLAG_ONLY_DRAWS_BACKGROUND;this.mPrivateFlags|=View.PFLAG_SKIP_DRAW;}requestLayout=true;}this.computeOpaqueFlags();if(requestLayout){this.requestLayout();}this.mBackgroundSizeChanged=true;this.mShadowDrawable=null;this.invalidate(true);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){return this.getWidth();}},{key:'computeHorizontalScrollOffset',value:function computeHorizontalScrollOffset(){return this.mScrollX;}},{key:'computeHorizontalScrollExtent',value:function computeHorizontalScrollExtent(){return this.getWidth();}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){return this.getHeight();}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return this.mScrollY;}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight();}},{key:'canScrollHorizontally',value:function canScrollHorizontally(direction){var offset=this.computeHorizontalScrollOffset();var range=this.computeHorizontalScrollRange()-this.computeHorizontalScrollExtent();if(range==0)return false;if(direction<0){return offset>0;}else{return offset0;}else{return offsetthis.computeHorizontalScrollExtent();var canScrollVertical=this.computeVerticalScrollRange()>this.computeVerticalScrollExtent();var overScrollHorizontal=overScrollMode==View.OVER_SCROLL_ALWAYS||overScrollMode==View.OVER_SCROLL_IF_CONTENT_SCROLLS&&canScrollHorizontal;var overScrollVertical=overScrollMode==View.OVER_SCROLL_ALWAYS||overScrollMode==View.OVER_SCROLL_IF_CONTENT_SCROLLS&&canScrollVertical;if(isTouchEvent){if(deltaX<0&&scrollX<=0||deltaX>0&&scrollX>=scrollRangeX){deltaX/=2;}if(deltaY<0&&scrollY<=0||deltaY>0&&scrollY>=scrollRangeY){deltaY/=2;}}var newScrollX=scrollX+deltaX;if(!overScrollHorizontal){maxOverScrollX=0;}var newScrollY=scrollY+deltaY;if(!overScrollVertical){maxOverScrollY=0;}var left=-maxOverScrollX;var right=maxOverScrollX+scrollRangeX;var top=-maxOverScrollY;var bottom=maxOverScrollY+scrollRangeY;var clampedX=false;if(newScrollX>right){newScrollX=right;clampedX=true;}else if(newScrollXbottom){newScrollY=bottom;clampedY=true;}else if(newScrollY1&&arguments[1]!==undefined?arguments[1]:true;var scrollCache=this.mScrollCache;if(scrollCache==null)return false;startDelay=startDelay||scrollCache.scrollBarDefaultDelayBeforeFade;if(scrollCache==null||!scrollCache.fadeScrollBars){return false;}if(scrollCache.scrollBar==null){scrollCache.scrollBar=new ScrollBarDrawable();}if(this.isHorizontalScrollBarEnabled()||this.isVerticalScrollBarEnabled()){if(invalidate){this.postInvalidateOnAnimation();}if(scrollCache.state==ScrollabilityCache.OFF){var KEY_REPEAT_FIRST_DELAY=750;startDelay=Math.max(KEY_REPEAT_FIRST_DELAY,startDelay);}var fadeStartTime=AnimationUtils.currentAnimationTimeMillis()+startDelay;scrollCache.fadeStartTime=fadeStartTime;scrollCache.state=ScrollabilityCache.ON;if(this.mAttachInfo!=null){this.mAttachInfo.mHandler.removeCallbacks(scrollCache);this.mAttachInfo.mHandler.postAtTime(scrollCache,fadeStartTime);}return true;}return false;}},{key:'getVerticalFadingEdgeLength',value:function getVerticalFadingEdgeLength(){return 0;}},{key:'setVerticalFadingEdgeEnabled',value:function setVerticalFadingEdgeEnabled(enable){}},{key:'setHorizontalFadingEdgeEnabled',value:function setHorizontalFadingEdgeEnabled(enable){}},{key:'setFadingEdgeLength',value:function setFadingEdgeLength(length){}},{key:'getHorizontalFadingEdgeLength',value:function getHorizontalFadingEdgeLength(){return 0;}},{key:'getVerticalScrollbarWidth',value:function getVerticalScrollbarWidth(){var cache=this.mScrollCache;if(cache!=null){var scrollBar=cache.scrollBar;if(scrollBar!=null){var size=scrollBar.getSize(true);if(size<=0){size=cache.scrollBarSize;}return size;}return 0;}return 0;}},{key:'getHorizontalScrollbarHeight',value:function getHorizontalScrollbarHeight(){var cache=this.mScrollCache;if(cache!=null){var scrollBar=cache.scrollBar;if(scrollBar!=null){var size=scrollBar.getSize(false);if(size<=0){size=cache.scrollBarSize;}return size;}return 0;}return 0;}},{key:'initializeScrollbars',value:function initializeScrollbars(a){this.initScrollCache();}},{key:'initScrollCache',value:function initScrollCache(){if(this.mScrollCache==null){this.mScrollCache=new ScrollabilityCache(this);}}},{key:'getScrollCache',value:function getScrollCache(){this.initScrollCache();return this.mScrollCache;}},{key:'isHorizontalScrollBarEnabled',value:function isHorizontalScrollBarEnabled(){return(this.mViewFlags&View.SCROLLBARS_HORIZONTAL)==View.SCROLLBARS_HORIZONTAL;}},{key:'setHorizontalScrollBarEnabled',value:function setHorizontalScrollBarEnabled(horizontalScrollBarEnabled){if(this.isHorizontalScrollBarEnabled()!=horizontalScrollBarEnabled){this.mViewFlags^=View.SCROLLBARS_HORIZONTAL;this.computeOpaqueFlags();}}},{key:'isVerticalScrollBarEnabled',value:function isVerticalScrollBarEnabled(){return(this.mViewFlags&View.SCROLLBARS_VERTICAL)==View.SCROLLBARS_VERTICAL;}},{key:'setVerticalScrollBarEnabled',value:function setVerticalScrollBarEnabled(verticalScrollBarEnabled){if(this.isVerticalScrollBarEnabled()!=verticalScrollBarEnabled){this.mViewFlags^=View.SCROLLBARS_VERTICAL;this.computeOpaqueFlags();}}},{key:'setScrollbarFadingEnabled',value:function setScrollbarFadingEnabled(fadeScrollbars){this.initScrollCache();var scrollabilityCache=this.mScrollCache;scrollabilityCache.fadeScrollBars=fadeScrollbars;if(fadeScrollbars){scrollabilityCache.state=ScrollabilityCache.OFF;}else{scrollabilityCache.state=ScrollabilityCache.ON;}}},{key:'setVerticalScrollbarPosition',value:function setVerticalScrollbarPosition(position){}},{key:'setHorizontalScrollbarPosition',value:function setHorizontalScrollbarPosition(position){}},{key:'setScrollBarStyle',value:function setScrollBarStyle(position){}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){return 0;}},{key:'getBottomFadingEdgeStrength',value:function getBottomFadingEdgeStrength(){return 0;}},{key:'getLeftFadingEdgeStrength',value:function getLeftFadingEdgeStrength(){return 0;}},{key:'getRightFadingEdgeStrength',value:function getRightFadingEdgeStrength(){return 0;}},{key:'isScrollbarFadingEnabled',value:function isScrollbarFadingEnabled(){return this.mScrollCache!=null&&this.mScrollCache.fadeScrollBars;}},{key:'getScrollBarDefaultDelayBeforeFade',value:function getScrollBarDefaultDelayBeforeFade(){return this.mScrollCache==null?view_1.ViewConfiguration.getScrollDefaultDelay():this.mScrollCache.scrollBarDefaultDelayBeforeFade;}},{key:'setScrollBarDefaultDelayBeforeFade',value:function setScrollBarDefaultDelayBeforeFade(scrollBarDefaultDelayBeforeFade){this.getScrollCache().scrollBarDefaultDelayBeforeFade=scrollBarDefaultDelayBeforeFade;}},{key:'getScrollBarFadeDuration',value:function getScrollBarFadeDuration(){return this.mScrollCache==null?view_1.ViewConfiguration.getScrollBarFadeDuration():this.mScrollCache.scrollBarFadeDuration;}},{key:'setScrollBarFadeDuration',value:function setScrollBarFadeDuration(scrollBarFadeDuration){this.getScrollCache().scrollBarFadeDuration=scrollBarFadeDuration;}},{key:'getScrollBarSize',value:function getScrollBarSize(){return this.mScrollCache==null?view_1.ViewConfiguration.get().getScaledScrollBarSize():this.mScrollCache.scrollBarSize;}},{key:'setScrollBarSize',value:function setScrollBarSize(scrollBarSize){this.getScrollCache().scrollBarSize=scrollBarSize;}},{key:'hasOpaqueScrollbars',value:function hasOpaqueScrollbars(){return true;}},{key:'assignParent',value:function assignParent(parent){if(this.mParent==null){this.mParent=parent;}else if(parent==null){this.mParent=null;}else{throw new Error("view "+this+" being added, but"+" it already has a parent");}}},{key:'onFinishInflate',value:function onFinishInflate(){}},{key:'dispatchStartTemporaryDetach',value:function dispatchStartTemporaryDetach(){this.onStartTemporaryDetach();}},{key:'onStartTemporaryDetach',value:function onStartTemporaryDetach(){this.removeUnsetPressCallback();this.mPrivateFlags|=View.PFLAG_CANCEL_NEXT_UP_EVENT;}},{key:'dispatchFinishTemporaryDetach',value:function dispatchFinishTemporaryDetach(){this.onFinishTemporaryDetach();}},{key:'onFinishTemporaryDetach',value:function onFinishTemporaryDetach(){}},{key:'dispatchWindowFocusChanged',value:function dispatchWindowFocusChanged(hasFocus){this.onWindowFocusChanged(hasFocus);}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){if(!hasWindowFocus){if(this.isPressed()){this.setPressed(false);}this.removeLongPressCallback();this.removeTapCallback();this.onFocusLost();}this.refreshDrawableState();}},{key:'hasWindowFocus',value:function hasWindowFocus(){return this.mAttachInfo!=null&&this.mAttachInfo.mHasWindowFocus;}},{key:'getWindowAttachCount',value:function getWindowAttachCount(){return this.mWindowAttachCount;}},{key:'isAttachedToWindow',value:function isAttachedToWindow(){return this.mAttachInfo!=null;}},{key:'dispatchAttachedToWindow',value:function dispatchAttachedToWindow(info,visibility){this.mAttachInfo=info;if(this.mOverlay!=null){this.mOverlay.getOverlayView().dispatchAttachedToWindow(info,visibility);}this.mWindowAttachCount++;this.mPrivateFlags|=View.PFLAG_DRAWABLE_STATE_DIRTY;if(this.mFloatingTreeObserver!=null){info.mViewRootImpl.mTreeObserver.merge(this.mFloatingTreeObserver);this.mFloatingTreeObserver=null;}if((this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER)!=0){this.mAttachInfo.mScrollContainers.add(this);this.mPrivateFlags|=View.PFLAG_SCROLL_CONTAINER_ADDED;}this.onAttachedToWindow();if(this.dependOnDebugLayout()){this.getContext().androidUI.viewAttachedDependOnDebugLayout(this);}var li=this.mListenerInfo;var listeners=li!=null?li.mOnAttachStateChangeListeners:null;if(listeners!=null&&listeners.size()>0){var _iteratorNormalCompletion40=true;var _didIteratorError40=false;var _iteratorError40=undefined;try{for(var _iterator40=listeners[Symbol.iterator](),_step40;!(_iteratorNormalCompletion40=(_step40=_iterator40.next()).done);_iteratorNormalCompletion40=true){var listener=_step40.value;listener.onViewAttachedToWindow(this);}}catch(err){_didIteratorError40=true;_iteratorError40=err;}finally{try{if(!_iteratorNormalCompletion40&&_iterator40.return){_iterator40.return();}}finally{if(_didIteratorError40){throw _iteratorError40;}}}}var vis=info.mWindowVisibility;if(vis!=View.GONE){this.onWindowVisibilityChanged(vis);}if((this.mPrivateFlags&View.PFLAG_DRAWABLE_STATE_DIRTY)!=0){this.refreshDrawableState();}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){if((this.mPrivateFlags&View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH)!=0){this.initialAwakenScrollBars();this.mPrivateFlags&=~View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;}this.mPrivateFlags3&=~View.PFLAG3_IS_LAID_OUT;this.jumpDrawablesToCurrentState();}},{key:'dispatchDetachedFromWindow',value:function dispatchDetachedFromWindow(){var info=this.mAttachInfo;if(info!=null){var vis=info.mWindowVisibility;if(vis!=View.GONE){this.onWindowVisibilityChanged(View.GONE);}}this.onDetachedFromWindow();if(this.dependOnDebugLayout()){this.getContext().androidUI.viewDetachedDependOnDebugLayout(this);}var li=this.mListenerInfo;var listeners=li!=null?li.mOnAttachStateChangeListeners:null;if(listeners!=null&&listeners.size()>0){var _iteratorNormalCompletion41=true;var _didIteratorError41=false;var _iteratorError41=undefined;try{for(var _iterator41=listeners[Symbol.iterator](),_step41;!(_iteratorNormalCompletion41=(_step41=_iterator41.next()).done);_iteratorNormalCompletion41=true){var listener=_step41.value;listener.onViewDetachedFromWindow(this);}}catch(err){_didIteratorError41=true;_iteratorError41=err;}finally{try{if(!_iteratorNormalCompletion41&&_iterator41.return){_iterator41.return();}}finally{if(_didIteratorError41){throw _iteratorError41;}}}}if((this.mPrivateFlags&View.PFLAG_SCROLL_CONTAINER_ADDED)!=0){this.mAttachInfo.mScrollContainers.delete(this);this.mPrivateFlags&=~View.PFLAG_SCROLL_CONTAINER_ADDED;}this.mAttachInfo=null;if(this.mOverlay!=null){this.mOverlay.getOverlayView().dispatchDetachedFromWindow();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){this.mPrivateFlags&=~View.PFLAG_CANCEL_NEXT_UP_EVENT;this.mPrivateFlags3&=~View.PFLAG3_IS_LAID_OUT;this.removeUnsetPressCallback();this.removeLongPressCallback();this.removePerformClickCallback();this.destroyDrawingCache();this.cleanupDraw();this.mCurrentAnimation=null;}},{key:'cleanupDraw',value:function cleanupDraw(){if(this.mAttachInfo!=null){this.mAttachInfo.mViewRootImpl.cancelInvalidate(this);}}},{key:'isInEditMode',value:function isInEditMode(){return false;}},{key:'debug',value:function debug(){var depth=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;console.dir(this.bindElement);}},{key:'toString',value:function toString(){return this.tagName();}},{key:'getRootView',value:function getRootView(){if(this.mAttachInfo!=null){var v=this.mAttachInfo.mRootView;if(v!=null){return v;}}var parent=this;while(parent.mParent!=null&&parent.mParent instanceof View){parent=parent.mParent;}return parent;}},{key:'findViewById',value:function findViewById(id){if(!id)return null;return this.findViewTraversal(id);}},{key:'findViewWithTag',value:function findViewWithTag(tag){if(!tag)return null;return this.findViewWithTagTraversal(tag);}},{key:'findViewTraversal',value:function findViewTraversal(id){if(id==this.mID){return this;}return null;}},{key:'findViewWithTagTraversal',value:function findViewWithTagTraversal(tag){if(tag!=null&&tag===this.mTag){return this;}return null;}},{key:'findViewByPredicate',value:function findViewByPredicate(predicate){return this.findViewByPredicateTraversal(predicate,null);}},{key:'findViewByPredicateTraversal',value:function findViewByPredicateTraversal(predicate,childToSkip){if(predicate.apply(this)){return this;}return null;}},{key:'findViewByPredicateInsideOut',value:function findViewByPredicateInsideOut(start,predicate){var childToSkip=null;for(;;){var _view3=start.findViewByPredicateTraversal(predicate,childToSkip);if(_view3!=null||start==this){return _view3;}var parent=start.getParent();if(parent==null||!(parent instanceof View)){return null;}childToSkip=start;start=parent;}}},{key:'setId',value:function setId(id){this.mID=id;}},{key:'getId',value:function getId(){return this.mID;}},{key:'getTag',value:function getTag(){return this.mTag;}},{key:'setTag',value:function setTag(tag){this.mTag=tag;}},{key:'setIsRootNamespace',value:function setIsRootNamespace(isRoot){if(isRoot){this.mPrivateFlags|=View.PFLAG_IS_ROOT_NAMESPACE;}else{this.mPrivateFlags&=~View.PFLAG_IS_ROOT_NAMESPACE;}}},{key:'isRootNamespace',value:function isRootNamespace(){return(this.mPrivateFlags&View.PFLAG_IS_ROOT_NAMESPACE)!=0;}},{key:'getResources',value:function getResources(){var context=this.getContext();if(context!=null){return context.getResources();}return Resources.getSystem();}},{key:'initBindElement',value:function initBindElement(bindElement){if(this.bindElement){this.bindElement[View.AndroidViewProperty]=null;}this.bindElement=bindElement||document.createElement(this.tagName());this.bindElement.style.position='absolute';var oldBindView=this.bindElement[View.AndroidViewProperty];if(oldBindView){if(oldBindView._AttrObserver)oldBindView._AttrObserver.disconnect();}this.bindElement[View.AndroidViewProperty]=this;this._initAttrObserver();}},{key:'initBindAttr',value:function initBindAttr(){var classAttrBinder=View.ViewClassAttrBinderClazzMap.get(this.getClass());if(!classAttrBinder){classAttrBinder=this.createClassAttrBinder();View.ViewClassAttrBinderClazzMap.set(this.getClass(),classAttrBinder);}this._attrBinder.setClassAttrBind(classAttrBinder);}},{key:'createClassAttrBinder',value:function createClassAttrBinder(){var classAttrBinder=new AttrBinder.ClassBinderMap().set('background',{setter:function setter(v,value,attrBinder){v.setBackground(attrBinder.parseDrawable(value));},getter:function getter(v){return v.mBackground;}}).set('padding',{setter:function setter(v,value,attrBinder){if(value==null)value=0;var _attrBinder$parsePadd=attrBinder.parsePaddingMarginTRBL(value),_attrBinder$parsePadd2=_slicedToArray(_attrBinder$parsePadd,4),top=_attrBinder$parsePadd2[0],right=_attrBinder$parsePadd2[1],bottom=_attrBinder$parsePadd2[2],left=_attrBinder$parsePadd2[3];v.setPadding(left,top,right,bottom);},getter:function getter(v){return v.mPaddingTop+' '+v.mPaddingRight+' '+v.mPaddingBottom+' '+v.mPaddingLeft;}}).set('paddingLeft',{setter:function setter(v,value,attrBinder){if(value==null)value=0;v.setPadding(attrBinder.parseDimension(value,0),v.mPaddingTop,v.mPaddingRight,v.mPaddingBottom);},getter:function getter(v){return v.mPaddingLeft;}}).set('paddingTop',{setter:function setter(v,value,attrBinder){if(value==null)value=0;v.setPadding(v.mPaddingLeft,attrBinder.parseDimension(value,0),v.mPaddingRight,v.mPaddingBottom);},getter:function getter(v){return v.mPaddingTop;}}).set('paddingRight',{setter:function setter(v,value,attrBinder){if(value==null)value=0;v.setPadding(v.mPaddingLeft,v.mPaddingTop,attrBinder.parseDimension(value,0),v.mPaddingBottom);},getter:function getter(v){return v.mPaddingRight;}}).set('paddingBottom',{setter:function setter(v,value,attrBinder){if(value==null)value=0;v.setPadding(v.mPaddingLeft,v.mPaddingTop,v.mPaddingRight,attrBinder.parseDimension(value,0));},getter:function getter(v){return v.mPaddingBottom;}}).set('scrollX',{setter:function setter(v,value,attrBinder){value=attrBinder.parseNumberPixelOffset(value);if(Number.isInteger(value))v.scrollTo(value,v.mScrollY);},getter:function getter(v){v.getScrollX();}}).set('scrollY',{setter:function setter(v,value,attrBinder){value=attrBinder.parseNumberPixelOffset(value);if(Number.isInteger(value))v.scrollTo(v.mScrollX,value);},getter:function getter(v){return v.getScrollY();}}).set('alpha',{setter:function setter(v,value,attrBinder){v.setAlpha(attrBinder.parseFloat(value,v.getAlpha()));},getter:function getter(v){return v.getAlpha();}}).set('transformPivotX',{setter:function setter(v,value,attrBinder){v.setPivotX(attrBinder.parseNumberPixelOffset(value,v.getPivotX()));},getter:function getter(v){return v.getPivotX();}}).set('transformPivotY',{setter:function setter(v,value,attrBinder){v.setPivotY(attrBinder.parseNumberPixelOffset(value,v.getPivotY()));},getter:function getter(v){return v.getPivotY();}}).set('translationX',{setter:function setter(v,value,attrBinder){v.setTranslationX(attrBinder.parseNumberPixelOffset(value,v.getTranslationX()));},getter:function getter(v){return v.getTranslationX();}}).set('translationY',{setter:function setter(v,value,attrBinder){v.setTranslationY(attrBinder.parseNumberPixelOffset(value,v.getTranslationY()));},getter:function getter(v){return v.getTranslationY();}}).set('rotation',{setter:function setter(v,value,attrBinder){v.setRotation(attrBinder.parseFloat(value,v.getRotation()));},getter:function getter(v){return v.getRotation();}}).set('scaleX',{setter:function setter(v,value,attrBinder){v.setScaleX(attrBinder.parseFloat(value,v.getScaleX()));},getter:function getter(v){return v.getScaleX();}}).set('scaleY',{setter:function setter(v,value,attrBinder){v.setScaleY(attrBinder.parseFloat(value,v.getScaleY()));},getter:function getter(v){return v.getScaleY();}}).set('tag',{setter:function setter(v,value,attrBinder){v.setTag(value);},getter:function getter(v){return v.getTag();}}).set('id',{setter:function setter(v,value,attrBinder){v.setId(value);},getter:function getter(v){return v.getId();}}).set('focusable',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}},getter:function getter(v){return v.isFocusable();}}).set('focusableInTouchMode',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE,View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE_MASK);}},getter:function getter(v){return v.isFocusableInTouchMode();}}).set('clickable',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setFlags(View.CLICKABLE,View.CLICKABLE);}},getter:function getter(v){return v.isClickable();}}).set('longClickable',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setFlags(View.LONG_CLICKABLE,View.LONG_CLICKABLE);}},getter:function getter(v){return v.isLongClickable();}}).set('duplicateParentState',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setFlags(View.DUPLICATE_PARENT_STATE,View.DUPLICATE_PARENT_STATE);}},getter:function getter(v){return(v.mViewFlags&View.DUPLICATE_PARENT_STATE)==View.DUPLICATE_PARENT_STATE;}}).set('visibility',{setter:function setter(v,value,attrBinder){if(value==='gone')v.setVisibility(View.GONE);else if(value==='invisible')v.setVisibility(View.INVISIBLE);else if(value==='visible')v.setVisibility(View.VISIBLE);},getter:function getter(v){return v.getVisibility();}}).set('scrollbars',{setter:function setter(v,value,attrBinder){if(value==='none'){v.setHorizontalScrollBarEnabled(false);v.setVerticalScrollBarEnabled(false);}else if(value==='horizontal'){v.setHorizontalScrollBarEnabled(true);v.setVerticalScrollBarEnabled(false);}else if(value==='vertical'){v.setHorizontalScrollBarEnabled(false);v.setVerticalScrollBarEnabled(true);}}}).set('isScrollContainer',{setter:function setter(v,value,attrBinder){if(attrBinder.parseBoolean(value,false)){v.setScrollContainer(true);}},getter:function getter(v){return v.isScrollContainer();}}).set('minWidth',{setter:function setter(v,value,attrBinder){v.setMinimumWidth(attrBinder.parseNumberPixelSize(value,0));},getter:function getter(v){return v.mMinWidth;}}).set('minHeight',{setter:function setter(v,value,attrBinder){v.setMinimumHeight(attrBinder.parseNumberPixelSize(value,0));},getter:function getter(v){return v.mMinHeight;}}).set('onClick',{setter:function setter(v,value,attrBinder){if(value&&typeof value==='string'){v.setOnClickListenerByAttrValueString(value);}v.bindElement.removeAttribute('onclick');}}).set('overScrollMode',{setter:function setter(v,value,attrBinder){var scrollMode=View[('OVER_SCROLL_'+value).toUpperCase()];if(scrollMode===undefined)scrollMode=View.OVER_SCROLL_IF_CONTENT_SCROLLS;v.setOverScrollMode(scrollMode);}}).set('layerType',{setter:function setter(v,value,attrBinder){if((value+'').toLowerCase()=='software'){v.setLayerType(View.LAYER_TYPE_SOFTWARE);}else{v.setLayerType(View.LAYER_TYPE_NONE);}}}).set('cornerRadius',{setter:function setter(v,value,attrBinder){var _attrBinder$parsePadd3=attrBinder.parsePaddingMarginTRBL(value),_attrBinder$parsePadd4=_slicedToArray(_attrBinder$parsePadd3,4),topRight=_attrBinder$parsePadd4[0],rightBottom=_attrBinder$parsePadd4[1],bottomLeft=_attrBinder$parsePadd4[2],leftTop=_attrBinder$parsePadd4[3];v.setCornerRadius(leftTop,topRight,rightBottom,bottomLeft);},getter:function getter(v){return v.mCornerRadiusTopRight+' '+v.mCornerRadiusBottomRight+' '+v.mCornerRadiusBottomLeft+' '+v.mCornerRadiusTopLeft;}}).set('cornerRadiusTopLeft',{setter:function setter(v,value,attrBinder){v.setCornerRadiusTopLeft(attrBinder.parseNumberPixelSize(value,v.mCornerRadiusTopLeft));},getter:function getter(v){return v.mCornerRadiusTopLeft;}}).set('cornerRadiusTopRight',{setter:function setter(v,value,attrBinder){v.setCornerRadiusTopRight(attrBinder.parseNumberPixelSize(value,v.mCornerRadiusTopRight));},getter:function getter(v){return v.mCornerRadiusTopRight;}}).set('cornerRadiusBottomLeft',{setter:function setter(v,value,attrBinder){v.setCornerRadiusBottomLeft(attrBinder.parseNumberPixelSize(value,v.mCornerRadiusBottomLeft));},getter:function getter(v){return v.mCornerRadiusBottomLeft;}}).set('cornerRadiusBottomRight',{setter:function setter(v,value,attrBinder){v.setCornerRadiusBottomRight(attrBinder.parseNumberPixelSize(value,v.mCornerRadiusBottomRight));},getter:function getter(v){return v.mCornerRadiusBottomRight;}}).set('viewShadowColor',{setter:function setter(v,value,attrBinder){if(!v.mShadowPaint)v.mShadowPaint=new Paint();v.setShadowView(v.mShadowPaint.shadowRadius,v.mShadowPaint.shadowDx,v.mShadowPaint.shadowDy,attrBinder.parseColor(value,v.mShadowPaint.shadowColor));},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowColor;}}).set('viewShadowDx',{setter:function setter(v,value,attrBinder){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var dx=attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowDx);v.setShadowView(v.mShadowPaint.shadowRadius,dx,v.mShadowPaint.shadowDy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowDx;}}).set('viewShadowDy',{setter:function setter(v,value,attrBinder){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var dy=attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowDy);v.setShadowView(v.mShadowPaint.shadowRadius,v.mShadowPaint.shadowDx,dy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowDy;}}).set('viewShadowRadius',{setter:function setter(v,value,attrBinder){if(!v.mShadowPaint)v.mShadowPaint=new Paint();var radius=attrBinder.parseNumberPixelSize(value,v.mShadowPaint.shadowRadius);v.setShadowView(radius,v.mShadowPaint.shadowDx,v.mShadowPaint.shadowDy,v.mShadowPaint.shadowColor);},getter:function getter(v){if(v.mShadowPaint)return v.mShadowPaint.shadowRadius;}});classAttrBinder.set('paddingStart',classAttrBinder.get('paddingLeft'));classAttrBinder.set('paddingEnd',classAttrBinder.get('paddingRight'));return classAttrBinder;}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this.dependOnDebugLayout();var rootView=this.getRootView();if(!rootView)return;if(!rootView._syncToElementRun){rootView._syncToElementRun={run:function run(){rootView._syncToElementLock=false;rootView._syncToElementImmediatelyLock=false;rootView._syncBoundAndScrollToElement();}};}if(immediately){if(rootView._syncToElementImmediatelyLock)return;rootView._syncToElementImmediatelyLock=true;rootView._syncToElementLock=true;rootView.removeCallbacks(rootView._syncToElementRun);rootView.post(rootView._syncToElementRun);return;}if(rootView._syncToElementLock)return;rootView._syncToElementLock=true;rootView.postDelayed(rootView._syncToElementRun,1000);}},{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){if(!this.isAttachedToWindow()){return;}var left=this.mLeft;var top=this.mTop;var width=this.getWidth();var height=this.getHeight();var parent=this.getParent();var pScrollX=parent instanceof View?parent.mScrollX:0;var pScrollY=parent instanceof View?parent.mScrollY:0;if(left!==this._lastSyncLeft||top!==this._lastSyncTop||width!==this._lastSyncWidth||height!==this._lastSyncHeight||pScrollX!==this._lastSyncScrollX||pScrollY!==this._lastSyncScrollY){this._lastSyncLeft=left;this._lastSyncTop=top;this._lastSyncWidth=width;this._lastSyncHeight=height;this._lastSyncScrollX=pScrollX;this._lastSyncScrollY=pScrollY;var density=this.getResources().getDisplayMetrics().density;var bind=this.bindElement;bind.style.width=width/density+'px';bind.style.height=height/density+'px';bind.style.left=(left-pScrollX)/density+'px';bind.style.top=(top-pScrollY)/density+'px';if(bind.parentElement){bind.parentElement.scrollTop=0;}this.getMatrix();}if(this instanceof view_1.ViewGroup){var group=this;for(var i=0,count=group.getChildCount();i=0&&!baseState[i]){i--;}System.arraycopy(additionalState,0,baseState,i+1,additionalState.length);return baseState;}},{key:'inflate',value:function inflate(context,xml,root){return view_1.LayoutInflater.from(context).inflate(xml,root);}},{key:'_AttrObserverCallBack',value:function _AttrObserverCallBack(arr,observer){arr.forEach(function(record){var target=record.target;var androidView=target[View.AndroidViewProperty];if(!androidView)return;var attrName=record.attributeName;var newValue=target.getAttribute(attrName);var oldValue=record.oldValue;if(newValue===oldValue)return;androidView.onBindElementAttributeChanged(attrName,record.oldValue,newValue);});}}]);return View;}(JavaObject);View.DBG=Log.View_DBG;View.VIEW_LOG_TAG="View";View.PFLAG_WANTS_FOCUS=0x00000001;View.PFLAG_FOCUSED=0x00000002;View.PFLAG_SELECTED=0x00000004;View.PFLAG_IS_ROOT_NAMESPACE=0x00000008;View.PFLAG_HAS_BOUNDS=0x00000010;View.PFLAG_DRAWN=0x00000020;View.PFLAG_DRAW_ANIMATION=0x00000040;View.PFLAG_SKIP_DRAW=0x00000080;View.PFLAG_ONLY_DRAWS_BACKGROUND=0x00000100;View.PFLAG_REQUEST_TRANSPARENT_REGIONS=0x00000200;View.PFLAG_DRAWABLE_STATE_DIRTY=0x00000400;View.PFLAG_MEASURED_DIMENSION_SET=0x00000800;View.PFLAG_FORCE_LAYOUT=0x00001000;View.PFLAG_LAYOUT_REQUIRED=0x00002000;View.PFLAG_PRESSED=0x00004000;View.PFLAG_DRAWING_CACHE_VALID=0x00008000;View.PFLAG_ANIMATION_STARTED=0x00010000;View.PFLAG_ALPHA_SET=0x00040000;View.PFLAG_SCROLL_CONTAINER=0x00080000;View.PFLAG_SCROLL_CONTAINER_ADDED=0x00100000;View.PFLAG_DIRTY=0x00200000;View.PFLAG_DIRTY_OPAQUE=0x00400000;View.PFLAG_DIRTY_MASK=0x00600000;View.PFLAG_OPAQUE_BACKGROUND=0x00800000;View.PFLAG_OPAQUE_SCROLLBARS=0x01000000;View.PFLAG_OPAQUE_MASK=0x01800000;View.PFLAG_PREPRESSED=0x02000000;View.PFLAG_CANCEL_NEXT_UP_EVENT=0x04000000;View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH=0x08000000;View.PFLAG_HOVERED=0x10000000;View.PFLAG_PIVOT_EXPLICITLY_SET=0x20000000;View.PFLAG_ACTIVATED=0x40000000;View.PFLAG_INVALIDATED=0x80000000;View.PFLAG2_VIEW_QUICK_REJECTED=0x10000000;View.PFLAG2_HAS_TRANSIENT_STATE=0x80000000;View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM=0x1;View.PFLAG3_VIEW_IS_ANIMATING_ALPHA=0x2;View.PFLAG3_IS_LAID_OUT=0x4;View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT=0x8;View.PFLAG3_CALLED_SUPER=0x10;View.NOT_FOCUSABLE=0x00000000;View.FOCUSABLE=0x00000001;View.FOCUSABLE_MASK=0x00000001;View.OVER_SCROLL_ALWAYS=0;View.OVER_SCROLL_IF_CONTENT_SCROLLS=1;View.OVER_SCROLL_NEVER=2;View.MEASURED_SIZE_MASK=0x00ffffff;View.MEASURED_STATE_MASK=0xff000000;View.MEASURED_HEIGHT_STATE_SHIFT=16;View.MEASURED_STATE_TOO_SMALL=0x01000000;View.VISIBILITY_MASK=0x0000000C;View.VISIBLE=0x00000000;View.INVISIBLE=0x00000004;View.GONE=0x00000008;View.ENABLED=0x00000000;View.DISABLED=0x00000020;View.ENABLED_MASK=0x00000020;View.WILL_NOT_DRAW=0x00000080;View.DRAW_MASK=0x00000080;View.SCROLLBARS_NONE=0x00000000;View.SCROLLBARS_HORIZONTAL=0x00000100;View.SCROLLBARS_VERTICAL=0x00000200;View.SCROLLBARS_MASK=0x00000300;View.FOCUSABLES_ALL=0x00000000;View.FOCUSABLES_TOUCH_MODE=0x00000001;View.FOCUS_BACKWARD=0x00000001;View.FOCUS_FORWARD=0x00000002;View.FOCUS_LEFT=0x00000011;View.FOCUS_UP=0x00000021;View.FOCUS_RIGHT=0x00000042;View.FOCUS_DOWN=0x00000082;View.VIEW_STATE_WINDOW_FOCUSED=1;View.VIEW_STATE_SELECTED=1<<1;View.VIEW_STATE_FOCUSED=1<<2;View.VIEW_STATE_ENABLED=1<<3;View.VIEW_STATE_PRESSED=1<<4;View.VIEW_STATE_ACTIVATED=1<<5;View.VIEW_STATE_HOVERED=1<<7;View.VIEW_STATE_CHECKED=1<<10;View.VIEW_STATE_MULTILINE=1<<11;View.VIEW_STATE_EXPANDED=1<<12;View.VIEW_STATE_EMPTY=1<<13;View.VIEW_STATE_LAST=1<<14;View.VIEW_STATE_IDS=[View.VIEW_STATE_WINDOW_FOCUSED,View.VIEW_STATE_WINDOW_FOCUSED,View.VIEW_STATE_SELECTED,View.VIEW_STATE_SELECTED,View.VIEW_STATE_FOCUSED,View.VIEW_STATE_FOCUSED,View.VIEW_STATE_ENABLED,View.VIEW_STATE_ENABLED,View.VIEW_STATE_PRESSED,View.VIEW_STATE_PRESSED,View.VIEW_STATE_ACTIVATED,View.VIEW_STATE_ACTIVATED,View.VIEW_STATE_HOVERED,View.VIEW_STATE_HOVERED];View._static=function(){function Integer_bitCount(i){i=i-(i>>>1&0x55555555);i=(i&0x33333333)+(i>>>2&0x33333333);i=i+(i>>>4)&0x0f0f0f0f;i=i+(i>>>8);i=i+(i>>>16);return i&0x3f;}var orderedIds=View.VIEW_STATE_IDS;var NUM_BITS=View.VIEW_STATE_IDS.length/2;View.VIEW_STATE_SETS=new Array(1<=this.fadeStartTime){this.state=ScrollabilityCache.FADING;this.host.invalidate(true);}}},{key:'_computeAlphaToScrollBar',value:function _computeAlphaToScrollBar(){var now=AnimationUtils.currentAnimationTimeMillis();var factor=(now-this.fadeStartTime)/this.scrollBarFadeDuration;if(factor>=1){this.state=ScrollabilityCache.OFF;factor=1;}var alpha=1-this.interpolator.getInterpolation(factor);this.scrollBar.setAlpha(255*alpha);}}]);return ScrollabilityCache;}();ScrollabilityCache.OFF=0;ScrollabilityCache.ON=1;ScrollabilityCache.FADING=2;var MatchIdPredicate=function(){function MatchIdPredicate(){_classCallCheck(this,MatchIdPredicate);}_createClass(MatchIdPredicate,[{key:'apply',value:function apply(view){return view.mID===this.mId;}}]);return MatchIdPredicate;}();})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Rect=android.graphics.Rect;var Canvas=android.graphics.Canvas;var Surface=function(){function Surface(canvasElement,viewRoot){_classCallCheck(this,Surface);this.mLockedRect=new Rect();this.mCanvasBound=new Rect();this.mSupportDirtyDraw=true;this.mLockSaveCount=1;this.mCanvasElement=canvasElement;this.viewRoot=viewRoot;this.initImpl();}_createClass(Surface,[{key:'initImpl',value:function initImpl(){this.initCanvasBound();}},{key:'isValid',value:function isValid(){return true;}},{key:'notifyBoundChange',value:function notifyBoundChange(){this.initCanvasBound();}},{key:'initCanvasBound',value:function initCanvasBound(){var density=android.content.res.Resources.getDisplayMetrics().density;var clientRect=this.mCanvasElement.getBoundingClientRect();this.mCanvasBound.set(clientRect.left*density,clientRect.top*density,clientRect.right*density,clientRect.bottom*density);}},{key:'lockCanvas',value:function lockCanvas(dirty){var fullWidth=this.mCanvasBound.width();var fullHeight=this.mCanvasBound.height();if(!this.mSupportDirtyDraw)dirty.set(0,0,fullWidth,fullHeight);var rect=this.mLockedRect;rect.set(Math.floor(dirty.left),Math.floor(dirty.top),Math.ceil(dirty.right),Math.ceil(dirty.bottom));if(dirty.isEmpty()){rect.set(0,0,fullWidth,fullHeight);}if(rect.isEmpty())return null;return this.lockCanvasImpl(rect.left,rect.top,rect.width(),rect.height());}},{key:'lockCanvasImpl',value:function lockCanvasImpl(left,top,width,height){var canvas=void 0;if(Surface.DrawToCacheFirstMode){canvas=new Canvas(width,height);if(left!=0||top!=0)canvas.translate(-left,-top);}else{canvas=new SurfaceLockCanvas(this.mCanvasBound.width(),this.mCanvasBound.height(),this.mCanvasElement);this.mLockSaveCount=canvas.save();canvas.clipRect(left,top,left+width,top+height);}return canvas;}},{key:'unlockCanvasAndPost',value:function unlockCanvasAndPost(canvas){if(Surface.DrawToCacheFirstMode){var mCanvasContent=this.mCanvasElement.getContext('2d');if(canvas.mCanvasElement)mCanvasContent.drawImage(canvas.mCanvasElement,this.mLockedRect.left,this.mLockedRect.top);canvas.recycle();}else{canvas.restoreToCount(this.mLockSaveCount);}}},{key:'showFps',value:function showFps(fps){if(!this._showFPSNode){this._showFPSNode=document.createElement('div');this._showFPSNode.style.position='absolute';this._showFPSNode.style.top='0';this._showFPSNode.style.left='0';this._showFPSNode.style.width='60px';this._showFPSNode.style.fontSize='14px';this._showFPSNode.style.background='black';this._showFPSNode.style.color='white';this._showFPSNode.style.opacity='0.7';this._showFPSNode.style.zIndex='1';this.mCanvasElement.parentNode.appendChild(this._showFPSNode);}this._showFPSNode.innerText='FPS:'+fps.toFixed(1);}}]);return Surface;}();Surface.DrawToCacheFirstMode=false;view.Surface=Surface;var SurfaceLockCanvas=function(_Canvas){_inherits(SurfaceLockCanvas,_Canvas);function SurfaceLockCanvas(width,height,canvasElement){_classCallCheck(this,SurfaceLockCanvas);var _this39=_possibleConstructorReturn(this,(SurfaceLockCanvas.__proto__||Object.getPrototypeOf(SurfaceLockCanvas)).call(this,width,height));_this39.mCanvasElement=canvasElement;_this39._mCanvasContent=_this39.mCanvasElement.getContext("2d");return _this39;}_createClass(SurfaceLockCanvas,[{key:'initCanvasImpl',value:function initCanvasImpl(){}}]);return SurfaceLockCanvas;}(Canvas);})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view_2){var View=android.view.View;var Rect=android.graphics.Rect;var Handler=android.os.Handler;var SystemClock=android.os.SystemClock;var System=java.lang.System;var Log=android.util.Log;var Surface=android.view.Surface;var ViewRootImpl=function(){function ViewRootImpl(){_classCallCheck(this,ViewRootImpl);this.mViewVisibility=View.GONE;this.mStopped=false;this.mWidth=-1;this.mHeight=-1;this.mDirty=new Rect();this.mIsAnimating=false;this.mTempRect=new Rect();this.mVisRect=new Rect();this.mTraversalScheduled=false;this.mWillDrawSoon=false;this.mIsInTraversal=false;this.mLayoutRequested=false;this.mFirst=true;this.mFullRedrawNeeded=false;this.mIsDrawing=false;this.mAdded=false;this.mAddedTouchMode=false;this.mInTouchMode=false;this.mWinFrame=new Rect();this.mLayoutRequesters=[];this.mHandler=new ViewRootHandler();this.mViewScrollChanged=false;this.mTreeObserver=new view_2.ViewTreeObserver();this.mIgnoreDirtyState=false;this.mSetIgnoreDirtyState=false;this.mDrawingTime=0;this.mFpsStartTime=-1;this.mFpsPrevTime=-1;this.mFpsNumFrames=0;this.mTraversalRunnable=new TraversalRunnable(this);this._continueTraversalesCount=0;this.mInvalidateOnAnimationRunnable=new InvalidateOnAnimationRunnable(this.mHandler);}_createClass(ViewRootImpl,[{key:'initSurface',value:function initSurface(canvasElement){this.mSurface=new Surface(canvasElement,this);}},{key:'notifyResized',value:function notifyResized(frame){this.mWinFrame.set(frame.left,frame.top,frame.right,frame.bottom);this.requestLayout();if(this.mSurface)this.mSurface.notifyBoundChange();}},{key:'setView',value:function setView(view){if(this.mView==null){this.mView=view;this.mAdded=true;this.requestLayout();view.assignParent(this);this.mAddedTouchMode=true;var syntheticInputStage=new SyntheticInputStage(this);var viewPostImeStage=new ViewPostImeInputStage(this,syntheticInputStage);var earlyPostImeStage=new EarlyPostImeInputStage(this,viewPostImeStage);this.mFirstInputStage=earlyPostImeStage;}}},{key:'getView',value:function getView(){return this.mView;}},{key:'getHostVisibility',value:function getHostVisibility(){return this.mView.getVisibility();}},{key:'scheduleTraversals',value:function scheduleTraversals(){if(!this.mTraversalScheduled){this.mTraversalScheduled=true;this.mHandler.postAsTraversal(this.mTraversalRunnable);}}},{key:'unscheduleTraversals',value:function unscheduleTraversals(){if(this.mTraversalScheduled){this.mTraversalScheduled=false;this.mHandler.removeCallbacks(this.mTraversalRunnable);}}},{key:'doTraversal',value:function doTraversal(){if(this.mTraversalScheduled){this.mTraversalScheduled=false;this.performTraversals();}}},{key:'measureHierarchy',value:function measureHierarchy(host,lp,desiredWindowWidth,desiredWindowHeight){var windowSizeMayChange=false;if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_LAYOUT)Log.v(ViewRootImpl.TAG,"Measuring "+host+" in display "+desiredWindowWidth+"x"+desiredWindowHeight+"...");var childWidthMeasureSpec=ViewRootImpl.getRootMeasureSpec(desiredWindowWidth,lp.width);var childHeightMeasureSpec=ViewRootImpl.getRootMeasureSpec(desiredWindowHeight,lp.height);this.performMeasure(childWidthMeasureSpec,childHeightMeasureSpec);if(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()){windowSizeMayChange=true;}if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals -- after measure");host.debug();}return windowSizeMayChange;}},{key:'performTraversals',value:function performTraversals(){var host=this.mView;if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals");host.debug();}if(host==null||!this.mAdded)return;this.mIsInTraversal=true;this.mWillDrawSoon=true;var windowSizeMayChange=false;var newSurface=false;var surfaceChanged=false;var lp=new view_2.ViewGroup.LayoutParams(view_2.ViewGroup.LayoutParams.MATCH_PARENT,view_2.ViewGroup.LayoutParams.MATCH_PARENT);var desiredWindowWidth=void 0;var desiredWindowHeight=void 0;var viewVisibility=this.getHostVisibility();var viewVisibilityChanged=this.mViewVisibility!=viewVisibility;var params=null;var frame=this.mWinFrame;desiredWindowWidth=frame.width();desiredWindowHeight=frame.height();if(this.mFirst){this.mFullRedrawNeeded=true;this.mLayoutRequested=true;viewVisibilityChanged=false;}else{if(desiredWindowWidth!=this.mWidth||desiredWindowHeight!=this.mHeight){if(ViewRootImpl.DEBUG_ORIENTATION){Log.v(ViewRootImpl.TAG,"View "+host+" resized to: "+frame);}this.mFullRedrawNeeded=true;this.mLayoutRequested=true;windowSizeMayChange=true;}}if(viewVisibilityChanged){}ViewRootImpl.getRunQueue(this).executeActions(this.mHandler);var layoutRequested=this.mLayoutRequested;if(layoutRequested){if(this.mFirst){this.mInTouchMode=!this.mAddedTouchMode;this.ensureTouchModeLocally(this.mAddedTouchMode);}else{if(lp.width<0||lp.height<0){windowSizeMayChange=true;}}windowSizeMayChange=this.measureHierarchy(host,lp,desiredWindowWidth,desiredWindowHeight)||windowSizeMayChange;}if(layoutRequested){this.mLayoutRequested=false;}var windowShouldResize=layoutRequested&&windowSizeMayChange&&(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()||lp.width<0&&frame.width()!==desiredWindowWidth&&frame.width()!==this.mWidth||lp.height<0&&frame.height()!==desiredWindowHeight&&frame.height()!==this.mHeight);if(this.mFirst||windowShouldResize||viewVisibilityChanged){if(ViewRootImpl.DEBUG_LAYOUT){Log.i(ViewRootImpl.TAG,"host=w:"+host.getMeasuredWidth()+", h:"+host.getMeasuredHeight()+", params="+params);}if(ViewRootImpl.DEBUG_ORIENTATION)Log.v(ViewRootImpl.TAG,"Relayout returned: frame="+frame);if(this.mWidth!=frame.width()||this.mHeight!=frame.height()){this.mWidth=frame.width();this.mHeight=frame.height();}if(this.mWidth!=host.getMeasuredWidth()||this.mHeight!=host.getMeasuredHeight()){var childWidthMeasureSpec=ViewRootImpl.getRootMeasureSpec(this.mWidth,lp.width);var childHeightMeasureSpec=ViewRootImpl.getRootMeasureSpec(this.mHeight,lp.height);if(ViewRootImpl.DEBUG_LAYOUT)Log.v(ViewRootImpl.TAG,"Ooops, something changed! mWidth="+this.mWidth+" measuredWidth="+host.getMeasuredWidth()+" mHeight="+this.mHeight+" measuredHeight="+host.getMeasuredHeight());this.performMeasure(childWidthMeasureSpec,childHeightMeasureSpec);layoutRequested=true;}}else{}var didLayout=layoutRequested;var triggerGlobalLayoutListener=didLayout;if(didLayout){this.performLayout(lp,desiredWindowWidth,desiredWindowHeight);if(ViewRootImpl.DBG){System.out.println("======================================");System.out.println("performTraversals -- after setFrame");host.debug();}}if(triggerGlobalLayoutListener){this.mTreeObserver.dispatchOnGlobalLayout();}var skipDraw=false;if(this.mFirst){if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: mView.hasFocus()="+this.mView.hasFocus());if(this.mView!=null){if(!this.mView.hasFocus()){this.mView.requestFocus(View.FOCUS_FORWARD);if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: requested focused view="+this.mView.findFocus());}else{if(ViewRootImpl.DEBUG_INPUT_RESIZE)Log.v(ViewRootImpl.TAG,"First: existing focused view="+this.mView.findFocus());}}}this.mFirst=false;this.mWillDrawSoon=false;this.mViewVisibility=viewVisibility;var cancelDraw=this.mTreeObserver.dispatchOnPreDraw()||viewVisibility!=View.VISIBLE;if(!cancelDraw){if(!skipDraw){this.performDraw();}}else{if(viewVisibility==View.VISIBLE){this.scheduleTraversals();}}this.mIsInTraversal=false;this.checkContinueTraversalsNextFrame();}},{key:'performLayout',value:function performLayout(lp,desiredWindowWidth,desiredWindowHeight){var _this40=this;this.mLayoutRequested=false;this.mInLayout=true;var host=this.mView;if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_LAYOUT){Log.v(ViewRootImpl.TAG,"Laying out "+host+" to ("+host.getMeasuredWidth()+", "+host.getMeasuredHeight()+")");}host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());this.mInLayout=false;var numViewsRequestingLayout=this.mLayoutRequesters.length;if(numViewsRequestingLayout>0){var validLayoutRequesters=this.getValidLayoutRequesters(this.mLayoutRequesters,false);if(validLayoutRequesters!=null){this.mHandlingLayoutInLayoutRequest=true;var numValidRequests=validLayoutRequesters.length;for(var i=0;i1000){var fps=this.mFpsNumFrames*1000/totalTime;Log.v(ViewRootImpl.TAG,"FPS:\t"+fps);this.mSurface.showFps(fps);this.mFpsStartTime=nowTime;this.mFpsNumFrames=0;}}}},{key:'performDraw',value:function performDraw(){var fullRedrawNeeded=this.mFullRedrawNeeded;this.mFullRedrawNeeded=false;this.mIsDrawing=true;try{this.draw(fullRedrawNeeded);}finally{this.mIsDrawing=false;}}},{key:'draw',value:function draw(fullRedrawNeeded){var surface=this.mSurface;if(!surface.isValid()){return;}if(ViewRootImpl.DEBUG_FPS){this.trackFPS();}if(this.mViewScrollChanged){this.mViewScrollChanged=false;this.mTreeObserver.dispatchOnScrollChanged();}if(fullRedrawNeeded){this.mIgnoreDirtyState=true;this.mDirty.set(0,0,this.mWidth,this.mHeight);}if(ViewRootImpl.DEBUG_ORIENTATION||ViewRootImpl.DEBUG_DRAW){Log.v(ViewRootImpl.TAG,"Draw "+this.mView+", width="+this.mWidth+", height="+this.mHeight+", dirty="+this.mDirty);}this.mTreeObserver.dispatchOnDraw();this.drawSoftware();}},{key:'drawSoftware',value:function drawSoftware(){var canvas=void 0;try{canvas=this.mSurface.lockCanvas(this.mDirty);if(!canvas)return;}catch(e){return;}this.mDirty.setEmpty();this.mIsAnimating=false;this.mDrawingTime=SystemClock.uptimeMillis();this.mView.mPrivateFlags|=View.PFLAG_DRAWN;this.mSetIgnoreDirtyState=false;if(!this.mSurface['lastRenderCanvas'])this.mView.draw(canvas);if(!this.mSetIgnoreDirtyState){this.mIgnoreDirtyState=false;}this.mSurface.unlockCanvasAndPost(this.mSurface['lastRenderCanvas']||canvas);if(ViewRootImpl.LOCAL_LOGV){Log.v(ViewRootImpl.TAG,"Surface unlockCanvasAndPost");}}},{key:'checkContinueTraversalsNextFrame',value:function checkContinueTraversalsNextFrame(){var continueFrame=ViewRootImpl.DEBUG_FPS?60:5;if(!this.mTraversalScheduled&&this._continueTraversalesCountdestRect.right||srcRect.left>=destRect.right)&&srcRect.left>destRect.left;case View.FOCUS_RIGHT:return(srcRect.leftdestRect.bottom||srcRect.top>=destRect.bottom)&&srcRect.top>destRect.top;case View.FOCUS_DOWN:return(srcRect.top=rect1.top&&rect2.top<=rect1.bottom;case View.FOCUS_UP:case View.FOCUS_DOWN:return rect2.right>=rect1.left&&rect2.left<=rect1.right;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'isToDirectionOf',value:function isToDirectionOf(direction,src,dest){switch(direction){case View.FOCUS_LEFT:return src.left>=dest.right;case View.FOCUS_RIGHT:return src.right<=dest.left;case View.FOCUS_UP:return src.top>=dest.bottom;case View.FOCUS_DOWN:return src.bottom<=dest.top;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'findNearestTouchable',value:function findNearestTouchable(root,x,y,direction,deltas){var touchables=root.getTouchables();var minDistance=Number.MAX_SAFE_INTEGER;var closest=null;var numTouchables=touchables.size();var edgeSlop=view_3.ViewConfiguration.get().getScaledEdgeSlop();var closestBounds=new Rect();var touchableBounds=this.mOtherRect;for(var i=0;i=x&&destRect.top<=y&&y<=destRect.bottom;case View.FOCUS_UP:return destRect.top<=y&&destRect.left<=x&&x<=destRect.right;case View.FOCUS_DOWN:return destRect.top>=y&&destRect.left<=x&&x<=destRect.right;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}}],[{key:'getInstance',value:function getInstance(){if(!FocusFinder.sFocusFinder){FocusFinder.sFocusFinder=new FocusFinder();}return FocusFinder.sFocusFinder;}},{key:'getNextFocusable',value:function getNextFocusable(focused,focusables,count){if(focused!=null){var position=focusables.lastIndexOf(focused);if(position>=0&&position+10){return focusables.get(position-1);}}if(!focusables.isEmpty()){return focusables.get(count-1);}return null;}},{key:'majorAxisDistance',value:function majorAxisDistance(direction,source,dest){return Math.max(0,FocusFinder.majorAxisDistanceRaw(direction,source,dest));}},{key:'majorAxisDistanceRaw',value:function majorAxisDistanceRaw(direction,source,dest){switch(direction){case View.FOCUS_LEFT:return source.left-dest.right;case View.FOCUS_RIGHT:return dest.left-source.right;case View.FOCUS_UP:return source.top-dest.bottom;case View.FOCUS_DOWN:return dest.top-source.bottom;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'majorAxisDistanceToFarEdge',value:function majorAxisDistanceToFarEdge(direction,source,dest){return Math.max(1,FocusFinder.majorAxisDistanceToFarEdgeRaw(direction,source,dest));}},{key:'majorAxisDistanceToFarEdgeRaw',value:function majorAxisDistanceToFarEdgeRaw(direction,source,dest){switch(direction){case View.FOCUS_LEFT:return source.left-dest.left;case View.FOCUS_RIGHT:return dest.right-source.right;case View.FOCUS_UP:return source.top-dest.top;case View.FOCUS_DOWN:return dest.bottom-source.bottom;}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}},{key:'minorAxisDistance',value:function minorAxisDistance(direction,source,dest){switch(direction){case View.FOCUS_LEFT:case View.FOCUS_RIGHT:return Math.abs(source.top+source.height()/2-(dest.top+dest.height()/2));case View.FOCUS_UP:case View.FOCUS_DOWN:return Math.abs(source.left+source.width()/2-(dest.left+dest.width()/2));}throw new Error("direction must be one of "+"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");}}]);return FocusFinder;}();view_3.FocusFinder=FocusFinder;var SequentialFocusComparator=function(){function SequentialFocusComparator(){var _this46=this;_classCallCheck(this,SequentialFocusComparator);this.mFirstRect=new Rect();this.mSecondRect=new Rect();this.mIsLayoutRtl=false;this.compareFn=function(first,second){if(first==second){return 0;}_this46.getRect(first,_this46.mFirstRect);_this46.getRect(second,_this46.mSecondRect);if(_this46.mFirstRect.top<_this46.mSecondRect.top){return-1;}else if(_this46.mFirstRect.top>_this46.mSecondRect.top){return 1;}else if(_this46.mFirstRect.left<_this46.mSecondRect.left){return _this46.mIsLayoutRtl?1:-1;}else if(_this46.mFirstRect.left>_this46.mSecondRect.left){return _this46.mIsLayoutRtl?-1:1;}else if(_this46.mFirstRect.bottom<_this46.mSecondRect.bottom){return-1;}else if(_this46.mFirstRect.bottom>_this46.mSecondRect.bottom){return 1;}else if(_this46.mFirstRect.right<_this46.mSecondRect.right){return _this46.mIsLayoutRtl?1:-1;}else if(_this46.mFirstRect.right>_this46.mSecondRect.right){return _this46.mIsLayoutRtl?-1:1;}else{return 0;}};}_createClass(SequentialFocusComparator,[{key:'recycle',value:function recycle(){this.mRoot=null;}},{key:'setRoot',value:function setRoot(root){this.mRoot=root;}},{key:'getRect',value:function getRect(view,rect){view.getDrawingRect(rect);this.mRoot.offsetDescendantRectToMyCoords(view,rect);}},{key:'sort',value:function sort(array){array.sort(this.compareFn);}}]);return SequentialFocusComparator;}();})(view=android.view||(android.view={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Integer=function(){function Integer(){_classCallCheck(this,Integer);}_createClass(Integer,null,[{key:'parseInt',value:function parseInt(value){return Number.parseInt(value);}},{key:'toHexString',value:function toHexString(n){if(!n)return n+'';return n.toString(16);}}]);return Integer;}();Integer.MIN_VALUE=-0x80000000;Integer.MAX_VALUE=0x7fffffff;lang.Integer=Integer;})(lang=java.lang||(java.lang={}));})(java||(java={}));var android;(function(android){var view;(function(view_4){var Rect=android.graphics.Rect;var SystemClock=android.os.SystemClock;var Context=android.content.Context;var System=java.lang.System;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var Transformation=android.view.animation.Transformation;var AttrBinder=androidui.attr.AttrBinder;var ViewGroup=function(_view_4$View){_inherits(ViewGroup,_view_4$View);function ViewGroup(context,bindElement,defStyle){_classCallCheck(this,ViewGroup);var _this47=_possibleConstructorReturn(this,(ViewGroup.__proto__||Object.getPrototypeOf(ViewGroup)).call(this,context,bindElement,defStyle));_this47.mLastTouchDownTime=0;_this47.mLastTouchDownIndex=-1;_this47.mLastTouchDownX=0;_this47.mLastTouchDownY=0;_this47.mGroupFlags=0;_this47.mLayoutMode=ViewGroup.LAYOUT_MODE_UNDEFINED;_this47.mChildren=[];_this47.mSuppressLayout=false;_this47.mLayoutCalledWhileSuppressed=false;_this47.mChildCountWithTransientState=0;_this47.initViewGroup();if(bindElement||defStyle){_this47.initFromAttributes(context,bindElement,defStyle);}return _this47;}_createClass(ViewGroup,[{key:'initViewGroup',value:function initViewGroup(){this.setFlags(view_4.View.WILL_NOT_DRAW,view_4.View.DRAW_MASK);this.mGroupFlags|=ViewGroup.FLAG_CLIP_CHILDREN;this.mGroupFlags|=ViewGroup.FLAG_CLIP_TO_PADDING;this.mGroupFlags|=ViewGroup.FLAG_ANIMATION_DONE;this.mGroupFlags|=ViewGroup.FLAG_ANIMATION_CACHE;this.mGroupFlags|=ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;this.mGroupFlags|=ViewGroup.FLAG_SPLIT_MOTION_EVENTS;this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);this.mPersistentDrawingCache=ViewGroup.PERSISTENT_SCROLLING_CACHE;}},{key:'initFromAttributes',value:function initFromAttributes(context,attrs,defStyle){var a=context.obtainStyledAttributes(attrs,defStyle);var _iteratorNormalCompletion46=true;var _didIteratorError46=false;var _iteratorError46=undefined;try{for(var _iterator46=a.getLowerCaseNoNamespaceAttrNames()[Symbol.iterator](),_step46;!(_iteratorNormalCompletion46=(_step46=_iterator46.next()).done);_iteratorNormalCompletion46=true){var attr=_step46.value;switch(attr){case'clipchildren':this.setClipChildren(a.getBoolean(attr,true));break;case'cliptopadding':this.setClipToPadding(a.getBoolean(attr,true));break;case'animationcache':this.setAnimationCacheEnabled(a.getBoolean(attr,true));break;case'persistentdrawingcache':{var value=a.getAttrValue(attr);if(value==='none')this.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);else if(value==='animation')this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);else if(value==='scrolling')this.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);else if(value==='all')this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);break;}case'addstatesfromchildren':this.setAddStatesFromChildren(a.getBoolean(attr,false));break;case'alwaysdrawnwithcache':this.setAlwaysDrawnWithCacheEnabled(a.getBoolean(attr,true));break;case'layoutanimation':break;case'descendantfocusability':{var _value=a.getAttrValue(attr);if(_value=='beforeDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);else if(_value=='afterDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);else if(_value=='blocksDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);break;}case'splitmotionevents':this.setMotionEventSplittingEnabled(a.getBoolean(attr,false));break;case'animatelayoutchanges':break;case'layoutmode':break;}}}catch(err){_didIteratorError46=true;_iteratorError46=err;}finally{try{if(!_iteratorNormalCompletion46&&_iterator46.return){_iterator46.return();}}finally{if(_didIteratorError46){throw _iteratorError46;}}}a.recycle();}},{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'createClassAttrBinder',this).call(this).set('clipChildren',{setter:function setter(v,value,attrBinder){v.setClipChildren(attrBinder.parseBoolean(value));},getter:function getter(v){return v.getClipChildren();}}).set('clipToPadding',{setter:function setter(v,value,attrBinder){v.setClipToPadding(attrBinder.parseBoolean(value));},getter:function getter(v){return v.isClipToPadding();}}).set('animationCache',{setter:function setter(v,value,attrBinder){v.setAnimationCacheEnabled(attrBinder.parseBoolean(value,true));}}).set('persistentDrawingCache',{setter:function setter(v,value,attrBinder){if(value==='none')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);else if(value==='animation')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);else if(value==='scrolling')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);else if(value==='all')v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);}}).set('addStatesFromChildren',{setter:function setter(v,value,attrBinder){v.setAddStatesFromChildren(attrBinder.parseBoolean(value,false));}}).set('alwaysDrawnWithCache',{setter:function setter(v,value,attrBinder){v.setAlwaysDrawnWithCacheEnabled(attrBinder.parseBoolean(value,true));}}).set('descendantFocusability',{setter:function setter(v,value,attrBinder){if(value=='beforeDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);else if(value=='afterDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);else if(value=='blocksDescendants')this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);}}).set('splitMotionEvents',{setter:function setter(v,value,attrBinder){v.setMotionEventSplittingEnabled(attrBinder.parseBoolean(value,false));}});}},{key:'getDescendantFocusability',value:function getDescendantFocusability(){return this.mGroupFlags&ViewGroup.FLAG_MASK_FOCUSABILITY;}},{key:'setDescendantFocusability',value:function setDescendantFocusability(focusability){switch(focusability){case ViewGroup.FOCUS_BEFORE_DESCENDANTS:case ViewGroup.FOCUS_AFTER_DESCENDANTS:case ViewGroup.FOCUS_BLOCK_DESCENDANTS:break;default:throw new Error("must be one of FOCUS_BEFORE_DESCENDANTS, "+"FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS");}this.mGroupFlags&=~ViewGroup.FLAG_MASK_FOCUSABILITY;this.mGroupFlags|=focusability&ViewGroup.FLAG_MASK_FOCUSABILITY;}},{key:'handleFocusGainInternal',value:function handleFocusGainInternal(direction,previouslyFocusedRect){if(this.mFocused!=null){this.mFocused.unFocus();this.mFocused=null;}_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'handleFocusGainInternal',this).call(this,direction,previouslyFocusedRect);}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(view_4.View.DBG){System.out.println(this+" requestChildFocus()");}if(this.getDescendantFocusability()==ViewGroup.FOCUS_BLOCK_DESCENDANTS){return;}_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'unFocus',this).call(this);if(this.mFocused!=child){if(this.mFocused!=null){this.mFocused.unFocus();}this.mFocused=child;}if(this.mParent!=null){this.mParent.requestChildFocus(this,focused);}}},{key:'focusableViewAvailable',value:function focusableViewAvailable(v){if(this.mParent!=null&&this.getDescendantFocusability()!=ViewGroup.FOCUS_BLOCK_DESCENDANTS&&!(this.isFocused()&&this.getDescendantFocusability()!=ViewGroup.FOCUS_AFTER_DESCENDANTS)){this.mParent.focusableViewAvailable(v);}}},{key:'focusSearch',value:function focusSearch(){for(var _len16=arguments.length,args=Array(_len16),_key17=0;_key17<_len16;_key17++){args[_key17]=arguments[_key17];}if(arguments.length===1){return _get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'focusSearch',this).call(this,args[0]);}var focused=args[0];var direction=args[1];if(this.isRootNamespace()){return view_4.FocusFinder.getInstance().findNextFocus(this,focused,direction);}else if(this.mParent!=null){return this.mParent.focusSearch(focused,direction);}return null;}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){return false;}},{key:'childHasTransientStateChanged',value:function childHasTransientStateChanged(child,childHasTransientState){var oldHasTransientState=this.hasTransientState();if(childHasTransientState){this.mChildCountWithTransientState++;}else{this.mChildCountWithTransientState--;}var newHasTransientState=this.hasTransientState();if(this.mParent!=null&&oldHasTransientState!=newHasTransientState){this.mParent.childHasTransientStateChanged(this,newHasTransientState);}}},{key:'hasTransientState',value:function hasTransientState(){return this.mChildCountWithTransientState>0||_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'hasTransientState',this).call(this);}},{key:'dispatchUnhandledMove',value:function dispatchUnhandledMove(focused,direction){return this.mFocused!=null&&this.mFocused.dispatchUnhandledMove(focused,direction);}},{key:'clearChildFocus',value:function clearChildFocus(child){if(view_4.View.DBG){System.out.println(this+" clearChildFocus()");}this.mFocused=null;if(this.mParent!=null){this.mParent.clearChildFocus(this);}}},{key:'clearFocus',value:function clearFocus(){if(view_4.View.DBG){System.out.println(this+" clearFocus()");}if(this.mFocused==null){_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'clearFocus',this).call(this);}else{var focused=this.mFocused;this.mFocused=null;focused.clearFocus();}}},{key:'unFocus',value:function unFocus(){if(view_4.View.DBG){System.out.println(this+" unFocus()");}if(this.mFocused==null){_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'unFocus',this).call(this);}else{this.mFocused.unFocus();this.mFocused=null;}}},{key:'getFocusedChild',value:function getFocusedChild(){return this.mFocused;}},{key:'hasFocus',value:function hasFocus(){return(this.mPrivateFlags&view_4.View.PFLAG_FOCUSED)!=0||this.mFocused!=null;}},{key:'findFocus',value:function findFocus(){if(ViewGroup.DBG){System.out.println("Find focus in "+this+": flags="+this.isFocused()+", child="+this.mFocused);}if(this.isFocused()){return this;}if(this.mFocused!=null){return this.mFocused.findFocus();}return null;}},{key:'hasFocusable',value:function hasFocusable(){if((this.mViewFlags&view_4.View.VISIBILITY_MASK)!=view_4.View.VISIBLE){return false;}if(this.isFocusable()){return true;}var descendantFocusability=this.getDescendantFocusability();if(descendantFocusability!=ViewGroup.FOCUS_BLOCK_DESCENDANTS){var count=this.mChildrenCount;var children=this.mChildren;for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:view_4.View.FOCUSABLES_TOUCH_MODE;var focusableCount=views.size();var descendantFocusability=this.getDescendantFocusability();if(descendantFocusability!=ViewGroup.FOCUS_BLOCK_DESCENDANTS){var count=this.mChildrenCount;var children=this.mChildren;for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:view_4.View.FOCUS_DOWN;var previouslyFocusedRect=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;if(view_4.View.DBG){System.out.println(this+" ViewGroup.requestFocus direction="+direction);}var descendantFocusability=this.getDescendantFocusability();switch(descendantFocusability){case ViewGroup.FOCUS_BLOCK_DESCENDANTS:return _get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'requestFocus',this).call(this,direction,previouslyFocusedRect);case ViewGroup.FOCUS_BEFORE_DESCENDANTS:{var took=_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'requestFocus',this).call(this,direction,previouslyFocusedRect);return took?took:this.onRequestFocusInDescendants(direction,previouslyFocusedRect);}case ViewGroup.FOCUS_AFTER_DESCENDANTS:{var _took=this.onRequestFocusInDescendants(direction,previouslyFocusedRect);return _took?_took:_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'requestFocus',this).call(this,direction,previouslyFocusedRect);}default:throw new Error("descendant focusability must be "+"one of FOCUS_BEFORE_DESCENDANTS, FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS "+"but is "+descendantFocusability);}}},{key:'onRequestFocusInDescendants',value:function onRequestFocusInDescendants(direction,previouslyFocusedRect){var index=void 0;var increment=void 0;var end=void 0;var count=this.mChildrenCount;if((direction&view_4.View.FOCUS_FORWARD)!=0){index=0;increment=1;end=count;}else{index=count-1;increment=-1;end=-1;}var children=this.mChildren;for(var i=index;i!=end;i+=increment){var child=children[i];if((child.mViewFlags&view_4.View.VISIBILITY_MASK)==view_4.View.VISIBLE){if(child.requestFocus(direction,previouslyFocusedRect)){return true;}}}return false;}},{key:'addView',value:function addView(){var child=arguments.length<=0?undefined:arguments[0];var params=child.getLayoutParams();var index=-1;if(arguments.length==2){if((arguments.length<=1?undefined:arguments[1])instanceof ViewGroup.LayoutParams)params=arguments.length<=1?undefined:arguments[1];else if(typeof(arguments.length<=1?undefined:arguments[1])==='number')index=arguments.length<=1?undefined:arguments[1];}else if(arguments.length==3){if((arguments.length<=2?undefined:arguments[2])instanceof ViewGroup.LayoutParams){index=arguments.length<=1?undefined:arguments[1];params=arguments.length<=2?undefined:arguments[2];}else{params=this.generateDefaultLayoutParams();params.width=arguments.length<=1?undefined:arguments[1];params.height=arguments.length<=2?undefined:arguments[2];}}if(params==null){params=this.generateDefaultLayoutParams();if(params==null){throw new Error("generateDefaultLayoutParams() cannot return null");}}this.requestLayout();this.invalidate(true);this.addViewInner(child,index,params,false);}},{key:'checkLayoutParams',value:function checkLayoutParams(p){return p!=null;}},{key:'setOnHierarchyChangeListener',value:function setOnHierarchyChangeListener(listener){this.mOnHierarchyChangeListener=listener;}},{key:'onViewAdded',value:function onViewAdded(child){if(this.mOnHierarchyChangeListener!=null){this.mOnHierarchyChangeListener.onChildViewAdded(this,child);}}},{key:'onViewRemoved',value:function onViewRemoved(child){if(this.mOnHierarchyChangeListener!=null){this.mOnHierarchyChangeListener.onChildViewRemoved(this,child);}}},{key:'clearCachedLayoutMode',value:function clearCachedLayoutMode(){if(!this.hasBooleanFlag(ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET)){this.mLayoutMode=ViewGroup.LAYOUT_MODE_UNDEFINED;}}},{key:'addViewInLayout',value:function addViewInLayout(child,index,params){var preventRequestLayout=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;child.mParent=null;this.addViewInner(child,index,params,preventRequestLayout);child.mPrivateFlags=child.mPrivateFlags&~ViewGroup.PFLAG_DIRTY_MASK|ViewGroup.PFLAG_DRAWN;return true;}},{key:'cleanupLayoutState',value:function cleanupLayoutState(child){child.mPrivateFlags&=~view_4.View.PFLAG_FORCE_LAYOUT;}},{key:'addViewInner',value:function addViewInner(child,index,params,preventRequestLayout){if(child.getParent()!=null){throw new Error("The specified child already has a parent. "+"You must call removeView() on the child's parent first.");}if(!this.checkLayoutParams(params)){params=this.generateLayoutParams(params);}if(preventRequestLayout){child.mLayoutParams=params;}else{child.setLayoutParams(params);}if(index<0){index=this.mChildrenCount;}if(this.mDisappearingChildren)this.mDisappearingChildren.remove(child);this.addInArray(child,index);if(preventRequestLayout){child.assignParent(this);}else{child.mParent=this;}if(child.hasFocus()){this.requestChildFocus(child,child.findFocus());}var ai=this.mAttachInfo;if(ai!=null&&(this.mGroupFlags&ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW)==0){child.dispatchAttachedToWindow(this.mAttachInfo,this.mViewFlags&ViewGroup.VISIBILITY_MASK);}this.onViewAdded(child);if((child.mViewFlags&ViewGroup.DUPLICATE_PARENT_STATE)==ViewGroup.DUPLICATE_PARENT_STATE){this.mGroupFlags|=ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE;}}},{key:'addInArray',value:function addInArray(child,index){var count=this.mChildrenCount;if(index==count){this.mChildren.push(child);this.addToBindElement(child.bindElement,null);}else if(index=0;_i12--){var _child2=disappearingChildren.get(_i12);more=this.drawChild(canvas,_child2,drawingTime)||more;}}if(clipToPadding){canvas.restoreToCount(saveCount);}flags=this.mGroupFlags;if((flags&ViewGroup.FLAG_INVALIDATE_REQUIRED)==ViewGroup.FLAG_INVALIDATE_REQUIRED){this.invalidate(true);}}},{key:'drawChild',value:function drawChild(canvas,child,drawingTime){return child.drawFromParent(canvas,this,drawingTime);}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(ViewGroup.prototype.__proto__||Object.getPrototypeOf(ViewGroup.prototype),'drawableStateChanged',this).call(this);if((this.mGroupFlags&ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE)!=0){if((this.mGroupFlags&ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN)!=0){throw new Error("addStateFromChildren cannot be enabled if a"+" child has duplicateParentState set to true");}var children=this.mChildren;var count=this.mChildrenCount;for(var i=0;i=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=size;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}break;case MeasureSpec.AT_MOST:if(childDimension>=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=size;resultMode=MeasureSpec.AT_MOST;}break;case MeasureSpec.UNSPECIFIED:if(childDimension>=0){resultSize=childDimension;resultMode=MeasureSpec.EXACTLY;}else if(childDimension==ViewGroup.LayoutParams.MATCH_PARENT){resultSize=0;resultMode=MeasureSpec.UNSPECIFIED;}else if(childDimension==ViewGroup.LayoutParams.WRAP_CONTENT){resultSize=0;resultMode=MeasureSpec.UNSPECIFIED;}break;}return MeasureSpec.makeMeasureSpec(resultSize,resultMode);}}]);return ViewGroup;}(view_4.View);ViewGroup.FLAG_CLIP_CHILDREN=0x1;ViewGroup.FLAG_CLIP_TO_PADDING=0x2;ViewGroup.FLAG_INVALIDATE_REQUIRED=0x4;ViewGroup.FLAG_RUN_ANIMATION=0x8;ViewGroup.FLAG_ANIMATION_DONE=0x10;ViewGroup.FLAG_PADDING_NOT_NULL=0x20;ViewGroup.FLAG_ANIMATION_CACHE=0x40;ViewGroup.FLAG_OPTIMIZE_INVALIDATE=0x80;ViewGroup.FLAG_CLEAR_TRANSFORMATION=0x100;ViewGroup.FLAG_NOTIFY_ANIMATION_LISTENER=0x200;ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER=0x400;ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS=0x800;ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE=0x1000;ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN=0x2000;ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE=0x4000;ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE=0x8000;ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE=0x10000;ViewGroup.FLAG_MASK_FOCUSABILITY=0x60000;ViewGroup.FOCUS_BEFORE_DESCENDANTS=0x20000;ViewGroup.FOCUS_AFTER_DESCENDANTS=0x40000;ViewGroup.FOCUS_BLOCK_DESCENDANTS=0x60000;ViewGroup.FLAG_DISALLOW_INTERCEPT=0x80000;ViewGroup.FLAG_SPLIT_MOTION_EVENTS=0x200000;ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW=0x400000;ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET=0x800000;ViewGroup.PERSISTENT_NO_CACHE=0x0;ViewGroup.PERSISTENT_ANIMATION_CACHE=0x1;ViewGroup.PERSISTENT_SCROLLING_CACHE=0x2;ViewGroup.PERSISTENT_ALL_CACHES=0x3;ViewGroup.LAYOUT_MODE_UNDEFINED=-1;ViewGroup.LAYOUT_MODE_CLIP_BOUNDS=0;ViewGroup.LAYOUT_MODE_DEFAULT=ViewGroup.LAYOUT_MODE_CLIP_BOUNDS;ViewGroup.CLIP_TO_PADDING_MASK=ViewGroup.FLAG_CLIP_TO_PADDING|ViewGroup.FLAG_PADDING_NOT_NULL;view_4.ViewGroup=ViewGroup;(function(ViewGroup){var LayoutParams=function(_java$lang$JavaObject){_inherits(LayoutParams,_java$lang$JavaObject);function LayoutParams(){_classCallCheck(this,LayoutParams);var _this48=_possibleConstructorReturn(this,(LayoutParams.__proto__||Object.getPrototypeOf(LayoutParams)).call(this));_this48.width=0;_this48.height=0;for(var _len17=arguments.length,args=Array(_len17),_key18=0;_key18<_len17;_key18++){args[_key18]=arguments[_key18];}if(args[0]instanceof Context&&args[1]instanceof HTMLElement){var _a=args[0].obtainStyledAttributes(args[1]);_this48.setBaseAttributes(_a,'layout_width','layout_height');_a.recycle();}else if(typeof args[0]==='number'&&typeof args[1]==='number'){_this48.width=args[0];_this48.height=args[1];}else if(args[0]instanceof LayoutParams){_this48.width=args[0].width;_this48.height=args[0].height;}else if(args.length===0){}return _this48;}_createClass(LayoutParams,[{key:'setBaseAttributes',value:function setBaseAttributes(a,widthAttr,heightAttr){this.width=a.getLayoutDimension(widthAttr,LayoutParams.WRAP_CONTENT);this.height=a.getLayoutDimension(heightAttr,LayoutParams.WRAP_CONTENT);}},{key:'getAttrBinder',value:function getAttrBinder(){if(!this._attrBinder){this._attrBinder=this.initBindAttr();}return this._attrBinder;}},{key:'initBindAttr',value:function initBindAttr(){var classAttrBinder=LayoutParams.ClassAttrBinderClazzMap.get(this.getClass());if(!classAttrBinder){classAttrBinder=this.createClassAttrBinder();LayoutParams.ClassAttrBinderClazzMap.set(this.getClass(),classAttrBinder);}var attrBinder=new AttrBinder(this);attrBinder.setClassAttrBind(classAttrBinder);return attrBinder;}},{key:'createClassAttrBinder',value:function createClassAttrBinder(){return new androidui.attr.AttrBinder.ClassBinderMap().set('layout_width',{setter:function setter(host,value,attrBinder){host.width=attrBinder.parseDimension(value,host.width);},getter:function getter(host){return host.width;}}).set('layout_height',{setter:function setter(host,value,attrBinder){host.height=attrBinder.parseDimension(value,host.height);},getter:function getter(host){return host.height;}});}}]);return LayoutParams;}(java.lang.JavaObject);LayoutParams.ClassAttrBinderClazzMap=new Map();LayoutParams.FILL_PARENT=-1;LayoutParams.MATCH_PARENT=-1;LayoutParams.WRAP_CONTENT=-2;ViewGroup.LayoutParams=LayoutParams;var MarginLayoutParams=function(_LayoutParams){_inherits(MarginLayoutParams,_LayoutParams);function MarginLayoutParams(){var _ref5;for(var _len18=arguments.length,args=Array(_len18),_key19=0;_key19<_len18;_key19++){args[_key19]=arguments[_key19];}_classCallCheck(this,MarginLayoutParams);var _this49=_possibleConstructorReturn(this,(_ref5=MarginLayoutParams.__proto__||Object.getPrototypeOf(MarginLayoutParams)).call.apply(_ref5,[this].concat(_toConsumableArray(function(){if(args[0]instanceof Context&&args[1]instanceof HTMLElement)return[0,0];else if(typeof args[0]==='number'&&typeof args[1]==='number')return[args[0],args[1]];else if(args[0]instanceof MarginLayoutParams)return[args[0]];else if(args[0]instanceof ViewGroup.LayoutParams)return[args[0]];}()))));_this49.leftMargin=0;_this49.topMargin=0;_this49.rightMargin=0;_this49.bottomMargin=0;if(args[0]instanceof Context&&args[1]instanceof HTMLElement){var _a2=args[0].obtainStyledAttributes(args[1]);_this49.setBaseAttributes(_a2,'layout_width','layout_height');var margin=_a2.getDimensionPixelSize('layout_margin',-1);if(margin>=0){_this49.leftMargin=margin;_this49.topMargin=margin;_this49.rightMargin=margin;_this49.bottomMargin=margin;}else{_this49.leftMargin=_a2.getDimensionPixelSize('layout_marginLeft',0);_this49.rightMargin=_a2.getDimensionPixelSize('layout_marginRight',0);_this49.topMargin=_a2.getDimensionPixelSize('layout_marginTop',0);_this49.bottomMargin=_a2.getDimensionPixelSize('layout_marginBottom',0);_this49.leftMargin=_a2.getDimensionPixelSize('layout_marginStart',_this49.leftMargin);_this49.rightMargin=_a2.getDimensionPixelSize('layout_marginEnd',_this49.rightMargin);}_a2.recycle();}else if(typeof args[0]==='number'&&typeof args[1]==='number'){}else if(args[0]instanceof MarginLayoutParams){var source=args[0];_this49.width=source.width;_this49.height=source.height;_this49.leftMargin=source.leftMargin;_this49.topMargin=source.topMargin;_this49.rightMargin=source.rightMargin;_this49.bottomMargin=source.bottomMargin;}else if(args[0]instanceof ViewGroup.LayoutParams){}return _this49;}_createClass(MarginLayoutParams,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(MarginLayoutParams.prototype.__proto__||Object.getPrototypeOf(MarginLayoutParams.prototype),'createClassAttrBinder',this).call(this).set('layout_marginLeft',{setter:function setter(host,value){if(value==null)value=0;host.leftMargin=value;},getter:function getter(host){return host.leftMargin;}}).set('layout_marginStart',{setter:function setter(host,value){if(value==null)value=0;host.leftMargin=value;},getter:function getter(host){return host.leftMargin;}}).set('layout_marginTop',{setter:function setter(host,value){if(value==null)value=0;host.topMargin=value;},getter:function getter(host){return host.topMargin;}}).set('layout_marginRight',{setter:function setter(host,value){if(value==null)value=0;host.rightMargin=value;},getter:function getter(host){return host.rightMargin;}}).set('layout_marginEnd',{setter:function setter(host,value){if(value==null)value=0;host.rightMargin=value;},getter:function getter(host){return host.rightMargin;}}).set('layout_marginBottom',{setter:function setter(host,value){if(value==null)value=0;host.bottomMargin=value;},getter:function getter(host){return host.bottomMargin;}}).set('layout_margin',{setter:function setter(host,value,attrBinder){if(value==null)value=0;var _attrBinder$parsePadd5=attrBinder.parsePaddingMarginTRBL(value),_attrBinder$parsePadd6=_slicedToArray(_attrBinder$parsePadd5,4),top=_attrBinder$parsePadd6[0],right=_attrBinder$parsePadd6[1],bottom=_attrBinder$parsePadd6[2],left=_attrBinder$parsePadd6[3];host.topMargin=top;host.rightMargin=right;host.bottomMargin=bottom;host.leftMargin=left;},getter:function getter(host){return host.topMargin+' '+host.rightMargin+' '+host.bottomMargin+' '+host.leftMargin;}});}},{key:'setMargins',value:function setMargins(left,top,right,bottom){this.leftMargin=left;this.topMargin=top;this.rightMargin=right;this.bottomMargin=bottom;}},{key:'setLayoutDirection',value:function setLayoutDirection(layoutDirection){}},{key:'getLayoutDirection',value:function getLayoutDirection(){return view_4.View.LAYOUT_DIRECTION_LTR;}},{key:'isLayoutRtl',value:function isLayoutRtl(){return this.getLayoutDirection()==view_4.View.LAYOUT_DIRECTION_RTL;}},{key:'resolveLayoutDirection',value:function resolveLayoutDirection(layoutDirection){}}]);return MarginLayoutParams;}(LayoutParams);MarginLayoutParams.DEFAULT_MARGIN_RELATIVE=Integer.MIN_VALUE;MarginLayoutParams.DEFAULT_MARGIN_RESOLVED=0;MarginLayoutParams.UNDEFINED_MARGIN=MarginLayoutParams.DEFAULT_MARGIN_RELATIVE;ViewGroup.MarginLayoutParams=MarginLayoutParams;})(ViewGroup=view_4.ViewGroup||(view_4.ViewGroup={}));var TouchTarget=function(){function TouchTarget(){_classCallCheck(this,TouchTarget);}_createClass(TouchTarget,[{key:'recycle',value:function recycle(){if(TouchTarget.sRecycledCount1){for(var _i14=0;_i141&&arguments[1]!==undefined?arguments[1]:first;_classCallCheck(this,Standard);this.mFirst=0;this.mRest=0;this.mFirst=first;this.mRest=rest;}_createClass(Standard,[{key:'getSpanTypeId',value:function getSpanTypeId(){return TextUtils.LEADING_MARGIN_SPAN;}},{key:'describeContents',value:function describeContents(){return 0;}},{key:'getLeadingMargin',value:function getLeadingMargin(first){return first?this.mFirst:this.mRest;}},{key:'drawLeadingMargin',value:function drawLeadingMargin(c,p,x,dir,top,baseline,bottom,text,start,end,first,layout){;}}]);return Standard;}();LeadingMarginSpan.Standard=Standard;})(LeadingMarginSpan=style.LeadingMarginSpan||(style.LeadingMarginSpan={}));})(style=text_2.style||(text_2.style={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_3){var style;(function(style){var LineBackgroundSpan;(function(LineBackgroundSpan){LineBackgroundSpan.type=Symbol();})(LineBackgroundSpan=style.LineBackgroundSpan||(style.LineBackgroundSpan={}));})(style=text_3.style||(text_3.style={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var style;(function(style){var TabStopSpan;(function(TabStopSpan){TabStopSpan.type=Symbol();function isImpl(obj){return obj&&obj['getTabStop'];}TabStopSpan.isImpl=isImpl;var Standard=function(){function Standard(where){_classCallCheck(this,Standard);this.mTab=0;this.mTab=where;}_createClass(Standard,[{key:'getTabStop',value:function getTabStop(){return this.mTab;}}]);return Standard;}();TabStopSpan.Standard=Standard;})(TabStopSpan=style.TabStopSpan||(style.TabStopSpan={}));})(style=text.style||(text.style={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var SpanSet=function(){function SpanSet(type){_classCallCheck(this,SpanSet);this.numberOfSpans=0;this.classType=type;this.numberOfSpans=0;}_createClass(SpanSet,[{key:'init',value:function init(spanned,start,limit){var allSpans=spanned.getSpans(start,limit,this.classType);var length=allSpans.length;if(length>0&&(this.spans==null||this.spans.length=end||this.spanEnds[i]<=start)continue;return true;}return false;}},{key:'getNextTransition',value:function getNextTransition(start,limit){for(var i=0;istart&&spanStartstart&&spanEnd0;}this.mCharsValid=hasReplacement||hasTabs||directions!=Layout.DIRS_ALL_LEFT_TO_RIGHT;if(this.mCharsValid){this.mChars=text;if(hasReplacement){var chars=this.mChars.split('');for(var i=start,inext;ithis.mLen){runLimit=this.mLen;}var runIsRtl=(runs[i+1]&Layout.RUN_RTL_FLAG)!=0;var segstart=runStart;for(var j=this.mHasTabs?runStart:runLimit;j<=runLimit;j++){var codept=0;if(this.mHasTabs&&j=0xd800&&codept<0xdc00&&j+10xffff){++j;continue;}}}if(j==runLimit||codept=='\t'.codePointAt(0)){h+=this.drawRun(c,segstart,j,runIsRtl,x+h,top,y,bottom,i!=lastRunIndex||j!=this.mLen);if(codept=='\t'.codePointAt(0)){h=this.mDir*this.nextTab(h*this.mDir);}segstart=j+1;}}}}},{key:'metrics',value:function metrics(fmi){return this.measure(this.mLen,false,fmi);}},{key:'measure',value:function measure(offset,trailing,fmi){var target=trailing?offset-1:offset;if(target<0){return 0;}var h=0;if(!this.mHasTabs){if(this.mDirections==Layout.DIRS_ALL_LEFT_TO_RIGHT){return this.measureRun(0,offset,this.mLen,false,fmi);}if(this.mDirections==Layout.DIRS_ALL_RIGHT_TO_LEFT){return this.measureRun(0,offset,this.mLen,true,fmi);}}var chars=this.mChars;var runs=this.mDirections.mDirections;for(var i=0;ithis.mLen){runLimit=this.mLen;}var runIsRtl=(runs[i+1]&Layout.RUN_RTL_FLAG)!=0;var segstart=runStart;for(var j=this.mHasTabs?runStart:runLimit;j<=runLimit;j++){var codept=0;if(this.mHasTabs&&j=0xd800&&codept<0xdc00&&j+10xffff){++j;continue;}}}if(j==runLimit||codept=='\t'.codePointAt(0)){var inSegment=target>=segstart&&target=runStart){runLimit=runStart+(runs[runIndex+1]&Layout.RUN_LENGTH_MASK);if(runLimit>lineEnd){runLimit=lineEnd;}if(cursor>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;if(cursor==runStart){var prevRunIndex=void 0,prevRunLevel=void 0,prevRunStart=void 0,prevRunLimit=void 0;var pos=cursor-1;for(prevRunIndex=0;prevRunIndex=prevRunStart){prevRunLimit=prevRunStart+(runs[prevRunIndex+1]&Layout.RUN_LENGTH_MASK);if(prevRunLimit>lineEnd){prevRunLimit=lineEnd;}if(pos>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;if(prevRunLevel=0&&otherRunIndexlineEnd){otherRunLimit=lineEnd;}var otherRunLevel=runs[otherRunIndex+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;var otherRunIsRtl=(otherRunLevel&1)!=0;_advance=toLeft==otherRunIsRtl;if(newCaret==-1){newCaret=this.getOffsetBeforeAfter(otherRunIndex,otherRunStart,otherRunLimit,otherRunIsRtl,_advance?otherRunStart:otherRunLimit,_advance);if(newCaret==(_advance?otherRunLimit:otherRunStart)){runIndex=otherRunIndex;runLevel=otherRunLevel;continue;}break;}if(otherRunLevel=target){break;}spanStart=spanLimit;}var spans=this.mSpanned.getSpans(this.mStart+spanStart,this.mStart+spanLimit,MetricAffectingSpan.type);spans=TextUtils.removeEmptySpans(spans,this.mSpanned,MetricAffectingSpan.type);if(spans.length>0){var replacement=null;for(var j=0;j=this.mStart+_mlimit||this.mMetricAffectingSpanSpanSet.spanEnds[j]<=this.mStart+i)continue;var span=this.mMetricAffectingSpanSpanSet.spans[j];if(span instanceof ReplacementSpan){replacement=span;}else{span.updateDrawState(_wp2);}}if(replacement!=null){x+=this.handleReplacement(replacement,_wp2,i,_mlimit,runIsRtl,c,x,top,y,bottom,fmi,needWidth||_mlimit=this.mStart+jnext||this.mCharacterStyleSpanSet.spanEnds[k]<=this.mStart+_j)continue;var _span=this.mCharacterStyleSpanSet.spans[k];_span.updateDrawState(_wp2);}x+=this.handleText(_wp2,_j,jnext,i,inext,runIsRtl,c,x,top,y,bottom,fmi,needWidth||jnext=0;){if(TextLine.sCached[i]!=null){tl=TextLine.sCached[i];TextLine.sCached[i]=null;return tl;}}}tl=new TextLine();if(TextLine.DEBUG){Log.v("TLINE","new: "+tl);}return tl;}},{key:'recycle',value:function recycle(tl){tl.mText=null;tl.mPaint=null;tl.mDirections=null;tl.mMetricAffectingSpanSpanSet.recycle();tl.mCharacterStyleSpanSet.recycle();tl.mReplacementSpanSpanSet.recycle();{for(var i=0;i4&&arguments[4]!==undefined?arguments[4]:TextDirectionHeuristics.FIRSTSTRONG_LTR;var spacingMult=arguments.length>5&&arguments[5]!==undefined?arguments[5]:1;var spacingAdd=arguments.length>6&&arguments[6]!==undefined?arguments[6]:0;_classCallCheck(this,Layout);this.mWidth=0;this.mAlignment=Layout.Alignment.ALIGN_NORMAL;this.mSpacingMult=0;this.mSpacingAdd=0;if(width<0)throw Error('new IllegalArgumentException("Layout: " + width + " < 0")');if(paint!=null){paint.bgColor=0;paint.baselineShift=0;}this.mText=text;this.mPaint=paint;this.mWorkPaint=new TextPaint();this.mWidth=width;this.mAlignment=align;this.mSpacingMult=spacingMult;this.mSpacingAdd=spacingAdd;this.mSpannedText=Spanned.isImplements(text);this.mTextDir=textDir;}_createClass(Layout,[{key:'replaceWith',value:function replaceWith(text,paint,width,align,spacingmult,spacingadd){if(width<0){throw Error('new IllegalArgumentException("Layout: " + width + " < 0")');}this.mText=text;this.mPaint=paint;this.mWidth=width;this.mAlignment=align;this.mSpacingMult=spacingmult;this.mSpacingAdd=spacingadd;this.mSpannedText=Spanned.isImplements(text);}},{key:'draw',value:function draw(canvas){var highlight=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var highlightPaint=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var cursorOffsetVertical=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var lineRange=this.getLineRangeForDraw(canvas);var firstLine=TextUtils.unpackRangeStartFromLong(lineRange);var lastLine=TextUtils.unpackRangeEndFromLong(lineRange);if(lastLine<0)return;this.drawBackground(canvas,highlight,highlightPaint,cursorOffsetVertical,firstLine,lastLine);this.drawText(canvas,firstLine,lastLine);}},{key:'drawText',value:function drawText(canvas,firstLine,lastLine){var previousLineBottom=this.getLineTop(firstLine);var previousLineEnd=this.getLineStart(firstLine);var spans=Layout.NO_PARA_SPANS;var spanEnd=0;var paint=this.mPaint;var buf=this.mText;var paraAlign=this.mAlignment;var tabStops=null;var tabStopsIsInitialized=false;var tl=TextLine.obtain();for(var i=firstLine;i<=lastLine;i++){var start=previousLineEnd;previousLineEnd=this.getLineStart(i+1);var end=this.getLineVisibleEnd(i,start,previousLineEnd);var ltop=previousLineBottom;var lbottom=this.getLineTop(i+1);previousLineBottom=lbottom;var lbaseline=lbottom-this.getLineDescent(i);var dir=this.getParagraphDirection(i);var left=0;var right=this.mWidth;if(this.mSpannedText){var sp=buf;var textLength=buf.length;var isFirstParaLine=start==0||buf.charAt(start-1)=='\n';if(start>=spanEnd&&(i==firstLine||isFirstParaLine)){spanEnd=sp.nextSpanTransition(start,textLength,ParagraphStyle.type);spans=Layout.getParagraphSpans(sp,start,spanEnd,ParagraphStyle.type);paraAlign=this.mAlignment;tabStopsIsInitialized=false;}var length=spans.length;for(var n=0;n>1;}}var directions=this.getLineDirections(i);if(directions==Layout.DIRS_ALL_LEFT_TO_RIGHT&&!this.mSpannedText&&!hasTabOrEmoji){canvas.drawText_end(buf.toString(),start,end,_x108,lbaseline,paint);}else{tl.set(paint,buf,start,end,dir,directions,hasTabOrEmoji,tabStops);tl.draw(canvas,_x108,ltop,lbaseline,lbottom);}}TextLine.recycle(tl);}},{key:'drawBackground',value:function drawBackground(canvas,highlight,highlightPaint,cursorOffsetVertical,firstLine,lastLine){if(this.mSpannedText){if(this.mLineBackgroundSpans==null){this.mLineBackgroundSpans=new SpanSet(LineBackgroundSpan.type);}var buffer=this.mText;var textLength=buffer.length;this.mLineBackgroundSpans.init(buffer,0,textLength);if(this.mLineBackgroundSpans.numberOfSpans>0){var previousLineBottom=this.getLineTop(firstLine);var previousLineEnd=this.getLineStart(firstLine);var spans=Layout.NO_PARA_SPANS;var spansLength=0;var paint=this.mPaint;var spanEnd=0;var width=this.mWidth;for(var i=firstLine;i<=lastLine;i++){var start=previousLineEnd;var end=this.getLineStart(i+1);previousLineEnd=end;var ltop=previousLineBottom;var lbottom=this.getLineTop(i+1);previousLineBottom=lbottom;var lbaseline=lbottom-this.getLineDescent(i);if(start>=spanEnd){spanEnd=this.mLineBackgroundSpans.getNextTransition(start,textLength);spansLength=0;if(start!=end||start==0){for(var j=0;j=end||this.mLineBackgroundSpans.spanEnds[j]<=start)continue;if(spansLength==spans.length){var newSize=2*spansLength;var newSpans=new Array(newSize);System.arraycopy(spans,0,newSpans,0,spansLength);spans=newSpans;}spans[spansLength++]=this.mLineBackgroundSpans.spans[j];}}}for(var n=0;n=bottom)return TextUtils.packRangeInLong(0,-1);return TextUtils.packRangeInLong(this.getLineForVertical(top),this.getLineForVertical(bottom));}},{key:'getLineStartPos',value:function getLineStartPos(line,left,right){var align=this.getParagraphAlignment(line);var dir=this.getParagraphDirection(line);if(align==Layout.Alignment.ALIGN_LEFT){align=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_NORMAL:Layout.Alignment.ALIGN_OPPOSITE;}else if(align==Layout.Alignment.ALIGN_RIGHT){align=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_OPPOSITE:Layout.Alignment.ALIGN_NORMAL;}var x=void 0;if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_LEFT_TO_RIGHT){x=left;}else{x=right;}}else{var tabStops=null;if(this.mSpannedText&&this.getLineContainsTab(line)){var spanned=this.mText;var start=this.getLineStart(line);var spanEnd=spanned.nextSpanTransition(start,spanned.length,TabStopSpan.type);var tabSpans=Layout.getParagraphSpans(spanned,start,spanEnd,TabStopSpan.type);if(tabSpans.length>0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabSpans);}}var max=Math.floor(this.getLineExtent(line,tabStops,false));if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_LEFT_TO_RIGHT){x=right-max;}else{x=left-max;}}else{max=max&~1;x=left+right-max>>1;}}return x;}},{key:'getText',value:function getText(){return this.mText;}},{key:'getPaint',value:function getPaint(){return this.mPaint;}},{key:'getWidth',value:function getWidth(){return this.mWidth;}},{key:'getEllipsizedWidth',value:function getEllipsizedWidth(){return this.mWidth;}},{key:'increaseWidthTo',value:function increaseWidthTo(wid){if(wid>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK)!=paraLevel;}offset-=lineStart;for(var i=0;i=start){var level=runs[i+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;return(level&1)!=0;}}return false;}},{key:'primaryIsTrailingPrevious',value:function primaryIsTrailingPrevious(offset){var line=this.getLineForOffset(offset);var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var runs=this.getLineDirections(line).mDirections;var levelAt=-1;for(var i=0;ilineEnd){limit=lineEnd;}if(offset>=start&&offsetstart){return false;}levelAt=runs[i+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;break;}}if(levelAt==-1){levelAt=this.getParagraphDirection(line)==1?0:1;}var levelBefore=-1;if(offset==lineStart){levelBefore=this.getParagraphDirection(line)==1?0:1;}else{offset-=1;for(var _i15=0;_i15lineEnd){_limit=lineEnd;}if(offset>=_start&&offset<_limit){levelBefore=runs[_i15+1]>>>Layout.RUN_LEVEL_SHIFT&Layout.RUN_LEVEL_MASK;break;}}}return levelBefore1&&arguments[1]!==undefined?arguments[1]:false;var trailing=this.primaryIsTrailingPrevious(offset);return this.getHorizontal(offset,trailing,clamped);}},{key:'getSecondaryHorizontal',value:function getSecondaryHorizontal(offset){var clamped=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var trailing=this.primaryIsTrailingPrevious(offset);return this.getHorizontal(offset,!trailing,clamped);}},{key:'getHorizontal',value:function getHorizontal(offset,trailing,clamped){var line=this.getLineForOffset(offset);return this.getHorizontal_4(offset,trailing,line,clamped);}},{key:'getHorizontal_4',value:function getHorizontal_4(offset,trailing,line,clamped){var start=this.getLineStart(line);var end=this.getLineEnd(line);var dir=this.getParagraphDirection(line);var hasTabOrEmoji=this.getLineContainsTab(line);var directions=this.getLineDirections(line);var tabStops=null;if(hasTabOrEmoji&&Spanned.isImplements(this.mText)){var tabs=Layout.getParagraphSpans(this.mText,start,end,TabStopSpan.type);if(tabs.length>0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabs);}}var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabOrEmoji,tabStops);var wid=tl.measure(offset-start,trailing,null);TextLine.recycle(tl);if(clamped&&wid>this.mWidth){wid=this.mWidth;}var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);return this.getLineStartPos(line,left,right)+wid;}},{key:'getLineLeft',value:function getLineLeft(line){var dir=this.getParagraphDirection(line);var align=this.getParagraphAlignment(line);if(align==Layout.Alignment.ALIGN_LEFT){return 0;}else if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.getParagraphRight(line)-this.getLineMax(line);else return 0;}else if(align==Layout.Alignment.ALIGN_RIGHT){return this.mWidth-this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_RIGHT_TO_LEFT)return 0;else return this.mWidth-this.getLineMax(line);}else{var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);var max=Math.floor(this.getLineMax(line))&~1;return left+(right-left-max)/2;}}},{key:'getLineRight',value:function getLineRight(line){var dir=this.getParagraphDirection(line);var align=this.getParagraphAlignment(line);if(align==Layout.Alignment.ALIGN_LEFT){return this.getParagraphLeft(line)+this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_NORMAL){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.mWidth;else return this.getParagraphLeft(line)+this.getLineMax(line);}else if(align==Layout.Alignment.ALIGN_RIGHT){return this.mWidth;}else if(align==Layout.Alignment.ALIGN_OPPOSITE){if(dir==Layout.DIR_RIGHT_TO_LEFT)return this.getLineMax(line);else return this.mWidth;}else{var left=this.getParagraphLeft(line);var right=this.getParagraphRight(line);var max=Math.floor(this.getLineMax(line))&~1;return right-(right-left-max)/2;}}},{key:'getLineMax',value:function getLineMax(line){var margin=this.getParagraphLeadingMargin(line);var signedExtent=this.getLineExtent(line,false);return margin+signedExtent>=0?signedExtent:-signedExtent;}},{key:'getLineWidth',value:function getLineWidth(line){var margin=this.getParagraphLeadingMargin(line);var signedExtent=this.getLineExtent(line,true);return margin+signedExtent>=0?signedExtent:-signedExtent;}},{key:'getLineExtent',value:function getLineExtent(){if(arguments.length===2)return this.getLineExtent_2.apply(this,arguments);if(arguments.length===3)return this.getLineExtent_3.apply(this,arguments);}},{key:'getLineExtent_2',value:function getLineExtent_2(line,full){var start=this.getLineStart(line);var end=full?this.getLineEnd(line):this.getLineVisibleEnd(line);var hasTabsOrEmoji=this.getLineContainsTab(line);var tabStops=null;if(hasTabsOrEmoji&&Spanned.isImplements(this.mText)){var tabs=Layout.getParagraphSpans(this.mText,start,end,TabStopSpan.type);if(tabs.length>0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,tabs);}}var directions=this.getLineDirections(line);if(directions==null){return 0;}var dir=this.getParagraphDirection(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabsOrEmoji,tabStops);var width=tl.metrics(null);TextLine.recycle(tl);return width;}},{key:'getLineExtent_3',value:function getLineExtent_3(line,tabStops,full){var start=this.getLineStart(line);var end=full?this.getLineEnd(line):this.getLineVisibleEnd(line);var hasTabsOrEmoji=this.getLineContainsTab(line);var directions=this.getLineDirections(line);var dir=this.getParagraphDirection(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,start,end,dir,directions,hasTabsOrEmoji,tabStops);var width=tl.metrics(null);TextLine.recycle(tl);return width;}},{key:'getLineForVertical',value:function getLineForVertical(vertical){var high=this.getLineCount(),low=-1,guess=void 0;while(high-low>1){guess=Math.floor((high+low)/2);if(this.getLineTop(guess)>vertical)high=guess;else low=guess;}if(low<0)return 0;else return low;}},{key:'getLineForOffset',value:function getLineForOffset(offset){var high=this.getLineCount(),low=-1,guess=void 0;while(high-low>1){guess=Math.floor((high+low)/2);if(this.getLineStart(guess)>offset)high=guess;else low=guess;}if(low<0)return 0;else return low;}},{key:'getOffsetForHorizontal',value:function getOffsetForHorizontal(line,horiz){var max=this.getLineEnd(line)-1;var min=this.getLineStart(line);var dirs=this.getLineDirections(line);if(line==this.getLineCount()-1)max++;var best=min;var bestdist=Math.abs(this.getPrimaryHorizontal(best)-horiz);for(var i=0;imax)there=max;var high=there-1+1,low=here+1-1,guess=void 0;while(high-low>1){guess=Math.floor((high+low)/2);var adguess=this.getOffsetAtStartOf(guess);if(this.getPrimaryHorizontal(adguess)*swap>=horiz*swap)high=guess;else low=guess;}if(low1&&arguments[1]!==undefined?arguments[1]:this.getLineStart(line);var end=arguments.length>2&&arguments[2]!==undefined?arguments[2]:this.getLineStart(line+1);var text=this.mText;var ch=void 0;if(line==this.getLineCount()-1){return end;}for(;end>start;end--){ch=text.charAt(end-1);if(ch=='\n'){return end-1;}if(ch!=' '&&ch!='\t'){break;}}return end;}},{key:'getLineBottom',value:function getLineBottom(line){return this.getLineTop(line+1);}},{key:'getLineBaseline',value:function getLineBaseline(line){return this.getLineTop(line+1)-this.getLineDescent(line);}},{key:'getLineAscent',value:function getLineAscent(line){return this.getLineTop(line)-(this.getLineTop(line+1)-this.getLineDescent(line));}},{key:'getOffsetToLeftOf',value:function getOffsetToLeftOf(offset){return this.getOffsetToLeftRightOf(offset,true);}},{key:'getOffsetToRightOf',value:function getOffsetToRightOf(offset){return this.getOffsetToLeftRightOf(offset,false);}},{key:'getOffsetToLeftRightOf',value:function getOffsetToLeftRightOf(caret,toLeft){var line=this.getLineForOffset(caret);var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var lineDir=this.getParagraphDirection(line);var lineChanged=false;var advance=toLeft==(lineDir==Layout.DIR_RIGHT_TO_LEFT);if(advance){if(caret==lineEnd){if(line0){lineChanged=true;--line;}else{return caret;}}}if(lineChanged){lineStart=this.getLineStart(line);lineEnd=this.getLineEnd(line);var newDir=this.getParagraphDirection(line);if(newDir!=lineDir){toLeft=!toLeft;lineDir=newDir;}}var directions=this.getLineDirections(line);var tl=TextLine.obtain();tl.set(this.mPaint,this.mText,lineStart,lineEnd,lineDir,directions,false,null);caret=lineStart+tl.getOffsetToLeftRightOf(caret-lineStart,toLeft);tl=TextLine.recycle(tl);return caret;}},{key:'getOffsetAtStartOf',value:function getOffsetAtStartOf(offset){if(offset==0)return 0;var text=this.mText;var c=text.codePointAt(offset);var questionMark='?'.codePointAt(0);if(c>=questionMark&&c<=questionMark){var c1=text.codePointAt(offset-1);if(c1>=questionMark&&c1<=questionMark)offset-=1;}if(this.mSpannedText){var spans=text.getSpans(offset,offset,ReplacementSpan.type);for(var i=0;ioffset)offset=start;}}return offset;}},{key:'shouldClampCursor',value:function shouldClampCursor(line){switch(this.getParagraphAlignment(line)){case Layout.Alignment.ALIGN_LEFT:return true;case Layout.Alignment.ALIGN_NORMAL:return this.getParagraphDirection(line)>0;default:return false;}}},{key:'getCursorPath',value:function getCursorPath(point,dest,editingBuffer){dest.reset();}},{key:'addSelection',value:function addSelection(line,start,end,top,bottom,dest){}},{key:'getSelectionPath',value:function getSelectionPath(start,end,dest){dest.reset();}},{key:'getParagraphAlignment',value:function getParagraphAlignment(line){var align=this.mAlignment;return align;}},{key:'getParagraphLeft',value:function getParagraphLeft(line){var left=0;var dir=this.getParagraphDirection(line);if(dir==Layout.DIR_RIGHT_TO_LEFT||!this.mSpannedText){return left;}return this.getParagraphLeadingMargin(line);}},{key:'getParagraphRight',value:function getParagraphRight(line){var right=this.mWidth;var dir=this.getParagraphDirection(line);if(dir==Layout.DIR_LEFT_TO_RIGHT||!this.mSpannedText){return right;}return right-this.getParagraphLeadingMargin(line);}},{key:'getParagraphLeadingMargin',value:function getParagraphLeadingMargin(line){if(!this.mSpannedText){return 0;}var spanned=this.mText;var lineStart=this.getLineStart(line);var lineEnd=this.getLineEnd(line);var spanEnd=spanned.nextSpanTransition(lineStart,lineEnd,LeadingMarginSpan.type);var spans=Layout.getParagraphSpans(spanned,lineStart,spanEnd,LeadingMarginSpan.type);if(spans.length==0){return 0;}var margin=0;var isFirstParaLine=lineStart==0||spanned.charAt(lineStart-1)=='\n';for(var i=0;i=start&&_a4need)need=w;next++;}return need;}},{key:'measurePara',value:function measurePara(paint,text,start,end){var mt=MeasuredText.obtain();var tl=TextLine.obtain();try{mt.setPara(text,start,end,TextDirectionHeuristics.LTR);var directions=void 0;var dir=void 0;directions=Layout.DIRS_ALL_LEFT_TO_RIGHT;dir=Layout.DIR_LEFT_TO_RIGHT;var chars=mt.mChars;var len=mt.mLen;var hasTabs=false;var tabStops=null;for(var i=0;i0){tabStops=new Layout.TabStops(Layout.TAB_INCREMENT,spans);}}break;}}tl.set(paint,text,start,end,dir,directions,hasTabs,tabStops);return tl.metrics(null);}finally{TextLine.recycle(tl);MeasuredText.recycle(mt);}}},{key:'nextTab',value:function nextTab(text,start,end,h,tabs){var nh=Float.MAX_VALUE;var alltabs=false;if(Spanned.isImplements(text)){if(tabs==null){tabs=Layout.getParagraphSpans(text,start,end,TabStopSpan.type);alltabs=true;}for(var i=0;ih)nh=where;}if(nh!=Float.MAX_VALUE)return nh;}return Math.floor((h+Layout.TAB_INCREMENT)/Layout.TAB_INCREMENT)*Layout.TAB_INCREMENT;}},{key:'getParagraphSpans',value:function getParagraphSpans(text,start,end,type){if(start==end&&start>0){return[];}return text.getSpans(start,end,type);}}]);return Layout;}();Layout.NO_PARA_SPANS=[];Layout.sTempRect=new Rect();Layout.DIR_LEFT_TO_RIGHT=1;Layout.DIR_RIGHT_TO_LEFT=-1;Layout.DIR_REQUEST_LTR=1;Layout.DIR_REQUEST_RTL=-1;Layout.DIR_REQUEST_DEFAULT_LTR=2;Layout.DIR_REQUEST_DEFAULT_RTL=-2;Layout.RUN_LENGTH_MASK=0x03ffffff;Layout.RUN_LEVEL_SHIFT=26;Layout.RUN_LEVEL_MASK=0x3f;Layout.RUN_RTL_FLAG=1<1){Arrays.sort(stops,0,ns);}if(stops!=this.mStops){this.mStops=stops;}}this.mNumStops=ns;}},{key:'nextTab',value:function nextTab(h){var ns=this.mNumStops;if(ns>0){var stops=this.mStops;for(var i=0;ih){return stop;}}}return TabStops.nextDefaultStop(h,this.mIncrement);}}],[{key:'nextDefaultStop',value:function nextDefaultStop(h,inc){return Math.floor((h+inc)/inc)*inc;}}]);return TabStops;}();Layout.TabStops=TabStops;var Directions=function Directions(dirs){_classCallCheck(this,Directions);this.mDirections=dirs;};Layout.Directions=Directions;var Ellipsizer=function(_String){_inherits(Ellipsizer,_String);function Ellipsizer(s){_classCallCheck(this,Ellipsizer);var _this60=_possibleConstructorReturn(this,(Ellipsizer.__proto__||Object.getPrototypeOf(Ellipsizer)).call(this,s));_this60.mWidth=0;_this60.mText=s;return _this60;}_createClass(Ellipsizer,[{key:'toString',value:function toString(){var line1=this.mLayout.getLineForOffset(0);var line2=this.mLayout.getLineForOffset(this.mText.length);var dest=this.mText.split('');for(var i=line1;i<=line2;i++){this.mLayout.ellipsize(0,this.mText.length,i,dest,0,this.mMethod);}return dest.join('');}}]);return Ellipsizer;}(String);Layout.Ellipsizer=Ellipsizer;var SpannedEllipsizer=function(_Layout$Ellipsizer){_inherits(SpannedEllipsizer,_Layout$Ellipsizer);function SpannedEllipsizer(display){_classCallCheck(this,SpannedEllipsizer);var _this61=_possibleConstructorReturn(this,(SpannedEllipsizer.__proto__||Object.getPrototypeOf(SpannedEllipsizer)).call(this,display));_this61.mSpanned=display;return _this61;}_createClass(SpannedEllipsizer,[{key:'getSpans',value:function getSpans(start,end,type){return this.mSpanned.getSpans(start,end,type);}},{key:'getSpanStart',value:function getSpanStart(tag){return this.mSpanned.getSpanStart(tag);}},{key:'getSpanEnd',value:function getSpanEnd(tag){return this.mSpanned.getSpanEnd(tag);}},{key:'getSpanFlags',value:function getSpanFlags(tag){return this.mSpanned.getSpanFlags(tag);}},{key:'nextSpanTransition',value:function nextSpanTransition(start,limit,type){return this.mSpanned.nextSpanTransition(start,limit,type);}}]);return SpannedEllipsizer;}(Layout.Ellipsizer);Layout.SpannedEllipsizer=SpannedEllipsizer;var Alignment;(function(Alignment){Alignment[Alignment["ALIGN_NORMAL"]=0]="ALIGN_NORMAL";Alignment[Alignment["ALIGN_OPPOSITE"]=1]="ALIGN_OPPOSITE";Alignment[Alignment["ALIGN_CENTER"]=2]="ALIGN_CENTER";Alignment[Alignment["ALIGN_LEFT"]=3]="ALIGN_LEFT";Alignment[Alignment["ALIGN_RIGHT"]=4]="ALIGN_RIGHT";})(Alignment=Layout.Alignment||(Layout.Alignment={}));})(Layout=text_5.Layout||(text_5.Layout={}));Layout.DIRS_ALL_LEFT_TO_RIGHT=new Layout.Directions([0,Layout.RUN_LENGTH_MASK]);Layout.DIRS_ALL_RIGHT_TO_LEFT=new Layout.Directions([0,Layout.RUN_LENGTH_MASK|Layout.RUN_RTL_FLAG]);})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_6){var Canvas=android.graphics.Canvas;var ReplacementSpan=android.text.style.ReplacementSpan;var Log=android.util.Log;var Spanned=android.text.Spanned;var TextPaint=android.text.TextPaint;var MeasuredText=function(){function MeasuredText(){_classCallCheck(this,MeasuredText);this.mTextStart=0;this.mDir=0;this.mLen=0;this.mPos=0;this.mWorkPaint=new TextPaint();}_createClass(MeasuredText,[{key:'setPos',value:function setPos(pos){this.mPos=pos-this.mTextStart;}},{key:'setPara',value:function setPara(text,start,end,textDir){this.mText=text;this.mTextStart=start;var len=end-start;this.mLen=len;this.mPos=0;if(this.mWidths==null||this.mWidths.lengthlen)endInPara=len;for(var j=startInPara;j0&&this.mChars[i-1]==' '){i--;}return i;}else{var _i17=limit-1;while(_i17>=0){width-=w[_i17];if(width<0.0)break;_i17--;}while(_i17=0;){if(MeasuredText.sCached[i]!=null){mt=MeasuredText.sCached[i];MeasuredText.sCached[i]=null;return mt;}}}mt=new MeasuredText();if(MeasuredText.localLOGV){Log.v("MEAS","new: "+mt);}return mt;}},{key:'recycle',value:function recycle(mt){mt.mText=null;if(mt.mLen<1000){{for(var i=0;i='?'.codePointAt(0)&&c<='?'.codePointAt(0)){var c1=text.codePointAt(offset-2);if(c1>='?'.codePointAt(0)&&c1<='?'.codePointAt(0))offset-=2;else offset-=1;}else{offset-=1;}if(Spanned.isImplements(text)){var spans=text.getSpans(offset,offset,android.text.style.ReplacementSpan.type);for(var i=0;ioffset)offset=start;}}return offset;}},{key:'getOffsetAfter',value:function getOffsetAfter(text,offset){var len=text.length;if(offset==len)return len;if(offset==len-1)return len;var c=text.codePointAt(offset);if(c>='?'.codePointAt(0)&&c<='?'.codePointAt(0)){var c1=text.codePointAt(offset+1);if(c1>='?'.codePointAt(0)&&c1<='?'.codePointAt(0))offset+=2;else offset+=1;}else{offset+=1;}if(Spanned.isImplements(text)){var spans=text.getSpans(offset,offset,android.text.style.ReplacementSpan.type);for(var i=0;ioffset)offset=end;}}return offset;}},{key:'ellipsize',value:function ellipsize(text,paint,avail,where){var preserveLength=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var callback=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var textDir=arguments.length>6&&arguments[6]!==undefined?arguments[6]:TextDirectionHeuristics.FIRSTSTRONG_LTR;var ellipsis=arguments.length>7&&arguments[7]!==undefined?arguments[7]:undefined;ellipsis=ellipsis||(where==TextUtils.TruncateAt.END_SMALL?android.text.Layout.ELLIPSIS_TWO_DOTS[0]:android.text.Layout.ELLIPSIS_NORMAL[0]);var len=text.length;var mt=MeasuredText.obtain();try{var width=TextUtils.setPara(mt,paint,text,0,text.length,textDir);if(width<=avail){if(callback!=null){callback.ellipsized(0,0);}return text;}var ellipsiswid=paint.measureText(ellipsis);avail-=ellipsiswid;var left=0;var right=len;if(avail<0){}else if(where==TextUtils.TruncateAt.START){right=len-mt.breakText(len,false,avail);}else if(where==TextUtils.TruncateAt.END||where==TextUtils.TruncateAt.END_SMALL){left=mt.breakText(len,true,avail);}else{right=len-mt.breakText(len,false,avail/2);avail-=mt.measure(right,len);left=mt.breakText(right,true,avail);}if(callback!=null){callback.ellipsized(left,right);}var buf=mt.mChars.split('');var sp=Spanned.isImplements(text)?text:null;var remaining=len-(right-left);if(preserveLength){if(remaining>0){buf[left++]=ellipsis.charAt(0);}for(var i=left;i0&&arguments[0]!==undefined?arguments[0]:true;var count=this.getChildCount();for(var i=count-1;i>=0;i--){var child=this.getChildAt(i);var wparams=child.getLayoutParams();if(wparams.isFocusable()){return child;}}if(findParent){var decor=this.getParent();if(decor!=null){var windowLayout=decor.getParent();if(windowLayout instanceof Layout){return windowLayout.getTopFocusableWindowView();}}}}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var topFocusView=this.getTopFocusableWindowView(false);if(topFocusView&&topFocusView.dispatchKeyEvent(event)){return true;}return _get2(Layout.prototype.__proto__||Object.getPrototypeOf(Layout.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'isTransformedTouchPointInView',value:function isTransformedTouchPointInView(x,y,child,outLocalPoint){var wparams=child.getLayoutParams();if(wparams.isFocusable()&&wparams.isTouchable()){return true;}return false;}},{key:'onChildVisibilityChanged',value:function onChildVisibilityChanged(child,oldVisibility,newVisibility){_get2(Layout.prototype.__proto__||Object.getPrototypeOf(Layout.prototype),'onChildVisibilityChanged',this).call(this,child,oldVisibility,newVisibility);var wparams=child.getLayoutParams();if(newVisibility===View.VISIBLE){var resumeAnimation=child.getContext().androidUI.mActivityThread.getOverrideResumeAnimation();if(resumeAnimation===undefined)resumeAnimation=wparams.resumeAnimation;if(resumeAnimation){child.startAnimation(resumeAnimation);}}else{var hideAnimation=child.getContext().androidUI.mActivityThread.getOverrideHideAnimation();if(hideAnimation===undefined)hideAnimation=wparams.hideAnimation;if(hideAnimation){child.startAnimation(hideAnimation);child.drawAnimation(this,android.os.SystemClock.uptimeMillis(),hideAnimation);}}}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){this.layoutChildren(left,top,right,bottom,false);}},{key:'layoutChildren',value:function layoutChildren(left,top,right,bottom,forceLeftGravity){var count=this.getChildCount();var parentLeft=this.getPaddingLeftWithForeground();var parentRight=right-left-this.getPaddingRightWithForeground();var parentTop=this.getPaddingTopWithForeground();var parentBottom=bottom-top-this.getPaddingBottomWithForeground();this.mForegroundBoundsChanged=true;for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:LayoutParams.TYPE_APPLICATION;_classCallCheck(this,LayoutParams);var _this63=_possibleConstructorReturn(this,(LayoutParams.__proto__||Object.getPrototypeOf(LayoutParams)).call(this,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT));_this63.x=0;_this63.y=0;_this63.type=0;_this63.flags=0;_this63.exitAnimation=android.R.anim.activity_close_exit;_this63.enterAnimation=android.R.anim.activity_open_enter;_this63.resumeAnimation=android.R.anim.activity_close_enter;_this63.hideAnimation=android.R.anim.activity_open_exit;_this63.dimAmount=0;_this63.mTitle="";_this63.type=_type;return _this63;}_createClass(LayoutParams,[{key:'setTitle',value:function setTitle(title){if(null==title)title="";this.mTitle=title;}},{key:'getTitle',value:function getTitle(){return this.mTitle;}},{key:'copyFrom',value:function copyFrom(o){var changes=0;if(this.width!=o.width){this.width=o.width;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.height!=o.height){this.height=o.height;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.x!=o.x){this.x=o.x;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.y!=o.y){this.y=o.y;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.type!=o.type){this.type=o.type;changes|=LayoutParams.TYPE_CHANGED;}if(this.flags!=o.flags){var diff=this.flags^o.flags;this.flags=o.flags;changes|=LayoutParams.FLAGS_CHANGED;}if(this.gravity!=o.gravity){this.gravity=o.gravity;changes|=LayoutParams.LAYOUT_CHANGED;}if(this.mTitle!=o.mTitle){this.mTitle=o.mTitle;changes|=LayoutParams.TITLE_CHANGED;}if(this.dimAmount!=o.dimAmount){this.dimAmount=o.dimAmount;changes|=LayoutParams.DIM_AMOUNT_CHANGED;}return changes;}},{key:'isFocusable',value:function isFocusable(){return(this.flags&LayoutParams.FLAG_NOT_FOCUSABLE)==0;}},{key:'isTouchable',value:function isTouchable(){return(this.flags&LayoutParams.FLAG_NOT_TOUCHABLE)==0;}},{key:'isTouchModal',value:function isTouchModal(){return(this.flags&LayoutParams.FLAG_NOT_TOUCH_MODAL)==0;}},{key:'isFloating',value:function isFloating(){return(this.flags&LayoutParams.FLAG_FLOATING)!=0;}},{key:'isSplitTouch',value:function isSplitTouch(){return(this.flags&LayoutParams.FLAG_SPLIT_TOUCH)!=0;}},{key:'isWatchTouchOutside',value:function isWatchTouchOutside(){return(this.flags&LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)!=0;}}]);return LayoutParams;}(android.widget.FrameLayout.LayoutParams);LayoutParams.FIRST_APPLICATION_WINDOW=1;LayoutParams.TYPE_BASE_APPLICATION=1;LayoutParams.TYPE_APPLICATION=2;LayoutParams.TYPE_APPLICATION_STARTING=3;LayoutParams.LAST_APPLICATION_WINDOW=99;LayoutParams.FIRST_SUB_WINDOW=1000;LayoutParams.TYPE_APPLICATION_PANEL=LayoutParams.FIRST_SUB_WINDOW;LayoutParams.TYPE_APPLICATION_MEDIA=LayoutParams.FIRST_SUB_WINDOW+1;LayoutParams.TYPE_APPLICATION_SUB_PANEL=LayoutParams.FIRST_SUB_WINDOW+2;LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG=LayoutParams.FIRST_SUB_WINDOW+3;LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY=LayoutParams.FIRST_SUB_WINDOW+4;LayoutParams.LAST_SUB_WINDOW=1999;LayoutParams.FIRST_SYSTEM_WINDOW=2000;LayoutParams.TYPE_STATUS_BAR=LayoutParams.FIRST_SYSTEM_WINDOW;LayoutParams.TYPE_SEARCH_BAR=LayoutParams.FIRST_SYSTEM_WINDOW+1;LayoutParams.TYPE_PHONE=LayoutParams.FIRST_SYSTEM_WINDOW+2;LayoutParams.TYPE_SYSTEM_ALERT=LayoutParams.FIRST_SYSTEM_WINDOW+3;LayoutParams.TYPE_KEYGUARD=LayoutParams.FIRST_SYSTEM_WINDOW+4;LayoutParams.TYPE_TOAST=LayoutParams.FIRST_SYSTEM_WINDOW+5;LayoutParams.TYPE_SYSTEM_OVERLAY=LayoutParams.FIRST_SYSTEM_WINDOW+6;LayoutParams.TYPE_PRIORITY_PHONE=LayoutParams.FIRST_SYSTEM_WINDOW+7;LayoutParams.TYPE_SYSTEM_DIALOG=LayoutParams.FIRST_SYSTEM_WINDOW+8;LayoutParams.LAST_SYSTEM_WINDOW=2999;LayoutParams.FLAG_NOT_FOCUSABLE=0x00000008;LayoutParams.FLAG_NOT_TOUCHABLE=0x00000010;LayoutParams.FLAG_NOT_TOUCH_MODAL=0x00000020;LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH=0x00040000;LayoutParams.FLAG_SPLIT_TOUCH=0x00800000;LayoutParams.FLAG_FLOATING=0x40000000;LayoutParams.LAYOUT_CHANGED=1<<0;LayoutParams.TYPE_CHANGED=1<<1;LayoutParams.FLAGS_CHANGED=1<<2;LayoutParams.FORMAT_CHANGED=1<<3;LayoutParams.ANIMATION_CHANGED=1<<4;LayoutParams.DIM_AMOUNT_CHANGED=1<<5;LayoutParams.TITLE_CHANGED=1<<6;LayoutParams.ALPHA_CHANGED=1<<7;WindowManager.LayoutParams=LayoutParams;})(WindowManager=view.WindowManager||(view.WindowManager={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var TranslateAnimation=function(_Animation){_inherits(TranslateAnimation,_Animation);function TranslateAnimation(){_classCallCheck(this,TranslateAnimation);var _this64=_possibleConstructorReturn(this,(TranslateAnimation.__proto__||Object.getPrototypeOf(TranslateAnimation)).call(this));_this64.mFromXType=TranslateAnimation.ABSOLUTE;_this64.mToXType=TranslateAnimation.ABSOLUTE;_this64.mFromYType=TranslateAnimation.ABSOLUTE;_this64.mToYType=TranslateAnimation.ABSOLUTE;_this64.mFromXValue=0.0;_this64.mToXValue=0.0;_this64.mFromYValue=0.0;_this64.mToYValue=0.0;_this64.mFromXDelta=0;_this64.mToXDelta=0;_this64.mFromYDelta=0;_this64.mToYDelta=0;if(arguments.length===4){_this64.mFromXValue=arguments.length<=0?undefined:arguments[0];_this64.mToXValue=arguments.length<=1?undefined:arguments[1];_this64.mFromYValue=arguments.length<=2?undefined:arguments[2];_this64.mToYValue=arguments.length<=3?undefined:arguments[3];_this64.mFromXType=TranslateAnimation.ABSOLUTE;_this64.mToXType=TranslateAnimation.ABSOLUTE;_this64.mFromYType=TranslateAnimation.ABSOLUTE;_this64.mToYType=TranslateAnimation.ABSOLUTE;}else{_this64.mFromXType=arguments.length<=0?undefined:arguments[0];_this64.mFromXValue=arguments.length<=1?undefined:arguments[1];_this64.mToXType=arguments.length<=2?undefined:arguments[2];_this64.mToXValue=arguments.length<=3?undefined:arguments[3];_this64.mFromYType=arguments.length<=4?undefined:arguments[4];_this64.mFromYValue=arguments.length<=5?undefined:arguments[5];_this64.mToYType=arguments.length<=6?undefined:arguments[6];_this64.mToYValue=arguments.length<=7?undefined:arguments[7];}return _this64;}_createClass(TranslateAnimation,[{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var dx=this.mFromXDelta;var dy=this.mFromYDelta;if(this.mFromXDelta!=this.mToXDelta){dx=this.mFromXDelta+(this.mToXDelta-this.mFromXDelta)*interpolatedTime;}if(this.mFromYDelta!=this.mToYDelta){dy=this.mFromYDelta+(this.mToYDelta-this.mFromYDelta)*interpolatedTime;}t.getMatrix().setTranslate(dx,dy);}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(TranslateAnimation.prototype.__proto__||Object.getPrototypeOf(TranslateAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mFromXDelta=this.resolveSize(this.mFromXType,this.mFromXValue,width,parentWidth);this.mToXDelta=this.resolveSize(this.mToXType,this.mToXValue,width,parentWidth);this.mFromYDelta=this.resolveSize(this.mFromYType,this.mFromYValue,height,parentHeight);this.mToYDelta=this.resolveSize(this.mToYType,this.mToYValue,height,parentHeight);}}]);return TranslateAnimation;}(Animation);animation.TranslateAnimation=TranslateAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var AlphaAnimation=function(_Animation2){_inherits(AlphaAnimation,_Animation2);function AlphaAnimation(fromAlpha,toAlpha){_classCallCheck(this,AlphaAnimation);var _this65=_possibleConstructorReturn(this,(AlphaAnimation.__proto__||Object.getPrototypeOf(AlphaAnimation)).call(this));_this65.mFromAlpha=0;_this65.mToAlpha=0;_this65.mFromAlpha=fromAlpha;_this65.mToAlpha=toAlpha;return _this65;}_createClass(AlphaAnimation,[{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var alpha=this.mFromAlpha;t.setAlpha(alpha+(this.mToAlpha-alpha)*interpolatedTime);}},{key:'willChangeTransformationMatrix',value:function willChangeTransformationMatrix(){return false;}},{key:'willChangeBounds',value:function willChangeBounds(){return false;}},{key:'hasAlpha',value:function hasAlpha(){return true;}}]);return AlphaAnimation;}(Animation);animation.AlphaAnimation=AlphaAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var ScaleAnimation=function(_Animation3){_inherits(ScaleAnimation,_Animation3);function ScaleAnimation(fromX,toX,fromY,toY){var pivotXType=arguments.length>4&&arguments[4]!==undefined?arguments[4]:ScaleAnimation.ABSOLUTE;var pivotXValue=arguments.length>5&&arguments[5]!==undefined?arguments[5]:0;var pivotYType=arguments.length>6&&arguments[6]!==undefined?arguments[6]:ScaleAnimation.ABSOLUTE;var pivotYValue=arguments.length>7&&arguments[7]!==undefined?arguments[7]:0;_classCallCheck(this,ScaleAnimation);var _this66=_possibleConstructorReturn(this,(ScaleAnimation.__proto__||Object.getPrototypeOf(ScaleAnimation)).call(this));_this66.mFromX=0;_this66.mToX=0;_this66.mFromY=0;_this66.mToY=0;_this66.mFromXData=0;_this66.mToXData=0;_this66.mFromYData=0;_this66.mToYData=0;_this66.mPivotXType=ScaleAnimation.ABSOLUTE;_this66.mPivotYType=ScaleAnimation.ABSOLUTE;_this66.mPivotXValue=0.0;_this66.mPivotYValue=0.0;_this66.mPivotX=0;_this66.mPivotY=0;_this66.mResources=null;_this66.mFromX=fromX;_this66.mToX=toX;_this66.mFromY=fromY;_this66.mToY=toY;_this66.mPivotXValue=pivotXValue;_this66.mPivotXType=pivotXType;_this66.mPivotYValue=pivotYValue;_this66.mPivotYType=pivotYType;_this66.initializePivotPoint();return _this66;}_createClass(ScaleAnimation,[{key:'initializePivotPoint',value:function initializePivotPoint(){if(this.mPivotXType==ScaleAnimation.ABSOLUTE){this.mPivotX=this.mPivotXValue;}if(this.mPivotYType==ScaleAnimation.ABSOLUTE){this.mPivotY=this.mPivotYValue;}}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var sx=1.0;var sy=1.0;var scale=this.getScaleFactor();if(this.mFromX!=1.0||this.mToX!=1.0){sx=this.mFromX+(this.mToX-this.mFromX)*interpolatedTime;}if(this.mFromY!=1.0||this.mToY!=1.0){sy=this.mFromY+(this.mToY-this.mFromY)*interpolatedTime;}if(this.mPivotX==0&&this.mPivotY==0){t.getMatrix().setScale(sx,sy);}else{t.getMatrix().setScale(sx,sy,scale*this.mPivotX,scale*this.mPivotY);}}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(ScaleAnimation.prototype.__proto__||Object.getPrototypeOf(ScaleAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mPivotX=this.resolveSize(this.mPivotXType,this.mPivotXValue,width,parentWidth);this.mPivotY=this.resolveSize(this.mPivotYType,this.mPivotYValue,height,parentHeight);}}]);return ScaleAnimation;}(Animation);animation.ScaleAnimation=ScaleAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var ArrayList=java.util.ArrayList;var Long=java.lang.Long;var Animation=android.view.animation.Animation;var Transformation=android.view.animation.Transformation;var AnimationSet=function(_Animation4){_inherits(AnimationSet,_Animation4);function AnimationSet(){var shareInterpolator=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;_classCallCheck(this,AnimationSet);var _this67=_possibleConstructorReturn(this,(AnimationSet.__proto__||Object.getPrototypeOf(AnimationSet)).call(this));_this67.mFlags=0;_this67.mAnimations=new ArrayList();_this67.mTempTransformation=new Transformation();_this67.mLastEnd=0;_this67.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK,shareInterpolator);_this67.init();return _this67;}_createClass(AnimationSet,[{key:'setFlag',value:function setFlag(mask,value){if(value){this.mFlags|=mask;}else{this.mFlags&=~mask;}}},{key:'init',value:function init(){this.mStartTime=0;}},{key:'setFillAfter',value:function setFillAfter(fillAfter){this.mFlags|=AnimationSet.PROPERTY_FILL_AFTER_MASK;_get2(AnimationSet.prototype.__proto__||Object.getPrototypeOf(AnimationSet.prototype),'setFillAfter',this).call(this,fillAfter);}},{key:'setFillBefore',value:function setFillBefore(fillBefore){this.mFlags|=AnimationSet.PROPERTY_FILL_BEFORE_MASK;_get2(AnimationSet.prototype.__proto__||Object.getPrototypeOf(AnimationSet.prototype),'setFillBefore',this).call(this,fillBefore);}},{key:'setRepeatMode',value:function setRepeatMode(repeatMode){this.mFlags|=AnimationSet.PROPERTY_REPEAT_MODE_MASK;_get2(AnimationSet.prototype.__proto__||Object.getPrototypeOf(AnimationSet.prototype),'setRepeatMode',this).call(this,repeatMode);}},{key:'setStartOffset',value:function setStartOffset(startOffset){this.mFlags|=AnimationSet.PROPERTY_START_OFFSET_MASK;_get2(AnimationSet.prototype.__proto__||Object.getPrototypeOf(AnimationSet.prototype),'setStartOffset',this).call(this,startOffset);}},{key:'hasAlpha',value:function hasAlpha(){if(this.mDirty){this.mDirty=this.mHasAlpha=false;var count=this.mAnimations.size();var animations=this.mAnimations;for(var i=0;i=0;--i){var d=animations.get(i).computeDurationHint();if(d>duration)duration=d;}return duration;}},{key:'initializeInvalidateRegion',value:function initializeInvalidateRegion(left,top,right,bottom){var region=this.mPreviousRegion;region.set(left,top,right,bottom);region.inset(-1.0,-1.0);if(this.mFillBefore){var count=this.mAnimations.size();var animations=this.mAnimations;var temp=this.mTempTransformation;var previousTransformation=this.mPreviousTransformation;for(var i=count-1;i>=0;--i){var _a7=animations.get(i);if(!_a7.isFillEnabled()||_a7.getFillBefore()||_a7.getStartOffset()==0){temp.clear();var interpolator=_a7.mInterpolator;_a7.applyTransformation(interpolator!=null?interpolator.getInterpolation(0.0):0.0,temp);previousTransformation.compose(temp);}}}}},{key:'getTransformation',value:function getTransformation(currentTime,t){var count=this.mAnimations.size();var animations=this.mAnimations;var temp=this.mTempTransformation;var more=false;var started=false;var ended=true;t.clear();for(var i=count-1;i>=0;--i){var _a8=animations.get(i);temp.clear();more=_a8.getTransformation(currentTime,temp,this.getScaleFactor())||more;t.compose(temp);started=started||_a8.hasStarted();ended=_a8.hasEnded()&&ended;}if(started&&!this.mStarted){if(this.mListener!=null){this.mListener.onAnimationStart(this);}this.mStarted=true;}if(ended!=this.mEnded){if(this.mListener!=null){this.mListener.onAnimationEnd(this);}this.mEnded=ended;}return more;}},{key:'scaleCurrentDuration',value:function scaleCurrentDuration(scale){var animations=this.mAnimations;var count=animations.size();for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:1;_classCallCheck(this,AccelerateInterpolator);this.mFactor=factor;this.mDoubleFactor=factor*2;}_createClass(AccelerateInterpolator,[{key:'getInterpolation',value:function getInterpolation(input){if(this.mFactor==1.0){return input*input;}else{return Math.pow(input,this.mDoubleFactor);}}}]);return AccelerateInterpolator;}();animation.AccelerateInterpolator=AccelerateInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var AnticipateInterpolator=function(){function AnticipateInterpolator(){var tension=arguments.length>0&&arguments[0]!==undefined?arguments[0]:2;_classCallCheck(this,AnticipateInterpolator);this.mTension=tension;}_createClass(AnticipateInterpolator,[{key:'getInterpolation',value:function getInterpolation(t){return t*t*((this.mTension+1)*t-this.mTension);}}]);return AnticipateInterpolator;}();animation.AnticipateInterpolator=AnticipateInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var AnticipateOvershootInterpolator=function(){function AnticipateOvershootInterpolator(){var tension=arguments.length>0&&arguments[0]!==undefined?arguments[0]:2;var extraTension=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1.5;_classCallCheck(this,AnticipateOvershootInterpolator);this.mTension=tension*extraTension;}_createClass(AnticipateOvershootInterpolator,[{key:'getInterpolation',value:function getInterpolation(t){if(t<0.5)return 0.5*AnticipateOvershootInterpolator.a(t*2.0,this.mTension);else return 0.5*(AnticipateOvershootInterpolator.o(t*2.0-2.0,this.mTension)+2.0);}}],[{key:'a',value:function a(t,s){return t*t*((s+1)*t-s);}},{key:'o',value:function o(t,s){return t*t*((s+1)*t+s);}}]);return AnticipateOvershootInterpolator;}();animation.AnticipateOvershootInterpolator=AnticipateOvershootInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var BounceInterpolator=function(){function BounceInterpolator(){_classCallCheck(this,BounceInterpolator);}_createClass(BounceInterpolator,[{key:'getInterpolation',value:function getInterpolation(t){t*=1.1226;if(t<0.3535)return BounceInterpolator.bounce(t);else if(t<0.7408)return BounceInterpolator.bounce(t-0.54719)+0.7;else if(t<0.9644)return BounceInterpolator.bounce(t-0.8526)+0.9;else return BounceInterpolator.bounce(t-1.0435)+0.95;}}],[{key:'bounce',value:function bounce(t){return t*t*8.0;}}]);return BounceInterpolator;}();animation.BounceInterpolator=BounceInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var CycleInterpolator=function(){function CycleInterpolator(mCycles){_classCallCheck(this,CycleInterpolator);this.mCycles=mCycles;}_createClass(CycleInterpolator,[{key:'getInterpolation',value:function getInterpolation(input){return Math.sin(2*this.mCycles*Math.PI*input);}}]);return CycleInterpolator;}();animation.CycleInterpolator=CycleInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var OvershootInterpolator=function(){function OvershootInterpolator(){var tension=arguments.length>0&&arguments[0]!==undefined?arguments[0]:2;_classCallCheck(this,OvershootInterpolator);this.mTension=tension;}_createClass(OvershootInterpolator,[{key:'getInterpolation',value:function getInterpolation(t){t-=1.0;return t*t*((this.mTension+1)*t+this.mTension)+1.0;}}]);return OvershootInterpolator;}();animation.OvershootInterpolator=OvershootInterpolator;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var R;(function(R){var AccelerateDecelerateInterpolator=android.view.animation.AccelerateDecelerateInterpolator;var AccelerateInterpolator=android.view.animation.AccelerateInterpolator;var AnticipateInterpolator=android.view.animation.AnticipateInterpolator;var AnticipateOvershootInterpolator=android.view.animation.AnticipateOvershootInterpolator;var BounceInterpolator=android.view.animation.BounceInterpolator;var CycleInterpolator=android.view.animation.CycleInterpolator;var DecelerateInterpolator=android.view.animation.DecelerateInterpolator;var LinearInterpolator=android.view.animation.LinearInterpolator;var OvershootInterpolator=android.view.animation.OvershootInterpolator;var interpolator=function interpolator(){_classCallCheck(this,interpolator);};interpolator.accelerate_cubic=new AccelerateInterpolator(1.5);interpolator.accelerate_decelerate=new AccelerateDecelerateInterpolator();interpolator.accelerate_quad=new AccelerateInterpolator();interpolator.accelerate_quint=new AccelerateInterpolator(2.5);interpolator.anticipate_overshoot=new AnticipateOvershootInterpolator();interpolator.anticipate=new AnticipateInterpolator();interpolator.bounce=new BounceInterpolator();interpolator.cycle=new CycleInterpolator(1);interpolator.decelerate_cubic=new DecelerateInterpolator(1.5);interpolator.decelerate_quad=new DecelerateInterpolator();interpolator.decelerate_quint=new DecelerateInterpolator(2.5);interpolator.linear=new LinearInterpolator();interpolator.overshoot=new OvershootInterpolator();R.interpolator=interpolator;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var R;(function(R){var Animation=android.view.animation.Animation;var AlphaAnimation=android.view.animation.AlphaAnimation;var TranslateAnimation=android.view.animation.TranslateAnimation;var ScaleAnimation=android.view.animation.ScaleAnimation;var AnimationSet=android.view.animation.AnimationSet;var anim=function(){function anim(){_classCallCheck(this,anim);}_createClass(anim,null,[{key:'activity_close_enter',get:function get(){var alpha=new AlphaAnimation(1,1);alpha.setDuration(300);alpha.setFillBefore(true);alpha.setFillEnabled(true);alpha.setFillAfter(true);return alpha;}},{key:'activity_close_exit',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(1,0);alpha.setDuration(300);alpha.setFillBefore(true);alpha.setFillEnabled(true);alpha.setFillAfter(true);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(1,0.8,1,0.8,Animation.RELATIVE_TO_PARENT,0.5,Animation.RELATIVE_TO_PARENT,0.5);scale.setDuration(300);scale.setFillBefore(true);scale.setFillEnabled(true);scale.setFillAfter(true);scale.setInterpolator(R.interpolator.decelerate_cubic);animSet.addAnimation(alpha);animSet.addAnimation(scale);return animSet;}},{key:'activity_open_enter',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(0,1);alpha.setDuration(300);alpha.setFillBefore(false);alpha.setFillEnabled(true);alpha.setFillAfter(true);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(0.8,1,0.8,1,Animation.RELATIVE_TO_PARENT,0.5,Animation.RELATIVE_TO_PARENT,0.5);scale.setDuration(300);scale.setFillBefore(false);scale.setFillEnabled(true);scale.setFillAfter(true);scale.setInterpolator(R.interpolator.decelerate_cubic);animSet.addAnimation(alpha);animSet.addAnimation(scale);return animSet;}},{key:'activity_open_exit',get:function get(){var alpha=new AlphaAnimation(1,0);alpha.setDuration(300);alpha.setFillBefore(false);alpha.setFillEnabled(true);alpha.setFillAfter(true);alpha.setInterpolator(R.interpolator.decelerate_quint);return alpha;}},{key:'activity_close_enter_ios',get:function get(){var anim=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,-0.25,Animation.RELATIVE_TO_PARENT,0,0,0,0,0);anim.setDuration(300);return anim;}},{key:'activity_close_exit_ios',get:function get(){var anim=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,1,0,0,0,0);anim.setDuration(300);return anim;}},{key:'activity_open_enter_ios',get:function get(){var anim=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,1,Animation.RELATIVE_TO_PARENT,0,0,0,0,0);anim.setDuration(300);return anim;}},{key:'activity_open_exit_ios',get:function get(){var anim=new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_PARENT,-0.25,0,0,0,0);anim.setDuration(300);return anim;}},{key:'dialog_enter',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(0,1);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(0.9,1,0.9,1,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0.5);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'dialog_exit',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(1,0);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(1,0.9,1,0.9,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0.5);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'fade_in',get:function get(){var alpha=new AlphaAnimation(0,1);alpha.setDuration(500);alpha.setInterpolator(R.interpolator.decelerate_quad);return alpha;}},{key:'fade_out',get:function get(){var alpha=new AlphaAnimation(1,0);alpha.setDuration(400);alpha.setInterpolator(R.interpolator.accelerate_quad);return alpha;}},{key:'toast_enter',get:function get(){var alpha=new AlphaAnimation(0,1);alpha.setDuration(500);alpha.setInterpolator(R.interpolator.decelerate_quad);return alpha;}},{key:'toast_exit',get:function get(){var alpha=new AlphaAnimation(1,0);alpha.setDuration(500);alpha.setInterpolator(R.interpolator.accelerate_quad);return alpha;}},{key:'grow_fade_in',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(0,1);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(0.9,1,0.9,1,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'grow_fade_in_center',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(0,1);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(0.9,1,0.9,1,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0.5);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'grow_fade_in_from_bottom',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(0,1);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(0.9,1,0.9,1,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,1);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'shrink_fade_out',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(1,0);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(1,0.9,1,0.9,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'shrink_fade_out_center',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(1,0);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(1,0.9,1,0.9,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,0.5);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}},{key:'shrink_fade_out_from_bottom',get:function get(){var animSet=new AnimationSet();var alpha=new AlphaAnimation(1,0);alpha.setDuration(150);alpha.setInterpolator(R.interpolator.decelerate_cubic);var scale=new ScaleAnimation(1,0.9,1,0.9,Animation.RELATIVE_TO_SELF,0.5,Animation.RELATIVE_TO_SELF,1);scale.setDuration(220);scale.setInterpolator(R.interpolator.decelerate_quint);animSet.addAnimation(scale);animSet.addAnimation(alpha);return animSet;}}]);return anim;}();R.anim=anim;})(R=android.R||(android.R={}));})(android||(android={}));var android;(function(android){var view;(function(view_5){var MotionEvent=android.view.MotionEvent;var View=android.view.View;var ViewConfiguration=android.view.ViewConfiguration;var WindowManager=android.view.WindowManager;var FrameLayout=android.widget.FrameLayout;var Window=function(){function Window(context){_classCallCheck(this,Window);this.mIsActive=false;this.mCloseOnTouchOutside=false;this.mSetCloseOnTouchOutside=false;this.mWindowAttributes=new WindowManager.LayoutParams();this.mContext=context;this.initDecorView();this.initAttachInfo();this.getAttributes().setTitle(context.androidUI.appName);}_createClass(Window,[{key:'initDecorView',value:function initDecorView(){this.mDecor=new DecorView(this);this.mContentParent=new FrameLayout(this.mContext);this.mContentParent.setId(android.R.id.content);this.mDecor.addView(this.mContentParent,-1,-1);}},{key:'initAttachInfo',value:function initAttachInfo(){var viewRootImpl=this.mContext.androidUI._viewRootImpl;this.mAttachInfo=new View.AttachInfo(viewRootImpl,viewRootImpl.mHandler);this.mAttachInfo.mRootView=this.mDecor;this.mAttachInfo.mHasWindowFocus=true;}},{key:'getContext',value:function getContext(){return this.mContext;}},{key:'setContainer',value:function setContainer(container){this.mContainer=container;}},{key:'getContainer',value:function getContainer(){return this.mContainer;}},{key:'destroy',value:function destroy(){this.mDestroyed=true;}},{key:'isDestroyed',value:function isDestroyed(){return this.mDestroyed;}},{key:'setChildWindowManager',value:function setChildWindowManager(wm){if(this.mChildWindowManager){this.mDecor.removeView(this.mChildWindowManager.getWindowsLayout());}this.mChildWindowManager=wm;}},{key:'getChildWindowManager',value:function getChildWindowManager(){if(!this.mChildWindowManager){this.mChildWindowManager=new WindowManager(this.mContext);this.mDecor.addView(this.mChildWindowManager.getWindowsLayout(),-1,-1);}return this.mChildWindowManager;}},{key:'setCallback',value:function setCallback(callback){this.mCallback=callback;}},{key:'getCallback',value:function getCallback(){return this.mCallback;}},{key:'setFloating',value:function setFloating(isFloating){var attrs=this.getAttributes();if(isFloating===attrs.isFloating())return;if(isFloating)attrs.flags|=WindowManager.LayoutParams.FLAG_FLOATING;else attrs.flags&=~WindowManager.LayoutParams.FLAG_FLOATING;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'isFloating',value:function isFloating(){return this.mWindowAttributes.isFloating();}},{key:'setLayout',value:function setLayout(width,height){var attrs=this.getAttributes();attrs.width=width;attrs.height=height;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'setGravity',value:function setGravity(gravity){var attrs=this.getAttributes();attrs.gravity=gravity;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'setType',value:function setType(type){var attrs=this.getAttributes();attrs.type=type;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'setWindowAnimations',value:function setWindowAnimations(enterAnimation,exitAnimation){var resumeAnimation=arguments.length>2&&arguments[2]!==undefined?arguments[2]:this.mWindowAttributes.resumeAnimation;var hideAnimation=arguments.length>3&&arguments[3]!==undefined?arguments[3]:this.mWindowAttributes.hideAnimation;var attrs=this.getAttributes();attrs.enterAnimation=enterAnimation;attrs.exitAnimation=exitAnimation;attrs.resumeAnimation=resumeAnimation;attrs.hideAnimation=hideAnimation;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'addFlags',value:function addFlags(flags){this.setFlags(flags,flags);}},{key:'clearFlags',value:function clearFlags(flags){this.setFlags(0,flags);}},{key:'setFlags',value:function setFlags(flags,mask){var attrs=this.getAttributes();attrs.flags=attrs.flags&~mask|flags&mask;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'setDimAmount',value:function setDimAmount(amount){var attrs=this.getAttributes();attrs.dimAmount=amount;if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(attrs);}}},{key:'setAttributes',value:function setAttributes(a){this.mWindowAttributes.copyFrom(a);if(this.mCallback!=null){this.mCallback.onWindowAttributesChanged(this.mWindowAttributes);}}},{key:'getAttributes',value:function getAttributes(){return this.mWindowAttributes;}},{key:'setCloseOnTouchOutside',value:function setCloseOnTouchOutside(close){this.mCloseOnTouchOutside=close;this.mSetCloseOnTouchOutside=true;}},{key:'setCloseOnTouchOutsideIfNotSet',value:function setCloseOnTouchOutsideIfNotSet(close){if(!this.mSetCloseOnTouchOutside){this.mCloseOnTouchOutside=close;this.mSetCloseOnTouchOutside=true;}}},{key:'shouldCloseOnTouch',value:function shouldCloseOnTouch(context,event){if(this.mCloseOnTouchOutside&&event.getAction()==MotionEvent.ACTION_DOWN&&this.isOutOfBounds(context,event)&&this.peekDecorView()!=null){return true;}return false;}},{key:'isOutOfBounds',value:function isOutOfBounds(context,event){var x=Math.floor(event.getX());var y=Math.floor(event.getY());var slop=ViewConfiguration.get(context).getScaledWindowTouchSlop();var decorView=this.getDecorView();return x<-slop||y<-slop||x>decorView.getWidth()+slop||y>decorView.getHeight()+slop;}},{key:'makeActive',value:function makeActive(){if(this.mContainer!=null){if(this.mContainer.mActiveWindow!=null){this.mContainer.mActiveWindow.mIsActive=false;}this.mContainer.mActiveWindow=this;}this.mIsActive=true;this.onActive();}},{key:'isActive',value:function isActive(){return this.mIsActive;}},{key:'findViewById',value:function findViewById(id){return this.getDecorView().findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){this.mContentParent.removeAllViews();this.addContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){if(params){this.mContentParent.addView(view,params);}else{this.mContentParent.addView(view);}var cb=this.getCallback();if(cb!=null&&!this.isDestroyed()){cb.onContentChanged();}}},{key:'getContentParent',value:function getContentParent(){return this.mContentParent;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mDecor!=null?this.mDecor.findFocus():null;}},{key:'getLayoutInflater',value:function getLayoutInflater(){return this.mContext.getLayoutInflater();}},{key:'setTitle',value:function setTitle(title){this.mDecor.bindElement.setAttribute('title',title);this.getAttributes().setTitle(title);}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(drawable){if(this.mDecor!=null){this.mDecor.setBackground(drawable);}}},{key:'setBackgroundColor',value:function setBackgroundColor(color){if(this.mDecor!=null){this.mDecor.setBackgroundColor(color);}}},{key:'takeKeyEvents',value:function takeKeyEvents(_get){this.mDecor.setFocusable(_get);}},{key:'superDispatchKeyEvent',value:function superDispatchKeyEvent(event){return this.mDecor.superDispatchKeyEvent(event);}},{key:'superDispatchTouchEvent',value:function superDispatchTouchEvent(event){return this.mDecor.superDispatchTouchEvent(event);}},{key:'superDispatchGenericMotionEvent',value:function superDispatchGenericMotionEvent(event){return this.mDecor.superDispatchGenericMotionEvent(event);}},{key:'getDecorView',value:function getDecorView(){return this.mDecor;}},{key:'peekDecorView',value:function peekDecorView(){return this.mDecor;}},{key:'onActive',value:function onActive(){}}]);return Window;}();view_5.Window=Window;var DecorView=function(_FrameLayout){_inherits(DecorView,_FrameLayout);function DecorView(window){_classCallCheck(this,DecorView);var _this68=_possibleConstructorReturn(this,(DecorView.__proto__||Object.getPrototypeOf(DecorView)).call(this,window.mContext));_this68._ignoreRequestLayoutInAnimation=true;_this68._pendingRequestLayoutOnAnimationEnd=false;_this68._ignoreInvalidateInAnimation=true;_this68._pendingInvalidateOnAnimationEnd=false;_this68.Window_this=window;_this68.bindElement.classList.add(window.mContext.constructor.name);_this68.setBackgroundColor(android.graphics.Color.WHITE);_this68.setIsRootNamespace(true);return _this68;}_createClass(DecorView,[{key:'invalidate',value:function invalidate(){var _get3;if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}for(var _len20=arguments.length,args=Array(_len20),_key21=0;_key21<_len20;_key21++){args[_key21]=arguments[_key21];}(_get3=_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'invalidate',this)).call.apply(_get3,[this].concat(args));}},{key:'invalidateChild',value:function invalidateChild(child,dirty){if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'invalidateChild',this).call(this,child,dirty);}},{key:'invalidateChildFast',value:function invalidateChildFast(child,dirty){if(this._ignoreInvalidateInAnimation&&this.getAnimation()){this._pendingInvalidateOnAnimationEnd=true;return null;}_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'invalidateChildFast',this).call(this,child,dirty);}},{key:'requestLayout',value:function requestLayout(){if(this._ignoreRequestLayoutInAnimation&&this.getAnimation()){this._pendingRequestLayoutOnAnimationEnd=true;return null;}_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'requestLayout',this).call(this);}},{key:'onAnimationStart',value:function onAnimationStart(){_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onAnimationStart',this).call(this);this.setDrawingCacheEnabled(true);this.buildDrawingCache(true);}},{key:'onAnimationEnd',value:function onAnimationEnd(){_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onAnimationEnd',this).call(this);this.setDrawingCacheEnabled(false);if(this._pendingInvalidateOnAnimationEnd){this._pendingInvalidateOnAnimationEnd=false;this.invalidate();}if(this._pendingRequestLayoutOnAnimationEnd){this._pendingRequestLayoutOnAnimationEnd=false;this.requestLayout();}}},{key:'buildDrawingCache',value:function buildDrawingCache(){var autoScale=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if(this.getAnimation()&&this.mUnscaledDrawingCache)return;_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'buildDrawingCache',this).call(this,autoScale);}},{key:'drawFromParent',value:function drawFromParent(canvas,parent,drawingTime){var windowAnimation=this.getAnimation();var wparams=this.getLayoutParams();var shadowAlpha=wparams.dimAmount*255;if(windowAnimation!=null&&shadowAlpha){var duration=windowAnimation.getDuration();var startTime=windowAnimation.getStartTime();if(startTime<0)startTime=drawingTime;var startOffset=windowAnimation.getStartOffset();var normalizedTime=void 0;if(duration!=0){normalizedTime=(drawingTime-(startTime+startOffset))/duration;normalizedTime=Math.max(Math.min(normalizedTime,1.0),0.0);}else{normalizedTime=drawingTime=0;i--){var child=this.getChildAt(i);if(child instanceof WindowManager.Layout&&child.dispatchKeyEvent(event)){return true;}}var action=event.getAction();if(!this.Window_this.isDestroyed()){var cb=this.Window_this.getCallback();var handled=cb!=null?cb.dispatchKeyEvent(event):_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);if(handled){return true;}}return _get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){var wparams=this.getLayoutParams();var cb=this.Window_this.getCallback();var outside=this.Window_this.isOutOfBounds(this.getContext(),ev);if(outside&&!wparams.isTouchModal()){if(wparams.isWatchTouchOutside()&&ev.getAction()==android.view.MotionEvent.ACTION_DOWN){var action=ev.getAction();ev.setAction(android.view.MotionEvent.ACTION_OUTSIDE);if(cb!=null&&!this.Window_this.isDestroyed()){cb.dispatchTouchEvent(ev);}else{_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,ev);}ev.setAction(action);}return false;}cb!=null&&!this.Window_this.isDestroyed()?cb.dispatchTouchEvent(ev):_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,ev);return true;}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){var cb=this.Window_this.getCallback();return cb!=null&&!this.Window_this.isDestroyed()?cb.dispatchGenericMotionEvent(ev):_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchGenericMotionEvent',this).call(this,ev);}},{key:'superDispatchKeyEvent',value:function superDispatchKeyEvent(event){return _get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'superDispatchTouchEvent',value:function superDispatchTouchEvent(event){return _get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchTouchEvent',this).call(this,event);}},{key:'superDispatchGenericMotionEvent',value:function superDispatchGenericMotionEvent(event){return _get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'dispatchGenericMotionEvent',this).call(this,event);}},{key:'onTouchEvent',value:function onTouchEvent(event){return this.onInterceptTouchEvent(event);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){this.Window_this.mAttachInfo.mWindowVisibility=visibility;this.dispatchWindowVisibilityChanged(visibility);_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){this.Window_this.mAttachInfo.mHasWindowFocus=hasWindowFocus;_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onWindowFocusChanged(hasWindowFocus);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){this.Window_this.mAttachInfo.mWindowVisibility=this.getVisibility();_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onAttachedToWindow',this).call(this);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onAttachedToWindow();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(DecorView.prototype.__proto__||Object.getPrototypeOf(DecorView.prototype),'onDetachedFromWindow',this).call(this);var cb=this.Window_this.getCallback();if(cb!=null&&!this.Window_this.isDestroyed()){cb.onDetachedFromWindow();}}}]);return DecorView;}(FrameLayout);})(view=android.view||(android.view={}));})(android||(android={}));var PageStack;(function(PageStack){PageStack.DEBUG=false;var history_go=history.go;var iFrameHistoryLengthAsFake=0;var historyLocking=false;var windowLoadLocking=true;var pendingFuncLock=[];var initCalled=false;function init(){initCalled=true;_init();history.go=function(delta){PageStack.go(delta);};history.back=function(){var delta=arguments.length>0&&arguments[0]!==undefined?arguments[0]:-1;PageStack.go(delta);};history.forward=function(){var delta=arguments.length>0&&arguments[0]!==undefined?arguments[0]:1;PageStack.go(delta);};}PageStack.init=init;function checkInitCalled(){if(!initCalled)throw Error("PageStack.init() must be call first");}function _init(){PageStack.currentStack=history.state;if(PageStack.currentStack&&!PageStack.currentStack.isRoot){console.log('already has history.state when _init PageState, restore page');restorePageFromStackIfNeed();}else{PageStack.currentStack=PageStack.currentStack||{pageId:'',isRoot:true,stack:[{pageId:null}]};var initOpenUrl=location.hash;if(initOpenUrl&&initOpenUrl.indexOf('#')===0)initOpenUrl=initOpenUrl.substring(1);removeLastHistoryIfFaked();ensureLockDo(function(){history.replaceState(PageStack.currentStack,null,'#');});if(initOpenUrl&&initOpenUrl.length>0){if(firePagePush(initOpenUrl,null)){notifyNewPageOpened(initOpenUrl);}}}ensureLastHistoryFaked();if(document.readyState==='complete'){windowLoadLocking=false;setTimeout(initOnpopstate,0);}else{window.addEventListener('load',function(){windowLoadLocking=false;window.removeEventListener('popstate',onpopstateListener);setTimeout(initOnpopstate,0);});}}var onpopstateListener=function onpopstateListener(ev){var stack=ev.state;if(historyLocking){PageStack.currentStack=stack;return;}if(PageStack.DEBUG)console.log('onpopstate',stack);if(!stack){var _pageId=location.hash;if(_pageId[0]==='#')_pageId=_pageId.substring(1);historyGo(-2,false);if(firePagePush(_pageId,null)){notifyNewPageOpened(_pageId);}else{ensureLastHistoryFaked();}}else if(PageStack.currentStack.stack.length!=stack.stack.length){var delta=stack.stack.length-PageStack.currentStack.stack.length;if(delta>=0){console.warn('something error! stack: ',stack,'last stack: ',PageStack.currentStack);return;}var stackList=PageStack.currentStack.stack;PageStack.currentStack=stack;tryClosePageAfterHistoryChanged(stackList,delta);}else{PageStack.currentStack=stack;if(fireBackPressed()){ensureLastHistoryFaked();}else{var stackList=PageStack.currentStack.stack;var pageId=stackList[stackList.length-1].pageId;if(firePageClose(pageId,stackList[stackList.length-1].extra)){historyGo(-1);}else{ensureLastHistoryFaked();}}}};function initOnpopstate(){window.removeEventListener('popstate',onpopstateListener);window.addEventListener('popstate',onpopstateListener);}function go(delta){var pageAlreadyClose=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;checkInitCalled();if(historyLocking){ensureLockDo(function(){go(delta);});return;}var stackList=PageStack.currentStack.stack;if(delta===-1&&!pageAlreadyClose){if(!firePageClose(stackList[stackList.length-1].pageId,stackList[stackList.length-1].extra)){return;}}removeLastHistoryIfFaked();historyGo(delta);if(delta<-1&&!pageAlreadyClose){ensureLockDo(function(){tryClosePageAfterHistoryChanged(stackList,delta);});}}PageStack.go=go;function tryClosePageAfterHistoryChanged(stateListBeforeHistoryChange,delta){var historyLength=stateListBeforeHistoryChange.length;for(var i=historyLength+delta;i0&&arguments[0]!==undefined?arguments[0]:false;checkInitCalled();go(-1,pageAlreadyClose);}PageStack.back=back;function openPage(pageId,extra){checkInitCalled();pageId+='';var openResult=firePageOpen(pageId,extra);if(openResult){notifyNewPageOpened(pageId,extra);}return openResult;}PageStack.openPage=openPage;function backToPage(pageId){checkInitCalled();if(PageStack.DEBUG)console.log('backToPage',pageId);if(historyLocking){ensureLockDo(function(){backToPage(pageId);});}var stackList=PageStack.currentStack.stack;var historyLength=stackList.length;for(var i=historyLength-1;i>=0;i--){var state=stackList[i];if(state.pageId==pageId){var delta=i-historyLength;removeLastHistoryIfFaked();historyGo(delta);return;}}}PageStack.backToPage=backToPage;var releaseLockingTimeout=void 0;var requestHistoryGoWhenLocking=0;var ensureFakeAfterHistoryChange=false;function historyGo(delta){var ensureFaked=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(delta>=0)return;if(history.length===1)return;ensureFakeAfterHistoryChange=ensureFakeAfterHistoryChange||ensureFaked;if(historyLocking){requestHistoryGoWhenLocking+=delta;return;}if(PageStack.DEBUG)console.log('historyGo',delta);historyLocking=true;var state=history.state;if(releaseLockingTimeout)clearTimeout(releaseLockingTimeout);function checkRelease(){clearTimeout(releaseLockingTimeout);if(history.state===state){releaseLockingTimeout=setTimeout(checkRelease,0);}else{var continueGo=requestHistoryGoWhenLocking;if(continueGo!=0){requestHistoryGoWhenLocking=0;historyLocking=false;historyGo(continueGo,false);}else{if(ensureFakeAfterHistoryChange)ensureLastHistoryFakedImpl();ensureFakeAfterHistoryChange=false;releaseLockingTimeout=setTimeout(function(){historyLocking=false;},10);}}}releaseLockingTimeout=setTimeout(checkRelease,0);history_go.call(history,delta);}PageStack.historyGo=historyGo;function restorePageFromStackIfNeed(){if(PageStack.currentStack){var copy=PageStack.currentStack.stack.concat();copy.shift();var _iteratorNormalCompletion49=true;var _didIteratorError49=false;var _iteratorError49=undefined;try{for(var _iterator49=copy[Symbol.iterator](),_step49;!(_iteratorNormalCompletion49=(_step49=_iterator49.next()).done);_iteratorNormalCompletion49=true){var saveState=_step49.value;firePageOpen(saveState.pageId,saveState.extra,true);}}catch(err){_didIteratorError49=true;_iteratorError49=err;}finally{try{if(!_iteratorNormalCompletion49&&_iterator49.return){_iterator49.return();}}finally{if(_didIteratorError49){throw _iteratorError49;}}}}}function fireBackPressed(){if(PageStack.backListener){try{return PageStack.backListener();}catch(e){console.error(e);}}}function firePageOpen(pageId,pageExtra){var isRestore=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(PageStack.pageOpenHandler){try{return PageStack.pageOpenHandler(pageId,pageExtra,isRestore);}catch(e){console.error(e);}}}function firePagePush(pageId,pageExtra){if(PageStack.pagePushHandler){try{return PageStack.pagePushHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function firePageClose(pageId,pageExtra){if(PageStack.pageCloseHandler){try{return PageStack.pageCloseHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function notifyPageClosed(pageId){checkInitCalled();if(PageStack.DEBUG)console.log('notifyPageClosed',pageId);if(historyLocking){ensureLockDo(function(){notifyPageClosed(pageId);});return;}var stackList=PageStack.currentStack.stack;var historyLength=stackList.length;for(var i=historyLength-1;i>=0;i--){var state=stackList[i];if(state.pageId==pageId){if(i===historyLength-1){removeLastHistoryIfFaked();historyGo(-1);}else{var delta=i-historyLength;(function(delta){removeLastHistoryIfFaked();historyGo(delta);ensureLockDoAtFront(function(){var historyLength=stackList.length;var pageStartAddIndex=historyLength+delta+1;for(var j=pageStartAddIndex;j=0;i--){var state=stackList[i];if(state.pageId==pageId){return state.extra;}}}}PageStack.getPageExtra=getPageExtra;function setPageExtra(extra,pageId){checkInitCalled();removeLastHistoryIfFaked();ensureLockDo(function(){var stackList=PageStack.currentStack.stack;var historyLength=stackList.length;if(!pageId){stackList[historyLength-1].extra=extra;history.replaceState(PageStack.currentStack,null,'');}else{for(var i=historyLength-1;i>=0;i--){var state=stackList[i];if(state.pageId==pageId){state.extra=extra;history.replaceState(PageStack.currentStack,null,'');break;}}}ensureLastHistoryFakedImpl();});}PageStack.setPageExtra=setPageExtra;function ensureLockDo(func){checkInitCalled();if(!historyLocking&&!windowLoadLocking){func();return;}pendingFuncLock.push(func);_queryLockDo();}function ensureLockDoAtFront(func){var runNowIfNotLock=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;checkInitCalled();if(!historyLocking&&!windowLoadLocking&&runNowIfNotLock){func();return;}pendingFuncLock.splice(0,0,func);_queryLockDo();}var execLockedTimeoutId=void 0;function _queryLockDo(){if(execLockedTimeoutId)clearTimeout(execLockedTimeoutId);function execLockedFunctions(){if(historyLocking||windowLoadLocking){clearTimeout(execLockedTimeoutId);execLockedTimeoutId=setTimeout(execLockedFunctions,0);}else{var f=void 0;while(f=pendingFuncLock.shift()){f();if(historyLocking||windowLoadLocking){clearTimeout(execLockedTimeoutId);execLockedTimeoutId=setTimeout(execLockedFunctions,0);break;}}}}execLockedTimeoutId=setTimeout(execLockedFunctions,0);}function preClosePageHasIFrame(historyLengthWhenInitIFrame){history.pushState({isFake:true},null,null);iFrameHistoryLengthAsFake=history.length-historyLengthWhenInitIFrame;}PageStack.preClosePageHasIFrame=preClosePageHasIFrame;function removeLastHistoryIfFaked(){ensureLockDo(removeLastHistoryIfFakedImpl);}function removeLastHistoryIfFakedImpl(){if(history.state&&history.state.isFake){if(PageStack.DEBUG)console.log('remove Fake History');history.replaceState(null,null,'');historyGo(-1-iFrameHistoryLengthAsFake,false);iFrameHistoryLengthAsFake=0;}}function ensureLastHistoryFaked(){ensureLockDo(ensureLastHistoryFakedImpl);}function ensureLastHistoryFakedImpl(){if(!history.state.isFake){if(PageStack.DEBUG)console.log('append Fake History');history.pushState({isFake:true,isRoot:PageStack.currentStack.isRoot,stack:PageStack.currentStack.stack},null,'');}}})(PageStack||(PageStack={}));var android;(function(android){var app;(function(app){var Bundle=android.os.Bundle;var Intent=android.content.Intent;var View=android.view.View;var ActivityThread=function(){function ActivityThread(androidUI){_classCallCheck(this,ActivityThread);this.mLaunchedActivities=new Set();this.androidUI=androidUI;}_createClass(ActivityThread,[{key:'initWithPageStack',value:function initWithPageStack(){var _this69=this;var backKeyDownEvent=android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_DOWN,android.view.KeyEvent.KEYCODE_BACK);var backKeyUpEvent=android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_UP,android.view.KeyEvent.KEYCODE_BACK);PageStack.backListener=function(){var handleDown=_this69.androidUI._viewRootImpl.dispatchInputEvent(backKeyDownEvent);var handleUp=_this69.androidUI._viewRootImpl.dispatchInputEvent(backKeyUpEvent);return handleDown||handleUp;};PageStack.pageOpenHandler=function(pageId,pageExtra,isRestore){var intent=new Intent(pageId);if(pageExtra)intent.mExtras=new Bundle(pageExtra.mExtras);if(isRestore)_this69.overrideNextWindowAnimation(null,null,null,null);var activity=_this69.handleLaunchActivity(intent);return activity&&!activity.mFinished;};PageStack.pageCloseHandler=function(pageId,pageExtra){if(_this69.mLaunchedActivities.size===1){var rootActivity=Array.from(_this69.mLaunchedActivities)[0];if(pageId==null||rootActivity.getIntent().activityName==pageId){_this69.handleDestroyActivity(rootActivity,true);return true;}return false;}var _iteratorNormalCompletion50=true;var _didIteratorError50=false;var _iteratorError50=undefined;try{for(var _iterator50=Array.from(_this69.mLaunchedActivities).reverse()[Symbol.iterator](),_step50;!(_iteratorNormalCompletion50=(_step50=_iterator50.next()).done);_iteratorNormalCompletion50=true){var activity=_step50.value;var intent=activity.getIntent();if(intent.activityName==pageId){_this69.handleDestroyActivity(activity,true);return true;}}}catch(err){_didIteratorError50=true;_iteratorError50=err;}finally{try{if(!_iteratorNormalCompletion50&&_iterator50.return){_iterator50.return();}}finally{if(_didIteratorError50){throw _iteratorError50;}}}};PageStack.init();}},{key:'overrideNextWindowAnimation',value:function overrideNextWindowAnimation(enterAnimation,exitAnimation,resumeAnimation,hideAnimation){this.overrideEnterAnimation=enterAnimation;this.overrideExitAnimation=exitAnimation;this.overrideResumeAnimation=resumeAnimation;this.overrideHideAnimation=hideAnimation;}},{key:'getOverrideEnterAnimation',value:function getOverrideEnterAnimation(){return this.overrideEnterAnimation;}},{key:'getOverrideExitAnimation',value:function getOverrideExitAnimation(){return this.overrideExitAnimation;}},{key:'getOverrideResumeAnimation',value:function getOverrideResumeAnimation(){return this.overrideResumeAnimation;}},{key:'getOverrideHideAnimation',value:function getOverrideHideAnimation(){return this.overrideHideAnimation;}},{key:'scheduleApplicationHide',value:function scheduleApplicationHide(){var _this70=this;if(this.scheduleApplicationHideTimeout)clearTimeout(this.scheduleApplicationHideTimeout);this.scheduleApplicationHideTimeout=setTimeout(function(){var visibleActivities=_this70.getVisibleToUserActivities();if(visibleActivities.length==0)return;_this70.handlePauseActivity(visibleActivities[visibleActivities.length-1]);var _iteratorNormalCompletion51=true;var _didIteratorError51=false;var _iteratorError51=undefined;try{for(var _iterator51=visibleActivities[Symbol.iterator](),_step51;!(_iteratorNormalCompletion51=(_step51=_iterator51.next()).done);_iteratorNormalCompletion51=true){var visibleActivity=_step51.value;_this70.handleStopActivity(visibleActivity,true);}}catch(err){_didIteratorError51=true;_iteratorError51=err;}finally{try{if(!_iteratorNormalCompletion51&&_iterator51.return){_iterator51.return();}}finally{if(_didIteratorError51){throw _iteratorError51;}}}},0);}},{key:'scheduleApplicationShow',value:function scheduleApplicationShow(){this.scheduleActivityResume();}},{key:'execStartActivity',value:function execStartActivity(callActivity,intent,options){if((intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_TOP)!=0){if(this.scheduleBackTo(intent))return;}this.scheduleLaunchActivity(callActivity,intent,options);}},{key:'scheduleActivityResume',value:function scheduleActivityResume(){var _this71=this;if(this.activityResumeTimeout)clearTimeout(this.activityResumeTimeout);this.activityResumeTimeout=setTimeout(function(){var visibleActivities=_this71.getVisibleToUserActivities();if(visibleActivities.length==0)return;var _iteratorNormalCompletion52=true;var _didIteratorError52=false;var _iteratorError52=undefined;try{for(var _iterator52=visibleActivities[Symbol.iterator](),_step52;!(_iteratorNormalCompletion52=(_step52=_iterator52.next()).done);_iteratorNormalCompletion52=true){var _visibleActivity=_step52.value;_visibleActivity.performRestart();}}catch(err){_didIteratorError52=true;_iteratorError52=err;}finally{try{if(!_iteratorNormalCompletion52&&_iterator52.return){_iterator52.return();}}finally{if(_didIteratorError52){throw _iteratorError52;}}}var activity=visibleActivities.pop();_this71.handleResumeActivity(activity,false);if(activity.getWindow().isFloating()){var _iteratorNormalCompletion53=true;var _didIteratorError53=false;var _iteratorError53=undefined;try{for(var _iterator53=visibleActivities.reverse()[Symbol.iterator](),_step53;!(_iteratorNormalCompletion53=(_step53=_iterator53.next()).done);_iteratorNormalCompletion53=true){var visibleActivity=_step53.value;if(visibleActivity.mVisibleFromClient){visibleActivity.makeVisible();if(!visibleActivity.getWindow().isFloating()){break;}}}}catch(err){_didIteratorError53=true;_iteratorError53=err;}finally{try{if(!_iteratorNormalCompletion53&&_iterator53.return){_iterator53.return();}}finally{if(_didIteratorError53){throw _iteratorError53;}}}}},0);}},{key:'scheduleLaunchActivity',value:function scheduleLaunchActivity(callActivity,intent,options){var activity=this.handleLaunchActivity(intent);activity.mCallActivity=callActivity;if(activity&&!activity.mFinished){PageStack.notifyNewPageOpened(intent.activityName,intent);}}},{key:'scheduleDestroyActivityByRequestCode',value:function scheduleDestroyActivityByRequestCode(requestCode){var _iteratorNormalCompletion54=true;var _didIteratorError54=false;var _iteratorError54=undefined;try{for(var _iterator54=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step54;!(_iteratorNormalCompletion54=(_step54=_iterator54.next()).done);_iteratorNormalCompletion54=true){var activity=_step54.value;if(activity.getIntent()&&requestCode==activity.getIntent().mRequestCode){this.scheduleDestroyActivity(activity);}}}catch(err){_didIteratorError54=true;_iteratorError54=err;}finally{try{if(!_iteratorNormalCompletion54&&_iterator54.return){_iterator54.return();}}finally{if(_didIteratorError54){throw _iteratorError54;}}}}},{key:'scheduleDestroyActivity',value:function scheduleDestroyActivity(activity){var _this72=this;var finishing=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;setTimeout(function(){var isCreateSuc=_this72.mLaunchedActivities.has(activity);if(activity.mCallActivity&&activity.getIntent()&&activity.getIntent().mRequestCode>=0){activity.mCallActivity.dispatchActivityResult(null,activity.getIntent().mRequestCode,activity.mResultCode,activity.mResultData);}_this72.handleDestroyActivity(activity,finishing);if(!isCreateSuc)return;if(_this72.mLaunchedActivities.size==0){if(history.length<=2){_this72.androidUI.showAppClosed();}else{PageStack.back(true);}}else if(activity.getIntent()){PageStack.notifyPageClosed(activity.getIntent().activityName);}},0);}},{key:'scheduleBackTo',value:function scheduleBackTo(intent){var destroyList=[];var findActivity=false;var _iteratorNormalCompletion55=true;var _didIteratorError55=false;var _iteratorError55=undefined;try{for(var _iterator55=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step55;!(_iteratorNormalCompletion55=(_step55=_iterator55.next()).done);_iteratorNormalCompletion55=true){var _activity=_step55.value;if(_activity.getIntent()&&_activity.getIntent().activityName==intent.activityName){findActivity=true;break;}destroyList.push(_activity);}}catch(err){_didIteratorError55=true;_iteratorError55=err;}finally{try{if(!_iteratorNormalCompletion55&&_iterator55.return){_iterator55.return();}}finally{if(_didIteratorError55){throw _iteratorError55;}}}if(findActivity){var _iteratorNormalCompletion56=true;var _didIteratorError56=false;var _iteratorError56=undefined;try{for(var _iterator56=destroyList[Symbol.iterator](),_step56;!(_iteratorNormalCompletion56=(_step56=_iterator56.next()).done);_iteratorNormalCompletion56=true){var activity=_step56.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError56=true;_iteratorError56=err;}finally{try{if(!_iteratorNormalCompletion56&&_iterator56.return){_iterator56.return();}}finally{if(_didIteratorError56){throw _iteratorError56;}}}return true;}return false;}},{key:'canBackTo',value:function canBackTo(intent){var _iteratorNormalCompletion57=true;var _didIteratorError57=false;var _iteratorError57=undefined;try{for(var _iterator57=this.mLaunchedActivities[Symbol.iterator](),_step57;!(_iteratorNormalCompletion57=(_step57=_iterator57.next()).done);_iteratorNormalCompletion57=true){var activity=_step57.value;if(activity.getIntent().activityName==intent.activityName){return true;}}}catch(err){_didIteratorError57=true;_iteratorError57=err;}finally{try{if(!_iteratorNormalCompletion57&&_iterator57.return){_iterator57.return();}}finally{if(_didIteratorError57){throw _iteratorError57;}}}return false;}},{key:'scheduleBackToRoot',value:function scheduleBackToRoot(){var destroyList=Array.from(this.mLaunchedActivities).reverse();destroyList.shift();var _iteratorNormalCompletion58=true;var _didIteratorError58=false;var _iteratorError58=undefined;try{for(var _iterator58=destroyList[Symbol.iterator](),_step58;!(_iteratorNormalCompletion58=(_step58=_iterator58.next()).done);_iteratorNormalCompletion58=true){var activity=_step58.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError58=true;_iteratorError58=err;}finally{try{if(!_iteratorNormalCompletion58&&_iterator58.return){_iterator58.return();}}finally{if(_didIteratorError58){throw _iteratorError58;}}}}},{key:'handlePauseActivity',value:function handlePauseActivity(activity){this.performPauseActivity(activity);}},{key:'performPauseActivity',value:function performPauseActivity(activity){activity.performPause();}},{key:'handleStopActivity',value:function handleStopActivity(activity){var show=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;this.performStopActivity(activity,true);this.updateVisibility(activity,show);}},{key:'performStopActivity',value:function performStopActivity(activity,saveState){if(!activity.mFinished&&saveState){var state=new Bundle();activity.performSaveInstanceState(state);}activity.performStop();}},{key:'handleResumeActivity',value:function handleResumeActivity(a,launching){this.performResumeActivity(a,launching);var willBeVisible=!a.mStartedActivity&&!a.mFinished;if(willBeVisible&&a.mVisibleFromClient){a.makeVisible();this.overrideEnterAnimation=undefined;this.overrideExitAnimation=undefined;this.overrideResumeAnimation=undefined;this.overrideHideAnimation=undefined;}}},{key:'performResumeActivity',value:function performResumeActivity(a,launching){if(!launching){a.mStartedActivity=false;}a.performResume();}},{key:'handleLaunchActivity',value:function handleLaunchActivity(intent){var visibleActivities=this.getVisibleToUserActivities();var a=this.performLaunchActivity(intent);if(a){this.handleResumeActivity(a,true);if(!a.mFinished&&visibleActivities.length>0){this.handlePauseActivity(visibleActivities[visibleActivities.length-1]);if(!a.getWindow().getAttributes().isFloating()){var _iteratorNormalCompletion59=true;var _didIteratorError59=false;var _iteratorError59=undefined;try{for(var _iterator59=visibleActivities[Symbol.iterator](),_step59;!(_iteratorNormalCompletion59=(_step59=_iterator59.next()).done);_iteratorNormalCompletion59=true){var visibleActivity=_step59.value;this.handleStopActivity(visibleActivity);}}catch(err){_didIteratorError59=true;_iteratorError59=err;}finally{try{if(!_iteratorNormalCompletion59&&_iterator59.return){_iterator59.return();}}finally{if(_didIteratorError59){throw _iteratorError59;}}}}}}return a;}},{key:'performLaunchActivity',value:function performLaunchActivity(intent){var activity=void 0;var clazz=intent.activityName;try{if(typeof clazz==='string')clazz=eval(clazz);}catch(e){}if(typeof clazz==='function')activity=new clazz(this.androidUI);if(activity instanceof app.Activity){try{var savedInstanceState=null;activity.mIntent=intent;activity.mStartedActivity=false;activity.mCalled=false;activity.performCreate(savedInstanceState);if(!activity.mCalled){throw new Error("Activity "+intent.activityName+" did not call through to super.onCreate()");}if(!activity.mFinished){activity.performStart();activity.performRestoreInstanceState(savedInstanceState);activity.mCalled=false;activity.onPostCreate(savedInstanceState);if(!activity.mCalled){throw new Error("Activity "+intent.activityName+" did not call through to super.onPostCreate()");}}}catch(e){console.error(e);return null;}if(!activity.mFinished){this.mLaunchedActivities.add(activity);}return activity;}return null;}},{key:'handleDestroyActivity',value:function handleDestroyActivity(activity,finishing){var visibleActivities=this.getVisibleToUserActivities();var isTopVisibleActivity=activity==visibleActivities[visibleActivities.length-1];var isRootActivity=this.isRootActivity(activity);this.performDestroyActivity(activity,finishing);if(isRootActivity)activity.getWindow().setWindowAnimations(null,null);this.androidUI.windowManager.removeWindow(activity.getWindow());if(isTopVisibleActivity&&!isRootActivity){this.scheduleActivityResume();}}},{key:'performDestroyActivity',value:function performDestroyActivity(activity,finishing){if(finishing){activity.mFinished=true;}activity.performPause();activity.performStop();activity.mCalled=false;activity.performDestroy();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onDestroy()");}this.mLaunchedActivities.delete(activity);}},{key:'updateVisibility',value:function updateVisibility(activity,show){if(show){if(activity.mVisibleFromClient){activity.makeVisible();}}else{activity.getWindow().getDecorView().setVisibility(View.INVISIBLE);}}},{key:'getVisibleToUserActivities',value:function getVisibleToUserActivities(){var list=[];var _iteratorNormalCompletion60=true;var _didIteratorError60=false;var _iteratorError60=undefined;try{for(var _iterator60=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step60;!(_iteratorNormalCompletion60=(_step60=_iterator60.next()).done);_iteratorNormalCompletion60=true){var activity=_step60.value;list.push(activity);if(!activity.getWindow().getAttributes().isFloating())break;}}catch(err){_didIteratorError60=true;_iteratorError60=err;}finally{try{if(!_iteratorNormalCompletion60&&_iterator60.return){_iterator60.return();}}finally{if(_didIteratorError60){throw _iteratorError60;}}}list.reverse();return list;}},{key:'isRootActivity',value:function isRootActivity(activity){return this.mLaunchedActivities.values().next().value==activity;}}],[{key:'getActivityName',value:function getActivityName(activity){if(activity.getIntent())return activity.getIntent().activityName;return activity.constructor.name;}}]);return ActivityThread;}();app.ActivityThread=ActivityThread;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var R;(function(R){var string_=function(){function string_(){_classCallCheck(this,string_);}_createClass(string_,null,[{key:'zh',value:function zh(){this.ok='确定';this.cancel='取消';this.close='关闭';this.back='返回';this.crash_catch_alert='程序发生错误, 即将重载网页:';this.prll_header_state_normal='下拉以刷新';this.prll_header_state_ready='松开马上刷新';this.prll_header_state_loading='正在刷新...';this.prll_header_state_fail='刷新失败';this.prll_footer_state_normal='点击加载更多';this.prll_footer_state_loading='正在加载...';this.prll_footer_state_ready='松开加载更多';this.prll_footer_state_no_more='加载完毕';this.prll_footer_state_fail='加载失败,点击重试';}}]);return string_;}();string_.ok='OK';string_.cancel='Cancel';string_.close='Close';string_.back='Back';string_.crash_catch_alert='Some error happen, will refresh page:';string_.prll_header_state_normal='Pull to refresh';string_.prll_header_state_ready='Release to refresh';string_.prll_header_state_loading='Loading';string_.prll_header_state_fail='Refresh fail';string_.prll_footer_state_normal='Load more';string_.prll_footer_state_loading='Loading';string_.prll_footer_state_ready='Pull to load more';string_.prll_footer_state_fail='Click to reload';string_.prll_footer_state_no_more='Load Finish';R.string_=string_;var lang=navigator.language.split('-')[0].toLowerCase();if(typeof string_[lang]==='function')string_[lang].call(string_);})(R=android.R||(android.R={}));})(android||(android={}));var androidui;(function(androidui){if(typeof HTMLDivElement!=='function'){var _HTMLDivElement=function _HTMLDivElement(){};_HTMLDivElement.prototype=HTMLDivElement.prototype;HTMLDivElement=_HTMLDivElement;}var AndroidUIElement=function(_HTMLDivElement2){_inherits(AndroidUIElement,_HTMLDivElement2);function AndroidUIElement(){_classCallCheck(this,AndroidUIElement);return _possibleConstructorReturn(this,(AndroidUIElement.__proto__||Object.getPrototypeOf(AndroidUIElement)).apply(this,arguments));}_createClass(AndroidUIElement,[{key:'createdCallback',value:function createdCallback(){var _this74=this;$domReady(function(){return initElement(_this74);});}},{key:'attachedCallback',value:function attachedCallback(){}},{key:'detachedCallback',value:function detachedCallback(){}},{key:'attributeChangedCallback',value:function attributeChangedCallback(attributeName,oldVal,newVal){if(attributeName==='debug'&&newVal!=null&&newVal!='false'&&newVal!='0'){this.AndroidUI.setDebugEnable();}}}]);return AndroidUIElement;}(HTMLDivElement);androidui.AndroidUIElement=AndroidUIElement;function runFunction(func){if(typeof window[func]==="function"){window[func]();}else{try{eval(func);}catch(e){console.warn(e);}}}function $domReady(func){if(/^loaded|^complete|^interactive/.test(document.readyState)){setTimeout(func,0);}else{document.addEventListener('DOMContentLoaded',func);}}function initElement(ele){ele.AndroidUI=new androidui.AndroidUI(ele);var debugAttr=ele.getAttribute('debug');if(debugAttr!=null&&debugAttr!='0'&&debugAttr!='false')ele.AndroidUI.setDebugEnable();var onClose=ele.getAttribute('onclose');if(onClose){ele.AndroidUI.setUIClient({shouldShowAppClosed:function shouldShowAppClosed(androidUI){if(!onClose)return;runFunction(onClose);}});}var onLoad=ele.getAttribute('onload');if(onLoad){runFunction(onLoad);}}if(typeof document['registerElement']==="function"){document.registerElement("android-ui",AndroidUIElement);}else{$domReady(function(){var eles=document.getElementsByTagName('android-ui');var _iteratorNormalCompletion61=true;var _didIteratorError61=false;var _iteratorError61=undefined;try{for(var _iterator61=Array.from(eles)[Symbol.iterator](),_step61;!(_iteratorNormalCompletion61=(_step61=_iterator61.next()).done);_iteratorNormalCompletion61=true){var ele=_step61.value;initElement(ele);}}catch(err){_didIteratorError61=true;_iteratorError61=err;}finally{try{if(!_iteratorNormalCompletion61&&_iterator61.return){_iterator61.return();}}finally{if(_didIteratorError61){throw _iteratorError61;}}}});}var styleElement=document.createElement('style');styleElement.innerHTML+='\n android-ui {\n position : relative;\n overflow : hidden;\n display : block;\n outline: none;\n }\n android-ui * {\n overflow : hidden;\n border : none;\n outline: none;\n pointer-events: auto;\n }\n android-ui resources {\n display: none;\n }\n android-ui Button {\n border: none;\n background: none;\n }\n android-ui windowsgroup {\n pointer-events: none;\n }\n android-ui > canvas {\n position: absolute;\n left: 0;\n top: 0;\n }\n ';document.head.appendChild(styleElement);})(androidui||(androidui={}));var androidui;(function(androidui){var MotionEvent=android.view.MotionEvent;var KeyEvent=android.view.KeyEvent;var Intent=android.content.Intent;var ActivityThread=android.app.ActivityThread;var ViewRootImpl=android.view.ViewRootImpl;var AndroidUI=function(){function AndroidUI(androidUIElement){_classCallCheck(this,AndroidUI);this._canvas=document.createElement("canvas");this.viewsDependOnDebugLayout=new Set();this.showDebugLayoutDefault=false;this._windowBound=new android.graphics.Rect();this.tempRect=new android.graphics.Rect();this.touchEvent=new MotionEvent();this.ketEvent=new KeyEvent();this.androidUIElement=androidUIElement;if(androidUIElement[AndroidUI.BindToElementName]){throw Error('already init a AndroidUI with this element');}androidUIElement[AndroidUI.BindToElementName]=this;this.init();}_createClass(AndroidUI,[{key:'init',value:function init(){this.appName=document.title;this._viewRootImpl=new android.view.ViewRootImpl();this.initAndroidUIElement();this.initApplication();this.androidUIElement.appendChild(this._canvas);this.initEvent();this.initRootSizeChange();this._viewRootImpl.setView(this.windowManager.getWindowsLayout());this._viewRootImpl.initSurface(this._canvas);this.initBrowserVisibleChange();this.initLaunchActivity();this.initGlobalCrashHandle();}},{key:'initApplication',value:function initApplication(){var appName=this.androidUIElement.getAttribute('appName');var appClazz=void 0;if(appName){try{appClazz=eval(appName);}catch(e){}}appClazz=appClazz||android.app.Application;this.mApplication=new appClazz(this);this.mApplication.onCreate();}},{key:'initLaunchActivity',value:function initLaunchActivity(){this.mActivityThread=new ActivityThread(this);var _iteratorNormalCompletion62=true;var _didIteratorError62=false;var _iteratorError62=undefined;try{for(var _iterator62=Array.from(this.androidUIElement.children)[Symbol.iterator](),_step62;!(_iteratorNormalCompletion62=(_step62=_iterator62.next()).done);_iteratorNormalCompletion62=true){var ele=_step62.value;var tagName=ele.tagName;if(tagName!='ACTIVITY')continue;var activityName=ele.getAttribute('name')||ele.getAttribute('android:name')||'android.app.Activity';var intent=new Intent(activityName);this.mActivityThread.overrideNextWindowAnimation(null,null,null,null);var activity=this.mActivityThread.handleLaunchActivity(intent);if(activity){this.androidUIElement.removeChild(ele);var _iteratorNormalCompletion63=true;var _didIteratorError63=false;var _iteratorError63=undefined;try{for(var _iterator63=Array.from(ele.children)[Symbol.iterator](),_step63;!(_iteratorNormalCompletion63=(_step63=_iterator63.next()).done);_iteratorNormalCompletion63=true){var element=_step63.value;android.view.LayoutInflater.from(activity).inflate(element,activity.getWindow().mContentParent,true);}}catch(err){_didIteratorError63=true;_iteratorError63=err;}finally{try{if(!_iteratorNormalCompletion63&&_iterator63.return){_iterator63.return();}}finally{if(_didIteratorError63){throw _iteratorError63;}}}var onCreateFunc=ele.getAttribute('oncreate');if(onCreateFunc&&typeof window[onCreateFunc]==="function"){window[onCreateFunc].call(this,activity);}}}}catch(err){_didIteratorError62=true;_iteratorError62=err;}finally{try{if(!_iteratorNormalCompletion62&&_iterator62.return){_iterator62.return();}}finally{if(_didIteratorError62){throw _iteratorError62;}}}this.mActivityThread.initWithPageStack();}},{key:'initGlobalCrashHandle',value:function initGlobalCrashHandle(){window.onerror=function(sMsg,sUrl,sLine){if(window.confirm(android.R.string_.crash_catch_alert+'\n'+sMsg)){window.location.reload();}};}},{key:'refreshWindowBound',value:function refreshWindowBound(){var boundLeft=this.androidUIElement.offsetLeft;var boundTop=this.androidUIElement.offsetTop;var parent=this.androidUIElement.parentElement;if(parent){boundLeft+=parent.offsetLeft;boundTop+=parent.offsetTop;parent=parent.parentElement;}var boundRight=boundLeft+this.androidUIElement.offsetWidth;var boundBottom=boundTop+this.androidUIElement.offsetHeight;if(this._windowBound&&this._windowBound.left==boundLeft&&this._windowBound.top==boundTop&&this._windowBound.right==boundRight&&this._windowBound.bottom==boundBottom){return false;}this._windowBound.set(boundLeft,boundTop,boundRight,boundBottom);return true;}},{key:'initAndroidUIElement',value:function initAndroidUIElement(){var _this75=this;if(this.androidUIElement.style.display==='none'){this.androidUIElement.style.display='';}this.androidUIElement.setAttribute('tabindex','0');this.androidUIElement.focus();this.androidUIElement.onblur=function(e){_this75._viewRootImpl.ensureTouchMode(true);};}},{key:'initEvent',value:function initEvent(){this.initTouchEvent();this.initMouseEvent();this.initKeyEvent();this.initGenericEvent();}},{key:'initTouchEvent',value:function initTouchEvent(){var _this76=this;this.androidUIElement.addEventListener('touchstart',function(e){_this76.refreshWindowBound();if(e.target!=document.activeElement||!_this76.androidUIElement.contains(document.activeElement)){_this76.androidUIElement.focus();}_this76.touchEvent.initWithTouch(e,MotionEvent.ACTION_DOWN,_this76._windowBound);if(_this76._viewRootImpl.dispatchInputEvent(_this76.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchmove',function(e){_this76.touchEvent.initWithTouch(e,MotionEvent.ACTION_MOVE,_this76._windowBound);if(_this76._viewRootImpl.dispatchInputEvent(_this76.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchend',function(e){_this76.touchEvent.initWithTouch(e,MotionEvent.ACTION_UP,_this76._windowBound);if(_this76._viewRootImpl.dispatchInputEvent(_this76.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchcancel',function(e){_this76.touchEvent.initWithTouch(e,MotionEvent.ACTION_CANCEL,_this76._windowBound);if(_this76._viewRootImpl.dispatchInputEvent(_this76.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initMouseEvent',value:function initMouseEvent(){var _this77=this;function mouseToTouchEvent(e){var touch={identifier:0,target:null,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY,pageX:e.pageX,pageY:e.pageY};return{changedTouches:[touch],targetTouches:[touch],touches:e.type==='mouseup'?[]:[touch],timeStamp:e.timeStamp};}var isMouseDown=false;this.androidUIElement.addEventListener('mousedown',function(e){isMouseDown=true;_this77.refreshWindowBound();if(e.target!=document.activeElement||!_this77.androidUIElement.contains(document.activeElement)){_this77.androidUIElement.focus();}_this77.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_DOWN,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mousemove',function(e){if(!isMouseDown)return;_this77.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_MOVE,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseup',function(e){isMouseDown=false;_this77.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_UP,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseleave',function(e){if(e.fromElement===_this77.androidUIElement){isMouseDown=false;_this77.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_CANCEL,_this77._windowBound);if(_this77._viewRootImpl.dispatchInputEvent(_this77.touchEvent)){e.stopPropagation();e.preventDefault();return true;}}},true);var scrollEvent=new MotionEvent();this.androidUIElement.addEventListener('mousewheel',function(e){scrollEvent.initWithMouseWheel(e);if(_this77._viewRootImpl.dispatchInputEvent(scrollEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initKeyEvent',value:function initKeyEvent(){var _this78=this;this.androidUIElement.addEventListener('keydown',function(e){_this78.ketEvent.initKeyEvent(e,KeyEvent.ACTION_DOWN);if(_this78._viewRootImpl.dispatchInputEvent(_this78.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('keyup',function(e){_this78.ketEvent.initKeyEvent(e,KeyEvent.ACTION_UP);if(_this78._viewRootImpl.dispatchInputEvent(_this78.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initGenericEvent',value:function initGenericEvent(){}},{key:'initRootSizeChange',value:function initRootSizeChange(){var inner_this=this;window.addEventListener('resize',function(){inner_this.notifyRootSizeChange();});var lastWidth=this.androidUIElement.offsetWidth;var lastHeight=this.androidUIElement.offsetHeight;if(lastWidth>0&&lastHeight>0)this.notifyRootSizeChange();setInterval(function(){var width=inner_this.androidUIElement.offsetWidth;var height=inner_this.androidUIElement.offsetHeight;if(lastHeight!==height||lastWidth!==width){lastWidth=width;lastHeight=height;inner_this.notifyRootSizeChange();}},500);}},{key:'initBrowserVisibleChange',value:function initBrowserVisibleChange(){var _this79=this;var eventName='visibilitychange';if(document['webkitHidden']!=undefined){eventName='webkitvisibilitychange';}document.addEventListener(eventName,function(){if(document['hidden']||document['webkitHidden']){_this79.mActivityThread.scheduleApplicationHide();}else{_this79.mActivityThread.scheduleApplicationShow();_this79._viewRootImpl.invalidate();}},false);}},{key:'notifyRootSizeChange',value:function notifyRootSizeChange(){if(this.refreshWindowBound()){var density=android.content.res.Resources.getDisplayMetrics().density;this.tempRect.set(this._windowBound.left*density,this._windowBound.top*density,this._windowBound.right*density,this._windowBound.bottom*density);var width=this._windowBound.width();var height=this._windowBound.height();this._canvas.width=width*density;this._canvas.height=height*density;this._canvas.style.width=width+"px";this._canvas.style.height=height+"px";this._viewRootImpl.notifyResized(this.tempRect);}}},{key:'viewAttachedDependOnDebugLayout',value:function viewAttachedDependOnDebugLayout(view){this.viewsDependOnDebugLayout.add(view);this.showDebugLayout();}},{key:'viewDetachedDependOnDebugLayout',value:function viewDetachedDependOnDebugLayout(view){this.viewsDependOnDebugLayout.delete(view);if(this.viewsDependOnDebugLayout.size==0&&!this.showDebugLayoutDefault){this.hideDebugLayout();}}},{key:'setDebugEnable',value:function setDebugEnable(){var enable=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;ViewRootImpl.DEBUG_FPS=enable;this.setShowDebugLayout(enable);}},{key:'setShowDebugLayout',value:function setShowDebugLayout(){var showDebugLayoutDefault=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;this.showDebugLayoutDefault=showDebugLayoutDefault;if(showDebugLayoutDefault){this.showDebugLayout();}else{this.hideDebugLayout();}}},{key:'showDebugLayout',value:function showDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===null){this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'hideDebugLayout',value:function hideDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===this.androidUIElement){this.androidUIElement.removeChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'setUIClient',value:function setUIClient(uiClient){this.uiClient=uiClient;}},{key:'showAppClosed',value:function showAppClosed(){AndroidUI.showAppClosed(this);}},{key:'windowManager',get:function get(){return this.mApplication.getWindowManager();}},{key:'windowBound',get:function get(){return this._windowBound;}}],[{key:'showAppClosed',value:function showAppClosed(androidUI){androidUI.androidUIElement.parentNode.removeChild(androidUI.androidUIElement);if(androidUI.uiClient&&androidUI.uiClient.shouldShowAppClosed){androidUI.uiClient.shouldShowAppClosed(androidUI);}}}]);return AndroidUI;}();AndroidUI.BindToElementName='AndroidUI';androidui.AndroidUI=AndroidUI;})(androidui||(androidui={}));var android;(function(android){var app;(function(app){var View=android.view.View;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var Window=android.view.Window;var WindowManager=android.view.WindowManager;var Log=android.util.Log;var Context=android.content.Context;var Intent=android.content.Intent;var Activity=function(_Context){_inherits(Activity,_Context);function Activity(androidUI){_classCallCheck(this,Activity);var _this80=_possibleConstructorReturn(this,(Activity.__proto__||Object.getPrototypeOf(Activity)).call(this,androidUI));_this80.mWindowAdded=false;_this80.mVisibleFromClient=true;_this80.mResultCode=Activity.RESULT_CANCELED;_this80.mResultData=null;_this80.mWindow=new Window(_this80);_this80.mWindow.setWindowAnimations(android.R.anim.activity_open_enter_ios,android.R.anim.activity_close_exit_ios,android.R.anim.activity_close_enter_ios,android.R.anim.activity_open_exit_ios);_this80.mWindow.setDimAmount(0.7);_this80.mWindow.getAttributes().flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;_this80.mWindow.setCallback(_this80);return _this80;}_createClass(Activity,[{key:'getIntent',value:function getIntent(){return this.mIntent;}},{key:'setIntent',value:function setIntent(newIntent){this.mIntent=newIntent;}},{key:'getApplication',value:function getApplication(){return this.getApplicationContext();}},{key:'getWindowManager',value:function getWindowManager(){return this.mWindow.getChildWindowManager();}},{key:'getGlobalWindowManager',value:function getGlobalWindowManager(){return this.getApplicationContext().getWindowManager();}},{key:'getWindow',value:function getWindow(){return this.mWindow;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mWindow!=null?this.mWindow.getCurrentFocus():null;}},{key:'onCreate',value:function onCreate(savedInstanceState){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onCreate "+this+": "+savedInstanceState);this.getApplication().dispatchActivityCreated(this,savedInstanceState);this.mCalled=true;}},{key:'performRestoreInstanceState',value:function performRestoreInstanceState(savedInstanceState){this.onRestoreInstanceState(savedInstanceState);}},{key:'onRestoreInstanceState',value:function onRestoreInstanceState(savedInstanceState){}},{key:'onPostCreate',value:function onPostCreate(savedInstanceState){this.onTitleChanged(this.getTitle());this.mCalled=true;}},{key:'onStart',value:function onStart(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onStart "+this);this.mCalled=true;this.getApplication().dispatchActivityStarted(this);}},{key:'onRestart',value:function onRestart(){this.mCalled=true;}},{key:'onResume',value:function onResume(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onResume "+this);this.getApplication().dispatchActivityResumed(this);this.mCalled=true;}},{key:'onPostResume',value:function onPostResume(){var win=this.getWindow();if(win!=null)win.makeActive();this.mCalled=true;}},{key:'onNewIntent',value:function onNewIntent(intent){}},{key:'performSaveInstanceState',value:function performSaveInstanceState(outState){this.onSaveInstanceState(outState);if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onSaveInstanceState "+this+": "+outState);}},{key:'onSaveInstanceState',value:function onSaveInstanceState(outState){this.getApplication().dispatchActivitySaveInstanceState(this,outState);}},{key:'onPause',value:function onPause(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onPause "+this);this.getApplication().dispatchActivityPaused(this);this.mCalled=true;}},{key:'onUserLeaveHint',value:function onUserLeaveHint(){}},{key:'onStop',value:function onStop(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onStop "+this);this.getApplication().dispatchActivityStopped(this);this.mCalled=true;}},{key:'onDestroy',value:function onDestroy(){if(Activity.DEBUG_LIFECYCLE)Log.v(Activity.TAG,"onDestroy "+this);this.mCalled=true;this.getApplication().dispatchActivityDestroyed(this);}},{key:'findViewById',value:function findViewById(id){return this.getWindow().findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){if(!(view instanceof View)){view=this.getLayoutInflater().inflate(view);}this.getWindow().setContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){this.mWindow.addContentView(view,params);}},{key:'setFinishOnTouchOutside',value:function setFinishOnTouchOutside(finish){this.mWindow.setCloseOnTouchOutside(finish);}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK){event.startTracking();return true;}return false;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&event.isTracking()&&!event.isCanceled()){this.onBackPressed();return true;}return false;}},{key:'onBackPressed',value:function onBackPressed(){this.finish();}},{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mWindow.shouldCloseOnTouch(this,event)){this.finish();return true;}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onUserInteraction',value:function onUserInteraction(){}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){var decor=this.getWindow().getDecorView();if(decor!=null&&decor.getParent()!=null){this.getWindowManager().updateWindowLayout(this.getWindow(),params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'hasWindowFocus',value:function hasWindowFocus(){var w=this.getWindow();if(w!=null){var d=w.getDecorView();if(d!=null){return d.hasWindowFocus();}}return false;}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){this.onUserInteraction();var win=this.getWindow();if(win.superDispatchKeyEvent(event)){return true;}var decor=win.getDecorView();return event.dispatch(this,decor!=null?decor.getKeyDispatcherState():null,this);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(ev.getAction()==MotionEvent.ACTION_DOWN){this.onUserInteraction();}if(this.getWindow().superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){this.onUserInteraction();if(this.getWindow().superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}},{key:'takeKeyEvents',value:function takeKeyEvents(_get){this.getWindow().takeKeyEvents(_get);}},{key:'invalidateOptionsMenu',value:function invalidateOptionsMenu(){var _this81=this;var menu=new android.view.Menu(this);if(this.onCreateOptionsMenu(menu)){menu.setCallback({onMenuItemSelected:function onMenuItemSelected(menu,item){var handle=_this81.onOptionsItemSelected(item);_this81.onOptionsMenuClosed(menu);return handle;}});this.mMenu=menu;this.mMenuPopuoHelper=this.invalidateOptionsMenuPopupHelper(menu);}}},{key:'invalidateOptionsMenuPopupHelper',value:function invalidateOptionsMenuPopupHelper(menu){return null;}},{key:'onCreateOptionsMenu',value:function onCreateOptionsMenu(menu){return true;}},{key:'onPrepareOptionsMenu',value:function onPrepareOptionsMenu(menu){return true;}},{key:'onOptionsItemSelected',value:function onOptionsItemSelected(item){return false;}},{key:'onOptionsMenuClosed',value:function onOptionsMenuClosed(menu){}},{key:'openOptionsMenu',value:function openOptionsMenu(){if(this.mMenuPopuoHelper)this.mMenuPopuoHelper.show();}},{key:'closeOptionsMenu',value:function closeOptionsMenu(){if(this.mMenuPopuoHelper)this.mMenuPopuoHelper.dismiss();}},{key:'startActivityForResult',value:function startActivityForResult(intent,requestCode,options){if(typeof intent==='string')intent=new Intent(intent);if(requestCode>=0)intent.mRequestCode=requestCode;this.androidUI.mActivityThread.execStartActivity(this,intent,options);if(requestCode>=0){this.mStartedActivity=true;}var decor=this.mWindow!=null?this.mWindow.peekDecorView():null;if(decor!=null){decor.cancelPendingInputEvents();}}},{key:'startActivities',value:function startActivities(intents,options){var _iteratorNormalCompletion64=true;var _didIteratorError64=false;var _iteratorError64=undefined;try{for(var _iterator64=intents[Symbol.iterator](),_step64;!(_iteratorNormalCompletion64=(_step64=_iterator64.next()).done);_iteratorNormalCompletion64=true){var intent=_step64.value;this.startActivity(intent,options);}}catch(err){_didIteratorError64=true;_iteratorError64=err;}finally{try{if(!_iteratorNormalCompletion64&&_iterator64.return){_iterator64.return();}}finally{if(_didIteratorError64){throw _iteratorError64;}}}}},{key:'startActivity',value:function startActivity(intent,options){if(options!=null){this.startActivityForResult(intent,-1,options);}else{this.startActivityForResult(intent,-1);}}},{key:'startActivityIfNeeded',value:function startActivityIfNeeded(intent,requestCode,options){if(this.androidUI.mActivityThread.canBackTo(intent)){return false;}this.startActivityForResult(intent,requestCode,options);return true;}},{key:'overrideNextTransition',value:function overrideNextTransition(enterAnimation,exitAnimation,resumeAnimation,hideAnimation){this.androidUI.mActivityThread.overrideNextWindowAnimation(enterAnimation,exitAnimation,resumeAnimation,hideAnimation);}},{key:'setResult',value:function setResult(resultCode,data){{this.mResultCode=resultCode;this.mResultData=data;}}},{key:'getCallingActivity',value:function getCallingActivity(){return null;}},{key:'setVisible',value:function setVisible(visible){if(this.mVisibleFromClient!=visible){this.mVisibleFromClient=visible;}}},{key:'makeVisible',value:function makeVisible(){if(!this.mWindowAdded){var wm=this.getGlobalWindowManager();wm.addWindow(this.getWindow());this.mWindowAdded=true;}this.getWindow().getDecorView().setVisibility(View.VISIBLE);}},{key:'isFinishing',value:function isFinishing(){return this.mFinished;}},{key:'isDestroyed',value:function isDestroyed(){return this.mDestroyed;}},{key:'finish',value:function finish(){var resultCode=this.mResultCode;var resultData=this.mResultData;try{this.androidUI.mActivityThread.scheduleDestroyActivity(this);}catch(e){}}},{key:'finishActivity',value:function finishActivity(requestCode){this.androidUI.mActivityThread.scheduleDestroyActivityByRequestCode(requestCode);}},{key:'onActivityResult',value:function onActivityResult(requestCode,resultCode,data){}},{key:'setTitle',value:function setTitle(title){this.getWindow().setTitle(title);this.onTitleChanged(title);}},{key:'getTitle',value:function getTitle(){return this.getWindow().getAttributes().getTitle();}},{key:'onTitleChanged',value:function onTitleChanged(title,color){var win=this.getWindow();if(win!=null){win.setTitle(title);}}},{key:'runOnUiThread',value:function runOnUiThread(action){action.run();}},{key:'navigateUpTo',value:function navigateUpTo(upIntent){var upToRootIfNotFound=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(this.androidUI.mActivityThread.scheduleBackTo(upIntent)){return true;}if(upToRootIfNotFound)this.androidUI.mActivityThread.scheduleBackToRoot();return false;}},{key:'performCreate',value:function performCreate(icicle){this.onCreate(icicle);this.invalidateOptionsMenu();}},{key:'performStart',value:function performStart(){this.mCalled=false;this.onStart();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onStart()")');}}},{key:'performRestart',value:function performRestart(){if(this.mStopped){this.mStopped=false;this.mCalled=false;this.onRestart();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onRestart()")');}this.performStart();}}},{key:'performResume',value:function performResume(){this.performRestart();this.mCalled=false;this.mResumed=true;this.onResume();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onResume()")');}this.mCalled=false;this.onPostResume();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onPostResume()")');}}},{key:'performPause',value:function performPause(){if(this.mResumed){this.mCalled=false;this.onPause();this.mResumed=false;if(!this.mCalled){throw Error('new SuperNotCalledException("Activity '+this.constructor.name+' did not call through to super.onPause()")');}this.mResumed=false;}}},{key:'performUserLeaving',value:function performUserLeaving(){this.onUserInteraction();this.onUserLeaveHint();}},{key:'performStop',value:function performStop(){if(!this.mStopped){this.mCalled=false;this.onStop();if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " did not call through to super.onStop()")');}this.mStopped=true;}this.mResumed=false;}},{key:'performDestroy',value:function performDestroy(){this.mDestroyed=true;this.mWindow.destroy();this.onDestroy();}},{key:'isResumed',value:function isResumed(){return this.mResumed;}},{key:'dispatchActivityResult',value:function dispatchActivityResult(who,requestCode,resultCode,data){this.onActivityResult(requestCode,resultCode,data);}}]);return Activity;}(Context);Activity.TAG="Activity";Activity.DEBUG_LIFECYCLE=false;Activity.RESULT_CANCELED=0;Activity.RESULT_OK=-1;Activity.RESULT_FIRST_USER=1;app.Activity=Activity;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var app;(function(app){var ArrayList=java.util.ArrayList;var Context=android.content.Context;var Application=function(_Context2){_inherits(Application,_Context2);function Application(){_classCallCheck(this,Application);var _this82=_possibleConstructorReturn(this,(Application.__proto__||Object.getPrototypeOf(Application)).apply(this,arguments));_this82.mActivityLifecycleCallbacks=new ArrayList();return _this82;}_createClass(Application,[{key:'onCreate',value:function onCreate(){}},{key:'getWindowManager',value:function getWindowManager(){if(!this.mWindowManager)this.mWindowManager=new android.view.WindowManager(this);return this.mWindowManager;}},{key:'registerActivityLifecycleCallbacks',value:function registerActivityLifecycleCallbacks(callback){{this.mActivityLifecycleCallbacks.add(callback);}}},{key:'unregisterActivityLifecycleCallbacks',value:function unregisterActivityLifecycleCallbacks(callback){{this.mActivityLifecycleCallbacks.remove(callback);}}},{key:'dispatchActivityCreated',value:function dispatchActivityCreated(activity,savedInstanceState){var callbacks=this.collectActivityLifecycleCallbacks();if(callbacks!=null){for(var i=0;i0){callbacks=this.mActivityLifecycleCallbacks.toArray();}}return callbacks;}}]);return Application;}(Context);app.Application=Application;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Log=android.util.Log;var Pools=android.util.Pools;var VelocityTracker=function(){function VelocityTracker(){_classCallCheck(this,VelocityTracker);this.mLastTouchIndex=0;this.mGeneration=0;this.clear();}_createClass(VelocityTracker,[{key:'recycle',value:function recycle(){this.clear();VelocityTracker.sPool.release(this);}},{key:'setNextPoolable',value:function setNextPoolable(element){this.mNext=element;}},{key:'getNextPoolable',value:function getNextPoolable(){return this.mNext;}},{key:'clear',value:function clear(){VelocityTracker.releasePointerList(this.mPointerListHead);this.mPointerListHead=null;this.mLastTouchIndex=0;}},{key:'addMovement',value:function addMovement(ev){var historySize=ev.getHistorySize();var pointerCount=ev.getPointerCount();var lastTouchIndex=this.mLastTouchIndex;var nextTouchIndex=(lastTouchIndex+1)%VelocityTracker.NUM_PAST;var finalTouchIndex=(nextTouchIndex+historySize)%VelocityTracker.NUM_PAST;var generation=this.mGeneration++;this.mLastTouchIndex=finalTouchIndex;var previousPointer=null;for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:Number.MAX_SAFE_INTEGER;var lastTouchIndex=this.mLastTouchIndex;for(var pointer=this.mPointerListHead;pointer!=null;pointer=pointer.next){var pastTime=pointer.pastTime;var oldestTouchIndex=lastTouchIndex;var numTouches=1;var minTime=pastTime[lastTouchIndex]-VelocityTracker.MAX_AGE_MILLISECONDS;while(numTouches3){numTouches-=1;}var pastX=pointer.pastX;var pastY=pointer.pastY;var oldestX=pastX[oldestTouchIndex];var oldestY=pastY[oldestTouchIndex];var oldestTime=pastTime[oldestTouchIndex];var accumX=0;var accumY=0;for(var i=1;imaxVelocity){accumX=maxVelocity;}if(accumY<-maxVelocity){accumY=-maxVelocity;}else if(accumY>maxVelocity){accumY=maxVelocity;}pointer.xVelocity=accumX;pointer.yVelocity=accumY;if(VelocityTracker.localLOGV){Log.v(VelocityTracker.TAG,"Pointer "+pointer.id+": Y velocity="+accumX+" X velocity="+accumY+" N="+numTouches);}}}},{key:'getXVelocity',value:function getXVelocity(){var id=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var pointer=this.getPointer(id);return pointer!=null?pointer.xVelocity:0;}},{key:'getYVelocity',value:function getYVelocity(){var id=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var pointer=this.getPointer(id);return pointer!=null?pointer.yVelocity:0;}},{key:'getPointer',value:function getPointer(id){for(var pointer=this.mPointerListHead;pointer!=null;pointer=pointer.next){if(pointer.id==id){return pointer;}}return null;}}],[{key:'obtain',value:function obtain(){var instance=VelocityTracker.sPool.acquire();return instance!=null?instance:new VelocityTracker();}},{key:'obtainPointer',value:function obtainPointer(){if(VelocityTracker.sRecycledPointerCount!=0){var element=VelocityTracker.sRecycledPointerListHead;VelocityTracker.sRecycledPointerCount-=1;VelocityTracker.sRecycledPointerListHead=element.next;element.next=null;return element;}return new Pointer();}},{key:'releasePointer',value:function releasePointer(pointer){if(VelocityTracker.sRecycledPointerCount=VelocityTracker.POINTER_POOL_CAPACITY){return;}var tail=pointer;for(;;){count+=1;if(count>=VelocityTracker.POINTER_POOL_CAPACITY){break;}var next=tail.next;if(next==null){break;}tail=next;}tail.next=VelocityTracker.sRecycledPointerListHead;VelocityTracker.sRecycledPointerCount=count;VelocityTracker.sRecycledPointerListHead=pointer;}}}]);return VelocityTracker;}();VelocityTracker.TAG="VelocityTracker";VelocityTracker.DEBUG=Log.VelocityTracker_DBG;VelocityTracker.localLOGV=VelocityTracker.DEBUG;VelocityTracker.NUM_PAST=10;VelocityTracker.MAX_AGE_MILLISECONDS=200;VelocityTracker.POINTER_POOL_CAPACITY=20;VelocityTracker.sPool=new Pools.SynchronizedPool(2);VelocityTracker.sRecycledPointerCount=0;view.VelocityTracker=VelocityTracker;var Pointer=function Pointer(){_classCallCheck(this,Pointer);this.id=0;this.xVelocity=0;this.yVelocity=0;this.pastX=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.pastY=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.pastTime=androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);this.generation=0;};})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var SystemClock=android.os.SystemClock;var MotionEvent=android.view.MotionEvent;var ViewConfiguration=android.view.ViewConfiguration;var TypedValue=android.util.TypedValue;var ScaleGestureDetector=function(){function ScaleGestureDetector(listener,handler){_classCallCheck(this,ScaleGestureDetector);this.mFocusX=0;this.mFocusY=0;this.mCurrSpan=0;this.mPrevSpan=0;this.mInitialSpan=0;this.mCurrSpanX=0;this.mCurrSpanY=0;this.mPrevSpanX=0;this.mPrevSpanY=0;this.mCurrTime=0;this.mPrevTime=0;this.mSpanSlop=0;this.mMinSpan=0;this.mTouchUpper=0;this.mTouchLower=0;this.mTouchHistoryLastAccepted=0;this.mTouchHistoryDirection=0;this.mTouchHistoryLastAcceptedTime=0;this.mTouchMinMajor=0;this.mDoubleTapMode=ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;this.mListener=listener;this.mSpanSlop=ViewConfiguration.get().getScaledTouchSlop()*2;this.mTouchMinMajor=TypedValue.complexToDimensionPixelSize('48dp');this.mMinSpan=TypedValue.complexToDimensionPixelSize('27mm');this.mHandler=handler;this.setQuickScaleEnabled(true);}_createClass(ScaleGestureDetector,[{key:'addTouchHistory',value:function addTouchHistory(ev){var currentTime=SystemClock.uptimeMillis();var count=ev.getPointerCount();var accept=currentTime-this.mTouchHistoryLastAcceptedTime>=ScaleGestureDetector.TOUCH_STABILIZE_TIME;var total=0;var sampleCount=0;for(var i=0;ithis.mTouchUpper){this.mTouchUpper=major;}if(Number.isNaN(this.mTouchLower)||major=minSpan&&(wasInProgress||Math.abs(span-this.mInitialSpan)>this.mSpanSlop)){this.mPrevSpanX=this.mCurrSpanX=spanX;this.mPrevSpanY=this.mCurrSpanY=spanY;this.mPrevSpan=this.mCurrSpan=span;this.mPrevTime=this.mCurrTime;this.mInProgress=this.mListener.onScaleBegin(this);}if(action==MotionEvent.ACTION_MOVE){this.mCurrSpanX=spanX;this.mCurrSpanY=spanY;this.mCurrSpan=span;var updatePrev=true;if(this.mInProgress){updatePrev=this.mListener.onScale(this);}if(updatePrev){this.mPrevSpanX=this.mCurrSpanX;this.mPrevSpanY=this.mCurrSpanY;this.mPrevSpan=this.mCurrSpan;this.mPrevTime=this.mCurrTime;}}return true;}},{key:'inDoubleTapMode',value:function inDoubleTapMode(){return this.mDoubleTapMode==ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;}},{key:'setQuickScaleEnabled',value:function setQuickScaleEnabled(scales){var _this83=this;this.mQuickScaleEnabled=scales;if(this.mQuickScaleEnabled&&this.mGestureDetector==null){var gestureListener=function(){var inner_this=_this83;var _Inner=function(_view$GestureDetector){_inherits(_Inner,_view$GestureDetector);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,(_Inner.__proto__||Object.getPrototypeOf(_Inner)).apply(this,arguments));}_createClass(_Inner,[{key:'onDoubleTap',value:function onDoubleTap(e){inner_this.mDoubleTapEvent=e;inner_this.mDoubleTapMode=ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;return true;}}]);return _Inner;}(view.GestureDetector.SimpleOnGestureListener);return new _Inner();}();this.mGestureDetector=new view.GestureDetector(gestureListener,this.mHandler);}}},{key:'isQuickScaleEnabled',value:function isQuickScaleEnabled(){return this.mQuickScaleEnabled;}},{key:'isInProgress',value:function isInProgress(){return this.mInProgress;}},{key:'getFocusX',value:function getFocusX(){return this.mFocusX;}},{key:'getFocusY',value:function getFocusY(){return this.mFocusY;}},{key:'getCurrentSpan',value:function getCurrentSpan(){return this.mCurrSpan;}},{key:'getCurrentSpanX',value:function getCurrentSpanX(){return this.mCurrSpanX;}},{key:'getCurrentSpanY',value:function getCurrentSpanY(){return this.mCurrSpanY;}},{key:'getPreviousSpan',value:function getPreviousSpan(){return this.mPrevSpan;}},{key:'getPreviousSpanX',value:function getPreviousSpanX(){return this.mPrevSpanX;}},{key:'getPreviousSpanY',value:function getPreviousSpanY(){return this.mPrevSpanY;}},{key:'getScaleFactor',value:function getScaleFactor(){if(this.inDoubleTapMode()){var scaleUp=this.mEventBeforeOrAboveStartingGestureEvent&&this.mCurrSpanthis.mPrevSpan;var spanDiff=Math.abs(1-this.mCurrSpan/this.mPrevSpan)*ScaleGestureDetector.SCALE_FACTOR;return this.mPrevSpan<=0?1:scaleUp?1+spanDiff:1-spanDiff;}return this.mPrevSpan>0?this.mCurrSpan/this.mPrevSpan:1;}},{key:'getTimeDelta',value:function getTimeDelta(){return this.mCurrTime-this.mPrevTime;}},{key:'getEventTime',value:function getEventTime(){return this.mCurrTime;}}]);return ScaleGestureDetector;}();ScaleGestureDetector.TAG="ScaleGestureDetector";ScaleGestureDetector.TOUCH_STABILIZE_TIME=128;ScaleGestureDetector.DOUBLE_TAP_MODE_NONE=0;ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS=1;ScaleGestureDetector.SCALE_FACTOR=.5;view.ScaleGestureDetector=ScaleGestureDetector;(function(ScaleGestureDetector){var SimpleOnScaleGestureListener=function(){function SimpleOnScaleGestureListener(){_classCallCheck(this,SimpleOnScaleGestureListener);}_createClass(SimpleOnScaleGestureListener,[{key:'onScale',value:function onScale(detector){return false;}},{key:'onScaleBegin',value:function onScaleBegin(detector){return true;}},{key:'onScaleEnd',value:function onScaleEnd(detector){}}]);return SimpleOnScaleGestureListener;}();ScaleGestureDetector.SimpleOnScaleGestureListener=SimpleOnScaleGestureListener;})(ScaleGestureDetector=view.ScaleGestureDetector||(view.ScaleGestureDetector={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Handler=android.os.Handler;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var ViewConfiguration=android.view.ViewConfiguration;var GestureDetector=function(){function GestureDetector(listener,handler){_classCallCheck(this,GestureDetector);this.mTouchSlopSquare=0;this.mDoubleTapTouchSlopSquare=0;this.mDoubleTapSlopSquare=0;this.mMinimumFlingVelocity=0;this.mMaximumFlingVelocity=0;this.mLastFocusX=0;this.mLastFocusY=0;this.mDownFocusX=0;this.mDownFocusY=0;this.mHandler=new GestureDetector.GestureHandler(this);this.mListener=listener;if(listener['setOnDoubleTapListener']){this.setOnDoubleTapListener(listener);}this.init();}_createClass(GestureDetector,[{key:'init',value:function init(){if(this.mListener==null){throw Error('new NullPointerException("OnGestureListener must not be null")');}this.mIsLongpressEnabled=true;var touchSlop=void 0,doubleTapSlop=void 0,doubleTapTouchSlop=void 0;var configuration=ViewConfiguration.get();touchSlop=configuration.getScaledTouchSlop();doubleTapTouchSlop=configuration.getScaledDoubleTapTouchSlop();doubleTapSlop=configuration.getScaledDoubleTapSlop();this.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();this.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity();this.mTouchSlopSquare=touchSlop*touchSlop;this.mDoubleTapTouchSlopSquare=doubleTapTouchSlop*doubleTapTouchSlop;this.mDoubleTapSlopSquare=doubleTapSlop*doubleTapSlop;}},{key:'setOnDoubleTapListener',value:function setOnDoubleTapListener(onDoubleTapListener){this.mDoubleTapListener=onDoubleTapListener;}},{key:'setIsLongpressEnabled',value:function setIsLongpressEnabled(isLongpressEnabled){this.mIsLongpressEnabled=isLongpressEnabled;}},{key:'isLongpressEnabled',value:function isLongpressEnabled(){return this.mIsLongpressEnabled;}},{key:'onTouchEvent',value:function onTouchEvent(ev){var action=ev.getAction();if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);var pointerUp=(action&MotionEvent.ACTION_MASK)==MotionEvent.ACTION_POINTER_UP;var skipIndex=pointerUp?ev.getActionIndex():-1;var sumX=0,sumY=0;var count=ev.getPointerCount();for(var i=0;ithis.mTouchSlopSquare){handled=this.mListener.onScroll(this.mCurrentDownEvent,ev,scrollX,scrollY);this.mLastFocusX=focusX;this.mLastFocusY=focusY;this.mAlwaysInTapRegion=false;this.mHandler.removeMessages(GestureDetector.TAP);this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);}if(distance>this.mDoubleTapTouchSlopSquare){this.mAlwaysInBiggerTapRegion=false;}}else if(Math.abs(scrollX)>=1||Math.abs(scrollY)>=1){handled=this.mListener.onScroll(this.mCurrentDownEvent,ev,scrollX,scrollY);this.mLastFocusX=focusX;this.mLastFocusY=focusY;}break;case MotionEvent.ACTION_UP:this.mStillDown=false;var currentUpEvent=MotionEvent.obtain(ev);if(this.mIsDoubleTapping){handled=this.mDoubleTapListener.onDoubleTapEvent(ev)||handled;}else if(this.mInLongPress){this.mHandler.removeMessages(GestureDetector.TAP);this.mInLongPress=false;}else if(this.mAlwaysInTapRegion){handled=this.mListener.onSingleTapUp(ev);if(this.mDeferConfirmSingleTap&&this.mDoubleTapListener!=null){this.mDoubleTapListener.onSingleTapConfirmed(ev);}}else{var velocityTracker=this.mVelocityTracker;var pointerId=ev.getPointerId(0);velocityTracker.computeCurrentVelocity(1000,this.mMaximumFlingVelocity);var velocityY=velocityTracker.getYVelocity(pointerId);var velocityX=velocityTracker.getXVelocity(pointerId);if(Math.abs(velocityY)>this.mMinimumFlingVelocity||Math.abs(velocityX)>this.mMinimumFlingVelocity){handled=this.mListener.onFling(this.mCurrentDownEvent,ev,velocityX,velocityY);}}if(this.mPreviousUpEvent!=null){this.mPreviousUpEvent.recycle();}this.mPreviousUpEvent=currentUpEvent;if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}this.mIsDoubleTapping=false;this.mDeferConfirmSingleTap=false;this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);break;case MotionEvent.ACTION_CANCEL:this.cancel();break;}return handled;}},{key:'cancel',value:function cancel(){this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);this.mHandler.removeMessages(GestureDetector.TAP);this.mVelocityTracker.recycle();this.mVelocityTracker=null;this.mIsDoubleTapping=false;this.mStillDown=false;this.mAlwaysInTapRegion=false;this.mAlwaysInBiggerTapRegion=false;this.mDeferConfirmSingleTap=false;if(this.mInLongPress){this.mInLongPress=false;}}},{key:'cancelTaps',value:function cancelTaps(){this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);this.mHandler.removeMessages(GestureDetector.LONG_PRESS);this.mHandler.removeMessages(GestureDetector.TAP);this.mIsDoubleTapping=false;this.mAlwaysInTapRegion=false;this.mAlwaysInBiggerTapRegion=false;this.mDeferConfirmSingleTap=false;if(this.mInLongPress){this.mInLongPress=false;}}},{key:'isConsideredDoubleTap',value:function isConsideredDoubleTap(firstDown,firstUp,secondDown){if(!this.mAlwaysInBiggerTapRegion){return false;}var deltaTime=secondDown.getEventTime()-firstUp.getEventTime();if(deltaTime>GestureDetector.DOUBLE_TAP_TIMEOUT||deltaTime=this.getChildCount()){throw new Error("base aligned child index out "+"of range (0, "+this.getChildCount()+")");}this.mBaselineAlignedChildIndex=i;}},{key:'getVirtualChildAt',value:function getVirtualChildAt(index){return this.getChildAt(index);}},{key:'getVirtualChildCount',value:function getVirtualChildCount(){return this.getChildCount();}},{key:'getWeightSum',value:function getWeightSum(){return this.mWeightSum;}},{key:'setWeightSum',value:function setWeightSum(weightSum){this.mWeightSum=Math.max(0,weightSum);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(this.mOrientation==LinearLayout.VERTICAL){this.measureVertical(widthMeasureSpec,heightMeasureSpec);}else{this.measureHorizontal(widthMeasureSpec,heightMeasureSpec);}}},{key:'hasDividerBeforeChildAt',value:function hasDividerBeforeChildAt(childIndex){if(childIndex==0){return(this.mShowDividers&LinearLayout.SHOW_DIVIDER_BEGINNING)!=0;}else if(childIndex==this.getChildCount()){return(this.mShowDividers&LinearLayout.SHOW_DIVIDER_END)!=0;}else if((this.mShowDividers&LinearLayout.SHOW_DIVIDER_MIDDLE)!=0){var hasVisibleViewBefore=false;for(var i=childIndex-1;i>=0;i--){if(this.getChildAt(i).getVisibility()!=LinearLayout.GONE){hasVisibleViewBefore=true;break;}}return hasVisibleViewBefore;}return false;}},{key:'measureVertical',value:function measureVertical(widthMeasureSpec,heightMeasureSpec){this.mTotalLength=0;var maxWidth=0;var childState=0;var alternativeMaxWidth=0;var weightedMaxWidth=0;var allFillParent=true;var totalWeight=0;var count=this.getVirtualChildCount();var widthMode=MeasureSpec.getMode(widthMeasureSpec);var heightMode=MeasureSpec.getMode(heightMeasureSpec);var matchWidth=false;var baselineChildIndex=this.mBaselineAlignedChildIndex;var useLargestChild=this.mUseLargestChild;var largestChildHeight=Number.MIN_SAFE_INTEGER;for(var i=0;i0){var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+lp.topMargin+lp.bottomMargin);}else{var oldHeight=Number.MIN_SAFE_INTEGER;if(lp.height==0&&lp.weight>0){oldHeight=0;lp.height=LinearLayout.LayoutParams.WRAP_CONTENT;}this.measureChildBeforeLayout(child,i,widthMeasureSpec,0,heightMeasureSpec,totalWeight==0?this.mTotalLength:0);if(oldHeight!=Number.MIN_SAFE_INTEGER){lp.height=oldHeight;}var childHeight=child.getMeasuredHeight();var _totalLength=this.mTotalLength;this.mTotalLength=Math.max(_totalLength,_totalLength+childHeight+lp.topMargin+lp.bottomMargin+this.getNextLocationOffset(child));if(useLargestChild){largestChildHeight=Math.max(childHeight,largestChildHeight);}}if(baselineChildIndex>=0&&baselineChildIndex==i+1){this.mBaselineChildTop=this.mTotalLength;}if(i0){throw new Error("A child of LinearLayout with index "+"less than mBaselineAlignedChildIndex has weight > 0, which "+"won't work. Either remove the weight, or don't set "+"mBaselineAlignedChildIndex.");}var matchWidthLocally=false;if(widthMode!=MeasureSpec.EXACTLY&&lp.width==LinearLayout.LayoutParams.MATCH_PARENT){matchWidth=true;matchWidthLocally=true;}var margin=lp.leftMargin+lp.rightMargin;var measuredWidth=child.getMeasuredWidth()+margin;maxWidth=Math.max(maxWidth,measuredWidth);childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState());allFillParent=allFillParent&&lp.width==LinearLayout.LayoutParams.MATCH_PARENT;if(lp.weight>0){weightedMaxWidth=Math.max(weightedMaxWidth,matchWidthLocally?margin:measuredWidth);}else{alternativeMaxWidth=Math.max(alternativeMaxWidth,matchWidthLocally?margin:measuredWidth);}i+=this.getChildrenSkipCount(child,i);}if(this.mTotalLength>0&&this.hasDividerBeforeChildAt(count)){this.mTotalLength+=this.mDividerHeight;}if(useLargestChild&&(heightMode==MeasureSpec.AT_MOST||heightMode==MeasureSpec.UNSPECIFIED)){this.mTotalLength=0;for(var _i20=0;_i200){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;this.mTotalLength=0;for(var _i21=0;_i210){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childWidthMeasureSpec=LinearLayout.getChildMeasureSpec(widthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+_lp5.leftMargin+_lp5.rightMargin,_lp5.width);if(_lp5.height!=0||heightMode!=MeasureSpec.EXACTLY){var _childHeight=_child7.getMeasuredHeight()+share;if(_childHeight<0){_childHeight=0;}_child7.measure(childWidthMeasureSpec,MeasureSpec.makeMeasureSpec(_childHeight,MeasureSpec.EXACTLY));}else{_child7.measure(childWidthMeasureSpec,MeasureSpec.makeMeasureSpec(share>0?share:0,MeasureSpec.EXACTLY));}childState=LinearLayout.combineMeasuredStates(childState,_child7.getMeasuredState()&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT);}var _margin=_lp5.leftMargin+_lp5.rightMargin;var _measuredWidth=_child7.getMeasuredWidth()+_margin;maxWidth=Math.max(maxWidth,_measuredWidth);var _matchWidthLocally=widthMode!=MeasureSpec.EXACTLY&&_lp5.width==LinearLayout.LayoutParams.MATCH_PARENT;alternativeMaxWidth=Math.max(alternativeMaxWidth,_matchWidthLocally?_margin:_measuredWidth);allFillParent=allFillParent&&_lp5.width==LinearLayout.LayoutParams.MATCH_PARENT;var _totalLength3=this.mTotalLength;this.mTotalLength=Math.max(_totalLength3,_totalLength3+_child7.getMeasuredHeight()+_lp5.topMargin+_lp5.bottomMargin+this.getNextLocationOffset(_child7));}this.mTotalLength+=this.mPaddingTop+this.mPaddingBottom;}else{alternativeMaxWidth=Math.max(alternativeMaxWidth,weightedMaxWidth);if(useLargestChild&&heightMode!=MeasureSpec.EXACTLY){for(var _i22=0;_i220){_child8.measure(MeasureSpec.makeMeasureSpec(_child8.getMeasuredWidth(),MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(largestChildHeight,MeasureSpec.EXACTLY));}}}}if(!allFillParent&&widthMode!=MeasureSpec.EXACTLY){maxWidth=alternativeMaxWidth;}maxWidth+=this.mPaddingLeft+this.mPaddingRight;maxWidth=Math.max(maxWidth,this.getSuggestedMinimumWidth());this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth,widthMeasureSpec,childState),heightSizeAndState);if(matchWidth){this.forceUniformWidth(count,heightMeasureSpec);}}},{key:'forceUniformWidth',value:function forceUniformWidth(count,heightMeasureSpec){var uniformMeasureSpec=MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(),MeasureSpec.EXACTLY);for(var i=0;i0){if(isExactly){this.mTotalLength+=lp.leftMargin+lp.rightMargin;}else{var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+lp.leftMargin+lp.rightMargin);}if(baselineAligned){var freeSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);child.measure(freeSpec,freeSpec);}}else{var oldWidth=Number.MIN_SAFE_INTEGER;if(lp.width==0&&lp.weight>0){oldWidth=0;lp.width=LinearLayout.LayoutParams.WRAP_CONTENT;}this.measureChildBeforeLayout(child,i,widthMeasureSpec,totalWeight==0?this.mTotalLength:0,heightMeasureSpec,0);if(oldWidth!=Number.MIN_SAFE_INTEGER){lp.width=oldWidth;}var childWidth=child.getMeasuredWidth();if(isExactly){this.mTotalLength+=childWidth+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child);}else{var _totalLength4=this.mTotalLength;this.mTotalLength=Math.max(_totalLength4,_totalLength4+childWidth+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child));}if(useLargestChild){largestChildWidth=Math.max(childWidth,largestChildWidth);}}var matchHeightLocally=false;if(heightMode!=MeasureSpec.EXACTLY&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT){matchHeight=true;matchHeightLocally=true;}var margin=lp.topMargin+lp.bottomMargin;var childHeight=child.getMeasuredHeight()+margin;childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState());if(baselineAligned){var childBaseline=child.getBaseline();if(childBaseline!=-1){var gravity=(lp.gravity<0?this.mGravity:lp.gravity)&Gravity.VERTICAL_GRAVITY_MASK;var index=(gravity>>Gravity.AXIS_Y_SHIFT&~Gravity.AXIS_SPECIFIED)>>1;maxAscent[index]=Math.max(maxAscent[index],childBaseline);maxDescent[index]=Math.max(maxDescent[index],childHeight-childBaseline);}}maxHeight=Math.max(maxHeight,childHeight);allFillParent=allFillParent&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT;if(lp.weight>0){weightedMaxHeight=Math.max(weightedMaxHeight,matchHeightLocally?margin:childHeight);}else{alternativeMaxHeight=Math.max(alternativeMaxHeight,matchHeightLocally?margin:childHeight);}i+=this.getChildrenSkipCount(child,i);}if(this.mTotalLength>0&&this.hasDividerBeforeChildAt(count)){this.mTotalLength+=this.mDividerWidth;}if(maxAscent[LinearLayout.INDEX_TOP]!=-1||maxAscent[LinearLayout.INDEX_CENTER_VERTICAL]!=-1||maxAscent[LinearLayout.INDEX_BOTTOM]!=-1||maxAscent[LinearLayout.INDEX_FILL]!=-1){var ascent=Math.max(maxAscent[LinearLayout.INDEX_FILL],Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxAscent[LinearLayout.INDEX_TOP],maxAscent[LinearLayout.INDEX_BOTTOM])));var descent=Math.max(maxDescent[LinearLayout.INDEX_FILL],Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxDescent[LinearLayout.INDEX_TOP],maxDescent[LinearLayout.INDEX_BOTTOM])));maxHeight=Math.max(maxHeight,ascent+descent);}if(useLargestChild&&(widthMode==MeasureSpec.AT_MOST||widthMode==MeasureSpec.UNSPECIFIED)){this.mTotalLength=0;for(var _i23=0;_i230){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;maxAscent[0]=maxAscent[1]=maxAscent[2]=maxAscent[3]=-1;maxDescent[0]=maxDescent[1]=maxDescent[2]=maxDescent[3]=-1;maxHeight=-1;this.mTotalLength=0;for(var _i24=0;_i240){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childHeightMeasureSpec=LinearLayout.getChildMeasureSpec(heightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+_lp8.topMargin+_lp8.bottomMargin,_lp8.height);if(_lp8.width!=0||widthMode!=MeasureSpec.EXACTLY){var _childWidth=_child10.getMeasuredWidth()+share;if(_childWidth<0){_childWidth=0;}_child10.measure(MeasureSpec.makeMeasureSpec(_childWidth,MeasureSpec.EXACTLY),childHeightMeasureSpec);}else{_child10.measure(MeasureSpec.makeMeasureSpec(share>0?share:0,MeasureSpec.EXACTLY),childHeightMeasureSpec);}childState=LinearLayout.combineMeasuredStates(childState,_child10.getMeasuredState()&View.MEASURED_STATE_MASK);}if(isExactly){this.mTotalLength+=_child10.getMeasuredWidth()+_lp8.leftMargin+_lp8.rightMargin+this.getNextLocationOffset(_child10);}else{var _totalLength6=this.mTotalLength;this.mTotalLength=Math.max(_totalLength6,_totalLength6+_child10.getMeasuredWidth()+_lp8.leftMargin+_lp8.rightMargin+this.getNextLocationOffset(_child10));}var _matchHeightLocally=heightMode!=MeasureSpec.EXACTLY&&_lp8.height==LinearLayout.LayoutParams.MATCH_PARENT;var _margin2=_lp8.topMargin+_lp8.bottomMargin;var _childHeight2=_child10.getMeasuredHeight()+_margin2;maxHeight=Math.max(maxHeight,_childHeight2);alternativeMaxHeight=Math.max(alternativeMaxHeight,_matchHeightLocally?_margin2:_childHeight2);allFillParent=allFillParent&&_lp8.height==LinearLayout.LayoutParams.MATCH_PARENT;if(baselineAligned){var _childBaseline=_child10.getBaseline();if(_childBaseline!=-1){var _gravity=(_lp8.gravity<0?this.mGravity:_lp8.gravity)&Gravity.VERTICAL_GRAVITY_MASK;var _index=(_gravity>>Gravity.AXIS_Y_SHIFT&~Gravity.AXIS_SPECIFIED)>>1;maxAscent[_index]=Math.max(maxAscent[_index],_childBaseline);maxDescent[_index]=Math.max(maxDescent[_index],_childHeight2-_childBaseline);}}}this.mTotalLength+=this.mPaddingLeft+this.mPaddingRight;if(maxAscent[LinearLayout.INDEX_TOP]!=-1||maxAscent[LinearLayout.INDEX_CENTER_VERTICAL]!=-1||maxAscent[LinearLayout.INDEX_BOTTOM]!=-1||maxAscent[LinearLayout.INDEX_FILL]!=-1){var _ascent=Math.max(maxAscent[LinearLayout.INDEX_FILL],Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxAscent[LinearLayout.INDEX_TOP],maxAscent[LinearLayout.INDEX_BOTTOM])));var _descent=Math.max(maxDescent[LinearLayout.INDEX_FILL],Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL],Math.max(maxDescent[LinearLayout.INDEX_TOP],maxDescent[LinearLayout.INDEX_BOTTOM])));maxHeight=Math.max(maxHeight,_ascent+_descent);}}else{alternativeMaxHeight=Math.max(alternativeMaxHeight,weightedMaxHeight);if(useLargestChild&&widthMode!=MeasureSpec.EXACTLY){for(var _i25=0;_i250){_child11.measure(MeasureSpec.makeMeasureSpec(largestChildWidth,MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(_child11.getMeasuredHeight(),MeasureSpec.EXACTLY));}}}}if(!allFillParent&&heightMode!=MeasureSpec.EXACTLY){maxHeight=alternativeMaxHeight;}maxHeight+=this.mPaddingTop+this.mPaddingBottom;maxHeight=Math.max(maxHeight,this.getSuggestedMinimumHeight());this.setMeasuredDimension(widthSizeAndState|childState&View.MEASURED_STATE_MASK,LinearLayout.resolveSizeAndState(maxHeight,heightMeasureSpec,childState<0?v:-v;}},{key:'constrain',value:function constrain(amount,low,high){return amounthigh?high:amount;}},{key:'log',value:function log(a){return Math.log(a);}},{key:'exp',value:function exp(a){return Math.exp(a);}},{key:'pow',value:function pow(a,b){return Math.pow(a,b);}},{key:'max',value:function max(a,b,c){if(c==null)return a>b?a:b;return a>b?a>c?a:c:b>c?b:c;}},{key:'min',value:function min(a,b,c){if(c==null)return a=howbig)return howsmall;return Math.random()*(howbig-howsmall)+howsmall;}}]);return MathUtils;}();MathUtils.DEG_TO_RAD=3.1415926/180.0;MathUtils.RAD_TO_DEG=180.0/3.1415926;util.MathUtils=MathUtils;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var util;(function(util){var SparseBooleanArray=function(_util$SparseArray){_inherits(SparseBooleanArray,_util$SparseArray);function SparseBooleanArray(){_classCallCheck(this,SparseBooleanArray);return _possibleConstructorReturn(this,(SparseBooleanArray.__proto__||Object.getPrototypeOf(SparseBooleanArray)).apply(this,arguments));}return SparseBooleanArray;}(util.SparseArray);util.SparseBooleanArray=SparseBooleanArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var SoundEffectConstants=function(){function SoundEffectConstants(){_classCallCheck(this,SoundEffectConstants);}_createClass(SoundEffectConstants,null,[{key:'getContantForFocusDirection',value:function getContantForFocusDirection(direction){switch(direction){case view.View.FOCUS_RIGHT:return SoundEffectConstants.NAVIGATION_RIGHT;case view.View.FOCUS_FORWARD:case view.View.FOCUS_DOWN:return SoundEffectConstants.NAVIGATION_DOWN;case view.View.FOCUS_LEFT:return SoundEffectConstants.NAVIGATION_LEFT;case view.View.FOCUS_BACKWARD:case view.View.FOCUS_UP:return SoundEffectConstants.NAVIGATION_UP;}throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.")');}}]);return SoundEffectConstants;}();SoundEffectConstants.CLICK=0;SoundEffectConstants.NAVIGATION_LEFT=1;SoundEffectConstants.NAVIGATION_UP=2;SoundEffectConstants.NAVIGATION_RIGHT=3;SoundEffectConstants.NAVIGATION_DOWN=4;view.SoundEffectConstants=SoundEffectConstants;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var os;(function(os){var Trace=function(){function Trace(){_classCallCheck(this,Trace);}_createClass(Trace,null,[{key:'nativeGetEnabledTags',value:function nativeGetEnabledTags(){return Trace.TRACE_TAG_ALWAYS;}},{key:'nativeTraceCounter',value:function nativeTraceCounter(tag,name,value){}},{key:'nativeTraceBegin',value:function nativeTraceBegin(tag,name){}},{key:'nativeTraceEnd',value:function nativeTraceEnd(tag){}},{key:'nativeAsyncTraceBegin',value:function nativeAsyncTraceBegin(tag,name,cookie){}},{key:'nativeAsyncTraceEnd',value:function nativeAsyncTraceEnd(tag,name,cookie){}},{key:'nativeSetAppTracingAllowed',value:function nativeSetAppTracingAllowed(allowed){}},{key:'nativeSetTracingEnabled',value:function nativeSetTracingEnabled(allowed){}},{key:'cacheEnabledTags',value:function cacheEnabledTags(){var tags=Trace.nativeGetEnabledTags();Trace.sEnabledTags=tags;return tags;}},{key:'isTagEnabled',value:function isTagEnabled(traceTag){var tags=Trace.sEnabledTags;if(tags==Trace.TRACE_TAG_NOT_READY){tags=Trace.cacheEnabledTags();}return(tags&traceTag)!=0;}},{key:'traceCounter',value:function traceCounter(traceTag,counterName,counterValue){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceCounter(traceTag,counterName,counterValue);}}},{key:'setAppTracingAllowed',value:function setAppTracingAllowed(allowed){Trace.nativeSetAppTracingAllowed(allowed);Trace.cacheEnabledTags();}},{key:'setTracingEnabled',value:function setTracingEnabled(enabled){Trace.nativeSetTracingEnabled(enabled);Trace.cacheEnabledTags();}},{key:'traceBegin',value:function traceBegin(traceTag,methodName){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceBegin(traceTag,methodName);}}},{key:'traceEnd',value:function traceEnd(traceTag){if(Trace.isTagEnabled(traceTag)){Trace.nativeTraceEnd(traceTag);}}},{key:'asyncTraceBegin',value:function asyncTraceBegin(traceTag,methodName,cookie){if(Trace.isTagEnabled(traceTag)){Trace.nativeAsyncTraceBegin(traceTag,methodName,cookie);}}},{key:'asyncTraceEnd',value:function asyncTraceEnd(traceTag,methodName,cookie){if(Trace.isTagEnabled(traceTag)){Trace.nativeAsyncTraceEnd(traceTag,methodName,cookie);}}},{key:'beginSection',value:function beginSection(sectionName){if(Trace.isTagEnabled(Trace.TRACE_TAG_APP)){if(sectionName.length>Trace.MAX_SECTION_NAME_LEN){throw Error('new IllegalArgumentException("sectionName is too long")');}Trace.nativeTraceBegin(Trace.TRACE_TAG_APP,sectionName);}}},{key:'endSection',value:function endSection(){if(Trace.isTagEnabled(Trace.TRACE_TAG_APP)){Trace.nativeTraceEnd(Trace.TRACE_TAG_APP);}}}]);return Trace;}();Trace.TAG="Trace";Trace.TRACE_TAG_NEVER=0;Trace.TRACE_TAG_ALWAYS=1<<0;Trace.TRACE_TAG_GRAPHICS=1<<1;Trace.TRACE_TAG_INPUT=1<<2;Trace.TRACE_TAG_VIEW=1<<3;Trace.TRACE_TAG_WEBVIEW=1<<4;Trace.TRACE_TAG_WINDOW_MANAGER=1<<5;Trace.TRACE_TAG_ACTIVITY_MANAGER=1<<6;Trace.TRACE_TAG_SYNC_MANAGER=1<<7;Trace.TRACE_TAG_AUDIO=1<<8;Trace.TRACE_TAG_VIDEO=1<<9;Trace.TRACE_TAG_CAMERA=1<<10;Trace.TRACE_TAG_HAL=1<<11;Trace.TRACE_TAG_APP=1<<12;Trace.TRACE_TAG_RESOURCES=1<<13;Trace.TRACE_TAG_DALVIK=1<<14;Trace.TRACE_TAG_RS=1<<15;Trace.TRACE_TAG_NOT_READY=1<<63;Trace.MAX_SECTION_NAME_LEN=127;Trace.sEnabledTags=Trace.TRACE_TAG_NOT_READY;os.Trace=Trace;})(os=android.os||(android.os={}));})(android||(android={}));var android;(function(android){var text;(function(text){var KeyEvent=android.view.KeyEvent;var InputType=function InputType(){_classCallCheck(this,InputType);};InputType.TYPE_MASK_CLASS=0x0000000f;InputType.TYPE_MASK_VARIATION=0x00000ff0;InputType.TYPE_MASK_FLAGS=0x00fff000;InputType.TYPE_NULL=0x00000000;InputType.TYPE_CLASS_TEXT=0x00000001;InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS=0x00001000;InputType.TYPE_TEXT_FLAG_CAP_WORDS=0x00002000;InputType.TYPE_TEXT_FLAG_CAP_SENTENCES=0x00004000;InputType.TYPE_TEXT_FLAG_AUTO_CORRECT=0x00008000;InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE=0x00010000;InputType.TYPE_TEXT_FLAG_MULTI_LINE=0x00020000;InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE=0x00040000;InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS=0x00080000;InputType.TYPE_TEXT_VARIATION_NORMAL=0x00000000;InputType.TYPE_TEXT_VARIATION_URI=0x00000010;InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS=0x00000020;InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT=0x00000030;InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE=0x00000040;InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE=0x00000050;InputType.TYPE_TEXT_VARIATION_PERSON_NAME=0x00000060;InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS=0x00000070;InputType.TYPE_TEXT_VARIATION_PASSWORD=0x00000080;InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD=0x00000090;InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT=0x000000a0;InputType.TYPE_TEXT_VARIATION_FILTER=0x000000b0;InputType.TYPE_TEXT_VARIATION_PHONETIC=0x000000c0;InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS=0x000000d0;InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD=0x000000e0;InputType.TYPE_CLASS_NUMBER=0x00000002;InputType.TYPE_NUMBER_FLAG_SIGNED=0x00001000;InputType.TYPE_NUMBER_FLAG_DECIMAL=0x00002000;InputType.TYPE_NUMBER_VARIATION_NORMAL=0x00000000;InputType.TYPE_NUMBER_VARIATION_PASSWORD=0x00000010;InputType.TYPE_CLASS_PHONE=0x00000003;InputType.TYPE_CLASS_DATETIME=0x00000004;InputType.TYPE_DATETIME_VARIATION_NORMAL=0x00000000;InputType.TYPE_DATETIME_VARIATION_DATE=0x00000010;InputType.TYPE_DATETIME_VARIATION_TIME=0x00000020;text.InputType=InputType;(function(InputType){var LimitCode=function LimitCode(){_classCallCheck(this,LimitCode);};LimitCode.TYPE_CLASS_NUMBER=[KeyEvent.KEYCODE_Digit0,KeyEvent.KEYCODE_Digit1,KeyEvent.KEYCODE_Digit2,KeyEvent.KEYCODE_Digit3,KeyEvent.KEYCODE_Digit4,KeyEvent.KEYCODE_Digit5,KeyEvent.KEYCODE_Digit6,KeyEvent.KEYCODE_Digit7,KeyEvent.KEYCODE_Digit8,KeyEvent.KEYCODE_Digit9];LimitCode.TYPE_CLASS_PHONE=[KeyEvent.KEYCODE_Comma,KeyEvent.KEYCODE_Sharp,KeyEvent.KEYCODE_Semicolon,KeyEvent.KEYCODE_Asterisk,KeyEvent.KEYCODE_Left_Parenthesis,KeyEvent.KEYCODE_Right_Parenthesis,KeyEvent.KEYCODE_Slash,KeyEvent.KEYCODE_KeyN,KeyEvent.KEYCODE_Period,KeyEvent.KEYCODE_SPACE,KeyEvent.KEYCODE_Add,KeyEvent.KEYCODE_Minus,KeyEvent.KEYCODE_Period,KeyEvent.KEYCODE_Digit0,KeyEvent.KEYCODE_Digit1,KeyEvent.KEYCODE_Digit2,KeyEvent.KEYCODE_Digit3,KeyEvent.KEYCODE_Digit4,KeyEvent.KEYCODE_Digit5,KeyEvent.KEYCODE_Digit6,KeyEvent.KEYCODE_Digit7,KeyEvent.KEYCODE_Digit8,KeyEvent.KEYCODE_Digit9];InputType.LimitCode=LimitCode;})(InputType=text.InputType||(text.InputType={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var util;(function(util){var LongSparseArray=function(_util$SparseArray2){_inherits(LongSparseArray,_util$SparseArray2);function LongSparseArray(){_classCallCheck(this,LongSparseArray);return _possibleConstructorReturn(this,(LongSparseArray.__proto__||Object.getPrototypeOf(LongSparseArray)).apply(this,arguments));}return LongSparseArray;}(util.SparseArray);util.LongSparseArray=LongSparseArray;})(util=android.util||(android.util={}));})(android||(android={}));var android;(function(android){var view;(function(view){var HapticFeedbackConstants=function HapticFeedbackConstants(){_classCallCheck(this,HapticFeedbackConstants);};HapticFeedbackConstants.LONG_PRESS=0;HapticFeedbackConstants.VIRTUAL_KEY=1;HapticFeedbackConstants.KEYBOARD_TAP=3;HapticFeedbackConstants.SAFE_MODE_DISABLED=10000;HapticFeedbackConstants.SAFE_MODE_ENABLED=10001;HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING=0x0001;HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING=0x0002;view.HapticFeedbackConstants=HapticFeedbackConstants;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var database;(function(database){var DataSetObserver=function(){function DataSetObserver(){_classCallCheck(this,DataSetObserver);}_createClass(DataSetObserver,[{key:'onChanged',value:function onChanged(){}},{key:'onInvalidated',value:function onInvalidated(){}}]);return DataSetObserver;}();database.DataSetObserver=DataSetObserver;})(database=android.database||(android.database={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var SystemClock=android.os.SystemClock;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Long=java.lang.Long;var AdapterView=function(_ViewGroup3){_inherits(AdapterView,_ViewGroup3);function AdapterView(){_classCallCheck(this,AdapterView);var _this90=_possibleConstructorReturn(this,(AdapterView.__proto__||Object.getPrototypeOf(AdapterView)).apply(this,arguments));_this90.mFirstPosition=0;_this90.mSpecificTop=0;_this90.mSyncPosition=0;_this90.mSyncRowId=AdapterView.INVALID_ROW_ID;_this90.mSyncHeight=0;_this90.mNeedSync=false;_this90.mSyncMode=0;_this90.mLayoutHeight=0;_this90.mInLayout=false;_this90.mNextSelectedPosition=AdapterView.INVALID_POSITION;_this90.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;_this90.mSelectedPosition=AdapterView.INVALID_POSITION;_this90.mSelectedRowId=AdapterView.INVALID_ROW_ID;_this90.mItemCount=0;_this90.mOldItemCount=0;_this90.mOldSelectedPosition=AdapterView.INVALID_POSITION;_this90.mOldSelectedRowId=AdapterView.INVALID_ROW_ID;_this90.mBlockLayoutRequests=false;return _this90;}_createClass(AdapterView,[{key:'setOnItemClickListener',value:function setOnItemClickListener(listener){this.mOnItemClickListener=listener;}},{key:'getOnItemClickListener',value:function getOnItemClickListener(){return this.mOnItemClickListener;}},{key:'performItemClick',value:function performItemClick(view,position,id){if(this.mOnItemClickListener!=null){this.playSoundEffect(SoundEffectConstants.CLICK);this.mOnItemClickListener.onItemClick(this,view,position,id);return true;}return false;}},{key:'setOnItemLongClickListener',value:function setOnItemLongClickListener(listener){if(!this.isLongClickable()){this.setLongClickable(true);}this.mOnItemLongClickListener=listener;}},{key:'getOnItemLongClickListener',value:function getOnItemLongClickListener(){return this.mOnItemLongClickListener;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(listener){this.mOnItemSelectedListener=listener;}},{key:'getOnItemSelectedListener',value:function getOnItemSelectedListener(){return this.mOnItemSelectedListener;}},{key:'addView',value:function addView(){throw Error('new UnsupportedOperationException("addView() is not supported in AdapterView")');}},{key:'removeView',value:function removeView(child){throw Error('new UnsupportedOperationException("removeView(View) is not supported in AdapterView")');}},{key:'removeViewAt',value:function removeViewAt(index){throw Error('new UnsupportedOperationException("removeViewAt(int) is not supported in AdapterView")');}},{key:'removeAllViews',value:function removeAllViews(){throw Error('new UnsupportedOperationException("removeAllViews() is not supported in AdapterView")');}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){this.mLayoutHeight=this.getHeight();}},{key:'getSelectedItemPosition',value:function getSelectedItemPosition(){return this.mNextSelectedPosition;}},{key:'getSelectedItemId',value:function getSelectedItemId(){return this.mNextSelectedRowId;}},{key:'getSelectedItem',value:function getSelectedItem(){var adapter=this.getAdapter();var selection=this.getSelectedItemPosition();if(adapter!=null&&adapter.getCount()>0&&selection>=0){return adapter.getItem(selection);}else{return null;}}},{key:'getCount',value:function getCount(){return this.mItemCount;}},{key:'getPositionForView',value:function getPositionForView(view){var listItem=view;try{var v=void 0;while(!((v=listItem.getParent())==this)){listItem=v;}}catch(e){return AdapterView.INVALID_POSITION;}var childCount=this.getChildCount();for(var i=0;i=0){var v=this.getSelectedView();this.mOnItemSelectedListener.onItemSelected(this,v,selection,this.getAdapter().getItemId(selection));}else{this.mOnItemSelectedListener.onNothingSelected(this);}}},{key:'performAccessibilityActionsOnSelected',value:function performAccessibilityActionsOnSelected(){}},{key:'isScrollableForAccessibility',value:function isScrollableForAccessibility(){var adapter=this.getAdapter();if(adapter!=null){var itemCount=adapter.getCount();return itemCount>0&&(this.getFirstVisiblePosition()>0||this.getLastVisiblePosition()0;}},{key:'handleDataChanged',value:function handleDataChanged(){var count=this.mItemCount;var found=false;if(count>0){var newPos=void 0;if(this.mNeedSync){this.mNeedSync=false;newPos=this.findSyncPosition();if(newPos>=0){var selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos==newPos){this.setNextSelectedPositionInt(newPos);found=true;}}}if(!found){newPos=this.getSelectedItemPosition();if(newPos>=count){newPos=count-1;}if(newPos<0){newPos=0;}var _selectablePos=this.lookForSelectablePosition(newPos,true);if(_selectablePos<0){_selectablePos=this.lookForSelectablePosition(newPos,false);}if(_selectablePos>=0){this.setNextSelectedPositionInt(_selectablePos);this.checkSelectionChanged();found=true;}}}if(!found){this.mSelectedPosition=AdapterView.INVALID_POSITION;this.mSelectedRowId=AdapterView.INVALID_ROW_ID;this.mNextSelectedPosition=AdapterView.INVALID_POSITION;this.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;this.mNeedSync=false;this.checkSelectionChanged();}}},{key:'checkSelectionChanged',value:function checkSelectionChanged(){if(this.mSelectedPosition!=this.mOldSelectedPosition||this.mSelectedRowId!=this.mOldSelectedRowId){this.selectionChanged();this.mOldSelectedPosition=this.mSelectedPosition;this.mOldSelectedRowId=this.mSelectedRowId;}}},{key:'findSyncPosition',value:function findSyncPosition(){var count=this.mItemCount;if(count==0){return AdapterView.INVALID_POSITION;}var idToMatch=this.mSyncRowId;var seed=this.mSyncPosition;if(idToMatch==AdapterView.INVALID_ROW_ID){return AdapterView.INVALID_POSITION;}seed=Math.max(0,seed);seed=Math.min(count-1,seed);var endTime=SystemClock.uptimeMillis()+AdapterView.SYNC_MAX_DURATION_MILLIS;var rowId=void 0;var first=seed;var last=seed;var next=false;var hitFirst=void 0;var hitLast=void 0;var adapter=this.getAdapter();if(adapter==null){return AdapterView.INVALID_POSITION;}while(SystemClock.uptimeMillis()<=endTime){rowId=adapter.getItemId(seed);if(rowId==idToMatch){return seed;}hitLast=last==count-1;hitFirst=first==0;if(hitLast&&hitFirst){break;}if(hitFirst||next&&!hitLast){last++;seed=last;next=false;}else if(hitLast||!next&&!hitFirst){first--;seed=first;next=true;}}return AdapterView.INVALID_POSITION;}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){return position;}},{key:'setSelectedPositionInt',value:function setSelectedPositionInt(position){this.mSelectedPosition=position;this.mSelectedRowId=this.getItemIdAtPosition(position);}},{key:'setNextSelectedPositionInt',value:function setNextSelectedPositionInt(position){this.mNextSelectedPosition=position;this.mNextSelectedRowId=this.getItemIdAtPosition(position);if(this.mNeedSync&&this.mSyncMode==AdapterView.SYNC_SELECTED_POSITION&&position>=0){this.mSyncPosition=position;this.mSyncRowId=this.mNextSelectedRowId;}}},{key:'rememberSyncState',value:function rememberSyncState(){if(this.getChildCount()>0){this.mNeedSync=true;this.mSyncHeight=this.mLayoutHeight;if(this.mSelectedPosition>=0){var v=this.getChildAt(this.mSelectedPosition-this.mFirstPosition);this.mSyncRowId=this.mNextSelectedRowId;this.mSyncPosition=this.mNextSelectedPosition;if(v!=null){this.mSpecificTop=v.getTop();}this.mSyncMode=AdapterView.SYNC_SELECTED_POSITION;}else{var _v2=this.getChildAt(0);var adapter=this.getAdapter();if(this.mFirstPosition>=0&&this.mFirstPosition8&&arguments[8]!==undefined?arguments[8]:null;var ellipsizedWidth=arguments.length>9&&arguments[9]!==undefined?arguments[9]:outerwidth;_classCallCheck(this,BoringLayout);var _this92=_possibleConstructorReturn(this,(BoringLayout.__proto__||Object.getPrototypeOf(BoringLayout)).call(this,source,paint,outerwidth,align,TextDirectionHeuristics.FIRSTSTRONG_LTR,spacingmult,spacingadd));_this92.mBottom=0;_this92.mDesc=0;_this92.mTopPadding=0;_this92.mBottomPadding=0;_this92.mMax=0;_this92.mEllipsizedWidth=0;_this92.mEllipsizedStart=0;_this92.mEllipsizedCount=0;var trust=void 0;if(ellipsize==null||ellipsize==TextUtils.TruncateAt.MARQUEE){_this92.mEllipsizedWidth=outerwidth;_this92.mEllipsizedStart=0;_this92.mEllipsizedCount=0;trust=true;}else{_this92.replaceWith(TextUtils.ellipsize(source,paint,ellipsizedWidth,ellipsize,true,_this92),paint,outerwidth,align,spacingmult,spacingadd);_this92.mEllipsizedWidth=ellipsizedWidth;trust=false;}_this92.init(_this92.getText(),paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad,trust);return _this92;}_createClass(BoringLayout,[{key:'replaceOrMake',value:function replaceOrMake(source,paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad){var ellipsize=arguments.length>8&&arguments[8]!==undefined?arguments[8]:null;var ellipsizedWidth=arguments.length>9&&arguments[9]!==undefined?arguments[9]:outerwidth;var trust=void 0;if(ellipsize==null||ellipsize==TextUtils.TruncateAt.MARQUEE){this.replaceWith(source,paint,outerwidth,align,spacingmult,spacingadd);this.mEllipsizedWidth=outerwidth;this.mEllipsizedStart=0;this.mEllipsizedCount=0;trust=true;}else{this.replaceWith(TextUtils.ellipsize(source,paint,ellipsizedWidth,ellipsize,true,this),paint,outerwidth,align,spacingmult,spacingadd);this.mEllipsizedWidth=ellipsizedWidth;trust=false;}this.init(this.getText(),paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad,trust);return this;}},{key:'init',value:function init(source,paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad,trustWidth){var spacing=void 0;if(Object.getPrototypeOf(source)===String.prototype&&align==Layout.Alignment.ALIGN_NORMAL){this.mDirect=source.toString();}else{this.mDirect=null;}this.mPaint=paint;if(includepad){spacing=metrics.bottom-metrics.top;}else{spacing=metrics.descent-metrics.ascent;}if(spacingmult!=1||spacingadd!=0){spacing=Math.floor(spacing*spacingmult+spacingadd+0.5);}this.mBottom=spacing;if(includepad){this.mDesc=spacing+metrics.top;}else{this.mDesc=spacing+metrics.ascent;}if(trustWidth){this.mMax=metrics.width;}else{var line=TextLine.obtain();line.set(paint,source,0,source.length,Layout.DIR_LEFT_TO_RIGHT,Layout.DIRS_ALL_LEFT_TO_RIGHT,false,null);this.mMax=Math.floor(Math.ceil(line.metrics(null)));TextLine.recycle(line);}if(includepad){this.mTopPadding=metrics.top-metrics.ascent;this.mBottomPadding=metrics.bottom-metrics.descent;}}},{key:'getHeight',value:function getHeight(){return this.mBottom;}},{key:'getLineCount',value:function getLineCount(){return 1;}},{key:'getLineTop',value:function getLineTop(line){if(line==0)return 0;else return this.mBottom;}},{key:'getLineDescent',value:function getLineDescent(line){return this.mDesc;}},{key:'getLineStart',value:function getLineStart(line){if(line==0)return 0;else return this.getText().length;}},{key:'getParagraphDirection',value:function getParagraphDirection(line){return BoringLayout.DIR_LEFT_TO_RIGHT;}},{key:'getLineContainsTab',value:function getLineContainsTab(line){return false;}},{key:'getLineMax',value:function getLineMax(line){return this.mMax;}},{key:'getLineDirections',value:function getLineDirections(line){return Layout.DIRS_ALL_LEFT_TO_RIGHT;}},{key:'getTopPadding',value:function getTopPadding(){return this.mTopPadding;}},{key:'getBottomPadding',value:function getBottomPadding(){return this.mBottomPadding;}},{key:'getEllipsisCount',value:function getEllipsisCount(line){return this.mEllipsizedCount;}},{key:'getEllipsisStart',value:function getEllipsisStart(line){return this.mEllipsizedStart;}},{key:'getEllipsizedWidth',value:function getEllipsizedWidth(){return this.mEllipsizedWidth;}},{key:'draw',value:function draw(c,highlight,highlightpaint,cursorOffset){if(this.mDirect!=null&&highlight==null){c.drawText(this.mDirect,0,this.mBottom-this.mDesc,this.mPaint);}else{_get2(BoringLayout.prototype.__proto__||Object.getPrototypeOf(BoringLayout.prototype),'draw',this).call(this,c,highlight,highlightpaint,cursorOffset);}}},{key:'ellipsized',value:function ellipsized(start,end){this.mEllipsizedStart=start;this.mEllipsizedCount=end-start;}}],[{key:'make',value:function make(source,paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad){var ellipsize=arguments.length>8&&arguments[8]!==undefined?arguments[8]:null;var ellipsizedWidth=arguments.length>9&&arguments[9]!==undefined?arguments[9]:outerwidth;return new BoringLayout(source,paint,outerwidth,align,spacingmult,spacingadd,metrics,includepad,ellipsize,ellipsizedWidth);}},{key:'isBoring',value:function isBoring(text,paint){var textDir=arguments.length>2&&arguments[2]!==undefined?arguments[2]:TextDirectionHeuristics.FIRSTSTRONG_LTR;var metrics=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var temp=void 0;var length=text.length;var boring=true;outer:for(var i=0;ilength)j=length;temp=text.substring(i,j);var n=j-i;for(var _a11=0;_a110){boring=false;}}if(boring){var fm=metrics;if(fm==null){fm=new BoringLayout.Metrics();}var line=TextLine.obtain();line.set(paint,text,0,length,Layout.DIR_LEFT_TO_RIGHT,Layout.DIRS_ALL_LEFT_TO_RIGHT,false,null);fm.width=Math.floor(Math.ceil(line.metrics(fm)));TextLine.recycle(line);return fm;}else{return null;}}}]);return BoringLayout;}(Layout);BoringLayout.FIRST_RIGHT_TO_LEFT='֐'.codePointAt(0);BoringLayout.sTemp=new TextPaint();text_8.BoringLayout=BoringLayout;(function(BoringLayout){var Metrics=function(_Paint$FontMetricsInt){_inherits(Metrics,_Paint$FontMetricsInt);function Metrics(){_classCallCheck(this,Metrics);var _this93=_possibleConstructorReturn(this,(Metrics.__proto__||Object.getPrototypeOf(Metrics)).apply(this,arguments));_this93.width=0;return _this93;}_createClass(Metrics,[{key:'toString',value:function toString(){return _get2(Metrics.prototype.__proto__||Object.getPrototypeOf(Metrics.prototype),'toString',this).call(this)+" width="+this.width;}}]);return Metrics;}(Paint.FontMetricsInt);BoringLayout.Metrics=Metrics;})(BoringLayout=text_8.BoringLayout||(text_8.BoringLayout={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var System=java.lang.System;var PackedIntVector=function(){function PackedIntVector(columns){_classCallCheck(this,PackedIntVector);this.mColumns=0;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=0;this.mColumns=columns;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=this.mRows;this.mValues=null;this.mValueGap=androidui.util.ArrayCreator.newNumberArray(2*columns);}_createClass(PackedIntVector,[{key:'getValue',value:function getValue(row,column){var columns=this.mColumns;if((row|column)<0||row>=this.size()||column>=columns){throw Error('new IndexOutOfBoundsException(row + ", " + column)');}if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var value=this.mValues[row*columns+column];var valuegap=this.mValueGap;if(row>=valuegap[column]){value+=valuegap[column+columns];}return value;}},{key:'setValue',value:function setValue(row,column,value){if((row|column)<0||row>=this.size()||column>=this.mColumns){throw Error('new IndexOutOfBoundsException(row + ", " + column)');}if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var valuegap=this.mValueGap;if(row>=valuegap[column]){value-=valuegap[column+this.mColumns];}this.mValues[row*this.mColumns+column]=value;}},{key:'setValueInternal',value:function setValueInternal(row,column,value){if(row>=this.mRowGapStart){row+=this.mRowGapLength;}var valuegap=this.mValueGap;if(row>=valuegap[column]){value-=valuegap[column+this.mColumns];}this.mValues[row*this.mColumns+column]=value;}},{key:'adjustValuesBelow',value:function adjustValuesBelow(startRow,column,delta){if((startRow|column)<0||startRow>this.size()||column>=this.width()){throw Error('new IndexOutOfBoundsException(startRow + ", " + column)');}if(startRow>=this.mRowGapStart){startRow+=this.mRowGapLength;}this.moveValueGapTo(column,startRow);this.mValueGap[column+this.mColumns]+=delta;}},{key:'insertAt',value:function insertAt(row,values){if(row<0||row>this.size()){throw Error('new IndexOutOfBoundsException("row " + row)');}if(values!=null&&values.length=0;i--){this.setValueInternal(row,i,0);}}else{for(var _i26=this.mColumns-1;_i26>=0;_i26--){this.setValueInternal(row,_i26,values[_i26]);}}}},{key:'deleteAt',value:function deleteAt(row,count){if((row|count)<0||row+count>this.size()){throw Error('new IndexOutOfBoundsException(row + ", " + count)');}this.moveRowGapTo(row+count);this.mRowGapStart-=count;this.mRowGapLength+=count;}},{key:'size',value:function size(){return this.mRows-this.mRowGapLength;}},{key:'width',value:function width(){return this.mColumns;}},{key:'growBuffer',value:function growBuffer(){var columns=this.mColumns;var newsize=this.size()+1;newsize=newsize*columns/columns;var newvalues=androidui.util.ArrayCreator.newNumberArray(newsize*columns);var valuegap=this.mValueGap;var rowgapstart=this.mRowGapStart;var after=this.mRows-(rowgapstart+this.mRowGapLength);if(this.mValues!=null){System.arraycopy(this.mValues,0,newvalues,0,columns*rowgapstart);System.arraycopy(this.mValues,(this.mRows-after)*columns,newvalues,(newsize-after)*columns,after*columns);}for(var i=0;i=rowgapstart){valuegap[i]+=newsize-this.mRows;if(valuegap[i]valuegap[column]){for(var i=valuegap[column];ithis.mRowGapStart){var moving=where+this.mRowGapLength-(this.mRowGapStart+this.mRowGapLength);var columns=this.mColumns;var valuegap=this.mValueGap;var values=this.mValues;var gapend=this.mRowGapStart+this.mRowGapLength;for(var i=gapend;i=valuegap[j]){val+=valuegap[j+columns];}if(destrow>=valuegap[j]){val-=valuegap[j+columns];}values[destrow*columns+j]=val;}}}else{var _moving=this.mRowGapStart-where;var _columns=this.mColumns;var _valuegap=this.mValueGap;var _values=this.mValues;var _gapend=this.mRowGapStart+this.mRowGapLength;for(var _i28=where+_moving-1;_i28>=where;_i28--){var _destrow=_i28-where+_gapend-_moving;for(var _j2=0;_j2<_columns;_j2++){var _val=_values[_i28*_columns+_j2];if(_i28>=_valuegap[_j2]){_val+=_valuegap[_j2+_columns];}if(_destrow>=_valuegap[_j2]){_val-=_valuegap[_j2+_columns];}_values[_destrow*_columns+_j2]=_val;}}}this.mRowGapStart=where;}}]);return PackedIntVector;}();text.PackedIntVector=PackedIntVector;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var System=java.lang.System;var PackedObjectVector=function(){function PackedObjectVector(columns){_classCallCheck(this,PackedObjectVector);this.mColumns=0;this.mRows=0;this.mRowGapStart=0;this.mRowGapLength=0;this.mColumns=columns;this.mRows=1;this.mRowGapStart=0;this.mRowGapLength=this.mRows;this.mValues=new Array(this.mRows*this.mColumns);}_createClass(PackedObjectVector,[{key:'getValue',value:function getValue(row,column){if(row>=this.mRowGapStart)row+=this.mRowGapLength;var value=this.mValues[row*this.mColumns+column];return value;}},{key:'setValue',value:function setValue(row,column,value){if(row>=this.mRowGapStart)row+=this.mRowGapLength;this.mValues[row*this.mColumns+column]=value;}},{key:'insertAt',value:function insertAt(row,values){this.moveRowGapTo(row);if(this.mRowGapLength==0)this.growBuffer();this.mRowGapStart++;this.mRowGapLength--;if(values==null)for(var i=0;ithis.size()*2){}}},{key:'size',value:function size(){return this.mRows-this.mRowGapLength;}},{key:'width',value:function width(){return this.mColumns;}},{key:'growBuffer',value:function growBuffer(){var newsize=this.size()+1;newsize=newsize*this.mColumns/this.mColumns;var newvalues=new Array(newsize*this.mColumns);var after=this.mRows-(this.mRowGapStart+this.mRowGapLength);System.arraycopy(this.mValues,0,newvalues,0,this.mColumns*this.mRowGapStart);System.arraycopy(this.mValues,(this.mRows-after)*this.mColumns,newvalues,(newsize-after)*this.mColumns,after*this.mColumns);this.mRowGapLength+=newsize-this.mRows;this.mRows=newsize;this.mValues=newvalues;}},{key:'moveRowGapTo',value:function moveRowGapTo(where){if(where==this.mRowGapStart)return;if(where>this.mRowGapStart){var moving=where+this.mRowGapLength-(this.mRowGapStart+this.mRowGapLength);for(var i=this.mRowGapStart+this.mRowGapLength;i=where;_i30--){var _destrow2=_i30-where+this.mRowGapStart+this.mRowGapLength-_moving2;for(var _j3=0;_j3=this.mRowGapStart+this.mRowGapLength)System.out.print(val+" ");else System.out.print("("+val+") ");}System.out.print(" << \n");}System.out.print("-----\n\n");}}]);return PackedObjectVector;}();text.PackedObjectVector=PackedObjectVector;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var Spannable;(function(Spannable){function isImpl(obj){return obj&&obj['setSpan']&&obj['removeSpan'];}Spannable.isImpl=isImpl;var Factory=function(){function Factory(){_classCallCheck(this,Factory);}_createClass(Factory,[{key:'newSpannable',value:function newSpannable(source){return source;}}],[{key:'getInstance',value:function getInstance(){return Factory.sInstance;}}]);return Factory;}();Factory.sInstance=new Factory();Spannable.Factory=Factory;})(Spannable=text.Spannable||(text.Spannable={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_9){var style;(function(style){var LineHeightSpan;(function(LineHeightSpan){LineHeightSpan.type=Symbol();})(LineHeightSpan=style.LineHeightSpan||(style.LineHeightSpan={}));})(style=text_9.style||(text_9.style={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_10){var Paint=android.graphics.Paint;var LeadingMarginSpan=android.text.style.LeadingMarginSpan;var LeadingMarginSpan2=android.text.style.LeadingMarginSpan.LeadingMarginSpan2;var LineHeightSpan=android.text.style.LineHeightSpan;var MetricAffectingSpan=android.text.style.MetricAffectingSpan;var TabStopSpan=android.text.style.TabStopSpan;var Integer=java.lang.Integer;var System=java.lang.System;var Layout=android.text.Layout;var MeasuredText=android.text.MeasuredText;var Spanned=android.text.Spanned;var TextUtils=android.text.TextUtils;var StaticLayout=function(_Layout2){_inherits(StaticLayout,_Layout2);function StaticLayout(source,bufstart,bufend,paint,outerwidth,align,textDir,spacingmult,spacingadd,includepad){var ellipsize=arguments.length>10&&arguments[10]!==undefined?arguments[10]:null;var ellipsizedWidth=arguments.length>11&&arguments[11]!==undefined?arguments[11]:0;var maxLines=arguments.length>12&&arguments[12]!==undefined?arguments[12]:Integer.MAX_VALUE;_classCallCheck(this,StaticLayout);var _this94=_possibleConstructorReturn(this,(StaticLayout.__proto__||Object.getPrototypeOf(StaticLayout)).call(this,ellipsize==null?source:Spanned.isImplements(source)?new Layout.SpannedEllipsizer(source):new Layout.Ellipsizer(source),paint,outerwidth,align,textDir,spacingmult,spacingadd));_this94.mLineCount=0;_this94.mTopPadding=0;_this94.mBottomPadding=0;_this94.mColumns=0;_this94.mEllipsizedWidth=0;_this94.mMaximumVisibleLineCount=Integer.MAX_VALUE;_this94.mFontMetricsInt=new Paint.FontMetricsInt();if(source==null){_this94.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;_this94.mLines=androidui.util.ArrayCreator.newNumberArray(2*_this94.mColumns);_this94.mLineDirections=new Array(2*_this94.mColumns);_this94.mMeasured=MeasuredText.obtain();return _possibleConstructorReturn(_this94);}if(ellipsize!=null){var e=_this94.getText();e.mLayout=_this94;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this94.mEllipsizedWidth=ellipsizedWidth;_this94.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;}else{_this94.mColumns=StaticLayout.COLUMNS_NORMAL;_this94.mEllipsizedWidth=outerwidth;}_this94.mLines=androidui.util.ArrayCreator.newNumberArray(2*_this94.mColumns);_this94.mLineDirections=new Array(2*_this94.mColumns);_this94.mMaximumVisibleLineCount=maxLines;_this94.mMeasured=MeasuredText.obtain();_this94.generate(source,bufstart,bufend,paint,outerwidth,textDir,spacingmult,spacingadd,includepad,includepad,ellipsizedWidth,ellipsize);_this94.mMeasured=MeasuredText.recycle(_this94.mMeasured);_this94.mFontMetricsInt=null;return _this94;}_createClass(StaticLayout,[{key:'generate',value:function generate(source,bufStart,bufEnd,paint,outerWidth,textDir,spacingmult,spacingadd,includepad,trackpad,ellipsizedWidth,ellipsize){this.mLineCount=0;var v=0;var needMultiply=spacingmult!=1||spacingadd!=0;var fm=this.mFontMetricsInt;var chooseHtv=null;var measured=this.mMeasured;var spanned=null;if(Spanned.isImplements(source))spanned=source;var DEFAULT_DIR=StaticLayout.DIR_LEFT_TO_RIGHT;var paraEnd=void 0;for(var paraStart=bufStart;paraStart<=bufEnd;paraStart=paraEnd){paraEnd=source.substring(0,bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE,paraStart);if(paraEnd<0)paraEnd=bufEnd;else paraEnd++;var firstWidthLineLimit=this.mLineCount+1;var firstWidth=outerWidth;var restWidth=outerWidth;var chooseHt=null;if(spanned!=null){var sp=StaticLayout.getParagraphSpans(spanned,paraStart,paraEnd,LeadingMarginSpan.type);for(var i=0;i0){tabStops=new Layout.TabStops(StaticLayout.TAB_INCREMENT,_spans);}}}if(tabStops!=null){w=tabStops.nextTab(w);}else{w=StaticLayout.TabStops.nextDefaultStop(w,StaticLayout.TAB_INCREMENT);}}else if(c.codePointAt(0)>=StaticLayout.CHAR_FIRST_HIGH_SURROGATE&&c.codePointAt(0)<=StaticLayout.CHAR_LAST_LOW_SURROGATE&&j+1fitDescent)fitDescent=fmDescent;if(fmBottom>fitBottom)fitBottom=fmBottom;var isLineBreak=isSpaceOrTab||(c==StaticLayout.CHAR_SLASH||c==StaticLayout.CHAR_HYPHEN)&&(j+1>=spanEnd||!Number.isInteger(Number.parseInt(chs[j+1-paraStart])))||c.codePointAt(0)>=StaticLayout.CHAR_FIRST_CJK.codePointAt(0)&&StaticLayout.isIdeographic(c,true)&&j+1okDescent)okDescent=fitDescent;if(fitBottom>okBottom)okBottom=fitBottom;}}else{var moreChars=j+1=this.mMaximumVisibleLineCount){break;}}}}if(paraEnd!=here&&this.mLineCount=lines.length){var nlen=want+1;var grow=androidui.util.ArrayCreator.newNumberArray(nlen);System.arraycopy(lines,0,grow,0,lines.length);this.mLines=grow;lines=grow;var grow2=new Array(nlen);System.arraycopy(this.mLineDirections,0,grow2,0,this.mLineDirections.length);this.mLineDirections=grow2;}if(chooseHt!=null){fm.ascent=above;fm.descent=below;fm.top=top;fm.bottom=bottom;for(var i=0;i=0){extra=Math.floor(ex+StaticLayout.EXTRA_ROUNDING);}else{extra=-Math.floor(-ex+StaticLayout.EXTRA_ROUNDING);}}else{extra=0;}lines[off+StaticLayout.START]=start;lines[off+StaticLayout.TOP]=v;lines[off+StaticLayout.DESCENT]=below+extra;v+=below-above+extra;lines[off+this.mColumns+StaticLayout.START]=end;lines[off+this.mColumns+StaticLayout.TOP]=v;if(hasTabOrEmoji)lines[off+StaticLayout.TAB]|=StaticLayout.TAB_MASK;lines[off+StaticLayout.DIR]|=dir<=0;i--){var w=widths[i-1+lineStart-widthStart];if(w+sum+ellipsisWidth>avail){break;}sum+=w;}ellipsisStart=0;ellipsisCount=i;}else{}}else if(where==TextUtils.TruncateAt.END||where==TextUtils.TruncateAt.MARQUEE||where==TextUtils.TruncateAt.END_SMALL){var _sum=0;var _i32=void 0;for(_i32=0;_i32avail){break;}_sum+=_w;}ellipsisStart=_i32;ellipsisCount=len-_i32;if(forceEllipsis&&ellipsisCount==0&&len>0){ellipsisStart=len-1;ellipsisCount=1;}}else{if(this.mMaximumVisibleLineCount==1){var lsum=0,rsum=0;var left=0,right=len;var ravail=(avail-ellipsisWidth)/2;for(right=len;right>=0;right--){var _w2=widths[right-1+lineStart-widthStart];if(_w2+rsum>ravail){break;}rsum+=_w2;}var lavail=avail-ellipsisWidth-rsum;for(left=0;leftlavail){break;}lsum+=_w3;}ellipsisStart=left;ellipsisCount=right-left;}else{}}this.mLines[this.mColumns*line+StaticLayout.ELLIPSIS_START]=ellipsisStart;this.mLines[this.mColumns*line+StaticLayout.ELLIPSIS_COUNT]=ellipsisCount;}},{key:'getLineForVertical',value:function getLineForVertical(vertical){var high=this.mLineCount;var low=-1;var guess=void 0;var lines=this.mLines;while(high-low>1){guess=high+low>>1;if(lines[this.mColumns*guess+StaticLayout.TOP]>vertical){high=guess;}else{low=guess;}}if(low<0){return 0;}else{return low;}}},{key:'getLineCount',value:function getLineCount(){return this.mLineCount;}},{key:'getLineTop',value:function getLineTop(line){var top=this.mLines[this.mColumns*line+StaticLayout.TOP];if(this.mMaximumVisibleLineCount>0&&line>=this.mMaximumVisibleLineCount&&line!=this.mLineCount){top+=this.getBottomPadding();}return top;}},{key:'getLineDescent',value:function getLineDescent(line){var descent=this.mLines[this.mColumns*line+StaticLayout.DESCENT];if(this.mMaximumVisibleLineCount>0&&line>=this.mMaximumVisibleLineCount-1&&line!=this.mLineCount){descent+=this.getBottomPadding();}return descent;}},{key:'getLineStart',value:function getLineStart(line){return this.mLines[this.mColumns*line+StaticLayout.START]&StaticLayout.START_MASK;}},{key:'getParagraphDirection',value:function getParagraphDirection(line){return this.mLines[this.mColumns*line+StaticLayout.DIR]>>StaticLayout.DIR_SHIFT;}},{key:'getLineContainsTab',value:function getLineContainsTab(line){return(this.mLines[this.mColumns*line+StaticLayout.TAB]&StaticLayout.TAB_MASK)!=0;}},{key:'getLineDirections',value:function getLineDirections(line){return this.mLineDirections[line];}},{key:'getTopPadding',value:function getTopPadding(){return this.mTopPadding;}},{key:'getBottomPadding',value:function getBottomPadding(){return this.mBottomPadding;}},{key:'getEllipsisCount',value:function getEllipsisCount(line){if(this.mColumns='⺀'.codePointAt(0)&&code<='⿿'.codePointAt(0)){return true;}if(c==' '){return true;}if(code>='぀'.codePointAt(0)&&code<='ゟ'.codePointAt(0)){if(!includeNonStarters){switch(c){case'ぁ':case'ぃ':case'ぅ':case'ぇ':case'ぉ':case'っ':case'ゃ':case'ゅ':case'ょ':case'ゎ':case'ゕ':case'ゖ':case'゛':case'゜':case'ゝ':case'ゞ':return false;}}return true;}if(code>='゠'.codePointAt(0)&&code<='ヿ'.codePointAt(0)){if(!includeNonStarters){switch(c){case'゠':case'ァ':case'ィ':case'ゥ':case'ェ':case'ォ':case'ッ':case'ャ':case'ュ':case'ョ':case'ヮ':case'ヵ':case'ヶ':case'・':case'ー':case'ヽ':case'ヾ':return false;}}return true;}if(code>='㐀'.codePointAt(0)&&code<='䶵'.codePointAt(0)){return true;}if(code>='一'.codePointAt(0)&&code<='龻'.codePointAt(0)){return true;}if(code>='豈'.codePointAt(0)&&code<='龎'.codePointAt(0)){return true;}if(code>='ꀀ'.codePointAt(0)&&code<='꒏'.codePointAt(0)){return true;}if(code>='꒐'.codePointAt(0)&&code<='꓏'.codePointAt(0)){return true;}if(code>='﹢'.codePointAt(0)&&code<='﹦'.codePointAt(0)){return true;}if(code>='0'.codePointAt(0)&&code<='9'.codePointAt(0)){return true;}return false;}}]);return StaticLayout;}(Layout);StaticLayout.TAG="StaticLayout";StaticLayout.COLUMNS_NORMAL=3;StaticLayout.COLUMNS_ELLIPSIZE=5;StaticLayout.START=0;StaticLayout.DIR=StaticLayout.START;StaticLayout.TAB=StaticLayout.START;StaticLayout.TOP=1;StaticLayout.DESCENT=2;StaticLayout.ELLIPSIS_START=3;StaticLayout.ELLIPSIS_COUNT=4;StaticLayout.START_MASK=0x1FFFFFFF;StaticLayout.DIR_SHIFT=30;StaticLayout.TAB_MASK=0x20000000;StaticLayout.CHAR_FIRST_CJK='⺀';StaticLayout.CHAR_NEW_LINE='\n';StaticLayout.CHAR_TAB='\t';StaticLayout.CHAR_SPACE=' ';StaticLayout.CHAR_SLASH='/';StaticLayout.CHAR_HYPHEN='-';StaticLayout.CHAR_ZWSP='​';StaticLayout.EXTRA_ROUNDING=0.5;StaticLayout.CHAR_FIRST_HIGH_SURROGATE=0xD800;StaticLayout.CHAR_LAST_LOW_SURROGATE=0xDFFF;text_10.StaticLayout=StaticLayout;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text_11){var Paint=android.graphics.Paint;var System=java.lang.System;var Layout=android.text.Layout;var PackedIntVector=android.text.PackedIntVector;var PackedObjectVector=android.text.PackedObjectVector;var Spanned=android.text.Spanned;var StaticLayout=android.text.StaticLayout;var DynamicLayout=function(_Layout3){_inherits(DynamicLayout,_Layout3);function DynamicLayout(base,display,paint,width,align,textDir,spacingmult,spacingadd,includepad){var ellipsize=arguments.length>9&&arguments[9]!==undefined?arguments[9]:null;var ellipsizedWidth=arguments.length>10&&arguments[10]!==undefined?arguments[10]:0;_classCallCheck(this,DynamicLayout);var _this95=_possibleConstructorReturn(this,(DynamicLayout.__proto__||Object.getPrototypeOf(DynamicLayout)).call(this,ellipsize==null?display:Spanned.isImplements(display)?new Layout.SpannedEllipsizer(display):new Layout.Ellipsizer(display),paint,width,align,textDir,spacingmult,spacingadd));_this95.mEllipsizedWidth=0;_this95.mNumberOfBlocks=0;_this95.mIndexFirstChangedBlock=0;_this95.mTopPadding=0;_this95.mBottomPadding=0;_this95.mBase=base;_this95.mDisplay=display;if(ellipsize!=null){_this95.mInts=new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);_this95.mEllipsizedWidth=ellipsizedWidth;_this95.mEllipsizeAt=ellipsize;}else{_this95.mInts=new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);_this95.mEllipsizedWidth=width;_this95.mEllipsizeAt=null;}_this95.mObjects=new PackedObjectVector(1);_this95.mIncludePad=includepad;if(ellipsize!=null){var e=_this95.getText();e.mLayout=_this95;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this95.mEllipsize=true;}var start=void 0;if(ellipsize!=null){start=androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);start[DynamicLayout.ELLIPSIS_START]=DynamicLayout.ELLIPSIS_UNDEFINED;}else{start=androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);}var dirs=[DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT];var fm=new Paint.FontMetricsInt();paint.getFontMetricsInt(fm);var asc=fm.ascent;var desc=fm.descent;start[DynamicLayout.DIR]=DynamicLayout.DIR_LEFT_TO_RIGHT<0)top-=toppad;ints[DynamicLayout.TOP]=top;var desc=reflowed.getLineDescent(i);if(i==n-1)desc+=botpad;ints[DynamicLayout.DESCENT]=desc;objects[0]=reflowed.getLineDirections(i);if(this.mEllipsize){ints[DynamicLayout.ELLIPSIS_START]=reflowed.getEllipsisStart(i);ints[DynamicLayout.ELLIPSIS_COUNT]=reflowed.getEllipsisCount(i);}this.mInts.insertAt(startline+i,ints);this.mObjects.insertAt(startline+i,objects);}this.updateBlocks(startline,endline-1,n);{DynamicLayout.sStaticLayout=reflowed;reflowed.finish();}}},{key:'createBlocks',value:function createBlocks(){var offset=DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;this.mNumberOfBlocks=0;var text=this.mDisplay;while(true){offset=text.indexOf('\n',offset);if(offset<0){this.addBlockAtOffset(text.length);break;}else{this.addBlockAtOffset(offset);offset+=DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;}}this.mBlockIndices=androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length);for(var i=0;ipreviousBlockEndLine){if(this.mNumberOfBlocks==this.mBlockEndLines.length){var blockEndLines=androidui.util.ArrayCreator.newNumberArray(this.mNumberOfBlocks+1);System.arraycopy(this.mBlockEndLines,0,blockEndLines,0,this.mNumberOfBlocks);this.mBlockEndLines=blockEndLines;}this.mBlockEndLines[this.mNumberOfBlocks]=line;this.mNumberOfBlocks++;}}},{key:'updateBlocks',value:function updateBlocks(startLine,endLine,newLineCount){if(this.mBlockEndLines==null){this.createBlocks();return;}var firstBlock=-1;var lastBlock=-1;for(var i=0;i=startLine){firstBlock=i;break;}}for(var _i33=firstBlock;_i33=endLine){lastBlock=_i33;break;}}var lastBlockEndLine=this.mBlockEndLines[lastBlock];var createBlockBefore=startLine>(firstBlock==0?0:this.mBlockEndLines[firstBlock-1]+1);var createBlock=newLineCount>0;var createBlockAfter=endLinethis.mBlockEndLines.length){var newSize=newNumberOfBlocks;var blockEndLines=androidui.util.ArrayCreator.newNumberArray(newSize);var blockIndices=androidui.util.ArrayCreator.newNumberArray(newSize);System.arraycopy(this.mBlockEndLines,0,blockEndLines,0,firstBlock);System.arraycopy(this.mBlockIndices,0,blockIndices,0,firstBlock);System.arraycopy(this.mBlockEndLines,lastBlock+1,blockEndLines,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);System.arraycopy(this.mBlockIndices,lastBlock+1,blockIndices,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);this.mBlockEndLines=blockEndLines;this.mBlockIndices=blockIndices;}else{System.arraycopy(this.mBlockEndLines,lastBlock+1,this.mBlockEndLines,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);System.arraycopy(this.mBlockIndices,lastBlock+1,this.mBlockIndices,firstBlock+numAddedBlocks,this.mNumberOfBlocks-lastBlock-1);}this.mNumberOfBlocks=newNumberOfBlocks;var newFirstChangedBlock=void 0;var deltaLines=newLineCount-(endLine-startLine+1);if(deltaLines!=0){newFirstChangedBlock=firstBlock+numAddedBlocks;for(var _i34=newFirstChangedBlock;_i34>DynamicLayout.DIR_SHIFT;}},{key:'getLineDirections',value:function getLineDirections(line){return this.mObjects.getValue(line,0);}},{key:'getTopPadding',value:function getTopPadding(){return this.mTopPadding;}},{key:'getBottomPadding',value:function getBottomPadding(){return this.mBottomPadding;}},{key:'getEllipsizedWidth',value:function getEllipsizedWidth(){return this.mEllipsizedWidth;}},{key:'getEllipsisStart',value:function getEllipsisStart(line){if(this.mEllipsizeAt==null){return 0;}return this.mInts.getValue(line,DynamicLayout.ELLIPSIS_START);}},{key:'getEllipsisCount',value:function getEllipsisCount(line){if(this.mEllipsizeAt==null){return 0;}return this.mInts.getValue(line,DynamicLayout.ELLIPSIS_COUNT);}}]);return DynamicLayout;}(Layout);DynamicLayout.PRIORITY=128;DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH=400;DynamicLayout.INVALID_BLOCK_INDEX=-1;DynamicLayout.sStaticLayout=new StaticLayout(null,0,0,null,0,null,null,1,0,true);DynamicLayout.sLock=new Array(0);DynamicLayout.START=0;DynamicLayout.DIR=DynamicLayout.START;DynamicLayout.TAB=DynamicLayout.START;DynamicLayout.TOP=1;DynamicLayout.DESCENT=2;DynamicLayout.COLUMNS_NORMAL=3;DynamicLayout.ELLIPSIS_START=3;DynamicLayout.ELLIPSIS_COUNT=4;DynamicLayout.COLUMNS_ELLIPSIZE=5;DynamicLayout.START_MASK=0x1FFFFFFF;DynamicLayout.DIR_SHIFT=30;DynamicLayout.TAB_MASK=0x20000000;DynamicLayout.ELLIPSIS_UNDEFINED=0x80000000;text_11.DynamicLayout=DynamicLayout;})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var TransformationMethod;(function(TransformationMethod){function isImpl(obj){return obj&&obj['getTransformation']&&obj['onFocusChanged'];}TransformationMethod.isImpl=isImpl;})(TransformationMethod=method.TransformationMethod||(method.TransformationMethod={}));})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var TransformationMethod=android.text.method.TransformationMethod;var TransformationMethod2;(function(TransformationMethod2){function isImpl(obj){return TransformationMethod.isImpl(obj)&&obj['setLengthChangesAllowed'];}TransformationMethod2.isImpl=isImpl;})(TransformationMethod2=method.TransformationMethod2||(method.TransformationMethod2={}));})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var Log=android.util.Log;var AllCapsTransformationMethod=function(){function AllCapsTransformationMethod(context){_classCallCheck(this,AllCapsTransformationMethod);}_createClass(AllCapsTransformationMethod,[{key:'getTransformation',value:function getTransformation(source,view){if(this.mEnabled){return source!=null?source.toLocaleUpperCase():null;}Log.w(AllCapsTransformationMethod.TAG,"Caller did not enable length changes; not transforming text");return source;}},{key:'onFocusChanged',value:function onFocusChanged(view,sourceText,focused,direction,previouslyFocusedRect){}},{key:'setLengthChangesAllowed',value:function setLengthChangesAllowed(allowLengthChanges){this.mEnabled=allowLengthChanges;}}]);return AllCapsTransformationMethod;}();AllCapsTransformationMethod.TAG="AllCapsTransformationMethod";method.AllCapsTransformationMethod=AllCapsTransformationMethod;})(method=text.method||(text.method={}));})(text=android.text||(android.text={}));})(android||(android={}));var android;(function(android){var text;(function(text){var method;(function(method){var ReplacementTransformationMethod=function(){function ReplacementTransformationMethod(){_classCallCheck(this,ReplacementTransformationMethod);}_createClass(ReplacementTransformationMethod,[{key:'getTransformation',value:function getTransformation(source,v){var original=this.getOriginal();var replacement=this.getReplacement();var doNothing=true;var n=original.length;for(var i=0;i=0){doNothing=false;break;}}if(doNothing){return source;}return new ReplacementTransformationMethod.ReplacementCharSequence(source,original,replacement).toString();}},{key:'onFocusChanged',value:function onFocusChanged(view,sourceText,focused,direction,previouslyFocusedRect){}}]);return ReplacementTransformationMethod;}();method.ReplacementTransformationMethod=ReplacementTransformationMethod;(function(ReplacementTransformationMethod){var ReplacementCharSequence=function(_String2){_inherits(ReplacementCharSequence,_String2);function ReplacementCharSequence(source,original,replacement){_classCallCheck(this,ReplacementCharSequence);var _this96=_possibleConstructorReturn(this,(ReplacementCharSequence.__proto__||Object.getPrototypeOf(ReplacementCharSequence)).call(this,source));_this96.mSource=source;_this96.mOriginal=original;_this96.mReplacement=replacement;return _this96;}_createClass(ReplacementCharSequence,[{key:'charAt',value:function charAt(i){var c=this.mSource.charAt(i);var n=this.mOriginal.length;for(var j=0;j1&&arguments[1]!==undefined?arguments[1]:true;_classCallCheck(this,OverScroller);this.mMode=0;this.mFlywheel=true;this.mInterpolator=interpolator;this.mFlywheel=flywheel;this.mScrollerX=new SplineOverScroller();this.mScrollerY=new SplineOverScroller();}_createClass(OverScroller,[{key:'setInterpolator',value:function setInterpolator(interpolator){this.mInterpolator=interpolator;}},{key:'setFriction',value:function setFriction(friction){NumberChecker.warnNotNumber(friction);this.mScrollerX.setFriction(friction);this.mScrollerY.setFriction(friction);}},{key:'isFinished',value:function isFinished(){return this.mScrollerX.mFinished&&this.mScrollerY.mFinished;}},{key:'forceFinished',value:function forceFinished(finished){this.mScrollerX.mFinished=this.mScrollerY.mFinished=finished;}},{key:'getCurrX',value:function getCurrX(){return this.mScrollerX.mCurrentPosition;}},{key:'getCurrY',value:function getCurrY(){return this.mScrollerY.mCurrentPosition;}},{key:'getCurrVelocity',value:function getCurrVelocity(){var squaredNorm=this.mScrollerX.mCurrVelocity*this.mScrollerX.mCurrVelocity;squaredNorm+=this.mScrollerY.mCurrVelocity*this.mScrollerY.mCurrVelocity;return Math.sqrt(squaredNorm);}},{key:'getStartX',value:function getStartX(){return this.mScrollerX.mStart;}},{key:'getStartY',value:function getStartY(){return this.mScrollerY.mStart;}},{key:'getFinalX',value:function getFinalX(){return this.mScrollerX.mFinal;}},{key:'getFinalY',value:function getFinalY(){return this.mScrollerY.mFinal;}},{key:'getDuration',value:function getDuration(){return Math.max(this.mScrollerX.mDuration,this.mScrollerY.mDuration);}},{key:'computeScrollOffset',value:function computeScrollOffset(){if(this.isFinished()){return false;}switch(this.mMode){case OverScroller.SCROLL_MODE:var time=SystemClock.uptimeMillis();var elapsedTime=time-this.mScrollerX.mStartTime;var duration=this.mScrollerX.mDuration;if(elapsedTime4&&arguments[4]!==undefined?arguments[4]:OverScroller.DEFAULT_DURATION;NumberChecker.warnNotNumber(startX,startY,dx,dy,duration);this.mMode=OverScroller.SCROLL_MODE;this.mScrollerX.startScroll(startX,dx,duration);this.mScrollerY.startScroll(startY,dy,duration);}},{key:'springBack',value:function springBack(startX,startY,minX,maxX,minY,maxY){NumberChecker.warnNotNumber(startX,startY,minX,maxX,minY,maxY);this.mMode=OverScroller.FLING_MODE;var spingbackX=this.mScrollerX.springback(startX,minX,maxX);var spingbackY=this.mScrollerY.springback(startY,minY,maxY);return spingbackX||spingbackY;}},{key:'fling',value:function fling(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY){var overX=arguments.length>8&&arguments[8]!==undefined?arguments[8]:0;var overY=arguments.length>9&&arguments[9]!==undefined?arguments[9]:0;NumberChecker.warnNotNumber(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);if(this.mFlywheel&&!this.isFinished()){var oldVelocityX=this.mScrollerX.mCurrVelocity;var oldVelocityY=this.mScrollerY.mCurrVelocity;if(Math_signum(velocityX)==Math_signum(oldVelocityX)&&Math_signum(velocityY)==Math_signum(oldVelocityY)){velocityX+=oldVelocityX;velocityY+=oldVelocityY;}}this.mMode=OverScroller.FLING_MODE;this.mScrollerX.fling(startX,velocityX,minX,maxX,overX);this.mScrollerY.fling(startY,velocityY,minY,maxY,overY);}},{key:'notifyHorizontalEdgeReached',value:function notifyHorizontalEdgeReached(startX,finalX,overX){NumberChecker.warnNotNumber(startX,finalX,overX);this.mScrollerX.notifyEdgeReached(startX,finalX,overX);}},{key:'notifyVerticalEdgeReached',value:function notifyVerticalEdgeReached(startY,finalY,overY){NumberChecker.warnNotNumber(startY,finalY,overY);this.mScrollerY.notifyEdgeReached(startY,finalY,overY);}},{key:'isOverScrolled',value:function isOverScrolled(){return!this.mScrollerX.mFinished&&this.mScrollerX.mState!=SplineOverScroller.SPLINE||!this.mScrollerY.mFinished&&this.mScrollerY.mState!=SplineOverScroller.SPLINE;}},{key:'abortAnimation',value:function abortAnimation(){this.mScrollerX.finish();this.mScrollerY.finish();}},{key:'timePassed',value:function timePassed(){var time=SystemClock.uptimeMillis();var startTime=Math.min(this.mScrollerX.mStartTime,this.mScrollerY.mStartTime);return time-startTime;}},{key:'isScrollingInDirection',value:function isScrollingInDirection(xvel,yvel){var dx=this.mScrollerX.mFinal-this.mScrollerX.mStart;var dy=this.mScrollerY.mFinal-this.mScrollerY.mStart;return!this.isFinished()&&Math_signum(xvel)==Math_signum(dx)&&Math_signum(yvel)==Math_signum(dy);}}]);return OverScroller;}();OverScroller.DEFAULT_DURATION=250;OverScroller.SCROLL_MODE=0;OverScroller.FLING_MODE=1;widget.OverScroller=OverScroller;var SplineOverScroller=function(){function SplineOverScroller(){_classCallCheck(this,SplineOverScroller);this.mStart=0;this.mCurrentPosition=0;this.mFinal=0;this.mVelocity=0;this._mCurrVelocity=0;this.mDeceleration=0;this.mStartTime=0;this.mDuration=0;this.mSplineDuration=0;this.mSplineDistance=0;this.mFinished=false;this.mOver=0;this.mFlingFriction=ViewConfiguration.getScrollFriction();this.mState=SplineOverScroller.SPLINE;this.mPhysicalCoeff=0;this.mFinished=true;var ppi=Resources.getDisplayMetrics().density*160;this.mPhysicalCoeff=9.80665*39.37*ppi*0.84;}_createClass(SplineOverScroller,[{key:'setFriction',value:function setFriction(friction){this.mFlingFriction=friction;}},{key:'updateScroll',value:function updateScroll(q){this.mCurrentPosition=this.mStart+Math.round(q*(this.mFinal-this.mStart));}},{key:'adjustDuration',value:function adjustDuration(start,oldFinal,newFinal){var oldDistance=oldFinal-start;var newDistance=newFinal-start;var x=Math.abs(newDistance/oldDistance);var index=Math.floor(SplineOverScroller.NB_SAMPLES*x);if(indexmax){this.startSpringback(start,max,0);}return!this.mFinished;}},{key:'startSpringback',value:function startSpringback(start,end,velocity){this.mFinished=false;this.mState=SplineOverScroller.CUBIC;this.mStart=start;this.mFinal=end;var delta=start-end;this.mDeceleration=SplineOverScroller.getDeceleration(delta);this.mVelocity=-delta;this.mOver=Math.abs(delta);var density=android.content.res.Resources.getDisplayMetrics().density;this.mDuration=Math.floor(1000.0*Math.sqrt(-2.0*(delta/density)/this.mDeceleration));}},{key:'fling',value:function fling(start,velocity,min,max,over){this.mOver=over;this.mFinished=false;this.mCurrVelocity=this.mVelocity=velocity;this.mDuration=this.mSplineDuration=0;this.mStartTime=SystemClock.uptimeMillis();this.mCurrentPosition=this.mStart=start;if(start>max||startmax){this.adjustDuration(this.mStart,this.mFinal,max);this.mFinal=max;}}},{key:'getSplineDeceleration',value:function getSplineDeceleration(velocity){return Math.log(SplineOverScroller.INFLEXION*Math.abs(velocity)/(this.mFlingFriction*this.mPhysicalCoeff));}},{key:'getSplineFlingDistance',value:function getSplineFlingDistance(velocity){var l=this.getSplineDeceleration(velocity);var decelMinusOne=SplineOverScroller.DECELERATION_RATE-1.0;return this.mFlingFriction*this.mPhysicalCoeff*Math.exp(SplineOverScroller.DECELERATION_RATE/decelMinusOne*l);}},{key:'getSplineFlingDuration',value:function getSplineFlingDuration(velocity){var l=this.getSplineDeceleration(velocity);var decelMinusOne=SplineOverScroller.DECELERATION_RATE-1.0;return 1000.0*Math.exp(l/decelMinusOne);}},{key:'fitOnBounceCurve',value:function fitOnBounceCurve(start,end,velocity){var durationToApex=-velocity/this.mDeceleration;var distanceToApex=velocity*velocity/2.0/Math.abs(this.mDeceleration);var distanceToEdge=Math.abs(end-start);var totalDuration=Math.sqrt(2.0*(distanceToApex+distanceToEdge)/Math.abs(this.mDeceleration));this.mStartTime-=1000*(totalDuration-durationToApex);this.mStart=end;this.mVelocity=-this.mDeceleration*totalDuration;}},{key:'startBounceAfterEdge',value:function startBounceAfterEdge(start,end,velocity){this.mDeceleration=SplineOverScroller.getDeceleration(velocity==0?start-end:velocity);this.fitOnBounceCurve(start,end,velocity);this.onEdgeReached();}},{key:'startAfterEdge',value:function startAfterEdge(start,min,max,velocity){if(start>min&&startmax;var edge=positive?max:min;var overDistance=start-edge;var keepIncreasing=overDistance*velocity>=0;if(keepIncreasing){this.startBounceAfterEdge(start,edge,velocity);}else{var totalDistance=this.getSplineFlingDistance(velocity);if(totalDistance>Math.abs(overDistance)){this.fling(start,velocity,positive?min:start,positive?start:max,this.mOver);}else{this.startSpringback(start,edge,velocity);}}}},{key:'notifyEdgeReached',value:function notifyEdgeReached(start,end,over){if(this.mState==SplineOverScroller.SPLINE){this.mOver=over;this.mStartTime=SystemClock.uptimeMillis();this.startAfterEdge(start,end,end,this.mCurrVelocity);}}},{key:'onEdgeReached',value:function onEdgeReached(){var distance=this.mVelocity*this.mVelocity/(2*Math.abs(this.mDeceleration));var sign=Math_signum(this.mVelocity);if(distance>this.mOver){this.mDeceleration=-sign*this.mVelocity*this.mVelocity/(2.0*this.mOver);distance=this.mOver;}this.mOver=distance;this.mState=SplineOverScroller.BALLISTIC;this.mFinal=this.mStart+(this.mVelocity>0?distance:-distance);this.mDuration=-(1000*this.mVelocity/this.mDeceleration);}},{key:'continueWhenFinished',value:function continueWhenFinished(){switch(this.mState){case SplineOverScroller.SPLINE:if(this.mDurationthis.mDuration){return false;}var distance=0;switch(this.mState){case SplineOverScroller.SPLINE:{var t=currentTime/this.mSplineDuration;var index=Math.floor(SplineOverScroller.NB_SAMPLES*t);var distanceCoef=1;var velocityCoef=0;if(index0?-SplineOverScroller.GRAVITY:SplineOverScroller.GRAVITY;}}]);return SplineOverScroller;}();SplineOverScroller.DECELERATION_RATE=Math.log(0.78)/Math.log(0.9);SplineOverScroller.INFLEXION=0.35;SplineOverScroller.START_TENSION=0.5;SplineOverScroller.END_TENSION=1.0;SplineOverScroller.P1=SplineOverScroller.START_TENSION*SplineOverScroller.INFLEXION;SplineOverScroller.P2=1.0-SplineOverScroller.END_TENSION*(1-SplineOverScroller.INFLEXION);SplineOverScroller.NB_SAMPLES=100;SplineOverScroller.SPLINE_POSITION=androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE_TIME=androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE=0;SplineOverScroller.CUBIC=1;SplineOverScroller.BALLISTIC=2;SplineOverScroller.GRAVITY=2000;SplineOverScroller._staticFunc=function(){var x_min=0.0;var y_min=0.0;for(var i=0;ialpha)x_max=_x165;else x_min=_x165;}SplineOverScroller.SPLINE_POSITION[i]=coef*((1.0-_x165)*SplineOverScroller.START_TENSION+_x165)+_x165*_x165*_x165;var y_max=1.0;var _y5=void 0,dy=void 0;while(true){_y5=y_min+(y_max-y_min)/2.0;coef=3.0*_y5*(1.0-_y5);dy=coef*((1.0-_y5)*SplineOverScroller.START_TENSION+_y5)+_y5*_y5*_y5;if(Math.abs(dy-alpha)<1E-5)break;if(dy>alpha)y_max=_y5;else y_min=_y5;}SplineOverScroller.SPLINE_TIME[i]=coef*((1.0-_y5)*SplineOverScroller.P1+_y5*SplineOverScroller.P2)+_y5*_y5*_y5;}SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES]=SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES]=1.0;}();function Math_signum(value){if(value===0||Number.isNaN(value))return value;return Math.abs(value)===value?1:-1;}var sViscousFluidScale=8;var sViscousFluidNormalize=1;function Scroller_viscousFluid(x){x*=sViscousFluidScale;if(x<1){x-=1-Math.exp(-x);}else{var start=0.36787944117;x=1-Math.exp(1-x);x=start+x*(1-start);}x*=sViscousFluidNormalize;return x;}sViscousFluidNormalize=1/Scroller_viscousFluid(1);})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ColorStateList=android.content.res.ColorStateList;var Paint=android.graphics.Paint;var Path=android.graphics.Path;var Rect=android.graphics.Rect;var Color=android.graphics.Color;var RectF=android.graphics.RectF;var Handler=android.os.Handler;var BoringLayout=android.text.BoringLayout;var DynamicLayout=android.text.DynamicLayout;var Layout=android.text.Layout;var Spannable=android.text.Spannable;var Spanned=android.text.Spanned;var StaticLayout=android.text.StaticLayout;var TextDirectionHeuristics=android.text.TextDirectionHeuristics;var TextPaint=android.text.TextPaint;var TextUtils=android.text.TextUtils;var TruncateAt=android.text.TextUtils.TruncateAt;var AllCapsTransformationMethod=android.text.method.AllCapsTransformationMethod;var SingleLineTransformationMethod=android.text.method.SingleLineTransformationMethod;var TransformationMethod2=android.text.method.TransformationMethod2;var Log=android.util.Log;var TypedValue=android.util.TypedValue;var Gravity=android.view.Gravity;var HapticFeedbackConstants=android.view.HapticFeedbackConstants;var MotionEvent=android.view.MotionEvent;var View=android.view.View;var LayoutParams=android.view.ViewGroup.LayoutParams;var AnimationUtils=android.view.animation.AnimationUtils;var WeakReference=java.lang.ref.WeakReference;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var System=java.lang.System;var TextView=function(_View){_inherits(TextView,_View);function TextView(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.textViewStyle;_classCallCheck(this,TextView);var _this98=_possibleConstructorReturn(this,(TextView.__proto__||Object.getPrototypeOf(TextView)).call(this,context,bindElement,defStyle));_this98.mTextColor=ColorStateList.valueOf(Color.BLACK);_this98.mCurTextColor=0;_this98.mCurHintTextColor=0;_this98.mSpannableFactory=Spannable.Factory.getInstance();_this98.mShadowRadius=0;_this98.mShadowDx=0;_this98.mShadowDy=0;_this98.mMarqueeRepeatLimit=3;_this98.mLastLayoutDirection=-1;_this98.mMarqueeFadeMode=TextView.MARQUEE_FADE_NORMAL;_this98.mBufferType=TextView.BufferType.NORMAL;_this98.mGravity=Gravity.TOP|Gravity.LEFT;_this98.mAutoLinkMask=0;_this98.mLinksClickable=true;_this98.mSpacingMult=1.0;_this98.mSpacingAdd=0.0;_this98.mMaximum=Integer.MAX_VALUE;_this98.mMaxMode=TextView.LINES;_this98.mMinimum=0;_this98.mMinMode=TextView.LINES;_this98.mOldMaximum=_this98.mMaximum;_this98.mOldMaxMode=_this98.mMaxMode;_this98.mMaxWidthValue=Integer.MAX_VALUE;_this98.mMaxWidthMode=TextView.PIXELS;_this98.mMinWidthValue=0;_this98.mMinWidthMode=TextView.PIXELS;_this98.mDesiredHeightAtMeasure=-1;_this98.mIncludePad=true;_this98.mDeferScroll=-1;_this98.mLastScroll=0;_this98.mFilters=TextView.NO_FILTERS;_this98.mHighlightColor=0x6633B5E5;_this98.mHighlightPathBogus=true;_this98.mCursorDrawableRes=0;_this98.mTextSelectHandleLeftRes=0;_this98.mTextSelectHandleRightRes=0;_this98.mTextSelectHandleRes=0;_this98.mTextEditSuggestionItemLayout=0;_this98.mSkipDrawText=false;_this98.mText="";_this98.mTextPaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);_this98.mHighlightPaint=new Paint(Paint.ANTI_ALIAS_FLAG);_this98.mMovement=_this98.getDefaultMovementMethod();_this98.mTransformation=null;var textColorHighlight=0;var textColor=null;var textColorHint=null;var textColorLink=null;var textSize=14*_this98.getResources().getDisplayMetrics().density;var allCaps=false;var shadowcolor=0;var dx=0,dy=0,r=0;var editable=_this98.getDefaultEditable();var numeric=0;var digits=null;var drawableLeft=null,drawableTop=null,drawableRight=null,drawableBottom=null,drawableStart=null,drawableEnd=null;var drawablePadding=0;var ellipsize=void 0;var singleLine=false;var maxlength=-1;var text="";var hint=null;var a=context.obtainStyledAttributes(bindElement,defStyle);var _iteratorNormalCompletion66=true;var _didIteratorError66=false;var _iteratorError66=undefined;try{for(var _iterator66=a.getLowerCaseNoNamespaceAttrNames()[Symbol.iterator](),_step66;!(_iteratorNormalCompletion66=(_step66=_iterator66.next()).done);_iteratorNormalCompletion66=true){var attr=_step66.value;switch(attr){case'editable':editable=a.getBoolean(attr,editable);break;case'inputmethod':break;case'numeric':numeric=a.getInt(attr,numeric);break;case'digits':digits=a.getText(attr);break;case'phonenumber':break;case'autotext':break;case'capitalize':break;case'buffertype':break;case'selectallonfocus':break;case'autolink':_this98.mAutoLinkMask=a.getInt(attr,0);break;case'linksclickable':_this98.mLinksClickable=a.getBoolean(attr,true);break;case'drawableleft':drawableLeft=a.getDrawable(attr);break;case'drawabletop':drawableTop=a.getDrawable(attr);break;case'drawableright':drawableRight=a.getDrawable(attr);break;case'drawablebottom':drawableBottom=a.getDrawable(attr);break;case'drawablestart':drawableStart=a.getDrawable(attr);break;case'drawableend':drawableEnd=a.getDrawable(attr);break;case'drawablepadding':drawablePadding=a.getDimensionPixelSize(attr,drawablePadding);break;case'maxlines':_this98.setMaxLines(a.getInt(attr,-1));break;case'maxheight':_this98.setMaxHeight(a.getDimensionPixelSize(attr,-1));break;case'lines':_this98.setLines(a.getInt(attr,-1));break;case'height':_this98.setHeight(a.getDimensionPixelSize(attr,-1));break;case'minlines':_this98.setMinLines(a.getInt(attr,-1));break;case'minheight':_this98.setMinHeight(a.getDimensionPixelSize(attr,-1));break;case'maxems':_this98.setMaxEms(a.getInt(attr,-1));break;case'maxwidth':_this98.setMaxWidth(a.getDimensionPixelSize(attr,-1));break;case'ems':_this98.setEms(a.getInt(attr,-1));break;case'width':_this98.setWidth(a.getDimensionPixelSize(attr,-1));break;case'minems':_this98.setMinEms(a.getInt(attr,-1));break;case'minwidth':_this98.setMinWidth(a.getDimensionPixelSize(attr,-1));break;case'gravity':_this98.setGravity(Gravity.parseGravity(a.getAttrValue(attr),-1));break;case'hint':hint=a.getText(attr);break;case'text':text=a.getText(attr);break;case'scrollhorizontally':if(a.getBoolean(attr,false)){_this98.setHorizontallyScrolling(true);}break;case'singleline':singleLine=a.getBoolean(attr,singleLine);break;case'ellipsize':ellipsize=TextUtils.TruncateAt[(a.getAttrValue(attr)+'').toUpperCase()];break;case'marqueerepeatlimit':_this98.setMarqueeRepeatLimit(a.getInt(attr,_this98.mMarqueeRepeatLimit));break;case'includefontpadding':if(!a.getBoolean(attr,true)){_this98.setIncludeFontPadding(false);}break;case'cursorvisible':if(!a.getBoolean(attr,true)){_this98.setCursorVisible(false);}break;case'maxlength':maxlength=a.getInt(attr,-1);break;case'textscalex':_this98.setTextScaleX(a.getFloat(attr,1.0));break;case'freezestext':_this98.mFreezesText=a.getBoolean(attr,false);break;case'shadowcolor':shadowcolor=a.getInt(attr,0);break;case'shadowdx':dx=a.getFloat(attr,0);break;case'shadowdy':dy=a.getFloat(attr,0);break;case'shadowradius':r=a.getFloat(attr,0);break;case'enabled':_this98.setEnabled(a.getBoolean(attr,_this98.isEnabled()));break;case'textcolorhighlight':textColorHighlight=a.getColor(attr,textColorHighlight);break;case'textcolor':textColor=a.getColorStateList(attr);break;case'textcolorhint':textColorHint=a.getColorStateList(attr);break;case'textcolorlink':textColorLink=a.getColorStateList(attr);break;case'textsize':textSize=a.getDimensionPixelSize(attr,textSize);break;case'typeface':break;case'textstyle':break;case'fontfamily':break;case'password':break;case'linespacingextra':_this98.mSpacingAdd=a.getDimensionPixelSize(attr,Math.floor(_this98.mSpacingAdd));break;case'linespacingmultiplier':_this98.mSpacingMult=a.getFloat(attr,_this98.mSpacingMult);break;case'inputtype':break;case'imeoptions':break;case'imeactionlabel':break;case'imeactionid':break;case'privateimeoptions':break;case'editorextras':break;case'textcursordrawable':break;case'textselecthandleleft':break;case'textselecthandleright':break;case'textselecthandle':break;case'texteditsuggestionitemlayout':break;case'textisselectable':_this98.setTextIsSelectable(a.getBoolean(attr,false));break;case'textallcaps':allCaps=a.getBoolean(attr,false);break;}}}catch(err){_didIteratorError66=true;_iteratorError66=err;}finally{try{if(!_iteratorNormalCompletion66&&_iterator66.return){_iterator66.return();}}finally{if(_didIteratorError66){throw _iteratorError66;}}}a.recycle();var bufferType=_this98.mBufferType;_this98.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,drawableTop,drawableRight,drawableBottom);_this98.setRelativeDrawablesIfNeeded(drawableStart,drawableEnd);_this98.setCompoundDrawablePadding(drawablePadding);_this98.setInputTypeSingleLine(singleLine);_this98.applySingleLine(singleLine,singleLine,singleLine);if(singleLine&&_this98.getKeyListener()==null&&ellipsize==null){ellipsize=TextUtils.TruncateAt.END;}switch(ellipsize){case TextUtils.TruncateAt.START:_this98.setEllipsize(TextUtils.TruncateAt.START);break;case TextUtils.TruncateAt.MIDDLE:_this98.setEllipsize(TextUtils.TruncateAt.MIDDLE);break;case TextUtils.TruncateAt.END:_this98.setEllipsize(TextUtils.TruncateAt.END);break;case TextUtils.TruncateAt.MARQUEE:_this98.setHorizontalFadingEdgeEnabled(false);_this98.mMarqueeFadeMode=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;_this98.setEllipsize(TextUtils.TruncateAt.MARQUEE);break;}_this98.setTextColor(textColor!=null?textColor:ColorStateList.valueOf(0xFF000000));_this98.setHintTextColor(textColorHint);_this98.setLinkTextColor(textColorLink);if(textColorHighlight!=0){_this98.setHighlightColor(textColorHighlight);}_this98.setRawTextSize(textSize);if(allCaps){_this98.setTransformationMethod(new AllCapsTransformationMethod(_this98.getContext()));}if(shadowcolor!=0){_this98.setShadowLayer(r,dx,dy,shadowcolor);}_this98.setText(text,bufferType);if(hint!=null)_this98.setHint(hint);return _this98;}_createClass(TextView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'createClassAttrBinder',this).call(this).set('textColorHighlight',{setter:function setter(v,value,attrBinder){v.setHighlightColor(attrBinder.parseColor(value,v.mHighlightColor));},getter:function getter(v){return v.getHighlightColor();}}).set('textColor',{setter:function setter(v,value,attrBinder){var color=attrBinder.parseColorList(value);if(color)v.setTextColor(color);},getter:function getter(v){return v.mTextColor;}}).set('textColorHint',{setter:function setter(v,value,attrBinder){var color=attrBinder.parseColorList(value);if(color)v.setHintTextColor(color);},getter:function getter(v){return v.mHintTextColor;}}).set('textSize',{setter:function setter(v,value,attrBinder){var size=attrBinder.parseNumberPixelSize(value,v.mTextPaint.getTextSize());v.setTextSize(TypedValue.COMPLEX_UNIT_PX,size);},getter:function getter(v){return v.mTextPaint.getTextSize();}}).set('textAllCaps',{setter:function setter(v,value,attrBinder){v.setAllCaps(attrBinder.parseBoolean(value,true));}}).set('shadowColor',{setter:function setter(v,value,attrBinder){v.setShadowLayer(v.mShadowRadius,v.mShadowDx,v.mShadowDy,attrBinder.parseColor(value,v.mTextPaint.shadowColor));},getter:function getter(v){return v.getShadowColor();}}).set('shadowDx',{setter:function setter(v,value,attrBinder){var dx=attrBinder.parseNumberPixelSize(value,v.mShadowDx);v.setShadowLayer(v.mShadowRadius,dx,v.mShadowDy,v.mTextPaint.shadowColor);},getter:function getter(v){return v.getShadowDx();}}).set('shadowDy',{setter:function setter(v,value,attrBinder){var dy=attrBinder.parseNumberPixelSize(value,v.mShadowDy);v.setShadowLayer(v.mShadowRadius,v.mShadowDx,dy,v.mTextPaint.shadowColor);},getter:function getter(v){return v.getShadowDy();}}).set('shadowRadius',{setter:function setter(v,value,attrBinder){var radius=attrBinder.parseNumberPixelSize(value,v.mShadowRadius);v.setShadowLayer(radius,v.mShadowDx,v.mShadowDy,v.mTextPaint.shadowColor);},getter:function getter(v){return v.getShadowRadius();}}).set('drawableLeft',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(drawable,dr.mDrawableTop,dr.mDrawableRight,dr.mDrawableBottom);},getter:function getter(v){return v.getCompoundDrawables()[0];}}).set('drawableStart',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(drawable,dr.mDrawableTop,dr.mDrawableRight,dr.mDrawableBottom);},getter:function getter(v){return v.getCompoundDrawables()[0];}}).set('drawableTop',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft,drawable,dr.mDrawableRight,dr.mDrawableBottom);},getter:function getter(v){return v.getCompoundDrawables()[1];}}).set('drawableRight',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft,dr.mDrawableTop,drawable,dr.mDrawableBottom);},getter:function getter(v){return v.getCompoundDrawables()[2];}}).set('drawableEnd',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft,dr.mDrawableTop,drawable,dr.mDrawableBottom);},getter:function getter(v){return v.getCompoundDrawables()[2];}}).set('drawableBottom',{setter:function setter(v,value,attrBinder){var dr=v.mDrawables||{};var drawable=attrBinder.parseDrawable(value);v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft,dr.mDrawableTop,dr.mDrawableRight,drawable);},getter:function getter(v){return v.getCompoundDrawables()[3];}}).set('drawablePadding',{setter:function setter(v,value,attrBinder){v.setCompoundDrawablePadding(attrBinder.parseNumberPixelSize(value));},getter:function getter(v){return v.getCompoundDrawablePadding();}}).set('maxLines',{setter:function setter(v,value,attrBinder){value=Number.parseInt(value);if(Number.isInteger(value))v.setMaxLines(value);},getter:function getter(v){return v.getMaxLines();}}).set('maxHeight',{setter:function setter(v,value,attrBinder){v.setMaxHeight(attrBinder.parseNumberPixelSize(value,v.getMaxHeight()));},getter:function getter(v){return v.getMaxHeight();}}).set('lines',{setter:function setter(v,value,attrBinder){value=Number.parseInt(value);if(Number.isInteger(value))v.setLines(value);},getter:function getter(v){if(v.getMaxLines()===v.getMinLines())return v.getMaxLines();return null;}}).set('height',{setter:function setter(v,value,attrBinder){value=attrBinder.parseNumberPixelSize(value,-1);if(value>=0)v.setHeight(value);},getter:function getter(v){if(v.getMaxHeight()===v.getMinimumHeight())return v.getMaxHeight();return null;}}).set('minLines',{setter:function setter(v,value,attrBinder){v.setMinLines(attrBinder.parseInt(value,v.getMinLines()));},getter:function getter(v){return v.getMinLines();}}).set('minHeight',{setter:function setter(v,value,attrBinder){v.setMinHeight(attrBinder.parseNumberPixelSize(value,v.getMinHeight()));},getter:function getter(v){return v.getMinHeight();}}).set('maxEms',{setter:function setter(v,value,attrBinder){v.setMaxEms(attrBinder.parseInt(value,v.getMaxEms()));},getter:function getter(v){return v.getMaxEms();}}).set('maxWidth',{setter:function setter(v,value,attrBinder){v.setMaxWidth(attrBinder.parseNumberPixelSize(value,v.getMaxWidth()));},getter:function getter(v){return v.getMaxWidth();}}).set('ems',{setter:function setter(v,value,attrBinder){var ems=attrBinder.parseInt(value,null);if(ems!=null)v.setEms(ems);},getter:function getter(v){if(v.getMinEms()===v.getMaxEms())return v.getMaxEms();return null;}}).set('width',{setter:function setter(v,value,attrBinder){value=attrBinder.parseNumberPixelSize(value,-1);if(value>=0)v.setWidth(value);},getter:function getter(v){if(v.getMinWidth()===v.getMaxWidth())return v.getMinWidth();return null;}}).set('minEms',{setter:function setter(v,value,attrBinder){v.setMinEms(attrBinder.parseInt(value,v.getMinEms()));},getter:function getter(v){return v.getMinEms();}}).set('minWidth',{setter:function setter(v,value,attrBinder){v.setMinWidth(attrBinder.parseNumberPixelSize(value,v.getMinWidth()));},getter:function getter(v){return v.getMinWidth();}}).set('gravity',{setter:function setter(v,value,attrBinder){v.setGravity(attrBinder.parseGravity(value,v.mGravity));},getter:function getter(v){return v.mGravity;}}).set('hint',{setter:function setter(v,value,attrBinder){v.setHint(attrBinder.parseString(value));},getter:function getter(v){return v.getHint();}}).set('text',{setter:function setter(v,value,attrBinder){v.setText(attrBinder.parseString(value));},getter:function getter(v){return v.getText();}}).set('scrollHorizontally',{setter:function setter(v,value,attrBinder){v.setHorizontallyScrolling(attrBinder.parseBoolean(value,false));}}).set('singleLine',{setter:function setter(v,value,attrBinder){v.setSingleLine(attrBinder.parseBoolean(value,false));}}).set('ellipsize',{setter:function setter(v,value,attrBinder){var ellipsize=TextUtils.TruncateAt[(value+'').toUpperCase()];if(ellipsize)v.setEllipsize(ellipsize);}}).set('marqueeRepeatLimit',{setter:function setter(v,value,attrBinder){var marqueeRepeatLimit=attrBinder.parseInt(value,-1);if(marqueeRepeatLimit>=0)v.setMarqueeRepeatLimit(marqueeRepeatLimit);}}).set('includeFontPadding',{setter:function setter(v,value,attrBinder){v.setIncludeFontPadding(attrBinder.parseBoolean(value,false));}}).set('enabled',{setter:function setter(v,value,attrBinder){v.setEnabled(attrBinder.parseBoolean(value,v.isEnabled()));},getter:function getter(v){return v.isEnabled();}}).set('lineSpacingExtra',{setter:function setter(v,value,attrBinder){v.setLineSpacing(attrBinder.parseNumberPixelSize(value,v.mSpacingAdd),v.mSpacingMult);},getter:function getter(v){return v.mSpacingAdd;}}).set('lineSpacingMultiplier',{setter:function setter(v,value,attrBinder){v.setLineSpacing(v.mSpacingAdd,attrBinder.parseFloat(value,v.mSpacingMult));},getter:function getter(v){return v.mSpacingMult;}});}},{key:'setTypefaceFromAttrs',value:function setTypefaceFromAttrs(familyName,typefaceIndex,styleIndex){}},{key:'setRelativeDrawablesIfNeeded',value:function setRelativeDrawablesIfNeeded(start,end){var hasRelativeDrawables=start!=null||end!=null;if(hasRelativeDrawables){var dr=this.mDrawables;if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=true;var compoundRect=dr.mCompoundRect;var state=this.getDrawableState();if(start!=null){start.setBounds(0,0,start.getIntrinsicWidth(),start.getIntrinsicHeight());start.setState(state);start.copyBounds(compoundRect);start.setCallback(this);dr.mDrawableStart=start;dr.mDrawableSizeStart=compoundRect.width();dr.mDrawableHeightStart=compoundRect.height();}else{dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;}if(end!=null){end.setBounds(0,0,end.getIntrinsicWidth(),end.getIntrinsicHeight());end.setState(state);end.copyBounds(compoundRect);end.setCallback(this);dr.mDrawableEnd=end;dr.mDrawableSizeEnd=compoundRect.width();dr.mDrawableHeightEnd=compoundRect.height();}else{dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;}this.resetResolvedDrawables();this.resolveDrawables();}}},{key:'setEnabled',value:function setEnabled(enabled){if(enabled==this.isEnabled()){return;}_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'setEnabled',this).call(this,enabled);}},{key:'setTypeface',value:function setTypeface(tf,style){}},{key:'getDefaultEditable',value:function getDefaultEditable(){return false;}},{key:'getDefaultMovementMethod',value:function getDefaultMovementMethod(){return null;}},{key:'getText',value:function getText(){return this.mText;}},{key:'length',value:function length(){return this.mText.length;}},{key:'getEditableText',value:function getEditableText(){return null;}},{key:'getLineHeight',value:function getLineHeight(){return Math.round(this.mTextPaint.getFontMetricsInt(null)*this.mSpacingMult+this.mSpacingAdd);}},{key:'getLayout',value:function getLayout(){return this.mLayout;}},{key:'getHintLayout',value:function getHintLayout(){return this.mHintLayout;}},{key:'getUndoManager',value:function getUndoManager(){return null;}},{key:'setUndoManager',value:function setUndoManager(undoManager,tag){}},{key:'getKeyListener',value:function getKeyListener(){return null;}},{key:'setKeyListener',value:function setKeyListener(input){}},{key:'setKeyListenerOnly',value:function setKeyListenerOnly(input){}},{key:'getMovementMethod',value:function getMovementMethod(){return this.mMovement;}},{key:'setMovementMethod',value:function setMovementMethod(movement){if(this.mMovement!=movement){this.mMovement=movement;if(movement!=null&&!Spannable.isImpl(this.mText)){this.setText(this.mText);}this.fixFocusableAndClickableSettings();}}},{key:'fixFocusableAndClickableSettings',value:function fixFocusableAndClickableSettings(){if(this.mMovement!=null){this.setFocusable(true);this.setClickable(true);this.setLongClickable(true);}else{this.setFocusable(false);this.setClickable(false);this.setLongClickable(false);}}},{key:'getTransformationMethod',value:function getTransformationMethod(){return this.mTransformation;}},{key:'setTransformationMethod',value:function setTransformationMethod(method){if(method==this.mTransformation){return;}if(this.mTransformation!=null){if(Spannable.isImpl(this.mText)){this.mText.removeSpan(this.mTransformation);}}this.mTransformation=method;if(TransformationMethod2.isImpl(method)){var method2=method;this.mAllowTransformationLengthChange=!this.isTextSelectable();method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange);}else{this.mAllowTransformationLengthChange=false;}this.setText(this.mText);}},{key:'getCompoundPaddingTop',value:function getCompoundPaddingTop(){var dr=this.mDrawables;if(dr==null||dr.mDrawableTop==null){return this.mPaddingTop;}else{return this.mPaddingTop+dr.mDrawablePadding+dr.mDrawableSizeTop;}}},{key:'getCompoundPaddingBottom',value:function getCompoundPaddingBottom(){var dr=this.mDrawables;if(dr==null||dr.mDrawableBottom==null){return this.mPaddingBottom;}else{return this.mPaddingBottom+dr.mDrawablePadding+dr.mDrawableSizeBottom;}}},{key:'getCompoundPaddingLeft',value:function getCompoundPaddingLeft(){var dr=this.mDrawables;if(dr==null||dr.mDrawableLeft==null){return this.mPaddingLeft;}else{return this.mPaddingLeft+dr.mDrawablePadding+dr.mDrawableSizeLeft;}}},{key:'getCompoundPaddingRight',value:function getCompoundPaddingRight(){var dr=this.mDrawables;if(dr==null||dr.mDrawableRight==null){return this.mPaddingRight;}else{return this.mPaddingRight+dr.mDrawablePadding+dr.mDrawableSizeRight;}}},{key:'getCompoundPaddingStart',value:function getCompoundPaddingStart(){this.resolveDrawables();return this.getCompoundPaddingLeft();}},{key:'getCompoundPaddingEnd',value:function getCompoundPaddingEnd(){this.resolveDrawables();return this.getCompoundPaddingRight();}},{key:'getExtendedPaddingTop',value:function getExtendedPaddingTop(){if(this.mMaxMode!=TextView.LINES){return this.getCompoundPaddingTop();}if(this.mLayout.getLineCount()<=this.mMaximum){return this.getCompoundPaddingTop();}var top=this.getCompoundPaddingTop();var bottom=this.getCompoundPaddingBottom();var viewht=this.getHeight()-top-bottom;var layoutht=this.mLayout.getLineTop(this.mMaximum);if(layoutht>=viewht){return top;}var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;if(gravity==Gravity.TOP){return top;}else if(gravity==Gravity.BOTTOM){return top+viewht-layoutht;}else{return top+(viewht-layoutht)/2;}}},{key:'getExtendedPaddingBottom',value:function getExtendedPaddingBottom(){if(this.mMaxMode!=TextView.LINES){return this.getCompoundPaddingBottom();}if(this.mLayout.getLineCount()<=this.mMaximum){return this.getCompoundPaddingBottom();}var top=this.getCompoundPaddingTop();var bottom=this.getCompoundPaddingBottom();var viewht=this.getHeight()-top-bottom;var layoutht=this.mLayout.getLineTop(this.mMaximum);if(layoutht>=viewht){return bottom;}var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;if(gravity==Gravity.TOP){return bottom+viewht-layoutht;}else if(gravity==Gravity.BOTTOM){return bottom;}else{return bottom+(viewht-layoutht)/2;}}},{key:'getTotalPaddingLeft',value:function getTotalPaddingLeft(){return this.getCompoundPaddingLeft();}},{key:'getTotalPaddingRight',value:function getTotalPaddingRight(){return this.getCompoundPaddingRight();}},{key:'getTotalPaddingStart',value:function getTotalPaddingStart(){return this.getCompoundPaddingStart();}},{key:'getTotalPaddingEnd',value:function getTotalPaddingEnd(){return this.getCompoundPaddingEnd();}},{key:'getTotalPaddingTop',value:function getTotalPaddingTop(){return this.getExtendedPaddingTop()+this.getVerticalOffset(true);}},{key:'getTotalPaddingBottom',value:function getTotalPaddingBottom(){return this.getExtendedPaddingBottom()+this.getBottomVerticalOffset(true);}},{key:'setCompoundDrawables',value:function setCompoundDrawables(left,top,right,bottom){var dr=this.mDrawables;var drawables=left!=null||top!=null||right!=null||bottom!=null;if(!drawables){if(dr!=null){if(dr.mDrawablePadding==0){this.mDrawables=null;}else{if(dr.mDrawableLeft!=null){dr.mDrawableLeft.setCallback(null);}dr.mDrawableLeft=null;if(dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=null;if(dr.mDrawableRight!=null){dr.mDrawableRight.setCallback(null);}dr.mDrawableRight=null;if(dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=null;dr.mDrawableSizeLeft=dr.mDrawableHeightLeft=0;dr.mDrawableSizeRight=dr.mDrawableHeightRight=0;dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}}else{if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=false;if(dr.mDrawableLeft!=left&&dr.mDrawableLeft!=null){dr.mDrawableLeft.setCallback(null);}dr.mDrawableLeft=left;if(dr.mDrawableTop!=top&&dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=top;if(dr.mDrawableRight!=right&&dr.mDrawableRight!=null){dr.mDrawableRight.setCallback(null);}dr.mDrawableRight=right;if(dr.mDrawableBottom!=bottom&&dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=bottom;var compoundRect=dr.mCompoundRect;var state=void 0;state=this.getDrawableState();if(left!=null){left.setState(state);left.copyBounds(compoundRect);left.setCallback(this);dr.mDrawableSizeLeft=compoundRect.width();dr.mDrawableHeightLeft=compoundRect.height();}else{dr.mDrawableSizeLeft=dr.mDrawableHeightLeft=0;}if(right!=null){right.setState(state);right.copyBounds(compoundRect);right.setCallback(this);dr.mDrawableSizeRight=compoundRect.width();dr.mDrawableHeightRight=compoundRect.height();}else{dr.mDrawableSizeRight=dr.mDrawableHeightRight=0;}if(top!=null){top.setState(state);top.copyBounds(compoundRect);top.setCallback(this);dr.mDrawableSizeTop=compoundRect.height();dr.mDrawableWidthTop=compoundRect.width();}else{dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;}if(bottom!=null){bottom.setState(state);bottom.copyBounds(compoundRect);bottom.setCallback(this);dr.mDrawableSizeBottom=compoundRect.height();dr.mDrawableWidthBottom=compoundRect.width();}else{dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}if(dr!=null){dr.mDrawableLeftInitial=left;dr.mDrawableRightInitial=right;}this.resetResolvedDrawables();this.resolveDrawables();this.invalidate();this.requestLayout();}},{key:'setCompoundDrawablesWithIntrinsicBounds',value:function setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom){if(left!=null){left.setBounds(0,0,left.getIntrinsicWidth(),left.getIntrinsicHeight());}if(right!=null){right.setBounds(0,0,right.getIntrinsicWidth(),right.getIntrinsicHeight());}if(top!=null){top.setBounds(0,0,top.getIntrinsicWidth(),top.getIntrinsicHeight());}if(bottom!=null){bottom.setBounds(0,0,bottom.getIntrinsicWidth(),bottom.getIntrinsicHeight());}this.setCompoundDrawables(left,top,right,bottom);}},{key:'setCompoundDrawablesRelative',value:function setCompoundDrawablesRelative(start,top,end,bottom){var dr=this.mDrawables;var drawables=start!=null||top!=null||end!=null||bottom!=null;if(!drawables){if(dr!=null){if(dr.mDrawablePadding==0){this.mDrawables=null;}else{if(dr.mDrawableStart!=null){dr.mDrawableStart.setCallback(null);}dr.mDrawableStart=null;if(dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=null;if(dr.mDrawableEnd!=null){dr.mDrawableEnd.setCallback(null);}dr.mDrawableEnd=null;if(dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=null;dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}}else{if(dr==null){this.mDrawables=dr=new TextView.Drawables();}this.mDrawables.mOverride=true;if(dr.mDrawableStart!=start&&dr.mDrawableStart!=null){dr.mDrawableStart.setCallback(null);}dr.mDrawableStart=start;if(dr.mDrawableTop!=top&&dr.mDrawableTop!=null){dr.mDrawableTop.setCallback(null);}dr.mDrawableTop=top;if(dr.mDrawableEnd!=end&&dr.mDrawableEnd!=null){dr.mDrawableEnd.setCallback(null);}dr.mDrawableEnd=end;if(dr.mDrawableBottom!=bottom&&dr.mDrawableBottom!=null){dr.mDrawableBottom.setCallback(null);}dr.mDrawableBottom=bottom;var compoundRect=dr.mCompoundRect;var state=void 0;state=this.getDrawableState();if(start!=null){start.setState(state);start.copyBounds(compoundRect);start.setCallback(this);dr.mDrawableSizeStart=compoundRect.width();dr.mDrawableHeightStart=compoundRect.height();}else{dr.mDrawableSizeStart=dr.mDrawableHeightStart=0;}if(end!=null){end.setState(state);end.copyBounds(compoundRect);end.setCallback(this);dr.mDrawableSizeEnd=compoundRect.width();dr.mDrawableHeightEnd=compoundRect.height();}else{dr.mDrawableSizeEnd=dr.mDrawableHeightEnd=0;}if(top!=null){top.setState(state);top.copyBounds(compoundRect);top.setCallback(this);dr.mDrawableSizeTop=compoundRect.height();dr.mDrawableWidthTop=compoundRect.width();}else{dr.mDrawableSizeTop=dr.mDrawableWidthTop=0;}if(bottom!=null){bottom.setState(state);bottom.copyBounds(compoundRect);bottom.setCallback(this);dr.mDrawableSizeBottom=compoundRect.height();dr.mDrawableWidthBottom=compoundRect.width();}else{dr.mDrawableSizeBottom=dr.mDrawableWidthBottom=0;}}this.resetResolvedDrawables();this.resolveDrawables();this.invalidate();this.requestLayout();}},{key:'setCompoundDrawablesRelativeWithIntrinsicBounds',value:function setCompoundDrawablesRelativeWithIntrinsicBounds(start,top,end,bottom){if(start!=null){start.setBounds(0,0,start.getIntrinsicWidth(),start.getIntrinsicHeight());}if(end!=null){end.setBounds(0,0,end.getIntrinsicWidth(),end.getIntrinsicHeight());}if(top!=null){top.setBounds(0,0,top.getIntrinsicWidth(),top.getIntrinsicHeight());}if(bottom!=null){bottom.setBounds(0,0,bottom.getIntrinsicWidth(),bottom.getIntrinsicHeight());}this.setCompoundDrawablesRelative(start,top,end,bottom);}},{key:'getCompoundDrawables',value:function getCompoundDrawables(){var dr=this.mDrawables;if(dr!=null){return[dr.mDrawableLeft,dr.mDrawableTop,dr.mDrawableRight,dr.mDrawableBottom];}else{return[null,null,null,null];}}},{key:'getCompoundDrawablesRelative',value:function getCompoundDrawablesRelative(){var dr=this.mDrawables;if(dr!=null){return[dr.mDrawableStart,dr.mDrawableTop,dr.mDrawableEnd,dr.mDrawableBottom];}else{return[null,null,null,null];}}},{key:'setCompoundDrawablePadding',value:function setCompoundDrawablePadding(pad){var dr=this.mDrawables;if(pad==0){if(dr!=null){dr.mDrawablePadding=pad;}}else{if(dr==null){this.mDrawables=dr=new TextView.Drawables();}dr.mDrawablePadding=pad;}this.invalidate();this.requestLayout();}},{key:'getCompoundDrawablePadding',value:function getCompoundDrawablePadding(){var dr=this.mDrawables;return dr!=null?dr.mDrawablePadding:0;}},{key:'setPadding',value:function setPadding(left,top,right,bottom){if(left!=this.mPaddingLeft||right!=this.mPaddingRight||top!=this.mPaddingTop||bottom!=this.mPaddingBottom){this.nullLayouts();}_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'setPadding',this).call(this,left,top,right,bottom);this.invalidate();}},{key:'getAutoLinkMask',value:function getAutoLinkMask(){return this.mAutoLinkMask;}},{key:'getTextLocale',value:function getTextLocale(){return null;}},{key:'setTextLocale',value:function setTextLocale(locale){}},{key:'getTextSize',value:function getTextSize(){return this.mTextPaint.getTextSize();}},{key:'setTextSize',value:function setTextSize(){for(var _len25=arguments.length,args=Array(_len25),_key26=0;_key26<_len25;_key26++){args[_key26]=arguments[_key26];}if(args.length==1){this.setTextSize(TypedValue.COMPLEX_UNIT_SP,args[0]);return;}var unit=args[0],size=args[1];this.setRawTextSize(TypedValue.applyDimension(unit,size,this.getResources().getDisplayMetrics()));}},{key:'setRawTextSize',value:function setRawTextSize(size){if(size!=this.mTextPaint.getTextSize()){this.mTextPaint.setTextSize(size);if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getTextScaleX',value:function getTextScaleX(){return 1;}},{key:'setTextScaleX',value:function setTextScaleX(size){}},{key:'getTypeface',value:function getTypeface(){return null;}},{key:'setTextColor',value:function setTextColor(colors){if(typeof colors==='number'){colors=ColorStateList.valueOf(colors);}if(colors==null){throw Error('new NullPointerException()');}this.mTextColor=colors;this.updateTextColors();}},{key:'getTextColors',value:function getTextColors(){return this.mTextColor;}},{key:'getCurrentTextColor',value:function getCurrentTextColor(){return this.mCurTextColor;}},{key:'setHighlightColor',value:function setHighlightColor(color){if(this.mHighlightColor!=color){this.mHighlightColor=color;this.invalidate();}}},{key:'getHighlightColor',value:function getHighlightColor(){return this.mHighlightColor;}},{key:'setShowSoftInputOnFocus',value:function setShowSoftInputOnFocus(show){this.createEditorIfNeeded();}},{key:'getShowSoftInputOnFocus',value:function getShowSoftInputOnFocus(){return false;}},{key:'setShadowLayer',value:function setShadowLayer(radius,dx,dy,color){this.mTextPaint.setShadowLayer(radius,dx,dy,color);this.mShadowRadius=radius;this.mShadowDx=dx;this.mShadowDy=dy;this.invalidate();}},{key:'getShadowRadius',value:function getShadowRadius(){return this.mShadowRadius;}},{key:'getShadowDx',value:function getShadowDx(){return this.mShadowDx;}},{key:'getShadowDy',value:function getShadowDy(){return this.mShadowDy;}},{key:'getShadowColor',value:function getShadowColor(){return this.mTextPaint.shadowColor;}},{key:'getPaint',value:function getPaint(){return this.mTextPaint;}},{key:'setAutoLinkMask',value:function setAutoLinkMask(mask){this.mAutoLinkMask=mask;}},{key:'setLinksClickable',value:function setLinksClickable(whether){this.mLinksClickable=whether;}},{key:'getLinksClickable',value:function getLinksClickable(){return this.mLinksClickable;}},{key:'getUrls',value:function getUrls(){return new Array(0);}},{key:'setHintTextColor',value:function setHintTextColor(colors){if(typeof colors==='number'){colors=ColorStateList.valueOf(colors);}this.mHintTextColor=colors;this.updateTextColors();}},{key:'getHintTextColors',value:function getHintTextColors(){return this.mHintTextColor;}},{key:'getCurrentHintTextColor',value:function getCurrentHintTextColor(){return this.mHintTextColor!=null?this.mCurHintTextColor:this.mCurTextColor;}},{key:'setLinkTextColor',value:function setLinkTextColor(colors){if(typeof colors==='number'){colors=ColorStateList.valueOf(colors);}this.mLinkTextColor=colors;this.updateTextColors();}},{key:'getLinkTextColors',value:function getLinkTextColors(){return this.mLinkTextColor;}},{key:'setGravity',value:function setGravity(gravity){if((gravity&Gravity.HORIZONTAL_GRAVITY_MASK)==0){gravity|=Gravity.LEFT;}if((gravity&Gravity.VERTICAL_GRAVITY_MASK)==0){gravity|=Gravity.TOP;}var newLayout=false;if((gravity&Gravity.HORIZONTAL_GRAVITY_MASK)!=(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK)){newLayout=true;}if(gravity!=this.mGravity){this.invalidate();}this.mGravity=gravity;if(this.mLayout!=null&&newLayout){var want=this.mLayout.getWidth();var hintWant=this.mHintLayout==null?0:this.mHintLayout.getWidth();this.makeNewLayout(want,hintWant,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),true);}}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'getPaintFlags',value:function getPaintFlags(){return this.mTextPaint.getFlags();}},{key:'setPaintFlags',value:function setPaintFlags(flags){if(this.mTextPaint.getFlags()!=flags){this.mTextPaint.setFlags(flags);if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'setHorizontallyScrolling',value:function setHorizontallyScrolling(whether){if(this.mHorizontallyScrolling!=whether){this.mHorizontallyScrolling=whether;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getHorizontallyScrolling',value:function getHorizontallyScrolling(){return this.mHorizontallyScrolling;}},{key:'setMinLines',value:function setMinLines(minlines){this.mMinimum=minlines;this.mMinMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'getMinLines',value:function getMinLines(){return this.mMinMode==TextView.LINES?this.mMinimum:-1;}},{key:'setMinHeight',value:function setMinHeight(minHeight){this.mMinimum=minHeight;this.mMinMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMinHeight',value:function getMinHeight(){return this.mMinMode==TextView.PIXELS?this.mMinimum:-1;}},{key:'setMaxLines',value:function setMaxLines(maxlines){this.mMaximum=maxlines;this.mMaxMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'getMaxLines',value:function getMaxLines(){return this.mMaxMode==TextView.LINES?this.mMaximum:-1;}},{key:'setMaxHeight',value:function setMaxHeight(maxHeight){this.mMaximum=maxHeight;this.mMaxMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMaxHeight',value:function getMaxHeight(){return this.mMaxMode==TextView.PIXELS?this.mMaximum:-1;}},{key:'setLines',value:function setLines(lines){this.mMaximum=this.mMinimum=lines;this.mMaxMode=this.mMinMode=TextView.LINES;this.requestLayout();this.invalidate();}},{key:'setHeight',value:function setHeight(pixels){this.mMaximum=this.mMinimum=pixels;this.mMaxMode=this.mMinMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'setMinEms',value:function setMinEms(minems){this.mMinWidthValue=minems;this.mMinWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'getMinEms',value:function getMinEms(){return this.mMinWidthMode==TextView.EMS?this.mMinWidthValue:-1;}},{key:'setMinWidth',value:function setMinWidth(minpixels){this.mMinWidthValue=minpixels;this.mMinWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMinWidth',value:function getMinWidth(){return this.mMinWidthMode==TextView.PIXELS?this.mMinWidthValue:-1;}},{key:'setMaxEms',value:function setMaxEms(maxems){this.mMaxWidthValue=maxems;this.mMaxWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'getMaxEms',value:function getMaxEms(){return this.mMaxWidthMode==TextView.EMS?this.mMaxWidthValue:-1;}},{key:'setMaxWidth',value:function setMaxWidth(maxpixels){this.mMaxWidthValue=maxpixels;this.mMaxWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'getMaxWidth',value:function getMaxWidth(){return this.mMaxWidthMode==TextView.PIXELS?this.mMaxWidthValue:-1;}},{key:'setEms',value:function setEms(ems){this.mMaxWidthValue=this.mMinWidthValue=ems;this.mMaxWidthMode=this.mMinWidthMode=TextView.EMS;this.requestLayout();this.invalidate();}},{key:'setWidth',value:function setWidth(pixels){this.mMaxWidthValue=this.mMinWidthValue=pixels;this.mMaxWidthMode=this.mMinWidthMode=TextView.PIXELS;this.requestLayout();this.invalidate();}},{key:'setLineSpacing',value:function setLineSpacing(add,mult){if(this.mSpacingAdd!=add||this.mSpacingMult!=mult){this.mSpacingAdd=add;this.mSpacingMult=mult;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getLineSpacingMultiplier',value:function getLineSpacingMultiplier(){return this.mSpacingMult;}},{key:'getLineSpacingExtra',value:function getLineSpacingExtra(){return this.mSpacingAdd;}},{key:'updateTextColors',value:function updateTextColors(){var inval=false;var color=this.mTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mCurTextColor){this.mCurTextColor=color;inval=true;}if(this.mLinkTextColor!=null){color=this.mLinkTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mTextPaint.linkColor){this.mTextPaint.linkColor=color;inval=true;}}if(this.mHintTextColor!=null){color=this.mHintTextColor.getColorForState(this.getDrawableState(),0);if(color!=this.mCurHintTextColor&&this.mText.length==0){this.mCurHintTextColor=color;inval=true;}}if(inval){this.invalidate();}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'drawableStateChanged',this).call(this);if(this.mTextColor!=null&&this.mTextColor.isStateful()||this.mHintTextColor!=null&&this.mHintTextColor.isStateful()||this.mLinkTextColor!=null&&this.mLinkTextColor.isStateful()){this.updateTextColors();}var dr=this.mDrawables;if(dr!=null){var state=this.getDrawableState();if(dr.mDrawableTop!=null&&dr.mDrawableTop.isStateful()){dr.mDrawableTop.setState(state);}if(dr.mDrawableBottom!=null&&dr.mDrawableBottom.isStateful()){dr.mDrawableBottom.setState(state);}if(dr.mDrawableLeft!=null&&dr.mDrawableLeft.isStateful()){dr.mDrawableLeft.setState(state);}if(dr.mDrawableRight!=null&&dr.mDrawableRight.isStateful()){dr.mDrawableRight.setState(state);}if(dr.mDrawableStart!=null&&dr.mDrawableStart.isStateful()){dr.mDrawableStart.setState(state);}if(dr.mDrawableEnd!=null&&dr.mDrawableEnd.isStateful()){dr.mDrawableEnd.setState(state);}}}},{key:'removeMisspelledSpans',value:function removeMisspelledSpans(spannable){}},{key:'setFreezesText',value:function setFreezesText(freezesText){this.mFreezesText=freezesText;}},{key:'getFreezesText',value:function getFreezesText(){return this.mFreezesText;}},{key:'setSpannableFactory',value:function setSpannableFactory(factory){this.mSpannableFactory=factory;this.setText(this.mText);}},{key:'setText',value:function setText(text){var type=arguments.length>1&&arguments[1]!==undefined?arguments[1]:this.mBufferType;var notifyBefore=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var oldlen=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(text==null){text="";}if(!this.isSuggestionsEnabled()){text=this.removeSuggestionSpans(text);}if(Spanned.isImplements(text)&&text.getSpanStart(TextUtils.TruncateAt.MARQUEE)>=0){this.setHorizontalFadingEdgeEnabled(true);this.mMarqueeFadeMode=TextView.MARQUEE_FADE_NORMAL;this.setEllipsize(TextUtils.TruncateAt.MARQUEE);}if(notifyBefore){if(this.mText!=null){oldlen=this.mText.length;this.sendBeforeTextChanged(this.mText,0,oldlen,text.length);}else{this.sendBeforeTextChanged("",0,0,text.length);}}var needEditableForNotification=false;if(this.mListeners!=null&&this.mListeners.size()!=0){needEditableForNotification=true;}if(type==TextView.BufferType.SPANNABLE||this.mMovement!=null){text=this.mSpannableFactory.newSpannable(text);}this.mBufferType=type;this.mText=text;if(this.mTransformation==null){this.mTransformed=text;}else{this.mTransformed=this.mTransformation.getTransformation(text,this);}var textLength=text.length;if(this.mLayout!=null){this.checkForRelayout();}this.sendOnTextChanged(text,0,oldlen,textLength);this.onTextChanged(text,0,oldlen,textLength);}},{key:'setHint',value:function setHint(hint){this.mHint=hint;if(this.mLayout!=null){this.checkForRelayout();}if(this.mText.length==0){this.invalidate();}}},{key:'getHint',value:function getHint(){return this.mHint;}},{key:'isSingleLine',value:function isSingleLine(){return this.mSingleLine;}},{key:'removeSuggestionSpans',value:function removeSuggestionSpans(text){return text;}},{key:'hasPasswordTransformationMethod',value:function hasPasswordTransformationMethod(){return false;}},{key:'setRawInputType',value:function setRawInputType(type){}},{key:'setInputType',value:function setInputType(type){var direct=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;}},{key:'getInputType',value:function getInputType(){return 0;}},{key:'setImeOptions',value:function setImeOptions(imeOptions){}},{key:'getImeOptions',value:function getImeOptions(){return-1;}},{key:'setImeActionLabel',value:function setImeActionLabel(label,actionId){this.createEditorIfNeeded();}},{key:'getImeActionLabel',value:function getImeActionLabel(){return'';}},{key:'getImeActionId',value:function getImeActionId(){return 0;}},{key:'setOnEditorActionListener',value:function setOnEditorActionListener(l){this.createEditorIfNeeded();}},{key:'setFrame',value:function setFrame(l,t,r,b){var result=_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'setFrame',this).call(this,l,t,r,b);this.restartMarqueeIfNeeded();return result;}},{key:'restartMarqueeIfNeeded',value:function restartMarqueeIfNeeded(){if(this.mRestartMarquee&&this.mEllipsize==TextUtils.TruncateAt.MARQUEE){this.mRestartMarquee=false;this.startMarquee();}}},{key:'setFilters',value:function setFilters(){}},{key:'getFilters',value:function getFilters(){return this.mFilters;}},{key:'getBoxHeight',value:function getBoxHeight(l){var padding=l==this.mHintLayout?this.getCompoundPaddingTop()+this.getCompoundPaddingBottom():this.getExtendedPaddingTop()+this.getExtendedPaddingBottom();return this.getMeasuredHeight()-padding;}},{key:'getVerticalOffset',value:function getVerticalOffset(forceNormal){var voffset=0;var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;var l=this.mLayout;if(!forceNormal&&this.mText.length==0&&this.mHintLayout!=null){l=this.mHintLayout;}if(gravity!=Gravity.TOP){var boxht=this.getBoxHeight(l);var textht=l.getHeight();if(textht>1;}}return voffset;}},{key:'getBottomVerticalOffset',value:function getBottomVerticalOffset(forceNormal){var voffset=0;var gravity=this.mGravity&Gravity.VERTICAL_GRAVITY_MASK;var l=this.mLayout;if(!forceNormal&&this.mText.length==0&&this.mHintLayout!=null){l=this.mHintLayout;}if(gravity!=Gravity.BOTTOM){var boxht=this.getBoxHeight(l);var textht=l.getHeight();if(textht>1;}}return voffset;}},{key:'invalidateRegion',value:function invalidateRegion(start,end,invalidateCursor){if(this.mLayout==null){this.invalidate();}else{var lineStart=this.mLayout.getLineForOffset(start);var top=this.mLayout.getLineTop(lineStart);if(lineStart>0){top-=this.mLayout.getLineDescent(lineStart-1);}var lineEnd=void 0;if(start==end)lineEnd=lineStart;else lineEnd=this.mLayout.getLineForOffset(end);var bottom=this.mLayout.getLineBottom(lineEnd);var compoundPaddingLeft=this.getCompoundPaddingLeft();var verticalPadding=this.getExtendedPaddingTop()+this.getVerticalOffset(true);var left=void 0,right=void 0;if(lineStart==lineEnd&&!invalidateCursor){left=Math.floor(this.mLayout.getPrimaryHorizontal(start));right=Math.floor(this.mLayout.getPrimaryHorizontal(end)+1.0);left+=compoundPaddingLeft;right+=compoundPaddingLeft;}else{left=compoundPaddingLeft;right=this.getWidth()-this.getCompoundPaddingRight();}this.invalidate(this.mScrollX+left,verticalPadding+top,this.mScrollX+right,verticalPadding+bottom);}}},{key:'registerForPreDraw',value:function registerForPreDraw(){if(!this.mPreDrawRegistered){this.getViewTreeObserver().addOnPreDrawListener(this);this.mPreDrawRegistered=true;}}},{key:'onPreDraw',value:function onPreDraw(){if(this.mLayout==null){this.assumeLayout();}if(this.mMovement!=null){var curs=this.getSelectionEnd();if(curs<0&&(this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){curs=this.mText.length;}if(curs>=0){this.bringPointIntoView(curs);}}else{this.bringTextIntoView();}this.getViewTreeObserver().removeOnPreDrawListener(this);this.mPreDrawRegistered=false;return true;}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onAttachedToWindow',this).call(this);this.mTemporaryDetach=false;}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onDetachedFromWindow',this).call(this);if(this.mPreDrawRegistered){this.getViewTreeObserver().removeOnPreDrawListener(this);this.mPreDrawRegistered=false;}this.resetResolvedDrawables();}},{key:'isPaddingOffsetRequired',value:function isPaddingOffsetRequired(){return this.mShadowRadius!=0||this.mDrawables!=null;}},{key:'getLeftPaddingOffset',value:function getLeftPaddingOffset(){return this.getCompoundPaddingLeft()-this.mPaddingLeft+Math.floor(Math.min(0,this.mShadowDx-this.mShadowRadius));}},{key:'getTopPaddingOffset',value:function getTopPaddingOffset(){return Math.floor(Math.min(0,this.mShadowDy-this.mShadowRadius));}},{key:'getBottomPaddingOffset',value:function getBottomPaddingOffset(){return Math.floor(Math.max(0,this.mShadowDy+this.mShadowRadius));}},{key:'getRightPaddingOffset',value:function getRightPaddingOffset(){return-(this.getCompoundPaddingRight()-this.mPaddingRight)+Math.floor(Math.max(0,this.mShadowDx+this.mShadowRadius));}},{key:'verifyDrawable',value:function verifyDrawable(who){var verified=_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'verifyDrawable',this).call(this,who);if(!verified&&this.mDrawables!=null){return who==this.mDrawables.mDrawableLeft||who==this.mDrawables.mDrawableTop||who==this.mDrawables.mDrawableRight||who==this.mDrawables.mDrawableBottom||who==this.mDrawables.mDrawableStart||who==this.mDrawables.mDrawableEnd;}return verified;}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mDrawables!=null){if(this.mDrawables.mDrawableLeft!=null){this.mDrawables.mDrawableLeft.jumpToCurrentState();}if(this.mDrawables.mDrawableTop!=null){this.mDrawables.mDrawableTop.jumpToCurrentState();}if(this.mDrawables.mDrawableRight!=null){this.mDrawables.mDrawableRight.jumpToCurrentState();}if(this.mDrawables.mDrawableBottom!=null){this.mDrawables.mDrawableBottom.jumpToCurrentState();}if(this.mDrawables.mDrawableStart!=null){this.mDrawables.mDrawableStart.jumpToCurrentState();}if(this.mDrawables.mDrawableEnd!=null){this.mDrawables.mDrawableEnd.jumpToCurrentState();}}}},{key:'drawableSizeChange',value:function drawableSizeChange(d){var drawables=this.mDrawables;var isCompoundDrawable=drawables!=null&&(d==drawables.mDrawableLeft||d==drawables.mDrawableTop||d==drawables.mDrawableRight||d==drawables.mDrawableBottom||d==drawables.mDrawableStart||d==drawables.mDrawableEnd);if(isCompoundDrawable){d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());this.setCompoundDrawables(drawables.mDrawableLeft,drawables.mDrawableTop,drawables.mDrawableRight,drawables.mDrawableBottom);}else{_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'drawableSizeChange',this).call(this,d);}}},{key:'invalidateDrawable',value:function invalidateDrawable(drawable){if(this.verifyDrawable(drawable)){var dirty=drawable.getBounds();var scrollX=this.mScrollX;var scrollY=this.mScrollY;var drawables=this.mDrawables;if(drawables!=null){if(drawable==drawables.mDrawableLeft){var compoundPaddingTop=this.getCompoundPaddingTop();var compoundPaddingBottom=this.getCompoundPaddingBottom();var vspace=this.mBottom-this.mTop-compoundPaddingBottom-compoundPaddingTop;scrollX+=this.mPaddingLeft;scrollY+=compoundPaddingTop+(vspace-drawables.mDrawableHeightLeft)/2;}else if(drawable==drawables.mDrawableRight){var _compoundPaddingTop=this.getCompoundPaddingTop();var _compoundPaddingBottom=this.getCompoundPaddingBottom();var _vspace=this.mBottom-this.mTop-_compoundPaddingBottom-_compoundPaddingTop;scrollX+=this.mRight-this.mLeft-this.mPaddingRight-drawables.mDrawableSizeRight;scrollY+=_compoundPaddingTop+(_vspace-drawables.mDrawableHeightRight)/2;}else if(drawable==drawables.mDrawableTop){var compoundPaddingLeft=this.getCompoundPaddingLeft();var compoundPaddingRight=this.getCompoundPaddingRight();var hspace=this.mRight-this.mLeft-compoundPaddingRight-compoundPaddingLeft;scrollX+=compoundPaddingLeft+(hspace-drawables.mDrawableWidthTop)/2;scrollY+=this.mPaddingTop;}else if(drawable==drawables.mDrawableBottom){var _compoundPaddingLeft=this.getCompoundPaddingLeft();var _compoundPaddingRight=this.getCompoundPaddingRight();var _hspace=this.mRight-this.mLeft-_compoundPaddingRight-_compoundPaddingLeft;scrollX+=_compoundPaddingLeft+(_hspace-drawables.mDrawableWidthBottom)/2;scrollY+=this.mBottom-this.mTop-this.mPaddingBottom-drawables.mDrawableSizeBottom;}}this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}}},{key:'isTextSelectable',value:function isTextSelectable(){return false;}},{key:'setTextIsSelectable',value:function setTextIsSelectable(selectable){}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){var drawableState=void 0;if(this.mSingleLine){drawableState=_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}else{drawableState=_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onCreateDrawableState',this).call(this,extraSpace+1);TextView.mergeDrawableStates(drawableState,TextView.MULTILINE_STATE_SET);}if(this.isTextSelectable()){var length=drawableState.length;for(var i=0;i=0){if(selStart==selEnd){}else{if(this.mHighlightPathBogus){if(this.mHighlightPath==null)this.mHighlightPath=new Path();this.mHighlightPath.reset();this.mLayout.getSelectionPath(selStart,selEnd,this.mHighlightPath);this.mHighlightPathBogus=false;}highlightPaint.setColor(this.mHighlightColor);highlightPaint.setStyle(Paint.Style.FILL);highlight=this.mHighlightPath;}}return highlight;}},{key:'getHorizontalOffsetForDrawables',value:function getHorizontalOffsetForDrawables(){return 0;}},{key:'onDraw',value:function onDraw(canvas){this.restartMarqueeIfNeeded();_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onDraw',this).call(this,canvas);var compoundPaddingLeft=this.getCompoundPaddingLeft();var compoundPaddingTop=this.getCompoundPaddingTop();var compoundPaddingRight=this.getCompoundPaddingRight();var compoundPaddingBottom=this.getCompoundPaddingBottom();var scrollX=this.mScrollX;var scrollY=this.mScrollY;var right=this.mRight;var left=this.mLeft;var bottom=this.mBottom;var top=this.mTop;var isLayoutRtl=this.isLayoutRtl();var offset=this.getHorizontalOffsetForDrawables();var leftOffset=isLayoutRtl?0:offset;var rightOffset=isLayoutRtl?offset:0;var dr=this.mDrawables;if(dr!=null){var _vspace2=bottom-top-compoundPaddingBottom-compoundPaddingTop;var hspace=right-left-compoundPaddingRight-compoundPaddingLeft;if(dr.mDrawableLeft!=null){canvas.save();canvas.translate(scrollX+this.mPaddingLeft+leftOffset,scrollY+compoundPaddingTop+(_vspace2-dr.mDrawableHeightLeft)/2);dr.mDrawableLeft.draw(canvas);canvas.restore();}if(dr.mDrawableRight!=null){canvas.save();canvas.translate(scrollX+right-left-this.mPaddingRight-dr.mDrawableSizeRight-rightOffset,scrollY+compoundPaddingTop+(_vspace2-dr.mDrawableHeightRight)/2);dr.mDrawableRight.draw(canvas);canvas.restore();}if(dr.mDrawableTop!=null){canvas.save();canvas.translate(scrollX+compoundPaddingLeft+(hspace-dr.mDrawableWidthTop)/2,scrollY+this.mPaddingTop);dr.mDrawableTop.draw(canvas);canvas.restore();}if(dr.mDrawableBottom!=null){canvas.save();canvas.translate(scrollX+compoundPaddingLeft+(hspace-dr.mDrawableWidthBottom)/2,scrollY+bottom-top-this.mPaddingBottom-dr.mDrawableSizeBottom);dr.mDrawableBottom.draw(canvas);canvas.restore();}}var color=this.mCurTextColor;if(this.mLayout==null){this.assumeLayout();}var layout=this.mLayout;if(this.mHint!=null&&this.mText.length==0){if(this.mHintTextColor!=null){color=this.mCurHintTextColor;}layout=this.mHintLayout;}this.mTextPaint.setColor(color);this.mTextPaint.drawableState=this.getDrawableState();if(this.mSkipDrawText)return;canvas.save();var extendedPaddingTop=this.getExtendedPaddingTop();var extendedPaddingBottom=this.getExtendedPaddingBottom();var vspace=this.mBottom-this.mTop-compoundPaddingBottom-compoundPaddingTop;var maxScrollY=this.mLayout.getHeight()-vspace;var clipLeft=compoundPaddingLeft+scrollX;var clipTop=scrollY==0?0:extendedPaddingTop+scrollY;var clipRight=right-left-compoundPaddingRight+scrollX;var clipBottom=bottom-top+scrollY-(scrollY==maxScrollY?0:extendedPaddingBottom);if(this.mShadowRadius!=0){clipLeft+=Math.min(0,this.mShadowDx-this.mShadowRadius);clipRight+=Math.max(0,this.mShadowDx+this.mShadowRadius);clipTop+=Math.min(0,this.mShadowDy-this.mShadowRadius);clipBottom+=Math.max(0,this.mShadowDy+this.mShadowRadius);}canvas.clipRect(clipLeft,clipTop,clipRight,clipBottom);var voffsetText=0;var voffsetCursor=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffsetText=this.getVerticalOffset(false);voffsetCursor=this.getVerticalOffset(true);}canvas.translate(compoundPaddingLeft,extendedPaddingTop+voffsetText);var absoluteGravity=this.mGravity;if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(!this.mSingleLine&&this.getLineCount()==1&&this.canMarquee()&&(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK)!=Gravity.LEFT){var width=this.mRight-this.mLeft;var _padding5=this.getCompoundPaddingLeft()+this.getCompoundPaddingRight();var _dx=this.mLayout.getLineRight(0)-(width-_padding5);canvas.translate(isLayoutRtl?-_dx:+_dx,0.0);}if(this.mMarquee!=null&&this.mMarquee.isRunning()){var _dx2=-this.mMarquee.getScroll();canvas.translate(isLayoutRtl?-_dx2:+_dx2,0.0);}}var cursorOffsetVertical=voffsetCursor-voffsetText;var highlight=this.getUpdatedHighlightPath();layout.draw(canvas,highlight,this.mHighlightPaint,cursorOffsetVertical);if(this.mMarquee!=null&&this.mMarquee.shouldDrawGhost()){var _dx3=Math.floor(this.mMarquee.getGhostOffset());canvas.translate(isLayoutRtl?-_dx3:_dx3,0.0);layout.draw(canvas,highlight,this.mHighlightPaint,cursorOffsetVertical);}canvas.restore();}},{key:'getFocusedRect',value:function getFocusedRect(r){if(this.mLayout==null){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'getFocusedRect',this).call(this,r);return;}var selEnd=this.getSelectionEnd();if(selEnd<0){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'getFocusedRect',this).call(this,r);return;}}},{key:'getLineCount',value:function getLineCount(){return this.mLayout!=null?this.mLayout.getLineCount():0;}},{key:'getLineBounds',value:function getLineBounds(line,bounds){if(this.mLayout==null){if(bounds!=null){bounds.set(0,0,0,0);}return 0;}else{var baseline=this.mLayout.getLineBounds(line,bounds);var voffset=this.getExtendedPaddingTop();if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset+=this.getVerticalOffset(true);}if(bounds!=null){bounds.offset(this.getCompoundPaddingLeft(),voffset);}return baseline+voffset;}}},{key:'getBaseline',value:function getBaseline(){if(this.mLayout==null){return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'getBaseline',this).call(this);}var voffset=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset=this.getVerticalOffset(true);}return this.getExtendedPaddingTop()+voffset+this.mLayout.getLineBaseline(0);}},{key:'getFadeTop',value:function getFadeTop(offsetRequired){if(this.mLayout==null)return 0;var voffset=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){voffset=this.getVerticalOffset(true);}if(offsetRequired)voffset+=this.getTopPaddingOffset();return this.getExtendedPaddingTop()+voffset;}},{key:'getFadeHeight',value:function getFadeHeight(offsetRequired){return this.mLayout!=null?this.mLayout.getHeight():0;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var which=this.doKeyDown(keyCode,event,null);if(which==0){return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onKeyDown',this).call(this,keyCode,event);}return true;}},{key:'shouldAdvanceFocusOnEnter',value:function shouldAdvanceFocusOnEnter(){if(this.getKeyListener()==null){return false;}if(this.mSingleLine){return true;}return false;}},{key:'shouldAdvanceFocusOnTab',value:function shouldAdvanceFocusOnTab(){return true;}},{key:'doKeyDown',value:function doKeyDown(keyCode,event,otherEvent){return 0;}},{key:'resetErrorChangedFlag',value:function resetErrorChangedFlag(){}},{key:'hideErrorIfUnchanged',value:function hideErrorIfUnchanged(){}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onKeyUp',this).call(this,keyCode,event);}},{key:'onCheckIsTextEditor',value:function onCheckIsTextEditor(){return false;}},{key:'nullLayouts',value:function nullLayouts(){if(this.mLayout instanceof BoringLayout&&this.mSavedLayout==null){this.mSavedLayout=this.mLayout;}if(this.mHintLayout instanceof BoringLayout&&this.mSavedHintLayout==null){this.mSavedHintLayout=this.mHintLayout;}this.mSavedMarqueeModeLayout=this.mLayout=this.mHintLayout=null;this.mBoring=this.mHintBoring=null;}},{key:'assumeLayout',value:function assumeLayout(){var width=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();if(width<1){width=0;}var physicalWidth=width;if(this.mHorizontallyScrolling){width=TextView.VERY_WIDE;}this.makeNewLayout(width,physicalWidth,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,physicalWidth,false);}},{key:'getLayoutAlignment',value:function getLayoutAlignment(){var alignment=void 0;switch(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:alignment=Layout.Alignment.ALIGN_LEFT;break;case Gravity.RIGHT:alignment=Layout.Alignment.ALIGN_RIGHT;break;case Gravity.CENTER_HORIZONTAL:alignment=Layout.Alignment.ALIGN_CENTER;break;default:alignment=Layout.Alignment.ALIGN_NORMAL;break;}return alignment;}},{key:'makeNewLayout',value:function makeNewLayout(wantWidth,hintWidth,boring,hintBoring,ellipsisWidth,bringIntoView){this.stopMarquee();this.mOldMaximum=this.mMaximum;this.mOldMaxMode=this.mMaxMode;this.mHighlightPathBogus=true;if(wantWidth<0){wantWidth=0;}if(hintWidth<0){hintWidth=0;}var alignment=this.getLayoutAlignment();var testDirChange=this.mSingleLine&&this.mLayout!=null&&(alignment==Layout.Alignment.ALIGN_NORMAL||alignment==Layout.Alignment.ALIGN_OPPOSITE);var oldDir=0;if(testDirChange)oldDir=this.mLayout.getParagraphDirection(0);var shouldEllipsize=this.mEllipsize!=null&&this.getKeyListener()==null;var switchEllipsize=this.mEllipsize==TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_NORMAL;var effectiveEllipsize=this.mEllipsize;if(this.mEllipsize==TruncateAt.MARQUEE&&this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){effectiveEllipsize=TruncateAt.END_SMALL;}if(this.mTextDir==null){this.mTextDir=this.getTextDirectionHeuristic();}this.mLayout=this.makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,effectiveEllipsize,effectiveEllipsize==this.mEllipsize);if(switchEllipsize){var oppositeEllipsize=effectiveEllipsize==TruncateAt.MARQUEE?TruncateAt.END:TruncateAt.MARQUEE;this.mSavedMarqueeModeLayout=this.makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,oppositeEllipsize,effectiveEllipsize!=this.mEllipsize);}shouldEllipsize=this.mEllipsize!=null;this.mHintLayout=null;if(this.mHint!=null){if(shouldEllipsize)hintWidth=wantWidth;if(hintBoring==TextView.UNKNOWN_BORING){hintBoring=BoringLayout.isBoring(this.mHint,this.mTextPaint,this.mTextDir,this.mHintBoring);if(hintBoring!=null){this.mHintBoring=hintBoring;}}if(hintBoring!=null){if(hintBoring.width<=hintWidth&&(!shouldEllipsize||hintBoring.width<=ellipsisWidth)){if(this.mSavedHintLayout!=null){this.mHintLayout=this.mSavedHintLayout.replaceOrMake(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad);}else{this.mHintLayout=BoringLayout.make(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad);}this.mSavedHintLayout=this.mHintLayout;}else if(shouldEllipsize&&hintBoring.width<=hintWidth){if(this.mSavedHintLayout!=null){this.mHintLayout=this.mSavedHintLayout.replaceOrMake(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad,this.mEllipsize,ellipsisWidth);}else{this.mHintLayout=BoringLayout.make(this.mHint,this.mTextPaint,hintWidth,alignment,this.mSpacingMult,this.mSpacingAdd,hintBoring,this.mIncludePad,this.mEllipsize,ellipsisWidth);}}else if(shouldEllipsize){this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.mEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else{this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}else if(shouldEllipsize){this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.mEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else{this.mHintLayout=new StaticLayout(this.mHint,0,this.mHint.length,this.mTextPaint,hintWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}if(bringIntoView||testDirChange&&oldDir!=this.mLayout.getParagraphDirection(0)){this.registerForPreDraw();}if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(!this.compressText(ellipsisWidth)){var height=this.mLayoutParams.height;if(height!=LayoutParams.WRAP_CONTENT&&height!=LayoutParams.MATCH_PARENT){this.startMarquee();}else{this.mRestartMarquee=true;}}}}},{key:'makeSingleLayout',value:function makeSingleLayout(wantWidth,boring,ellipsisWidth,alignment,shouldEllipsize,effectiveEllipsize,useSaved){var result=null;if(Spannable.isImpl(this.mText)){result=new DynamicLayout(this.mText,this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,this.getKeyListener()==null?effectiveEllipsize:null,ellipsisWidth);}else{if(boring==TextView.UNKNOWN_BORING){boring=BoringLayout.isBoring(this.mTransformed,this.mTextPaint,this.mTextDir,this.mBoring);if(boring!=null){this.mBoring=boring;}}if(boring!=null){if(boring.width<=wantWidth&&(effectiveEllipsize==null||boring.width<=ellipsisWidth)){if(useSaved&&this.mSavedLayout!=null){result=this.mSavedLayout.replaceOrMake(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad);}else{result=BoringLayout.make(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad);}if(useSaved){this.mSavedLayout=result;}}else if(shouldEllipsize&&boring.width<=wantWidth){if(useSaved&&this.mSavedLayout!=null){result=this.mSavedLayout.replaceOrMake(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad,effectiveEllipsize,ellipsisWidth);}else{result=BoringLayout.make(this.mTransformed,this.mTextPaint,wantWidth,alignment,this.mSpacingMult,this.mSpacingAdd,boring,this.mIncludePad,effectiveEllipsize,ellipsisWidth);}}else if(shouldEllipsize){result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,effectiveEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else{result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}else if(shouldEllipsize){result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad,effectiveEllipsize,ellipsisWidth,this.mMaxMode==TextView.LINES?this.mMaximum:Integer.MAX_VALUE);}else{result=new StaticLayout(this.mTransformed,0,this.mTransformed.length,this.mTextPaint,wantWidth,alignment,this.mTextDir,this.mSpacingMult,this.mSpacingAdd,this.mIncludePad);}}return result;}},{key:'compressText',value:function compressText(width){var _this99=this;if(this.isHardwareAccelerated())return false;if(width>0.0&&this.mLayout!=null&&this.getLineCount()==1&&!this.mUserSetTextScaleX&&this.mTextPaint.getTextScaleX()==1.0){var textWidth=this.mLayout.getLineWidth(0);var overflow=(textWidth+1.0-width)/width;if(overflow>0.0&&overflow<=TextView.Marquee.MARQUEE_DELTA_MAX){this.mTextPaint.setTextScaleX(1.0-overflow-0.005);this.post(function(){var inner_this=_this99;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.requestLayout();}}]);return _Inner;}();return new _Inner();}());return true;}}return false;}},{key:'setIncludeFontPadding',value:function setIncludeFontPadding(includepad){if(this.mIncludePad!=includepad){this.mIncludePad=includepad;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'getIncludeFontPadding',value:function getIncludeFontPadding(){return this.mIncludePad;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var widthMode=View.MeasureSpec.getMode(widthMeasureSpec);var heightMode=View.MeasureSpec.getMode(heightMeasureSpec);var widthSize=View.MeasureSpec.getSize(widthMeasureSpec);var heightSize=View.MeasureSpec.getSize(heightMeasureSpec);var width=void 0;var height=void 0;var boring=TextView.UNKNOWN_BORING;var hintBoring=TextView.UNKNOWN_BORING;if(this.mTextDir==null){this.mTextDir=this.getTextDirectionHeuristic();}var des=-1;var fromexisting=false;if(widthMode==View.MeasureSpec.EXACTLY){width=widthSize;}else{if(this.mLayout!=null&&this.mEllipsize==null){des=TextView.desired(this.mLayout);}if(des<0){boring=BoringLayout.isBoring(this.mTransformed,this.mTextPaint,this.mTextDir,this.mBoring);if(boring!=null){this.mBoring=boring;}}else{fromexisting=true;}if(boring==null||boring==TextView.UNKNOWN_BORING){if(des<0){des=Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed,this.mTextPaint)));}width=des;}else{width=boring.width;}var dr=this.mDrawables;if(dr!=null){width=Math.max(width,dr.mDrawableWidthTop);width=Math.max(width,dr.mDrawableWidthBottom);}if(this.mHint!=null){var hintDes=-1;var _hintWidth=void 0;if(this.mHintLayout!=null&&this.mEllipsize==null){hintDes=TextView.desired(this.mHintLayout);}if(hintDes<0){hintBoring=BoringLayout.isBoring(this.mHint,this.mTextPaint,this.mTextDir,this.mHintBoring);if(hintBoring!=null){this.mHintBoring=hintBoring;}}if(hintBoring==null||hintBoring==TextView.UNKNOWN_BORING){if(hintDes<0){hintDes=Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint,this.mTextPaint)));}_hintWidth=hintDes;}else{_hintWidth=hintBoring.width;}if(_hintWidth>width){width=_hintWidth;}}width+=this.getCompoundPaddingLeft()+this.getCompoundPaddingRight();if(this.mMaxWidthMode==TextView.EMS){width=Math.min(width,this.mMaxWidthValue*this.getLineHeight());}else{width=Math.min(width,this.mMaxWidthValue);}if(this.mMinWidthMode==TextView.EMS){width=Math.max(width,this.mMinWidthValue*this.getLineHeight());}else{width=Math.max(width,this.mMinWidthValue);}width=Math.max(width,this.getSuggestedMinimumWidth());if(widthMode==View.MeasureSpec.AT_MOST){width=Math.min(widthSize,width);}}var want=width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var unpaddedWidth=want;if(this.mHorizontallyScrolling)want=TextView.VERY_WIDE;var hintWant=want;var hintWidth=this.mHintLayout==null?hintWant:this.mHintLayout.getWidth();if(this.mLayout==null){this.makeNewLayout(want,hintWant,boring,hintBoring,width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);}else{var layoutChanged=this.mLayout.getWidth()!=want||hintWidth!=hintWant||this.mLayout.getEllipsizedWidth()!=width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var widthChanged=this.mHint==null&&this.mEllipsize==null&&want>this.mLayout.getWidth()&&(this.mLayout instanceof BoringLayout||fromexisting&&des>=0&&des<=want);var maximumChanged=this.mMaxMode!=this.mOldMaxMode||this.mMaximum!=this.mOldMaximum;if(layoutChanged||maximumChanged){if(!maximumChanged&&widthChanged){this.mLayout.increaseWidthTo(want);}else{this.makeNewLayout(want,hintWant,boring,hintBoring,width-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);}}else{}}if(heightMode==View.MeasureSpec.EXACTLY){height=heightSize;this.mDesiredHeightAtMeasure=-1;}else{var desired=this.getDesiredHeight();height=desired;this.mDesiredHeightAtMeasure=desired;if(heightMode==View.MeasureSpec.AT_MOST){height=Math.min(desired,heightSize);}}var unpaddedHeight=height-this.getCompoundPaddingTop()-this.getCompoundPaddingBottom();if(this.mMaxMode==TextView.LINES&&this.mLayout.getLineCount()>this.mMaximum){unpaddedHeight=Math.min(unpaddedHeight,this.mLayout.getLineTop(this.mMaximum));}if(this.mMovement!=null||this.mLayout.getWidth()>unpaddedWidth||this.mLayout.getHeight()>unpaddedHeight){this.registerForPreDraw();}else{this.scrollTo(0,0);}this.setMeasuredDimension(width,height);}},{key:'getDesiredHeight',value:function getDesiredHeight(layout){var cap=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(arguments.length===0){return Math.max(this.getDesiredHeight(this.mLayout,true),this.getDesiredHeight(this.mHintLayout,this.mEllipsize!=null));}if(layout==null){return 0;}var linecount=layout.getLineCount();var pad=this.getCompoundPaddingTop()+this.getCompoundPaddingBottom();var desired=layout.getLineTop(linecount);var dr=this.mDrawables;if(dr!=null){desired=Math.max(desired,dr.mDrawableHeightLeft);desired=Math.max(desired,dr.mDrawableHeightRight);}desired+=pad;if(this.mMaxMode==TextView.LINES){if(cap){if(linecount>this.mMaximum){desired=layout.getLineTop(this.mMaximum);if(dr!=null){desired=Math.max(desired,dr.mDrawableHeightLeft);desired=Math.max(desired,dr.mDrawableHeightRight);}desired+=pad;linecount=this.mMaximum;}}}else{desired=Math.min(desired,this.mMaximum);}if(this.mMinMode==TextView.LINES){if(linecount=0){var _desiredHeight=this.getDesiredHeight();if(_desiredHeight!=this.mDesiredHeightAtMeasure){sizeChanged=true;}}}}if(sizeChanged){this.requestLayout();}}},{key:'checkForRelayout',value:function checkForRelayout(){if((this.mLayoutParams.width!=LayoutParams.WRAP_CONTENT||this.mMaxWidthMode==this.mMinWidthMode&&this.mMaxWidthValue==this.mMinWidthValue)&&(this.mHint==null||this.mHintLayout!=null)&&this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()>0){var oldht=this.mLayout.getHeight();var want=this.mLayout.getWidth();var hintWant=this.mHintLayout==null?0:this.mHintLayout.getWidth();this.makeNewLayout(want,hintWant,TextView.UNKNOWN_BORING,TextView.UNKNOWN_BORING,this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight(),false);if(this.mEllipsize!=TextUtils.TruncateAt.MARQUEE){if(this.mLayoutParams.height!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.height!=LayoutParams.MATCH_PARENT){this.invalidate();return;}if(this.mLayout.getHeight()==oldht&&(this.mHintLayout==null||this.mHintLayout.getHeight()==oldht)){this.invalidate();return;}}this.requestLayout();this.invalidate();}else{this.nullLayouts();this.requestLayout();this.invalidate();}}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);if(this.mDeferScroll>=0){var curs=this.mDeferScroll;this.mDeferScroll=-1;this.bringPointIntoView(Math.min(curs,this.mText.length));}}},{key:'isShowingHint',value:function isShowingHint(){return TextUtils.isEmpty(this.mText)&&!TextUtils.isEmpty(this.mHint);}},{key:'bringTextIntoView',value:function bringTextIntoView(){var layout=this.isShowingHint()?this.mHintLayout:this.mLayout;var line=0;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){line=layout.getLineCount()-1;}var a=layout.getParagraphAlignment(line);var dir=layout.getParagraphDirection(line);var hspace=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var vspace=this.mBottom-this.mTop-this.getExtendedPaddingTop()-this.getExtendedPaddingBottom();var ht=layout.getHeight();var scrollx=void 0,scrolly=void 0;if(a==Layout.Alignment.ALIGN_NORMAL){a=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_LEFT:Layout.Alignment.ALIGN_RIGHT;}else if(a==Layout.Alignment.ALIGN_OPPOSITE){a=dir==Layout.DIR_LEFT_TO_RIGHT?Layout.Alignment.ALIGN_RIGHT:Layout.Alignment.ALIGN_LEFT;}if(a==Layout.Alignment.ALIGN_CENTER){var left=Math.floor(Math.floor(layout.getLineLeft(line)));var right=Math.floor(Math.ceil(layout.getLineRight(line)));if(right-left0;var x=Math.floor(layout.getPrimaryHorizontal(offset,clamped));var top=layout.getLineTop(line);var bottom=layout.getLineTop(line+1);var left=Math.floor(Math.floor(layout.getLineLeft(line)));var right=Math.floor(Math.ceil(layout.getLineRight(line)));var ht=layout.getHeight();var hspace=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var vspace=this.mBottom-this.mTop-this.getExtendedPaddingTop()-this.getExtendedPaddingBottom();if(!this.mHorizontallyScrolling&&right-left>hspace&&right>x){right=Math.max(x,left+hspace);}var hslack=(bottom-top)/2;var vslack=hslack;if(vslack>vspace/4)vslack=vspace/4;if(hslack>hspace/4)hslack=hspace/4;var hs=this.mScrollX;var vs=this.mScrollY;if(top-vsvspace-vslack)vs=bottom-(vspace-vslack);if(ht-vs0)vs=0;if(grav!=0){if(x-hshspace-hslack){hs=x-(hspace-hslack);}}if(grav<0){if(left-hs>0)hs=left;if(right-hs0){if(right-hs0)hs=left;}else{if(right-left<=hspace){hs=left-(hspace-(right-left))/2;}else if(x>right-hslack){hs=right-hspace;}else if(xhs){hs=left;}else if(righthspace-hslack){hs=x-(hspace-hslack);}}}if(hs!=this.mScrollX||vs!=this.mScrollY){if(this.mScroller==null){this.scrollTo(hs,vs);}else{var duration=AnimationUtils.currentAnimationTimeMillis()-this.mLastScroll;var _dx4=hs-this.mScrollX;var _dy=vs-this.mScrollY;if(duration>TextView.ANIMATED_SCROLL_GAP){this.mScroller.startScroll(this.mScrollX,this.mScrollY,_dx4,_dy);this.awakenScrollBars(this.mScroller.getDuration());this.invalidate();}else{if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(_dx4,_dy);}this.mLastScroll=AnimationUtils.currentAnimationTimeMillis();}changed=true;}if(this.isFocused()){if(this.mTempRect==null)this.mTempRect=new Rect();this.mTempRect.set(x-2,top,x+2,bottom);this.getInterestingRect(this.mTempRect,line);this.mTempRect.offset(this.mScrollX,this.mScrollY);}return changed;}},{key:'moveCursorToVisibleOffset',value:function moveCursorToVisibleOffset(){return false;}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller!=null){if(this.mScroller.computeScrollOffset()){this.mScrollX=this.mScroller.getCurrX();this.mScrollY=this.mScroller.getCurrY();this.invalidateParentCaches();this.postInvalidate();}}}},{key:'getInterestingRect',value:function getInterestingRect(r,line){this.convertFromViewportToContentCoordinates(r);if(line==0)r.top-=this.getExtendedPaddingTop();if(line==this.mLayout.getLineCount()-1)r.bottom+=this.getExtendedPaddingBottom();}},{key:'convertFromViewportToContentCoordinates',value:function convertFromViewportToContentCoordinates(r){var horizontalOffset=this.viewportToContentHorizontalOffset();r.left+=horizontalOffset;r.right+=horizontalOffset;var verticalOffset=this.viewportToContentVerticalOffset();r.top+=verticalOffset;r.bottom+=verticalOffset;}},{key:'viewportToContentHorizontalOffset',value:function viewportToContentHorizontalOffset(){return this.getCompoundPaddingLeft()-this.mScrollX;}},{key:'viewportToContentVerticalOffset',value:function viewportToContentVerticalOffset(){var offset=this.getExtendedPaddingTop()-this.mScrollY;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=Gravity.TOP){offset+=this.getVerticalOffset(false);}return offset;}},{key:'getSelectionStart',value:function getSelectionStart(){return-1;}},{key:'getSelectionEnd',value:function getSelectionEnd(){return-1;}},{key:'hasSelection',value:function hasSelection(){var selectionStart=this.getSelectionStart();var selectionEnd=this.getSelectionEnd();return selectionStart>=0&&selectionStart!=selectionEnd;}},{key:'setAllCaps',value:function setAllCaps(allCaps){if(allCaps){this.setTransformationMethod(new AllCapsTransformationMethod());}else{this.setTransformationMethod(null);}}},{key:'setSingleLine',value:function setSingleLine(){var singleLine=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;if(this.mSingleLine==singleLine)return;this.setInputTypeSingleLine(singleLine);this.applySingleLine(singleLine,true,true);}},{key:'setInputTypeSingleLine',value:function setInputTypeSingleLine(singleLine){}},{key:'applySingleLine',value:function applySingleLine(singleLine,applyTransformation,changeMaxLines){this.mSingleLine=singleLine;if(singleLine){this.setLines(1);this.setHorizontallyScrolling(true);if(applyTransformation){this.setTransformationMethod(SingleLineTransformationMethod.getInstance());}}else{if(changeMaxLines){this.setMaxLines(Integer.MAX_VALUE);}this.setHorizontallyScrolling(false);if(applyTransformation){this.setTransformationMethod(null);}}}},{key:'setEllipsize',value:function setEllipsize(where){if(this.mEllipsize!=where){this.mEllipsize=where;if(this.mLayout!=null){this.nullLayouts();this.requestLayout();this.invalidate();}}}},{key:'setMarqueeRepeatLimit',value:function setMarqueeRepeatLimit(marqueeLimit){this.mMarqueeRepeatLimit=marqueeLimit;}},{key:'getMarqueeRepeatLimit',value:function getMarqueeRepeatLimit(){return this.mMarqueeRepeatLimit;}},{key:'getEllipsize',value:function getEllipsize(){return this.mEllipsize;}},{key:'setSelectAllOnFocus',value:function setSelectAllOnFocus(selectAllOnFocus){this.createEditorIfNeeded();this.mEditor.mSelectAllOnFocus=selectAllOnFocus;if(selectAllOnFocus&&!Spannable.isImpl(this.mText)){this.setText(this.mText,TextView.BufferType.SPANNABLE);}}},{key:'setCursorVisible',value:function setCursorVisible(visible){}},{key:'isCursorVisible',value:function isCursorVisible(){return null;}},{key:'canMarquee',value:function canMarquee(){var width=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();return width>0&&(this.mLayout.getLineWidth(0)>width||this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_NORMAL&&this.mSavedMarqueeModeLayout!=null&&this.mSavedMarqueeModeLayout.getLineWidth(0)>width);}},{key:'startMarquee',value:function startMarquee(){if(this.getKeyListener()!=null)return;if(this.compressText(this.getWidth()-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight())){return;}if((this.mMarquee==null||this.mMarquee.isStopped())&&(this.isFocused()||this.isSelected())&&this.getLineCount()==1&&this.canMarquee()){if(this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){this.mMarqueeFadeMode=TextView.MARQUEE_FADE_SWITCH_SHOW_FADE;var tmp=this.mLayout;this.mLayout=this.mSavedMarqueeModeLayout;this.mSavedMarqueeModeLayout=tmp;this.setHorizontalFadingEdgeEnabled(true);this.requestLayout();this.invalidate();}if(this.mMarquee==null)this.mMarquee=new TextView.Marquee(this);this.mMarquee.start(this.mMarqueeRepeatLimit);}}},{key:'stopMarquee',value:function stopMarquee(){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){this.mMarquee.stop();}if(this.mMarqueeFadeMode==TextView.MARQUEE_FADE_SWITCH_SHOW_FADE){this.mMarqueeFadeMode=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;var tmp=this.mSavedMarqueeModeLayout;this.mSavedMarqueeModeLayout=this.mLayout;this.mLayout=tmp;this.setHorizontalFadingEdgeEnabled(false);this.requestLayout();this.invalidate();}}},{key:'startStopMarquee',value:function startStopMarquee(start){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(start){this.startMarquee();}else{this.stopMarquee();}}}},{key:'onTextChanged',value:function onTextChanged(text,start,lengthBefore,lengthAfter){}},{key:'onSelectionChanged',value:function onSelectionChanged(selStart,selEnd){}},{key:'addTextChangedListener',value:function addTextChangedListener(watcher){if(this.mListeners==null){this.mListeners=new ArrayList();}this.mListeners.add(watcher);}},{key:'removeTextChangedListener',value:function removeTextChangedListener(watcher){if(this.mListeners!=null){var i=this.mListeners.indexOf(watcher);if(i>=0){this.mListeners.remove(i);}}}},{key:'sendBeforeTextChanged',value:function sendBeforeTextChanged(text,start,before,after){if(this.mListeners!=null){var list=this.mListeners;var count=list.size();for(var i=0;i=0||(this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)==Gravity.BOTTOM){this.registerForPreDraw();}this.checkForResize();if(curs>=0){this.mHighlightPathBogus=true;this.bringPointIntoView(curs);}}},{key:'handleTextChanged',value:function handleTextChanged(buffer,start,before,after){this.updateAfterEdit();this.sendOnTextChanged(buffer,start,before,after);this.onTextChanged(buffer,start,before,after);}},{key:'spanChange',value:function spanChange(buf,what,oldStart,newStart,oldEnd,newEnd){var selChanged=false;var newSelStart=-1,newSelEnd=-1;this.invalidate();this.mHighlightPathBogus=true;this.checkForResize();}},{key:'dispatchFinishTemporaryDetach',value:function dispatchFinishTemporaryDetach(){this.mDispatchTemporaryDetach=true;_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'dispatchFinishTemporaryDetach',this).call(this);this.mDispatchTemporaryDetach=false;}},{key:'onStartTemporaryDetach',value:function onStartTemporaryDetach(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onStartTemporaryDetach',this).call(this);if(!this.mDispatchTemporaryDetach)this.mTemporaryDetach=true;}},{key:'onFinishTemporaryDetach',value:function onFinishTemporaryDetach(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onFinishTemporaryDetach',this).call(this);if(!this.mDispatchTemporaryDetach)this.mTemporaryDetach=false;}},{key:'onFocusChanged',value:function onFocusChanged(focused,direction,previouslyFocusedRect){if(this.mTemporaryDetach){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);return;}this.startStopMarquee(focused);if(this.mTransformation!=null){this.mTransformation.onFocusChanged(this,this.mText,focused,direction,previouslyFocusedRect);}_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);this.startStopMarquee(hasWindowFocus);}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);}},{key:'clearComposingText',value:function clearComposingText(){}},{key:'setSelected',value:function setSelected(selected){var wasSelected=this.isSelected();_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'setSelected',this).call(this,selected);if(selected!=wasSelected&&this.mEllipsize==TextUtils.TruncateAt.MARQUEE){if(selected){this.startMarquee();}else{this.stopMarquee();}}}},{key:'onTouchEvent',value:function onTouchEvent(event){var action=event.getActionMasked();var superResult=_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onTouchEvent',this).call(this,event);var touchIsFinished=action==MotionEvent.ACTION_UP&&this.isFocused();if((this.mMovement!=null||this.onCheckIsTextEditor())&&this.isEnabled()&&Spannable.isImpl(this.mText)&&this.mLayout!=null){var handled=false;if(this.mMovement!=null){handled=this.mMovement.onTouchEvent(this,this.mText,event)||handled;}if(handled){return true;}}return superResult;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(this.mMovement!=null&&Spannable.isImpl(this.mText)&&this.mLayout!=null){try{if(this.mMovement.onGenericMotionEvent(this,this.mText,event)){return true;}}catch(e){}}return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'isTextEditable',value:function isTextEditable(){return false;}},{key:'didTouchFocusSelect',value:function didTouchFocusSelect(){return false;}},{key:'cancelLongPress',value:function cancelLongPress(){_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'cancelLongPress',this).call(this);}},{key:'setScroller',value:function setScroller(s){this.mScroller=s;}},{key:'getLeftFadingEdgeStrength',value:function getLeftFadingEdgeStrength(){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){var marquee=this.mMarquee;if(marquee.shouldDrawLeftFade()){var scroll=marquee.getScroll();return scroll/this.getHorizontalFadingEdgeLength();}else{return 0.0;}}else if(this.getLineCount()==1){var absoluteGravity=this.mGravity;switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:return 0.0;case Gravity.RIGHT:return(this.mLayout.getLineRight(0)-(this.mRight-this.mLeft)-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()-this.mLayout.getLineLeft(0))/this.getHorizontalFadingEdgeLength();case Gravity.CENTER_HORIZONTAL:case Gravity.FILL_HORIZONTAL:var textDirection=this.mLayout.getParagraphDirection(0);if(textDirection==Layout.DIR_LEFT_TO_RIGHT){return 0.0;}else{return(this.mLayout.getLineRight(0)-(this.mRight-this.mLeft)-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()-this.mLayout.getLineLeft(0))/this.getHorizontalFadingEdgeLength();}}}}return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'getLeftFadingEdgeStrength',this).call(this);}},{key:'getRightFadingEdgeStrength',value:function getRightFadingEdgeStrength(){if(this.mEllipsize==TextUtils.TruncateAt.MARQUEE&&this.mMarqueeFadeMode!=TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS){if(this.mMarquee!=null&&!this.mMarquee.isStopped()){var marquee=this.mMarquee;var maxFadeScroll=marquee.getMaxFadeScroll();var scroll=marquee.getScroll();return(maxFadeScroll-scroll)/this.getHorizontalFadingEdgeLength();}else if(this.getLineCount()==1){var absoluteGravity=this.mGravity;switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:var textWidth=this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight();var lineWidth=this.mLayout.getLineWidth(0);return(lineWidth-textWidth)/this.getHorizontalFadingEdgeLength();case Gravity.RIGHT:return 0.0;case Gravity.CENTER_HORIZONTAL:case Gravity.FILL_HORIZONTAL:var textDirection=this.mLayout.getParagraphDirection(0);if(textDirection==Layout.DIR_RIGHT_TO_LEFT){return 0.0;}else{return(this.mLayout.getLineWidth(0)-(this.mRight-this.mLeft-this.getCompoundPaddingLeft()-this.getCompoundPaddingRight()))/this.getHorizontalFadingEdgeLength();}}}}return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'getRightFadingEdgeStrength',this).call(this);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){if(this.mLayout!=null){return this.mSingleLine&&(this.mGravity&Gravity.HORIZONTAL_GRAVITY_MASK)==Gravity.LEFT?Math.floor(this.mLayout.getLineWidth(0)):this.mLayout.getWidth();}return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'computeHorizontalScrollRange',this).call(this);}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){if(this.mLayout!=null)return this.mLayout.getHeight();return _get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'computeVerticalScrollRange',this).call(this);}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight()-this.getCompoundPaddingTop()-this.getCompoundPaddingBottom();}},{key:'canSelectText',value:function canSelectText(){return false;}},{key:'textCanBeSelected',value:function textCanBeSelected(){return false;}},{key:'getTransformedText',value:function getTransformedText(start,end){return this.removeSuggestionSpans(this.mTransformed.substring(start,end));}},{key:'performLongClick',value:function performLongClick(){var handled=false;if(_get2(TextView.prototype.__proto__||Object.getPrototypeOf(TextView.prototype),'performLongClick',this).call(this)){handled=true;}if(handled){this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);}return handled;}},{key:'isSuggestionsEnabled',value:function isSuggestionsEnabled(){return false;}},{key:'setCustomSelectionActionModeCallback',value:function setCustomSelectionActionModeCallback(actionModeCallback){this.createEditorIfNeeded();}},{key:'getCustomSelectionActionModeCallback',value:function getCustomSelectionActionModeCallback(){return null;}},{key:'stopSelectionActionMode',value:function stopSelectionActionMode(){}},{key:'canCut',value:function canCut(){return false;}},{key:'canCopy',value:function canCopy(){return true;}},{key:'canPaste',value:function canPaste(){return false;}},{key:'selectAllText',value:function selectAllText(){return false;}},{key:'getOffsetForPosition',value:function getOffsetForPosition(x,y){if(this.getLayout()==null)return-1;var line=this.getLineAtCoordinate(y);var offset=this.getOffsetAtCoordinate(line,x);return offset;}},{key:'convertToLocalHorizontalCoordinate',value:function convertToLocalHorizontalCoordinate(x){x-=this.getTotalPaddingLeft();x=Math.max(0.0,x);x=Math.min(this.getWidth()-this.getTotalPaddingRight()-1,x);x+=this.getScrollX();return x;}},{key:'getLineAtCoordinate',value:function getLineAtCoordinate(y){y-=this.getTotalPaddingTop();y=Math.max(0.0,y);y=Math.min(this.getHeight()-this.getTotalPaddingBottom()-1,y);y+=this.getScrollY();return this.getLayout().getLineForVertical(Math.floor(y));}},{key:'getOffsetAtCoordinate',value:function getOffsetAtCoordinate(line,x){x=this.convertToLocalHorizontalCoordinate(x);return this.getLayout().getOffsetForHorizontal(line,x);}},{key:'isInBatchEditMode',value:function isInBatchEditMode(){return false;}},{key:'getTextDirectionHeuristic',value:function getTextDirectionHeuristic(){return TextDirectionHeuristics.LTR;}},{key:'onResolveDrawables',value:function onResolveDrawables(layoutDirection){if(this.mLastLayoutDirection==layoutDirection){return;}this.mLastLayoutDirection=layoutDirection;if(this.mDrawables!=null){this.mDrawables.resolveWithLayoutDirection(layoutDirection);}}},{key:'resetResolvedDrawables',value:function resetResolvedDrawables(){this.mLastLayoutDirection=-1;}},{key:'deleteText_internal',value:function deleteText_internal(start,end){}},{key:'replaceText_internal',value:function replaceText_internal(start,end,text){}},{key:'setSpan_internal',value:function setSpan_internal(span,start,end,flags){}},{key:'setCursorPosition_internal',value:function setCursorPosition_internal(start,end){}},{key:'createEditorIfNeeded',value:function createEditorIfNeeded(){}}],[{key:'isMultilineInputType',value:function isMultilineInputType(type){return true;}},{key:'isPasswordInputType',value:function isPasswordInputType(inputType){return false;}},{key:'isVisiblePasswordInputType',value:function isVisiblePasswordInputType(inputType){return true;}},{key:'desired',value:function desired(layout){var n=layout.getLineCount();var text=layout.getText();var max=0;for(var i=0;i=0){this.mRepeatLimit--;}this.start(this.mRepeatLimit);}break;}}},{key:'tick',value:function tick(){if(this.mStatus!=Marquee.MARQUEE_RUNNING){return;}this.removeMessages(Marquee.MESSAGE_TICK);var textView=this.mView.get();if(textView!=null&&(textView.isFocused()||textView.isSelected())){this.mScroll+=this.mScrollUnit;if(this.mScroll>this.mMaxScroll){this.mScroll=this.mMaxScroll;this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART,Marquee.MARQUEE_RESTART_DELAY);}else{this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK,Marquee.MARQUEE_RESOLUTION);}textView.invalidate();}}},{key:'stop',value:function stop(){this.mStatus=Marquee.MARQUEE_STOPPED;this.removeMessages(Marquee.MESSAGE_START);this.removeMessages(Marquee.MESSAGE_RESTART);this.removeMessages(Marquee.MESSAGE_TICK);this.resetScroll();}},{key:'resetScroll',value:function resetScroll(){this.mScroll=0.0;var textView=this.mView.get();if(textView!=null)textView.invalidate();}},{key:'start',value:function start(repeatLimit){if(repeatLimit==0){this.stop();return;}this.mRepeatLimit=repeatLimit;var textView=this.mView.get();if(textView!=null&&textView.mLayout!=null){this.mStatus=Marquee.MARQUEE_STARTING;this.mScroll=0.0;var textWidth=textView.getWidth()-textView.getCompoundPaddingLeft()-textView.getCompoundPaddingRight();var lineWidth=textView.mLayout.getLineWidth(0);var gap=textWidth/3.0;this.mGhostStart=lineWidth-textWidth+gap;this.mMaxScroll=this.mGhostStart+textWidth;this.mGhostOffset=lineWidth+gap;this.mFadeStop=lineWidth+textWidth/6.0;this.mMaxFadeScroll=this.mGhostStart+lineWidth+lineWidth;textView.invalidate();this.sendEmptyMessageDelayed(Marquee.MESSAGE_START,Marquee.MARQUEE_DELAY);}}},{key:'getGhostOffset',value:function getGhostOffset(){return this.mGhostOffset;}},{key:'getScroll',value:function getScroll(){return this.mScroll;}},{key:'getMaxFadeScroll',value:function getMaxFadeScroll(){return this.mMaxFadeScroll;}},{key:'shouldDrawLeftFade',value:function shouldDrawLeftFade(){return this.mScroll<=this.mFadeStop;}},{key:'shouldDrawGhost',value:function shouldDrawGhost(){return this.mStatus==Marquee.MARQUEE_RUNNING&&this.mScroll>this.mGhostStart;}},{key:'isRunning',value:function isRunning(){return this.mStatus==Marquee.MARQUEE_RUNNING;}},{key:'isStopped',value:function isStopped(){return this.mStatus==Marquee.MARQUEE_STOPPED;}}]);return Marquee;}(Handler);Marquee.MARQUEE_DELTA_MAX=0.07;Marquee.MARQUEE_DELAY=1200;Marquee.MARQUEE_RESTART_DELAY=1200;Marquee.MARQUEE_RESOLUTION=1000/30;Marquee.MARQUEE_PIXELS_PER_SECOND=30;Marquee.MARQUEE_STOPPED=0x0;Marquee.MARQUEE_STARTING=0x1;Marquee.MARQUEE_RUNNING=0x2;Marquee.MESSAGE_START=0x1;Marquee.MESSAGE_TICK=0x2;Marquee.MESSAGE_RESTART=0x3;TextView.Marquee=Marquee;var ChangeWatcher=function(){function ChangeWatcher(arg){_classCallCheck(this,ChangeWatcher);this._TextView_this=arg;}_createClass(ChangeWatcher,[{key:'beforeTextChanged',value:function beforeTextChanged(buffer,start,before,after){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"beforeTextChanged start="+start+" before="+before+" after="+after+": "+buffer);this._TextView_this.sendBeforeTextChanged(buffer,start,before,after);}},{key:'onTextChanged',value:function onTextChanged(buffer,start,before,after){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onTextChanged start="+start+" before="+before+" after="+after+": "+buffer);this._TextView_this.handleTextChanged(buffer,start,before,after);}},{key:'afterTextChanged',value:function afterTextChanged(buffer){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"afterTextChanged: "+buffer);this._TextView_this.sendAfterTextChanged(buffer);}},{key:'onSpanChanged',value:function onSpanChanged(buf,what,s,e,st,en){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanChanged s="+s+" e="+e+" st="+st+" en="+en+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,s,st,e,en);}},{key:'onSpanAdded',value:function onSpanAdded(buf,what,s,e){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanAdded s="+s+" e="+e+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,-1,s,-1,e);}},{key:'onSpanRemoved',value:function onSpanRemoved(buf,what,s,e){if(TextView.DEBUG_EXTRACT)Log.v(TextView.LOG_TAG,"onSpanRemoved s="+s+" e="+e+" what="+what+": "+buf);this._TextView_this.spanChange(buf,what,s,-1,e,-1);}}]);return ChangeWatcher;}();TextView.ChangeWatcher=ChangeWatcher;var BufferType;(function(BufferType){BufferType[BufferType["NORMAL"]=0]="NORMAL";BufferType[BufferType["SPANNABLE"]=1]="SPANNABLE";BufferType[BufferType["EDITABLE"]=2]="EDITABLE";})(BufferType=TextView.BufferType||(TextView.BufferType={}));})(TextView=widget.TextView||(widget.TextView={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Button=function(_widget$TextView){_inherits(Button,_widget$TextView);function Button(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.buttonStyle;_classCallCheck(this,Button);return _possibleConstructorReturn(this,(Button.__proto__||Object.getPrototypeOf(Button)).call(this,context,bindElement,defStyle));}return Button;}(widget.TextView);widget.Button=Button;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ListAdapter;(function(ListAdapter){function isImpl(obj){return obj&&obj['areAllItemsEnabled']&&obj['isEnabled'];}ListAdapter.isImpl=isImpl;})(ListAdapter=widget.ListAdapter||(widget.ListAdapter={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var Log=android.util.Log;var LongSparseArray=android.util.LongSparseArray;var SparseArray=android.util.SparseArray;var SparseBooleanArray=android.util.SparseBooleanArray;var StateSet=android.util.StateSet;var HapticFeedbackConstants=android.view.HapticFeedbackConstants;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var View=android.view.View;var ViewConfiguration=android.view.ViewConfiguration;var ViewGroup=android.view.ViewGroup;var LinearInterpolator=android.view.animation.LinearInterpolator;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var System=java.lang.System;var AdapterView=android.widget.AdapterView;var OverScroller=android.widget.OverScroller;var AbsListView=function(_AdapterView){_inherits(AbsListView,_AdapterView);function AbsListView(context,bindElement,defStyle){_classCallCheck(this,AbsListView);var _this102=_possibleConstructorReturn(this,(AbsListView.__proto__||Object.getPrototypeOf(AbsListView)).call(this,context,bindElement,defStyle));_this102.mChoiceMode=AbsListView.CHOICE_MODE_NONE;_this102.mCheckedItemCount=0;_this102.mDeferNotifyDataSetChanged=false;_this102.mDrawSelectorOnTop=false;_this102.mSelectorPosition=AbsListView.INVALID_POSITION;_this102.mSelectorRect=new Rect();_this102.mRecycler=new AbsListView.RecycleBin(_this102);_this102.mSelectionLeftPadding=0;_this102.mSelectionTopPadding=0;_this102.mSelectionRightPadding=0;_this102.mSelectionBottomPadding=0;_this102.mListPadding=new Rect();_this102.mWidthMeasureSpec=0;_this102.mMotionPosition=0;_this102.mMotionViewOriginalTop=0;_this102.mMotionViewNewTop=0;_this102.mMotionX=0;_this102.mMotionY=0;_this102.mTouchMode=AbsListView.TOUCH_MODE_REST;_this102.mLastY=0;_this102.mMotionCorrection=0;_this102.mSelectedTop=0;_this102.mSmoothScrollbarEnabled=true;_this102.mResurrectToPosition=AbsListView.INVALID_POSITION;_this102.mOverscrollMax=0;_this102.mLastTouchMode=AbsListView.TOUCH_MODE_UNKNOWN;_this102.mScrollProfilingStarted=false;_this102.mFlingProfilingStarted=false;_this102.mTranscriptMode=0;_this102.mCacheColorHint=0;_this102.mLastScrollState=AbsListView.OnScrollListener.SCROLL_STATE_IDLE;_this102.mDensityScale=0;_this102.mMinimumVelocity=0;_this102.mMaximumVelocity=0;_this102.mVelocityScale=1.0;_this102.mIsScrap=new Array(1);_this102.mActivePointerId=AbsListView.INVALID_POINTER;_this102.mOverscrollDistance=0;_this102._mOverflingDistance=0;_this102.mFirstPositionDistanceGuess=0;_this102.mLastPositionDistanceGuess=0;_this102.mDirection=0;_this102.mGlowPaddingLeft=0;_this102.mGlowPaddingRight=0;_this102.mLastHandledItemCount=0;_this102.initAbsListView();var a=context.obtainStyledAttributes(bindElement,defStyle);var d=a.getDrawable('listSelector');if(d!=null){_this102.setSelector(d);}_this102.mDrawSelectorOnTop=a.getBoolean('drawSelectorOnTop',false);var stackFromBottom=a.getBoolean('stackFromBottom',false);_this102.setStackFromBottom(stackFromBottom);var scrollingCacheEnabled=a.getBoolean('scrollingCache',true);_this102.setScrollingCacheEnabled(scrollingCacheEnabled);var useTextFilter=a.getBoolean('textFilterEnabled',false);_this102.setTextFilterEnabled(useTextFilter);var transcriptModeValue=a.getAttrValue('transcriptMode');var transcriptMode=AbsListView.TRANSCRIPT_MODE_DISABLED;if(transcriptModeValue==="disabled")transcriptMode=AbsListView.TRANSCRIPT_MODE_DISABLED;else if(transcriptModeValue==="normal")transcriptMode=AbsListView.TRANSCRIPT_MODE_NORMAL;else if(transcriptModeValue==="alwaysScroll")transcriptMode=AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL;_this102.setTranscriptMode(transcriptMode);var color=a.getColor('cacheColorHint',0);_this102.setCacheColorHint(color);var enableFastScroll=a.getBoolean('fastScrollEnabled',false);_this102.setFastScrollEnabled(enableFastScroll);var smoothScrollbar=a.getBoolean('smoothScrollbar',true);_this102.setSmoothScrollbarEnabled(smoothScrollbar);var choiceModeValue=a.getAttrValue('choiceMode');var choiceMode=AbsListView.CHOICE_MODE_NONE;if(choiceModeValue==="none")choiceMode=AbsListView.CHOICE_MODE_NONE;else if(choiceModeValue==="singleChoice")choiceMode=AbsListView.CHOICE_MODE_SINGLE;else if(choiceModeValue==="multipleChoice")choiceMode=AbsListView.CHOICE_MODE_MULTIPLE;_this102.setChoiceMode(choiceMode);_this102.setFastScrollAlwaysVisible(a.getBoolean('fastScrollAlwaysVisible',false));a.recycle();return _this102;}_createClass(AbsListView,[{key:'initAbsListView',value:function initAbsListView(){this.setClickable(true);this.setFocusableInTouchMode(true);this.setWillNotDraw(false);this.setAlwaysDrawnWithCacheEnabled(false);this.setScrollingCacheEnabled(true);var configuration=ViewConfiguration.get();this.mTouchSlop=configuration.getScaledTouchSlop();this.mMinimumVelocity=configuration.getScaledMinimumFlingVelocity();this.mMaximumVelocity=configuration.getScaledMaximumFlingVelocity();this.mOverscrollDistance=configuration.getScaledOverscrollDistance();this.mOverflingDistance=configuration.getScaledOverflingDistance();this.mDensityScale=android.content.res.Resources.getDisplayMetrics().density;this.mLayoutMode=AbsListView.LAYOUT_NORMAL;}},{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'createClassAttrBinder',this).call(this).set('listSelector',{setter:function setter(v,value,attrBinder){var d=attrBinder.parseDrawable(value);if(d)v.setSelector(d);},getter:function getter(v){return v.getSelector();}}).set('drawSelectorOnTop',{setter:function setter(v,value,attrBinder){v.setDrawSelectorOnTop(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.mDrawSelectorOnTop;}}).set('stackFromBottom',{setter:function setter(v,value,attrBinder){v.setStackFromBottom(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.isStackFromBottom();}}).set('scrollingCache',{setter:function setter(v,value,attrBinder){v.setScrollingCacheEnabled(attrBinder.parseBoolean(value,true));},getter:function getter(v){return v.isScrollingCacheEnabled();}}).set('transcriptMode',{setter:function setter(v,value,attrBinder){v.setTranscriptMode(attrBinder.parseEnum(value,new Map().set("disabled",AbsListView.TRANSCRIPT_MODE_DISABLED).set("normal",AbsListView.TRANSCRIPT_MODE_NORMAL).set("alwaysScroll",AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL),AbsListView.TRANSCRIPT_MODE_DISABLED));},getter:function getter(v){return v.getTranscriptMode();}}).set('cacheColorHint',{setter:function setter(v,value,attrBinder){var color=attrBinder.parseColor(value,0);v.setCacheColorHint(color);},getter:function getter(v){return v.getCacheColorHint();}}).set('fastScrollEnabled',{setter:function setter(v,value,attrBinder){var enableFastScroll=attrBinder.parseBoolean(value,false);v.setFastScrollEnabled(enableFastScroll);},getter:function getter(v){return v.isFastScrollEnabled();}}).set('fastScrollAlwaysVisible',{setter:function setter(v,value,attrBinder){var fastScrollAlwaysVisible=attrBinder.parseBoolean(value,false);v.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);},getter:function getter(v){return v.isFastScrollAlwaysVisible();}}).set('smoothScrollbar',{setter:function setter(v,value,attrBinder){var smoothScrollbar=attrBinder.parseBoolean(value,true);v.setSmoothScrollbarEnabled(smoothScrollbar);},getter:function getter(v){return v.isSmoothScrollbarEnabled();}}).set('choiceMode',{setter:function setter(v,value,attrBinder){v.setChoiceMode(attrBinder.parseEnum(value,new Map().set("none",AbsListView.CHOICE_MODE_NONE).set("singleChoice",AbsListView.CHOICE_MODE_SINGLE).set("multipleChoice",AbsListView.CHOICE_MODE_MULTIPLE),AbsListView.CHOICE_MODE_NONE));},getter:function getter(v){return v.getChoiceMode();}});}},{key:'setOverScrollMode',value:function setOverScrollMode(mode){if(mode!=AbsListView.OVER_SCROLL_NEVER){}else{}_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'setOverScrollMode',this).call(this,mode);}},{key:'setAdapter',value:function setAdapter(adapter){if(adapter!=null){this.mAdapterHasStableIds=this.mAdapter.hasStableIds();if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE&&this.mAdapterHasStableIds&&this.mCheckedIdStates==null){this.mCheckedIdStates=new LongSparseArray();}}if(this.mCheckStates!=null){this.mCheckStates.clear();}if(this.mCheckedIdStates!=null){this.mCheckedIdStates.clear();}}},{key:'getCheckedItemCount',value:function getCheckedItemCount(){return this.mCheckedItemCount;}},{key:'isItemChecked',value:function isItemChecked(position){if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE&&this.mCheckStates!=null){return this.mCheckStates.get(position);}return false;}},{key:'getCheckedItemPosition',value:function getCheckedItemPosition(){if(this.mChoiceMode==AbsListView.CHOICE_MODE_SINGLE&&this.mCheckStates!=null&&this.mCheckStates.size()==1){return this.mCheckStates.keyAt(0);}return AbsListView.INVALID_POSITION;}},{key:'getCheckedItemPositions',value:function getCheckedItemPositions(){if(this.mChoiceMode!=AbsListView.CHOICE_MODE_NONE){return this.mCheckStates;}return null;}},{key:'getCheckedItemIds',value:function getCheckedItemIds(){if(this.mChoiceMode==AbsListView.CHOICE_MODE_NONE||this.mCheckedIdStates==null||this.mAdapter==null){return[0];}var idStates=this.mCheckedIdStates;var count=idStates.size();var ids=[count];for(var i=0;i=this.mListPadding.top&&this.getChildAt(childCount-1).getBottom()<=this.getHeight()-this.mListPadding.bottom;}},{key:'setFastScrollEnabled',value:function setFastScrollEnabled(enabled){if(this.mFastScrollEnabled!=enabled){this.mFastScrollEnabled=enabled;this.setFastScrollerEnabledUiThread(enabled);}}},{key:'setFastScrollerEnabledUiThread',value:function setFastScrollerEnabledUiThread(enabled){}},{key:'setFastScrollAlwaysVisible',value:function setFastScrollAlwaysVisible(alwaysShow){if(this.mFastScrollAlwaysVisible!=alwaysShow){if(alwaysShow&&!this.mFastScrollEnabled){this.setFastScrollEnabled(true);}this.mFastScrollAlwaysVisible=alwaysShow;this.setFastScrollerAlwaysVisibleUiThread(alwaysShow);}}},{key:'setFastScrollerAlwaysVisibleUiThread',value:function setFastScrollerAlwaysVisibleUiThread(alwaysShow){}},{key:'isOwnerThread',value:function isOwnerThread(){return true;}},{key:'isFastScrollAlwaysVisible',value:function isFastScrollAlwaysVisible(){return false;}},{key:'getVerticalScrollbarWidth',value:function getVerticalScrollbarWidth(){return _get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'getVerticalScrollbarWidth',this).call(this);}},{key:'isFastScrollEnabled',value:function isFastScrollEnabled(){return false;}},{key:'setVerticalScrollbarPosition',value:function setVerticalScrollbarPosition(position){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'setVerticalScrollbarPosition',this).call(this,position);}},{key:'setScrollBarStyle',value:function setScrollBarStyle(style){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'setScrollBarStyle',this).call(this,style);}},{key:'isVerticalScrollBarHidden',value:function isVerticalScrollBarHidden(){return this.isFastScrollEnabled();}},{key:'setSmoothScrollbarEnabled',value:function setSmoothScrollbarEnabled(enabled){this.mSmoothScrollbarEnabled=enabled;}},{key:'isSmoothScrollbarEnabled',value:function isSmoothScrollbarEnabled(){return this.mSmoothScrollbarEnabled;}},{key:'setOnScrollListener',value:function setOnScrollListener(l){this.mOnScrollListener=l;this.invokeOnItemScrollListener();}},{key:'invokeOnItemScrollListener',value:function invokeOnItemScrollListener(){if(this.mOnScrollListener!=null){this.mOnScrollListener.onScroll(this,this.mFirstPosition,this.getChildCount(),this.mItemCount);}this.onScrollChanged(0,0,0,0);}},{key:'isScrollingCacheEnabled',value:function isScrollingCacheEnabled(){return this.mScrollingCacheEnabled;}},{key:'setScrollingCacheEnabled',value:function setScrollingCacheEnabled(enabled){if(this.mScrollingCacheEnabled&&!enabled){this.clearScrollingCache();}this.mScrollingCacheEnabled=enabled;}},{key:'setTextFilterEnabled',value:function setTextFilterEnabled(textFilterEnabled){this.mTextFilterEnabled=textFilterEnabled;}},{key:'isTextFilterEnabled',value:function isTextFilterEnabled(){return this.mTextFilterEnabled;}},{key:'getFocusedRect',value:function getFocusedRect(r){var view=this.getSelectedView();if(view!=null&&view.getParent()==this){view.getFocusedRect(r);this.offsetDescendantRectToMyCoords(view,r);}else{_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'getFocusedRect',this).call(this,r);}}},{key:'useDefaultSelector',value:function useDefaultSelector(){this.setSelector(android.R.drawable.list_selector_background);}},{key:'isStackFromBottom',value:function isStackFromBottom(){return this.mStackFromBottom;}},{key:'setStackFromBottom',value:function setStackFromBottom(stackFromBottom){if(this.mStackFromBottom!=stackFromBottom){this.mStackFromBottom=stackFromBottom;this.requestLayoutIfNecessary();}}},{key:'requestLayoutIfNecessary',value:function requestLayoutIfNecessary(){if(this.getChildCount()>0){this.resetList();this.requestLayout();this.invalidate();}}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);if(gainFocus&&this.mSelectedPosition<0&&!this.isInTouchMode()){if(!this.isAttachedToWindow()&&this.mAdapter!=null){this.mDataChanged=true;this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();}this.resurrectSelection();}}},{key:'requestLayout',value:function requestLayout(){if(!this.mBlockLayoutRequests&&!this.mInLayout){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'requestLayout',this).call(this);}}},{key:'resetList',value:function resetList(){this.removeAllViewsInLayout();this.mFirstPosition=0;this.mDataChanged=false;this.mPositionScrollAfterLayout=null;this.mNeedSync=false;this.mPendingSync=null;this.mOldSelectedPosition=AbsListView.INVALID_POSITION;this.mOldSelectedRowId=AbsListView.INVALID_ROW_ID;this.setSelectedPositionInt(AbsListView.INVALID_POSITION);this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);this.mSelectedTop=0;this.mSelectorPosition=AbsListView.INVALID_POSITION;this.mSelectorRect.setEmpty();this.invalidate();}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){var count=this.getChildCount();if(count>0){if(this.mSmoothScrollbarEnabled){var extent=count*100;var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){extent+=top*100/height;}view=this.getChildAt(count-1);var bottom=view.getBottom();height=view.getHeight();if(height>0){extent-=(bottom-this.getHeight())*100/height;}return extent;}else{return 1;}}return 0;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){var firstPosition=this.mFirstPosition;var childCount=this.getChildCount();if(firstPosition>=0&&childCount>0){if(this.mSmoothScrollbarEnabled){var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){return Math.max(firstPosition*100-top*100/height+Math.floor(this.mScrollY/this.getHeight()*this.mItemCount*100),0);}}else{var index=void 0;var count=this.mItemCount;if(firstPosition==0){index=0;}else if(firstPosition+childCount==count){index=count;}else{index=firstPosition+childCount/2;}return Math.floor(firstPosition+childCount*(index/count));}}return 0;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var result=void 0;if(this.mSmoothScrollbarEnabled){result=Math.max(this.mItemCount*100,0);if(this.mScrollY!=0){result+=Math.abs(Math.floor(this.mScrollY/this.getHeight()*this.mItemCount*100));}}else{result=this.mItemCount;}return result;}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){var count=this.getChildCount();var fadeEdge=_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'getTopFadingEdgeStrength',this).call(this);if(count==0){return fadeEdge;}else{if(this.mFirstPosition>0){return 1.0;}var top=this.getChildAt(0).getTop();var fadeLength=this.getVerticalFadingEdgeLength();return topheight-this.mPaddingBottom?(bottom-height+this.mPaddingBottom)/fadeLength:fadeEdge;}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(this.mSelector==null){this.useDefaultSelector();}var listPadding=this.mListPadding;listPadding.left=this.mSelectionLeftPadding+this.mPaddingLeft;listPadding.top=this.mSelectionTopPadding+this.mPaddingTop;listPadding.right=this.mSelectionRightPadding+this.mPaddingRight;listPadding.bottom=this.mSelectionBottomPadding+this.mPaddingBottom;if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_NORMAL){var childCount=this.getChildCount();var listBottom=this.getHeight()-this.getPaddingBottom();var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild!=null?lastChild.getBottom():listBottom;this.mForceTranscriptScroll=this.mFirstPosition+childCount>=this.mLastHandledItemCount&&lastBottom<=listBottom;}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mInLayout=true;if(changed){var childCount=this.getChildCount();for(var i=0;i0;if(!canScrollUp){if(this.getChildCount()>0){var child=this.getChildAt(0);canScrollUp=child.getTop()0){var _child12=this.getChildAt(count-1);canScrollDown=_child12.getBottom()>this.mBottom-this.mListPadding.bottom;}this.mScrollDown.setVisibility(canScrollDown?View.VISIBLE:View.INVISIBLE);}}},{key:'getSelectedView',value:function getSelectedView(){if(this.mItemCount>0&&this.mSelectedPosition>=0){return this.getChildAt(this.mSelectedPosition-this.mFirstPosition);}else{return null;}}},{key:'getListPaddingTop',value:function getListPaddingTop(){return this.mListPadding.top;}},{key:'getListPaddingBottom',value:function getListPaddingBottom(){return this.mListPadding.bottom;}},{key:'getListPaddingLeft',value:function getListPaddingLeft(){return this.mListPadding.left;}},{key:'getListPaddingRight',value:function getListPaddingRight(){return this.mListPadding.right;}},{key:'obtainView',value:function obtainView(position,isScrap){isScrap[0]=false;var scrapView=void 0;scrapView=this.mRecycler.getTransientStateView(position);if(scrapView==null){scrapView=this.mRecycler.getScrapView(position);}var child=void 0;if(scrapView!=null){child=this.mAdapter.getView(position,scrapView,this);if(child!=scrapView){this.mRecycler.addScrapView(scrapView,position);if(this.mCacheColorHint!=0){child.setDrawingCacheBackgroundColor(this.mCacheColorHint);}}else{isScrap[0]=true;child.dispatchFinishTemporaryDetach();}}else{child=this.mAdapter.getView(position,null,this);if(this.mCacheColorHint!=0){child.setDrawingCacheBackgroundColor(this.mCacheColorHint);}}if(this.mAdapterHasStableIds){var vlp=child.getLayoutParams();var lp=void 0;if(vlp==null){lp=this.generateDefaultLayoutParams();}else if(!this.checkLayoutParams(vlp)){lp=this.generateLayoutParams(vlp);}else{lp=vlp;}lp.itemId=this.mAdapter.getItemId(position);child.setLayoutParams(lp);}return child;}},{key:'positionSelector',value:function positionSelector(){for(var _len26=arguments.length,args=Array(_len26),_key27=0;_key27<_len26;_key27++){args[_key27]=arguments[_key27];}if(args.length===4){var l=args[0],t=args[1],_r2=args[2],b=args[3];this.mSelectorRect.set(l-this.mSelectionLeftPadding,t-this.mSelectionTopPadding,_r2+this.mSelectionRightPadding,b+this.mSelectionBottomPadding);}else{var position=args[0];var sel=args[1];if(position!=AbsListView.INVALID_POSITION){this.mSelectorPosition=position;}var selectorRect=this.mSelectorRect;selectorRect.set(sel.getLeft(),sel.getTop(),sel.getRight(),sel.getBottom());if(sel['adjustListItemSelectionBounds']){sel.adjustListItemSelectionBounds(selectorRect);}this.positionSelector(selectorRect.left,selectorRect.top,selectorRect.right,selectorRect.bottom);var isChildViewEnabled=this.mIsChildViewEnabled;if(sel.isEnabled()!=isChildViewEnabled){this.mIsChildViewEnabled=!isChildViewEnabled;if(this.getSelectedItemPosition()!=AbsListView.INVALID_POSITION){this.refreshDrawableState();}}}}},{key:'dispatchDraw',value:function dispatchDraw(canvas){var saveCount=0;var clipToPadding=(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK;if(clipToPadding){saveCount=canvas.save();var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);this.mGroupFlags&=~AbsListView.CLIP_TO_PADDING_MASK;}var drawSelectorOnTop=this.mDrawSelectorOnTop;if(!drawSelectorOnTop){this.drawSelector(canvas);}_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'dispatchDraw',this).call(this,canvas);if(drawSelectorOnTop){this.drawSelector(canvas);}if(clipToPadding){canvas.restoreToCount(saveCount);this.mGroupFlags|=AbsListView.CLIP_TO_PADDING_MASK;}}},{key:'isPaddingOffsetRequired',value:function isPaddingOffsetRequired(){return(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)!=AbsListView.CLIP_TO_PADDING_MASK;}},{key:'getLeftPaddingOffset',value:function getLeftPaddingOffset(){return(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:-this.mPaddingLeft;}},{key:'getTopPaddingOffset',value:function getTopPaddingOffset(){return(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:-this.mPaddingTop;}},{key:'getRightPaddingOffset',value:function getRightPaddingOffset(){return(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:this.mPaddingRight;}},{key:'getBottomPaddingOffset',value:function getBottomPaddingOffset(){return(this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK?0:this.mPaddingBottom;}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){if(this.getChildCount()>0){this.mDataChanged=true;this.rememberSyncState();}}},{key:'touchModeDrawsInPressedState',value:function touchModeDrawsInPressedState(){switch(this.mTouchMode){case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:return true;default:return false;}}},{key:'shouldShowSelector',value:function shouldShowSelector(){return!this.isInTouchMode()||this.touchModeDrawsInPressedState()&&this.isPressed();}},{key:'drawSelector',value:function drawSelector(canvas){if(!this.mSelectorRect.isEmpty()){var selector=this.mSelector;selector.setBounds(this.mSelectorRect);selector.draw(canvas);}}},{key:'setDrawSelectorOnTop',value:function setDrawSelectorOnTop(onTop){this.mDrawSelectorOnTop=onTop;}},{key:'setSelector',value:function setSelector(sel){if(this.mSelector!=null){this.mSelector.setCallback(null);this.unscheduleDrawable(this.mSelector);}this.mSelector=sel;var padding=new Rect();sel.getPadding(padding);this.mSelectionLeftPadding=padding.left;this.mSelectionTopPadding=padding.top;this.mSelectionRightPadding=padding.right;this.mSelectionBottomPadding=padding.bottom;sel.setCallback(this);this.updateSelectorState();}},{key:'getSelector',value:function getSelector(){return this.mSelector;}},{key:'keyPressed',value:function keyPressed(){if(!this.isEnabled()||!this.isClickable()){return;}var selector=this.mSelector;var selectorRect=this.mSelectorRect;if(selector!=null&&(this.isFocused()||this.touchModeDrawsInPressedState())&&!selectorRect.isEmpty()){var v=this.getChildAt(this.mSelectedPosition-this.mFirstPosition);if(v!=null){if(v.hasFocusable())return;v.setPressed(true);}this.setPressed(true);var longClickable=this.isLongClickable();var d=selector.getCurrent();if(longClickable&&!this.mDataChanged){if(this.mPendingCheckForKeyLongPress==null){this.mPendingCheckForKeyLongPress=new AbsListView.CheckForKeyLongPress(this);}this.mPendingCheckForKeyLongPress.rememberWindowAttachCount();this.postDelayed(this.mPendingCheckForKeyLongPress,ViewConfiguration.getLongPressTimeout());}}}},{key:'setScrollIndicators',value:function setScrollIndicators(up,down){this.mScrollUp=up;this.mScrollDown=down;}},{key:'updateSelectorState',value:function updateSelectorState(){if(this.mSelector!=null){if(this.shouldShowSelector()){this.mSelector.setState(this.getDrawableState());}else{this.mSelector.setState(StateSet.NOTHING);}}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'drawableStateChanged',this).call(this);this.updateSelectorState();}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if(this.mIsChildViewEnabled){return _get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}var enabledState=AbsListView.ENABLED_STATE_SET[0];var state=_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onCreateDrawableState',this).call(this,extraSpace+1);var enabledPos=-1;for(var i=state.length-1;i>=0;i--){if(state[i]==enabledState){enabledPos=i;break;}}if(enabledPos>=0){System.arraycopy(state,enabledPos+1,state,enabledPos,state.length-enabledPos-1);}return state;}},{key:'verifyDrawable',value:function verifyDrawable(dr){return this.mSelector==dr||_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'verifyDrawable',this).call(this,dr);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mSelector!=null)this.mSelector.jumpToCurrentState();}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onAttachedToWindow',this).call(this);var treeObserver=this.getViewTreeObserver();treeObserver.addOnTouchModeChangeListener(this);if(this.mAdapter!=null&&this.mDataSetObserver==null){this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mDataChanged=true;this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onDetachedFromWindow',this).call(this);this.dismissPopup();this.mRecycler.clear();var treeObserver=this.getViewTreeObserver();treeObserver.removeOnTouchModeChangeListener(this);if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);this.mDataSetObserver=null;}if(this.mFlingRunnable!=null){this.removeCallbacks(this.mFlingRunnable);}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mClearScrollingCache!=null){this.removeCallbacks(this.mClearScrollingCache);}if(this.mPerformClick_!=null){this.removeCallbacks(this.mPerformClick_);}if(this.mTouchModeReset!=null){this.removeCallbacks(this.mTouchModeReset);this.mTouchModeReset.run();}}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasWindowFocus){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onWindowFocusChanged',this).call(this,hasWindowFocus);var touchMode=this.isInTouchMode()?AbsListView.TOUCH_MODE_ON:AbsListView.TOUCH_MODE_OFF;if(!hasWindowFocus){this.setChildrenDrawingCacheEnabled(false);if(this.mFlingRunnable!=null){this.removeCallbacks(this.mFlingRunnable);this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentCaches();this.finishGlows();this.invalidate();}}this.dismissPopup();if(touchMode==AbsListView.TOUCH_MODE_OFF){this.mResurrectToPosition=this.mSelectedPosition;}}else{if(this.mFiltered&&!this.mPopupHidden){this.showPopup();}if(touchMode!=this.mLastTouchMode&&this.mLastTouchMode!=AbsListView.TOUCH_MODE_UNKNOWN){if(touchMode==AbsListView.TOUCH_MODE_OFF){this.resurrectSelection();}else{this.hideSelector();this.mLayoutMode=AbsListView.LAYOUT_NORMAL;this.layoutChildren();}}}this.mLastTouchMode=touchMode;}},{key:'onCancelPendingInputEvents',value:function onCancelPendingInputEvents(){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onCancelPendingInputEvents',this).call(this);if(this.mPerformClick_!=null){this.removeCallbacks(this.mPerformClick_);}if(this.mPendingCheckForTap_!=null){this.removeCallbacks(this.mPendingCheckForTap_);}if(this.mPendingCheckForLongPress_List!=null){this.removeCallbacks(this.mPendingCheckForLongPress_List);}if(this.mPendingCheckForKeyLongPress!=null){this.removeCallbacks(this.mPendingCheckForKeyLongPress);}}},{key:'performLongPress',value:function performLongPress(child,longPressPosition,longPressId){var handled=false;if(this.mOnItemLongClickListener!=null){handled=this.mOnItemLongClickListener.onItemLongClick(this,child,longPressPosition,longPressId);}if(handled){this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);}return handled;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(KeyEvent.isConfirmKey(keyCode)){if(!this.isEnabled()){return true;}if(this.isClickable()&&this.isPressed()&&this.mSelectedPosition>=0&&this.mAdapter!=null&&this.mSelectedPosition=0;i--){var child=this.getChildAt(i);if(child.getVisibility()==View.VISIBLE){child.getHitRect(frame);if(frame.contains(x,y)){return this.mFirstPosition+i;}}}return AbsListView.INVALID_POSITION;}},{key:'pointToRowId',value:function pointToRowId(x,y){var position=this.pointToPosition(x,y);if(position>=0){return this.mAdapter.getItemId(position);}return AbsListView.INVALID_ROW_ID;}},{key:'checkOverScrollStartScrollIfNeeded',value:function checkOverScrollStartScrollIfNeeded(){return this.mScrollY!=0;}},{key:'startScrollIfNeeded',value:function startScrollIfNeeded(y){var deltaY=y-this.mMotionY;var distance=Math.abs(deltaY);var overscroll=this.checkOverScrollStartScrollIfNeeded();if(overscroll||distance>this.mTouchSlop){this.createScrollingCache();if(this.mScrollY!=0){this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;this.mMotionCorrection=0;}else{this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;this.mMotionCorrection=deltaY>0?this.mTouchSlop:-this.mTouchSlop;}this.removeCallbacks(this.mPendingCheckForLongPress_List);this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}this.scrollIfNeeded(y);return true;}return false;}},{key:'scrollIfNeeded',value:function scrollIfNeeded(y){var rawDeltaY=y-this.mMotionY;var deltaY=rawDeltaY-this.mMotionCorrection;var incrementalDeltaY=this.mLastY!=Integer.MIN_VALUE?y-this.mLastY:deltaY;if(this.mTouchMode==AbsListView.TOUCH_MODE_SCROLL){if(AbsListView.PROFILE_SCROLLING){if(!this.mScrollProfilingStarted){this.mScrollProfilingStarted=true;}}if(y!=this.mLastY){if((this.mGroupFlags&AbsListView.FLAG_DISALLOW_INTERCEPT)==0&&Math.abs(rawDeltaY)>this.mTouchSlop){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}var motionIndex=void 0;if(this.mMotionPosition>=0){motionIndex=this.mMotionPosition-this.mFirstPosition;}else{motionIndex=this.getChildCount()/2;}var motionViewPrevTop=0;var motionView=this.getChildAt(motionIndex);if(motionView!=null){motionViewPrevTop=motionView.getTop();}var atEdge=false;if(incrementalDeltaY!=0){atEdge=this.trackMotionScroll(deltaY,incrementalDeltaY);}motionView=this.getChildAt(motionIndex);if(motionView!=null){var motionViewRealTop=motionView.getTop();if(atEdge){var overscroll=-incrementalDeltaY-(motionViewRealTop-motionViewPrevTop);this.overScrollBy(0,overscroll,0,this.mScrollY,0,0,0,this.mOverscrollDistance,true);if(Math.abs(this.mOverscrollDistance)==Math.abs(this.mScrollY)){if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}var overscrollMode=this.getOverScrollMode();if(overscrollMode==AbsListView.OVER_SCROLL_ALWAYS||overscrollMode==AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS&&!this.contentFits()){this.mDirection=0;this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;if(rawDeltaY>0){}else if(rawDeltaY<0){}}}this.mMotionY=y;}this.mLastY=y;}}else if(this.mTouchMode==AbsListView.TOUCH_MODE_OVERSCROLL){if(y!=this.mLastY){var oldScroll=this.mScrollY;var newScroll=oldScroll-incrementalDeltaY;var newDirection=y>this.mLastY?1:-1;if(this.mDirection==0){this.mDirection=newDirection;}var overScrollDistance=-incrementalDeltaY;if(newScroll<0&&oldScroll>=0||newScroll>0&&oldScroll<=0){overScrollDistance=-oldScroll;incrementalDeltaY+=overScrollDistance;}else{incrementalDeltaY=0;}if(overScrollDistance!=0){this.overScrollBy(0,overScrollDistance,0,this.mScrollY,0,0,0,this.mOverscrollDistance,true);}if(incrementalDeltaY!=0){if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentIfNeeded();}this.trackMotionScroll(incrementalDeltaY,incrementalDeltaY);this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;var motionPosition=this.findClosestMotionRow(y);this.mMotionCorrection=0;var _motionView=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=_motionView!=null?_motionView.getTop():0;this.mMotionY=y;this.mMotionPosition=motionPosition;}this.mLastY=y;this.mDirection=newDirection;}}}},{key:'onTouchModeChanged',value:function onTouchModeChanged(isInTouchMode){if(isInTouchMode){this.hideSelector();if(this.getHeight()>0&&this.getChildCount()>0){this.layoutChildren();}this.updateSelectorState();}else{var touchMode=this.mTouchMode;if(touchMode==AbsListView.TOUCH_MODE_OVERSCROLL||touchMode==AbsListView.TOUCH_MODE_OVERFLING){if(this.mFlingRunnable!=null){this.mFlingRunnable.endFling();}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(this.mScrollY!=0){this.mScrollY=0;this.invalidateParentCaches();this.finishGlows();this.invalidate();}}}}},{key:'onTouchEvent',value:function onTouchEvent(ev){if(!this.isEnabled()){return this.isClickable()||this.isLongClickable();}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(!this.isAttachedToWindow()){return false;}this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var actionMasked=ev.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_DOWN:{this.onTouchDown(ev);break;}case MotionEvent.ACTION_MOVE:{this.onTouchMove(ev);break;}case MotionEvent.ACTION_UP:{this.onTouchUp(ev);break;}case MotionEvent.ACTION_CANCEL:{this.onTouchCancel();break;}case MotionEvent.ACTION_POINTER_UP:{this.onSecondaryPointerUp(ev);var _x174=this.mMotionX;var _y6=this.mMotionY;var motionPosition=this.pointToPosition(_x174,_y6);if(motionPosition>=0){var child=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=child.getTop();this.mMotionPosition=motionPosition;}this.mLastY=_y6;break;}case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();var id=ev.getPointerId(index);var _x175=Math.floor(ev.getX(index));var _y7=Math.floor(ev.getY(index));this.mMotionCorrection=0;this.mActivePointerId=id;this.mMotionX=_x175;this.mMotionY=_y7;var _motionPosition=this.pointToPosition(_x175,_y7);if(_motionPosition>=0){var _child13=this.getChildAt(_motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=_child13.getTop();this.mMotionPosition=_motionPosition;}this.mLastY=_y7;break;}}return true;}},{key:'onTouchDown',value:function onTouchDown(ev){this.mActivePointerId=ev.getPointerId(0);if(this.mTouchMode==AbsListView.TOUCH_MODE_OVERFLING){this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.mTouchMode=AbsListView.TOUCH_MODE_OVERSCROLL;this.mMotionX=Math.floor(ev.getX());this.mMotionY=Math.floor(ev.getY());this.mLastY=this.mMotionY;this.mMotionCorrection=0;this.mDirection=0;}else{var _x176=Math.floor(ev.getX());var _y8=Math.floor(ev.getY());var motionPosition=this.pointToPosition(_x176,_y8);if(!this.mDataChanged){if(this.mTouchMode==AbsListView.TOUCH_MODE_FLING){this.createScrollingCache();this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;this.mMotionCorrection=0;motionPosition=this.findMotionRow(_y8);this.mFlingRunnable.flywheelTouch();}else if(motionPosition>=0&&this.getAdapter().isEnabled(motionPosition)){this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;if(this.mPendingCheckForTap_==null){this.mPendingCheckForTap_=new AbsListView.CheckForTap(this);}this.postDelayed(this.mPendingCheckForTap_,ViewConfiguration.getTapTimeout());}else if(motionPosition<0){this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;}}if(motionPosition>=0){var v=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=v.getTop();}this.mMotionX=_x176;this.mMotionY=_y8;this.mMotionPosition=motionPosition;this.mLastY=Integer.MIN_VALUE;}if(this.mTouchMode==AbsListView.TOUCH_MODE_DOWN&&this.mMotionPosition!=AbsListView.INVALID_POSITION&&this.performButtonActionOnTouchDown(ev)){this.removeCallbacks(this.mPendingCheckForTap_);}}},{key:'onTouchMove',value:function onTouchMove(ev){var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){pointerIndex=0;this.mActivePointerId=ev.getPointerId(pointerIndex);}if(this.mDataChanged){this.layoutChildren();}var y=Math.floor(ev.getY(pointerIndex));switch(this.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:if(this.startScrollIfNeeded(y)){break;}var _x177=ev.getX(pointerIndex);if(!this.pointInView(_x177,y,this.mTouchSlop)){this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.removeCallbacks(this.mTouchMode==AbsListView.TOUCH_MODE_DOWN?this.mPendingCheckForTap_:this.mPendingCheckForLongPress_List);this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;this.updateSelectorState();}break;case AbsListView.TOUCH_MODE_SCROLL:case AbsListView.TOUCH_MODE_OVERSCROLL:this.scrollIfNeeded(y);break;}}},{key:'onTouchUp',value:function onTouchUp(ev){var _this103=this;var _ret6=function(){switch(_this103.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:case AbsListView.TOUCH_MODE_TAP:case AbsListView.TOUCH_MODE_DONE_WAITING:var motionPosition=_this103.mMotionPosition;var child=_this103.getChildAt(motionPosition-_this103.mFirstPosition);if(child!=null){if(_this103.mTouchMode!=AbsListView.TOUCH_MODE_DOWN){child.setPressed(false);}var _x178=ev.getX();var inList=_x178>_this103.mListPadding.left&&_x178<_this103.getWidth()-_this103.mListPadding.right;if(inList&&!child.hasFocusable()){var _ret7=function(){if(_this103.mPerformClick_==null){_this103.mPerformClick_=new AbsListView.PerformClick(_this103);}var performClick=_this103.mPerformClick_;performClick.mClickMotionPosition=motionPosition;performClick.rememberWindowAttachCount();_this103.mResurrectToPosition=motionPosition;if(_this103.mTouchMode==AbsListView.TOUCH_MODE_DOWN||_this103.mTouchMode==AbsListView.TOUCH_MODE_TAP){_this103.removeCallbacks(_this103.mTouchMode==AbsListView.TOUCH_MODE_DOWN?_this103.mPendingCheckForTap_:_this103.mPendingCheckForLongPress_List);_this103.mLayoutMode=AbsListView.LAYOUT_NORMAL;if(!_this103.mDataChanged&&_this103.mAdapter.isEnabled(motionPosition)){_this103.mTouchMode=AbsListView.TOUCH_MODE_TAP;_this103.setSelectedPositionInt(_this103.mMotionPosition);_this103.layoutChildren();child.setPressed(true);_this103.positionSelector(_this103.mMotionPosition,child);_this103.setPressed(true);if(_this103.mSelector!=null){var d=_this103.mSelector.getCurrent();}if(_this103.mTouchModeReset!=null){_this103.removeCallbacks(_this103.mTouchModeReset);}_this103.mTouchModeReset=function(){var inner_this=_this103;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.mTouchModeReset=null;inner_this.mTouchMode=AbsListView.TOUCH_MODE_REST;child.setPressed(false);inner_this.setPressed(false);if(!inner_this.mDataChanged&&inner_this.isAttachedToWindow()){performClick.run();}}}]);return _Inner;}();return new _Inner();}();_this103.postDelayed(_this103.mTouchModeReset,ViewConfiguration.getPressedStateDuration());}else{_this103.mTouchMode=AbsListView.TOUCH_MODE_REST;_this103.updateSelectorState();}return{v:{v:void 0}};}else if(!_this103.mDataChanged&&_this103.mAdapter.isEnabled(motionPosition)){performClick.run();}}();if((typeof _ret7==='undefined'?'undefined':_typeof(_ret7))==="object")return _ret7.v;}}_this103.mTouchMode=AbsListView.TOUCH_MODE_REST;_this103.updateSelectorState();break;case AbsListView.TOUCH_MODE_SCROLL:var childCount=_this103.getChildCount();if(childCount>0){var firstChildTop=_this103.getChildAt(0).getTop();var lastChildBottom=_this103.getChildAt(childCount-1).getBottom();var contentTop=_this103.mListPadding.top;var contentBottom=_this103.getHeight()-_this103.mListPadding.bottom;if(_this103.mFirstPosition==0&&firstChildTop>=contentTop&&_this103.mFirstPosition+childCount<_this103.mItemCount&&lastChildBottom<=_this103.getHeight()-contentBottom){_this103.mTouchMode=AbsListView.TOUCH_MODE_REST;_this103.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);}else{var _velocityTracker=_this103.mVelocityTracker;_velocityTracker.computeCurrentVelocity(1000,_this103.mMaximumVelocity);var _initialVelocity=Math.floor(_velocityTracker.getYVelocity(_this103.mActivePointerId)*_this103.mVelocityScale);if(Math.abs(_initialVelocity)>_this103.mMinimumVelocity&&!(_this103.mFirstPosition==0&&firstChildTop==contentTop-_this103.mOverscrollDistance||_this103.mFirstPosition+childCount==_this103.mItemCount&&lastChildBottom==contentBottom+_this103.mOverscrollDistance)){if(_this103.mFlingRunnable==null){_this103.mFlingRunnable=new AbsListView.FlingRunnable(_this103);}_this103.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);_this103.mFlingRunnable.start(-_initialVelocity);}else{_this103.mTouchMode=AbsListView.TOUCH_MODE_REST;_this103.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);if(_this103.mFlingRunnable!=null){_this103.mFlingRunnable.endFling();}if(_this103.mPositionScroller!=null){_this103.mPositionScroller.stop();}}}}else{_this103.mTouchMode=AbsListView.TOUCH_MODE_REST;_this103.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);}break;case AbsListView.TOUCH_MODE_OVERSCROLL:if(_this103.mFlingRunnable==null){_this103.mFlingRunnable=new AbsListView.FlingRunnable(_this103);}var velocityTracker=_this103.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,_this103.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getYVelocity(_this103.mActivePointerId));_this103.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);if(Math.abs(initialVelocity)>_this103.mMinimumVelocity){_this103.mFlingRunnable.startOverfling(-initialVelocity);}else{_this103.mFlingRunnable.startSpringback();}break;}}();if((typeof _ret6==='undefined'?'undefined':_typeof(_ret6))==="object")return _ret6.v;this.setPressed(false);this.invalidate();this.removeCallbacks(this.mPendingCheckForLongPress_List);this.recycleVelocityTracker();this.mActivePointerId=AbsListView.INVALID_POINTER;if(AbsListView.PROFILE_SCROLLING){if(this.mScrollProfilingStarted){this.mScrollProfilingStarted=false;}}}},{key:'onTouchCancel',value:function onTouchCancel(){switch(this.mTouchMode){case AbsListView.TOUCH_MODE_OVERSCROLL:if(this.mFlingRunnable==null){this.mFlingRunnable=new AbsListView.FlingRunnable(this);}this.mFlingRunnable.startSpringback();break;case AbsListView.TOUCH_MODE_OVERFLING:break;default:this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.setPressed(false);var motionView=this.getChildAt(this.mMotionPosition-this.mFirstPosition);if(motionView!=null){motionView.setPressed(false);}this.clearScrollingCache();this.removeCallbacks(this.mPendingCheckForLongPress_List);this.recycleVelocityTracker();}this.mActivePointerId=AbsListView.INVALID_POINTER;}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(this.mScrollY!=scrollY){this.onScrollChanged(this.mScrollX,scrollY,this.mScrollX,this.mScrollY);this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.awakenScrollBars();}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(event.isPointerEvent()){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(this.mTouchMode==AbsListView.TOUCH_MODE_REST){var vscroll=event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(vscroll!=0){var delta=Math.floor(vscroll*this.getVerticalScrollFactor());if(!this.trackMotionScroll(delta,delta)){return true;}}}}}}return _get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'draw',value:function draw(canvas){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'draw',this).call(this,canvas);}},{key:'setOverScrollEffectPadding',value:function setOverScrollEffectPadding(leftPadding,rightPadding){this.mGlowPaddingLeft=leftPadding;this.mGlowPaddingRight=rightPadding;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else{this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();var v=void 0;if(this.mPositionScroller!=null){this.mPositionScroller.stop();}if(!this.isAttachedToWindow()){return false;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{var touchMode=this.mTouchMode;if(touchMode==AbsListView.TOUCH_MODE_OVERFLING||touchMode==AbsListView.TOUCH_MODE_OVERSCROLL){this.mMotionCorrection=0;return true;}var _x179=Math.floor(ev.getX());var _y9=Math.floor(ev.getY());this.mActivePointerId=ev.getPointerId(0);var motionPosition=this.findMotionRow(_y9);if(touchMode!=AbsListView.TOUCH_MODE_FLING&&motionPosition>=0){v=this.getChildAt(motionPosition-this.mFirstPosition);this.mMotionViewOriginalTop=v.getTop();this.mMotionX=_x179;this.mMotionY=_y9;this.mMotionPosition=motionPosition;this.mTouchMode=AbsListView.TOUCH_MODE_DOWN;this.clearScrollingCache();}this.mLastY=Integer.MIN_VALUE;this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);if(touchMode==AbsListView.TOUCH_MODE_FLING){return true;}break;}case MotionEvent.ACTION_MOVE:{switch(this.mTouchMode){case AbsListView.TOUCH_MODE_DOWN:var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){pointerIndex=0;this.mActivePointerId=ev.getPointerId(pointerIndex);}var _y10=Math.floor(ev.getY(pointerIndex));this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);if(this.startScrollIfNeeded(_y10)){return true;}break;}break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:{this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.mActivePointerId=AbsListView.INVALID_POINTER;this.recycleVelocityTracker();this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);break;}case MotionEvent.ACTION_POINTER_UP:{this.onSecondaryPointerUp(ev);break;}}return false;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mMotionX=Math.floor(ev.getX(newPointerIndex));this.mMotionY=Math.floor(ev.getY(newPointerIndex));this.mMotionCorrection=0;this.mActivePointerId=ev.getPointerId(newPointerIndex);}}},{key:'addTouchables',value:function addTouchables(views){var count=this.getChildCount();var firstPosition=this.mFirstPosition;var adapter=this.mAdapter;if(adapter==null){return;}for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:false;if(this.mFlingRunnable==null){this.mFlingRunnable=new AbsListView.FlingRunnable(this);}var firstPos=this.mFirstPosition;var childCount=this.getChildCount();var lastPos=firstPos+childCount;var topLimit=this.getPaddingTop();var bottomLimit=this.getHeight()-this.getPaddingBottom();if(distance==0||this.mItemCount==0||childCount==0||firstPos==0&&this.getChildAt(0).getTop()==topLimit&&distance<0||lastPos==this.mItemCount&&this.getChildAt(childCount-1).getBottom()==bottomLimit&&distance>0){this.mFlingRunnable.endFling();if(this.mPositionScroller!=null){this.mPositionScroller.stop();}}else{this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);this.mFlingRunnable.startScroll(distance,duration,linear);}}},{key:'smoothScrollByOffset',value:function smoothScrollByOffset(position){var index=-1;if(position<0){index=this.getFirstVisiblePosition();}else if(position>0){index=this.getLastVisiblePosition();}if(index>-1){var child=this.getChildAt(index-this.getFirstVisiblePosition());if(child!=null){var visibleRect=new Rect();if(child.getGlobalVisibleRect(visibleRect)){var childRectArea=child.getWidth()*child.getHeight();var visibleRectArea=visibleRect.width()*visibleRect.height();var visibleArea=visibleRectArea/childRectArea;var visibleThreshold=0.75;if(position<0&&visibleArea0&&visibleArea0){var lastBottom=this.getChildAt(childCount-1).getBottom();var lastPosition=firstPosition+childCount;return lastPositionthis.getHeight()-listPadding.bottom;}else{var firstTop=this.getChildAt(0).getTop();return firstPosition>0||firstTop=listPadding.top&&incrementalDeltaY>=0;var cannotScrollUp=firstPosition+childCount==this.mItemCount&&lastBottom<=this.getHeight()-listPadding.bottom&&incrementalDeltaY<=0;if(cannotScrollDown||cannotScrollUp){return incrementalDeltaY!=0;}var down=incrementalDeltaY<0;var inTouchMode=this.isInTouchMode();if(inTouchMode){this.hideSelector();}var headerViewsCount=this.getHeaderViewsCount();var footerViewsStart=this.mItemCount-this.getFooterViewsCount();var start=0;var count=0;if(down){var top=-incrementalDeltaY;if((this.mGroupFlags&AbsListView.CLIP_TO_PADDING_MASK)==AbsListView.CLIP_TO_PADDING_MASK){top+=listPadding.top;}for(var i=0;i=top){break;}else{count++;var position=firstPosition+i;if(position>=headerViewsCount&&position=0;_i36--){var _child14=this.getChildAt(_i36);if(_child14.getTop()<=bottom){break;}else{start=_i36;count++;var _position2=firstPosition+_i36;if(_position2>=headerViewsCount&&_position20){this.detachViewsFromParent(start,count);this.mRecycler.removeSkippedScrap();}if(!this.awakenScrollBars()){this.invalidate();}this.offsetChildrenTopAndBottom(incrementalDeltaY);if(down){this.mFirstPosition+=count;}var absIncrementalDeltaY=Math.abs(incrementalDeltaY);if(spaceAbove=0&&childIndex=0&&_childIndex=0&&this.mNextSelectedPosition!=this.mSelectedPosition){this.mResurrectToPosition=this.mNextSelectedPosition;}this.setSelectedPositionInt(AbsListView.INVALID_POSITION);this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);this.mSelectedTop=0;}}},{key:'reconcileSelectedPosition',value:function reconcileSelectedPosition(){var position=this.mSelectedPosition;if(position<0){position=this.mResurrectToPosition;}position=Math.max(0,position);position=Math.min(position,this.mItemCount-1);return position;}},{key:'findClosestMotionRow',value:function findClosestMotionRow(y){var childCount=this.getChildCount();if(childCount==0){return AbsListView.INVALID_POSITION;}var motionRow=this.findMotionRow(y);return motionRow!=AbsListView.INVALID_POSITION?motionRow:this.mFirstPosition+childCount-1;}},{key:'invalidateViews',value:function invalidateViews(){this.mDataChanged=true;this.rememberSyncState();this.requestLayout();this.invalidate();}},{key:'resurrectSelectionIfNeeded',value:function resurrectSelectionIfNeeded(){if(this.mSelectedPosition<0&&this.resurrectSelection()){this.updateSelectorState();return true;}return false;}},{key:'resurrectSelection',value:function resurrectSelection(){var childCount=this.getChildCount();if(childCount<=0){return false;}var selectedTop=0;var selectedPos=void 0;var childrenTop=this.mListPadding.top;var childrenBottom=this.mBottom-this.mTop-this.mListPadding.bottom;var firstPosition=this.mFirstPosition;var toPosition=this.mResurrectToPosition;var down=true;if(toPosition>=firstPosition&&toPositionchildrenBottom){selectedTop=childrenBottom-selected.getMeasuredHeight()-this.getVerticalFadingEdgeLength();}}else{if(toPosition0||top=childrenTop){selectedPos=firstPosition+i;selectedTop=top;break;}}}else{var itemCount=this.mItemCount;down=false;selectedPos=firstPosition+childCount-1;for(var _i37=childCount-1;_i37>=0;_i37--){var _v3=this.getChildAt(_i37);var _top=_v3.getTop();var bottom=_v3.getBottom();if(_i37==childCount-1){selectedTop=_top;if(firstPosition+childCountchildrenBottom){childrenBottom-=this.getVerticalFadingEdgeLength();}}if(bottom<=childrenBottom){selectedPos=firstPosition+_i37;selectedTop=_top;break;}}}}this.mResurrectToPosition=AbsListView.INVALID_POSITION;this.removeCallbacks(this.mFlingRunnable);if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.mTouchMode=AbsListView.TOUCH_MODE_REST;this.clearScrollingCache();this.mSpecificTop=selectedTop;selectedPos=this.lookForSelectablePosition(selectedPos,down);if(selectedPos>=firstPosition&&selectedPos<=this.getLastVisiblePosition()){this.mLayoutMode=AbsListView.LAYOUT_SPECIFIC;this.updateSelectorState();this.setSelectionInt(selectedPos);this.invokeOnItemScrollListener();}else{selectedPos=AbsListView.INVALID_POSITION;}this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);return selectedPos>=0;}},{key:'confirmCheckedPositionsById',value:function confirmCheckedPositionsById(){this.mCheckStates.clear();var checkedCountChanged=false;for(var checkedIndex=0;checkedIndex0){var newPos=void 0;var selectablePos=void 0;if(this.mNeedSync){this.mNeedSync=false;this.mPendingSync=null;if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL){this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}else if(this.mTranscriptMode==AbsListView.TRANSCRIPT_MODE_NORMAL){if(this.mForceTranscriptScroll){this.mForceTranscriptScroll=false;this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}var childCount=this.getChildCount();var listBottom=this.getHeight()-this.getPaddingBottom();var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild!=null?lastChild.getBottom():listBottom;if(this.mFirstPosition+childCount>=lastHandledItemCount&&lastBottom<=listBottom){this.mLayoutMode=AbsListView.LAYOUT_FORCE_BOTTOM;return;}this.awakenScrollBars();}switch(this.mSyncMode){case AbsListView.SYNC_SELECTED_POSITION:if(this.isInTouchMode()){this.mLayoutMode=AbsListView.LAYOUT_SYNC;this.mSyncPosition=Math.min(Math.max(0,this.mSyncPosition),count-1);return;}else{newPos=this.findSyncPosition();if(newPos>=0){selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos==newPos){this.mSyncPosition=newPos;if(this.mSyncHeight==this.getHeight()){this.mLayoutMode=AbsListView.LAYOUT_SYNC;}else{this.mLayoutMode=AbsListView.LAYOUT_SET_SELECTION;}this.setNextSelectedPositionInt(newPos);return;}}}break;case AbsListView.SYNC_FIRST_POSITION:this.mLayoutMode=AbsListView.LAYOUT_SYNC;this.mSyncPosition=Math.min(Math.max(0,this.mSyncPosition),count-1);return;}}if(!this.isInTouchMode()){newPos=this.getSelectedItemPosition();if(newPos>=count){newPos=count-1;}if(newPos<0){newPos=0;}selectablePos=this.lookForSelectablePosition(newPos,true);if(selectablePos>=0){this.setNextSelectedPositionInt(selectablePos);return;}else{selectablePos=this.lookForSelectablePosition(newPos,false);if(selectablePos>=0){this.setNextSelectedPositionInt(selectablePos);return;}}}else{if(this.mResurrectToPosition>=0){return;}}}this.mLayoutMode=this.mStackFromBottom?AbsListView.LAYOUT_FORCE_BOTTOM:AbsListView.LAYOUT_FORCE_TOP;this.mSelectedPosition=AbsListView.INVALID_POSITION;this.mSelectedRowId=AbsListView.INVALID_ROW_ID;this.mNextSelectedPosition=AbsListView.INVALID_POSITION;this.mNextSelectedRowId=AbsListView.INVALID_ROW_ID;this.mNeedSync=false;this.mPendingSync=null;this.mSelectorPosition=AbsListView.INVALID_POSITION;this.checkSelectionChanged();}},{key:'onDisplayHint',value:function onDisplayHint(hint){_get2(AbsListView.prototype.__proto__||Object.getPrototypeOf(AbsListView.prototype),'onDisplayHint',this).call(this,hint);this.mPopupHidden=hint==AbsListView.INVISIBLE;}},{key:'dismissPopup',value:function dismissPopup(){}},{key:'showPopup',value:function showPopup(){}},{key:'positionPopup',value:function positionPopup(){}},{key:'isInFilterMode',value:function isInFilterMode(){return this.mFiltered;}},{key:'hasTextFilter',value:function hasTextFilter(){return this.mFiltered;}},{key:'onGlobalLayout',value:function onGlobalLayout(){if(this.isShown()){}else{}}},{key:'generateDefaultLayoutParams',value:function generateDefaultLayoutParams(){return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT,0);}},{key:'generateLayoutParams',value:function generateLayoutParams(p){return new AbsListView.LayoutParams(p);}},{key:'generateLayoutParamsFromAttr',value:function generateLayoutParamsFromAttr(attrs){return new AbsListView.LayoutParams(this.getContext(),attrs);}},{key:'checkLayoutParams',value:function checkLayoutParams(p){return p instanceof AbsListView.LayoutParams;}},{key:'setTranscriptMode',value:function setTranscriptMode(mode){this.mTranscriptMode=mode;}},{key:'getTranscriptMode',value:function getTranscriptMode(){return this.mTranscriptMode;}},{key:'getSolidColor',value:function getSolidColor(){return this.mCacheColorHint;}},{key:'setCacheColorHint',value:function setCacheColorHint(color){if(color!=this.mCacheColorHint){this.mCacheColorHint=color;var count=this.getChildCount();for(var i=0;ithis._mOverflingDistance)return overDistance;return this._mOverflingDistance;},set:function set(value){this._mOverflingDistance=value;}}],[{key:'getDistance',value:function getDistance(source,dest,direction){var sX=void 0,sY=void 0;var dX=void 0,dY=void 0;switch(direction){case View.FOCUS_RIGHT:sX=source.right;sY=source.top+source.height()/2;dX=dest.left;dY=dest.top+dest.height()/2;break;case View.FOCUS_DOWN:sX=source.left+source.width()/2;sY=source.bottom;dX=dest.left+dest.width()/2;dY=dest.top;break;case View.FOCUS_LEFT:sX=source.left;sY=source.top+source.height()/2;dX=dest.right;dY=dest.top+dest.height()/2;break;case View.FOCUS_UP:sX=source.left+source.width()/2;sY=source.top;dX=dest.left+dest.width()/2;dY=dest.bottom;break;case View.FOCUS_FORWARD:case View.FOCUS_BACKWARD:sX=source.right+source.width()/2;sY=source.top+source.height()/2;dX=dest.left+dest.width()/2;dY=dest.top+dest.height()/2;break;default:throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")');}var deltaX=dX-sX;var deltaY=dY-sY;return deltaY*deltaY+deltaX*deltaX;}},{key:'retrieveFromScrap',value:function retrieveFromScrap(scrapViews,position){var size=scrapViews.size();if(size>0){for(var i=0;i0&&motionPosition!=AbsListView.INVALID_POSITION&&motionPosition=0){var index=this._AbsListView_this.mSelectedPosition-this._AbsListView_this.mFirstPosition;var v=this._AbsListView_this.getChildAt(index);if(!this._AbsListView_this.mDataChanged){var handled=false;if(this.sameWindow()){handled=this._AbsListView_this.performLongPress(v,this._AbsListView_this.mSelectedPosition,this._AbsListView_this.mSelectedRowId);}if(handled){this._AbsListView_this.setPressed(false);v.setPressed(false);}}else{this._AbsListView_this.setPressed(false);if(v!=null)v.setPressed(false);}}}}]);return CheckForKeyLongPress;}(AbsListView.WindowRunnnable);AbsListView.CheckForKeyLongPress=CheckForKeyLongPress;var CheckForTap=function(){function CheckForTap(arg){_classCallCheck(this,CheckForTap);this._AbsListView_this=arg;}_createClass(CheckForTap,[{key:'run',value:function run(){if(this._AbsListView_this.mTouchMode==AbsListView.TOUCH_MODE_DOWN){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_TAP;var child=this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition-this._AbsListView_this.mFirstPosition);if(child!=null&&!child.hasFocusable()){this._AbsListView_this.mLayoutMode=AbsListView.LAYOUT_NORMAL;if(!this._AbsListView_this.mDataChanged){child.setPressed(true);this._AbsListView_this.setPressed(true);this._AbsListView_this.layoutChildren();this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition,child);this._AbsListView_this.refreshDrawableState();var longPressTimeout=ViewConfiguration.getLongPressTimeout();var longClickable=this._AbsListView_this.isLongClickable();if(this._AbsListView_this.mSelector!=null){var d=this._AbsListView_this.mSelector.getCurrent();}if(longClickable){if(this._AbsListView_this.mPendingCheckForLongPress_List==null){this._AbsListView_this.mPendingCheckForLongPress_List=new AbsListView.CheckForLongPress(this._AbsListView_this);}this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount();this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List,longPressTimeout);}else{this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;}}else{this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_DONE_WAITING;}}}}}]);return CheckForTap;}();AbsListView.CheckForTap=CheckForTap;var FlingRunnable=function(){function FlingRunnable(arg){var _this108=this;_classCallCheck(this,FlingRunnable);this.mLastFlingY=0;this.mCheckFlywheel=function(){var inner_this=_this108;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){var activeId=inner_this._AbsListView_this.mActivePointerId;var vt=inner_this._AbsListView_this.mVelocityTracker;var scroller=inner_this.mScroller;if(vt==null||activeId==AbsListView.INVALID_POINTER){return;}vt.computeCurrentVelocity(1000,inner_this._AbsListView_this.mMaximumVelocity);var yvel=-vt.getYVelocity(activeId);if(Math.abs(yvel)>=inner_this._AbsListView_this.mMinimumVelocity&&scroller.isScrollingInDirection(0,yvel)){inner_this._AbsListView_this.postDelayed(inner_this,FlingRunnable.FLYWHEEL_TIMEOUT);}else{inner_this.endFling();inner_this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_SCROLL;inner_this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);}}}]);return _Inner;}();return new _Inner();}();this._AbsListView_this=arg;this.mScroller=new OverScroller();}_createClass(FlingRunnable,[{key:'start',value:function start(initialVelocity){var initialY=initialVelocity<0?Integer.MAX_VALUE:0;this.mLastFlingY=initialY;this.mScroller.setInterpolator(null);this.mScroller.fling(0,initialY,0,initialVelocity,0,Integer.MAX_VALUE,0,Integer.MAX_VALUE);this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_FLING;this._AbsListView_this.postOnAnimation(this);if(AbsListView.PROFILE_FLINGING){if(!this._AbsListView_this.mFlingProfilingStarted){this._AbsListView_this.mFlingProfilingStarted=true;}}}},{key:'startSpringback',value:function startSpringback(){if(this.mScroller.springBack(0,this._AbsListView_this.mScrollY,0,0,0,0)){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}else{this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);}}},{key:'startOverfling',value:function startOverfling(initialVelocity){this.mScroller.setInterpolator(null);var minY=Integer.MIN_VALUE,maxY=Integer.MAX_VALUE;if(this._AbsListView_this.mScrollY<0)minY=0;else if(this._AbsListView_this.mScrollY>0)maxY=0;this.mScroller.fling(0,this._AbsListView_this.mScrollY,0,initialVelocity,0,0,minY,maxY,0,this._AbsListView_this.getHeight());this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}},{key:'edgeReached',value:function edgeReached(delta){this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY,0,this._AbsListView_this.mOverflingDistance);var overscrollMode=this._AbsListView_this.getOverScrollMode();if(overscrollMode==AbsListView.OVER_SCROLL_ALWAYS||overscrollMode==AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS&&!this._AbsListView_this.contentFits()){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;}else{this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;if(this._AbsListView_this.mPositionScroller!=null){this._AbsListView_this.mPositionScroller.stop();}}this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}},{key:'startScroll',value:function startScroll(distance,duration,linear){var initialY=distance<0?Integer.MAX_VALUE:0;this.mLastFlingY=initialY;this.mScroller.setInterpolator(linear?AbsListView.sLinearInterpolator:null);this.mScroller.startScroll(0,initialY,0,distance,duration);this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_FLING;this._AbsListView_this.postOnAnimation(this);}},{key:'endFling',value:function endFling(){this._AbsListView_this.mTouchMode=AbsListView.TOUCH_MODE_REST;this._AbsListView_this.removeCallbacks(this);this._AbsListView_this.removeCallbacks(this.mCheckFlywheel);this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);this._AbsListView_this.clearScrollingCache();this.mScroller.abortAnimation();}},{key:'flywheelTouch',value:function flywheelTouch(){this._AbsListView_this.postDelayed(this.mCheckFlywheel,FlingRunnable.FLYWHEEL_TIMEOUT);}},{key:'run',value:function run(){switch(this._AbsListView_this.mTouchMode){default:this.endFling();return;case AbsListView.TOUCH_MODE_SCROLL:if(this.mScroller.isFinished()){return;}case AbsListView.TOUCH_MODE_FLING:{if(this._AbsListView_this.mDataChanged){this._AbsListView_this.layoutChildren();}if(this._AbsListView_this.mItemCount==0||this._AbsListView_this.getChildCount()==0){this.endFling();return;}var scroller=this.mScroller;var more=scroller.computeScrollOffset();var _y11=scroller.getCurrY();var delta=this.mLastFlingY-_y11;if(delta>0){this._AbsListView_this.mMotionPosition=this._AbsListView_this.mFirstPosition;var firstView=this._AbsListView_this.getChildAt(0);this._AbsListView_this.mMotionViewOriginalTop=firstView.getTop();delta=Math.min(this._AbsListView_this.getHeight()-this._AbsListView_this.mPaddingBottom-this._AbsListView_this.mPaddingTop-1,delta);}else{var offsetToLast=this._AbsListView_this.getChildCount()-1;this._AbsListView_this.mMotionPosition=this._AbsListView_this.mFirstPosition+offsetToLast;var lastView=this._AbsListView_this.getChildAt(offsetToLast);this._AbsListView_this.mMotionViewOriginalTop=lastView.getTop();delta=Math.max(-(this._AbsListView_this.getHeight()-this._AbsListView_this.mPaddingBottom-this._AbsListView_this.mPaddingTop-1),delta);}var motionView=this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition-this._AbsListView_this.mFirstPosition);var oldTop=0;if(motionView!=null){oldTop=motionView.getTop();}var atEdge=this._AbsListView_this.trackMotionScroll(delta,delta);var atEnd=atEdge&&delta!=0;if(atEnd){if(motionView!=null){var overshoot=-(delta-(motionView.getTop()-oldTop));this._AbsListView_this.overScrollBy(0,overshoot,0,this._AbsListView_this.mScrollY,0,0,0,this._AbsListView_this.mOverflingDistance,false);}if(more){this.edgeReached(delta);}break;}if(more&&!atEnd){if(atEdge)this._AbsListView_this.invalidate();this.mLastFlingY=_y11;this._AbsListView_this.postOnAnimation(this);}else{this.endFling();if(AbsListView.PROFILE_FLINGING){if(this._AbsListView_this.mFlingProfilingStarted){this._AbsListView_this.mFlingProfilingStarted=false;}}}break;}case AbsListView.TOUCH_MODE_OVERFLING:{var _scroller=this.mScroller;if(_scroller.computeScrollOffset()){var scrollY=this._AbsListView_this.mScrollY;var currY=_scroller.getCurrY();var deltaY=currY-scrollY;var crossDown=scrollY<=0&&currY>0;var crossUp=scrollY>=0&&currY<0;if(crossDown||crossUp){var velocity=Math.floor(_scroller.getCurrVelocity());if(crossUp)velocity=-velocity;_scroller.abortAnimation();this.start(velocity);deltaY=-scrollY;}if(this._AbsListView_this.overScrollBy(0,deltaY,0,scrollY,0,0,0,this._AbsListView_this.mOverflingDistance,false)){this.startSpringback();}else{this._AbsListView_this.invalidate();this._AbsListView_this.postOnAnimation(this);}}else{this.endFling();}break;}}}}]);return FlingRunnable;}();FlingRunnable.FLYWHEEL_TIMEOUT=40;AbsListView.FlingRunnable=FlingRunnable;var PositionScroller=function(){function PositionScroller(arg){_classCallCheck(this,PositionScroller);this.mMode=0;this.mTargetPos=0;this.mBoundPos=0;this.mLastSeenPos=0;this.mScrollDuration=0;this.mExtraScroll=0;this.mOffsetFromTop=0;this._AbsListView_this=arg;this.mExtraScroll=ViewConfiguration.get().getScaledFadingEdgeLength();}_createClass(PositionScroller,[{key:'start',value:function start(position,boundPosition){if(boundPosition==null)this._start_1(position);else this._start_2(position,boundPosition);}},{key:'_start_1',value:function _start_1(position){var _this109=this;this.stop();if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var inner_this=_this109;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.start(position);}}]);return _Inner;}();return new _Inner();}();return;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=void 0;var clampedPosition=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));if(clampedPositionlastPos){viewTravelCount=clampedPosition-lastPos+1;this.mMode=PositionScroller.MOVE_DOWN_POS;}else{this.scrollToVisible(clampedPosition,AbsListView.INVALID_POSITION,PositionScroller.SCROLL_DURATION);return;}if(viewTravelCount>0){this.mScrollDuration=PositionScroller.SCROLL_DURATION/viewTravelCount;}else{this.mScrollDuration=PositionScroller.SCROLL_DURATION;}this.mTargetPos=clampedPosition;this.mBoundPos=AbsListView.INVALID_POSITION;this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'_start_2',value:function _start_2(position,boundPosition){var _this110=this;this.stop();if(boundPosition==AbsListView.INVALID_POSITION){this.start(position);return;}if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var inner_this=_this110;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.start(position,boundPosition);}}]);return _Inner;}();return new _Inner();}();return;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=void 0;var clampedPosition=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));if(clampedPositionlastPos){var boundPosFromFirst=boundPosition-firstPos;if(boundPosFromFirst<1){return;}var _posTravel=clampedPosition-lastPos+1;var _boundTravel=boundPosFromFirst-1;if(_boundTravel<_posTravel){viewTravelCount=_boundTravel;this.mMode=PositionScroller.MOVE_DOWN_BOUND;}else{viewTravelCount=_posTravel;this.mMode=PositionScroller.MOVE_DOWN_POS;}}else{this.scrollToVisible(clampedPosition,boundPosition,PositionScroller.SCROLL_DURATION);return;}if(viewTravelCount>0){this.mScrollDuration=PositionScroller.SCROLL_DURATION/viewTravelCount;}else{this.mScrollDuration=PositionScroller.SCROLL_DURATION;}this.mTargetPos=clampedPosition;this.mBoundPos=boundPosition;this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'startWithOffset',value:function startWithOffset(position,offset){var _this111=this;var duration=arguments.length>2&&arguments[2]!==undefined?arguments[2]:PositionScroller.SCROLL_DURATION;this.stop();if(this._AbsListView_this.mDataChanged){var _ret8=function(){var postOffset=offset;_this111._AbsListView_this.mPositionScrollAfterLayout=function(){var inner_this=_this111;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.startWithOffset(position,postOffset,duration);}}]);return _Inner;}();return new _Inner();}();return{v:void 0};}();if((typeof _ret8==='undefined'?'undefined':_typeof(_ret8))==="object")return _ret8.v;}var childCount=this._AbsListView_this.getChildCount();if(childCount==0){return;}offset+=this._AbsListView_this.getPaddingTop();this.mTargetPos=Math.max(0,Math.min(this._AbsListView_this.getCount()-1,position));this.mOffsetFromTop=offset;this.mBoundPos=AbsListView.INVALID_POSITION;this.mLastSeenPos=AbsListView.INVALID_POSITION;this.mMode=PositionScroller.MOVE_OFFSET;var firstPos=this._AbsListView_this.mFirstPosition;var lastPos=firstPos+childCount-1;var viewTravelCount=void 0;if(this.mTargetPoslastPos){viewTravelCount=this.mTargetPos-lastPos;}else{var targetTop=this._AbsListView_this.getChildAt(this.mTargetPos-firstPos).getTop();this._AbsListView_this.smoothScrollBy(targetTop-offset,duration,true);return;}var screenTravelCount=viewTravelCount/childCount;this.mScrollDuration=screenTravelCount<1?duration:Math.floor(duration/screenTravelCount);this.mLastSeenPos=AbsListView.INVALID_POSITION;this._AbsListView_this.postOnAnimation(this);}},{key:'scrollToVisible',value:function scrollToVisible(targetPos,boundPos,duration){var firstPos=this._AbsListView_this.mFirstPosition;var childCount=this._AbsListView_this.getChildCount();var lastPos=firstPos+childCount-1;var paddedTop=this._AbsListView_this.mListPadding.top;var paddedBottom=this._AbsListView_this.getHeight()-this._AbsListView_this.mListPadding.bottom;if(targetPoslastPos){Log.w(AbsListView.TAG_AbsListView,"scrollToVisible called with targetPos "+targetPos+" not visible ["+firstPos+", "+lastPos+"]");}if(boundPoslastPos){boundPos=AbsListView.INVALID_POSITION;}var targetChild=this._AbsListView_this.getChildAt(targetPos-firstPos);var targetTop=targetChild.getTop();var targetBottom=targetChild.getBottom();var scrollBy=0;if(targetBottom>paddedBottom){scrollBy=targetBottom-paddedBottom;}if(targetTop=0){var boundChild=this._AbsListView_this.getChildAt(boundPos-firstPos);var boundTop=boundChild.getTop();var boundBottom=boundChild.getBottom();var absScroll=Math.abs(scrollBy);if(scrollBy<0&&boundBottom+absScroll>paddedBottom){scrollBy=Math.max(0,boundBottom-paddedBottom);}else if(scrollBy>0&&boundTop-absScroll=this._AbsListView_this.mItemCount){return;}var nextPos=firstPos+nextViewIndex;if(nextPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var nextView=this._AbsListView_this.getChildAt(nextViewIndex);var nextViewHeight=nextView.getHeight();var nextViewTop=nextView.getTop();var _extraScroll=Math.max(this._AbsListView_this.mListPadding.bottom,this.mExtraScroll);if(nextPos_extraScroll){this._AbsListView_this.smoothScrollBy(nextViewTop-_extraScroll,this.mScrollDuration,true);}}break;}case PositionScroller.MOVE_UP_POS:{if(firstPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var firstView=this._AbsListView_this.getChildAt(0);if(firstView==null){return;}var firstViewTop=firstView.getTop();var _extraScroll2=firstPos>0?Math.max(this.mExtraScroll,this._AbsListView_this.mListPadding.top):this._AbsListView_this.mListPadding.top;this._AbsListView_this.smoothScrollBy(firstViewTop-_extraScroll2,this.mScrollDuration,true);this.mLastSeenPos=firstPos;if(firstPos>this.mTargetPos){this._AbsListView_this.postOnAnimation(this);}break;}case PositionScroller.MOVE_UP_BOUND:{var _lastViewIndex=this._AbsListView_this.getChildCount()-2;if(_lastViewIndex<0){return;}var _lastPos=firstPos+_lastViewIndex;if(_lastPos==this.mLastSeenPos){this._AbsListView_this.postOnAnimation(this);return;}var _lastView=this._AbsListView_this.getChildAt(_lastViewIndex);var _lastViewHeight=_lastView.getHeight();var _lastViewTop=_lastView.getTop();var _lastViewPixelsShowing=listHeight-_lastViewTop;var _extraScroll3=Math.max(this._AbsListView_this.mListPadding.top,this.mExtraScroll);this.mLastSeenPos=_lastPos;if(_lastPos>this.mBoundPos){this._AbsListView_this.smoothScrollBy(-(_lastViewPixelsShowing-_extraScroll3),this.mScrollDuration,true);this._AbsListView_this.postOnAnimation(this);}else{var bottom=listHeight-_extraScroll3;var lastViewBottom=_lastViewTop+_lastViewHeight;if(bottom>lastViewBottom){this._AbsListView_this.smoothScrollBy(-(bottom-lastViewBottom),this.mScrollDuration,true);}}break;}case PositionScroller.MOVE_OFFSET:{if(this.mLastSeenPos==firstPos){this._AbsListView_this.postOnAnimation(this);return;}this.mLastSeenPos=firstPos;var _childCount=this._AbsListView_this.getChildCount();var position=this.mTargetPos;var _lastPos2=firstPos+_childCount-1;var viewTravelCount=0;if(position_lastPos2){viewTravelCount=position-_lastPos2;}var screenTravelCount=viewTravelCount/_childCount;var modifier=Math.min(Math.abs(screenTravelCount),1.);if(position_lastPos2){var _distance=Math.floor(this._AbsListView_this.getHeight()*modifier);var _duration=Math.floor(this.mScrollDuration*modifier);this._AbsListView_this.smoothScrollBy(_distance,_duration,true);this._AbsListView_this.postOnAnimation(this);}else{var targetTop=this._AbsListView_this.getChildAt(position-firstPos).getTop();var _distance2=targetTop-this.mOffsetFromTop;var _duration2=Math.floor(this.mScrollDuration*(Math.abs(_distance2)/this._AbsListView_this.getHeight()));this._AbsListView_this.smoothScrollBy(_distance2,_duration2,true);}break;}default:break;}}}]);return PositionScroller;}();PositionScroller.SCROLL_DURATION=200;PositionScroller.MOVE_DOWN_POS=1;PositionScroller.MOVE_UP_POS=2;PositionScroller.MOVE_DOWN_BOUND=3;PositionScroller.MOVE_UP_BOUND=4;PositionScroller.MOVE_OFFSET=5;AbsListView.PositionScroller=PositionScroller;var AdapterDataSetObserver=function(_AdapterView$AdapterD){_inherits(AdapterDataSetObserver,_AdapterView$AdapterD);function AdapterDataSetObserver(arg){_classCallCheck(this,AdapterDataSetObserver);var _this112=_possibleConstructorReturn(this,(AdapterDataSetObserver.__proto__||Object.getPrototypeOf(AdapterDataSetObserver)).call(this,arg));_this112._AbsListView_this=arg;return _this112;}_createClass(AdapterDataSetObserver,[{key:'onChanged',value:function onChanged(){_get2(AdapterDataSetObserver.prototype.__proto__||Object.getPrototypeOf(AdapterDataSetObserver.prototype),'onChanged',this).call(this);}},{key:'onInvalidated',value:function onInvalidated(){_get2(AdapterDataSetObserver.prototype.__proto__||Object.getPrototypeOf(AdapterDataSetObserver.prototype),'onInvalidated',this).call(this);}}]);return AdapterDataSetObserver;}(AdapterView.AdapterDataSetObserver);AbsListView.AdapterDataSetObserver=AdapterDataSetObserver;var LayoutParams=function(_ViewGroup$LayoutPara){_inherits(LayoutParams,_ViewGroup$LayoutPara);function LayoutParams(){var _ref8;for(var _len27=arguments.length,args=Array(_len27),_key28=0;_key28<_len27;_key28++){args[_key28]=arguments[_key28];}_classCallCheck(this,LayoutParams);var _this113=_possibleConstructorReturn(this,(_ref8=LayoutParams.__proto__||Object.getPrototypeOf(LayoutParams)).call.apply(_ref8,[this].concat(_toConsumableArray(function(){if(args[0]instanceof android.content.Context&&args[1]instanceof HTMLElement)return[args[0],args[1]];else if(typeof args[0]==='number'&&typeof args[1]==='number'&&typeof args[2]==='number')return[args[0],args[1]];else if(typeof args[0]==='number'&&typeof args[1]==='number')return[args[0],args[1]];else if(args[0]instanceof ViewGroup.LayoutParams)return[args[0]];}()))));_this113.viewType=0;_this113.scrappedFromPosition=0;_this113.itemId=-1;if(args[0]instanceof android.content.Context&&args[1]instanceof HTMLElement){}else if(typeof args[0]==='number'&&typeof args[1]==='number'&&typeof args[2]=='number'){_this113.viewType=args[2];}else if(typeof args[0]==='number'&&typeof args[1]==='number'){}else if(args[0]instanceof ViewGroup.LayoutParams){}return _this113;}return LayoutParams;}(ViewGroup.LayoutParams);AbsListView.LayoutParams=LayoutParams;var RecycleBin=function(){function RecycleBin(arg){_classCallCheck(this,RecycleBin);this.mFirstActivePosition=0;this.mActiveViews=[];this.mViewTypeCount=0;this._AbsListView_this=arg;}_createClass(RecycleBin,[{key:'setViewTypeCount',value:function setViewTypeCount(viewTypeCount){if(viewTypeCount<1){throw Error('new IllegalArgumentException("Can\'t have a viewTypeCount < 1")');}var scrapViews=new Array(viewTypeCount);for(var i=0;i=0;}},{key:'clear',value:function clear(){if(this.mViewTypeCount==1){var scrap=this.mCurrentScrap;var scrapCount=scrap.size();for(var i=0;i=0&&index=0){var _result=this.mTransientStateViews.valueAt(index);this.mTransientStateViews.removeAt(index);return _result;}}return null;}},{key:'clearTransientStateViews',value:function clearTransientStateViews(){if(this.mTransientStateViews!=null){this.mTransientStateViews.clear();}if(this.mTransientStateViewsById!=null){this.mTransientStateViewsById.clear();}}},{key:'getScrapView',value:function getScrapView(position){if(this.mViewTypeCount==1){return AbsListView.retrieveFromScrap(this.mCurrentScrap,position);}else{var whichScrap=this._AbsListView_this.mAdapter.getItemViewType(position);if(whichScrap>=0&&whichScrap1;var scrapViews=this.mCurrentScrap;var count=activeViews.length;for(var i=count-1;i>=0;i--){var victim=activeViews[i];if(victim!=null){var lp=victim.getLayoutParams();var whichScrap=lp.viewType;activeViews[i]=null;var scrapHasTransientState=victim.hasTransientState();if(!this.shouldRecycleViewType(whichScrap)||scrapHasTransientState){if(whichScrap!=AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER&&scrapHasTransientState){this._AbsListView_this.removeDetachedView(victim,false);}if(scrapHasTransientState){if(this._AbsListView_this.mAdapter!=null&&this._AbsListView_this.mAdapterHasStableIds){if(this.mTransientStateViewsById==null){this.mTransientStateViewsById=new LongSparseArray();}var id=this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition+i);this.mTransientStateViewsById.put(id,victim);}else{if(this.mTransientStateViews==null){this.mTransientStateViews=new SparseArray();}this.mTransientStateViews.put(this.mFirstActivePosition+i,victim);}}continue;}if(multipleScraps){scrapViews=this.mScrapViews[whichScrap];}victim.dispatchStartTemporaryDetach();lp.scrappedFromPosition=this.mFirstActivePosition+i;scrapViews.add(victim);if(hasListener){this.mRecyclerListener.onMovedToScrapHeap(victim);}}}this.pruneScrapViews();}},{key:'pruneScrapViews',value:function pruneScrapViews(){var maxViews=this.mActiveViews.length;var viewTypeCount=this.mViewTypeCount;var scrapViews=this.mScrapViews;for(var i=0;i=numHeaders){var adjPosition=position-numHeaders;var adapterCount=this.mAdapter.getCount();if(adjPosition=numHeaders){var adjPosition=position-numHeaders;var adapterCount=this.mAdapter.getCount();if(adjPosition=0;i--){this.mObservers.get(i).onChanged();}}},{key:'notifyInvalidated',value:function notifyInvalidated(){for(var i=this.mObservers.size()-1;i>=0;i--){this.mObservers.get(i).onInvalidated();}}}]);return DataSetObservable;}(Observable);database.DataSetObservable=DataSetObservable;})(database=android.database||(android.database={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObservable=android.database.DataSetObservable;var BaseAdapter=function(){function BaseAdapter(){_classCallCheck(this,BaseAdapter);this.mDataSetObservable=new DataSetObservable();}_createClass(BaseAdapter,[{key:'hasStableIds',value:function hasStableIds(){return false;}},{key:'registerDataSetObserver',value:function registerDataSetObserver(observer){this.mDataSetObservable.registerObserver(observer);}},{key:'unregisterDataSetObserver',value:function unregisterDataSetObserver(observer){this.mDataSetObservable.unregisterObserver(observer);}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.mDataSetObservable.notifyChanged();}},{key:'notifyDataSetInvalidated',value:function notifyDataSetInvalidated(){this.mDataSetObservable.notifyInvalidated();}},{key:'areAllItemsEnabled',value:function areAllItemsEnabled(){return true;}},{key:'isEnabled',value:function isEnabled(position){return true;}},{key:'getDropDownView',value:function getDropDownView(position,convertView,parent){return this.getView(position,convertView,parent);}},{key:'getItemViewType',value:function getItemViewType(position){return 0;}},{key:'getViewTypeCount',value:function getViewTypeCount(){return 1;}},{key:'isEmpty',value:function isEmpty(){return this.getCount()==0;}}]);return BaseAdapter;}();widget.BaseAdapter=BaseAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Paint=android.graphics.Paint;var PixelFormat=android.graphics.PixelFormat;var Rect=android.graphics.Rect;var MathUtils=android.util.MathUtils;var FocusFinder=android.view.FocusFinder;var KeyEvent=android.view.KeyEvent;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Trace=android.os.Trace;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var System=java.lang.System;var AbsListView=android.widget.AbsListView;var AdapterView=android.widget.AdapterView;var HeaderViewListAdapter=android.widget.HeaderViewListAdapter;var ListView=function(_AbsListView){_inherits(ListView,_AbsListView);function ListView(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.listViewStyle;_classCallCheck(this,ListView);var _this115=_possibleConstructorReturn(this,(ListView.__proto__||Object.getPrototypeOf(ListView)).call(this,context,bindElement,defStyle));_this115.mHeaderViewInfos=new ArrayList();_this115.mFooterViewInfos=new ArrayList();_this115.mDividerHeight=0;_this115.mIsCacheColorOpaque=false;_this115.mDividerIsOpaque=false;_this115.mHeaderDividersEnabled=true;_this115.mFooterDividersEnabled=true;_this115.mAreAllItemsSelectable=true;_this115.mItemsCanFocus=false;_this115.mTempRect=new Rect();_this115.mArrowScrollFocusResult=new ListView.ArrowScrollFocusResult();var a=context.obtainStyledAttributes(bindElement,defStyle);var d=a.getDrawable('divider');if(d!=null){_this115.setDivider(d);}var osHeader=a.getDrawable('overScrollHeader');if(osHeader!=null){_this115.setOverscrollHeader(osHeader);}var osFooter=a.getDrawable('overScrollFooter');if(osFooter!=null){_this115.setOverscrollFooter(osFooter);}var dividerHeight=a.getDimensionPixelSize('dividerHeight',0);if(dividerHeight!=0){_this115.setDividerHeight(dividerHeight);}_this115.mHeaderDividersEnabled=a.getBoolean('headerDividersEnabled',true);_this115.mFooterDividersEnabled=a.getBoolean('footerDividersEnabled',true);a.recycle();return _this115;}_createClass(ListView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'createClassAttrBinder',this).call(this).set('divider',{setter:function setter(v,value,attrBinder){var divider=attrBinder.parseDrawable(value);if(divider)v.setDivider(divider);},getter:function getter(v){return v.mDivider;}}).set('overScrollHeader',{setter:function setter(v,value,attrBinder){var header=attrBinder.parseDrawable(value);if(header)v.setOverscrollHeader(header);},getter:function getter(v){return v.getOverscrollHeader();}}).set('overScrollFooter',{setter:function setter(v,value,attrBinder){var footer=attrBinder.parseDrawable(value);if(footer)v.setOverscrollFooter(footer);},getter:function getter(v){return v.getOverscrollFooter();}}).set('dividerHeight',{setter:function setter(v,value,attrBinder){v.setDividerHeight(attrBinder.parseNumberPixelSize(value,v.getDividerHeight()));},getter:function getter(v){return v.getDividerHeight();}}).set('headerDividersEnabled',{setter:function setter(v,value,attrBinder){v.setHeaderDividersEnabled(attrBinder.parseBoolean(value,v.mHeaderDividersEnabled));},getter:function getter(v){return v.mHeaderDividersEnabled;}}).set('dividerHeight',{setter:function setter(v,value,attrBinder){v.setFooterDividersEnabled(attrBinder.parseBoolean(value,v.mFooterDividersEnabled));},getter:function getter(v){return v.mFooterDividersEnabled;}});}},{key:'getMaxScrollAmount',value:function getMaxScrollAmount(){return Math.floor(ListView.MAX_SCROLL_FACTOR*(this.mBottom-this.mTop));}},{key:'adjustViewsUpOrDown',value:function adjustViewsUpOrDown(){var childCount=this.getChildCount();var delta=void 0;if(childCount>0){var child=void 0;if(!this.mStackFromBottom){child=this.getChildAt(0);delta=child.getTop()-this.mListPadding.top;if(this.mFirstPosition!=0){delta-=this.mDividerHeight;}if(delta<0){delta=0;}}else{child=this.getChildAt(childCount-1);delta=child.getBottom()-(this.getHeight()-this.mListPadding.bottom);if(this.mFirstPosition+childCount0){delta=0;}}if(delta!=0){this.offsetChildrenTopAndBottom(-delta);}}}},{key:'addHeaderView',value:function addHeaderView(v){var data=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var isSelectable=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var info=new ListView.FixedViewInfo(this);info.view=v;info.data=data;info.isSelectable=isSelectable;this.mHeaderViewInfos.add(info);if(this.mAdapter!=null){if(!(this.mAdapter instanceof HeaderViewListAdapter)){this.mAdapter=new HeaderViewListAdapter(this.mHeaderViewInfos,this.mFooterViewInfos,this.mAdapter);}if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}}}},{key:'getHeaderViewsCount',value:function getHeaderViewsCount(){return this.mHeaderViewInfos.size();}},{key:'removeHeaderView',value:function removeHeaderView(v){if(this.mHeaderViewInfos.size()>0){var result=false;if(this.mAdapter!=null&&this.mAdapter.removeHeader(v)){if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}result=true;}this.removeFixedViewInfo(v,this.mHeaderViewInfos);return result;}return false;}},{key:'removeFixedViewInfo',value:function removeFixedViewInfo(v,where){var len=where.size();for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:null;var isSelectable=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var info=new ListView.FixedViewInfo(this);info.view=v;info.data=data;info.isSelectable=isSelectable;this.mFooterViewInfos.add(info);if(this.mAdapter!=null){if(!(this.mAdapter instanceof HeaderViewListAdapter)){this.mAdapter=new HeaderViewListAdapter(this.mHeaderViewInfos,this.mFooterViewInfos,this.mAdapter);}if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}}}},{key:'getFooterViewsCount',value:function getFooterViewsCount(){return this.mFooterViewInfos.size();}},{key:'removeFooterView',value:function removeFooterView(v){if(this.mFooterViewInfos.size()>0){var result=false;if(this.mAdapter!=null&&this.mAdapter.removeFooter(v)){if(this.mDataSetObserver!=null){this.mDataSetObserver.onChanged();}result=true;}this.removeFixedViewInfo(v,this.mFooterViewInfos);return result;}return false;}},{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'setAdapter',value:function setAdapter(adapter){if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.resetList();this.mRecycler.clear();if(this.mHeaderViewInfos.size()>0||this.mFooterViewInfos.size()>0){this.mAdapter=new HeaderViewListAdapter(this.mHeaderViewInfos,this.mFooterViewInfos,adapter);}else{this.mAdapter=adapter;}this.mOldSelectedPosition=ListView.INVALID_POSITION;this.mOldSelectedRowId=ListView.INVALID_ROW_ID;_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'setAdapter',this).call(this,adapter);if(this.mAdapter!=null){this.mAreAllItemsSelectable=this.mAdapter.areAllItemsEnabled();this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.checkFocus();this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());var position=void 0;if(this.mStackFromBottom){position=this.lookForSelectablePosition(this.mItemCount-1,false);}else{position=this.lookForSelectablePosition(0,true);}this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);if(this.mItemCount==0){this.checkSelectionChanged();}}else{this.mAreAllItemsSelectable=true;this.checkFocus();this.checkSelectionChanged();}this.requestLayout();}},{key:'resetList',value:function resetList(){this.clearRecycledState(this.mHeaderViewInfos);this.clearRecycledState(this.mFooterViewInfos);_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'resetList',this).call(this);this.mLayoutMode=ListView.LAYOUT_NORMAL;}},{key:'clearRecycledState',value:function clearRecycledState(infos){if(infos!=null){var count=infos.size();for(var i=0;i0||this.getChildAt(0).getTop()>listTop;}},{key:'showingBottomFadingEdge',value:function showingBottomFadingEdge(){var childCount=this.getChildCount();var bottomOfBottomChild=this.getChildAt(childCount-1).getBottom();var lastVisiblePosition=this.mFirstPosition+childCount-1;var listBottom=this.mScrollY+this.getHeight()-this.mListPadding.bottom;return lastVisiblePosition0||rectTopWithinChild>fadingEdge){listUnfadedTop+=fadingEdge;}}var childCount=this.getChildCount();var bottomOfBottomChild=this.getChildAt(childCount-1).getBottom();if(this.showingBottomFadingEdge()){if(this.mSelectedPositionlistUnfadedBottom&&rect.top>listUnfadedTop){if(rect.height()>height){scrollYDelta+=rect.top-listUnfadedTop;}else{scrollYDelta+=rect.bottom-listUnfadedBottom;}var distanceToBottom=bottomOfBottomChild-listUnfadedBottom;scrollYDelta=Math.min(scrollYDelta,distanceToBottom);}else if(rect.topheight){scrollYDelta-=listUnfadedBottom-rect.bottom;}else{scrollYDelta-=listUnfadedTop-rect.top;}var top=this.getChildAt(0).getTop();var deltaToTop=top-listUnfadedTop;scrollYDelta=Math.max(scrollYDelta,deltaToTop);}var scroll=scrollYDelta!=0;if(scroll){this.scrollListItemsBy(-scrollYDelta);this.positionSelector(ListView.INVALID_POSITION,child);this.mSelectedTop=child.getTop();this.invalidate();}return scroll;}},{key:'fillGap',value:function fillGap(down){var count=this.getChildCount();if(down){var paddingTop=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){paddingTop=this.getListPaddingTop();}var startOffset=count>0?this.getChildAt(count-1).getBottom()+this.mDividerHeight:paddingTop;this.fillDown(this.mFirstPosition+count,startOffset);this.correctTooHigh(this.getChildCount());}else{var paddingBottom=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){paddingBottom=this.getListPaddingBottom();}var _startOffset=count>0?this.getChildAt(0).getTop()-this.mDividerHeight:this.getHeight()-paddingBottom;this.fillUp(this.mFirstPosition-1,_startOffset);this.correctTooLow(this.getChildCount());}}},{key:'fillDown',value:function fillDown(pos,nextTop){var selectedView=null;var end=this.mBottom-this.mTop;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){end-=this.mListPadding.bottom;}while(nextTopend&&pos>=0){var selected=pos==this.mSelectedPosition;var child=this.makeAndAddView(pos,nextBottom,false,this.mListPadding.left,selected);nextBottom=child.getTop()-this.mDividerHeight;if(selected){selectedView=child;}pos--;}this.mFirstPosition=pos+1;this.setVisibleRangeHint(this.mFirstPosition,this.mFirstPosition+this.getChildCount()-1);return selectedView;}},{key:'fillFromTop',value:function fillFromTop(nextTop){this.mFirstPosition=Math.min(this.mFirstPosition,this.mSelectedPosition);this.mFirstPosition=Math.min(this.mFirstPosition,this.mItemCount-1);if(this.mFirstPosition<0){this.mFirstPosition=0;}return this.fillDown(this.mFirstPosition,nextTop);}},{key:'fillFromMiddle',value:function fillFromMiddle(childrenTop,childrenBottom){var height=childrenBottom-childrenTop;var position=this.reconcileSelectedPosition();var sel=this.makeAndAddView(position,childrenTop,true,this.mListPadding.left,true);this.mFirstPosition=position;var selHeight=sel.getMeasuredHeight();if(selHeight<=height){sel.offsetTopAndBottom((height-selHeight)/2);}this.fillAboveAndBelow(sel,position);if(!this.mStackFromBottom){this.correctTooHigh(this.getChildCount());}else{this.correctTooLow(this.getChildCount());}return sel;}},{key:'fillAboveAndBelow',value:function fillAboveAndBelow(sel,position){var dividerHeight=this.mDividerHeight;if(!this.mStackFromBottom){this.fillUp(position-1,sel.getTop()-dividerHeight);this.adjustViewsUpOrDown();this.fillDown(position+1,sel.getBottom()+dividerHeight);}else{this.fillDown(position+1,sel.getBottom()+dividerHeight);this.adjustViewsUpOrDown();this.fillUp(position-1,sel.getTop()-dividerHeight);}}},{key:'fillFromSelection',value:function fillFromSelection(selectedTop,childrenTop,childrenBottom){var fadingEdgeLength=this.getVerticalFadingEdgeLength();var selectedPosition=this.mSelectedPosition;var sel=void 0;var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);var bottomSelectionPixel=this.getBottomSelectionPixel(childrenBottom,fadingEdgeLength,selectedPosition);sel=this.makeAndAddView(selectedPosition,selectedTop,true,this.mListPadding.left,true);if(sel.getBottom()>bottomSelectionPixel){var spaceAbove=sel.getTop()-topSelectionPixel;var spaceBelow=sel.getBottom()-bottomSelectionPixel;var offset=Math.min(spaceAbove,spaceBelow);sel.offsetTopAndBottom(-offset);}else if(sel.getTop()0){topSelectionPixel+=fadingEdgeLength;}return topSelectionPixel;}},{key:'smoothScrollToPosition',value:function smoothScrollToPosition(position,boundPosition){_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'smoothScrollToPosition',this).call(this,position,boundPosition);}},{key:'smoothScrollByOffset',value:function smoothScrollByOffset(offset){_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'smoothScrollByOffset',this).call(this,offset);}},{key:'moveSelection',value:function moveSelection(oldSel,newSel,delta,childrenTop,childrenBottom){var fadingEdgeLength=this.getVerticalFadingEdgeLength();var selectedPosition=this.mSelectedPosition;var sel=void 0;var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);var bottomSelectionPixel=this.getBottomSelectionPixel(childrenTop,fadingEdgeLength,selectedPosition);if(delta>0){oldSel=this.makeAndAddView(selectedPosition-1,oldSel.getTop(),true,this.mListPadding.left,false);var dividerHeight=this.mDividerHeight;sel=this.makeAndAddView(selectedPosition,oldSel.getBottom()+dividerHeight,true,this.mListPadding.left,true);if(sel.getBottom()>bottomSelectionPixel){var spaceAbove=sel.getTop()-topSelectionPixel;var spaceBelow=sel.getBottom()-bottomSelectionPixel;var halfVerticalSpace=(childrenBottom-childrenTop)/2;var offset=Math.min(spaceAbove,spaceBelow);offset=Math.min(offset,halfVerticalSpace);oldSel.offsetTopAndBottom(-offset);sel.offsetTopAndBottom(-offset);}if(!this.mStackFromBottom){this.fillUp(this.mSelectedPosition-2,sel.getTop()-dividerHeight);this.adjustViewsUpOrDown();this.fillDown(this.mSelectedPosition+1,sel.getBottom()+dividerHeight);}else{this.fillDown(this.mSelectedPosition+1,sel.getBottom()+dividerHeight);this.adjustViewsUpOrDown();this.fillUp(this.mSelectedPosition-2,sel.getTop()-dividerHeight);}}else if(delta<0){if(newSel!=null){sel=this.makeAndAddView(selectedPosition,newSel.getTop(),true,this.mListPadding.left,true);}else{sel=this.makeAndAddView(selectedPosition,oldSel.getTop(),false,this.mListPadding.left,true);}if(sel.getTop()0){var focusedChild=this.getFocusedChild();if(focusedChild!=null){var childPosition=this.mFirstPosition+this.indexOfChild(focusedChild);var childBottom=focusedChild.getBottom();var offset=Math.max(0,childBottom-(h-this.mPaddingTop));var top=focusedChild.getTop()-offset;if(this.mFocusSelector==null){this.mFocusSelector=new ListView.FocusSelector(this);}this.post(this.mFocusSelector.setup(childPosition,top));}}_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);var widthMode=View.MeasureSpec.getMode(widthMeasureSpec);var heightMode=View.MeasureSpec.getMode(heightMeasureSpec);var widthSize=View.MeasureSpec.getSize(widthMeasureSpec);var heightSize=View.MeasureSpec.getSize(heightMeasureSpec);var childWidth=0;var childHeight=0;var childState=0;this.mItemCount=this.mAdapter==null?0:this.mAdapter.getCount();if(this.mItemCount>0&&(widthMode==View.MeasureSpec.UNSPECIFIED||heightMode==View.MeasureSpec.UNSPECIFIED)){var child=this.obtainView(0,this.mIsScrap);this.measureScrapChild(child,0,widthMeasureSpec);childWidth=child.getMeasuredWidth();childHeight=child.getMeasuredHeight();childState=ListView.combineMeasuredStates(childState,child.getMeasuredState());if(this.recycleOnMeasure()&&this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)){this.mRecycler.addScrapView(child,-1);}}if(widthMode==View.MeasureSpec.UNSPECIFIED){widthSize=this.mListPadding.left+this.mListPadding.right+childWidth+this.getVerticalScrollbarWidth();}else{widthSize|=childState&ListView.MEASURED_STATE_MASK;}if(heightMode==View.MeasureSpec.UNSPECIFIED){heightSize=this.mListPadding.top+this.mListPadding.bottom+childHeight+this.getVerticalFadingEdgeLength()*2;}if(heightMode==View.MeasureSpec.AT_MOST){heightSize=this.measureHeightOfChildren(widthMeasureSpec,0,ListView.NO_POSITION,heightSize,-1);}this.setMeasuredDimension(widthSize,heightSize);this.mWidthMeasureSpec=widthMeasureSpec;}},{key:'measureScrapChild',value:function measureScrapChild(child,position,widthMeasureSpec){var p=child.getLayoutParams();if(p==null){p=this.generateDefaultLayoutParams();child.setLayoutParams(p);}p.viewType=this.mAdapter.getItemViewType(position);p.forceAdd=true;var childWidthSpec=ViewGroup.getChildMeasureSpec(widthMeasureSpec,this.mListPadding.left+this.mListPadding.right,p.width);var lpHeight=p.height;var childHeightSpec=void 0;if(lpHeight>0){childHeightSpec=View.MeasureSpec.makeMeasureSpec(lpHeight,View.MeasureSpec.EXACTLY);}else{childHeightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}},{key:'recycleOnMeasure',value:function recycleOnMeasure(){return true;}},{key:'measureHeightOfChildren',value:function measureHeightOfChildren(widthMeasureSpec,startPosition,endPosition,maxHeight,disallowPartialChildPosition){var adapter=this.mAdapter;if(adapter==null){return this.mListPadding.top+this.mListPadding.bottom;}var returnedHeight=this.mListPadding.top+this.mListPadding.bottom;var dividerHeight=this.mDividerHeight>0&&this.mDivider!=null?this.mDividerHeight:0;var prevHeightWithoutPartialChild=0;var i=void 0;var child=void 0;endPosition=endPosition==ListView.NO_POSITION?adapter.getCount()-1:endPosition;var recycleBin=this.mRecycler;var recyle=this.recycleOnMeasure();var isScrap=this.mIsScrap;for(i=startPosition;i<=endPosition;++i){child=this.obtainView(i,isScrap);this.measureScrapChild(child,i,widthMeasureSpec);if(i>0){returnedHeight+=dividerHeight;}if(recyle&&recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)){recycleBin.addScrapView(child,-1);}returnedHeight+=child.getMeasuredHeight();if(returnedHeight>=maxHeight){return disallowPartialChildPosition>=0&&i>disallowPartialChildPosition&&prevHeightWithoutPartialChild>0&&returnedHeight!=maxHeight?prevHeightWithoutPartialChild:maxHeight;}if(disallowPartialChildPosition>=0&&i>=disallowPartialChildPosition){prevHeightWithoutPartialChild=returnedHeight;}}return returnedHeight;}},{key:'findMotionRow',value:function findMotionRow(y){var childCount=this.getChildCount();if(childCount>0){if(!this.mStackFromBottom){for(var i=0;i=0;_i46--){var _v5=this.getChildAt(_i46);if(y>=_v5.getTop()){return this.mFirstPosition+_i46;}}}}return ListView.INVALID_POSITION;}},{key:'fillSpecific',value:function fillSpecific(position,top){var tempIsSelected=position==this.mSelectedPosition;var temp=this.makeAndAddView(position,top,true,this.mListPadding.left,tempIsSelected);this.mFirstPosition=position;var above=void 0;var below=void 0;var dividerHeight=this.mDividerHeight;if(!this.mStackFromBottom){above=this.fillUp(position-1,temp.getTop()-dividerHeight);this.adjustViewsUpOrDown();below=this.fillDown(position+1,temp.getBottom()+dividerHeight);var childCount=this.getChildCount();if(childCount>0){this.correctTooHigh(childCount);}}else{below=this.fillDown(position+1,temp.getBottom()+dividerHeight);this.adjustViewsUpOrDown();above=this.fillUp(position-1,temp.getTop()-dividerHeight);var _childCount2=this.getChildCount();if(_childCount2>0){this.correctTooLow(_childCount2);}}if(tempIsSelected){return temp;}else if(above!=null){return above;}else{return below;}}},{key:'correctTooHigh',value:function correctTooHigh(childCount){var lastPosition=this.mFirstPosition+childCount-1;if(lastPosition==this.mItemCount-1&&childCount>0){var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var end=this.mBottom-this.mTop-this.mListPadding.bottom;var bottomOffset=end-lastBottom;var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();if(bottomOffset>0&&(this.mFirstPosition>0||firstTop0){this.fillUp(this.mFirstPosition-1,firstChild.getTop()-this.mDividerHeight);this.adjustViewsUpOrDown();}}}}},{key:'correctTooLow',value:function correctTooLow(childCount){if(this.mFirstPosition==0&&childCount>0){var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();var start=this.mListPadding.top;var end=this.mBottom-this.mTop-this.mListPadding.bottom;var topOffset=firstTop-start;var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var lastPosition=this.mFirstPosition+childCount-1;if(topOffset>0){if(lastPositionend){if(lastPosition==this.mItemCount-1){topOffset=Math.min(topOffset,lastBottom-end);}this.offsetChildrenTopAndBottom(-topOffset);if(lastPosition=0&&index=0&&index=0){delta=this.mNextSelectedPosition-this.mSelectedPosition;}newSel=this.getChildAt(index+delta);}var dataChanged=this.mDataChanged;if(dataChanged){this.handleDataChanged();}if(this.mItemCount==0){this.resetList();this.invokeOnItemScrollListener();return;}else if(this.mItemCount!=this.mAdapter.getCount()){throw Error('IllegalStateException("The content of the adapter has changed but\n ListView did not receive a notification. Make sure the content of\n your adapter is not modified from a background thread, but only from\n the UI thread. Make sure your adapter calls notifyDataSetChanged()\n when its content changes. [in ListView('+this.getId()+','+this.constructor.name+')\n with Adapter('+this.mAdapter.constructor.name+')]")');}this.setSelectedPositionInt(this.mNextSelectedPosition);var accessFocusedChild=null;var focusedChild=this.getFocusedChild();if(focusedChild!=null){focusedChild.setHasTransientState(true);}var firstPosition=this.mFirstPosition;var recycleBin=this.mRecycler;if(dataChanged){for(var i=0;i=0&&this.mSelectedPosition0){this.checkSelectionChanged();}this.invokeOnItemScrollListener();}finally{if(!blockLayoutRequests){this.mBlockLayoutRequests=false;}}}},{key:'makeAndAddView',value:function makeAndAddView(position,y,flow,childrenLeft,selected){var child=void 0;if(!this.mDataChanged){child=this.mRecycler.getActiveView(position);if(child!=null){this.setupChild(child,position,y,flow,childrenLeft,selected,true);return child;}}child=this.obtainView(position,this.mIsScrap);this.setupChild(child,position,y,flow,childrenLeft,selected,this.mIsScrap[0]);return child;}},{key:'setupChild',value:function setupChild(child,position,y,flowDown,childrenLeft,selected,recycled){Trace.traceBegin(Trace.TRACE_TAG_VIEW,"setupListItem");var isSelected=selected&&this.shouldShowSelector();var updateChildSelected=isSelected!=child.isSelected();var mode=this.mTouchMode;var isPressed=mode>ListView.TOUCH_MODE_DOWN&&mode0){childHeightSpec=View.MeasureSpec.makeMeasureSpec(lpHeight,View.MeasureSpec.EXACTLY);}else{childHeightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}else{this.cleanupLayoutState(child);}var w=child.getMeasuredWidth();var h=child.getMeasuredHeight();var childTop=flowDown?y:y-h;if(needToMeasure){var childRight=childrenLeft+w;var childBottom=childTop+h;child.layout(childrenLeft,childTop,childRight,childBottom);}else{child.offsetLeftAndRight(childrenLeft-child.getLeft());child.offsetTopAndBottom(childTop-child.getTop());}if(this.mCachingStarted&&!child.isDrawingCacheEnabled()){child.setDrawingCacheEnabled(true);}if(recycled&&child.getLayoutParams().scrappedFromPosition!=position){child.jumpDrawablesToCurrentState();}Trace.traceEnd(Trace.TRACE_TAG_VIEW);}},{key:'canAnimate',value:function canAnimate(){return _get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'canAnimate',this).call(this)&&this.mItemCount>0;}},{key:'setSelection',value:function setSelection(position){this.setSelectionFromTop(position,0);}},{key:'setSelectionFromTop',value:function setSelectionFromTop(position,y){if(this.mAdapter==null){return;}if(!this.isInTouchMode()){position=this.lookForSelectablePosition(position,true);if(position>=0){this.setNextSelectedPositionInt(position);}}else{this.mResurrectToPosition=position;}if(position>=0){this.mLayoutMode=ListView.LAYOUT_SPECIFIC;this.mSpecificTop=this.mListPadding.top+y;if(this.mNeedSync){this.mSyncPosition=position;this.mSyncRowId=this.mAdapter.getItemId(position);}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.requestLayout();}}},{key:'setSelectionInt',value:function setSelectionInt(position){this.setNextSelectedPositionInt(position);var awakeScrollbars=false;var selectedPosition=this.mSelectedPosition;if(selectedPosition>=0){if(position==selectedPosition-1){awakeScrollbars=true;}else if(position==selectedPosition+1){awakeScrollbars=true;}}if(this.mPositionScroller!=null){this.mPositionScroller.stop();}this.layoutChildren();if(awakeScrollbars){this.awakenScrollBars();}}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return ListView.INVALID_POSITION;}var count=adapter.getCount();if(!this.mAreAllItemsSelectable){if(lookDown){position=Math.max(0,position);while(position=0&&!adapter.isEnabled(position)){position--;}}}if(position<0||position>=count){return ListView.INVALID_POSITION;}return position;}},{key:'lookForSelectablePositionAfter',value:function lookForSelectablePositionAfter(current,position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return ListView.INVALID_POSITION;}var after=this.lookForSelectablePosition(position,lookDown);if(after!=ListView.INVALID_POSITION){return after;}var count=adapter.getCount();current=MathUtils.constrain(current,-1,count-1);if(lookDown){position=Math.min(position-1,count-1);while(position>current&&!adapter.isEnabled(position)){position--;}if(position<=current){return ListView.INVALID_POSITION;}}else{position=Math.max(0,position+1);while(position=current){return ListView.INVALID_POSITION;}}return position;}},{key:'setSelectionAfterHeaderView',value:function setSelectionAfterHeaderView(){var count=this.mHeaderViewInfos.size();if(count>0){this.mNextSelectedPosition=0;return;}if(this.mAdapter!=null){this.setSelection(count);}else{this.mNextSelectedPosition=count;this.mLayoutMode=ListView.LAYOUT_SET_SELECTION;}}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var handled=_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'dispatchKeyEvent',this).call(this,event);if(!handled){var focused=this.getFocusedChild();if(focused!=null&&event.getAction()==KeyEvent.ACTION_DOWN){handled=this.onKeyDown(event.getKeyCode(),event);}}return handled;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return this.commonKey(keyCode,1,event);}},{key:'onKeyMultiple',value:function onKeyMultiple(keyCode,repeatCount,event){return this.commonKey(keyCode,repeatCount,event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return this.commonKey(keyCode,1,event);}},{key:'commonKey',value:function commonKey(keyCode,count,event){if(this.mAdapter==null||!this.isAttachedToWindow()){return false;}if(this.mDataChanged){this.layoutChildren();}var handled=false;var action=event.getAction();if(action!=KeyEvent.ACTION_UP){switch(keyCode){case KeyEvent.KEYCODE_DPAD_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled){while(count-->0){if(this.arrowScroll(ListView.FOCUS_UP)){handled=true;}else{break;}}}}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_DPAD_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled){while(count-->0){if(this.arrowScroll(ListView.FOCUS_DOWN)){handled=true;}else{break;}}}}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_DPAD_LEFT:if(event.hasNoModifiers()){handled=this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT);}break;case KeyEvent.KEYCODE_DPAD_RIGHT:if(event.hasNoModifiers()){handled=this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT);}break;case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded();if(!handled&&event.getRepeatCount()==0&&this.getChildCount()>0){this.keyPressed();handled=true;}}break;case KeyEvent.KEYCODE_SPACE:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_UP);}handled=true;break;case KeyEvent.KEYCODE_PAGE_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_UP);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(ListView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_MOVE_HOME:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_UP);}break;case KeyEvent.KEYCODE_MOVE_END:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(ListView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_TAB:break;}}if(handled){return true;}switch(action){case KeyEvent.ACTION_DOWN:return _get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onKeyDown',this).call(this,keyCode,event);case KeyEvent.ACTION_UP:return _get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onKeyUp',this).call(this,keyCode,event);default:return false;}}},{key:'pageScroll',value:function pageScroll(direction){var nextPage=void 0;var down=void 0;if(direction==ListView.FOCUS_UP){nextPage=Math.max(0,this.mSelectedPosition-this.getChildCount()-1);down=false;}else if(direction==ListView.FOCUS_DOWN){nextPage=Math.min(this.mItemCount-1,this.mSelectedPosition+this.getChildCount()-1);down=true;}else{return false;}if(nextPage>=0){var position=this.lookForSelectablePositionAfter(this.mSelectedPosition,nextPage,down);if(position>=0){this.mLayoutMode=ListView.LAYOUT_SPECIFIC;this.mSpecificTop=this.mPaddingTop+this.getVerticalFadingEdgeLength();if(down&&position>this.mItemCount-this.getChildCount()){this.mLayoutMode=ListView.LAYOUT_FORCE_BOTTOM;}if(!down&&position=0){this.mLayoutMode=ListView.LAYOUT_FORCE_TOP;this.setSelectionInt(position);this.invokeOnItemScrollListener();}moved=true;}}else if(direction==ListView.FOCUS_DOWN){var lastItem=this.mItemCount-1;if(this.mSelectedPosition=0){this.mLayoutMode=ListView.LAYOUT_FORCE_BOTTOM;this.setSelectionInt(_position4);this.invokeOnItemScrollListener();}moved=true;}}if(moved&&!this.awakenScrollBars()){this.awakenScrollBars();this.invalidate();}return moved;}},{key:'handleHorizontalFocusWithinListItem',value:function handleHorizontalFocusWithinListItem(direction){if(direction!=View.FOCUS_LEFT&&direction!=View.FOCUS_RIGHT){throw Error('new IllegalArgumentException("direction must be one of" + " {View.FOCUS_LEFT, View.FOCUS_RIGHT}")');}var numChildren=this.getChildCount();if(this.mItemsCanFocus&&numChildren>0&&this.mSelectedPosition!=ListView.INVALID_POSITION){var selectedView=this.getSelectedView();if(selectedView!=null&&selectedView.hasFocus()&&selectedView instanceof ViewGroup){var currentFocus=selectedView.findFocus();var nextFocus=FocusFinder.getInstance().findNextFocus(selectedView,currentFocus,direction);if(nextFocus!=null){currentFocus.getFocusedRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocus,this.mTempRect);this.offsetRectIntoDescendantCoords(nextFocus,this.mTempRect);if(nextFocus.requestFocus(direction,this.mTempRect)){return true;}}var globalNextFocus=FocusFinder.getInstance().findNextFocus(this.getRootView(),currentFocus,direction);if(globalNextFocus!=null){return this.isViewAncestorOf(globalNextFocus,this);}}}return false;}},{key:'arrowScroll',value:function arrowScroll(direction){try{this.mInLayout=true;var handled=this.arrowScrollImpl(direction);if(handled){this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));}return handled;}finally{this.mInLayout=false;}}},{key:'nextSelectedPositionForDirection',value:function nextSelectedPositionForDirection(selectedView,selectedPos,direction){var nextSelected=void 0;if(direction==View.FOCUS_DOWN){var listBottom=this.getHeight()-this.mListPadding.bottom;if(selectedView!=null&&selectedView.getBottom()<=listBottom){nextSelected=selectedPos!=ListView.INVALID_POSITION&&selectedPos>=this.mFirstPosition?selectedPos+1:this.mFirstPosition;}else{return ListView.INVALID_POSITION;}}else{var listTop=this.mListPadding.top;if(selectedView!=null&&selectedView.getTop()>=listTop){var lastPos=this.mFirstPosition+this.getChildCount()-1;nextSelected=selectedPos!=ListView.INVALID_POSITION&&selectedPos<=lastPos?selectedPos-1:lastPos;}else{return ListView.INVALID_POSITION;}}if(nextSelected<0||nextSelected>=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}return this.lookForSelectablePosition(nextSelected,direction==View.FOCUS_DOWN);}},{key:'arrowScrollImpl',value:function arrowScrollImpl(direction){if(this.getChildCount()<=0){return false;}var selectedView=this.getSelectedView();var selectedPos=this.mSelectedPosition;var nextSelectedPosition=this.nextSelectedPositionForDirection(selectedView,selectedPos,direction);var amountToScroll=this.amountToScroll(direction,nextSelectedPosition);var focusResult=this.mItemsCanFocus?this.arrowScrollFocused(direction):null;if(focusResult!=null){nextSelectedPosition=focusResult.getSelectedPosition();amountToScroll=focusResult.getAmountToScroll();}var needToRedraw=focusResult!=null;if(nextSelectedPosition!=ListView.INVALID_POSITION){this.handleNewSelectionChange(selectedView,direction,nextSelectedPosition,focusResult!=null);this.setSelectedPositionInt(nextSelectedPosition);this.setNextSelectedPositionInt(nextSelectedPosition);selectedView=this.getSelectedView();selectedPos=nextSelectedPosition;if(this.mItemsCanFocus&&focusResult==null){var focused=this.getFocusedChild();if(focused!=null){focused.clearFocus();}}needToRedraw=true;this.checkSelectionChanged();}if(amountToScroll>0){this.scrollListItemsBy(direction==View.FOCUS_UP?amountToScroll:-amountToScroll);needToRedraw=true;}if(this.mItemsCanFocus&&focusResult==null&&selectedView!=null&&selectedView.hasFocus()){var _focused=selectedView.findFocus();if(!this.isViewAncestorOf(_focused,this)||this.distanceToView(_focused)>0){_focused.clearFocus();}}if(nextSelectedPosition==ListView.INVALID_POSITION&&selectedView!=null&&!this.isViewAncestorOf(selectedView,this)){selectedView=null;this.hideSelector();this.mResurrectToPosition=ListView.INVALID_POSITION;}if(needToRedraw){if(selectedView!=null){this.positionSelector(selectedPos,selectedView);this.mSelectedTop=selectedView.getTop();}if(!this.awakenScrollBars()){this.invalidate();}this.invokeOnItemScrollListener();return true;}return false;}},{key:'handleNewSelectionChange',value:function handleNewSelectionChange(selectedView,direction,newSelectedPosition,newFocusAssigned){if(newSelectedPosition==ListView.INVALID_POSITION){throw Error('new IllegalArgumentException("newSelectedPosition needs to be valid")');}var topView=void 0;var bottomView=void 0;var topViewIndex=void 0,bottomViewIndex=void 0;var topSelected=false;var selectedIndex=this.mSelectedPosition-this.mFirstPosition;var nextSelectedIndex=newSelectedPosition-this.mFirstPosition;if(direction==View.FOCUS_UP){topViewIndex=nextSelectedIndex;bottomViewIndex=selectedIndex;topView=this.getChildAt(topViewIndex);bottomView=selectedView;topSelected=true;}else{topViewIndex=selectedIndex;bottomViewIndex=nextSelectedIndex;topView=selectedView;bottomView=this.getChildAt(bottomViewIndex);}var numChildren=this.getChildCount();if(topView!=null){topView.setSelected(!newFocusAssigned&&topSelected);this.measureAndAdjustDown(topView,topViewIndex,numChildren);}if(bottomView!=null){bottomView.setSelected(!newFocusAssigned&&!topSelected);this.measureAndAdjustDown(bottomView,bottomViewIndex,numChildren);}}},{key:'measureAndAdjustDown',value:function measureAndAdjustDown(child,childIndex,numChildren){var oldHeight=child.getHeight();this.measureItem(child);if(child.getMeasuredHeight()!=oldHeight){this.relayoutMeasuredItem(child);var heightDelta=child.getMeasuredHeight()-oldHeight;for(var i=childIndex+1;i0){childHeightSpec=View.MeasureSpec.makeMeasureSpec(lpHeight,View.MeasureSpec.EXACTLY);}else{childHeightSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec,childHeightSpec);}},{key:'relayoutMeasuredItem',value:function relayoutMeasuredItem(child){var w=child.getMeasuredWidth();var h=child.getMeasuredHeight();var childLeft=this.mListPadding.left;var childRight=childLeft+w;var childTop=child.getTop();var childBottom=childTop+h;child.layout(childLeft,childTop,childRight,childBottom);}},{key:'getArrowScrollPreviewLength',value:function getArrowScrollPreviewLength(){return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS,this.getVerticalFadingEdgeLength());}},{key:'amountToScroll',value:function amountToScroll(direction,nextSelectedPosition){var listBottom=this.getHeight()-this.mListPadding.bottom;var listTop=this.mListPadding.top;var numChildren=this.getChildCount();if(direction==View.FOCUS_DOWN){var indexToMakeVisible=numChildren-1;if(nextSelectedPosition!=ListView.INVALID_POSITION){indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}while(numChildren<=indexToMakeVisible){this.addViewBelow(this.getChildAt(numChildren-1),this.mFirstPosition+numChildren-1);numChildren++;}var positionToMakeVisible=this.mFirstPosition+indexToMakeVisible;var viewToMakeVisible=this.getChildAt(indexToMakeVisible);var goalBottom=listBottom;if(positionToMakeVisible=this.getMaxScrollAmount()){return 0;}var amountToScroll=viewToMakeVisible.getBottom()-goalBottom;if(this.mFirstPosition+numChildren==this.mItemCount){var max=this.getChildAt(numChildren-1).getBottom()-listBottom;amountToScroll=Math.min(amountToScroll,max);}return Math.min(amountToScroll,this.getMaxScrollAmount());}else{var _indexToMakeVisible=0;if(nextSelectedPosition!=ListView.INVALID_POSITION){_indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}while(_indexToMakeVisible<0){this.addViewAbove(this.getChildAt(0),this.mFirstPosition);this.mFirstPosition--;_indexToMakeVisible=nextSelectedPosition-this.mFirstPosition;}var _positionToMakeVisible=this.mFirstPosition+_indexToMakeVisible;var _viewToMakeVisible=this.getChildAt(_indexToMakeVisible);var goalTop=listTop;if(_positionToMakeVisible>0){goalTop+=this.getArrowScrollPreviewLength();}if(_viewToMakeVisible.getTop()>=goalTop){return 0;}if(nextSelectedPosition!=ListView.INVALID_POSITION&&_viewToMakeVisible.getBottom()-goalTop>=this.getMaxScrollAmount()){return 0;}var _amountToScroll=goalTop-_viewToMakeVisible.getTop();if(this.mFirstPosition==0){var _max=listTop-this.getChildAt(0).getTop();_amountToScroll=Math.min(_amountToScroll,_max);}return Math.min(_amountToScroll,this.getMaxScrollAmount());}}},{key:'lookForSelectablePositionOnScreen',value:function lookForSelectablePositionOnScreen(direction){var firstPosition=this.mFirstPosition;if(direction==View.FOCUS_DOWN){var startPos=this.mSelectedPosition!=ListView.INVALID_POSITION?this.mSelectedPosition+1:firstPosition;if(startPos>=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}if(startPos=this.mAdapter.getCount()){return ListView.INVALID_POSITION;}if(_startPos>last){_startPos=last;}var _adapter=this.getAdapter();for(var _pos=_startPos;_pos>=firstPosition;_pos--){if(_adapter.isEnabled(_pos)&&this.getChildAt(_pos-firstPosition).getVisibility()==View.VISIBLE){return _pos;}}}return ListView.INVALID_POSITION;}},{key:'arrowScrollFocused',value:function arrowScrollFocused(direction){var selectedView=this.getSelectedView();var newFocus=void 0;if(selectedView!=null&&selectedView.hasFocus()){var oldFocus=selectedView.findFocus();newFocus=FocusFinder.getInstance().findNextFocus(this,oldFocus,direction);}else{if(direction==View.FOCUS_DOWN){var topFadingEdgeShowing=this.mFirstPosition>0;var listTop=this.mListPadding.top+(topFadingEdgeShowing?this.getArrowScrollPreviewLength():0);var ySearchPoint=selectedView!=null&&selectedView.getTop()>listTop?selectedView.getTop():listTop;this.mTempRect.set(0,ySearchPoint,0,ySearchPoint);}else{var bottomFadingEdgeShowing=this.mFirstPosition+this.getChildCount()-1positionOfNewFocus)){return null;}}var focusScroll=this.amountToScrollToNewFocus(direction,newFocus,positionOfNewFocus);var maxScrollAmount=this.getMaxScrollAmount();if(focusScroll0){amountToScroll+=this.getArrowScrollPreviewLength();}}}else{var listBottom=this.getHeight()-this.mListPadding.bottom;if(this.mTempRect.bottom>listBottom){amountToScroll=this.mTempRect.bottom-listBottom;if(positionOfNewFocuslistBottom){distance=this.mTempRect.top-listBottom;}return distance;}},{key:'scrollListItemsBy',value:function scrollListItemsBy(amount){this.offsetChildrenTopAndBottom(amount);var listBottom=this.getHeight()-this.mListPadding.bottom;var listTop=this.mListPadding.top;var recycleBin=this.mRecycler;if(amount<0){var numChildren=this.getChildCount();var last=this.getChildAt(numChildren-1);while(last.getBottom()listTop&&this.mFirstPosition>0){_first=this.addViewAbove(_first,this.mFirstPosition);this.mFirstPosition--;}if(_first.getTop()>listTop){this.offsetChildrenTopAndBottom(listTop-_first.getTop());}var lastIndex=this.getChildCount()-1;var _last=this.getChildAt(lastIndex);while(_last.getTop()>listBottom){var _layoutParams=_last.getLayoutParams();if(recycleBin.shouldRecycleViewType(_layoutParams.viewType)){recycleBin.addScrapView(_last,this.mFirstPosition+lastIndex);}this.detachViewFromParent(_last);_last=this.getChildAt(--lastIndex);}}}},{key:'addViewAbove',value:function addViewAbove(theView,position){var abovePosition=position-1;var view=this.obtainView(abovePosition,this.mIsScrap);var edgeOfNewChild=theView.getTop()-this.mDividerHeight;this.setupChild(view,abovePosition,edgeOfNewChild,false,this.mListPadding.left,false,this.mIsScrap[0]);return view;}},{key:'addViewBelow',value:function addViewBelow(theView,position){var belowPosition=position+1;var view=this.obtainView(belowPosition,this.mIsScrap);var edgeOfNewChild=theView.getBottom()+this.mDividerHeight;this.setupChild(view,belowPosition,edgeOfNewChild,true,this.mListPadding.left,false,this.mIsScrap[0]);return view;}},{key:'setItemsCanFocus',value:function setItemsCanFocus(itemsCanFocus){this.mItemsCanFocus=itemsCanFocus;if(!itemsCanFocus){this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);}}},{key:'getItemsCanFocus',value:function getItemsCanFocus(){return this.mItemsCanFocus;}},{key:'isOpaque',value:function isOpaque(){var retValue=this.mCachingActive&&this.mIsCacheColorOpaque&&this.mDividerIsOpaque&&this.hasOpaqueScrollbars()||_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'isOpaque',this).call(this);if(retValue){var listTop=this.mListPadding!=null?this.mListPadding.top:this.mPaddingTop;var first=this.getChildAt(0);if(first==null||first.getTop()>listTop){return false;}var listBottom=this.getHeight()-(this.mListPadding!=null?this.mListPadding.bottom:this.mPaddingBottom);var last=this.getChildAt(this.getChildCount()-1);if(last==null||last.getBottom()>>24==0xFF;this.mIsCacheColorOpaque=opaque;if(opaque){if(this.mDividerPaint==null){this.mDividerPaint=new Paint();}this.mDividerPaint.setColor(color);}_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'setCacheColorHint',this).call(this,color);}},{key:'drawOverscrollHeader',value:function drawOverscrollHeader(canvas,drawable,bounds){var height=drawable.getMinimumHeight();canvas.save();canvas.clipRect(bounds);var span=bounds.bottom-bounds.top;if(span0&&this.mDivider!=null;if(drawDividers||drawOverscrollHeader||drawOverscrollFooter){var bounds=this.mTempRect;bounds.left=this.mPaddingLeft;bounds.right=this.mRight-this.mLeft-this.mPaddingRight;var count=this.getChildCount();var headerCount=this.mHeaderViewInfos.size();var itemCount=this.mItemCount;var footerLimit=itemCount-this.mFooterViewInfos.size();var headerDividers=this.mHeaderDividersEnabled;var footerDividers=this.mFooterDividersEnabled;var first=this.mFirstPosition;var areAllItemsSelectable=this.mAreAllItemsSelectable;var adapter=this.mAdapter;var fillForMissingDividers=this.isOpaque()&&!_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'isOpaque',this).call(this);if(fillForMissingDividers&&this.mDividerPaint==null&&this.mIsCacheColorOpaque){this.mDividerPaint=new Paint();this.mDividerPaint.setColor(this.getCacheColorHint());}var paint=this.mDividerPaint;var effectivePaddingTop=0;var effectivePaddingBottom=0;if((this.mGroupFlags&ListView.CLIP_TO_PADDING_MASK)==ListView.CLIP_TO_PADDING_MASK){effectivePaddingTop=this.mListPadding.top;effectivePaddingBottom=this.mListPadding.bottom;}var listBottom=this.mBottom-this.mTop-effectivePaddingBottom+this.mScrollY;if(!this.mStackFromBottom){var bottom=0;var scrollY=this.mScrollY;if(count>0&&scrollY<0){if(drawOverscrollHeader){bounds.bottom=0;bounds.top=scrollY;this.drawOverscrollHeader(canvas,overscrollHeader,bounds);}else if(drawDividers){bounds.bottom=0;bounds.top=-dividerHeight;this.drawDivider(canvas,bounds,-1);}}for(var i=0;i=footerLimit;if((headerDividers||!isHeader)&&(footerDividers||!isFooter)){var child=this.getChildAt(i);bottom=child.getBottom();var isLastItem=i==count-1;if(drawDividers&&bottom=footerLimit)){bounds.top=bottom;bounds.bottom=bottom+dividerHeight;this.drawDivider(canvas,bounds,i);}else if(fillForMissingDividers){bounds.top=bottom;bounds.bottom=bottom+dividerHeight;canvas.drawRect(bounds,paint);}}}}var overFooterBottom=this.mBottom+this.mScrollY;if(drawOverscrollFooter&&first+count==itemCount&&overFooterBottom>bottom){bounds.top=bottom;bounds.bottom=overFooterBottom;this.drawOverscrollFooter(canvas,overscrollFooter,bounds);}}else{var top=void 0;var _scrollY=this.mScrollY;if(count>0&&drawOverscrollHeader){bounds.top=_scrollY;bounds.bottom=this.getChildAt(0).getTop();this.drawOverscrollHeader(canvas,overscrollHeader,bounds);}var start=drawOverscrollHeader?1:0;for(var _i47=start;_i47=footerLimit;if((headerDividers||!_isHeader)&&(footerDividers||!_isFooter)){var _child15=this.getChildAt(_i47);top=_child15.getTop();if(drawDividers&&top>effectivePaddingTop){var isFirstItem=_i47==start;var previousIndex=_itemIndex-1;if(areAllItemsSelectable||(adapter.isEnabled(_itemIndex)||headerDividers&&_isHeader||footerDividers&&_isFooter)&&(isFirstItem||adapter.isEnabled(previousIndex)||headerDividers&&previousIndex=footerLimit)){bounds.top=top-dividerHeight;bounds.bottom=top;this.drawDivider(canvas,bounds,_i47-1);}else if(fillForMissingDividers){bounds.top=top-dividerHeight;bounds.bottom=top;canvas.drawRect(bounds,paint);}}}}if(count>0&&_scrollY>0){if(drawOverscrollFooter){var absListBottom=this.mBottom;bounds.top=absListBottom;bounds.bottom=absListBottom+_scrollY;this.drawOverscrollFooter(canvas,overscrollFooter,bounds);}else if(drawDividers){bounds.top=listBottom;bounds.bottom=listBottom+dividerHeight;this.drawDivider(canvas,bounds,-1);}}}}_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'dispatchDraw',this).call(this,canvas);}},{key:'drawChild',value:function drawChild(canvas,child,drawingTime){var more=_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'drawChild',this).call(this,canvas,child,drawingTime);if(this.mCachingActive&&child.mCachingFailed){this.mCachingActive=false;}return more;}},{key:'drawDivider',value:function drawDivider(canvas,bounds,childIndex){var divider=this.mDivider;divider.setBounds(bounds);divider.draw(canvas);}},{key:'getDivider',value:function getDivider(){return this.mDivider;}},{key:'setDivider',value:function setDivider(divider){if(divider!=null){this.mDividerHeight=divider.getIntrinsicHeight();}else{this.mDividerHeight=0;}this.mDivider=divider;this.mDividerIsOpaque=divider==null||divider.getOpacity()==PixelFormat.OPAQUE;this.requestLayout();this.invalidate();}},{key:'getDividerHeight',value:function getDividerHeight(){return this.mDividerHeight;}},{key:'setDividerHeight',value:function setDividerHeight(height){this.mDividerHeight=height;this.requestLayout();this.invalidate();}},{key:'setHeaderDividersEnabled',value:function setHeaderDividersEnabled(headerDividersEnabled){this.mHeaderDividersEnabled=headerDividersEnabled;this.invalidate();}},{key:'areHeaderDividersEnabled',value:function areHeaderDividersEnabled(){return this.mHeaderDividersEnabled;}},{key:'setFooterDividersEnabled',value:function setFooterDividersEnabled(footerDividersEnabled){this.mFooterDividersEnabled=footerDividersEnabled;this.invalidate();}},{key:'areFooterDividersEnabled',value:function areFooterDividersEnabled(){return this.mFooterDividersEnabled;}},{key:'setOverscrollHeader',value:function setOverscrollHeader(header){this.mOverScrollHeader=header;if(this.mScrollY<0){this.invalidate();}}},{key:'getOverscrollHeader',value:function getOverscrollHeader(){return this.mOverScrollHeader;}},{key:'setOverscrollFooter',value:function setOverscrollFooter(footer){this.mOverScrollFooter=footer;this.invalidate();}},{key:'getOverscrollFooter',value:function getOverscrollFooter(){return this.mOverScrollFooter;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);var adapter=this.mAdapter;var closetChildIndex=-1;var closestChildTop=0;if(adapter!=null&&gainFocus&&previouslyFocusedRect!=null){previouslyFocusedRect.offset(this.mScrollX,this.mScrollY);if(adapter.getCount()=0){this.setSelectionFromTop(closetChildIndex+this.mFirstPosition,closestChildTop);}else{this.requestLayout();}}},{key:'onFinishInflate',value:function onFinishInflate(){_get2(ListView.prototype.__proto__||Object.getPrototypeOf(ListView.prototype),'onFinishInflate',this).call(this);var count=this.getChildCount();if(count>0){for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:android.R.attr.scrollViewStyle;_classCallCheck(this,ScrollView);var _this117=_possibleConstructorReturn(this,(ScrollView.__proto__||Object.getPrototypeOf(ScrollView)).call(this,context,bindElement,defStyle));_this117.mLastScroll=0;_this117.mTempRect=new Rect();_this117.mLastMotionY=0;_this117.mIsLayoutDirty=true;_this117.mChildToScrollTo=null;_this117.mIsBeingDragged=false;_this117.mSmoothScrollingEnabled=true;_this117.mMinimumVelocity=0;_this117.mMaximumVelocity=0;_this117.mOverscrollDistance=0;_this117.mOverflingDistance=0;_this117.mActivePointerId=ScrollView.INVALID_POINTER;_this117.initScrollView();var a=context.obtainStyledAttributes(bindElement,defStyle);_this117.setFillViewport(a.getBoolean('fillViewport',false));a.recycle();return _this117;}_createClass(ScrollView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'createClassAttrBinder',this).call(this).set('fillViewport',{setter:function setter(v,value,attrBinder){v.setFillViewport(attrBinder.parseBoolean(value));},getter:function getter(v){return v.isFillViewport();}});}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return true;}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){if(this.getChildCount()==0){return 0.0;}var length=this.getVerticalFadingEdgeLength();if(this.mScrollY0){throw new Error("ScrollView can host only one direct child");}for(var _len28=arguments.length,args=Array(_len28),_key29=0;_key29<_len28;_key29++){args[_key29]=arguments[_key29];}return(_get4=_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'addView',this)).call.apply(_get4,[this].concat(args));}},{key:'canScroll',value:function canScroll(){var child=this.getChildAt(0);if(child!=null){var childHeight=child.getHeight();return this.getHeight()0){var child=this.getChildAt(0);var height=this.getMeasuredHeight();if(child.getMeasuredHeight()0){var scrollY=this.mScrollY;var child=this.getChildAt(0);return!(y=child.getBottom()-scrollY||x=child.getRight());}return false;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else{this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();if(action==MotionEvent.ACTION_MOVE&&this.mIsBeingDragged){return true;}if(this.getScrollY()==0&&!this.canScrollVertically(1)){return false;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==ScrollView.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);if(pointerIndex==-1){Log.e(ScrollView.TAG,"Invalid pointerId="+activePointerId+" in onInterceptTouchEvent");break;}var _y12=Math.floor(ev.getY(pointerIndex));var yDiff=Math.abs(_y12-this.mLastMotionY);if(yDiff>this.mTouchSlop){this.mIsBeingDragged=true;this.mLastMotionY=_y12;this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}break;}case MotionEvent.ACTION_DOWN:{var _y13=Math.floor(ev.getY());if(!this.inChild(Math.floor(ev.getX()),Math.floor(_y13))){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionY=_y13;this.mActivePointerId=ev.getPointerId(0);this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);this.mIsBeingDragged=!this.mScroller.isFinished();break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.mIsBeingDragged=false;this.mActivePointerId=ScrollView.INVALID_POINTER;this.recycleVelocityTracker();if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}break;case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var action=ev.getAction();switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{if(this.getChildCount()==0){return false;}if(this.mIsBeingDragged=!this.mScroller.isFinished()){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.mLastMotionY=Math.floor(ev.getY());this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);if(activePointerIndex==-1){Log.e(ScrollView.TAG,"Invalid pointerId="+this.mActivePointerId+" in onTouchEvent");break;}var _y14=Math.floor(ev.getY(activePointerIndex));var deltaY=this.mLastMotionY-_y14;if(!this.mIsBeingDragged&&Math.abs(deltaY)>this.mTouchSlop){var _parent=this.getParent();if(_parent!=null){_parent.requestDisallowInterceptTouchEvent(true);}this.mIsBeingDragged=true;if(deltaY>0){deltaY-=this.mTouchSlop;}else{deltaY+=this.mTouchSlop;}}if(this.mIsBeingDragged){this.mLastMotionY=_y14;var oldX=this.mScrollX;var oldY=this.mScrollY;var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==ScrollView.OVER_SCROLL_ALWAYS||overscrollMode==ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;if(this.overScrollBy(0,deltaY,0,this.mScrollY,0,range,0,this.mOverscrollDistance,true)){this.mVelocityTracker.clear();}}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getYVelocity(this.mActivePointerId));if(this.getChildCount()>0){var springBack=this.mScrollY<-this.mOverflingDistance||this.mScrollY-this.getScrollRange()>this.mOverflingDistance;if(!springBack&&Math.abs(initialVelocity)>this.mMinimumVelocity){this.fling(-initialVelocity);}else{if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}}}this.mActivePointerId=ScrollView.INVALID_POINTER;this.endDrag();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged&&this.getChildCount()>0){if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange())){this.postInvalidateOnAnimation();}this.mActivePointerId=ScrollView.INVALID_POINTER;this.endDrag();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();this.mLastMotionY=Math.floor(ev.getY(index));this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionY=Math.floor(ev.getY(ev.findPointerIndex(this.mActivePointerId)));break;}return true;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionY=Math.floor(ev.getY(newPointerIndex));this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(event.isPointerEvent()){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(!this.mIsBeingDragged){var vscroll=event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(vscroll!=0){var delta=Math.floor(vscroll*this.getVerticalScrollFactor());var range=this.getScrollRange();var oldScrollY=this.mScrollY;var newScrollY=oldScrollY-delta;if(newScrollY<0){newScrollY=0;}else if(newScrollY>range){newScrollY=range;}if(newScrollY!=oldScrollY){_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,this.mScrollX,newScrollY);return true;}}}}}}return _get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(!this.mScroller.isFinished()){var oldX=this.mScrollX;var oldY=this.mScrollY;this.mScrollX=scrollX;this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(clampedY){this.mScroller.springBack(this.mScrollX,this.mScrollY,0,0,0,this.getScrollRange());}}else{_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,scrollX,scrollY);}this.awakenScrollBars();}},{key:'getScrollRange',value:function getScrollRange(){var scrollRange=0;if(this.getChildCount()>0){var child=this.getChildAt(0);scrollRange=Math.max(0,child.getHeight()-(this.getHeight()-this.mPaddingBottom-this.mPaddingTop));}return scrollRange;}},{key:'findFocusableViewInBounds',value:function findFocusableViewInBounds(topFocus,top,bottom){var focusables=this.getFocusables(View.FOCUS_FORWARD);var focusCandidate=null;var foundFullyContainedFocusable=false;var count=focusables.size();for(var i=0;ifocusCandidate.getBottom();if(foundFullyContainedFocusable){if(viewIsFullyContained&&viewIsCloserToBoundary){focusCandidate=view;}}else{if(viewIsFullyContained){focusCandidate=view;foundFullyContainedFocusable=true;}else if(viewIsCloserToBoundary){focusCandidate=view;}}}}}return focusCandidate;}},{key:'pageScroll',value:function pageScroll(direction){var down=direction==View.FOCUS_DOWN;var height=this.getHeight();if(down){this.mTempRect.top=this.getScrollY()+height;var count=this.getChildCount();if(count>0){var view=this.getChildAt(count-1);if(this.mTempRect.top+height>view.getBottom()){this.mTempRect.top=view.getBottom()-height;}}}else{this.mTempRect.top=this.getScrollY()-height;if(this.mTempRect.top<0){this.mTempRect.top=0;}}this.mTempRect.bottom=this.mTempRect.top+height;return this.scrollAndFocus(direction,this.mTempRect.top,this.mTempRect.bottom);}},{key:'fullScroll',value:function fullScroll(direction){var down=direction==View.FOCUS_DOWN;var height=this.getHeight();this.mTempRect.top=0;this.mTempRect.bottom=height;if(down){var count=this.getChildCount();if(count>0){var view=this.getChildAt(count-1);this.mTempRect.bottom=view.getBottom()+this.mPaddingBottom;this.mTempRect.top=this.mTempRect.bottom-height;}}return this.scrollAndFocus(direction,this.mTempRect.top,this.mTempRect.bottom);}},{key:'scrollAndFocus',value:function scrollAndFocus(direction,top,bottom){var handled=true;var height=this.getHeight();var containerTop=this.getScrollY();var containerBottom=containerTop+height;var up=direction==View.FOCUS_UP;var newFocused=this.findFocusableViewInBounds(up,top,bottom);if(newFocused==null){newFocused=this;}if(top>=containerTop&&bottom<=containerBottom){handled=false;}else{var delta=up?top-containerTop:bottom-containerBottom;this.doScrollY(delta);}if(newFocused!=this.findFocus())newFocused.requestFocus(direction);return handled;}},{key:'arrowScroll',value:function arrowScroll(direction){var currentFocused=this.findFocus();if(currentFocused==this)currentFocused=null;var nextFocused=FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);var maxJump=this.getMaxScrollAmount();if(nextFocused!=null&&this.isWithinDeltaOfScreen(nextFocused,maxJump,this.getHeight())){nextFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(nextFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollY(scrollDelta);nextFocused.requestFocus(direction);}else{var _scrollDelta=maxJump;if(direction==View.FOCUS_UP&&this.getScrollY()<_scrollDelta){_scrollDelta=this.getScrollY();}else if(direction==View.FOCUS_DOWN){if(this.getChildCount()>0){var daBottom=this.getChildAt(0).getBottom();var screenBottom=this.getScrollY()+this.getHeight()-this.mPaddingBottom;if(daBottom-screenBottom=this.getScrollY()&&this.mTempRect.top-delta<=this.getScrollY()+height;}},{key:'doScrollY',value:function doScrollY(delta){if(delta!=0){if(this.mSmoothScrollingEnabled){this.smoothScrollBy(0,delta);}else{this.scrollBy(0,delta);}}}},{key:'smoothScrollBy',value:function smoothScrollBy(dx,dy){if(this.getChildCount()==0){return;}var duration=AnimationUtils.currentAnimationTimeMillis()-this.mLastScroll;if(duration>ScrollView.ANIMATED_SCROLL_GAP){var height=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;var bottom=this.getChildAt(0).getHeight();var maxY=Math.max(0,bottom-height);var scrollY=this.mScrollY;dy=Math.max(0,Math.min(scrollY+dy,maxY))-scrollY;this.mScroller.startScroll(this.mScrollX,scrollY,0,dy);this.postInvalidateOnAnimation();}else{if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(dx,dy);}this.mLastScroll=AnimationUtils.currentAnimationTimeMillis();}},{key:'smoothScrollTo',value:function smoothScrollTo(x,y){this.smoothScrollBy(x-this.mScrollX,y-this.mScrollY);}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var count=this.getChildCount();var contentHeight=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;if(count==0){return contentHeight;}var scrollRange=this.getChildAt(0).getBottom();var scrollY=this.mScrollY;var overscrollBottom=Math.max(0,scrollRange-contentHeight);if(scrollY<0){scrollRange-=scrollY;}else if(scrollY>overscrollBottom){scrollRange+=scrollY-overscrollBottom;}return scrollRange;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return Math.max(0,_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'computeVerticalScrollOffset',this).call(this));}},{key:'measureChild',value:function measureChild(child,parentWidthMeasureSpec,parentHeightMeasureSpec){var lp=child.getLayoutParams();var childWidthMeasureSpec=void 0;var childHeightMeasureSpec=void 0;childWidthMeasureSpec=ScrollView.getChildMeasureSpec(parentWidthMeasureSpec,this.mPaddingLeft+this.mPaddingRight,lp.width);childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'measureChildWithMargins',value:function measureChildWithMargins(child,parentWidthMeasureSpec,widthUsed,parentHeightMeasureSpec,heightUsed){var lp=child.getLayoutParams();var childWidthMeasureSpec=ScrollView.getChildMeasureSpec(parentWidthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+lp.leftMargin+lp.rightMargin+widthUsed,lp.width);var childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(lp.topMargin+lp.bottomMargin,View.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller.computeScrollOffset()){var oldX=this.mScrollX;var oldY=this.mScrollY;var _x188=this.mScroller.getCurrX();var _y15=this.mScroller.getCurrY();if(oldX!=_x188||oldY!=_y15){var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==ScrollView.OVER_SCROLL_ALWAYS||overscrollMode==ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;this.overScrollBy(_x188-oldX,_y15-oldY,oldX,oldY,0,range,0,this.getHeight()/2,false);this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);}if(!this.awakenScrollBars()){this.postInvalidateOnAnimation();}}else{}}},{key:'scrollToChild',value:function scrollToChild(child){child.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(child,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);if(scrollDelta!=0){this.scrollBy(0,scrollDelta);}}},{key:'scrollToChildRect',value:function scrollToChildRect(rect,immediate){var delta=this.computeScrollDeltaToGetChildRectOnScreen(rect);var scroll=delta!=0;if(scroll){if(immediate){this.scrollBy(0,delta);}else{this.smoothScrollBy(0,delta);}}return scroll;}},{key:'computeScrollDeltaToGetChildRectOnScreen',value:function computeScrollDeltaToGetChildRectOnScreen(rect){if(this.getChildCount()==0)return 0;var height=this.getHeight();var screenTop=this.getScrollY();var screenBottom=screenTop+height;var fadingEdge=this.getVerticalFadingEdgeLength();if(rect.top>0){screenTop+=fadingEdge;}if(rect.bottomscreenBottom&&rect.top>screenTop){if(rect.height()>height){scrollYDelta+=rect.top-screenTop;}else{scrollYDelta+=rect.bottom-screenBottom;}var bottom=this.getChildAt(0).getBottom();var distanceToBottom=bottom-screenBottom;scrollYDelta=Math.min(scrollYDelta,distanceToBottom);}else if(rect.topheight){scrollYDelta-=screenBottom-rect.bottom;}else{scrollYDelta-=screenTop-rect.top;}scrollYDelta=Math.max(scrollYDelta,-this.getScrollY());}return scrollYDelta;}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(!this.mIsLayoutDirty){this.scrollToChild(focused);}else{this.mChildToScrollTo=focused;}_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'requestChildFocus',this).call(this,child,focused);}},{key:'onRequestFocusInDescendants',value:function onRequestFocusInDescendants(direction,previouslyFocusedRect){if(direction==View.FOCUS_FORWARD){direction=View.FOCUS_DOWN;}else if(direction==View.FOCUS_BACKWARD){direction=View.FOCUS_UP;}var nextFocus=previouslyFocusedRect==null?FocusFinder.getInstance().findNextFocus(this,null,direction):FocusFinder.getInstance().findNextFocusFromRect(this,previouslyFocusedRect,direction);if(nextFocus==null){return false;}if(this.isOffScreen(nextFocus)){return false;}return nextFocus.requestFocus(direction,previouslyFocusedRect);}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){rectangle.offset(child.getLeft()-child.getScrollX(),child.getTop()-child.getScrollY());return this.scrollToChildRect(rectangle,immediate);}},{key:'requestLayout',value:function requestLayout(){this.mIsLayoutDirty=true;_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'requestLayout',this).call(this);}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mIsLayoutDirty=false;if(this.mChildToScrollTo!=null&&ScrollView.isViewDescendantOf(this.mChildToScrollTo,this)){this.scrollToChild(this.mChildToScrollTo);}this.mChildToScrollTo=null;if(!this.isLaidOut()){var childHeight=this.getChildCount()>0?this.getChildAt(0).getMeasuredHeight():0;var scrollRange=Math.max(0,childHeight-(b-t-this.mPaddingBottom-this.mPaddingTop));if(this.mScrollY>scrollRange){this.mScrollY=scrollRange;}else if(this.mScrollY<0){this.mScrollY=0;}}this.scrollTo(this.mScrollX,this.mScrollY);}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);var currentFocused=this.findFocus();if(null==currentFocused||this==currentFocused)return;if(this.isWithinDeltaOfScreen(currentFocused,0,oldh)){currentFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollY(scrollDelta);}}},{key:'fling',value:function fling(velocityY){if(this.getChildCount()>0){var height=this.getHeight()-this.mPaddingBottom-this.mPaddingTop;var bottom=this.getChildAt(0).getHeight();this.mScroller.fling(this.mScrollX,this.mScrollY,0,velocityY,0,0,0,Math.max(0,bottom-height),0,this.mOverflingDistance);this.postInvalidateOnAnimation();}}},{key:'endDrag',value:function endDrag(){this.mIsBeingDragged=false;this.recycleVelocityTracker();}},{key:'scrollTo',value:function scrollTo(x,y){if(this.getChildCount()>0){var child=this.getChildAt(0);x=ScrollView.clamp(x,this.getWidth()-this.mPaddingRight-this.mPaddingLeft,child.getWidth());y=ScrollView.clamp(y,this.getHeight()-this.mPaddingBottom-this.mPaddingTop,child.getHeight());if(x!=this.mScrollX||y!=this.mScrollY){_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'scrollTo',this).call(this,x,y);}}}},{key:'draw',value:function draw(canvas){_get2(ScrollView.prototype.__proto__||Object.getPrototypeOf(ScrollView.prototype),'draw',this).call(this,canvas);}}],[{key:'isViewDescendantOf',value:function isViewDescendantOf(child,parent){if(child==parent){return true;}var theParent=child.getParent();return theParent instanceof ViewGroup&&ScrollView.isViewDescendantOf(theParent,parent);}},{key:'clamp',value:function clamp(n,my,child){if(my>=child||n<0){return 0;}if(my+n>child){return child-my;}return n;}}]);return ScrollView;}(FrameLayout);ScrollView.ANIMATED_SCROLL_GAP=250;ScrollView.MAX_SCROLL_FACTOR=0.5;ScrollView.TAG="ScrollView";ScrollView.INVALID_POINTER=-1;widget.ScrollView=ScrollView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var util;(function(util){var ArrayMap=function(){function ArrayMap(capacity){_classCallCheck(this,ArrayMap);this.map=new Map();}_createClass(ArrayMap,[{key:'clear',value:function clear(){this.map.clear();}},{key:'erase',value:function erase(){this.map.clear();}},{key:'ensureCapacity',value:function ensureCapacity(minimumCapacity){}},{key:'containsKey',value:function containsKey(key){return this.map.has(key);}},{key:'indexOfValue',value:function indexOfValue(value){return[].concat(_toConsumableArray(this.map.values())).indexOf(value);}},{key:'containsValue',value:function containsValue(value){return this.indexOfValue(value)>=0;}},{key:'get',value:function get(key){return this.map.get(key);}},{key:'keyAt',value:function keyAt(index){return[].concat(_toConsumableArray(this.map.keys()))[index];}},{key:'valueAt',value:function valueAt(index){return[].concat(_toConsumableArray(this.map.values()))[index];}},{key:'setValueAt',value:function setValueAt(index,value){var key=this.keyAt(index);if(key==null)throw Error('index error');var oldV=this.get(key);this.map.set(key,value);return oldV;}},{key:'isEmpty',value:function isEmpty(){return this.map.size<=0;}},{key:'put',value:function put(key,value){var oldV=this.get(key);this.map.set(key,value);return oldV;}},{key:'append',value:function append(key,value){this.map.set(key,value);}},{key:'remove',value:function remove(key){var oldV=this.get(key);this.map.delete(key);return oldV;}},{key:'removeAt',value:function removeAt(index){var key=this.keyAt(index);if(key==null)throw Error('index error');var oldV=this.get(key);this.map.delete(key);return oldV;}},{key:'keySet',value:function keySet(){return new Set(this.map.keys());}},{key:'size',value:function size(){return this.map.size;}}]);return ArrayMap;}();util.ArrayMap=ArrayMap;})(util=android.util||(android.util={}));})(android||(android={}));var java;(function(java){var util;(function(util){var ArrayDeque=function(_util$ArrayList){_inherits(ArrayDeque,_util$ArrayList);function ArrayDeque(){_classCallCheck(this,ArrayDeque);return _possibleConstructorReturn(this,(ArrayDeque.__proto__||Object.getPrototypeOf(ArrayDeque)).apply(this,arguments));}_createClass(ArrayDeque,[{key:'addFirst',value:function addFirst(e){this.add(0,e);}},{key:'addLast',value:function addLast(e){this.add(e);}},{key:'offerFirst',value:function offerFirst(e){this.addFirst(e);return true;}},{key:'offerLast',value:function offerLast(e){this.addLast(e);return true;}},{key:'removeFirst',value:function removeFirst(){var x=this.pollFirst();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'removeLast',value:function removeLast(){var x=this.pollLast();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'pollFirst',value:function pollFirst(){return this.array.shift();}},{key:'pollLast',value:function pollLast(){return this.array.splice(this.array.length-1)[0];}},{key:'getFirst',value:function getFirst(){var x=this.peekFirst();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'getLast',value:function getLast(){var x=this.peekLast();if(x==null)throw Error('NoSuchElementException');return x;}},{key:'peekFirst',value:function peekFirst(){return this.array[0];}},{key:'peekLast',value:function peekLast(){return this.array[this.array.length-1];}},{key:'removeFirstOccurrence',value:function removeFirstOccurrence(o){if(o==null)return false;for(var i=0,count=this.size();i=0;i--){if(this.array[i]==o){this.delete(i);return true;}}return false;}},{key:'offer',value:function offer(e){return this.offerLast(e);}},{key:'remove',value:function remove(){return this.removeFirst();}},{key:'poll',value:function poll(){return this.pollFirst();}},{key:'element',value:function element(){return this.getFirst();}},{key:'peek',value:function peek(){return this.peekFirst();}},{key:'push',value:function push(e){this.addFirst(e);}},{key:'pop',value:function pop(){return this.removeFirst();}},{key:'delete',value:function _delete(i){if(i>=this.array.length)return false;this.array.splice(i,1);return true;}}]);return ArrayDeque;}(util.ArrayList);util.ArrayDeque=ArrayDeque;})(util=java.util||(java.util={}));})(java||(java={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var Log=android.util.Log;var FocusFinder=android.view.FocusFinder;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var View=android.view.View;var ViewConfiguration=android.view.ViewConfiguration;var ViewGroup=android.view.ViewGroup;var AnimationUtils=android.view.animation.AnimationUtils;var FrameLayout=android.widget.FrameLayout;var OverScroller=android.widget.OverScroller;var ScrollView=android.widget.ScrollView;var HorizontalScrollView=function(_FrameLayout3){_inherits(HorizontalScrollView,_FrameLayout3);function HorizontalScrollView(context,bindElement,defStyle){_classCallCheck(this,HorizontalScrollView);var _this119=_possibleConstructorReturn(this,(HorizontalScrollView.__proto__||Object.getPrototypeOf(HorizontalScrollView)).call(this,context,bindElement,defStyle));_this119.mLastScroll=0;_this119.mTempRect=new Rect();_this119.mLastMotionX=0;_this119.mIsLayoutDirty=true;_this119.mChildToScrollTo=null;_this119.mIsBeingDragged=false;_this119.mSmoothScrollingEnabled=true;_this119.mMinimumVelocity=0;_this119.mMaximumVelocity=0;_this119.mOverscrollDistance=0;_this119._mOverflingDistance=0;_this119.mActivePointerId=HorizontalScrollView.INVALID_POINTER;_this119.initScrollView();var a=context.obtainStyledAttributes(bindElement,defStyle);_this119.setFillViewport(a.getBoolean('fillViewport',false));a.recycle();return _this119;}_createClass(HorizontalScrollView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'createClassAttrBinder',this).call(this).set('',{setter:function setter(v,value,attrBinder){v.setFillViewport(attrBinder.parseBoolean(value));},getter:function getter(v){return v.isFillViewport();}});}},{key:'getLeftFadingEdgeStrength',value:function getLeftFadingEdgeStrength(){if(this.getChildCount()==0){return 0.0;}var length=this.getHorizontalFadingEdgeLength();if(this.mScrollX0){throw new Error("ScrollView can host only one direct child");}for(var _len29=arguments.length,args=Array(_len29),_key30=0;_key30<_len29;_key30++){args[_key30]=arguments[_key30];}return(_get5=_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'addView',this)).call.apply(_get5,[this].concat(args));}},{key:'canScroll',value:function canScroll(){var child=this.getChildAt(0);if(child!=null){var childWidth=child.getWidth();return this.getWidth()0){var child=this.getChildAt(0);var width=this.getMeasuredWidth();if(child.getMeasuredWidth()0){var scrollX=this.mScrollX;var child=this.getChildAt(0);return!(y=child.getBottom()||x=child.getRight()-scrollX);}return false;}},{key:'initOrResetVelocityTracker',value:function initOrResetVelocityTracker(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else{this.mVelocityTracker.clear();}}},{key:'initVelocityTrackerIfNotExists',value:function initVelocityTrackerIfNotExists(){if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}}},{key:'recycleVelocityTracker',value:function recycleVelocityTracker(){if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'requestDisallowInterceptTouchEvent',value:function requestDisallowInterceptTouchEvent(disallowIntercept){if(disallowIntercept){this.recycleVelocityTracker();}_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'requestDisallowInterceptTouchEvent',this).call(this,disallowIntercept);}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction();if(action==MotionEvent.ACTION_MOVE&&this.mIsBeingDragged){return true;}switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==HorizontalScrollView.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);if(pointerIndex==-1){Log.e(HorizontalScrollView.TAG,"Invalid pointerId="+activePointerId+" in onInterceptTouchEvent");break;}var _x189=Math.floor(ev.getX(pointerIndex));var xDiff=Math.floor(Math.abs(_x189-this.mLastMotionX));if(xDiff>this.mTouchSlop){this.mIsBeingDragged=true;this.mLastMotionX=_x189;this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);if(this.mParent!=null)this.mParent.requestDisallowInterceptTouchEvent(true);}break;}case MotionEvent.ACTION_DOWN:{var _x190=Math.floor(ev.getX());if(!this.inChild(Math.floor(_x190),Math.floor(ev.getY()))){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionX=_x190;this.mActivePointerId=ev.getPointerId(0);this.initOrResetVelocityTracker();this.mVelocityTracker.addMovement(ev);this.mIsBeingDragged=!this.mScroller.isFinished();break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.mIsBeingDragged=false;this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();this.mLastMotionX=Math.floor(ev.getX(index));this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionX=Math.floor(ev.getX(ev.findPointerIndex(this.mActivePointerId)));break;}return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.initVelocityTrackerIfNotExists();this.mVelocityTracker.addMovement(ev);var action=ev.getAction();switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{if(this.getChildCount()==0){return false;}if(this.mIsBeingDragged=!this.mScroller.isFinished()){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.mLastMotionX=Math.floor(ev.getX());this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);if(activePointerIndex==-1){Log.e(HorizontalScrollView.TAG,"Invalid pointerId="+this.mActivePointerId+" in onTouchEvent");break;}var _x191=Math.floor(ev.getX(activePointerIndex));var deltaX=this.mLastMotionX-_x191;if(!this.mIsBeingDragged&&Math.abs(deltaX)>this.mTouchSlop){var _parent2=this.getParent();if(_parent2!=null){_parent2.requestDisallowInterceptTouchEvent(true);}this.mIsBeingDragged=true;if(deltaX>0){deltaX-=this.mTouchSlop;}else{deltaX+=this.mTouchSlop;}}if(this.mIsBeingDragged){this.mLastMotionX=_x191;var oldX=this.mScrollX;var oldY=this.mScrollY;var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==HorizontalScrollView.OVER_SCROLL_ALWAYS||overscrollMode==HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;if(this.overScrollBy(deltaX,0,this.mScrollX,0,range,0,this.mOverscrollDistance,0,true)){this.mVelocityTracker.clear();}if(canOverscroll){}}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));if(this.getChildCount()>0){var isOverDrag=this.mScrollX<0||this.mScrollX>this.getScrollRange();if(!isOverDrag&&Math.abs(initialVelocity)>this.mMinimumVelocity){this.fling(-initialVelocity);}else{if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}}}this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;this.mIsBeingDragged=false;this.recycleVelocityTracker();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged&&this.getChildCount()>0){if(this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0)){this.postInvalidateOnAnimation();}this.mActivePointerId=HorizontalScrollView.INVALID_POINTER;this.mIsBeingDragged=false;this.recycleVelocityTracker();}break;case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}return true;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=(ev.getAction()&MotionEvent.ACTION_POINTER_INDEX_MASK)>>MotionEvent.ACTION_POINTER_INDEX_SHIFT;var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionX=Math.floor(ev.getX(newPointerIndex));this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){if(event.isPointerEvent()){switch(event.getAction()){case MotionEvent.ACTION_SCROLL:{if(!this.mIsBeingDragged){var hscroll=void 0;hscroll=-event.getAxisValue(MotionEvent.AXIS_VSCROLL);if(hscroll!=0){var delta=Math.floor(hscroll*this.getHorizontalScrollFactor());var range=this.getScrollRange();var oldScrollX=this.mScrollX;var newScrollX=oldScrollX+delta;if(newScrollX<0){newScrollX=0;}else if(newScrollX>range){newScrollX=range;}if(newScrollX!=oldScrollX){_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,newScrollX,this.mScrollY);return true;}}}}}}return _get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'onGenericMotionEvent',this).call(this,event);}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return true;}},{key:'onOverScrolled',value:function onOverScrolled(scrollX,scrollY,clampedX,clampedY){if(!this.mScroller.isFinished()){var oldX=this.mScrollX;var oldY=this.mScrollY;this.mScrollX=scrollX;this.mScrollY=scrollY;this.invalidateParentIfNeeded();this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(clampedX){this.mScroller.springBack(this.mScrollX,this.mScrollY,0,this.getScrollRange(),0,0);}}else{_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,scrollX,scrollY);}this.awakenScrollBars();}},{key:'getScrollRange',value:function getScrollRange(){var scrollRange=0;if(this.getChildCount()>0){var child=this.getChildAt(0);scrollRange=Math.max(0,child.getWidth()-(this.getWidth()-this.mPaddingLeft-this.mPaddingRight));}return scrollRange;}},{key:'findFocusableViewInMyBounds',value:function findFocusableViewInMyBounds(leftFocus,left,preferredFocusable){var fadingEdgeLength=this.getHorizontalFadingEdgeLength()/2;var leftWithoutFadingEdge=left+fadingEdgeLength;var rightWithoutFadingEdge=left+this.getWidth()-fadingEdgeLength;if(preferredFocusable!=null&&preferredFocusable.getLeft()leftWithoutFadingEdge){return preferredFocusable;}return this.findFocusableViewInBounds(leftFocus,leftWithoutFadingEdge,rightWithoutFadingEdge);}},{key:'findFocusableViewInBounds',value:function findFocusableViewInBounds(leftFocus,left,right){var focusables=this.getFocusables(View.FOCUS_FORWARD);var focusCandidate=null;var foundFullyContainedFocusable=false;var count=focusables.size();for(var i=0;ifocusCandidate.getRight();if(foundFullyContainedFocusable){if(viewIsFullyContained&&viewIsCloserToBoundary){focusCandidate=view;}}else{if(viewIsFullyContained){focusCandidate=view;foundFullyContainedFocusable=true;}else if(viewIsCloserToBoundary){focusCandidate=view;}}}}}return focusCandidate;}},{key:'pageScroll',value:function pageScroll(direction){var right=direction==View.FOCUS_RIGHT;var width=this.getWidth();if(right){this.mTempRect.left=this.getScrollX()+width;var count=this.getChildCount();if(count>0){var view=this.getChildAt(0);if(this.mTempRect.left+width>view.getRight()){this.mTempRect.left=view.getRight()-width;}}}else{this.mTempRect.left=this.getScrollX()-width;if(this.mTempRect.left<0){this.mTempRect.left=0;}}this.mTempRect.right=this.mTempRect.left+width;return this.scrollAndFocus(direction,this.mTempRect.left,this.mTempRect.right);}},{key:'fullScroll',value:function fullScroll(direction){var right=direction==View.FOCUS_RIGHT;var width=this.getWidth();this.mTempRect.left=0;this.mTempRect.right=width;if(right){var count=this.getChildCount();if(count>0){var view=this.getChildAt(0);this.mTempRect.right=view.getRight();this.mTempRect.left=this.mTempRect.right-width;}}return this.scrollAndFocus(direction,this.mTempRect.left,this.mTempRect.right);}},{key:'scrollAndFocus',value:function scrollAndFocus(direction,left,right){var handled=true;var width=this.getWidth();var containerLeft=this.getScrollX();var containerRight=containerLeft+width;var goLeft=direction==View.FOCUS_LEFT;var newFocused=this.findFocusableViewInBounds(goLeft,left,right);if(newFocused==null){newFocused=this;}if(left>=containerLeft&&right<=containerRight){handled=false;}else{var delta=goLeft?left-containerLeft:right-containerRight;this.doScrollX(delta);}if(newFocused!=this.findFocus())newFocused.requestFocus(direction);return handled;}},{key:'arrowScroll',value:function arrowScroll(direction){var currentFocused=this.findFocus();if(currentFocused==this)currentFocused=null;var nextFocused=FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);var maxJump=this.getMaxScrollAmount();if(nextFocused!=null&&this.isWithinDeltaOfScreen(nextFocused,maxJump)){nextFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(nextFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollX(scrollDelta);nextFocused.requestFocus(direction);}else{var _scrollDelta2=maxJump;if(direction==View.FOCUS_LEFT&&this.getScrollX()<_scrollDelta2){_scrollDelta2=this.getScrollX();}else if(direction==View.FOCUS_RIGHT&&this.getChildCount()>0){var daRight=this.getChildAt(0).getRight();var screenRight=this.getScrollX()+this.getWidth();if(daRight-screenRight=this.getScrollX()&&this.mTempRect.left-delta<=this.getScrollX()+this.getWidth();}},{key:'doScrollX',value:function doScrollX(delta){if(delta!=0){if(this.mSmoothScrollingEnabled){this.smoothScrollBy(delta,0);}else{this.scrollBy(delta,0);}}}},{key:'smoothScrollBy',value:function smoothScrollBy(dx,dy){if(this.getChildCount()==0){return;}var duration=AnimationUtils.currentAnimationTimeMillis()-this.mLastScroll;if(duration>HorizontalScrollView.ANIMATED_SCROLL_GAP){var width=this.getWidth()-this.mPaddingRight-this.mPaddingLeft;var right=this.getChildAt(0).getWidth();var maxX=Math.max(0,right-width);var scrollX=this.mScrollX;dx=Math.max(0,Math.min(scrollX+dx,maxX))-scrollX;this.mScroller.startScroll(scrollX,this.mScrollY,dx,0);this.postInvalidateOnAnimation();}else{if(!this.mScroller.isFinished()){this.mScroller.abortAnimation();}this.scrollBy(dx,dy);}this.mLastScroll=AnimationUtils.currentAnimationTimeMillis();}},{key:'smoothScrollTo',value:function smoothScrollTo(x,y){this.smoothScrollBy(x-this.mScrollX,y-this.mScrollY);}},{key:'computeHorizontalScrollRange',value:function computeHorizontalScrollRange(){var count=this.getChildCount();var contentWidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;if(count==0){return contentWidth;}var scrollRange=this.getChildAt(0).getRight();var scrollX=this.mScrollX;var overscrollRight=Math.max(0,scrollRange-contentWidth);if(scrollX<0){scrollRange-=scrollX;}else if(scrollX>overscrollRight){scrollRange+=scrollX-overscrollRight;}return scrollRange;}},{key:'computeHorizontalScrollOffset',value:function computeHorizontalScrollOffset(){return Math.max(0,_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'computeHorizontalScrollOffset',this).call(this));}},{key:'measureChild',value:function measureChild(child,parentWidthMeasureSpec,parentHeightMeasureSpec){var lp=child.getLayoutParams();var childWidthMeasureSpec=void 0;var childHeightMeasureSpec=void 0;childHeightMeasureSpec=HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec,this.mPaddingTop+this.mPaddingBottom,lp.height);childWidthMeasureSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'measureChildWithMargins',value:function measureChildWithMargins(child,parentWidthMeasureSpec,widthUsed,parentHeightMeasureSpec,heightUsed){var lp=child.getLayoutParams();var childHeightMeasureSpec=HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+lp.topMargin+lp.bottomMargin+heightUsed,lp.height);var childWidthMeasureSpec=View.MeasureSpec.makeMeasureSpec(lp.leftMargin+lp.rightMargin,View.MeasureSpec.UNSPECIFIED);child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'computeScroll',value:function computeScroll(){if(this.mScroller.computeScrollOffset()){var oldX=this.mScrollX;var oldY=this.mScrollY;var _x192=this.mScroller.getCurrX();var _y16=this.mScroller.getCurrY();if(oldX!=_x192||oldY!=_y16){var range=this.getScrollRange();var overscrollMode=this.getOverScrollMode();var canOverscroll=overscrollMode==HorizontalScrollView.OVER_SCROLL_ALWAYS||overscrollMode==HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS&&range>0;this.overScrollBy(_x192-oldX,_y16-oldY,oldX,oldY,range,0,this.mOverflingDistance,0,false);this.onScrollChanged(this.mScrollX,this.mScrollY,oldX,oldY);if(canOverscroll){}}if(!this.awakenScrollBars()){this.postInvalidateOnAnimation();}}}},{key:'scrollToChild',value:function scrollToChild(child){child.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(child,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);if(scrollDelta!=0){this.scrollBy(scrollDelta,0);}}},{key:'scrollToChildRect',value:function scrollToChildRect(rect,immediate){var delta=this.computeScrollDeltaToGetChildRectOnScreen(rect);var scroll=delta!=0;if(scroll){if(immediate){this.scrollBy(delta,0);}else{this.smoothScrollBy(delta,0);}}return scroll;}},{key:'computeScrollDeltaToGetChildRectOnScreen',value:function computeScrollDeltaToGetChildRectOnScreen(rect){if(this.getChildCount()==0)return 0;var width=this.getWidth();var screenLeft=this.getScrollX();var screenRight=screenLeft+width;var fadingEdge=this.getHorizontalFadingEdgeLength();if(rect.left>0){screenLeft+=fadingEdge;}if(rect.rightscreenRight&&rect.left>screenLeft){if(rect.width()>width){scrollXDelta+=rect.left-screenLeft;}else{scrollXDelta+=rect.right-screenRight;}var right=this.getChildAt(0).getRight();var distanceToRight=right-screenRight;scrollXDelta=Math.min(scrollXDelta,distanceToRight);}else if(rect.leftwidth){scrollXDelta-=screenRight-rect.right;}else{scrollXDelta-=screenLeft-rect.left;}scrollXDelta=Math.max(scrollXDelta,-this.getScrollX());}return scrollXDelta;}},{key:'requestChildFocus',value:function requestChildFocus(child,focused){if(!this.mIsLayoutDirty){this.scrollToChild(focused);}else{this.mChildToScrollTo=focused;}_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'requestChildFocus',this).call(this,child,focused);}},{key:'onRequestFocusInDescendants',value:function onRequestFocusInDescendants(direction,previouslyFocusedRect){if(direction==View.FOCUS_FORWARD){direction=View.FOCUS_RIGHT;}else if(direction==View.FOCUS_BACKWARD){direction=View.FOCUS_LEFT;}var nextFocus=previouslyFocusedRect==null?FocusFinder.getInstance().findNextFocus(this,null,direction):FocusFinder.getInstance().findNextFocusFromRect(this,previouslyFocusedRect,direction);if(nextFocus==null){return false;}if(this.isOffScreen(nextFocus)){return false;}return nextFocus.requestFocus(direction,previouslyFocusedRect);}},{key:'requestChildRectangleOnScreen',value:function requestChildRectangleOnScreen(child,rectangle,immediate){rectangle.offset(child.getLeft()-child.getScrollX(),child.getTop()-child.getScrollY());return this.scrollToChildRect(rectangle,immediate);}},{key:'requestLayout',value:function requestLayout(){this.mIsLayoutDirty=true;_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'requestLayout',this).call(this);}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var childWidth=0;var childMargins=0;if(this.getChildCount()>0){childWidth=this.getChildAt(0).getMeasuredWidth();var childParams=this.getChildAt(0).getLayoutParams();childMargins=childParams.leftMargin+childParams.rightMargin;}var available=r-l-this.getPaddingLeftWithForeground()-this.getPaddingRightWithForeground()-childMargins;var forceLeftGravity=childWidth>available;this.layoutChildren(l,t,r,b,forceLeftGravity);this.mIsLayoutDirty=false;if(this.mChildToScrollTo!=null&&HorizontalScrollView.isViewDescendantOf(this.mChildToScrollTo,this)){this.scrollToChild(this.mChildToScrollTo);}this.mChildToScrollTo=null;if(!this.isLaidOut()){var scrollRange=Math.max(0,childWidth-(r-l-this.mPaddingLeft-this.mPaddingRight));{if(this.isLayoutRtl()){this.mScrollX=scrollRange-this.mScrollX;}}if(this.mScrollX>scrollRange){this.mScrollX=scrollRange;}else if(this.mScrollX<0){this.mScrollX=0;}}this.scrollTo(this.mScrollX,this.mScrollY);}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);var currentFocused=this.findFocus();if(null==currentFocused||this==currentFocused)return;var maxJump=this.mRight-this.mLeft;if(this.isWithinDeltaOfScreen(currentFocused,maxJump)){currentFocused.getDrawingRect(this.mTempRect);this.offsetDescendantRectToMyCoords(currentFocused,this.mTempRect);var scrollDelta=this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);this.doScrollX(scrollDelta);}}},{key:'fling',value:function fling(velocityX){if(this.getChildCount()>0){var width=this.getWidth()-this.mPaddingRight-this.mPaddingLeft;var right=this.getChildAt(0).getWidth();this.mScroller.fling(this.mScrollX,this.mScrollY,velocityX,0,0,Math.max(0,right-width),0,0,width/2,0);var movingRight=velocityX>0;var currentFocused=this.findFocus();var newFocused=this.findFocusableViewInMyBounds(movingRight,this.mScroller.getFinalX(),currentFocused);if(newFocused==null){newFocused=this;}if(newFocused!=currentFocused){newFocused.requestFocus(movingRight?View.FOCUS_RIGHT:View.FOCUS_LEFT);}this.postInvalidateOnAnimation();}}},{key:'scrollTo',value:function scrollTo(x,y){if(this.getChildCount()>0){var child=this.getChildAt(0);x=HorizontalScrollView.clamp(x,this.getWidth()-this.mPaddingRight-this.mPaddingLeft,child.getWidth());y=HorizontalScrollView.clamp(y,this.getHeight()-this.mPaddingBottom-this.mPaddingTop,child.getHeight());if(x!=this.mScrollX||y!=this.mScrollY){_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'scrollTo',this).call(this,x,y);}}}},{key:'setOverScrollMode',value:function setOverScrollMode(mode){_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'setOverScrollMode',this).call(this,mode);}},{key:'draw',value:function draw(canvas){_get2(HorizontalScrollView.prototype.__proto__||Object.getPrototypeOf(HorizontalScrollView.prototype),'draw',this).call(this,canvas);}},{key:'mOverflingDistance',get:function get(){if(this.mScrollX<-this._mOverflingDistance)return-this.mScrollX;var overDistance=this.mScrollX-this.getScrollRange();if(overDistance>this._mOverflingDistance)return overDistance;return this._mOverflingDistance;},set:function set(value){this._mOverflingDistance=value;}}],[{key:'isViewDescendantOf',value:function isViewDescendantOf(child,parent){if(child==parent){return true;}var theParent=child.getParent();return theParent instanceof ViewGroup&&HorizontalScrollView.isViewDescendantOf(theParent,parent);}},{key:'clamp',value:function clamp(n,my,child){if(my>=child||n<0){return 0;}if(my+n>child){return child-my;}return n;}}]);return HorizontalScrollView;}(FrameLayout);HorizontalScrollView.ANIMATED_SCROLL_GAP=ScrollView.ANIMATED_SCROLL_GAP;HorizontalScrollView.MAX_SCROLL_FACTOR=ScrollView.MAX_SCROLL_FACTOR;HorizontalScrollView.TAG="HorizontalScrollView";HorizontalScrollView.INVALID_POINTER=-1;widget.HorizontalScrollView=HorizontalScrollView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ArrayMap=android.util.ArrayMap;var ArrayDeque=java.util.ArrayDeque;var ArrayList=java.util.ArrayList;var Rect=android.graphics.Rect;var SynchronizedPool=android.util.Pools.SynchronizedPool;var SparseMap=android.util.SparseMap;var Gravity=android.view.Gravity;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var System=java.lang.System;var Context=android.content.Context;var RelativeLayout=function(_ViewGroup4){_inherits(RelativeLayout,_ViewGroup4);function RelativeLayout(context,bindElement,defStyle){_classCallCheck(this,RelativeLayout);var _this120=_possibleConstructorReturn(this,(RelativeLayout.__proto__||Object.getPrototypeOf(RelativeLayout)).call(this,context,bindElement,defStyle));_this120.mBaselineView=null;_this120.mGravity=Gravity.START|Gravity.TOP;_this120.mContentBounds=new Rect();_this120.mSelfBounds=new Rect();_this120.mIgnoreGravity=View.NO_ID;_this120.mGraph=new RelativeLayout.DependencyGraph();_this120.mAllowBrokenMeasureSpecs=false;_this120.mMeasureVerticalWithPaddingMargin=false;if(bindElement||defStyle){var _a12=context.obtainStyledAttributes(bindElement,defStyle);_this120.mIgnoreGravity=_a12.getResourceId('ignoreGravity',View.NO_ID);_this120.mGravity=Gravity.parseGravity(_a12.getAttrValue('gravity'),_this120.mGravity);_a12.recycle();}_this120.queryCompatibilityModes();return _this120;}_createClass(RelativeLayout,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(RelativeLayout.prototype.__proto__||Object.getPrototypeOf(RelativeLayout.prototype),'createClassAttrBinder',this).call(this).set('ignoreGravity',{setter:function setter(v,value,a){v.setIgnoreGravity(value+'');},getter:function getter(v){return v.mIgnoreGravity;}}).set('gravity',{setter:function setter(v,value,a){v.setGravity(a.parseGravity(value,v.mGravity));},getter:function getter(v){return v.mGravity;}});}},{key:'queryCompatibilityModes',value:function queryCompatibilityModes(){this.mAllowBrokenMeasureSpecs=false;this.mMeasureVerticalWithPaddingMargin=true;}},{key:'shouldDelayChildPressedState',value:function shouldDelayChildPressedState(){return false;}},{key:'setIgnoreGravity',value:function setIgnoreGravity(viewId){this.mIgnoreGravity=viewId;}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'setGravity',value:function setGravity(gravity){if(this.mGravity!=gravity){if((gravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK)==0){gravity|=Gravity.START;}if((gravity&Gravity.VERTICAL_GRAVITY_MASK)==0){gravity|=Gravity.TOP;}this.mGravity=gravity;this.requestLayout();}}},{key:'setHorizontalGravity',value:function setHorizontalGravity(horizontalGravity){var gravity=horizontalGravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;if((this.mGravity&Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK)!=gravity){this.mGravity=this.mGravity&~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK|gravity;this.requestLayout();}}},{key:'setVerticalGravity',value:function setVerticalGravity(verticalGravity){var gravity=verticalGravity&Gravity.VERTICAL_GRAVITY_MASK;if((this.mGravity&Gravity.VERTICAL_GRAVITY_MASK)!=gravity){this.mGravity=this.mGravity&~Gravity.VERTICAL_GRAVITY_MASK|gravity;this.requestLayout();}}},{key:'getBaseline',value:function getBaseline(){return this.mBaselineView!=null?this.mBaselineView.getBaseline():_get2(RelativeLayout.prototype.__proto__||Object.getPrototypeOf(RelativeLayout.prototype),'getBaseline',this).call(this);}},{key:'requestLayout',value:function requestLayout(){_get2(RelativeLayout.prototype.__proto__||Object.getPrototypeOf(RelativeLayout.prototype),'requestLayout',this).call(this);this.mDirtyHierarchy=true;}},{key:'sortChildren',value:function sortChildren(){var count=this.getChildCount();if(this.mSortedVerticalChildren==null||this.mSortedVerticalChildren.length!=count){this.mSortedVerticalChildren=new Array(count);}if(this.mSortedHorizontalChildren==null||this.mSortedHorizontalChildren.length!=count){this.mSortedHorizontalChildren=new Array(count);}var graph=this.mGraph;graph.clear();for(var i=0;i=0){width=Math.max(width,this.mLayoutParams.width);}width=Math.max(width,this.getSuggestedMinimumWidth());width=RelativeLayout.resolveSize(width,widthMeasureSpec);if(offsetHorizontalAxis){for(var _i50=0;_i50=0){height=Math.max(height,this.mLayoutParams.height);}height=Math.max(height,this.getSuggestedMinimumHeight());height=RelativeLayout.resolveSize(height,heightMeasureSpec);if(offsetVerticalAxis){for(var _i51=0;_i51=0){childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(params.height,View.MeasureSpec.EXACTLY);}else{childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);}}else if(params.width==RelativeLayout.LayoutParams.MATCH_PARENT){childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(maxHeight,View.MeasureSpec.EXACTLY);}else{childHeightMeasureSpec=View.MeasureSpec.makeMeasureSpec(maxHeight,View.MeasureSpec.AT_MOST);}child.measure(childWidthMeasureSpec,childHeightMeasureSpec);}},{key:'getChildMeasureSpec',value:function getChildMeasureSpec(childStart,childEnd,childSize,startMargin,endMargin,startPadding,endPadding,mySize){if(mySize<0&&!this.mAllowBrokenMeasureSpecs){if(childSize>=0){return View.MeasureSpec.makeMeasureSpec(childSize,View.MeasureSpec.EXACTLY);}return View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);}var childSpecMode=0;var childSpecSize=0;var tempStart=childStart;var tempEnd=childEnd;if(tempStart<0){tempStart=startPadding+startMargin;}if(tempEnd<0){tempEnd=mySize-endPadding-endMargin;}var maxAvailable=tempEnd-tempStart;if(childStart>=0&&childEnd>=0){childSpecMode=View.MeasureSpec.EXACTLY;childSpecSize=maxAvailable;}else{if(childSize>=0){childSpecMode=View.MeasureSpec.EXACTLY;if(maxAvailable>=0){childSpecSize=Math.min(maxAvailable,childSize);}else{childSpecSize=childSize;}}else if(childSize==RelativeLayout.LayoutParams.MATCH_PARENT){childSpecMode=View.MeasureSpec.EXACTLY;childSpecSize=maxAvailable;}else if(childSize==RelativeLayout.LayoutParams.WRAP_CONTENT){if(maxAvailable>=0){childSpecMode=View.MeasureSpec.AT_MOST;childSpecSize=maxAvailable;}else{childSpecMode=View.MeasureSpec.UNSPECIFIED;childSpecSize=0;}}}return View.MeasureSpec.makeMeasureSpec(childSpecSize,childSpecMode);}},{key:'positionChildHorizontal',value:function positionChildHorizontal(child,params,myWidth,wrapContent){var layoutDirection=this.getLayoutDirection();var rules=params.getRules(layoutDirection);if(params.mLeft<0&¶ms.mRight>=0){params.mLeft=params.mRight-child.getMeasuredWidth();}else if(params.mLeft>=0&¶ms.mRight<0){params.mRight=params.mLeft+child.getMeasuredWidth();}else if(params.mLeft<0&¶ms.mRight<0){if(rules[RelativeLayout.CENTER_IN_PARENT]!=null||rules[RelativeLayout.CENTER_HORIZONTAL]!=null){if(!wrapContent){RelativeLayout.centerHorizontal(child,params,myWidth);}else{params.mLeft=this.mPaddingLeft+params.leftMargin;params.mRight=params.mLeft+child.getMeasuredWidth();}return true;}else{if(this.isLayoutRtl()){params.mRight=myWidth-this.mPaddingRight-params.rightMargin;params.mLeft=params.mRight-child.getMeasuredWidth();}else{params.mLeft=this.mPaddingLeft+params.leftMargin;params.mRight=params.mLeft+child.getMeasuredWidth();}}}return rules[RelativeLayout.ALIGN_PARENT_END]!=null;}},{key:'positionChildVertical',value:function positionChildVertical(child,params,myHeight,wrapContent){var rules=params.getRules();if(params.mTop<0&¶ms.mBottom>=0){params.mTop=params.mBottom-child.getMeasuredHeight();}else if(params.mTop>=0&¶ms.mBottom<0){params.mBottom=params.mTop+child.getMeasuredHeight();}else if(params.mTop<0&¶ms.mBottom<0){if(rules[RelativeLayout.CENTER_IN_PARENT]!=null||rules[RelativeLayout.CENTER_VERTICAL]!=null){if(!wrapContent){RelativeLayout.centerVertical(child,params,myHeight);}else{params.mTop=this.mPaddingTop+params.topMargin;params.mBottom=params.mTop+child.getMeasuredHeight();}return true;}else{params.mTop=this.mPaddingTop+params.topMargin;params.mBottom=params.mTop+child.getMeasuredHeight();}}return rules[RelativeLayout.ALIGN_PARENT_BOTTOM]!=null;}},{key:'applyHorizontalSizeRules',value:function applyHorizontalSizeRules(childParams,myWidth,rules){var anchorParams=void 0;childParams.mLeft=-1;childParams.mRight=-1;anchorParams=this.getRelatedViewParams(rules,RelativeLayout.LEFT_OF);if(anchorParams!=null){childParams.mRight=anchorParams.mLeft-(anchorParams.leftMargin+childParams.rightMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.LEFT_OF]!=null){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.RIGHT_OF);if(anchorParams!=null){childParams.mLeft=anchorParams.mRight+(anchorParams.rightMargin+childParams.leftMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.RIGHT_OF]!=null){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_LEFT);if(anchorParams!=null){childParams.mLeft=anchorParams.mLeft+childParams.leftMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_LEFT]!=null){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_RIGHT);if(anchorParams!=null){childParams.mRight=anchorParams.mRight-childParams.rightMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_RIGHT]!=null){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}if(null!=rules[RelativeLayout.ALIGN_PARENT_LEFT]){childParams.mLeft=this.mPaddingLeft+childParams.leftMargin;}if(null!=rules[RelativeLayout.ALIGN_PARENT_RIGHT]){if(myWidth>=0){childParams.mRight=myWidth-this.mPaddingRight-childParams.rightMargin;}}}},{key:'applyVerticalSizeRules',value:function applyVerticalSizeRules(childParams,myHeight){var rules=childParams.getRules();var anchorParams=void 0;childParams.mTop=-1;childParams.mBottom=-1;anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ABOVE);if(anchorParams!=null){childParams.mBottom=anchorParams.mTop-(anchorParams.topMargin+childParams.bottomMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.ABOVE]!=null){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.BELOW);if(anchorParams!=null){childParams.mTop=anchorParams.mBottom+(anchorParams.bottomMargin+childParams.topMargin);}else if(childParams.alignWithParent&&rules[RelativeLayout.BELOW]!=null){childParams.mTop=this.mPaddingTop+childParams.topMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_TOP);if(anchorParams!=null){childParams.mTop=anchorParams.mTop+childParams.topMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_TOP]!=null){childParams.mTop=this.mPaddingTop+childParams.topMargin;}anchorParams=this.getRelatedViewParams(rules,RelativeLayout.ALIGN_BOTTOM);if(anchorParams!=null){childParams.mBottom=anchorParams.mBottom-childParams.bottomMargin;}else if(childParams.alignWithParent&&rules[RelativeLayout.ALIGN_BOTTOM]!=null){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}if(null!=rules[RelativeLayout.ALIGN_PARENT_TOP]){childParams.mTop=this.mPaddingTop+childParams.topMargin;}if(null!=rules[RelativeLayout.ALIGN_PARENT_BOTTOM]){if(myHeight>=0){childParams.mBottom=myHeight-this.mPaddingBottom-childParams.bottomMargin;}}if(rules[RelativeLayout.ALIGN_BASELINE]!=null){this.mHasBaselineAlignedChild=true;}}},{key:'getRelatedView',value:function getRelatedView(rules,relation){var id=rules[relation];if(id!=null){var node=this.mGraph.mKeyNodes.get(id);if(node==null)return null;var v=node.view;while(v.getVisibility()==View.GONE){rules=v.getLayoutParams().getRules(v.getLayoutDirection());node=this.mGraph.mKeyNodes.get(rules[relation]);if(node==null)return null;v=node.view;}return v;}return null;}},{key:'getRelatedViewParams',value:function getRelatedViewParams(rules,relation){var v=this.getRelatedView(rules,relation);if(v!=null){var params=v.getLayoutParams();if(params instanceof RelativeLayout.LayoutParams){return v.getLayoutParams();}}return null;}},{key:'getRelatedViewBaseline',value:function getRelatedViewBaseline(rules,relation){var v=this.getRelatedView(rules,relation);if(v!=null){return v.getBaseline();}return-1;}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var count=this.getChildCount();for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:RelativeLayout.TRUE;this.mRules[verb]=anchor;this.mInitialRules[verb]=anchor;this.mRulesChanged=true;}},{key:'removeRule',value:function removeRule(verb){this.mRules[verb]=null;this.mInitialRules[verb]=null;this.mRulesChanged=true;}},{key:'hasRelativeRules',value:function hasRelativeRules(){return this.mInitialRules[RelativeLayout.START_OF]!=null||this.mInitialRules[RelativeLayout.END_OF]!=null||this.mInitialRules[RelativeLayout.ALIGN_START]!=null||this.mInitialRules[RelativeLayout.ALIGN_END]!=null||this.mInitialRules[RelativeLayout.ALIGN_PARENT_START]!=null||this.mInitialRules[RelativeLayout.ALIGN_PARENT_END]!=null;}},{key:'resolveRules',value:function resolveRules(layoutDirection){var isLayoutRtl=layoutDirection==View.LAYOUT_DIRECTION_RTL;System.arraycopy(this.mInitialRules,RelativeLayout.LEFT_OF,this.mRules,RelativeLayout.LEFT_OF,RelativeLayout.VERB_COUNT);if(this.mIsRtlCompatibilityMode){if(this.mRules[RelativeLayout.ALIGN_START]!=null){if(this.mRules[RelativeLayout.ALIGN_LEFT]==null){this.mRules[RelativeLayout.ALIGN_LEFT]=this.mRules[RelativeLayout.ALIGN_START];}this.mRules[RelativeLayout.ALIGN_START]=null;}if(this.mRules[RelativeLayout.ALIGN_END]!=null){if(this.mRules[RelativeLayout.ALIGN_RIGHT]==null){this.mRules[RelativeLayout.ALIGN_RIGHT]=this.mRules[RelativeLayout.ALIGN_END];}this.mRules[RelativeLayout.ALIGN_END]=null;}if(this.mRules[RelativeLayout.START_OF]!=null){if(this.mRules[RelativeLayout.LEFT_OF]==null){this.mRules[RelativeLayout.LEFT_OF]=this.mRules[RelativeLayout.START_OF];}this.mRules[RelativeLayout.START_OF]=null;}if(this.mRules[RelativeLayout.END_OF]!=null){if(this.mRules[RelativeLayout.RIGHT_OF]==null){this.mRules[RelativeLayout.RIGHT_OF]=this.mRules[RelativeLayout.END_OF];}this.mRules[RelativeLayout.END_OF]=null;}if(this.mRules[RelativeLayout.ALIGN_PARENT_START]!=null){if(this.mRules[RelativeLayout.ALIGN_PARENT_LEFT]==null){this.mRules[RelativeLayout.ALIGN_PARENT_LEFT]=this.mRules[RelativeLayout.ALIGN_PARENT_START];}this.mRules[RelativeLayout.ALIGN_PARENT_START]=null;}if(this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]==null){if(this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]==null){this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]=this.mRules[RelativeLayout.ALIGN_PARENT_END];}this.mRules[RelativeLayout.ALIGN_PARENT_END]=null;}}else{if((this.mRules[RelativeLayout.ALIGN_START]!=null||this.mRules[RelativeLayout.ALIGN_END]!=null)&&(this.mRules[RelativeLayout.ALIGN_LEFT]!=null||this.mRules[RelativeLayout.ALIGN_RIGHT]!=null)){this.mRules[RelativeLayout.ALIGN_LEFT]=null;this.mRules[RelativeLayout.ALIGN_RIGHT]=null;}if(this.mRules[RelativeLayout.ALIGN_START]!=null){this.mRules[isLayoutRtl?RelativeLayout.ALIGN_RIGHT:RelativeLayout.ALIGN_LEFT]=this.mRules[RelativeLayout.ALIGN_START];this.mRules[RelativeLayout.ALIGN_START]=null;}if(this.mRules[RelativeLayout.ALIGN_END]!=null){this.mRules[isLayoutRtl?RelativeLayout.ALIGN_LEFT:RelativeLayout.ALIGN_RIGHT]=this.mRules[RelativeLayout.ALIGN_END];this.mRules[RelativeLayout.ALIGN_END]=null;}if((this.mRules[RelativeLayout.START_OF]!=null||this.mRules[RelativeLayout.END_OF]!=null)&&(this.mRules[RelativeLayout.LEFT_OF]!=null||this.mRules[RelativeLayout.RIGHT_OF]!=null)){this.mRules[RelativeLayout.LEFT_OF]=null;this.mRules[RelativeLayout.RIGHT_OF]=null;}if(this.mRules[RelativeLayout.START_OF]!=null){this.mRules[isLayoutRtl?RelativeLayout.RIGHT_OF:RelativeLayout.LEFT_OF]=this.mRules[RelativeLayout.START_OF];this.mRules[RelativeLayout.START_OF]=null;}if(this.mRules[RelativeLayout.END_OF]!=null){this.mRules[isLayoutRtl?RelativeLayout.LEFT_OF:RelativeLayout.RIGHT_OF]=this.mRules[RelativeLayout.END_OF];this.mRules[RelativeLayout.END_OF]=null;}if((this.mRules[RelativeLayout.ALIGN_PARENT_START]!=null||this.mRules[RelativeLayout.ALIGN_PARENT_END]!=null)&&(this.mRules[RelativeLayout.ALIGN_PARENT_LEFT]!=null||this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]!=null)){this.mRules[RelativeLayout.ALIGN_PARENT_LEFT]=null;this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]=null;}if(this.mRules[RelativeLayout.ALIGN_PARENT_START]!=null){this.mRules[isLayoutRtl?RelativeLayout.ALIGN_PARENT_RIGHT:RelativeLayout.ALIGN_PARENT_LEFT]=this.mRules[RelativeLayout.ALIGN_PARENT_START];this.mRules[RelativeLayout.ALIGN_PARENT_START]=null;}if(this.mRules[RelativeLayout.ALIGN_PARENT_END]!=null){this.mRules[isLayoutRtl?RelativeLayout.ALIGN_PARENT_LEFT:RelativeLayout.ALIGN_PARENT_RIGHT]=this.mRules[RelativeLayout.ALIGN_PARENT_END];this.mRules[RelativeLayout.ALIGN_PARENT_END]=null;}}this.mRulesChanged=false;}},{key:'getRules',value:function getRules(layoutDirection){if(layoutDirection!=null){if(this.hasRelativeRules()&&(this.mRulesChanged||layoutDirection!=this.getLayoutDirection())){this.resolveRules(layoutDirection);if(layoutDirection!=this.getLayoutDirection()){this.setLayoutDirection(layoutDirection);}}}return this.mRules;}},{key:'resolveLayoutDirection',value:function resolveLayoutDirection(layoutDirection){var isLayoutRtl=this.isLayoutRtl();if(isLayoutRtl){if(this.mStart!=LayoutParams.DEFAULT_MARGIN_RELATIVE)this.mRight=this.mStart;if(this.mEnd!=LayoutParams.DEFAULT_MARGIN_RELATIVE)this.mLeft=this.mEnd;}else{if(this.mStart!=LayoutParams.DEFAULT_MARGIN_RELATIVE)this.mLeft=this.mStart;if(this.mEnd!=LayoutParams.DEFAULT_MARGIN_RELATIVE)this.mRight=this.mEnd;}if(this.hasRelativeRules()&&layoutDirection!=this.getLayoutDirection()){this.resolveRules(layoutDirection);}_get2(LayoutParams.prototype.__proto__||Object.getPrototypeOf(LayoutParams.prototype),'resolveLayoutDirection',this).call(this,layoutDirection);}}]);return LayoutParams;}(ViewGroup.MarginLayoutParams);RelativeLayout.LayoutParams=LayoutParams;var DependencyGraph=function(){function DependencyGraph(){_classCallCheck(this,DependencyGraph);this.mNodes=new ArrayList();this.mKeyNodes=new SparseMap();this.mRoots=new ArrayDeque();}_createClass(DependencyGraph,[{key:'clear',value:function clear(){var nodes=this.mNodes;var count=nodes.size();for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:android.R.attr.editTextStyle;_classCallCheck(this,EditText);var _this123=_possibleConstructorReturn(this,(EditText.__proto__||Object.getPrototypeOf(EditText)).call(this,context,bindElement,defStyle));_this123.mInputType=InputType.TYPE_NULL;_this123.mForceDisableDraw=false;_this123.mMaxLength=Integer.MAX_VALUE;var a=context.obtainStyledAttributes(bindElement,defStyle);var inputTypeS=a.getAttrValue("inputType");if(inputTypeS){_this123._setInputType(inputTypeS);}_this123.mMaxLength=a.getInteger('maxLength',_this123.mMaxLength);return _this123;}_createClass(EditText,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'createClassAttrBinder',this).call(this).set('inputType',{setter:function setter(v,value,attrBinder){if(Number.isInteger(Number.parseInt(value))){v.setInputType(Number.parseInt(value));}else{v._setInputType(value+'');}},getter:function getter(v){return v.getInputType();}}).set('maxLength',{setter:function setter(v,value,attrBinder){v.mMaxLength=attrBinder.parseInt(value,v.mMaxLength);},getter:function getter(v){return v.mMaxLength;}});}},{key:'initBindElement',value:function initBindElement(bindElement){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'initBindElement',this).call(this,bindElement);this.switchToMultiLineInputElement();}},{key:'onInputValueChange',value:function onInputValueChange(e){var text=this.inputElement.value;var filterText='';for(var i=0,length=text.length;i0){_this124.setForceDisableDrawText(true);}_this124.onInputElementFocusChanged(true);};inputElement.oninput=function(e){return _this124.onInputValueChange(e);};inputElement.removeEventListener('textInput',function(e){return _this124.onDomTextInput(e);});inputElement.addEventListener('textInput',function(e){return _this124.onDomTextInput(e);});if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(inputElement);}this.inputElement=inputElement;}},{key:'switchToSingleLineInputElement',value:function switchToSingleLineInputElement(){if(!this.mSingleLineInputElement){this.mSingleLineInputElement=document.createElement('input');this.mSingleLineInputElement.style.position='absolute';this.mSingleLineInputElement.style['webkitAppearance']='none';this.mSingleLineInputElement.style.borderRadius='0';this.mSingleLineInputElement.style.overflow='auto';this.mSingleLineInputElement.style.background='transparent';this.mSingleLineInputElement.style.fontFamily=Canvas.getMeasureTextFontFamily();}this.switchToInputElement(this.mSingleLineInputElement);}},{key:'switchToMultiLineInputElement',value:function switchToMultiLineInputElement(){if(!this.mMultiLineInputElement){this.mMultiLineInputElement=document.createElement('textarea');this.mMultiLineInputElement.style.position='absolute';this.mMultiLineInputElement.style['webkitAppearance']='none';this.mMultiLineInputElement.style['resize']='none';this.mMultiLineInputElement.style.borderRadius='0';this.mMultiLineInputElement.style.overflow='auto';this.mMultiLineInputElement.style.background='transparent';this.mMultiLineInputElement.style.boxSizing='border-box';this.mMultiLineInputElement.style.fontFamily=Canvas.getMeasureTextFontFamily();}this.switchToInputElement(this.mMultiLineInputElement);}},{key:'tryShowInputElement',value:function tryShowInputElement(){if(!this.isInputElementShowed()){this.inputElement.value=this.getText().toString();this.bindElement.appendChild(this.inputElement);this.inputElement.focus();if(this.getText().length>0){this.setForceDisableDrawText(true);}this.syncTextBoundInfoToInputElement();}}},{key:'tryDismissInputElement',value:function tryDismissInputElement(){try{if(this.inputElement.parentNode)this.bindElement.removeChild(this.inputElement);}catch(e){}this.setForceDisableDrawText(false);}},{key:'onInputElementFocusChanged',value:function onInputElementFocusChanged(focused){}},{key:'isInputElementShowed',value:function isInputElementShowed(){return this.inputElement.parentElement!=null&&this.inputElement.style.opacity!='0';}},{key:'performClick',value:function performClick(event){this.tryShowInputElement();return _get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'performClick',this).call(this,event);}},{key:'onFocusChanged',value:function onFocusChanged(focused,direction,previouslyFocusedRect){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'onFocusChanged',this).call(this,focused,direction,previouslyFocusedRect);if(focused){this.tryShowInputElement();}else{this.tryDismissInputElement();}}},{key:'setForceDisableDrawText',value:function setForceDisableDrawText(disable){if(this.mForceDisableDraw==disable)return;this.mForceDisableDraw=disable;if(disable){this.mSkipDrawText=true;}else{this.mSkipDrawText=false;}this.invalidate();}},{key:'updateTextColors',value:function updateTextColors(){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'updateTextColors',this).call(this);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onTouchEvent',value:function onTouchEvent(event){var superResult=_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'onTouchEvent',this).call(this,event);if(this.isInputElementShowed()){event[android.view.ViewRootImpl.ContinueEventToDom]=true;if(this.inputElement.scrollHeight>this.inputElement.offsetHeight||this.inputElement.scrollWidth>this.inputElement.offsetWidth){this.getParent().requestDisallowInterceptTouchEvent(true);}return true;}return superResult;}},{key:'filterKeyEvent',value:function filterKeyEvent(event){var keyCode=event.getKeyCode();if(keyCode==android.view.KeyEvent.KEYCODE_Backspace||keyCode==android.view.KeyEvent.KEYCODE_Del||event.isCtrlPressed()||event.isAltPressed()||event.isMetaPressed()){return false;}if(keyCode==android.view.KeyEvent.KEYCODE_ENTER&&this.isSingleLine()){return true;}if(event.mIsTypingKey){if(this.getText().length>=this.mMaxLength){return true;}return this.filterKeyCodeOnInput(keyCode);}return false;}},{key:'filterKeyCodeByInputType',value:function filterKeyCodeByInputType(keyCode){var filter=false;var inputType=this.mInputType;var typeClass=inputType&InputType.TYPE_MASK_CLASS;if(typeClass===InputType.TYPE_CLASS_NUMBER){filter=InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode)===-1;if((inputType&InputType.TYPE_NUMBER_FLAG_SIGNED)===InputType.TYPE_NUMBER_FLAG_SIGNED){filter=filter&&keyCode!==android.view.KeyEvent.KEYCODE_Minus;}if((inputType&InputType.TYPE_NUMBER_FLAG_DECIMAL)===InputType.TYPE_NUMBER_FLAG_DECIMAL){filter=filter&&keyCode!==android.view.KeyEvent.KEYCODE_Period;}}else if(typeClass===InputType.TYPE_CLASS_PHONE){filter=InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode)===-1;}return filter;}},{key:'filterKeyCodeOnInput',value:function filterKeyCodeOnInput(keyCode){var filter=false;var inputType=this.mInputType;var typeClass=inputType&InputType.TYPE_MASK_CLASS;if(typeClass===InputType.TYPE_CLASS_NUMBER){if((inputType&InputType.TYPE_NUMBER_FLAG_SIGNED)===InputType.TYPE_NUMBER_FLAG_SIGNED){if(keyCode===android.view.KeyEvent.KEYCODE_Minus&&this.getText().length>0){filter=true;}}if((inputType&InputType.TYPE_NUMBER_FLAG_DECIMAL)===InputType.TYPE_NUMBER_FLAG_DECIMAL){if(keyCode===android.view.KeyEvent.KEYCODE_Period&&(this.getText().includes('.')||this.getText().length===0)){filter=true;}}}return filter||this.filterKeyCodeByInputType(keyCode);}},{key:'checkFilterKeyEventToDom',value:function checkFilterKeyEventToDom(event){if(this.isInputElementShowed()){if(this.filterKeyEvent(event)){event[android.view.ViewRootImpl.ContinueEventToDom]=false;}else{event[android.view.ViewRootImpl.ContinueEventToDom]=true;}return true;}return false;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){var filter=this.checkFilterKeyEventToDom(event);return _get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'onKeyDown',this).call(this,keyCode,event)||filter;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){var filter=this.checkFilterKeyEventToDom(event);return _get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'onKeyUp',this).call(this,keyCode,event)||filter;}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if(this.isInputElementShowed()){immediately=true;}_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'requestSyncBoundToElement',this).call(this,immediately);}},{key:'setRawTextSize',value:function setRawTextSize(size){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'setRawTextSize',this).call(this,size);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onTextChanged',value:function onTextChanged(text,start,lengthBefore,lengthAfter){if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'setGravity',value:function setGravity(gravity){_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'setGravity',this).call(this,gravity);if(this.isInputElementShowed()){this.syncTextBoundInfoToInputElement();}}},{key:'setSingleLine',value:function setSingleLine(){var singleLine=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;if(singleLine){this.switchToSingleLineInputElement();}else{this.switchToMultiLineInputElement();}_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'setSingleLine',this).call(this,singleLine);}},{key:'_setInputType',value:function _setInputType(value){switch(value+''){case'none':this.setInputType(InputType.TYPE_NULL);break;case'text':this.setInputType(InputType.TYPE_CLASS_TEXT);break;case'textUri':this.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_URI);break;case'textEmailAddress':this.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);break;case'textPassword':this.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);break;case'textVisiblePassword':this.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);break;case'number':this.setInputType(InputType.TYPE_CLASS_NUMBER);break;case'numberSigned':this.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_SIGNED);break;case'numberDecimal':this.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);break;case'numberPassword':this.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_VARIATION_PASSWORD);break;case'phone':this.setInputType(InputType.TYPE_CLASS_PHONE);break;case'datetime':this.setInputType(InputType.TYPE_CLASS_DATETIME);break;case'date':this.setInputType(InputType.TYPE_CLASS_DATETIME|InputType.TYPE_DATETIME_VARIATION_DATE);break;case'time':this.setInputType(InputType.TYPE_CLASS_DATETIME|InputType.TYPE_DATETIME_VARIATION_TIME);break;}}},{key:'setInputType',value:function setInputType(type){this.mInputType=type;var typeClass=type&InputType.TYPE_MASK_CLASS;this.inputElement.style['webkitTextSecurity']='';this.setTransformationMethod(null);switch(typeClass){case InputType.TYPE_NULL:this.setSingleLine(false);this.inputElement.removeAttribute('type');break;case InputType.TYPE_CLASS_TEXT:if((type&InputType.TYPE_TEXT_VARIATION_URI)===InputType.TYPE_TEXT_VARIATION_URI){this.setSingleLine(true);this.inputElement.setAttribute('type','url');}else if((type&InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)===InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS){this.setSingleLine(true);this.inputElement.setAttribute('type','email');}else if((type&InputType.TYPE_TEXT_VARIATION_PASSWORD)===InputType.TYPE_TEXT_VARIATION_PASSWORD){this.setSingleLine(true);this.inputElement.setAttribute('type','password');this.setTransformationMethod(PasswordTransformationMethod.getInstance());}else if((type&InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)===InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD){this.setSingleLine(true);this.inputElement.setAttribute('type','email');}else{this.setSingleLine(false);this.inputElement.removeAttribute('type');}break;case InputType.TYPE_CLASS_NUMBER:this.setSingleLine(true);this.inputElement.setAttribute('type','number');if((type&InputType.TYPE_NUMBER_VARIATION_PASSWORD)===InputType.TYPE_NUMBER_VARIATION_PASSWORD){this.inputElement.style['webkitTextSecurity']='disc';this.setTransformationMethod(PasswordTransformationMethod.getInstance());}break;case InputType.TYPE_CLASS_PHONE:this.setSingleLine(true);this.inputElement.setAttribute('type','tel');break;case InputType.TYPE_CLASS_DATETIME:this.setSingleLine(true);if((type&InputType.TYPE_DATETIME_VARIATION_DATE)===InputType.TYPE_DATETIME_VARIATION_DATE){this.inputElement.setAttribute('type','date');}else if((type&InputType.TYPE_DATETIME_VARIATION_TIME)===InputType.TYPE_DATETIME_VARIATION_TIME){this.inputElement.setAttribute('type','time');}else{this.inputElement.setAttribute('type','datetime');}break;}}},{key:'getInputType',value:function getInputType(){return this.mInputType;}},{key:'syncTextBoundInfoToInputElement',value:function syncTextBoundInfoToInputElement(){var left=this.getLeft();var top=this.getTop();var right=this.getRight();var bottom=this.getBottom();var density=this.getResources().getDisplayMetrics().density;var maxHeight=this.getMaxHeight();if(maxHeight<=0||maxHeight>=Integer.MAX_VALUE){var maxLine=this.getMaxLines();if(maxLine>0&&maxLinetextHeight){maxHeight=textHeight;}var layout=this.mLayout;if(this.mHint!=null&&this.mText.length==0){layout=this.mHintLayout;}var height=layout?Math.min(layout.getLineTop(layout.getLineCount()),maxHeight):maxHeight;this.inputElement.style.height=height/density+1+'px';this.inputElement.style.top='';this.inputElement.style.bottom='';this.inputElement.style.transform=this.inputElement.style.webkitTransform='';var gravity=this.getGravity();switch(gravity&Gravity.VERTICAL_GRAVITY_MASK){case Gravity.TOP:this.inputElement.style.top=this.getCompoundPaddingTop()/density+'px';break;case Gravity.BOTTOM:this.inputElement.style.bottom=this.getCompoundPaddingBottom()/density+'px';break;default:this.inputElement.style.top='50%';this.inputElement.style.transform=this.inputElement.style.webkitTransform='translate(0, -50%)';break;}switch(gravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.LEFT:this.inputElement.style.textAlign='left';break;case Gravity.RIGHT:this.inputElement.style.textAlign='right';break;default:this.inputElement.style.textAlign='center';break;}var isIOS=Platform.isIOS;this.inputElement.style.left=this.getCompoundPaddingLeft()/density-(isIOS?3:0)+'px';this.inputElement.style.width=(right-left-this.getCompoundPaddingRight()-this.getCompoundPaddingLeft())/density+(isIOS?6:1)+'px';this.inputElement.style.lineHeight=this.getLineHeight()/density+'px';if(this.getLineCount()==1){this.inputElement.style.whiteSpace='nowrap';}else{this.inputElement.style.whiteSpace='';}var text=this.getText().toString();if(text!=this.inputElement.value)this.inputElement.value=text;this.inputElement.style.fontSize=this.getTextSize()/density+'px';this.inputElement.style.color=Color.toRGBAFunc(this.getCurrentTextColor());if(this.inputElement==this.mMultiLineInputElement){this.inputElement.style.padding=(this.getTextSize()/density/5).toFixed(1)+'px 0px 0px 0px';}else{this.inputElement.style.padding='0px';}}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return true;}},{key:'setEllipsize',value:function setEllipsize(ellipsis){if(ellipsis==TextUtils.TruncateAt.MARQUEE){throw Error('new IllegalArgumentException("EditText cannot use the ellipsize mode " + "TextUtils.TruncateAt.MARQUEE")');}_get2(EditText.prototype.__proto__||Object.getPrototypeOf(EditText.prototype),'setEllipsize',this).call(this,ellipsis);}}]);return EditText;}(TextView);widget.EditText=EditText;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Matrix=android.graphics.Matrix;var RectF=android.graphics.RectF;var View=android.view.View;var Integer=java.lang.Integer;var NetDrawable=androidui.image.NetDrawable;var LayoutParams=android.view.ViewGroup.LayoutParams;var ImageView=function(_View2){_inherits(ImageView,_View2);function ImageView(context,bindElement,defStyle){_classCallCheck(this,ImageView);var _this125=_possibleConstructorReturn(this,(ImageView.__proto__||Object.getPrototypeOf(ImageView)).call(this,context,bindElement,defStyle));_this125.mHaveFrame=false;_this125.mAdjustViewBounds=false;_this125.mMaxWidth=Integer.MAX_VALUE;_this125.mMaxHeight=Integer.MAX_VALUE;_this125.mAlpha=255;_this125.mViewAlphaScale=256;_this125.mColorMod=false;_this125.mDrawable=null;_this125.mState=null;_this125.mMergeState=false;_this125.mLevel=0;_this125.mDrawableWidth=0;_this125.mDrawableHeight=0;_this125.mDrawMatrix=null;_this125.mTempSrc=new RectF();_this125.mTempDst=new RectF();_this125.mBaseline=-1;_this125.mBaselineAlignBottom=false;_this125.mAdjustViewBoundsCompat=false;_this125.initImageView();var a=context.obtainStyledAttributes(bindElement,defStyle);var d=a.getDrawable('src');if(d!=null){_this125.setImageDrawable(d);}_this125.mBaselineAlignBottom=a.getBoolean('baselineAlignBottom',false);_this125.mBaseline=a.getDimensionPixelSize('baseline',-1);_this125.setAdjustViewBounds(a.getBoolean('adjustViewBounds',false));_this125.setMaxWidth(a.getDimensionPixelSize('maxWidth',Integer.MAX_VALUE));_this125.setMaxHeight(a.getDimensionPixelSize('maxHeight',Integer.MAX_VALUE));var scaleType=ImageView.parseScaleType(a.getString('scaleType'),null);if(scaleType!=null){_this125.setScaleType(scaleType);}var alpha=a.getInt('drawableAlpha',255);if(alpha!=255){_this125.setAlpha(alpha);}_this125.mCropToPadding=a.getBoolean('cropToPadding',false);a.recycle();return _this125;}_createClass(ImageView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'createClassAttrBinder',this).call(this).set('src',{setter:function setter(v,value,attrBinder){var d=attrBinder.parseDrawable(value);if(d)v.setImageDrawable(d);else v.setImageURI(value);},getter:function getter(v){return v.mDrawable;}}).set('baselineAlignBottom',{setter:function setter(v,value,attrBinder){v.setBaselineAlignBottom(attrBinder.parseBoolean(value,v.mBaselineAlignBottom));},getter:function getter(v){return v.getBaselineAlignBottom();}}).set('baseline',{setter:function setter(v,value,attrBinder){v.setBaseline(attrBinder.parseNumberPixelSize(value,v.mBaseline));},getter:function getter(v){return v.mBaseline;}}).set('adjustViewBounds',{setter:function setter(v,value,attrBinder){v.setAdjustViewBounds(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.getAdjustViewBounds();}}).set('maxWidth',{setter:function setter(v,value,attrBinder){var baseValue=v.getParent()instanceof View?v.getParent().getWidth():0;v.setMaxWidth(attrBinder.parseNumberPixelSize(value,v.mMaxWidth,baseValue));},getter:function getter(v){return v.mMaxWidth;}}).set('maxHeight',{setter:function setter(v,value,attrBinder){var baseValue=v.getParent()instanceof View?v.getParent().getHeight():0;v.setMaxHeight(attrBinder.parseNumberPixelSize(value,v.mMaxHeight,baseValue));},getter:function getter(v){return v.mMaxHeight;}}).set('scaleType',{setter:function setter(v,value,attrBinder){if(typeof value==='number'){v.setScaleType(value);}else{v.setScaleType(ImageView.parseScaleType(value,v.mScaleType));}},getter:function getter(v){return v.mScaleType;}}).set('drawableAlpha',{setter:function setter(v,value,attrBinder){v.setImageAlpha(attrBinder.parseInt(value,v.mAlpha));},getter:function getter(v){return v.mAlpha;}}).set('cropToPadding',{setter:function setter(v,value,attrBinder){v.setCropToPadding(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.getCropToPadding();}});}},{key:'initImageView',value:function initImageView(){this.mMatrix=new Matrix();this.mScaleType=ImageView.ScaleType.FIT_CENTER;}},{key:'verifyDrawable',value:function verifyDrawable(dr){return this.mDrawable==dr||_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'verifyDrawable',this).call(this,dr);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mDrawable!=null)this.mDrawable.jumpToCurrentState();}},{key:'invalidateDrawable',value:function invalidateDrawable(dr){if(dr==this.mDrawable){this.invalidate();}else{_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'invalidateDrawable',this).call(this,dr);}}},{key:'drawableSizeChange',value:function drawableSizeChange(who){if(who==this.mDrawable){this.resizeFromDrawable();}else{_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'drawableSizeChange',this).call(this,who);}}},{key:'hasOverlappingRendering',value:function hasOverlappingRendering(){return this.getBackground()!=null&&this.getBackground().getCurrent()!=null;}},{key:'getAdjustViewBounds',value:function getAdjustViewBounds(){return this.mAdjustViewBounds;}},{key:'setAdjustViewBounds',value:function setAdjustViewBounds(adjustViewBounds){this.mAdjustViewBounds=adjustViewBounds;if(adjustViewBounds){this.setScaleType(ImageView.ScaleType.FIT_CENTER);}}},{key:'getMaxWidth',value:function getMaxWidth(){return this.mMaxWidth;}},{key:'setMaxWidth',value:function setMaxWidth(maxWidth){this.mMaxWidth=maxWidth;}},{key:'getMaxHeight',value:function getMaxHeight(){return this.mMaxHeight;}},{key:'setMaxHeight',value:function setMaxHeight(maxHeight){this.mMaxHeight=maxHeight;}},{key:'getDrawable',value:function getDrawable(){return this.mDrawable;}},{key:'setImageURI',value:function setImageURI(uri){if(this.mUri!=uri){if(this.mDrawable instanceof NetDrawable){this.mUri=uri;this.mDrawable.setURL(uri);this.invalidate();}else{this.updateDrawable(null);this.mUri=uri;var oldWidth=this.mDrawableWidth;var oldHeight=this.mDrawableHeight;this.resolveUri();if(oldWidth!=this.mDrawableWidth||oldHeight!=this.mDrawableHeight){this.requestLayout();}this.invalidate();}}}},{key:'setImageDrawable',value:function setImageDrawable(drawable){if(this.mDrawable!=drawable){this.mUri=null;var oldWidth=this.mDrawableWidth;var oldHeight=this.mDrawableHeight;this.updateDrawable(drawable);if(oldWidth!=this.mDrawableWidth||oldHeight!=this.mDrawableHeight){this.requestLayout();}this.invalidate();}}},{key:'setImageState',value:function setImageState(state,merge){this.mState=state;this.mMergeState=merge;if(this.mDrawable!=null){this.refreshDrawableState();this.resizeFromDrawable();}}},{key:'setSelected',value:function setSelected(selected){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'setSelected',this).call(this,selected);this.resizeFromDrawable();}},{key:'setImageLevel',value:function setImageLevel(level){this.mLevel=level;if(this.mDrawable!=null){this.mDrawable.setLevel(level);this.resizeFromDrawable();}}},{key:'setScaleType',value:function setScaleType(scaleType){if(scaleType==null){throw Error('new NullPointerException()');}if(this.mScaleType!=scaleType){this.mScaleType=scaleType;this.setWillNotCacheDrawing(this.mScaleType==ImageView.ScaleType.CENTER);this.requestLayout();this.invalidate();}}},{key:'getScaleType',value:function getScaleType(){return this.mScaleType;}},{key:'getImageMatrix',value:function getImageMatrix(){if(this.mDrawMatrix==null){return new Matrix(Matrix.IDENTITY_MATRIX);}return this.mDrawMatrix;}},{key:'setImageMatrix',value:function setImageMatrix(matrix){if(matrix!=null&&matrix.isIdentity()){matrix=null;}if(matrix==null&&!this.mMatrix.isIdentity()||matrix!=null&&!this.mMatrix.equals(matrix)){this.mMatrix.set(matrix);this.configureBounds();this.invalidate();}}},{key:'getCropToPadding',value:function getCropToPadding(){return this.mCropToPadding;}},{key:'setCropToPadding',value:function setCropToPadding(cropToPadding){if(this.mCropToPadding!=cropToPadding){this.mCropToPadding=cropToPadding;this.requestLayout();this.invalidate();}}},{key:'resolveUri',value:function resolveUri(){if(this.mDrawable!=null){return;}var d=null;if(this.mUri!=null){d=new androidui.image.NetDrawable(this.mUri);}else{return;}this.updateDrawable(d);}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){if(this.mState==null){return _get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'onCreateDrawableState',this).call(this,extraSpace);}else if(!this.mMergeState){return this.mState;}else{return ImageView.mergeDrawableStates(_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'onCreateDrawableState',this).call(this,extraSpace+this.mState.length),this.mState);}}},{key:'updateDrawable',value:function updateDrawable(d){if(this.mDrawable!=null){this.mDrawable.setCallback(null);this.unscheduleDrawable(this.mDrawable);}this.mDrawable=d;if(d!=null){d.setCallback(this);if(d.isStateful()){d.setState(this.getDrawableState());}d.setLevel(this.mLevel);d.setVisible(this.getVisibility()==ImageView.VISIBLE,true);this.mDrawableWidth=d.getIntrinsicWidth();this.mDrawableHeight=d.getIntrinsicHeight();this.applyColorMod();this.configureBounds();}else{this.mDrawableWidth=this.mDrawableHeight=-1;}}},{key:'resizeFromDrawable',value:function resizeFromDrawable(){var d=this.mDrawable;if(d!=null){var w=d.getIntrinsicWidth();if(w<0)w=this.mDrawableWidth;var h=d.getIntrinsicHeight();if(h<0)h=this.mDrawableHeight;if(w!=this.mDrawableWidth||h!=this.mDrawableHeight){this.mDrawableWidth=w;this.mDrawableHeight=h;if(this.mLayoutParams!=null&&this.mLayoutParams.width!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.width!=LayoutParams.MATCH_PARENT&&this.mLayoutParams.height!=LayoutParams.WRAP_CONTENT&&this.mLayoutParams.height!=LayoutParams.MATCH_PARENT){this.configureBounds();}else{this.requestLayout();}this.invalidate();return true;}}return false;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){this.resolveUri();var w=void 0;var h=void 0;var desiredAspect=0.0;var resizeWidth=false;var resizeHeight=false;var widthSpecMode=View.MeasureSpec.getMode(widthMeasureSpec);var heightSpecMode=View.MeasureSpec.getMode(heightMeasureSpec);if(this.mDrawable==null){this.mDrawableWidth=-1;this.mDrawableHeight=-1;w=h=0;}else{w=this.mDrawableWidth;h=this.mDrawableHeight;if(w<=0)w=1;if(h<=0)h=1;if(this.mAdjustViewBounds){resizeWidth=widthSpecMode!=View.MeasureSpec.EXACTLY;resizeHeight=heightSpecMode!=View.MeasureSpec.EXACTLY;desiredAspect=w/h;}}var pleft=this.mPaddingLeft;var pright=this.mPaddingRight;var ptop=this.mPaddingTop;var pbottom=this.mPaddingBottom;var widthSize=void 0;var heightSize=void 0;if(resizeWidth||resizeHeight){widthSize=this.resolveAdjustedSize(w+pleft+pright,this.mMaxWidth,widthMeasureSpec);heightSize=this.resolveAdjustedSize(h+ptop+pbottom,this.mMaxHeight,heightMeasureSpec);if(desiredAspect!=0.0){var actualAspect=(widthSize-pleft-pright)/(heightSize-ptop-pbottom);if(Math.abs(actualAspect-desiredAspect)>0.0000001){var done=false;if(resizeWidth){var newWidth=Math.floor(desiredAspect*(heightSize-ptop-pbottom))+pleft+pright;if(!resizeHeight&&!this.mAdjustViewBoundsCompat){widthSize=this.resolveAdjustedSize(newWidth,this.mMaxWidth,widthMeasureSpec);}if(newWidth<=widthSize){widthSize=newWidth;done=true;}}if(!done&&resizeHeight){var newHeight=Math.floor((widthSize-pleft-pright)/desiredAspect)+ptop+pbottom;if(!resizeWidth&&!this.mAdjustViewBoundsCompat){heightSize=this.resolveAdjustedSize(newHeight,this.mMaxHeight,heightMeasureSpec);}if(newHeight<=heightSize){heightSize=newHeight;}}}}}else{w+=pleft+pright;h+=ptop+pbottom;w=Math.max(w,this.getSuggestedMinimumWidth());h=Math.max(h,this.getSuggestedMinimumHeight());widthSize=ImageView.resolveSizeAndState(w,widthMeasureSpec,0);heightSize=ImageView.resolveSizeAndState(h,heightMeasureSpec,0);}this.setMeasuredDimension(widthSize,heightSize);}},{key:'resolveAdjustedSize',value:function resolveAdjustedSize(desiredSize,maxSize,measureSpec){var result=desiredSize;var specMode=View.MeasureSpec.getMode(measureSpec);var specSize=View.MeasureSpec.getSize(measureSpec);switch(specMode){case View.MeasureSpec.UNSPECIFIED:result=Math.min(desiredSize,maxSize);break;case View.MeasureSpec.AT_MOST:result=Math.min(Math.min(desiredSize,specSize),maxSize);break;case View.MeasureSpec.EXACTLY:result=specSize;break;}return result;}},{key:'setFrame',value:function setFrame(l,t,r,b){var changed=_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'setFrame',this).call(this,l,t,r,b);this.mHaveFrame=true;this.configureBounds();return changed;}},{key:'configureBounds',value:function configureBounds(){if(this.mDrawable==null||!this.mHaveFrame){return;}var dwidth=this.mDrawableWidth;var dheight=this.mDrawableHeight;var vwidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;var vheight=this.getHeight()-this.mPaddingTop-this.mPaddingBottom;var fits=(dwidth<0||vwidth==dwidth)&&(dheight<0||vheight==dheight);if(dwidth<=0||dheight<=0||ImageView.ScaleType.FIT_XY==this.mScaleType){this.mDrawable.setBounds(0,0,vwidth,vheight);this.mDrawMatrix=null;}else{this.mDrawable.setBounds(0,0,dwidth,dheight);if(ImageView.ScaleType.MATRIX==this.mScaleType){if(this.mMatrix.isIdentity()){this.mDrawMatrix=null;}else{this.mDrawMatrix=this.mMatrix;}}else if(fits){this.mDrawMatrix=null;}else if(ImageView.ScaleType.CENTER==this.mScaleType){this.mDrawMatrix=this.mMatrix;this.mDrawMatrix.setTranslate(Math.floor((vwidth-dwidth)*0.5+0.5),Math.floor((vheight-dheight)*0.5+0.5));}else if(ImageView.ScaleType.CENTER_CROP==this.mScaleType){this.mDrawMatrix=this.mMatrix;var scale=void 0;var _dx5=0,_dy2=0;if(dwidth*vheight>vwidth*dheight){scale=vheight/dheight;_dx5=(vwidth-dwidth*scale)*0.5;}else{scale=vwidth/dwidth;_dy2=(vheight-dheight*scale)*0.5;}this.mDrawMatrix.setScale(scale,scale);this.mDrawMatrix.postTranslate(Math.floor(_dx5+0.5),Math.floor(_dy2+0.5));}else if(ImageView.ScaleType.CENTER_INSIDE==this.mScaleType){this.mDrawMatrix=this.mMatrix;var _scale2=void 0;var _dx6=void 0;var _dy3=void 0;if(dwidth<=vwidth&&dheight<=vheight){_scale2=1.0;}else{_scale2=Math.min(vwidth/dwidth,vheight/dheight);}_dx6=Math.floor((vwidth-dwidth*_scale2)*0.5+0.5);_dy3=Math.floor((vheight-dheight*_scale2)*0.5+0.5);this.mDrawMatrix.setScale(_scale2,_scale2);this.mDrawMatrix.postTranslate(_dx6,_dy3);}else{this.mTempSrc.set(0,0,dwidth,dheight);this.mTempDst.set(0,0,vwidth,vheight);this.mDrawMatrix=this.mMatrix;this.mDrawMatrix.setRectToRect(this.mTempSrc,this.mTempDst,ImageView.scaleTypeToScaleToFit(this.mScaleType));}}}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'drawableStateChanged',this).call(this);var d=this.mDrawable;if(d!=null&&d.isStateful()){d.setState(this.getDrawableState());}}},{key:'onDraw',value:function onDraw(canvas){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'onDraw',this).call(this,canvas);if(this.mDrawable==null){return;}if(this.mDrawableWidth==0||this.mDrawableHeight==0){return;}if(this.mDrawMatrix==null&&this.mPaddingTop==0&&this.mPaddingLeft==0){this.mDrawable.draw(canvas);}else{var saveCount=canvas.getSaveCount();canvas.save();if(this.mCropToPadding){var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);}canvas.translate(this.mPaddingLeft,this.mPaddingTop);if(this.mDrawMatrix!=null){canvas.concat(this.mDrawMatrix);}this.mDrawable.draw(canvas);canvas.restoreToCount(saveCount);}}},{key:'getBaseline',value:function getBaseline(){if(this.mBaselineAlignBottom){return this.getMeasuredHeight();}else{return this.mBaseline;}}},{key:'setBaseline',value:function setBaseline(baseline){if(this.mBaseline!=baseline){this.mBaseline=baseline;this.requestLayout();}}},{key:'setBaselineAlignBottom',value:function setBaselineAlignBottom(aligned){if(this.mBaselineAlignBottom!=aligned){this.mBaselineAlignBottom=aligned;this.requestLayout();}}},{key:'getBaselineAlignBottom',value:function getBaselineAlignBottom(){return this.mBaselineAlignBottom;}},{key:'getImageAlpha',value:function getImageAlpha(){return this.mAlpha;}},{key:'setImageAlpha',value:function setImageAlpha(alpha){alpha&=0xFF;if(this.mAlpha!=alpha){this.mAlpha=alpha;this.mColorMod=true;this.applyColorMod();this.invalidate();}}},{key:'applyColorMod',value:function applyColorMod(){if(this.mDrawable!=null&&this.mColorMod){this.mDrawable=this.mDrawable.mutate();this.mDrawable.setAlpha(this.mAlpha*this.mViewAlphaScale>>8);}}},{key:'setVisibility',value:function setVisibility(visibility){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'setVisibility',this).call(this,visibility);if(this.mDrawable!=null){this.mDrawable.setVisible(visibility==ImageView.VISIBLE,false);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'onAttachedToWindow',this).call(this);if(this.mDrawable!=null){this.mDrawable.setVisible(this.getVisibility()==ImageView.VISIBLE,false);}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(ImageView.prototype.__proto__||Object.getPrototypeOf(ImageView.prototype),'onDetachedFromWindow',this).call(this);if(this.mDrawable!=null){this.mDrawable.setVisible(false,false);}}}],[{key:'scaleTypeToScaleToFit',value:function scaleTypeToScaleToFit(st){return ImageView.sS2FArray[st-1];}},{key:'parseScaleType',value:function parseScaleType(s,defaultType){if(s==null)return defaultType;s=s.toLowerCase();if(s==='matrix'.toLowerCase())return ImageView.ScaleType.MATRIX;if(s==='fitXY'.toLowerCase())return ImageView.ScaleType.FIT_XY;if(s==='fitStart'.toLowerCase())return ImageView.ScaleType.FIT_START;if(s==='fitCenter'.toLowerCase())return ImageView.ScaleType.FIT_CENTER;if(s==='fitEnd'.toLowerCase())return ImageView.ScaleType.FIT_END;if(s==='center'.toLowerCase())return ImageView.ScaleType.CENTER;if(s==='centerCrop'.toLowerCase())return ImageView.ScaleType.CENTER_CROP;if(s==='centerInside'.toLowerCase())return ImageView.ScaleType.CENTER_INSIDE;return defaultType;}}]);return ImageView;}(View);ImageView.sS2FArray=[Matrix.ScaleToFit.FILL,Matrix.ScaleToFit.START,Matrix.ScaleToFit.CENTER,Matrix.ScaleToFit.END];widget.ImageView=ImageView;(function(ImageView){var ScaleType;(function(ScaleType){ScaleType[ScaleType["MATRIX"]=0]="MATRIX";ScaleType[ScaleType["FIT_XY"]=1]="FIT_XY";ScaleType[ScaleType["FIT_START"]=2]="FIT_START";ScaleType[ScaleType["FIT_CENTER"]=3]="FIT_CENTER";ScaleType[ScaleType["FIT_END"]=4]="FIT_END";ScaleType[ScaleType["CENTER"]=5]="CENTER";ScaleType[ScaleType["CENTER_CROP"]=6]="CENTER_CROP";ScaleType[ScaleType["CENTER_INSIDE"]=7]="CENTER_INSIDE";})(ScaleType=ImageView.ScaleType||(ImageView.ScaleType={}));})(ImageView=widget.ImageView||(widget.ImageView={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ImageButton=function(_widget$ImageView){_inherits(ImageButton,_widget$ImageView);function ImageButton(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.imageButtonStyle;_classCallCheck(this,ImageButton);return _possibleConstructorReturn(this,(ImageButton.__proto__||Object.getPrototypeOf(ImageButton)).call(this,context,bindElement,defStyle));}return ImageButton;}(widget.ImageView);widget.ImageButton=ImageButton;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var Trace=android.os.Trace;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var AbsListView=android.widget.AbsListView;var GridView=function(_AbsListView2){_inherits(GridView,_AbsListView2);function GridView(context,attrs){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.gridViewStyle;_classCallCheck(this,GridView);var _this127=_possibleConstructorReturn(this,(GridView.__proto__||Object.getPrototypeOf(GridView)).call(this,context,attrs,defStyle));_this127.mNumColumns=GridView.AUTO_FIT;_this127.mHorizontalSpacing=0;_this127.mRequestedHorizontalSpacing=0;_this127.mVerticalSpacing=0;_this127.mStretchMode=GridView.STRETCH_COLUMN_WIDTH;_this127.mColumnWidth=0;_this127.mRequestedColumnWidth=0;_this127.mRequestedNumColumns=0;_this127.mReferenceView=null;_this127.mReferenceViewInSelectedRow=null;_this127.mGravity=Gravity.LEFT;_this127.mTempRect=new Rect();var a=context.obtainStyledAttributes(attrs,defStyle);var hSpacing=a.getDimensionPixelOffset('horizontalSpacing',0);_this127.setHorizontalSpacing(hSpacing);var vSpacing=a.getDimensionPixelOffset('verticalSpacing',0);_this127.setVerticalSpacing(vSpacing);var stretchModeS=a.getAttrValue('stretchMode');if(stretchModeS){switch(stretchModeS){case"none":_this127.setStretchMode(GridView.NO_STRETCH);break;case"spacingWidth":_this127.setStretchMode(GridView.STRETCH_SPACING);break;case"columnWidth":_this127.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);break;case"spacingWidthUniform":_this127.setStretchMode(GridView.STRETCH_SPACING_UNIFORM);break;}}var columnWidth=a.getDimensionPixelOffset('columnWidth',-1);if(columnWidth>0){_this127.setColumnWidth(columnWidth);}var numColumns=a.getInt('numColumns',1);_this127.setNumColumns(numColumns);var gravityS=a.getAttrValue('gravity');if(gravityS){_this127.setGravity(Gravity.parseGravity(gravityS,_this127.mGravity));}a.recycle();return _this127;}_createClass(GridView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'createClassAttrBinder',this).call(this).set('horizontalSpacing',{setter:function setter(v,value,attrBinder){v.setHorizontalSpacing(attrBinder.parseNumberPixelOffset(value,0));},getter:function getter(v){return v.getHorizontalSpacing();}}).set('verticalSpacing',{setter:function setter(v,value,attrBinder){v.setVerticalSpacing(attrBinder.parseNumberPixelOffset(value,0));},getter:function getter(v){return v.getVerticalSpacing();}}).set('stretchMode',{setter:function setter(v,value,attrBinder){v.setStretchMode(attrBinder.parseEnum(value,new Map().set("none",GridView.NO_STRETCH).set("spacingWidth",GridView.STRETCH_SPACING).set("columnWidth",GridView.STRETCH_COLUMN_WIDTH).set("spacingWidthUniform",GridView.STRETCH_SPACING_UNIFORM),GridView.STRETCH_COLUMN_WIDTH));},getter:function getter(v){return v.getStretchMode();}}).set('columnWidth',{setter:function setter(v,value,attrBinder){var columnWidth=attrBinder.parseNumberPixelOffset(value,-1);if(columnWidth>0){this.setColumnWidth(columnWidth);}},getter:function getter(v){return v.getColumnWidth();}}).set('numColumns',{setter:function setter(v,value,attrBinder){v.setNumColumns(attrBinder.parseInt(value,1));},getter:function getter(v){return v.getNumColumns();}}).set('gravity',{setter:function setter(v,value,attrBinder){v.setGravity(attrBinder.parseGravity(value,v.getGravity()));},getter:function getter(v){return v.getGravity();}});}},{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'setAdapter',value:function setAdapter(adapter){if(this.mAdapter!=null&&this.mDataSetObserver!=null){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.resetList();this.mRecycler.clear();this.mAdapter=adapter;this.mOldSelectedPosition=GridView.INVALID_POSITION;this.mOldSelectedRowId=GridView.INVALID_ROW_ID;_get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'setAdapter',this).call(this,adapter);if(this.mAdapter!=null){this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.mDataChanged=true;this.checkFocus();this.mDataSetObserver=new AbsListView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());var position=void 0;if(this.mStackFromBottom){position=this.lookForSelectablePosition(this.mItemCount-1,false);}else{position=this.lookForSelectablePosition(0,true);}this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);this.checkSelectionChanged();}else{this.checkFocus();this.checkSelectionChanged();}this.requestLayout();}},{key:'lookForSelectablePosition',value:function lookForSelectablePosition(position,lookDown){var adapter=this.mAdapter;if(adapter==null||this.isInTouchMode()){return GridView.INVALID_POSITION;}if(position<0||position>=this.mItemCount){return GridView.INVALID_POSITION;}return position;}},{key:'fillGap',value:function fillGap(down){var numColumns=this.mNumColumns;var verticalSpacing=this.mVerticalSpacing;var count=this.getChildCount();if(down){var paddingTop=0;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){paddingTop=this.getListPaddingTop();}var startOffset=count>0?this.getChildAt(count-1).getBottom()+verticalSpacing:paddingTop;var position=this.mFirstPosition+count;if(this.mStackFromBottom){position+=numColumns-1;}this.fillDown(position,startOffset);this.correctTooHigh(numColumns,verticalSpacing,this.getChildCount());}else{var paddingBottom=0;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){paddingBottom=this.getListPaddingBottom();}var _startOffset2=count>0?this.getChildAt(0).getTop()-verticalSpacing:this.getHeight()-paddingBottom;var _position5=this.mFirstPosition;if(!this.mStackFromBottom){_position5-=numColumns;}else{_position5--;}this.fillUp(_position5,_startOffset2);this.correctTooLow(numColumns,verticalSpacing,this.getChildCount());}}},{key:'fillDown',value:function fillDown(pos,nextTop){var selectedView=null;var end=this.mBottom-this.mTop;if((this.mGroupFlags&GridView.CLIP_TO_PADDING_MASK)==GridView.CLIP_TO_PADDING_MASK){end-=this.mListPadding.bottom;}while(nextTopend&&pos>=0){var temp=this.makeRow(pos,nextBottom,false);if(temp!=null){selectedView=temp;}nextBottom=this.mReferenceView.getTop()-this.mVerticalSpacing;this.mFirstPosition=pos;pos-=this.mNumColumns;}if(this.mStackFromBottom){this.mFirstPosition=Math.max(0,pos+1);}this.setVisibleRangeHint(this.mFirstPosition,this.mFirstPosition+this.getChildCount()-1);return selectedView;}},{key:'fillFromTop',value:function fillFromTop(nextTop){this.mFirstPosition=Math.min(this.mFirstPosition,this.mSelectedPosition);this.mFirstPosition=Math.min(this.mFirstPosition,this.mItemCount-1);if(this.mFirstPosition<0){this.mFirstPosition=0;}this.mFirstPosition-=this.mFirstPosition%this.mNumColumns;return this.fillDown(this.mFirstPosition,nextTop);}},{key:'fillFromBottom',value:function fillFromBottom(lastPosition,nextBottom){lastPosition=Math.max(lastPosition,this.mSelectedPosition);lastPosition=Math.min(lastPosition,this.mItemCount-1);var invertedPosition=this.mItemCount-1-lastPosition;lastPosition=this.mItemCount-1-(invertedPosition-invertedPosition%this.mNumColumns);return this.fillUp(lastPosition,nextBottom);}},{key:'fillSelection',value:function fillSelection(childrenTop,childrenBottom){var selectedPosition=this.reconcileSelectedPosition();var numColumns=this.mNumColumns;var verticalSpacing=this.mVerticalSpacing;var rowStart=void 0;var rowEnd=-1;if(!this.mStackFromBottom){rowStart=selectedPosition-selectedPosition%numColumns;}else{var invertedSelection=this.mItemCount-1-selectedPosition;rowEnd=this.mItemCount-1-(invertedSelection-invertedSelection%numColumns);rowStart=Math.max(0,rowEnd-numColumns+1);}var fadingEdgeLength=this.getVerticalFadingEdgeLength();var topSelectionPixel=this.getTopSelectionPixel(childrenTop,fadingEdgeLength,rowStart);var sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,topSelectionPixel,true);this.mFirstPosition=rowStart;var referenceView=this.mReferenceView;if(!this.mStackFromBottom){this.fillDown(rowStart+numColumns,referenceView.getBottom()+verticalSpacing);this.pinToBottom(childrenBottom);this.fillUp(rowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();}else{var bottomSelectionPixel=this.getBottomSelectionPixel(childrenBottom,fadingEdgeLength,numColumns,rowStart);var offset=bottomSelectionPixel-referenceView.getBottom();this.offsetChildrenTopAndBottom(offset);this.fillUp(rowStart-1,referenceView.getTop()-verticalSpacing);this.pinToTop(childrenTop);this.fillDown(rowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();}return sel;}},{key:'pinToTop',value:function pinToTop(childrenTop){if(this.mFirstPosition==0){var top=this.getChildAt(0).getTop();var offset=childrenTop-top;if(offset<0){this.offsetChildrenTopAndBottom(offset);}}}},{key:'pinToBottom',value:function pinToBottom(childrenBottom){var count=this.getChildCount();if(this.mFirstPosition+count==this.mItemCount){var bottom=this.getChildAt(count-1).getBottom();var offset=childrenBottom-bottom;if(offset>0){this.offsetChildrenTopAndBottom(offset);}}}},{key:'findMotionRow',value:function findMotionRow(y){var childCount=this.getChildCount();if(childCount>0){var numColumns=this.mNumColumns;if(!this.mStackFromBottom){for(var i=0;i=0;_i56-=numColumns){if(y>=this.getChildAt(_i56).getTop()){return this.mFirstPosition+_i56;}}}}return GridView.INVALID_POSITION;}},{key:'fillSpecific',value:function fillSpecific(position,top){var numColumns=this.mNumColumns;var motionRowStart=void 0;var motionRowEnd=-1;if(!this.mStackFromBottom){motionRowStart=position-position%numColumns;}else{var invertedSelection=this.mItemCount-1-position;motionRowEnd=this.mItemCount-1-(invertedSelection-invertedSelection%numColumns);motionRowStart=Math.max(0,motionRowEnd-numColumns+1);}var temp=this.makeRow(this.mStackFromBottom?motionRowEnd:motionRowStart,top,true);this.mFirstPosition=motionRowStart;var referenceView=this.mReferenceView;if(referenceView==null){return null;}var verticalSpacing=this.mVerticalSpacing;var above=void 0;var below=void 0;if(!this.mStackFromBottom){above=this.fillUp(motionRowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();below=this.fillDown(motionRowStart+numColumns,referenceView.getBottom()+verticalSpacing);var childCount=this.getChildCount();if(childCount>0){this.correctTooHigh(numColumns,verticalSpacing,childCount);}}else{below=this.fillDown(motionRowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();above=this.fillUp(motionRowStart-1,referenceView.getTop()-verticalSpacing);var _childCount3=this.getChildCount();if(_childCount3>0){this.correctTooLow(numColumns,verticalSpacing,_childCount3);}}if(temp!=null){return temp;}else if(above!=null){return above;}else{return below;}}},{key:'correctTooHigh',value:function correctTooHigh(numColumns,verticalSpacing,childCount){var lastPosition=this.mFirstPosition+childCount-1;if(lastPosition==this.mItemCount-1&&childCount>0){var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var end=this.mBottom-this.mTop-this.mListPadding.bottom;var bottomOffset=end-lastBottom;var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();if(bottomOffset>0&&(this.mFirstPosition>0||firstTop0){this.fillUp(this.mFirstPosition-(this.mStackFromBottom?1:numColumns),firstChild.getTop()-verticalSpacing);this.adjustViewsUpOrDown();}}}}},{key:'correctTooLow',value:function correctTooLow(numColumns,verticalSpacing,childCount){if(this.mFirstPosition==0&&childCount>0){var firstChild=this.getChildAt(0);var firstTop=firstChild.getTop();var start=this.mListPadding.top;var end=this.mBottom-this.mTop-this.mListPadding.bottom;var topOffset=firstTop-start;var lastChild=this.getChildAt(childCount-1);var lastBottom=lastChild.getBottom();var lastPosition=this.mFirstPosition+childCount-1;if(topOffset>0&&(lastPositionend)){if(lastPosition==this.mItemCount-1){topOffset=Math.min(topOffset,lastBottom-end);}this.offsetChildrenTopAndBottom(-topOffset);if(lastPosition0){topSelectionPixel+=fadingEdgeLength;}return topSelectionPixel;}},{key:'adjustForBottomFadingEdge',value:function adjustForBottomFadingEdge(childInSelectedRow,topSelectionPixel,bottomSelectionPixel){if(childInSelectedRow.getBottom()>bottomSelectionPixel){var spaceAbove=childInSelectedRow.getTop()-topSelectionPixel;var spaceBelow=childInSelectedRow.getBottom()-bottomSelectionPixel;var offset=Math.min(spaceAbove,spaceBelow);this.offsetChildrenTopAndBottom(-offset);}}},{key:'adjustForTopFadingEdge',value:function adjustForTopFadingEdge(childInSelectedRow,topSelectionPixel,bottomSelectionPixel){if(childInSelectedRow.getTop()0){var oldBottom=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getBottom();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,oldBottom+verticalSpacing,true);referenceView=this.mReferenceView;this.adjustForBottomFadingEdge(referenceView,topSelectionPixel,bottomSelectionPixel);}else if(rowDelta<0){var oldTop=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getTop();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,oldTop-verticalSpacing,false);referenceView=this.mReferenceView;this.adjustForTopFadingEdge(referenceView,topSelectionPixel,bottomSelectionPixel);}else{var _oldTop=this.mReferenceViewInSelectedRow==null?0:this.mReferenceViewInSelectedRow.getTop();sel=this.makeRow(this.mStackFromBottom?rowEnd:rowStart,_oldTop,true);referenceView=this.mReferenceView;}if(!this.mStackFromBottom){this.fillUp(rowStart-numColumns,referenceView.getTop()-verticalSpacing);this.adjustViewsUpOrDown();this.fillDown(rowStart+numColumns,referenceView.getBottom()+verticalSpacing);}else{this.fillDown(rowEnd+numColumns,referenceView.getBottom()+verticalSpacing);this.adjustViewsUpOrDown();this.fillUp(rowStart-1,referenceView.getTop()-verticalSpacing);}return sel;}},{key:'determineColumns',value:function determineColumns(availableSpace){var requestedHorizontalSpacing=this.mRequestedHorizontalSpacing;var stretchMode=this.mStretchMode;var requestedColumnWidth=this.mRequestedColumnWidth;var didNotInitiallyFit=false;if(this.mRequestedNumColumns==GridView.AUTO_FIT){if(requestedColumnWidth>0){this.mNumColumns=(availableSpace+requestedHorizontalSpacing)/(requestedColumnWidth+requestedHorizontalSpacing);}else{this.mNumColumns=2;}}else{this.mNumColumns=this.mRequestedNumColumns;}if(this.mNumColumns<=0){this.mNumColumns=1;}switch(stretchMode){case GridView.NO_STRETCH:this.mColumnWidth=requestedColumnWidth;this.mHorizontalSpacing=requestedHorizontalSpacing;break;default:var spaceLeftOver=availableSpace-this.mNumColumns*requestedColumnWidth-(this.mNumColumns-1)*requestedHorizontalSpacing;if(spaceLeftOver<0){didNotInitiallyFit=true;}switch(stretchMode){case GridView.STRETCH_COLUMN_WIDTH:this.mColumnWidth=requestedColumnWidth+spaceLeftOver/this.mNumColumns;this.mHorizontalSpacing=requestedHorizontalSpacing;break;case GridView.STRETCH_SPACING:this.mColumnWidth=requestedColumnWidth;if(this.mNumColumns>1){this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver/(this.mNumColumns-1);}else{this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver;}break;case GridView.STRETCH_SPACING_UNIFORM:this.mColumnWidth=requestedColumnWidth;if(this.mNumColumns>1){this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver/(this.mNumColumns+1);}else{this.mHorizontalSpacing=requestedHorizontalSpacing+spaceLeftOver;}break;}break;}return didNotInitiallyFit;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);var widthMode=View.MeasureSpec.getMode(widthMeasureSpec);var heightMode=View.MeasureSpec.getMode(heightMeasureSpec);var widthSize=View.MeasureSpec.getSize(widthMeasureSpec);var heightSize=View.MeasureSpec.getSize(heightMeasureSpec);if(widthMode==View.MeasureSpec.UNSPECIFIED){if(this.mColumnWidth>0){widthSize=this.mColumnWidth+this.mListPadding.left+this.mListPadding.right;}else{widthSize=this.mListPadding.left+this.mListPadding.right;}widthSize+=this.getVerticalScrollbarWidth();}var childWidth=widthSize-this.mListPadding.left-this.mListPadding.right;var didNotInitiallyFit=this.determineColumns(childWidth);var childHeight=0;var childState=0;this.mItemCount=this.mAdapter==null?0:this.mAdapter.getCount();var count=this.mItemCount;if(count>0){var child=this.obtainView(0,this.mIsScrap);var p=child.getLayoutParams();if(p==null){p=this.generateDefaultLayoutParams();child.setLayoutParams(p);}p.viewType=this.mAdapter.getItemViewType(0);p.forceAdd=true;var childHeightSpec=GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED),0,p.height);var childWidthSpec=GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(this.mColumnWidth,View.MeasureSpec.EXACTLY),0,p.width);child.measure(childWidthSpec,childHeightSpec);childHeight=child.getMeasuredHeight();childState=GridView.combineMeasuredStates(childState,child.getMeasuredState());if(this.mRecycler.shouldRecycleViewType(p.viewType)){this.mRecycler.addScrapView(child,-1);}}if(heightMode==View.MeasureSpec.UNSPECIFIED){heightSize=this.mListPadding.top+this.mListPadding.bottom+childHeight+this.getVerticalFadingEdgeLength()*2;}if(heightMode==View.MeasureSpec.AT_MOST){var ourSize=this.mListPadding.top+this.mListPadding.bottom;var numColumns=this.mNumColumns;for(var i=0;i=heightSize){ourSize=heightSize;break;}}heightSize=ourSize;}if(widthMode==View.MeasureSpec.AT_MOST&&this.mRequestedNumColumns!=GridView.AUTO_FIT){var _ourSize=this.mRequestedNumColumns*this.mColumnWidth+(this.mRequestedNumColumns-1)*this.mHorizontalSpacing+this.mListPadding.left+this.mListPadding.right;if(_ourSize>widthSize||didNotInitiallyFit){widthSize|=GridView.MEASURED_STATE_TOO_SMALL;}}this.setMeasuredDimension(widthSize,heightSize);this.mWidthMeasureSpec=widthMeasureSpec;}},{key:'layoutChildren',value:function layoutChildren(){var blockLayoutRequests=this.mBlockLayoutRequests;if(!blockLayoutRequests){this.mBlockLayoutRequests=true;}try{_get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'layoutChildren',this).call(this);this.invalidate();if(this.mAdapter==null){this.resetList();this.invokeOnItemScrollListener();return;}var childrenTop=this.mListPadding.top;var childrenBottom=this.mBottom-this.mTop-this.mListPadding.bottom;var childCount=this.getChildCount();var index=void 0;var delta=0;var sel=void 0;var oldSel=null;var oldFirst=null;var newSel=null;switch(this.mLayoutMode){case GridView.LAYOUT_SET_SELECTION:index=this.mNextSelectedPosition-this.mFirstPosition;if(index>=0&&index=0){delta=this.mNextSelectedPosition-this.mSelectedPosition;}break;default:index=this.mSelectedPosition-this.mFirstPosition;if(index>=0&&index=0&&this.mSelectedPositionGridView.TOUCH_MODE_DOWN&&this.mTouchMode0){this.checkSelectionChanged();}this.invokeOnItemScrollListener();}finally{if(!blockLayoutRequests){this.mBlockLayoutRequests=false;}}}},{key:'makeAndAddView',value:function makeAndAddView(position,y,flow,childrenLeft,selected,where){var child=void 0;if(!this.mDataChanged){child=this.mRecycler.getActiveView(position);if(child!=null){this.setupChild(child,position,y,flow,childrenLeft,selected,true,where);return child;}}child=this.obtainView(position,this.mIsScrap);this.setupChild(child,position,y,flow,childrenLeft,selected,this.mIsScrap[0],where);return child;}},{key:'setupChild',value:function setupChild(child,position,y,flow,childrenLeft,selected,recycled,where){Trace.traceBegin(Trace.TRACE_TAG_VIEW,"setupGridItem");var isSelected=selected&&this.shouldShowSelector();var updateChildSelected=isSelected!=child.isSelected();var mode=this.mTouchMode;var isPressed=mode>GridView.TOUCH_MODE_DOWN&&mode0){this.keyPressed();handled=true;}}break;case KeyEvent.KEYCODE_SPACE:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_SHIFT_ON)){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_UP:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_UP);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_PAGE_DOWN:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.pageScroll(GridView.FOCUS_DOWN);}else if(event.hasModifiers(KeyEvent.META_ALT_ON)){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_MOVE_HOME:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_UP);}break;case KeyEvent.KEYCODE_MOVE_END:if(event.hasNoModifiers()){handled=this.resurrectSelectionIfNeeded()||this.fullScroll(GridView.FOCUS_DOWN);}break;case KeyEvent.KEYCODE_TAB:break;}}if(handled){return true;}switch(action){case KeyEvent.ACTION_DOWN:return _get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'onKeyDown',this).call(this,keyCode,event);case KeyEvent.ACTION_UP:return _get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'onKeyUp',this).call(this,keyCode,event);default:return false;}}},{key:'pageScroll',value:function pageScroll(direction){var nextPage=-1;if(direction==GridView.FOCUS_UP){nextPage=Math.max(0,this.mSelectedPosition-this.getChildCount());}else if(direction==GridView.FOCUS_DOWN){nextPage=Math.min(this.mItemCount-1,this.mSelectedPosition+this.getChildCount());}if(nextPage>=0){this.setSelectionInt(nextPage);this.invokeOnItemScrollListener();this.awakenScrollBars();return true;}return false;}},{key:'fullScroll',value:function fullScroll(direction){var moved=false;if(direction==GridView.FOCUS_UP){this.mLayoutMode=GridView.LAYOUT_SET_SELECTION;this.setSelectionInt(0);this.invokeOnItemScrollListener();moved=true;}else if(direction==GridView.FOCUS_DOWN){this.mLayoutMode=GridView.LAYOUT_SET_SELECTION;this.setSelectionInt(this.mItemCount-1);this.invokeOnItemScrollListener();moved=true;}if(moved){this.awakenScrollBars();}return moved;}},{key:'arrowScroll',value:function arrowScroll(direction){var selectedPosition=this.mSelectedPosition;var numColumns=this.mNumColumns;var startOfRowPos=void 0;var endOfRowPos=void 0;var moved=false;if(!this.mStackFromBottom){startOfRowPos=Math.floor(selectedPosition/numColumns)*numColumns;endOfRowPos=Math.min(startOfRowPos+numColumns-1,this.mItemCount-1);}else{var invertedSelection=this.mItemCount-1-selectedPosition;endOfRowPos=this.mItemCount-1-invertedSelection/numColumns*numColumns;startOfRowPos=Math.max(0,endOfRowPos-numColumns+1);}switch(direction){case GridView.FOCUS_UP:if(startOfRowPos>0){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(Math.max(0,selectedPosition-numColumns));moved=true;}break;case GridView.FOCUS_DOWN:if(endOfRowPosstartOfRowPos){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(Math.max(0,selectedPosition-1));moved=true;}break;case GridView.FOCUS_RIGHT:if(selectedPosition0){this.mLayoutMode=GridView.LAYOUT_MOVE_SELECTION;this.setSelectionInt(selectedPosition-1);moved=true;showScroll=selectedPosition==startOfRow;}break;}if(moved){this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));this.invokeOnItemScrollListener();}if(showScroll){this.awakenScrollBars();}return moved;}},{key:'onFocusChanged',value:function onFocusChanged(gainFocus,direction,previouslyFocusedRect){_get2(GridView.prototype.__proto__||Object.getPrototypeOf(GridView.prototype),'onFocusChanged',this).call(this,gainFocus,direction,previouslyFocusedRect);var closestChildIndex=-1;if(gainFocus&&previouslyFocusedRect!=null){previouslyFocusedRect.offset(this.mScrollX,this.mScrollY);var otherRect=this.mTempRect;var minDistance=Integer.MAX_VALUE;var childCount=this.getChildCount();for(var i=0;i=0){this.setSelection(closestChildIndex+this.mFirstPosition);}else{this.requestLayout();}}},{key:'isCandidateSelection',value:function isCandidateSelection(childIndex,direction){var count=this.getChildCount();var invertedIndex=count-1-childIndex;var rowStart=void 0;var rowEnd=void 0;if(!this.mStackFromBottom){rowStart=childIndex-childIndex%this.mNumColumns;rowEnd=Math.max(rowStart+this.mNumColumns-1,count);}else{rowEnd=count-1-(invertedIndex-invertedIndex%this.mNumColumns);rowStart=Math.max(0,rowEnd-this.mNumColumns+1);}switch(direction){case View.FOCUS_RIGHT:return childIndex==rowStart;case View.FOCUS_DOWN:return rowStart==0;case View.FOCUS_LEFT:return childIndex==rowEnd;case View.FOCUS_UP:return rowEnd==count-1;case View.FOCUS_FORWARD:return childIndex==rowStart&&rowStart==0;case View.FOCUS_BACKWARD:return childIndex==rowEnd&&rowEnd==count-1;default:throw Error('new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")');}}},{key:'setGravity',value:function setGravity(gravity){if(this.mGravity!=gravity){this.mGravity=gravity;this.requestLayoutIfNecessary();}}},{key:'getGravity',value:function getGravity(){return this.mGravity;}},{key:'setHorizontalSpacing',value:function setHorizontalSpacing(horizontalSpacing){if(horizontalSpacing!=this.mRequestedHorizontalSpacing){this.mRequestedHorizontalSpacing=horizontalSpacing;this.requestLayoutIfNecessary();}}},{key:'getHorizontalSpacing',value:function getHorizontalSpacing(){return this.mHorizontalSpacing;}},{key:'getRequestedHorizontalSpacing',value:function getRequestedHorizontalSpacing(){return this.mRequestedHorizontalSpacing;}},{key:'setVerticalSpacing',value:function setVerticalSpacing(verticalSpacing){if(verticalSpacing!=this.mVerticalSpacing){this.mVerticalSpacing=verticalSpacing;this.requestLayoutIfNecessary();}}},{key:'getVerticalSpacing',value:function getVerticalSpacing(){return this.mVerticalSpacing;}},{key:'setStretchMode',value:function setStretchMode(stretchMode){if(stretchMode!=this.mStretchMode){this.mStretchMode=stretchMode;this.requestLayoutIfNecessary();}}},{key:'getStretchMode',value:function getStretchMode(){return this.mStretchMode;}},{key:'setColumnWidth',value:function setColumnWidth(columnWidth){if(columnWidth!=this.mRequestedColumnWidth){this.mRequestedColumnWidth=columnWidth;this.requestLayoutIfNecessary();}}},{key:'getColumnWidth',value:function getColumnWidth(){return this.mColumnWidth;}},{key:'getRequestedColumnWidth',value:function getRequestedColumnWidth(){return this.mRequestedColumnWidth;}},{key:'setNumColumns',value:function setNumColumns(numColumns){if(numColumns!=this.mRequestedNumColumns){this.mRequestedNumColumns=numColumns;this.requestLayoutIfNecessary();}}},{key:'getNumColumns',value:function getNumColumns(){return this.mNumColumns;}},{key:'adjustViewsUpOrDown',value:function adjustViewsUpOrDown(){var childCount=this.getChildCount();if(childCount>0){var delta=void 0;var child=void 0;if(!this.mStackFromBottom){child=this.getChildAt(0);delta=child.getTop()-this.mListPadding.top;if(this.mFirstPosition!=0){delta-=this.mVerticalSpacing;}if(delta<0){delta=0;}}else{child=this.getChildAt(childCount-1);delta=child.getBottom()-(this.getHeight()-this.mListPadding.bottom);if(this.mFirstPosition+childCount0){delta=0;}}if(delta!=0){this.offsetChildrenTopAndBottom(-delta);}}}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){var count=this.getChildCount();if(count>0){var numColumns=this.mNumColumns;var rowCount=(count+numColumns-1)/numColumns;var extent=rowCount*100;var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){extent+=top*100/height;}view=this.getChildAt(count-1);var bottom=view.getBottom();height=view.getHeight();if(height>0){extent-=(bottom-this.getHeight())*100/height;}return extent;}return 0;}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){if(this.mFirstPosition>=0&&this.getChildCount()>0){var view=this.getChildAt(0);var top=view.getTop();var height=view.getHeight();if(height>0){var numColumns=this.mNumColumns;var rowCount=(this.mItemCount+numColumns-1)/numColumns;var oddItemsOnFirstRow=this.isStackFromBottom()?rowCount*numColumns-this.mItemCount:0;var whichRow=(this.mFirstPosition+oddItemsOnFirstRow)/numColumns;return Math.max(whichRow*100-top*100/height+Math.floor(this.mScrollY/this.getHeight()*rowCount*100),0);}}return 0;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){var numColumns=this.mNumColumns;var rowCount=(this.mItemCount+numColumns-1)/numColumns;var result=Math.max(rowCount*100,0);if(this.mScrollY!=0){result+=Math.abs(Math.floor(this.mScrollY/this.getHeight()*rowCount*100));}return result;}}]);return GridView;}(AbsListView);GridView.NO_STRETCH=0;GridView.STRETCH_SPACING=1;GridView.STRETCH_COLUMN_WIDTH=2;GridView.STRETCH_SPACING_UNIFORM=3;GridView.AUTO_FIT=-1;widget.GridView=GridView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var java;(function(java){var lang;(function(lang){var Comparable;(function(Comparable){function isImpl(obj){return obj&&obj['compareTo'];}Comparable.isImpl=isImpl;})(Comparable=lang.Comparable||(lang.Comparable={}));})(lang=java.lang||(java.lang={}));})(java||(java={}));var java;(function(java){var util;(function(util){var Comparable=java.lang.Comparable;var Collections=function(){function Collections(){_classCallCheck(this,Collections);}_createClass(Collections,null,[{key:'emptyList',value:function emptyList(){return Collections.EMPTY_LIST;}},{key:'sort',value:function sort(list,c){if(c){list.sort(function(t1,t2){return c.compare(t1,t2);});}else{list.sort(function(t1,t2){if(Comparable.isImpl(t1)&&Comparable.isImpl(t2)){return t1.compareTo(t2);}return 0;});}}}]);return Collections;}();Collections.EMPTY_LIST=new util.ArrayList();util.Collections=Collections;})(util=java.util||(java.util={}));})(java||(java={}));var android;(function(android){var widget;(function(widget){var Color=android.graphics.Color;var Paint=android.graphics.Paint;var Align=android.graphics.Paint.Align;var SparseArray=android.util.SparseArray;var TypedValue=android.util.TypedValue;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var VelocityTracker=android.view.VelocityTracker;var View=android.view.View;var ViewConfiguration=android.view.ViewConfiguration;var DecelerateInterpolator=android.view.animation.DecelerateInterpolator;var Integer=java.lang.Integer;var LinearLayout=android.widget.LinearLayout;var OverScroller=android.widget.OverScroller;var NumberPicker=function(_LinearLayout){_inherits(NumberPicker,_LinearLayout);function NumberPicker(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.numberPickerStyle;_classCallCheck(this,NumberPicker);var _this128=_possibleConstructorReturn(this,(NumberPicker.__proto__||Object.getPrototypeOf(NumberPicker)).call(this,context,bindElement,defStyle));_this128.SELECTOR_WHEEL_ITEM_COUNT=3;_this128.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this128.SELECTOR_WHEEL_ITEM_COUNT/2);_this128.mSelectionDividersDistance=0;_this128.mMinHeight_=NumberPicker.SIZE_UNSPECIFIED;_this128.mMaxHeight=NumberPicker.SIZE_UNSPECIFIED;_this128.mMinWidth_=NumberPicker.SIZE_UNSPECIFIED;_this128.mMaxWidth=NumberPicker.SIZE_UNSPECIFIED;_this128.mTextSize=0;_this128.mSelectorTextGapHeight=0;_this128.mMinValue=0;_this128.mMaxValue=0;_this128.mValue=0;_this128.mLongPressUpdateInterval=NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;_this128.mSelectorIndexToStringCache=new SparseArray();_this128.mSelectorElementHeight=0;_this128.mInitialScrollOffset=Integer.MIN_VALUE;_this128.mCurrentScrollOffset=0;_this128.mPreviousScrollerY=0;_this128.mLastDownEventY=0;_this128.mLastDownEventTime=0;_this128.mLastDownOrMoveEventY=0;_this128.mMinimumFlingVelocity=0;_this128.mMaximumFlingVelocity=0;_this128.mSolidColor=0;_this128.mSelectionDividerHeight=0;_this128.mScrollState=NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;_this128.mTopSelectionDividerTop=0;_this128.mBottomSelectionDividerBottom=0;_this128.mLastHoveredChildVirtualViewId=0;_this128.mLastHandledDownDpadKeyCode=-1;var attributesArray=context.obtainStyledAttributes(bindElement,defStyle);_this128.mHasSelectorWheel=true;_this128.mSolidColor=attributesArray.getColor('solidColor',0);_this128.mSelectionDivider=attributesArray.getDrawable('selectionDivider');var defSelectionDividerHeight=Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT,_this128.getResources().getDisplayMetrics()));_this128.mSelectionDividerHeight=attributesArray.getDimensionPixelSize('selectionDividerHeight',defSelectionDividerHeight);var defSelectionDividerDistance=Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE,_this128.getResources().getDisplayMetrics()));_this128.mSelectionDividersDistance=attributesArray.getDimensionPixelSize('selectionDividersDistance',defSelectionDividerDistance);_this128.mMinHeight=attributesArray.getDimensionPixelSize('internalMinHeight',NumberPicker.SIZE_UNSPECIFIED);_this128.mMaxHeight=attributesArray.getDimensionPixelSize('internalMaxHeight',NumberPicker.SIZE_UNSPECIFIED);if(_this128.mMinHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinHeight>_this128.mMaxHeight){throw Error('new IllegalArgumentException("minHeight > maxHeight")');}_this128.mMinWidth=attributesArray.getDimensionPixelSize('internalMinWidth',NumberPicker.SIZE_UNSPECIFIED);_this128.mMaxWidth=attributesArray.getDimensionPixelSize('internalMaxWidth',NumberPicker.SIZE_UNSPECIFIED);if(_this128.mMinWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinWidth>_this128.mMaxWidth){throw Error('new IllegalArgumentException("minWidth > maxWidth")');}_this128.mComputeMaxWidth=_this128.mMaxWidth==NumberPicker.SIZE_UNSPECIFIED;_this128.mVirtualButtonPressedDrawable=attributesArray.getDrawable('virtualButtonPressedDrawable');_this128.mTextSize=attributesArray.getDimensionPixelSize('textSize',Math.floor(16*_this128.getResources().getDisplayMetrics().density));var paint=new Paint();paint.setAntiAlias(true);paint.setTextAlign(Align.CENTER);paint.setTextSize(_this128.mTextSize);paint.setColor(attributesArray.getColor('textColor',Color.DKGRAY));_this128.mSelectorWheelPaint=paint;_this128.SELECTOR_WHEEL_ITEM_COUNT=attributesArray.getInt('itemCount',_this128.SELECTOR_WHEEL_ITEM_COUNT);_this128.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this128.SELECTOR_WHEEL_ITEM_COUNT/2);_this128.mSelectorIndices=androidui.util.ArrayCreator.newNumberArray(_this128.SELECTOR_WHEEL_ITEM_COUNT);if(_this128.mMinHeight_!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinHeight_>_this128.mMaxHeight){throw Error('new IllegalArgumentException("minHeight > maxHeight")');}if(_this128.mMinWidth_!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMaxWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this128.mMinWidth_>_this128.mMaxWidth){throw Error('new IllegalArgumentException("minWidth > maxWidth")');}_this128.mComputeMaxWidth=_this128.mMaxWidth==NumberPicker.SIZE_UNSPECIFIED;_this128.setMinValue(attributesArray.getInt('minValue',_this128.mMinValue));_this128.setMaxValue(attributesArray.getInt('maxValue',_this128.mMaxValue));attributesArray.recycle();_this128.mPressedStateHelper=new NumberPicker.PressedStateHelper(_this128);_this128.setWillNotDraw(!_this128.mHasSelectorWheel);var configuration=ViewConfiguration.get();_this128.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();_this128.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity()/NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;_this128.mFlingScroller=new OverScroller(null,true);_this128.mAdjustScroller=new OverScroller(new DecelerateInterpolator(2.5));_this128.updateInputTextView();return _this128;}_createClass(NumberPicker,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'createClassAttrBinder',this).call(this).set('solidColor',{setter:function setter(v,value,attrBinder){v.mSolidColor=attrBinder.parseColor(value,v.mSolidColor);v.invalidate();},getter:function getter(v){return v.mSolidColor;}}).set('selectionDivider',{setter:function setter(v,value,attrBinder){v.mSelectionDivider=attrBinder.parseDrawable(value);v.invalidate();},getter:function getter(v){return v.mSelectionDivider;}}).set('selectionDividerHeight',{setter:function setter(v,value,attrBinder){v.mSelectionDividerHeight=attrBinder.parseNumberPixelSize(value,v.mSelectionDividerHeight);v.invalidate();},getter:function getter(v){return v.mSelectionDividerHeight;}}).set('selectionDividersDistance',{setter:function setter(v,value,attrBinder){v.mSelectionDividersDistance=attrBinder.parseNumberPixelSize(value,v.mSelectionDividersDistance);v.invalidate();},getter:function getter(v){return v.mSelectionDividersDistance;}}).set('internalMinHeight',{setter:function setter(v,value,attrBinder){v.mMinHeight_=attrBinder.parseNumberPixelSize(value,v.mMinHeight_);v.invalidate();},getter:function getter(v){return v.mMinHeight_;}}).set('internalMaxHeight',{setter:function setter(v,value,attrBinder){v.mMaxHeight=attrBinder.parseNumberPixelSize(value,v.mMaxHeight);v.invalidate();},getter:function getter(v){return v.mMaxHeight;}}).set('internalMinWidth',{setter:function setter(v,value,attrBinder){v.mMinWidth_=attrBinder.parseNumberPixelSize(value,v.mMinWidth_);v.invalidate();},getter:function getter(v){return v.mMinWidth_;}}).set('internalMaxWidth',{setter:function setter(v,value,attrBinder){v.mMaxWidth=attrBinder.parseNumberPixelSize(value,v.mMaxWidth);v.invalidate();},getter:function getter(v){return v.mMaxWidth;}}).set('virtualButtonPressedDrawable',{setter:function setter(v,value,attrBinder){v.mVirtualButtonPressedDrawable=attrBinder.parseDrawable(value);v.invalidate();},getter:function getter(v){return v.mVirtualButtonPressedDrawable;}});}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){if(!this.mHasSelectorWheel){_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);return;}var msrdWdth=this.getMeasuredWidth();var msrdHght=this.getMeasuredHeight();if(changed){this.initializeSelectorWheel();this.initializeFadingEdges();this.mTopSelectionDividerTop=(this.getHeight()-this.mSelectionDividersDistance)/2-this.mSelectionDividerHeight;this.mBottomSelectionDividerBottom=this.mTopSelectionDividerTop+2*this.mSelectionDividerHeight+this.mSelectionDividersDistance;}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){if(!this.mHasSelectorWheel){_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);return;}var newWidthMeasureSpec=this.makeMeasureSpec(widthMeasureSpec,this.mMaxWidth);var newHeightMeasureSpec=this.makeMeasureSpec(heightMeasureSpec,this.mMaxHeight);_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'onMeasure',this).call(this,newWidthMeasureSpec,newHeightMeasureSpec);var widthSize=this.resolveSizeAndStateRespectingMinSize(this.mMinWidth_,this.getMeasuredWidth(),widthMeasureSpec);var heightSize=this.resolveSizeAndStateRespectingMinSize(this.mMinHeight_,this.getMeasuredHeight(),heightMeasureSpec);this.setMeasuredDimension(widthSize,heightSize);}},{key:'moveToFinalScrollerPosition',value:function moveToFinalScrollerPosition(scroller){scroller.forceFinished(true);var amountToScroll=scroller.getFinalY()-scroller.getCurrY();var futureScrollOffset=(this.mCurrentScrollOffset+amountToScroll)%this.mSelectorElementHeight;var overshootAdjustment=this.mInitialScrollOffset-futureScrollOffset;if(overshootAdjustment!=0){if(Math.abs(overshootAdjustment)>this.mSelectorElementHeight/2){if(overshootAdjustment>0){overshootAdjustment-=this.mSelectorElementHeight;}else{overshootAdjustment+=this.mSelectorElementHeight;}}amountToScroll+=overshootAdjustment;this.scrollBy(0,amountToScroll);return true;}return false;}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(event){if(!this.mHasSelectorWheel||!this.isEnabled()){return false;}var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_DOWN:{this.removeAllCallbacks();this.mLastDownOrMoveEventY=this.mLastDownEventY=event.getY();this.mLastDownEventTime=event.getEventTime();this.mIngonreMoveEvents=false;this.mShowSoftInputOnTap=false;if(this.mLastDownEventYthis.mBottomSelectionDividerBottom){if(this.mScrollState==NumberPicker.OnScrollListener.SCROLL_STATE_IDLE){this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);}}this.getParent().requestDisallowInterceptTouchEvent(true);if(!this.mFlingScroller.isFinished()){this.mFlingScroller.forceFinished(true);this.mAdjustScroller.forceFinished(true);this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);}else if(!this.mAdjustScroller.isFinished()){this.mFlingScroller.forceFinished(true);this.mAdjustScroller.forceFinished(true);}else if(this.mLastDownEventYthis.mBottomSelectionDividerBottom){this.hideSoftInput();this.postChangeCurrentByOneFromLongPress(true,ViewConfiguration.getLongPressTimeout());}else{this.mShowSoftInputOnTap=true;this.postBeginSoftInputOnLongPressCommand();}return true;}}return false;}},{key:'onTouchEvent',value:function onTouchEvent(event){if(!this.isEnabled()||!this.mHasSelectorWheel){return false;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(event);var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_MOVE:{if(this.mIngonreMoveEvents){break;}var currentMoveY=event.getY();if(this.mScrollState!=NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL){var deltaDownY=Math.floor(Math.abs(currentMoveY-this.mLastDownEventY));if(deltaDownY>this.mTouchSlop){this.removeAllCallbacks();this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);}}else{var deltaMoveY=Math.floor(currentMoveY-this.mLastDownOrMoveEventY);this.scrollBy(0,deltaMoveY);this.invalidate();}this.mLastDownOrMoveEventY=currentMoveY;}break;case MotionEvent.ACTION_UP:{this.removeBeginSoftInputCommand();this.removeChangeCurrentByOneFromLongPress();this.mPressedStateHelper.cancel();var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumFlingVelocity);var initialVelocity=Math.floor(velocityTracker.getYVelocity());if(Math.abs(initialVelocity)>this.mMinimumFlingVelocity){this.fling(initialVelocity);this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_FLING);}else{var eventY=Math.floor(event.getY());var _deltaMoveY=Math.floor(Math.abs(eventY-this.mLastDownEventY));var deltaTime=event.getEventTime()-this.mLastDownEventTime;if(_deltaMoveY<=this.mTouchSlop&&deltaTime0){this.changeValueByOne(true);this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);}else if(selectorIndexOffset<0){this.changeValueByOne(false);this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);}}}else{this.ensureScrollWheelAdjusted();}this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);}this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}return true;}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(event){var action=event.getActionMasked();switch(action){case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:this.removeAllCallbacks();break;}return _get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'dispatchTouchEvent',this).call(this,event);}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){var keyCode=event.getKeyCode();switch(keyCode){case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:this.removeAllCallbacks();break;case KeyEvent.KEYCODE_DPAD_DOWN:case KeyEvent.KEYCODE_DPAD_UP:if(!this.mHasSelectorWheel){break;}switch(event.getAction()){case KeyEvent.ACTION_DOWN:if(this.mWrapSelectorWheel||keyCode==KeyEvent.KEYCODE_DPAD_DOWN?this.getValue()this.getMinValue()){this.requestFocus();this.mLastHandledDownDpadKeyCode=keyCode;this.removeAllCallbacks();if(this.mFlingScroller.isFinished()){this.changeValueByOne(keyCode==KeyEvent.KEYCODE_DPAD_DOWN);}return true;}break;case KeyEvent.ACTION_UP:if(this.mLastHandledDownDpadKeyCode==keyCode){this.mLastHandledDownDpadKeyCode=-1;return true;}break;}}return _get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'dispatchKeyEvent',this).call(this,event);}},{key:'computeScroll',value:function computeScroll(){var scroller=this.mFlingScroller;if(scroller.isFinished()){scroller=this.mAdjustScroller;if(scroller.isFinished()){return;}}scroller.computeScrollOffset();var currentScrollerY=scroller.getCurrY();if(this.mPreviousScrollerY==0){this.mPreviousScrollerY=scroller.getStartY();}this.scrollBy(0,currentScrollerY-this.mPreviousScrollerY);this.mPreviousScrollerY=currentScrollerY;if(scroller.isFinished()){this.onScrollerFinished(scroller);}else{this.invalidate();}}},{key:'setEnabled',value:function setEnabled(enabled){_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'setEnabled',this).call(this,enabled);if(!this.mHasSelectorWheel){}if(!this.mHasSelectorWheel){}}},{key:'scrollBy',value:function scrollBy(x,y){var selectorIndices=this.mSelectorIndices;if(!this.mWrapSelectorWheel&&y>0&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]<=this.mMinValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;return;}if(!this.mWrapSelectorWheel&&y<0&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]>=this.mMaxValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;return;}this.mCurrentScrollOffset+=y;while(this.mCurrentScrollOffset-this.mInitialScrollOffset>this.mSelectorTextGapHeight){this.mCurrentScrollOffset-=this.mSelectorElementHeight;this.decrementSelectorIndices(selectorIndices);this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX],true);if(!this.mWrapSelectorWheel&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]<=this.mMinValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;}}while(this.mCurrentScrollOffset-this.mInitialScrollOffset<-this.mSelectorTextGapHeight){this.mCurrentScrollOffset+=this.mSelectorElementHeight;this.incrementSelectorIndices(selectorIndices);this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX],true);if(!this.mWrapSelectorWheel&&selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX]>=this.mMaxValue){this.mCurrentScrollOffset=this.mInitialScrollOffset;}}}},{key:'computeVerticalScrollOffset',value:function computeVerticalScrollOffset(){return this.mCurrentScrollOffset;}},{key:'computeVerticalScrollRange',value:function computeVerticalScrollRange(){return(this.mMaxValue-this.mMinValue+1)*this.mSelectorElementHeight;}},{key:'computeVerticalScrollExtent',value:function computeVerticalScrollExtent(){return this.getHeight();}},{key:'getSolidColor',value:function getSolidColor(){return this.mSolidColor;}},{key:'setOnValueChangedListener',value:function setOnValueChangedListener(onValueChangedListener){this.mOnValueChangeListener=onValueChangedListener;}},{key:'setOnScrollListener',value:function setOnScrollListener(onScrollListener){this.mOnScrollListener=onScrollListener;}},{key:'setFormatter',value:function setFormatter(formatter){if(formatter==this.mFormatter){return;}this.mFormatter=formatter;this.initializeSelectorWheelIndices();this.updateInputTextView();}},{key:'setValue',value:function setValue(value){this.setValueInternal(value,false);}},{key:'showSoftInput',value:function showSoftInput(){}},{key:'hideSoftInput',value:function hideSoftInput(){}},{key:'tryComputeMaxWidth',value:function tryComputeMaxWidth(){if(!this.mComputeMaxWidth){return;}var maxTextWidth=0;if(this.mDisplayedValues==null){var maxDigitWidth=0;for(var i=0;i<=9;i++){var digitWidth=this.mSelectorWheelPaint.measureText(NumberPicker.formatNumberWithLocale(i));if(digitWidth>maxDigitWidth){maxDigitWidth=digitWidth;}}var numberOfDigits=0;var current=this.mMaxValue;while(current>0){numberOfDigits++;current=current/10;}maxTextWidth=Math.floor(numberOfDigits*maxDigitWidth);}else{var valueCount=this.mDisplayedValues.length;for(var _i57=0;_i57maxTextWidth){maxTextWidth=Math.floor(textWidth);}}}if(this.mMaxWidth!=maxTextWidth){if(maxTextWidth>this.mMinWidth_){this.mMaxWidth=maxTextWidth;}else{this.mMaxWidth=this.mMinWidth_;}this.invalidate();}}},{key:'getWrapSelectorWheel',value:function getWrapSelectorWheel(){return this.mWrapSelectorWheel;}},{key:'setWrapSelectorWheel',value:function setWrapSelectorWheel(wrapSelectorWheel){var wrappingAllowed=this.mMaxValue-this.mMinValue>=this.mSelectorIndices.length;if((!wrapSelectorWheel||wrappingAllowed)&&wrapSelectorWheel!=this.mWrapSelectorWheel){this.mWrapSelectorWheel=wrapSelectorWheel;}}},{key:'setOnLongPressUpdateInterval',value:function setOnLongPressUpdateInterval(intervalMillis){this.mLongPressUpdateInterval=intervalMillis;}},{key:'getValue',value:function getValue(){return this.mValue;}},{key:'getMinValue',value:function getMinValue(){return this.mMinValue;}},{key:'setMinValue',value:function setMinValue(minValue){if(this.mMinValue==minValue){return;}if(minValue<0){throw Error('new IllegalArgumentException("minValue must be >= 0")');}this.mMinValue=minValue;if(this.mMinValue>this.mValue){this.mValue=this.mMinValue;}var wrapSelectorWheel=this.mMaxValue-this.mMinValue>this.mSelectorIndices.length;this.setWrapSelectorWheel(wrapSelectorWheel);this.initializeSelectorWheelIndices();this.updateInputTextView();this.tryComputeMaxWidth();this.invalidate();}},{key:'getMaxValue',value:function getMaxValue(){return this.mMaxValue;}},{key:'setMaxValue',value:function setMaxValue(maxValue){if(this.mMaxValue==maxValue){return;}if(maxValue<0){throw Error('new IllegalArgumentException("maxValue must be >= 0")');}this.mMaxValue=maxValue;if(this.mMaxValuethis.mSelectorIndices.length;this.setWrapSelectorWheel(wrapSelectorWheel);this.initializeSelectorWheelIndices();this.updateInputTextView();this.tryComputeMaxWidth();this.invalidate();}},{key:'getDisplayedValues',value:function getDisplayedValues(){return this.mDisplayedValues;}},{key:'setDisplayedValues',value:function setDisplayedValues(displayedValues){if(this.mDisplayedValues==displayedValues){return;}this.mDisplayedValues=displayedValues;if(this.mDisplayedValues!=null){}else{}this.updateInputTextView();this.initializeSelectorWheelIndices();this.tryComputeMaxWidth();}},{key:'getTopFadingEdgeStrength',value:function getTopFadingEdgeStrength(){return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;}},{key:'getBottomFadingEdgeStrength',value:function getBottomFadingEdgeStrength(){return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'onDetachedFromWindow',this).call(this);this.removeAllCallbacks();}},{key:'onDraw',value:function onDraw(canvas){if(!this.mHasSelectorWheel){_get2(NumberPicker.prototype.__proto__||Object.getPrototypeOf(NumberPicker.prototype),'onDraw',this).call(this,canvas);return;}var x=(this.mRight-this.mLeft)/2;var y=this.mCurrentScrollOffset;if(this.mVirtualButtonPressedDrawable!=null&&this.mScrollState==NumberPicker.OnScrollListener.SCROLL_STATE_IDLE){if(this.mDecrementVirtualButtonPressed){this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);this.mVirtualButtonPressedDrawable.setBounds(0,0,this.mRight,this.mTopSelectionDividerTop);this.mVirtualButtonPressedDrawable.draw(canvas);}if(this.mIncrementVirtualButtonPressed){this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);this.mVirtualButtonPressedDrawable.setBounds(0,this.mBottomSelectionDividerBottom,this.mRight,this.mBottom);this.mVirtualButtonPressedDrawable.draw(canvas);}}var selectorIndices=this.mSelectorIndices;for(var i=0;i0){this.mFlingScroller.fling(0,0,0,velocityY,0,0,0,Integer.MAX_VALUE);}else{this.mFlingScroller.fling(0,Integer.MAX_VALUE,0,velocityY,0,0,0,Integer.MAX_VALUE);}this.invalidate();}},{key:'getWrappedSelectorIndex',value:function getWrappedSelectorIndex(selectorIndex){if(selectorIndex>this.mMaxValue){return this.mMinValue+(selectorIndex-this.mMaxValue)%(this.mMaxValue-this.mMinValue)-1;}else if(selectorIndexthis.mMaxValue){nextScrollSelectorIndex=this.mMinValue;}selectorIndices[selectorIndices.length-1]=nextScrollSelectorIndex;this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);}},{key:'decrementSelectorIndices',value:function decrementSelectorIndices(selectorIndices){for(var i=selectorIndices.length-1;i>0;i--){selectorIndices[i]=selectorIndices[i-1];}var nextScrollSelectorIndex=selectorIndices[1]-1;if(this.mWrapSelectorWheel&&nextScrollSelectorIndexthis.mMaxValue){scrollSelectorValue="";}else{if(this.mDisplayedValues!=null){var displayedValueIndex=selectorIndex-this.mMinValue;scrollSelectorValue=this.mDisplayedValues[displayedValueIndex];}else{scrollSelectorValue=this.formatNumber(selectorIndex);}}cache.put(selectorIndex,scrollSelectorValue);}},{key:'formatNumber',value:function formatNumber(value){return this.mFormatter!=null?this.mFormatter.format(value):NumberPicker.formatNumberWithLocale(value);}},{key:'validateInputTextView',value:function validateInputTextView(v){}},{key:'updateInputTextView',value:function updateInputTextView(){return false;}},{key:'notifyChange',value:function notifyChange(previous,current){if(this.mOnValueChangeListener!=null){this.mOnValueChangeListener.onValueChange(this,previous,this.mValue);}}},{key:'postChangeCurrentByOneFromLongPress',value:function postChangeCurrentByOneFromLongPress(increment,delayMillis){if(this.mChangeCurrentByOneFromLongPressCommand==null){this.mChangeCurrentByOneFromLongPressCommand=new NumberPicker.ChangeCurrentByOneFromLongPressCommand(this);}else{this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}this.mChangeCurrentByOneFromLongPressCommand.setStep(increment);this.postDelayed(this.mChangeCurrentByOneFromLongPressCommand,delayMillis);}},{key:'removeChangeCurrentByOneFromLongPress',value:function removeChangeCurrentByOneFromLongPress(){if(this.mChangeCurrentByOneFromLongPressCommand!=null){this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}}},{key:'postBeginSoftInputOnLongPressCommand',value:function postBeginSoftInputOnLongPressCommand(){if(this.mBeginSoftInputOnLongPressCommand==null){this.mBeginSoftInputOnLongPressCommand=new NumberPicker.BeginSoftInputOnLongPressCommand(this);}else{this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}this.postDelayed(this.mBeginSoftInputOnLongPressCommand,ViewConfiguration.getLongPressTimeout());}},{key:'removeBeginSoftInputCommand',value:function removeBeginSoftInputCommand(){if(this.mBeginSoftInputOnLongPressCommand!=null){this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}}},{key:'removeAllCallbacks',value:function removeAllCallbacks(){if(this.mChangeCurrentByOneFromLongPressCommand!=null){this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);}if(this.mSetSelectionCommand!=null){this.removeCallbacks(this.mSetSelectionCommand);}if(this.mBeginSoftInputOnLongPressCommand!=null){this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);}this.mPressedStateHelper.cancel();}},{key:'getSelectedPos',value:function getSelectedPos(value){if(this.mDisplayedValues==null){try{return Integer.parseInt(value);}catch(e){}}else{for(var i=0;ithis.mSelectorElementHeight/2){deltaY+=deltaY>0?-this.mSelectorElementHeight:this.mSelectorElementHeight;}this.mAdjustScroller.startScroll(0,0,0,deltaY,NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS);this.invalidate();return true;}return false;}}],[{key:'getTwoDigitFormatter',value:function getTwoDigitFormatter(){if(!NumberPicker.sTwoDigitFormatter){NumberPicker.sTwoDigitFormatter=new NumberPicker.TwoDigitFormatter();}return NumberPicker.sTwoDigitFormatter;}},{key:'formatNumberWithLocale',value:function formatNumberWithLocale(value){return value+'';}}]);return NumberPicker;}(LinearLayout);NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL=300;NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT=8;NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS=800;NumberPicker.SNAP_SCROLL_DURATION=300;NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH=0.9;NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT=2;NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE=48;NumberPicker.SIZE_UNSPECIFIED=-1;widget.NumberPicker=NumberPicker;(function(NumberPicker){var TwoDigitFormatter=function(){function TwoDigitFormatter(){_classCallCheck(this,TwoDigitFormatter);}_createClass(TwoDigitFormatter,[{key:'format',value:function format(value){var s=value+'';if(s.length===1)s='0'+s;return s;}}]);return TwoDigitFormatter;}();NumberPicker.TwoDigitFormatter=TwoDigitFormatter;var OnScrollListener;(function(OnScrollListener){OnScrollListener.SCROLL_STATE_IDLE=0;OnScrollListener.SCROLL_STATE_TOUCH_SCROLL=1;OnScrollListener.SCROLL_STATE_FLING=2;})(OnScrollListener=NumberPicker.OnScrollListener||(NumberPicker.OnScrollListener={}));var PressedStateHelper=function(){function PressedStateHelper(arg){_classCallCheck(this,PressedStateHelper);this.MODE_PRESS=1;this.MODE_TAPPED=2;this.mManagedButton=0;this.mMode=0;this._NumberPicker_this=arg;}_createClass(PressedStateHelper,[{key:'cancel',value:function cancel(){this.mMode=0;this.mManagedButton=0;this._NumberPicker_this.removeCallbacks(this);if(this._NumberPicker_this.mIncrementVirtualButtonPressed){this._NumberPicker_this.mIncrementVirtualButtonPressed=false;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}if(this._NumberPicker_this.mDecrementVirtualButtonPressed){this._NumberPicker_this.mDecrementVirtualButtonPressed=false;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}},{key:'buttonPressDelayed',value:function buttonPressDelayed(button){this.cancel();this.mMode=this.MODE_PRESS;this.mManagedButton=button;this._NumberPicker_this.postDelayed(this,ViewConfiguration.getTapTimeout());}},{key:'buttonTapped',value:function buttonTapped(button){this.cancel();this.mMode=this.MODE_TAPPED;this.mManagedButton=button;this._NumberPicker_this.post(this);}},{key:'run',value:function run(){switch(this.mMode){case this.MODE_PRESS:{switch(this.mManagedButton){case PressedStateHelper.BUTTON_INCREMENT:{this._NumberPicker_this.mIncrementVirtualButtonPressed=true;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}break;case PressedStateHelper.BUTTON_DECREMENT:{this._NumberPicker_this.mDecrementVirtualButtonPressed=true;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}}break;case this.MODE_TAPPED:{switch(this.mManagedButton){case PressedStateHelper.BUTTON_INCREMENT:{if(!this._NumberPicker_this.mIncrementVirtualButtonPressed){this._NumberPicker_this.postDelayed(this,ViewConfiguration.getPressedStateDuration());}this._NumberPicker_this.mIncrementVirtualButtonPressed=!this._NumberPicker_this.mIncrementVirtualButtonPressed;this._NumberPicker_this.invalidate(0,this._NumberPicker_this.mBottomSelectionDividerBottom,this._NumberPicker_this.mRight,this._NumberPicker_this.mBottom);}break;case PressedStateHelper.BUTTON_DECREMENT:{if(!this._NumberPicker_this.mDecrementVirtualButtonPressed){this._NumberPicker_this.postDelayed(this,ViewConfiguration.getPressedStateDuration());}this._NumberPicker_this.mDecrementVirtualButtonPressed=!this._NumberPicker_this.mDecrementVirtualButtonPressed;this._NumberPicker_this.invalidate(0,0,this._NumberPicker_this.mRight,this._NumberPicker_this.mTopSelectionDividerTop);}}}break;}}}]);return PressedStateHelper;}();PressedStateHelper.BUTTON_INCREMENT=1;PressedStateHelper.BUTTON_DECREMENT=2;NumberPicker.PressedStateHelper=PressedStateHelper;var SetSelectionCommand=function(){function SetSelectionCommand(arg){_classCallCheck(this,SetSelectionCommand);this.mSelectionStart=0;this.mSelectionEnd=0;this._NumberPicker_this=arg;}_createClass(SetSelectionCommand,[{key:'run',value:function run(){}}]);return SetSelectionCommand;}();NumberPicker.SetSelectionCommand=SetSelectionCommand;var ChangeCurrentByOneFromLongPressCommand=function(){function ChangeCurrentByOneFromLongPressCommand(arg){_classCallCheck(this,ChangeCurrentByOneFromLongPressCommand);this._NumberPicker_this=arg;}_createClass(ChangeCurrentByOneFromLongPressCommand,[{key:'setStep',value:function setStep(increment){this.mIncrement=increment;}},{key:'run',value:function run(){this._NumberPicker_this.changeValueByOne(this.mIncrement);this._NumberPicker_this.postDelayed(this,this._NumberPicker_this.mLongPressUpdateInterval);}}]);return ChangeCurrentByOneFromLongPressCommand;}();NumberPicker.ChangeCurrentByOneFromLongPressCommand=ChangeCurrentByOneFromLongPressCommand;var BeginSoftInputOnLongPressCommand=function(){function BeginSoftInputOnLongPressCommand(arg){_classCallCheck(this,BeginSoftInputOnLongPressCommand);this._NumberPicker_this=arg;}_createClass(BeginSoftInputOnLongPressCommand,[{key:'run',value:function run(){this._NumberPicker_this.showSoftInput();this._NumberPicker_this.mIngonreMoveEvents=true;}}]);return BeginSoftInputOnLongPressCommand;}();NumberPicker.BeginSoftInputOnLongPressCommand=BeginSoftInputOnLongPressCommand;})(NumberPicker=widget.NumberPicker||(widget.NumberPicker={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var graphics;(function(graphics){var drawable;(function(drawable_8){var Rect=android.graphics.Rect;var Gravity=android.view.Gravity;var Drawable=android.graphics.drawable.Drawable;var ClipDrawable=function(_Drawable7){_inherits(ClipDrawable,_Drawable7);function ClipDrawable(){_classCallCheck(this,ClipDrawable);var _this129=_possibleConstructorReturn(this,(ClipDrawable.__proto__||Object.getPrototypeOf(ClipDrawable)).call(this));_this129.mTmpRect=new Rect();if(arguments.length<=1){_this129.mClipState=new ClipDrawable.ClipState(arguments.length<=0?undefined:arguments[0],_this129);}else{_this129.mClipState=new ClipDrawable.ClipState(null,_this129);var _drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var orientation=arguments.length<=2?undefined:arguments[2];_this129.mClipState.mDrawable=_drawable;_this129.mClipState.mGravity=gravity;_this129.mClipState.mOrientation=orientation;if(_drawable!=null){_drawable.setCallback(_this129);}}return _this129;}_createClass(ClipDrawable,[{key:'inflate',value:function inflate(r,parser){_get2(ClipDrawable.prototype.__proto__||Object.getPrototypeOf(ClipDrawable.prototype),'inflate',this).call(this,r,parser);var a=r.obtainAttributes(parser);var orientation=a.getInt("android:clipOrientation",ClipDrawable.HORIZONTAL);var gStr=a.getString("android:gravity");var g=Gravity.parseGravity(gStr,Gravity.LEFT);var dr=a.getDrawable("android:drawable");a.recycle();if(!dr&&parser.children[0]instanceof HTMLElement){dr=Drawable.createFromXml(r,parser.children[0]);}if(dr==null){throw Error('new IllegalArgumentException("No drawable specified for ")');}this.mClipState.mDrawable=dr;this.mClipState.mOrientation=orientation;this.mClipState.mGravity=g;dr.setCallback(this);}},{key:'drawableSizeChange',value:function drawableSizeChange(who){var callback=this.getCallback();if(callback!=null&&callback.drawableSizeChange){callback.drawableSizeChange(this);}}},{key:'invalidateDrawable',value:function invalidateDrawable(who){var callback=this.getCallback();if(callback!=null){callback.invalidateDrawable(this);}}},{key:'scheduleDrawable',value:function scheduleDrawable(who,what,when){var callback=this.getCallback();if(callback!=null){callback.scheduleDrawable(this,what,when);}}},{key:'unscheduleDrawable',value:function unscheduleDrawable(who,what){var callback=this.getCallback();if(callback!=null){callback.unscheduleDrawable(this,what);}}},{key:'getPadding',value:function getPadding(padding){return this.mClipState.mDrawable.getPadding(padding);}},{key:'setVisible',value:function setVisible(visible,restart){this.mClipState.mDrawable.setVisible(visible,restart);return _get2(ClipDrawable.prototype.__proto__||Object.getPrototypeOf(ClipDrawable.prototype),'setVisible',this).call(this,visible,restart);}},{key:'setAlpha',value:function setAlpha(alpha){this.mClipState.mDrawable.setAlpha(alpha);}},{key:'getAlpha',value:function getAlpha(){return this.mClipState.mDrawable.getAlpha();}},{key:'getOpacity',value:function getOpacity(){return this.mClipState.mDrawable.getOpacity();}},{key:'isStateful',value:function isStateful(){return this.mClipState.mDrawable.isStateful();}},{key:'onStateChange',value:function onStateChange(state){return this.mClipState.mDrawable.setState(state);}},{key:'onLevelChange',value:function onLevelChange(level){this.mClipState.mDrawable.setLevel(level);this.invalidateSelf();return true;}},{key:'onBoundsChange',value:function onBoundsChange(bounds){this.mClipState.mDrawable.setBounds(bounds);}},{key:'draw',value:function draw(canvas){if(this.mClipState.mDrawable.getLevel()==0){return;}var r=this.mTmpRect;var bounds=this.getBounds();var level=this.getLevel();var w=bounds.width();var iw=0;if((this.mClipState.mOrientation&ClipDrawable.HORIZONTAL)!=0){w-=(w-iw)*(10000-level)/10000;}var h=bounds.height();var ih=0;if((this.mClipState.mOrientation&ClipDrawable.VERTICAL)!=0){h-=(h-ih)*(10000-level)/10000;}Gravity.apply(this.mClipState.mGravity,w,h,bounds,r);if(w>0&&h>0){canvas.save();canvas.clipRect(r);this.mClipState.mDrawable.draw(canvas);canvas.restore();}}},{key:'getIntrinsicWidth',value:function getIntrinsicWidth(){return this.mClipState.mDrawable.getIntrinsicWidth();}},{key:'getIntrinsicHeight',value:function getIntrinsicHeight(){return this.mClipState.mDrawable.getIntrinsicHeight();}},{key:'getConstantState',value:function getConstantState(){if(this.mClipState.canConstantState()){return this.mClipState;}return null;}}]);return ClipDrawable;}(Drawable);ClipDrawable.HORIZONTAL=1;ClipDrawable.VERTICAL=2;drawable_8.ClipDrawable=ClipDrawable;(function(ClipDrawable){var ClipState=function(){function ClipState(orig,owner){_classCallCheck(this,ClipState);this.mOrientation=0;this.mGravity=0;if(orig!=null){this.mDrawable=orig.mDrawable.getConstantState().newDrawable();this.mDrawable.setCallback(owner);this.mOrientation=orig.mOrientation;this.mGravity=orig.mGravity;this.mCheckedConstantState=this.mCanConstantState=true;}}_createClass(ClipState,[{key:'newDrawable',value:function newDrawable(){return new ClipDrawable(this);}},{key:'canConstantState',value:function canConstantState(){if(!this.mCheckedConstantState){this.mCanConstantState=this.mDrawable.getConstantState()!=null;this.mCheckedConstantState=true;}return this.mCanConstantState;}}]);return ClipState;}();ClipDrawable.ClipState=ClipState;})(ClipDrawable=drawable_8.ClipDrawable||(drawable_8.ClipDrawable={}));})(drawable=graphics.drawable||(graphics.drawable={}));})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Animatable=android.graphics.drawable.Animatable;var AnimationDrawable=android.graphics.drawable.AnimationDrawable;var LayerDrawable=android.graphics.drawable.LayerDrawable;var StateListDrawable=android.graphics.drawable.StateListDrawable;var ClipDrawable=android.graphics.drawable.ClipDrawable;var SynchronizedPool=android.util.Pools.SynchronizedPool;var Gravity=android.view.Gravity;var View=android.view.View;var AlphaAnimation=android.view.animation.AlphaAnimation;var Animation=android.view.animation.Animation;var LinearInterpolator=android.view.animation.LinearInterpolator;var Transformation=android.view.animation.Transformation;var ArrayList=java.util.ArrayList;var R=android.R;var NetDrawable=androidui.image.NetDrawable;var ProgressBar=function(_View3){_inherits(ProgressBar,_View3);function ProgressBar(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.progressBarStyle;_classCallCheck(this,ProgressBar);var _this130=_possibleConstructorReturn(this,(ProgressBar.__proto__||Object.getPrototypeOf(ProgressBar)).call(this,context,bindElement,defStyle));_this130.mMinWidth=0;_this130.mMaxWidth=0;_this130.mMinHeight=0;_this130.mMaxHeight=0;_this130.mProgress=0;_this130.mSecondaryProgress=0;_this130.mMax=0;_this130.mBehavior=0;_this130.mDuration=0;_this130.mMirrorForRtl=false;_this130.mRefreshData=new ArrayList();_this130.initProgressBar();var a=context.obtainStyledAttributes(bindElement,defStyle);_this130.mNoInvalidate=true;var drawable=a.getDrawable('progressDrawable');if(drawable!=null){drawable=_this130.tileify(drawable,false);_this130.setProgressDrawable(drawable);}_this130.mDuration=a.getInt('indeterminateDuration',_this130.mDuration);_this130.mMinWidth=a.getDimensionPixelSize('minWidth',_this130.mMinWidth);_this130.mMaxWidth=a.getDimensionPixelSize('maxWidth',_this130.mMaxWidth);_this130.mMinHeight=a.getDimensionPixelSize('minHeight',_this130.mMinHeight);_this130.mMaxHeight=a.getDimensionPixelSize('maxHeight',_this130.mMaxHeight);if(a.getAttrValue('indeterminateBehavior')=='cycle'){_this130.mBehavior=Animation.REVERSE;}else{_this130.mBehavior=Animation.RESTART;}_this130.setMax(a.getInt('max',_this130.mMax));_this130.setProgress(a.getInt('progress',_this130.mProgress));_this130.setSecondaryProgress(a.getInt('secondaryProgress',_this130.mSecondaryProgress));drawable=a.getDrawable('indeterminateDrawable');if(drawable!=null){drawable=_this130.tileifyIndeterminate(drawable);_this130.setIndeterminateDrawable(drawable);}_this130.mOnlyIndeterminate=a.getBoolean('indeterminateOnly',_this130.mOnlyIndeterminate);_this130.mNoInvalidate=false;_this130.setIndeterminate(_this130.mOnlyIndeterminate||a.getBoolean('indeterminate',_this130.mIndeterminate));_this130.mMirrorForRtl=a.getBoolean('mirrorForRtl',_this130.mMirrorForRtl);a.recycle();return _this130;}_createClass(ProgressBar,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'createClassAttrBinder',this).call(this).set('progressDrawable',{setter:function setter(v,value,a){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=v.tileify(drawable,false);v.setProgressDrawable(drawable);}},getter:function getter(v){return v.getProgressDrawable();}}).set('indeterminateDuration',{setter:function setter(v,value,a){v.mDuration=Math.floor(a.parseInt(value,v.mDuration));},getter:function getter(v){return v.mDuration;}}).set('minWidth',{setter:function setter(v,value,a){v.mMinWidth=Math.floor(a.parseNumberPixelSize(value,v.mMinWidth));},getter:function getter(v){return v.mMinWidth;}}).set('maxWidth',{setter:function setter(v,value,a){v.mMaxWidth=Math.floor(a.parseNumberPixelSize(value,v.mMaxWidth));},getter:function getter(v){return v.mMaxWidth;}}).set('minHeight',{setter:function setter(v,value,a){v.mMinHeight=Math.floor(a.parseNumberPixelSize(value,v.mMinHeight));},getter:function getter(v){return v.mMinHeight;}}).set('maxHeight',{setter:function setter(v,value,a){v.mMaxHeight=Math.floor(a.parseNumberPixelSize(value,v.mMaxHeight));},getter:function getter(v){return v.mMaxHeight;}}).set('indeterminateBehavior',{setter:function setter(v,value,a){if(Number.isInteger(Number.parseInt(value))){v.mBehavior=Number.parseInt(value);}else{if(value+''.toLowerCase()=='cycle'){v.mBehavior=Animation.REVERSE;}else{v.mBehavior=Animation.RESTART;}}},getter:function getter(v){return v.mBehavior;}}).set('interpolator',{setter:function setter(v,value,a){},getter:function getter(v){}}).set('max',{setter:function setter(v,value,a){v.setMax(a.parseInt(value,v.mMax));},getter:function getter(v){return v.mMax;}}).set('progress',{setter:function setter(v,value,a){v.setProgress(a.parseInt(value,v.mProgress));},getter:function getter(v){return v.mProgress;}}).set('secondaryProgress',{setter:function setter(v,value,a){v.setSecondaryProgress(a.parseInt(value,v.mSecondaryProgress));},getter:function getter(v){return v.mSecondaryProgress;}}).set('indeterminateDrawable',{setter:function setter(v,value,a){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=v.tileifyIndeterminate(drawable);v.setIndeterminateDrawable(drawable);}},getter:function getter(v){return v.mIndeterminateDrawable;}}).set('indeterminateOnly',{setter:function setter(v,value,a){v.mOnlyIndeterminate=a.parseBoolean(value,v.mOnlyIndeterminate);v.setIndeterminate(v.mOnlyIndeterminate||v.mIndeterminate);},getter:function getter(v){return v.mOnlyIndeterminate;}}).set('indeterminate',{setter:function setter(v,value,a){v.setIndeterminate(v.mOnlyIndeterminate||a.parseBoolean(value,v.mIndeterminate));},getter:function getter(v){return v.mIndeterminate;}});}},{key:'tileify',value:function tileify(drawable,clip){if(drawable instanceof LayerDrawable){var _background2=drawable;var N=_background2.getNumberOfLayers();var outDrawables=new Array(N);var drawableChange=false;for(var i=0;i0?progress/this.mMax:0;var d=this.mCurrentDrawable;if(d!=null){var progressDrawable=null;if(d instanceof LayerDrawable){progressDrawable=d.findDrawableByLayerId(id);}var level=Math.floor(scale*ProgressBar.MAX_LEVEL);(progressDrawable!=null?progressDrawable:d).setLevel(level);}else{this.invalidate();}if(callBackToApp&&id==R.id.progress){this.onProgressRefresh(scale,fromUser);}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){}},{key:'refreshProgress',value:function refreshProgress(id,progress,fromUser){this.doRefreshProgress(id,progress,fromUser,true);}},{key:'setProgress',value:function setProgress(progress){var fromUser=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(this.mIndeterminate){return;}if(progress<0){progress=0;}if(progress>this.mMax){progress=this.mMax;}if(progress!=this.mProgress){this.mProgress=progress;this.refreshProgress(R.id.progress,this.mProgress,fromUser);}}},{key:'setSecondaryProgress',value:function setSecondaryProgress(secondaryProgress){if(this.mIndeterminate){return;}if(secondaryProgress<0){secondaryProgress=0;}if(secondaryProgress>this.mMax){secondaryProgress=this.mMax;}if(secondaryProgress!=this.mSecondaryProgress){this.mSecondaryProgress=secondaryProgress;this.refreshProgress(R.id.secondaryProgress,this.mSecondaryProgress,false);}}},{key:'getProgress',value:function getProgress(){return this.mIndeterminate?0:this.mProgress;}},{key:'getSecondaryProgress',value:function getSecondaryProgress(){return this.mIndeterminate?0:this.mSecondaryProgress;}},{key:'getMax',value:function getMax(){return this.mMax;}},{key:'setMax',value:function setMax(max){if(max<0){max=0;}if(max!=this.mMax){this.mMax=max;this.postInvalidate();if(this.mProgress>max){this.mProgress=max;}this.refreshProgress(R.id.progress,this.mProgress,false);}}},{key:'incrementProgressBy',value:function incrementProgressBy(diff){this.setProgress(this.mProgress+diff);}},{key:'incrementSecondaryProgressBy',value:function incrementSecondaryProgressBy(diff){this.setSecondaryProgress(this.mSecondaryProgress+diff);}},{key:'startAnimation',value:function startAnimation(){if(this.getVisibility()!=ProgressBar.VISIBLE){return;}if(Animatable.isImpl(this.mIndeterminateDrawable)){this.mShouldStartAnimationDrawable=true;this.mHasAnimation=false;}else{this.mHasAnimation=true;if(this.mInterpolator==null){this.mInterpolator=new LinearInterpolator();}if(this.mTransformation==null){this.mTransformation=new Transformation();}else{this.mTransformation.clear();}if(this.mAnimation==null){this.mAnimation=new AlphaAnimation(0.0,1.0);}else{this.mAnimation.reset();}this.mAnimation.setRepeatMode(this.mBehavior);this.mAnimation.setRepeatCount(Animation.INFINITE);this.mAnimation.setDuration(this.mDuration);this.mAnimation.setInterpolator(this.mInterpolator);this.mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME);}this.postInvalidate();}},{key:'stopAnimation',value:function stopAnimation(){this.mHasAnimation=false;if(Animatable.isImpl(this.mIndeterminateDrawable)){this.mIndeterminateDrawable.stop();this.mShouldStartAnimationDrawable=false;}this.postInvalidate();}},{key:'setInterpolator',value:function setInterpolator(interpolator){this.mInterpolator=interpolator;}},{key:'getInterpolator',value:function getInterpolator(){return this.mInterpolator;}},{key:'setVisibility',value:function setVisibility(v){if(this.getVisibility()!=v){_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'setVisibility',this).call(this,v);if(this.mIndeterminate){if(v==ProgressBar.GONE||v==ProgressBar.INVISIBLE){this.stopAnimation();}else{this.startAnimation();}}}}},{key:'onVisibilityChanged',value:function onVisibilityChanged(changedView,visibility){_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'onVisibilityChanged',this).call(this,changedView,visibility);if(this.mIndeterminate){if(visibility==ProgressBar.GONE||visibility==ProgressBar.INVISIBLE){this.stopAnimation();}else{this.startAnimation();}}}},{key:'invalidateDrawable',value:function invalidateDrawable(dr){if(!this.mInDrawing){if(this.verifyDrawable(dr)){var dirty=dr.getBounds();var scrollX=this.mScrollX+this.mPaddingLeft;var scrollY=this.mScrollY+this.mPaddingTop;this.invalidate(dirty.left+scrollX,dirty.top+scrollY,dirty.right+scrollX,dirty.bottom+scrollY);}else{_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'invalidateDrawable',this).call(this,dr);}}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){this.updateDrawableBounds(w,h);}},{key:'updateDrawableBounds',value:function updateDrawableBounds(w,h){w-=this.mPaddingRight+this.mPaddingLeft;h-=this.mPaddingTop+this.mPaddingBottom;var right=w;var bottom=h;var top=0;var left=0;if(this.mIndeterminateDrawable!=null){if(this.mOnlyIndeterminate&&!(this.mIndeterminateDrawable instanceof AnimationDrawable)){var intrinsicWidth=this.mIndeterminateDrawable.getIntrinsicWidth();var intrinsicHeight=this.mIndeterminateDrawable.getIntrinsicHeight();var intrinsicAspect=intrinsicWidth/intrinsicHeight;var boundAspect=w/h;if(intrinsicAspect!=boundAspect){if(boundAspect>intrinsicAspect){var width=Math.floor(h*intrinsicAspect);left=(w-width)/2;right=left+width;}else{var height=Math.floor(w*(1/intrinsicAspect));top=(h-height)/2;bottom=top+height;}}}if(this.isLayoutRtl()&&this.mMirrorForRtl){var tempLeft=left;left=w-right;right=w-tempLeft;}this.mIndeterminateDrawable.setBounds(left,top,right,bottom);}if(this.mProgressDrawable!=null){this.mProgressDrawable.setBounds(0,0,right,bottom);}}},{key:'onDraw',value:function onDraw(canvas){_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'onDraw',this).call(this,canvas);var d=this.mCurrentDrawable;if(d!=null){canvas.save();if(this.isLayoutRtl()&&this.mMirrorForRtl){canvas.translate(this.getWidth()-this.mPaddingRight,this.mPaddingTop);canvas.scale(-1.0,1.0);}else{canvas.translate(this.mPaddingLeft,this.mPaddingTop);}var time=this.getDrawingTime();if(this.mHasAnimation){this.mAnimation.getTransformation(time,this.mTransformation);var scale=this.mTransformation.getAlpha();try{this.mInDrawing=true;d.setLevel(Math.floor(scale*ProgressBar.MAX_LEVEL));}finally{this.mInDrawing=false;}this.postInvalidateOnAnimation();}d.draw(canvas);canvas.restore();if(this.mShouldStartAnimationDrawable&&Animatable.isImpl(d)){d.start();this.mShouldStartAnimationDrawable=false;}}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var d=this.mCurrentDrawable;var dw=0;var dh=0;if(d!=null){dw=Math.max(this.mMinWidth,Math.min(this.mMaxWidth,d.getIntrinsicWidth()));dh=Math.max(this.mMinHeight,Math.min(this.mMaxHeight,d.getIntrinsicHeight()));}this.updateDrawableState();dw+=this.mPaddingLeft+this.mPaddingRight;dh+=this.mPaddingTop+this.mPaddingBottom;this.setMeasuredDimension(ProgressBar.resolveSizeAndState(dw,widthMeasureSpec,0),ProgressBar.resolveSizeAndState(dh,heightMeasureSpec,0));}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'drawableStateChanged',this).call(this);this.updateDrawableState();}},{key:'updateDrawableState',value:function updateDrawableState(){var state=this.getDrawableState();if(this.mProgressDrawable!=null&&this.mProgressDrawable.isStateful()){this.mProgressDrawable.setState(state);}if(this.mIndeterminateDrawable!=null&&this.mIndeterminateDrawable.isStateful()){this.mIndeterminateDrawable.setState(state);}}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){_get2(ProgressBar.prototype.__proto__||Object.getPrototypeOf(ProgressBar.prototype),'onAttachedToWindow',this).call(this);if(this.mIndeterminate){this.startAnimation();}if(this.mRefreshData!=null){{var count=this.mRefreshData.size();for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:android.R.attr.checkboxStyle;_classCallCheck(this,CheckBox);return _possibleConstructorReturn(this,(CheckBox.__proto__||Object.getPrototypeOf(CheckBox)).call(this,context,bindElement,defStyle));}return CheckBox;}(CompoundButton);widget.CheckBox=CheckBox;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var CompoundButton=android.widget.CompoundButton;var RadioButton=function(_CompoundButton2){_inherits(RadioButton,_CompoundButton2);function RadioButton(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.radiobuttonStyle;_classCallCheck(this,RadioButton);return _possibleConstructorReturn(this,(RadioButton.__proto__||Object.getPrototypeOf(RadioButton)).call(this,context,bindElement,defStyle));}_createClass(RadioButton,[{key:'toggle',value:function toggle(){if(!this.isChecked()){_get2(RadioButton.prototype.__proto__||Object.getPrototypeOf(RadioButton.prototype),'toggle',this).call(this);}}}]);return RadioButton;}(CompoundButton);widget.RadioButton=RadioButton;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var View=android.view.View;var LinearLayout=android.widget.LinearLayout;var RadioButton=android.widget.RadioButton;var RadioGroup=function(_LinearLayout2){_inherits(RadioGroup,_LinearLayout2);function RadioGroup(context,bindElement,defStyle){_classCallCheck(this,RadioGroup);var _this134=_possibleConstructorReturn(this,(RadioGroup.__proto__||Object.getPrototypeOf(RadioGroup)).call(this,context,bindElement,defStyle));_this134.mCheckedId=View.NO_ID;_this134.mProtectFromCheckedChange=false;var attributes=context.obtainStyledAttributes(bindElement,defStyle);var value=attributes.getString('checkedButton');if(value){_this134.mCheckedId=value;}var orientation=attributes.getString('orientation');if(orientation==='horizontal'){_this134.setOrientation(RadioGroup.HORIZONTAL);}else{_this134.setOrientation(RadioGroup.VERTICAL);}attributes.recycle();_this134.init();return _this134;}_createClass(RadioGroup,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(RadioGroup.prototype.__proto__||Object.getPrototypeOf(RadioGroup.prototype),'createClassAttrBinder',this).call(this).set('checkedButton',{setter:function setter(v,value){if(typeof value==='string'||value==null){v.setCheckedId(value);}}});}},{key:'init',value:function init(){this.mChildOnCheckedChangeListener=new RadioGroup.CheckedStateTracker(this);this.mPassThroughListener=new RadioGroup.PassThroughHierarchyChangeListener(this);_get2(RadioGroup.prototype.__proto__||Object.getPrototypeOf(RadioGroup.prototype),'setOnHierarchyChangeListener',this).call(this,this.mPassThroughListener);}},{key:'setOnHierarchyChangeListener',value:function setOnHierarchyChangeListener(listener){this.mPassThroughListener.mOnHierarchyChangeListener=listener;}},{key:'onFinishInflate',value:function onFinishInflate(){_get2(RadioGroup.prototype.__proto__||Object.getPrototypeOf(RadioGroup.prototype),'onFinishInflate',this).call(this);if(this.mCheckedId!=null){this.mProtectFromCheckedChange=true;this.setCheckedStateForView(this.mCheckedId,true);this.mProtectFromCheckedChange=false;this.setCheckedId(this.mCheckedId);}}},{key:'addView',value:function addView(){var _get6;for(var _len31=arguments.length,args=Array(_len31),_key32=0;_key32<_len31;_key32++){args[_key32]=arguments[_key32];}var child=args[0];if(child instanceof RadioButton){var button=child;if(button.isChecked()){this.mProtectFromCheckedChange=true;if(this.mCheckedId!=null){this.setCheckedStateForView(this.mCheckedId,false);}this.mProtectFromCheckedChange=false;this.setCheckedId(button.getId());}}(_get6=_get2(RadioGroup.prototype.__proto__||Object.getPrototypeOf(RadioGroup.prototype),'addView',this)).call.apply(_get6,[this].concat(args));}},{key:'check',value:function check(id){if(id!=null&&id==this.mCheckedId){return;}if(this.mCheckedId!=null){this.setCheckedStateForView(this.mCheckedId,false);}if(id!=null){this.setCheckedStateForView(id,true);}this.setCheckedId(id);}},{key:'setCheckedId',value:function setCheckedId(id){this.mCheckedId=id;if(this.mOnCheckedChangeListener!=null){this.mOnCheckedChangeListener.onCheckedChanged(this,this.mCheckedId);}}},{key:'setCheckedStateForView',value:function setCheckedStateForView(viewId,checked){var checkedView=this.findViewById(viewId);if(checkedView!=null&&checkedView instanceof RadioButton){checkedView.setChecked(checked);}}},{key:'getCheckedRadioButtonId',value:function getCheckedRadioButtonId(){return this.mCheckedId;}},{key:'clearCheck',value:function clearCheck(){this.check(null);}},{key:'setOnCheckedChangeListener',value:function setOnCheckedChangeListener(listener){this.mOnCheckedChangeListener=listener;}},{key:'generateLayoutParamsFromAttr',value:function generateLayoutParamsFromAttr(attrs){return new RadioGroup.LayoutParams(this.getContext(),attrs);}},{key:'checkLayoutParams',value:function checkLayoutParams(p){return p instanceof RadioGroup.LayoutParams;}},{key:'generateDefaultLayoutParams',value:function generateDefaultLayoutParams(){return new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,RadioGroup.LayoutParams.WRAP_CONTENT);}}]);return RadioGroup;}(LinearLayout);widget.RadioGroup=RadioGroup;(function(RadioGroup){var LayoutParams=function(_LinearLayout$LayoutP){_inherits(LayoutParams,_LinearLayout$LayoutP);function LayoutParams(){_classCallCheck(this,LayoutParams);return _possibleConstructorReturn(this,(LayoutParams.__proto__||Object.getPrototypeOf(LayoutParams)).apply(this,arguments));}_createClass(LayoutParams,[{key:'setBaseAttributes',value:function setBaseAttributes(a,widthAttr,heightAttr){if(a.hasValue(widthAttr)){this.width=a.getLayoutDimension(widthAttr,LayoutParams.WRAP_CONTENT);}else{this.width=LayoutParams.WRAP_CONTENT;}if(a.hasValue(heightAttr)){this.height=a.getLayoutDimension(heightAttr,LayoutParams.WRAP_CONTENT);}else{this.height=LayoutParams.WRAP_CONTENT;}}}]);return LayoutParams;}(LinearLayout.LayoutParams);RadioGroup.LayoutParams=LayoutParams;var CheckedStateTracker=function(){function CheckedStateTracker(arg){_classCallCheck(this,CheckedStateTracker);this._RadioGroup_this=arg;}_createClass(CheckedStateTracker,[{key:'onCheckedChanged',value:function onCheckedChanged(buttonView,isChecked){if(this._RadioGroup_this.mProtectFromCheckedChange){return;}this._RadioGroup_this.mProtectFromCheckedChange=true;if(this._RadioGroup_this.mCheckedId!=null){this._RadioGroup_this.setCheckedStateForView(this._RadioGroup_this.mCheckedId,false);}this._RadioGroup_this.mProtectFromCheckedChange=false;var id=buttonView.getId();this._RadioGroup_this.setCheckedId(id);}}]);return CheckedStateTracker;}();RadioGroup.CheckedStateTracker=CheckedStateTracker;var PassThroughHierarchyChangeListener=function(){function PassThroughHierarchyChangeListener(arg){_classCallCheck(this,PassThroughHierarchyChangeListener);this._RadioGroup_this=arg;}_createClass(PassThroughHierarchyChangeListener,[{key:'onChildViewAdded',value:function onChildViewAdded(parent,child){if(parent==this._RadioGroup_this&&child instanceof RadioButton){var id=child.getId();if(id==View.NO_ID){id='hash'+child.hashCode();child.setId(id);}child.setOnCheckedChangeWidgetListener(this._RadioGroup_this.mChildOnCheckedChangeListener);}if(this.mOnHierarchyChangeListener!=null){this.mOnHierarchyChangeListener.onChildViewAdded(parent,child);}}},{key:'onChildViewRemoved',value:function onChildViewRemoved(parent,child){if(parent==this._RadioGroup_this&&child instanceof RadioButton){child.setOnCheckedChangeWidgetListener(null);}if(this.mOnHierarchyChangeListener!=null){this.mOnHierarchyChangeListener.onChildViewRemoved(parent,child);}}}]);return PassThroughHierarchyChangeListener;}();RadioGroup.PassThroughHierarchyChangeListener=PassThroughHierarchyChangeListener;})(RadioGroup=widget.RadioGroup||(widget.RadioGroup={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Gravity=android.view.Gravity;var TextView=android.widget.TextView;var View=android.view.View;var CheckedTextView=function(_TextView2){_inherits(CheckedTextView,_TextView2);function CheckedTextView(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.checkedTextViewStyle;_classCallCheck(this,CheckedTextView);var _this136=_possibleConstructorReturn(this,(CheckedTextView.__proto__||Object.getPrototypeOf(CheckedTextView)).call(this,context,bindElement,defStyle));_this136.mCheckMarkResource=0;_this136.mBasePadding=0;_this136.mCheckMarkWidth=0;var a=context.obtainStyledAttributes(bindElement,defStyle);var d=a.getDrawable('checkMark');if(d!=null){_this136.setCheckMarkDrawable(d);}var checked=a.getBoolean('checked',false);_this136.setChecked(checked);a.recycle();return _this136;}_createClass(CheckedTextView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(CheckedTextView.prototype.__proto__||Object.getPrototypeOf(CheckedTextView.prototype),'createClassAttrBinder',this).call(this).set('checkMark',{setter:function setter(v,value,attrBinder){v.setCheckMarkDrawable(attrBinder.parseDrawable(value));},getter:function getter(v){return v.getCheckMarkDrawable();}}).set('checked',{setter:function setter(v,value,attrBinder){v.setChecked(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.isChecked();}});}},{key:'toggle',value:function toggle(){this.setChecked(!this.mChecked);}},{key:'isChecked',value:function isChecked(){return this.mChecked;}},{key:'setChecked',value:function setChecked(checked){if(this.mChecked!=checked){this.mChecked=checked;this.refreshDrawableState();}}},{key:'setCheckMarkDrawable',value:function setCheckMarkDrawable(d){if(this.mCheckMarkDrawable!=null){this.mCheckMarkDrawable.setCallback(null);this.unscheduleDrawable(this.mCheckMarkDrawable);}this.mNeedRequestlayout=d!=this.mCheckMarkDrawable;if(d!=null){d.setCallback(this);d.setVisible(this.getVisibility()==CheckedTextView.VISIBLE,false);d.setState(CheckedTextView.CHECKED_STATE_SET);this.setMinHeight(d.getIntrinsicHeight());this.mCheckMarkWidth=d.getIntrinsicWidth();d.setState(this.getDrawableState());}else{this.mCheckMarkWidth=0;}this.mCheckMarkDrawable=d;this.resolvePadding();}},{key:'getCheckMarkDrawable',value:function getCheckMarkDrawable(){return this.mCheckMarkDrawable;}},{key:'setPadding',value:function setPadding(left,top,right,bottom){_get2(CheckedTextView.prototype.__proto__||Object.getPrototypeOf(CheckedTextView.prototype),'setPadding',this).call(this,left,top,right,bottom);this.setBasePadding(this.isLayoutRtl());}},{key:'updatePadding',value:function updatePadding(){var newPadding=this.mCheckMarkDrawable!=null?this.mCheckMarkWidth+this.mBasePadding:this.mBasePadding;if(this.isLayoutRtl()){this.mNeedRequestlayout=this.mPaddingLeft!=newPadding||this.mNeedRequestlayout;this.mPaddingLeft=newPadding;}else{this.mNeedRequestlayout=this.mPaddingRight!=newPadding||this.mNeedRequestlayout;this.mPaddingRight=newPadding;}if(this.mNeedRequestlayout){this.requestLayout();this.mNeedRequestlayout=false;}}},{key:'setBasePadding',value:function setBasePadding(isLayoutRtl){if(isLayoutRtl){this.mBasePadding=this.mPaddingLeft;}else{this.mBasePadding=this.mPaddingRight;}}},{key:'onDraw',value:function onDraw(canvas){_get2(CheckedTextView.prototype.__proto__||Object.getPrototypeOf(CheckedTextView.prototype),'onDraw',this).call(this,canvas);var checkMarkDrawable=this.mCheckMarkDrawable;if(checkMarkDrawable!=null){var verticalGravity=this.getGravity()&Gravity.VERTICAL_GRAVITY_MASK;var height=checkMarkDrawable.getIntrinsicHeight();var _y17=0;switch(verticalGravity){case Gravity.BOTTOM:_y17=this.getHeight()-height;break;case Gravity.CENTER_VERTICAL:_y17=(this.getHeight()-height)/2;break;}var isLayoutRtl=this.isLayoutRtl();var width=this.getWidth();var top=_y17;var bottom=top+height;var left=void 0;var right=void 0;if(isLayoutRtl){left=this.mBasePadding;right=left+this.mCheckMarkWidth;}else{right=width-this.mBasePadding;left=right-this.mCheckMarkWidth;}checkMarkDrawable.setBounds(this.mScrollX+left,top,this.mScrollX+right,bottom);checkMarkDrawable.draw(canvas);}}},{key:'onCreateDrawableState',value:function onCreateDrawableState(extraSpace){var drawableState=_get2(CheckedTextView.prototype.__proto__||Object.getPrototypeOf(CheckedTextView.prototype),'onCreateDrawableState',this).call(this,extraSpace+1);if(this.isChecked()){CheckedTextView.mergeDrawableStates(drawableState,CheckedTextView.CHECKED_STATE_SET);}return drawableState;}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(CheckedTextView.prototype.__proto__||Object.getPrototypeOf(CheckedTextView.prototype),'drawableStateChanged',this).call(this);if(this.mCheckMarkDrawable!=null){var myDrawableState=this.getDrawableState();this.mCheckMarkDrawable.setState(myDrawableState);this.invalidate();}}}]);return CheckedTextView;}(TextView);CheckedTextView.CHECKED_STATE_SET=[View.VIEW_STATE_CHECKED];widget.CheckedTextView=CheckedTextView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var Integer=java.lang.Integer;var ProgressBar=android.widget.ProgressBar;var AbsSeekBar=function(_ProgressBar){_inherits(AbsSeekBar,_ProgressBar);function AbsSeekBar(context,bindElement,defStyle){_classCallCheck(this,AbsSeekBar);var _this137=_possibleConstructorReturn(this,(AbsSeekBar.__proto__||Object.getPrototypeOf(AbsSeekBar)).call(this,context,bindElement,defStyle));_this137.mThumbOffset=0;_this137.mTouchProgressOffset=0;_this137.mIsUserSeekable=true;_this137.mKeyProgressIncrement=1;_this137.mDisabledAlpha=0;_this137.mTouchDownX=0;var a=context.obtainStyledAttributes(bindElement,defStyle);var thumb=a.getDrawable('thumb');_this137.setThumb(thumb);var thumbOffset=a.getDimensionPixelOffset('thumbOffset',_this137.getThumbOffset());_this137.setThumbOffset(thumbOffset);a.recycle();a=context.obtainStyledAttributes(bindElement,defStyle);_this137.mDisabledAlpha=a.getFloat('disabledAlpha',0.5);a.recycle();return _this137;}_createClass(AbsSeekBar,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'createClassAttrBinder',this).call(this).set('thumb',{setter:function setter(v,value,attrBinder){v.setThumb(attrBinder.parseDrawable(value));},getter:function getter(v){return v.mThumb;}}).set('thumbOffset',{setter:function setter(v,value,attrBinder){v.setThumbOffset(attrBinder.parseNumberPixelOffset(value));},getter:function getter(v){return v.mThumbOffset;}}).set('disabledAlpha',{setter:function setter(v,value,attrBinder){v.mDisabledAlpha=attrBinder.parseFloat(value,0.5);},getter:function getter(v){return v.mDisabledAlpha;}});}},{key:'setThumb',value:function setThumb(thumb){var needUpdate=void 0;if(this.mThumb!=null&&thumb!=this.mThumb){this.mThumb.setCallback(null);needUpdate=true;}else{needUpdate=false;}if(thumb!=null){thumb.setCallback(this);this.mThumbOffset=thumb.getIntrinsicWidth()/2;if(needUpdate&&(thumb.getIntrinsicWidth()!=this.mThumb.getIntrinsicWidth()||thumb.getIntrinsicHeight()!=this.mThumb.getIntrinsicHeight())){this.requestLayout();}}this.mThumb=thumb;this.invalidate();if(needUpdate){this.updateThumbPos(this.getWidth(),this.getHeight());if(thumb!=null&&thumb.isStateful()){var state=this.getDrawableState();thumb.setState(state);}}}},{key:'getThumb',value:function getThumb(){return this.mThumb;}},{key:'getThumbOffset',value:function getThumbOffset(){return this.mThumbOffset;}},{key:'setThumbOffset',value:function setThumbOffset(thumbOffset){this.mThumbOffset=thumbOffset;this.invalidate();}},{key:'setKeyProgressIncrement',value:function setKeyProgressIncrement(increment){this.mKeyProgressIncrement=increment<0?-increment:increment;}},{key:'getKeyProgressIncrement',value:function getKeyProgressIncrement(){return this.mKeyProgressIncrement;}},{key:'setMax',value:function setMax(max){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'setMax',this).call(this,max);if(this.mKeyProgressIncrement==0||this.getMax()/this.mKeyProgressIncrement>20){this.setKeyProgressIncrement(Math.max(1,Math.round(this.getMax()/20)));}}},{key:'verifyDrawable',value:function verifyDrawable(who){return who==this.mThumb||_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'verifyDrawable',this).call(this,who);}},{key:'jumpDrawablesToCurrentState',value:function jumpDrawablesToCurrentState(){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'jumpDrawablesToCurrentState',this).call(this);if(this.mThumb!=null)this.mThumb.jumpToCurrentState();}},{key:'drawableStateChanged',value:function drawableStateChanged(){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'drawableStateChanged',this).call(this);var progressDrawable=this.getProgressDrawable();if(progressDrawable!=null){progressDrawable.setAlpha(this.isEnabled()?AbsSeekBar.NO_ALPHA:Math.floor(AbsSeekBar.NO_ALPHA*this.mDisabledAlpha));}if(this.mThumb!=null&&this.mThumb.isStateful()){var state=this.getDrawableState();this.mThumb.setState(state);}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);var thumb=this.mThumb;if(thumb!=null){this.setThumbPos(this.getWidth(),thumb,scale,Integer.MIN_VALUE);this.invalidate();}}},{key:'onSizeChanged',value:function onSizeChanged(w,h,oldw,oldh){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'onSizeChanged',this).call(this,w,h,oldw,oldh);this.updateThumbPos(w,h);}},{key:'updateThumbPos',value:function updateThumbPos(w,h){var d=this.getCurrentDrawable();var thumb=this.mThumb;var thumbHeight=thumb==null?0:thumb.getIntrinsicHeight();var trackHeight=Math.min(this.mMaxHeight,h-this.mPaddingTop-this.mPaddingBottom);var max=this.getMax();var scale=max>0?this.getProgress()/max:0;if(thumbHeight>trackHeight){if(thumb!=null){this.setThumbPos(w,thumb,scale,0);}var gapForCenteringTrack=(thumbHeight-trackHeight)/2;if(d!=null){d.setBounds(0,gapForCenteringTrack,w-this.mPaddingRight-this.mPaddingLeft,h-this.mPaddingBottom-gapForCenteringTrack-this.mPaddingTop);}}else{if(d!=null){d.setBounds(0,0,w-this.mPaddingRight-this.mPaddingLeft,h-this.mPaddingBottom-this.mPaddingTop);}var gap=(trackHeight-thumbHeight)/2;if(thumb!=null){this.setThumbPos(w,thumb,scale,gap);}}}},{key:'setThumbPos',value:function setThumbPos(w,thumb,scale,gap){var available=w-this.mPaddingLeft-this.mPaddingRight;var thumbWidth=thumb.getIntrinsicWidth();var thumbHeight=thumb.getIntrinsicHeight();available-=thumbWidth;available+=this.mThumbOffset*2;var thumbPos=Math.floor(scale*available);var topBound=void 0,bottomBound=void 0;if(gap==Integer.MIN_VALUE){var oldBounds=thumb.getBounds();topBound=oldBounds.top;bottomBound=oldBounds.bottom;}else{topBound=gap;bottomBound=gap+thumbHeight;}var left=this.isLayoutRtl()&&this.mMirrorForRtl?available-thumbPos:thumbPos;thumb.setBounds(left,topBound,left+thumbWidth,bottomBound);}},{key:'onDraw',value:function onDraw(canvas){_get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'onDraw',this).call(this,canvas);if(this.mThumb!=null){canvas.save();canvas.translate(this.mPaddingLeft-this.mThumbOffset,this.mPaddingTop);this.mThumb.draw(canvas);canvas.restore();}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var d=this.getCurrentDrawable();var thumbHeight=this.mThumb==null?0:this.mThumb.getIntrinsicHeight();var dw=0;var dh=0;if(d!=null){dw=Math.max(this.mMinWidth,Math.min(this.mMaxWidth,d.getIntrinsicWidth()));dh=Math.max(this.mMinHeight,Math.min(this.mMaxHeight,d.getIntrinsicHeight()));dh=Math.max(thumbHeight,dh);}dw+=this.mPaddingLeft+this.mPaddingRight;dh+=this.mPaddingTop+this.mPaddingBottom;this.setMeasuredDimension(AbsSeekBar.resolveSizeAndState(dw,widthMeasureSpec,0),AbsSeekBar.resolveSizeAndState(dh,heightMeasureSpec,0));}},{key:'onTouchEvent',value:function onTouchEvent(event){if(!this.mIsUserSeekable||!this.isEnabled()){return false;}switch(event.getAction()){case MotionEvent.ACTION_DOWN:if(this.isInScrollingContainer()){this.mTouchDownX=event.getX();}else{this.setPressed(true);if(this.mThumb!=null){this.invalidate(this.mThumb.getBounds());}this.onStartTrackingTouch();this.trackTouchEvent(event);this.attemptClaimDrag();}break;case MotionEvent.ACTION_MOVE:if(this.mIsDragging){this.trackTouchEvent(event);}else{var _x205=event.getX();if(Math.abs(_x205-this.mTouchDownX)>this.mTouchSlop){this.setPressed(true);if(this.mThumb!=null){this.invalidate(this.mThumb.getBounds());}this.onStartTrackingTouch();this.trackTouchEvent(event);this.attemptClaimDrag();}}break;case MotionEvent.ACTION_UP:if(this.mIsDragging){this.trackTouchEvent(event);this.onStopTrackingTouch();this.setPressed(false);}else{this.onStartTrackingTouch();this.trackTouchEvent(event);this.onStopTrackingTouch();}this.invalidate();break;case MotionEvent.ACTION_CANCEL:if(this.mIsDragging){this.onStopTrackingTouch();this.setPressed(false);}this.invalidate();break;}return true;}},{key:'trackTouchEvent',value:function trackTouchEvent(event){var width=this.getWidth();var available=width-this.mPaddingLeft-this.mPaddingRight;var x=Math.floor(event.getX());var scale=void 0;var progress=0;if(this.isLayoutRtl()&&this.mMirrorForRtl){if(x>width-this.mPaddingRight){scale=0.0;}else if(xwidth-this.mPaddingRight){scale=1.0;}else{scale=(x-this.mPaddingLeft)/available;progress=this.mTouchProgressOffset;}}var max=this.getMax();progress+=scale*max;this.setProgress(Math.floor(progress),true);}},{key:'attemptClaimDrag',value:function attemptClaimDrag(){if(this.mParent!=null){this.mParent.requestDisallowInterceptTouchEvent(true);}}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){this.mIsDragging=true;}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){this.mIsDragging=false;}},{key:'onKeyChange',value:function onKeyChange(){}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.isEnabled()){var progress=this.getProgress();switch(keyCode){case KeyEvent.KEYCODE_DPAD_LEFT:if(progress<=0)break;this.setProgress(progress-this.mKeyProgressIncrement,true);this.onKeyChange();return true;case KeyEvent.KEYCODE_DPAD_RIGHT:if(progress>=this.getMax())break;this.setProgress(progress+this.mKeyProgressIncrement,true);this.onKeyChange();return true;}}return _get2(AbsSeekBar.prototype.__proto__||Object.getPrototypeOf(AbsSeekBar.prototype),'onKeyDown',this).call(this,keyCode,event);}}]);return AbsSeekBar;}(ProgressBar);AbsSeekBar.NO_ALPHA=0xFF;widget.AbsSeekBar=AbsSeekBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var AbsSeekBar=android.widget.AbsSeekBar;var SeekBar=function(_AbsSeekBar){_inherits(SeekBar,_AbsSeekBar);function SeekBar(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.seekBarStyle;_classCallCheck(this,SeekBar);return _possibleConstructorReturn(this,(SeekBar.__proto__||Object.getPrototypeOf(SeekBar)).call(this,context,bindElement,defStyle));}_createClass(SeekBar,[{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(SeekBar.prototype.__proto__||Object.getPrototypeOf(SeekBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onProgressChanged(this,this.getProgress(),fromUser);}}},{key:'setOnSeekBarChangeListener',value:function setOnSeekBarChangeListener(l){this.mOnSeekBarChangeListener=l;}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){_get2(SeekBar.prototype.__proto__||Object.getPrototypeOf(SeekBar.prototype),'onStartTrackingTouch',this).call(this);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onStartTrackingTouch(this);}}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){_get2(SeekBar.prototype.__proto__||Object.getPrototypeOf(SeekBar.prototype),'onStopTrackingTouch',this).call(this);if(this.mOnSeekBarChangeListener!=null){this.mOnSeekBarChangeListener.onStopTrackingTouch(this);}}}]);return SeekBar;}(AbsSeekBar);widget.SeekBar=SeekBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var AbsSeekBar=android.widget.AbsSeekBar;var RatingBar=function(_AbsSeekBar2){_inherits(RatingBar,_AbsSeekBar2);function RatingBar(context,bindElement){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.ratingBarStyle;_classCallCheck(this,RatingBar);var _this139=_possibleConstructorReturn(this,(RatingBar.__proto__||Object.getPrototypeOf(RatingBar)).call(this,context,bindElement,defStyle));_this139.mNumStars=5;_this139.mProgressOnStartTracking=0;var a=context.obtainStyledAttributes(bindElement,defStyle);var numStars=a.getInt('numStars',_this139.mNumStars);_this139.setIsIndicator(a.getBoolean('isIndicator',!_this139.mIsUserSeekable));var rating=a.getFloat('rating',-1);var stepSize=a.getFloat('stepSize',-1);a.recycle();if(numStars>0&&numStars!=_this139.mNumStars){_this139.setNumStars(numStars);}if(stepSize>=0){_this139.setStepSize(stepSize);}else{_this139.setStepSize(0.5);}if(rating>=0){_this139.setRating(rating);}_this139.mTouchProgressOffset=1.1;return _this139;}_createClass(RatingBar,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'createClassAttrBinder',this).call(this).set('numStars',{setter:function setter(v,value,a){v.setNumStars(a.parseInt(value,v.mNumStars));},getter:function getter(v){return v.mNumStars;}}).set('isIndicator',{setter:function setter(v,value,a){v.setIsIndicator(a.parseBoolean(value,!v.mIsUserSeekable));},getter:function getter(v){return v.isIndicator();}}).set('stepSize',{setter:function setter(v,value,a){v.setStepSize(a.parseFloat(value,0.5));},getter:function getter(v){return v.getStepSize();}}).set('rating',{setter:function setter(v,value,a){v.setRating(a.parseFloat(value,v.getRating()));},getter:function getter(v){return v.getRating();}});}},{key:'setOnRatingBarChangeListener',value:function setOnRatingBarChangeListener(listener){this.mOnRatingBarChangeListener=listener;}},{key:'getOnRatingBarChangeListener',value:function getOnRatingBarChangeListener(){return this.mOnRatingBarChangeListener;}},{key:'setIsIndicator',value:function setIsIndicator(isIndicator){this.mIsUserSeekable=!isIndicator;this.setFocusable(!isIndicator);}},{key:'isIndicator',value:function isIndicator(){return!this.mIsUserSeekable;}},{key:'setNumStars',value:function setNumStars(numStars){if(numStars<=0){return;}var step=this.getStepSize();this.mNumStars=numStars;this.setStepSize(step);this.requestLayout();}},{key:'getNumStars',value:function getNumStars(){return this.mNumStars;}},{key:'setRating',value:function setRating(rating){this.setProgress(Math.round(rating*this.getProgressPerStar()));}},{key:'getRating',value:function getRating(){return this.getProgress()/this.getProgressPerStar();}},{key:'setStepSize',value:function setStepSize(stepSize){if(Number.isNaN(stepSize)||!Number.isFinite(stepSize)||stepSize<=0){return;}var newMax=this.mNumStars/stepSize;var newProgress=Math.floor(newMax/this.getMax()*this.getProgress());if(Number.isNaN(newProgress))newProgress=0;this.setMax(Math.floor(newMax));this.setProgress(newProgress);}},{key:'getStepSize',value:function getStepSize(){return this.getNumStars()/this.getMax();}},{key:'getProgressPerStar',value:function getProgressPerStar(){if(this.mNumStars>0){return 1*this.getMax()/this.mNumStars;}else{return 1;}}},{key:'onProgressRefresh',value:function onProgressRefresh(scale,fromUser){_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'onProgressRefresh',this).call(this,scale,fromUser);this.updateSecondaryProgress(this.getProgress());if(!fromUser){this.dispatchRatingChange(false);}}},{key:'updateSecondaryProgress',value:function updateSecondaryProgress(progress){var ratio=this.getProgressPerStar();if(ratio>0){var progressInStars=progress/ratio;var secondaryProgress=Math.floor(Math.ceil(progressInStars)*ratio);this.setSecondaryProgress(secondaryProgress);}}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);if(this.mSampleTile!=null){var width=this.mSampleTile.getIntrinsicWidth()*this.mNumStars;this.setMeasuredDimension(RatingBar.resolveSizeAndState(width,widthMeasureSpec,0),this.getMeasuredHeight());}}},{key:'onStartTrackingTouch',value:function onStartTrackingTouch(){this.mProgressOnStartTracking=this.getProgress();_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'onStartTrackingTouch',this).call(this);}},{key:'onStopTrackingTouch',value:function onStopTrackingTouch(){_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'onStopTrackingTouch',this).call(this);if(this.getProgress()!=this.mProgressOnStartTracking){this.dispatchRatingChange(true);}}},{key:'onKeyChange',value:function onKeyChange(){_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'onKeyChange',this).call(this);this.dispatchRatingChange(true);}},{key:'dispatchRatingChange',value:function dispatchRatingChange(fromUser){if(this.mOnRatingBarChangeListener!=null){this.mOnRatingBarChangeListener.onRatingChanged(this,this.getRating(),fromUser);}}},{key:'setMax',value:function setMax(max){if(max<=0){return;}_get2(RatingBar.prototype.__proto__||Object.getPrototypeOf(RatingBar.prototype),'setMax',this).call(this,max);}}]);return RatingBar;}(AbsSeekBar);widget.RatingBar=RatingBar;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var ArrayList=java.util.ArrayList;var ExpandableListView=android.widget.ExpandableListView;var ExpandableListPosition=function(){function ExpandableListPosition(){_classCallCheck(this,ExpandableListPosition);this.groupPos=0;this.childPos=0;this.flatListPos=0;this.type=0;}_createClass(ExpandableListPosition,[{key:'resetState',value:function resetState(){this.groupPos=0;this.childPos=0;this.flatListPos=0;this.type=0;}},{key:'getPackedPosition',value:function getPackedPosition(){if(this.type==ExpandableListPosition.CHILD)return ExpandableListView.getPackedPositionForChild(this.groupPos,this.childPos);else return ExpandableListView.getPackedPositionForGroup(this.groupPos);}},{key:'recycle',value:function recycle(){{if(ExpandableListPosition.sPool.size()0){elp=ExpandableListPosition.sPool.remove(0);}else{return new ExpandableListPosition();}}elp.resetState();return elp;}}]);return ExpandableListPosition;}();ExpandableListPosition.MAX_POOL_SIZE=5;ExpandableListPosition.sPool=new ArrayList(ExpandableListPosition.MAX_POOL_SIZE);ExpandableListPosition.CHILD=1;ExpandableListPosition.GROUP=2;widget.ExpandableListPosition=ExpandableListPosition;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var HeterogeneousExpandableList;(function(HeterogeneousExpandableList){function isImpl(obj){return obj&&obj['getGroupType']&&obj['getChildType']&&obj['getGroupTypeCount']&&obj['getChildTypeCount'];}HeterogeneousExpandableList.isImpl=isImpl;})(HeterogeneousExpandableList=widget.HeterogeneousExpandableList||(widget.HeterogeneousExpandableList={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var SystemClock=android.os.SystemClock;var ArrayList=java.util.ArrayList;var Collections=java.util.Collections;var Integer=java.lang.Integer;var AdapterView=android.widget.AdapterView;var BaseAdapter=android.widget.BaseAdapter;var ExpandableListPosition=android.widget.ExpandableListPosition;var HeterogeneousExpandableList=android.widget.HeterogeneousExpandableList;var ExpandableListConnector=function(_BaseAdapter){_inherits(ExpandableListConnector,_BaseAdapter);function ExpandableListConnector(expandableListAdapter){_classCallCheck(this,ExpandableListConnector);var _this140=_possibleConstructorReturn(this,(ExpandableListConnector.__proto__||Object.getPrototypeOf(ExpandableListConnector)).call(this));_this140.mTotalExpChildrenCount=0;_this140.mMaxExpGroupCount=Integer.MAX_VALUE;_this140.mDataSetObserver=new ExpandableListConnector.MyDataSetObserver(_this140);_this140.mExpGroupMetadataList=new ArrayList();_this140.setExpandableListAdapter(expandableListAdapter);return _this140;}_createClass(ExpandableListConnector,[{key:'setExpandableListAdapter',value:function setExpandableListAdapter(expandableListAdapter){if(this.mExpandableListAdapter!=null){this.mExpandableListAdapter.unregisterDataSetObserver(this.mDataSetObserver);}this.mExpandableListAdapter=expandableListAdapter;expandableListAdapter.registerDataSetObserver(this.mDataSetObserver);}},{key:'getUnflattenedPos',value:function getUnflattenedPos(flPos){var egml=this.mExpGroupMetadataList;var numExpGroups=egml.size();var leftExpGroupIndex=0;var rightExpGroupIndex=numExpGroups-1;var midExpGroupIndex=0;var midExpGm=void 0;if(numExpGroups==0){return ExpandableListConnector.PositionMetadata.obtain(flPos,ExpandableListPosition.GROUP,flPos,-1,null,0);}while(leftExpGroupIndex<=rightExpGroupIndex){midExpGroupIndex=Math.floor((rightExpGroupIndex-leftExpGroupIndex)/2+leftExpGroupIndex);midExpGm=egml.get(midExpGroupIndex);if(flPos>midExpGm.lastChildFlPos){leftExpGroupIndex=midExpGroupIndex+1;}else if(flPosmidExpGroupIndex){var leftExpGm=egml.get(leftExpGroupIndex-1);insertPosition=leftExpGroupIndex;groupPos=flPos-leftExpGm.lastChildFlPos+leftExpGm.gPos;}else if(rightExpGroupIndexmidExpGm.gPos){leftExpGroupIndex=midExpGroupIndex+1;}else if(pos.groupPosmidExpGroupIndex){var leftExpGm=egml.get(leftExpGroupIndex-1);var flPos=leftExpGm.lastChildFlPos+(pos.groupPos-leftExpGm.gPos);return ExpandableListConnector.PositionMetadata.obtain(flPos,pos.type,pos.groupPos,pos.childPos,null,leftExpGroupIndex);}else if(rightExpGroupIndex=0;i--){var curGm=egml.get(i);var newGPos=this.findGroupPosition(curGm.gId,curGm.gPos);if(newGPos!=curGm.gPos){if(newGPos==AdapterView.INVALID_POSITION){egml.remove(i);egmlSize--;}curGm.gPos=newGPos;if(!positionsChanged)positionsChanged=true;}}if(positionsChanged){Collections.sort(egml);}}var gChildrenCount=void 0;var lastGPos=0;for(var _i60=0;_i60=this.mMaxExpGroupCount){var collapsedGm=this.mExpGroupMetadataList.get(0);var collapsedIndex=this.mExpGroupMetadataList.indexOf(collapsedGm);this.collapseGroup(collapsedGm.gPos);if(posMetadata.groupInsertIndex>collapsedIndex){posMetadata.groupInsertIndex--;}}var expandedGm=ExpandableListConnector.GroupMetadata.obtain(ExpandableListConnector.GroupMetadata.REFRESH,ExpandableListConnector.GroupMetadata.REFRESH,posMetadata.position.groupPos,this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos));this.mExpGroupMetadataList.add(posMetadata.groupInsertIndex,expandedGm);this.refreshExpGroupMetadataList(false,false);this.notifyDataSetChanged();this.mExpandableListAdapter.onGroupExpanded(expandedGm.gPos);return true;}},{key:'isGroupExpanded',value:function isGroupExpanded(groupPosition){var groupMetadata=void 0;for(var i=this.mExpGroupMetadataList.size()-1;i>=0;i--){groupMetadata=this.mExpGroupMetadataList.get(i);if(groupMetadata.gPos==groupPosition){return true;}}return false;}},{key:'setMaxExpGroupCount',value:function setMaxExpGroupCount(maxExpGroupCount){this.mMaxExpGroupCount=maxExpGroupCount;}},{key:'getAdapter',value:function getAdapter(){return this.mExpandableListAdapter;}},{key:'getExpandedGroupMetadataList',value:function getExpandedGroupMetadataList(){return this.mExpGroupMetadataList;}},{key:'setExpandedGroupMetadataList',value:function setExpandedGroupMetadataList(expandedGroupMetadataList){if(expandedGroupMetadataList==null||this.mExpandableListAdapter==null){return;}var numGroups=this.mExpandableListAdapter.getGroupCount();for(var i=expandedGroupMetadataList.size()-1;i>=0;i--){if(expandedGroupMetadataList.get(i).gPos>=numGroups){return;}}this.mExpGroupMetadataList=expandedGroupMetadataList;this.refreshExpGroupMetadataList(true,false);}},{key:'isEmpty',value:function isEmpty(){var adapter=this.getAdapter();return adapter!=null?adapter.isEmpty():true;}},{key:'findGroupPosition',value:function findGroupPosition(groupIdToMatch,seedGroupPosition){var count=this.mExpandableListAdapter.getGroupCount();if(count==0){return AdapterView.INVALID_POSITION;}if(groupIdToMatch==AdapterView.INVALID_ROW_ID){return AdapterView.INVALID_POSITION;}seedGroupPosition=Math.max(0,seedGroupPosition);seedGroupPosition=Math.min(count-1,seedGroupPosition);var endTime=SystemClock.uptimeMillis()+AdapterView.SYNC_MAX_DURATION_MILLIS;var rowId=void 0;var first=seedGroupPosition;var last=seedGroupPosition;var next=false;var hitFirst=void 0;var hitLast=void 0;var adapter=this.getAdapter();if(adapter==null){return AdapterView.INVALID_POSITION;}while(SystemClock.uptimeMillis()<=endTime){rowId=adapter.getGroupId(seedGroupPosition);if(rowId==groupIdToMatch){return seedGroupPosition;}hitLast=last==count-1;hitFirst=first==0;if(hitLast&&hitFirst){break;}if(hitFirst||next&&!hitLast){last++;seedGroupPosition=last;next=false;}else if(hitLast||!next&&!hitFirst){first--;seedGroupPosition=first;next=true;}}return AdapterView.INVALID_POSITION;}}]);return ExpandableListConnector;}(BaseAdapter);widget.ExpandableListConnector=ExpandableListConnector;(function(ExpandableListConnector){var MyDataSetObserver=function(_DataSetObserver2){_inherits(MyDataSetObserver,_DataSetObserver2);function MyDataSetObserver(arg){_classCallCheck(this,MyDataSetObserver);var _this141=_possibleConstructorReturn(this,(MyDataSetObserver.__proto__||Object.getPrototypeOf(MyDataSetObserver)).call(this));_this141._ExpandableListConnector_this=arg;return _this141;}_createClass(MyDataSetObserver,[{key:'onChanged',value:function onChanged(){this._ExpandableListConnector_this.refreshExpGroupMetadataList(true,true);this._ExpandableListConnector_this.notifyDataSetChanged();}},{key:'onInvalidated',value:function onInvalidated(){this._ExpandableListConnector_this.refreshExpGroupMetadataList(true,true);this._ExpandableListConnector_this.notifyDataSetInvalidated();}}]);return MyDataSetObserver;}(DataSetObserver);ExpandableListConnector.MyDataSetObserver=MyDataSetObserver;var GroupMetadata=function(){function GroupMetadata(){_classCallCheck(this,GroupMetadata);this.flPos=0;this.lastChildFlPos=0;this.gPos=0;this.gId=0;}_createClass(GroupMetadata,[{key:'compareTo',value:function compareTo(another){if(another==null){throw Error('new IllegalArgumentException()');}return this.gPos-another.gPos;}}],[{key:'obtain',value:function obtain(flPos,lastChildFlPos,gPos,gId){var gm=new GroupMetadata();gm.flPos=flPos;gm.lastChildFlPos=lastChildFlPos;gm.gPos=gPos;gm.gId=gId;return gm;}}]);return GroupMetadata;}();GroupMetadata.REFRESH=-1;ExpandableListConnector.GroupMetadata=GroupMetadata;var PositionMetadata=function(){function PositionMetadata(){_classCallCheck(this,PositionMetadata);this.groupInsertIndex=0;}_createClass(PositionMetadata,[{key:'resetState',value:function resetState(){if(this.position!=null){this.position.recycle();this.position=null;}this.groupMetadata=null;this.groupInsertIndex=0;}},{key:'recycle',value:function recycle(){this.resetState();{if(PositionMetadata.sPool.size()0){pm=PositionMetadata.sPool.remove(0);}else{return new PositionMetadata();}}pm.resetState();return pm;}}]);return PositionMetadata;}();PositionMetadata.MAX_POOL_SIZE=5;PositionMetadata.sPool=new ArrayList(PositionMetadata.MAX_POOL_SIZE);ExpandableListConnector.PositionMetadata=PositionMetadata;})(ExpandableListConnector=widget.ExpandableListConnector||(widget.ExpandableListConnector={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var SoundEffectConstants=android.view.SoundEffectConstants;var View=android.view.View;var ExpandableListConnector=android.widget.ExpandableListConnector;var ExpandableListPosition=android.widget.ExpandableListPosition;var ListView=android.widget.ListView;var Long=goog.math.Long;var ExpandableListView=function(_ListView){_inherits(ExpandableListView,_ListView);function ExpandableListView(context,attrs){var defStyle=arguments.length>2&&arguments[2]!==undefined?arguments[2]:android.R.attr.expandableListViewStyle;_classCallCheck(this,ExpandableListView);var _this142=_possibleConstructorReturn(this,(ExpandableListView.__proto__||Object.getPrototypeOf(ExpandableListView)).call(this,context,attrs,defStyle));_this142.mIndicatorLeft=0;_this142.mIndicatorRight=0;_this142.mIndicatorStart=0;_this142.mIndicatorEnd=0;_this142.mChildIndicatorLeft=0;_this142.mChildIndicatorRight=0;_this142.mChildIndicatorStart=0;_this142.mChildIndicatorEnd=0;_this142.mIndicatorRect=new Rect();var a=context.obtainStyledAttributes(attrs,defStyle);_this142.mGroupIndicator=a.getDrawable('groupIndicator');_this142.mChildIndicator=a.getDrawable('childIndicator');_this142.mIndicatorLeft=a.getDimensionPixelSize('indicatorLeft',0);_this142.mIndicatorRight=a.getDimensionPixelSize('indicatorRight',0);if(_this142.mIndicatorRight==0&&_this142.mGroupIndicator!=null){_this142.mIndicatorRight=_this142.mIndicatorLeft+_this142.mGroupIndicator.getIntrinsicWidth();}_this142.mChildIndicatorLeft=a.getDimensionPixelSize('childIndicatorLeft',ExpandableListView.CHILD_INDICATOR_INHERIT);_this142.mChildIndicatorRight=a.getDimensionPixelSize('childIndicatorRight',ExpandableListView.CHILD_INDICATOR_INHERIT);_this142.mChildDivider=a.getDrawable('childDivider');if(!_this142.isRtlCompatibilityMode()){_this142.mIndicatorStart=a.getDimensionPixelSize('indicatorStart',ExpandableListView.INDICATOR_UNDEFINED);_this142.mIndicatorEnd=a.getDimensionPixelSize('indicatorEnd',ExpandableListView.INDICATOR_UNDEFINED);_this142.mChildIndicatorStart=a.getDimensionPixelSize('childIndicatorStart',ExpandableListView.CHILD_INDICATOR_INHERIT);_this142.mChildIndicatorEnd=a.getDimensionPixelSize('childIndicatorEnd',ExpandableListView.CHILD_INDICATOR_INHERIT);}a.recycle();return _this142;}_createClass(ExpandableListView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'createClassAttrBinder',this).call(this).set('groupIndicator',{setter:function setter(v,value,attrBinder){v.setGroupIndicator(attrBinder.parseDrawable(value));},getter:function getter(v){return v.mGroupIndicator;}}).set('childIndicator',{setter:function setter(v,value,attrBinder){v.setChildIndicator(attrBinder.parseDrawable(value));},getter:function getter(v){return v.mChildIndicator;}}).set('indicatorLeft',{setter:function setter(v,value,attrBinder){v.setIndicatorBounds(attrBinder.parseNumberPixelOffset(value,0),v.mIndicatorRight);},getter:function getter(v){return v.mIndicatorLeft;}}).set('indicatorRight',{setter:function setter(v,value,attrBinder){var num=attrBinder.parseNumberPixelOffset(value,0);if(num==0&&v.mGroupIndicator!=null){num=v.mIndicatorLeft+v.mGroupIndicator.getIntrinsicWidth();}this.setIndicatorBounds(v.mIndicatorLeft,num);},getter:function getter(v){return v.mIndicatorRight;}}).set('childIndicatorLeft',{setter:function setter(v,value,attrBinder){v.setChildIndicatorBounds(attrBinder.parseNumberPixelOffset(value,ExpandableListView.CHILD_INDICATOR_INHERIT),v.mChildIndicatorRight);},getter:function getter(v){return v.mChildIndicatorLeft;}}).set('childIndicatorRight',{setter:function setter(v,value,attrBinder){var num=attrBinder.parseNumberPixelOffset(value,ExpandableListView.CHILD_INDICATOR_INHERIT);if(num==0&&v.mChildIndicator!=null){num=v.mChildIndicatorLeft+v.mChildIndicator.getIntrinsicWidth();}v.setIndicatorBounds(v.mChildIndicatorLeft,num);},getter:function getter(v){return v.mChildIndicatorRight;}}).set('childDivider',{setter:function setter(v,value,attrBinder){v.setChildDivider(attrBinder.parseDrawable(value));},getter:function getter(v){return v.mChildDivider;}});}},{key:'isRtlCompatibilityMode',value:function isRtlCompatibilityMode(){return!this.hasRtlSupport();}},{key:'hasRtlSupport',value:function hasRtlSupport(){return false;}},{key:'onRtlPropertiesChanged',value:function onRtlPropertiesChanged(layoutDirection){this.resolveIndicator();this.resolveChildIndicator();}},{key:'resolveIndicator',value:function resolveIndicator(){var isLayoutRtl=this.isLayoutRtl();if(isLayoutRtl){if(this.mIndicatorStart>=0){this.mIndicatorRight=this.mIndicatorStart;}if(this.mIndicatorEnd>=0){this.mIndicatorLeft=this.mIndicatorEnd;}}else{if(this.mIndicatorStart>=0){this.mIndicatorLeft=this.mIndicatorStart;}if(this.mIndicatorEnd>=0){this.mIndicatorRight=this.mIndicatorEnd;}}if(this.mIndicatorRight==0&&this.mGroupIndicator!=null){this.mIndicatorRight=this.mIndicatorLeft+this.mGroupIndicator.getIntrinsicWidth();}}},{key:'resolveChildIndicator',value:function resolveChildIndicator(){var isLayoutRtl=this.isLayoutRtl();if(isLayoutRtl){if(this.mChildIndicatorStart>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorRight=this.mChildIndicatorStart;}if(this.mChildIndicatorEnd>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorLeft=this.mChildIndicatorEnd;}}else{if(this.mChildIndicatorStart>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorLeft=this.mChildIndicatorStart;}if(this.mChildIndicatorEnd>=ExpandableListView.CHILD_INDICATOR_INHERIT){this.mChildIndicatorRight=this.mChildIndicatorEnd;}}}},{key:'dispatchDraw',value:function dispatchDraw(canvas){_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'dispatchDraw',this).call(this,canvas);if(this.mChildIndicator==null&&this.mGroupIndicator==null){return;}var saveCount=0;var clipToPadding=(this.mGroupFlags&ExpandableListView.CLIP_TO_PADDING_MASK)==ExpandableListView.CLIP_TO_PADDING_MASK;if(clipToPadding){saveCount=canvas.save();var scrollX=this.mScrollX;var scrollY=this.mScrollY;canvas.clipRect(scrollX+this.mPaddingLeft,scrollY+this.mPaddingTop,scrollX+this.mRight-this.mLeft-this.mPaddingRight,scrollY+this.mBottom-this.mTop-this.mPaddingBottom);}var headerViewsCount=this.getHeaderViewsCount();var lastChildFlPos=this.mItemCount-this.getFooterViewsCount()-headerViewsCount-1;var myB=this.mBottom;var pos=void 0;var item=void 0;var indicator=void 0;var t=void 0,b=void 0;var lastItemType=~(ExpandableListPosition.CHILD|ExpandableListPosition.GROUP);var indicatorRect=this.mIndicatorRect;var childCount=this.getChildCount();for(var i=0,childFlPos=this.mFirstPosition-headerViewsCount;ilastChildFlPos){break;}item=this.getChildAt(i);t=item.getTop();b=item.getBottom();if(b<0||t>myB)continue;pos=this.mConnector.getUnflattenedPos(childFlPos);var isLayoutRtl=this.isLayoutRtl();var width=this.getWidth();if(pos.position.type!=lastItemType){if(pos.position.type==ExpandableListPosition.CHILD){indicatorRect.left=this.mChildIndicatorLeft==ExpandableListView.CHILD_INDICATOR_INHERIT?this.mIndicatorLeft:this.mChildIndicatorLeft;indicatorRect.right=this.mChildIndicatorRight==ExpandableListView.CHILD_INDICATOR_INHERIT?this.mIndicatorRight:this.mChildIndicatorRight;}else{indicatorRect.left=this.mIndicatorLeft;indicatorRect.right=this.mIndicatorRight;}if(isLayoutRtl){var temp=indicatorRect.left;indicatorRect.left=width-indicatorRect.right;indicatorRect.right=width-temp;indicatorRect.left-=this.mPaddingRight;indicatorRect.right-=this.mPaddingRight;}else{indicatorRect.left+=this.mPaddingLeft;indicatorRect.right+=this.mPaddingLeft;}lastItemType=pos.position.type;}if(indicatorRect.left!=indicatorRect.right){if(this.mStackFromBottom){indicatorRect.top=t;indicatorRect.bottom=b;}else{indicatorRect.top=t;indicatorRect.bottom=b;}indicator=this.getIndicator(pos);if(indicator!=null){indicator.setBounds(indicatorRect);indicator.draw(canvas);}}pos.recycle();}if(clipToPadding){canvas.restoreToCount(saveCount);}}},{key:'getIndicator',value:function getIndicator(pos){var indicator=void 0;if(pos.position.type==ExpandableListPosition.GROUP){indicator=this.mGroupIndicator;if(indicator!=null&&indicator.isStateful()){var isEmpty=pos.groupMetadata==null||pos.groupMetadata.lastChildFlPos==pos.groupMetadata.flPos;var stateSetIndex=(pos.isExpanded()?1:0)|(isEmpty?2:0);indicator.setState(ExpandableListView.GROUP_STATE_SETS[stateSetIndex]);}}else{indicator=this.mChildIndicator;if(indicator!=null&&indicator.isStateful()){var stateSet=pos.position.flatListPos==pos.groupMetadata.lastChildFlPos?ExpandableListView.CHILD_LAST_STATE_SET:ExpandableListView.EMPTY_STATE_SET;indicator.setState(stateSet);}}return indicator;}},{key:'setChildDivider',value:function setChildDivider(childDivider){this.mChildDivider=childDivider;}},{key:'drawDivider',value:function drawDivider(canvas,bounds,childIndex){var flatListPosition=childIndex+this.mFirstPosition;if(flatListPosition>=0){var adjustedPosition=this.getFlatPositionForConnector(flatListPosition);var pos=this.mConnector.getUnflattenedPos(adjustedPosition);if(pos.position.type==ExpandableListPosition.CHILD||pos.isExpanded()&&pos.groupMetadata.lastChildFlPos!=pos.groupMetadata.flPos){var divider=this.mChildDivider;divider.setBounds(bounds);divider.draw(canvas);pos.recycle();return;}pos.recycle();}_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'drawDivider',this).call(this,canvas,bounds,flatListPosition);}},{key:'setAdapter',value:function setAdapter(adapter){throw Error('new RuntimeException("For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of " + "setAdapter(ListAdapter)")');}},{key:'getAdapter',value:function getAdapter(){return _get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'getAdapter',this).call(this);}},{key:'setOnItemClickListener',value:function setOnItemClickListener(l){_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'setOnItemClickListener',this).call(this,l);}},{key:'setExpandableAdapter',value:function setExpandableAdapter(adapter){this.mExpandAdapter=adapter;if(adapter!=null){this.mConnector=new ExpandableListConnector(adapter);}else{this.mConnector=null;}_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'setAdapter',this).call(this,this.mConnector);}},{key:'getExpandableListAdapter',value:function getExpandableListAdapter(){return this.mExpandAdapter;}},{key:'isHeaderOrFooterPosition',value:function isHeaderOrFooterPosition(position){var footerViewsStart=this.mItemCount-this.getFooterViewsCount();return position=footerViewsStart;}},{key:'getFlatPositionForConnector',value:function getFlatPositionForConnector(flatListPosition){return flatListPosition-this.getHeaderViewsCount();}},{key:'getAbsoluteFlatPosition',value:function getAbsoluteFlatPosition(flatListPosition){return flatListPosition+this.getHeaderViewsCount();}},{key:'performItemClick',value:function performItemClick(v,position,id){if(this.isHeaderOrFooterPosition(position)){return _get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'performItemClick',this).call(this,v,position,id);}var adjustedPosition=this.getFlatPositionForConnector(position);return this.handleItemClick(v,adjustedPosition,id);}},{key:'handleItemClick',value:function handleItemClick(v,position,id){var posMetadata=this.mConnector.getUnflattenedPos(position);id=this.getChildOrGroupId(posMetadata.position);var returnValue=void 0;if(posMetadata.position.type==ExpandableListPosition.GROUP){if(this.mOnGroupClickListener!=null){if(this.mOnGroupClickListener.onGroupClick(this,v,posMetadata.position.groupPos,id)){posMetadata.recycle();return true;}}if(posMetadata.isExpanded()){this.mConnector.collapseGroupWithMeta(posMetadata);this.playSoundEffect(SoundEffectConstants.CLICK);if(this.mOnGroupCollapseListener!=null){this.mOnGroupCollapseListener.onGroupCollapse(posMetadata.position.groupPos);}}else{this.mConnector.expandGroupWithMeta(posMetadata);this.playSoundEffect(SoundEffectConstants.CLICK);if(this.mOnGroupExpandListener!=null){this.mOnGroupExpandListener.onGroupExpand(posMetadata.position.groupPos);}var groupPos=posMetadata.position.groupPos;var groupFlatPos=posMetadata.position.flatListPos;var shiftedGroupPosition=groupFlatPos+this.getHeaderViewsCount();this.smoothScrollToPosition(shiftedGroupPosition+this.mExpandAdapter.getChildrenCount(groupPos),shiftedGroupPosition);}returnValue=true;}else{if(this.mOnChildClickListener!=null){this.playSoundEffect(SoundEffectConstants.CLICK);return this.mOnChildClickListener.onChildClick(this,v,posMetadata.position.groupPos,posMetadata.position.childPos,id);}returnValue=false;}posMetadata.recycle();return returnValue;}},{key:'expandGroup',value:function expandGroup(groupPos){var animate=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var elGroupPos=ExpandableListPosition.obtain(ExpandableListPosition.GROUP,groupPos,-1,-1);var pm=this.mConnector.getFlattenedPos(elGroupPos);elGroupPos.recycle();var retValue=this.mConnector.expandGroupWithMeta(pm);if(this.mOnGroupExpandListener!=null){this.mOnGroupExpandListener.onGroupExpand(groupPos);}if(animate){var groupFlatPos=pm.position.flatListPos;var shiftedGroupPosition=groupFlatPos+this.getHeaderViewsCount();this.smoothScrollToPosition(shiftedGroupPosition+this.mExpandAdapter.getChildrenCount(groupPos),shiftedGroupPosition);}pm.recycle();return retValue;}},{key:'collapseGroup',value:function collapseGroup(groupPos){var retValue=this.mConnector.collapseGroup(groupPos);if(this.mOnGroupCollapseListener!=null){this.mOnGroupCollapseListener.onGroupCollapse(groupPos);}return retValue;}},{key:'setOnGroupCollapseListener',value:function setOnGroupCollapseListener(onGroupCollapseListener){this.mOnGroupCollapseListener=onGroupCollapseListener;}},{key:'setOnGroupExpandListener',value:function setOnGroupExpandListener(onGroupExpandListener){this.mOnGroupExpandListener=onGroupExpandListener;}},{key:'setOnGroupClickListener',value:function setOnGroupClickListener(onGroupClickListener){this.mOnGroupClickListener=onGroupClickListener;}},{key:'setOnChildClickListener',value:function setOnChildClickListener(onChildClickListener){this.mOnChildClickListener=onChildClickListener;}},{key:'getExpandableListPosition',value:function getExpandableListPosition(flatListPosition){if(this.isHeaderOrFooterPosition(flatListPosition)){return ExpandableListView.PACKED_POSITION_VALUE_NULL;}var adjustedPosition=this.getFlatPositionForConnector(flatListPosition);var pm=this.mConnector.getUnflattenedPos(adjustedPosition);var packedPos=pm.position.getPackedPosition();pm.recycle();return packedPos;}},{key:'getFlatListPosition',value:function getFlatListPosition(packedPosition){var elPackedPos=ExpandableListPosition.obtainPosition(packedPosition);var pm=this.mConnector.getFlattenedPos(elPackedPos);elPackedPos.recycle();var flatListPosition=pm.position.flatListPos;pm.recycle();return this.getAbsoluteFlatPosition(flatListPosition);}},{key:'getSelectedPosition',value:function getSelectedPosition(){var selectedPos=this.getSelectedItemPosition();return this.getExpandableListPosition(selectedPos);}},{key:'getSelectedId',value:function getSelectedId(){var packedPos=this.getSelectedPosition();if(packedPos==ExpandableListView.PACKED_POSITION_VALUE_NULL)return-1;var groupPos=ExpandableListView.getPackedPositionGroup(packedPos);if(ExpandableListView.getPackedPositionType(packedPos)==ExpandableListView.PACKED_POSITION_TYPE_GROUP){return this.mExpandAdapter.getGroupId(groupPos);}else{return this.mExpandAdapter.getChildId(groupPos,ExpandableListView.getPackedPositionChild(packedPos));}}},{key:'setSelectedGroup',value:function setSelectedGroup(groupPosition){var elGroupPos=ExpandableListPosition.obtainGroupPosition(groupPosition);var pm=this.mConnector.getFlattenedPos(elGroupPos);elGroupPos.recycle();var absoluteFlatPosition=this.getAbsoluteFlatPosition(pm.position.flatListPos);_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'setSelection',this).call(this,absoluteFlatPosition);pm.recycle();}},{key:'setSelectedChild',value:function setSelectedChild(groupPosition,childPosition,shouldExpandGroup){var elChildPos=ExpandableListPosition.obtainChildPosition(groupPosition,childPosition);var flatChildPos=this.mConnector.getFlattenedPos(elChildPos);if(flatChildPos==null){if(!shouldExpandGroup)return false;this.expandGroup(groupPosition);flatChildPos=this.mConnector.getFlattenedPos(elChildPos);if(flatChildPos==null){throw Error('new IllegalStateException("Could not find child")');}}var absoluteFlatPosition=this.getAbsoluteFlatPosition(flatChildPos.position.flatListPos);_get2(ExpandableListView.prototype.__proto__||Object.getPrototypeOf(ExpandableListView.prototype),'setSelection',this).call(this,absoluteFlatPosition);elChildPos.recycle();flatChildPos.recycle();return true;}},{key:'isGroupExpanded',value:function isGroupExpanded(groupPosition){return this.mConnector.isGroupExpanded(groupPosition);}},{key:'getChildOrGroupId',value:function getChildOrGroupId(position){if(position.type==ExpandableListPosition.CHILD){return this.mExpandAdapter.getChildId(position.groupPos,position.childPos);}else{return this.mExpandAdapter.getGroupId(position.groupPos);}}},{key:'setChildIndicator',value:function setChildIndicator(childIndicator){this.mChildIndicator=childIndicator;}},{key:'setChildIndicatorBounds',value:function setChildIndicatorBounds(left,right){this.mChildIndicatorLeft=left;this.mChildIndicatorRight=right;this.resolveChildIndicator();}},{key:'setChildIndicatorBoundsRelative',value:function setChildIndicatorBoundsRelative(start,end){this.mChildIndicatorStart=start;this.mChildIndicatorEnd=end;this.resolveChildIndicator();}},{key:'setGroupIndicator',value:function setGroupIndicator(groupIndicator){this.mGroupIndicator=groupIndicator;if(this.mIndicatorRight==0&&this.mGroupIndicator!=null){this.mIndicatorRight=this.mIndicatorLeft+this.mGroupIndicator.getIntrinsicWidth();}}},{key:'setIndicatorBounds',value:function setIndicatorBounds(left,right){this.mIndicatorLeft=left;this.mIndicatorRight=right;this.resolveIndicator();}},{key:'setIndicatorBoundsRelative',value:function setIndicatorBoundsRelative(start,end){this.mIndicatorStart=start;this.mIndicatorEnd=end;this.resolveIndicator();}}],[{key:'getPackedPositionType',value:function getPackedPositionType(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL){return ExpandableListView.PACKED_POSITION_TYPE_NULL;}return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE).equals(ExpandableListView.PACKED_POSITION_MASK_TYPE)?ExpandableListView.PACKED_POSITION_TYPE_CHILD:ExpandableListView.PACKED_POSITION_TYPE_GROUP;}},{key:'getPackedPositionGroup',value:function getPackedPositionGroup(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL)return-1;return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_GROUP).shiftRight(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();}},{key:'getPackedPositionChild',value:function getPackedPositionChild(packedPosition){if(packedPosition==ExpandableListView.PACKED_POSITION_VALUE_NULL)return-1;if(Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE).notEquals(ExpandableListView.PACKED_POSITION_MASK_TYPE))return-1;return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_CHILD).toNumber();}},{key:'getPackedPositionForChild',value:function getPackedPositionForChild(groupPosition,childPosition){return Long.fromInt(ExpandableListView.PACKED_POSITION_TYPE_CHILD).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_TYPE).or(Long.fromNumber(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP)).or(Long.fromNumber(childPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_CHILD)).toNumber();}},{key:'getPackedPositionForGroup',value:function getPackedPositionForGroup(groupPosition){return Long.fromInt(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();}}]);return ExpandableListView;}(ListView);ExpandableListView.PACKED_POSITION_TYPE_GROUP=0;ExpandableListView.PACKED_POSITION_TYPE_CHILD=1;ExpandableListView.PACKED_POSITION_TYPE_NULL=2;ExpandableListView.PACKED_POSITION_VALUE_NULL=0x00000000FFFFFFFF;ExpandableListView.PACKED_POSITION_MASK_CHILD=Long.fromNumber(0x00000000FFFFFFFF);ExpandableListView.PACKED_POSITION_MASK_GROUP=Long.fromNumber(0x7FFFFFFF00000000);ExpandableListView.PACKED_POSITION_MASK_TYPE=Long.fromNumber(0x8000000000000000);ExpandableListView.PACKED_POSITION_SHIFT_GROUP=32;ExpandableListView.PACKED_POSITION_SHIFT_TYPE=63;ExpandableListView.PACKED_POSITION_INT_MASK_CHILD=Long.fromNumber(0xFFFFFFFF);ExpandableListView.PACKED_POSITION_INT_MASK_GROUP=Long.fromNumber(0x7FFFFFFF);ExpandableListView.CHILD_INDICATOR_INHERIT=-1;ExpandableListView.INDICATOR_UNDEFINED=-2;ExpandableListView.GROUP_EXPANDED_STATE_SET=[View.VIEW_STATE_EXPANDED];ExpandableListView.GROUP_EMPTY_STATE_SET=[View.VIEW_STATE_EMPTY];ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET=[View.VIEW_STATE_EXPANDED,View.VIEW_STATE_EMPTY];ExpandableListView.GROUP_STATE_SETS=[ExpandableListView.EMPTY_STATE_SET,ExpandableListView.GROUP_EXPANDED_STATE_SET,ExpandableListView.GROUP_EMPTY_STATE_SET,ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET];ExpandableListView.CHILD_LAST_STATE_SET=[View.VIEW_STATE_LAST];widget.ExpandableListView=ExpandableListView;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObservable=android.database.DataSetObservable;var Long=goog.math.Long;var _0x8000000000000000=Long.fromNumber(0x8000000000000000);var _0x7FFFFFFF=Long.fromNumber(0x7FFFFFFF);var _0xFFFFFFFF=Long.fromNumber(0xFFFFFFFF);var BaseExpandableListAdapter=function(){function BaseExpandableListAdapter(){_classCallCheck(this,BaseExpandableListAdapter);this.mDataSetObservable=new DataSetObservable();}_createClass(BaseExpandableListAdapter,[{key:'registerDataSetObserver',value:function registerDataSetObserver(observer){this.mDataSetObservable.registerObserver(observer);}},{key:'unregisterDataSetObserver',value:function unregisterDataSetObserver(observer){this.mDataSetObservable.unregisterObserver(observer);}},{key:'notifyDataSetInvalidated',value:function notifyDataSetInvalidated(){this.mDataSetObservable.notifyInvalidated();}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.mDataSetObservable.notifyChanged();}},{key:'areAllItemsEnabled',value:function areAllItemsEnabled(){return true;}},{key:'onGroupCollapsed',value:function onGroupCollapsed(groupPosition){}},{key:'onGroupExpanded',value:function onGroupExpanded(groupPosition){}},{key:'getCombinedChildId',value:function getCombinedChildId(groupId,childId){var _groupId=Long.fromNumber(groupId);var _childId=Long.fromNumber(childId);return _0x8000000000000000.or(_groupId.and(_0x7FFFFFFF).shiftLeft(32)).or(_childId.and(_0xFFFFFFFF)).toNumber();}},{key:'getCombinedGroupId',value:function getCombinedGroupId(groupId){var _groupId=Long.fromNumber(groupId);return _groupId.add(_0x7FFFFFFF).shiftLeft(32).toNumber();}},{key:'isEmpty',value:function isEmpty(){return this.getGroupCount()==0;}},{key:'getChildType',value:function getChildType(groupPosition,childPosition){return 0;}},{key:'getChildTypeCount',value:function getChildTypeCount(){return 1;}},{key:'getGroupType',value:function getGroupType(groupPosition){return 0;}},{key:'getGroupTypeCount',value:function getGroupTypeCount(){return 1;}}]);return BaseExpandableListAdapter;}();widget.BaseExpandableListAdapter=BaseExpandableListAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Handler=android.os.Handler;var Log=android.util.Log;var Gravity=android.view.Gravity;var WindowManager=android.view.WindowManager;var Window=android.view.Window;var Toast=function(){function Toast(context){var _this143=this;_classCallCheck(this,Toast);this.mDuration=0;this.mHandler=new Handler();this.mDelayHide=function(){var inner_this=_this143;return{run:function run(){inner_this.mTN.hide();}};}();this.mContext=context;this.mTN=new Toast.TN();this.mTN.mY=context.getResources().getDisplayMetrics().density*64;this.mTN.mGravity=Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM;}_createClass(Toast,[{key:'show',value:function show(){if(this.mNextView==null){throw Error('new RuntimeException("setView must have been called")');}var tn=this.mTN;tn.mNextView=this.mNextView;tn.show();this.mHandler.removeCallbacks(this.mDelayHide);var showDuration=this.mDuration===Toast.LENGTH_LONG?3500:this.mDuration===Toast.LENGTH_SHORT?2000:this.mDuration;this.mHandler.postDelayed(this.mDelayHide,showDuration);}},{key:'cancel',value:function cancel(){this.mTN.hide();}},{key:'setView',value:function setView(view){this.mNextView=view;}},{key:'getView',value:function getView(){return this.mNextView;}},{key:'setDuration',value:function setDuration(duration){this.mDuration=duration;}},{key:'getDuration',value:function getDuration(){return this.mDuration;}},{key:'setGravity',value:function setGravity(gravity,xOffset,yOffset){this.mTN.mGravity=gravity;this.mTN.mX=xOffset;this.mTN.mY=yOffset;}},{key:'getGravity',value:function getGravity(){return this.mTN.mGravity;}},{key:'getXOffset',value:function getXOffset(){return this.mTN.mX;}},{key:'getYOffset',value:function getYOffset(){return this.mTN.mY;}},{key:'setText',value:function setText(s){if(this.mNextView==null){throw Error('new RuntimeException("This Toast was not created with Toast.makeText()")');}var tv=this.mNextView.findViewById(android.R.id.message);if(tv==null){throw Error('new RuntimeException("This Toast was not created with Toast.makeText()")');}tv.setText(s);}}],[{key:'makeText',value:function makeText(context,text,duration){var result=new Toast(context);var inflate=context.getLayoutInflater();var v=inflate.inflate(android.R.layout.transient_notification,null);var tv=v.findViewById(android.R.id.message);tv.setMaxWidth(260*context.getResources().getDisplayMetrics().density);tv.setText(text);result.mNextView=v;result.mDuration=duration;return result;}}]);return Toast;}();Toast.TAG="Toast";Toast.localLOGV=false;Toast.LENGTH_SHORT=0;Toast.LENGTH_LONG=1;widget.Toast=Toast;(function(Toast){var TN=function(){function TN(){var _this144=this;_classCallCheck(this,TN);this.mShow=function(){var inner_this=_this144;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.handleShow();}}]);return _Inner;}();return new _Inner();}();this.mHide=function(){var inner_this=_this144;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.handleHide();inner_this.mNextView=null;}}]);return _Inner;}();return new _Inner();}();this.mHandler=new Handler();this.mGravity=0;this.mX=0;this.mY=0;}_createClass(TN,[{key:'show',value:function show(){if(Toast.localLOGV)Log.v(Toast.TAG,"SHOW: "+this);this.mHandler.post(this.mShow);}},{key:'hide',value:function hide(){if(Toast.localLOGV)Log.v(Toast.TAG,"HIDE: "+this);this.mHandler.post(this.mHide);}},{key:'handleShow',value:function handleShow(){if(Toast.localLOGV)Log.v(Toast.TAG,"HANDLE SHOW: "+this+" mView="+this.mView+" mNextView="+this.mNextView);if(this.mView!=this.mNextView){this.handleHide();this.mView=this.mNextView;if(!this.mWindow){this.mWindow=new Window(this.mView.getContext().getApplicationContext());var _params7=this.mWindow.getAttributes();_params7.height=WindowManager.LayoutParams.WRAP_CONTENT;_params7.width=WindowManager.LayoutParams.WRAP_CONTENT;_params7.dimAmount=0;_params7.type=WindowManager.LayoutParams.TYPE_TOAST;_params7.setTitle("Toast");_params7.leftMargin=_params7.rightMargin=36*this.mView.getContext().getResources().getDisplayMetrics().density;_params7.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;this.mWindow.setFloating(true);this.mWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);this.mWindow.setWindowAnimations(android.R.anim.toast_enter,android.R.anim.toast_exit,null,null);}var params=this.mWindow.getAttributes();this.mWindow.setContentView(this.mView);var context=this.mView.getContext().getApplicationContext();this.mWM=context.getWindowManager();var gravity=Gravity.getAbsoluteGravity(this.mGravity);params.gravity=gravity;params.x=this.mX;params.y=this.mY;if(this.mWindow.getDecorView().getParent()!=null){if(Toast.localLOGV)Log.v(Toast.TAG,"REMOVE! "+this.mView+" in "+this);this.mWM.removeWindow(this.mWindow);}if(Toast.localLOGV)Log.v(Toast.TAG,"ADD! "+this.mView+" in "+this);this.mWM.addWindow(this.mWindow);}}},{key:'handleHide',value:function handleHide(){if(Toast.localLOGV)Log.v(Toast.TAG,"HANDLE HIDE: "+this+" mView="+this.mView);if(this.mView!=null){if(this.mView.getParent()!=null){if(Toast.localLOGV)Log.v(Toast.TAG,"REMOVE! "+this.mView+" in "+this);this.mWM.removeWindow(this.mWindow);}this.mView=null;}}}]);return TN;}();Toast.TN=TN;})(Toast=widget.Toast||(widget.Toast={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var content;(function(content){var DialogInterface;(function(DialogInterface){DialogInterface.BUTTON_POSITIVE=-1;DialogInterface.BUTTON_NEGATIVE=-2;DialogInterface.BUTTON_NEUTRAL=-3;DialogInterface.BUTTON1=DialogInterface.BUTTON_POSITIVE;DialogInterface.BUTTON2=DialogInterface.BUTTON_NEGATIVE;DialogInterface.BUTTON3=DialogInterface.BUTTON_NEUTRAL;})(DialogInterface=content.DialogInterface||(content.DialogInterface={}));})(content=android.content||(android.content={}));})(android||(android={}));var android;(function(android){var app;(function(app){var Handler=android.os.Handler;var Message=android.os.Message;var Log=android.util.Log;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var Window=android.view.Window;var WindowManager=android.view.WindowManager;var WeakReference=java.lang.ref.WeakReference;var Dialog=function(){function Dialog(context,cancelable,cancelListener){var _this145=this;_classCallCheck(this,Dialog);this.mCancelable=true;this.mCreated=false;this.mShowing=false;this.mCanceled=false;this.mHandler=new Handler();this.mDismissAction=function(){var inner_this=_this145;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){inner_this.dismissDialog();}}]);return _Inner;}();return new _Inner();}();this.mContext=context;this.mWindowManager=context.getWindowManager();var w=new Window(context);w.setFloating(true);w.setDimAmount(0.7);w.setBackgroundColor(android.graphics.Color.TRANSPARENT);this.mWindow=w;var dm=context.getResources().getDisplayMetrics();var decor=w.getDecorView();decor.setMinimumWidth(dm.density*280);decor.setMinimumHeight(dm.density*20);var onMeasure=decor.onMeasure;decor.onMeasure=function(widthMeasureSpec,heightMeasureSpec){onMeasure.call(decor,widthMeasureSpec,heightMeasureSpec);var width=decor.getMeasuredWidth();if(width>360*dm.density){var widthSpec=View.MeasureSpec.makeMeasureSpec(360*dm.density,View.MeasureSpec.EXACTLY);onMeasure.call(decor,widthSpec,heightMeasureSpec);}};var wp=w.getAttributes();wp.flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;wp.height=wp.width=ViewGroup.LayoutParams.WRAP_CONTENT;wp.leftMargin=wp.rightMargin=wp.topMargin=wp.bottomMargin=dm.density*16;w.setWindowAnimations(android.R.anim.dialog_enter,android.R.anim.dialog_exit,null,null);w.setChildWindowManager(this.mWindowManager);w.setGravity(Gravity.CENTER);w.setCallback(this);this.mListenersHandler=new Dialog.ListenersHandler(this);this.mCancelable=cancelable;this.setOnCancelListener(cancelListener);}_createClass(Dialog,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'isShowing',value:function isShowing(){return this.mShowing;}},{key:'show',value:function show(){if(this.mShowing){if(this.mDecor!=null){this.mDecor.setVisibility(View.VISIBLE);}return;}this.mCanceled=false;if(!this.mCreated){this.dispatchOnCreate(null);}this.onStart();this.mDecor=this.mWindow.getDecorView();try{this.mWindowManager.addWindow(this.mWindow);this.mShowing=true;this.sendShowMessage();}finally{}}},{key:'hide',value:function hide(){if(this.mDecor!=null){this.mDecor.setVisibility(View.GONE);}}},{key:'dismiss',value:function dismiss(){this.dismissDialog();}},{key:'dismissDialog',value:function dismissDialog(){if(this.mDecor==null||!this.mShowing){return;}if(this.mWindow.isDestroyed()){Log.e(Dialog.TAG,"Tried to dismissDialog() but the Dialog's window was already destroyed!");return;}try{this.mWindowManager.removeWindow(this.mWindow);}finally{this.mDecor=null;this.onStop();this.mShowing=false;this.sendDismissMessage();}}},{key:'sendDismissMessage',value:function sendDismissMessage(){if(this.mDismissMessage!=null){Message.obtain(this.mDismissMessage).sendToTarget();}}},{key:'sendShowMessage',value:function sendShowMessage(){if(this.mShowMessage!=null){Message.obtain(this.mShowMessage).sendToTarget();}}},{key:'dispatchOnCreate',value:function dispatchOnCreate(savedInstanceState){if(!this.mCreated){this.onCreate(savedInstanceState);this.mCreated=true;}}},{key:'onCreate',value:function onCreate(savedInstanceState){}},{key:'onStart',value:function onStart(){}},{key:'onStop',value:function onStop(){}},{key:'getWindow',value:function getWindow(){return this.mWindow;}},{key:'getCurrentFocus',value:function getCurrentFocus(){return this.mWindow!=null?this.mWindow.getCurrentFocus():null;}},{key:'findViewById',value:function findViewById(id){return this.mWindow.findViewById(id);}},{key:'setContentView',value:function setContentView(view,params){this.mWindow.setContentView(view,params);}},{key:'addContentView',value:function addContentView(view,params){this.mWindow.addContentView(view,params);}},{key:'setTitle',value:function setTitle(title){this.mWindow.setTitle(title);this.mWindow.getAttributes().setTitle(title);}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK){event.startTracking();return true;}return false;}},{key:'onKeyLongPress',value:function onKeyLongPress(keyCode,event){return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&event.isTracking()&&!event.isCanceled()){this.onBackPressed();return true;}return false;}},{key:'onKeyMultiple',value:function onKeyMultiple(keyCode,repeatCount,event){return false;}},{key:'onBackPressed',value:function onBackPressed(){if(this.mCancelable){this.cancel();}}},{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mCancelable&&this.mShowing&&this.mWindow.shouldCloseOnTouch(this.mContext,event)){this.cancel();return true;}return false;}},{key:'onTrackballEvent',value:function onTrackballEvent(event){return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){if(this.mDecor!=null){this.mWindowManager.updateWindowLayout(this.mWindow,params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){if(this.mOnKeyListener!=null&&this.mOnKeyListener.onKey(this,event.getKeyCode(),event)){return true;}if(this.mWindow.superDispatchKeyEvent(event)){return true;}return event.dispatch(this,this.mDecor!=null?this.mDecor.getKeyDispatcherState():null,this);}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(this.mWindow.superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){if(this.mWindow.superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}},{key:'takeKeyEvents',value:function takeKeyEvents(get){this.mWindow.takeKeyEvents(get);}},{key:'getLayoutInflater',value:function getLayoutInflater(){return this.getWindow().getLayoutInflater();}},{key:'setCancelable',value:function setCancelable(flag){this.mCancelable=flag;}},{key:'setCanceledOnTouchOutside',value:function setCanceledOnTouchOutside(cancel){if(cancel&&!this.mCancelable){this.mCancelable=true;}this.mWindow.setCloseOnTouchOutside(cancel);}},{key:'cancel',value:function cancel(){if(!this.mCanceled&&this.mCancelMessage!=null){this.mCanceled=true;Message.obtain(this.mCancelMessage).sendToTarget();}this.dismiss();}},{key:'setOnCancelListener',value:function setOnCancelListener(listener){if(this.mCancelAndDismissTaken!=null){throw Error('new IllegalStateException("OnCancelListener is already taken by " + this.mCancelAndDismissTaken + " and can not be replaced.")');}if(listener!=null){this.mCancelMessage=this.mListenersHandler.obtainMessage(Dialog.CANCEL,listener);}else{this.mCancelMessage=null;}}},{key:'setCancelMessage',value:function setCancelMessage(msg){this.mCancelMessage=msg;}},{key:'setOnDismissListener',value:function setOnDismissListener(listener){if(this.mCancelAndDismissTaken!=null){throw Error('new IllegalStateException("OnDismissListener is already taken by " + this.mCancelAndDismissTaken + " and can not be replaced.")');}if(listener!=null){this.mDismissMessage=this.mListenersHandler.obtainMessage(Dialog.DISMISS,listener);}else{this.mDismissMessage=null;}}},{key:'setOnShowListener',value:function setOnShowListener(listener){if(listener!=null){this.mShowMessage=this.mListenersHandler.obtainMessage(Dialog.SHOW,listener);}else{this.mShowMessage=null;}}},{key:'setDismissMessage',value:function setDismissMessage(msg){this.mDismissMessage=msg;}},{key:'takeCancelAndDismissListeners',value:function takeCancelAndDismissListeners(msg,cancel,dismiss){if(this.mCancelAndDismissTaken!=null){this.mCancelAndDismissTaken=null;}else if(this.mCancelMessage!=null||this.mDismissMessage!=null){return false;}this.setOnCancelListener(cancel);this.setOnDismissListener(dismiss);this.mCancelAndDismissTaken=msg;return true;}},{key:'setOnKeyListener',value:function setOnKeyListener(onKeyListener){this.mOnKeyListener=onKeyListener;}}]);return Dialog;}();Dialog.TAG="Dialog";Dialog.DISMISS=0x43;Dialog.CANCEL=0x44;Dialog.SHOW=0x45;Dialog.DIALOG_SHOWING_TAG="android:dialogShowing";Dialog.DIALOG_HIERARCHY_TAG="android:dialogHierarchy";app.Dialog=Dialog;(function(Dialog){var ListenersHandler=function(_Handler4){_inherits(ListenersHandler,_Handler4);function ListenersHandler(dialog){_classCallCheck(this,ListenersHandler);var _this146=_possibleConstructorReturn(this,(ListenersHandler.__proto__||Object.getPrototypeOf(ListenersHandler)).call(this));_this146.mDialog=new WeakReference(dialog);return _this146;}_createClass(ListenersHandler,[{key:'handleMessage',value:function handleMessage(msg){switch(msg.what){case Dialog.DISMISS:msg.obj.onDismiss(this.mDialog.get());break;case Dialog.CANCEL:msg.obj.onCancel(this.mDialog.get());break;case Dialog.SHOW:msg.obj.onShow(this.mDialog.get());break;}}}]);return ListenersHandler;}(Handler);Dialog.ListenersHandler=ListenersHandler;})(Dialog=app.Dialog||(app.Dialog={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Log=android.util.Log;var ArrayList=java.util.ArrayList;var Arrays=java.util.Arrays;var Collections=java.util.Collections;var BaseAdapter=android.widget.BaseAdapter;var ArrayAdapter=function(_BaseAdapter2){_inherits(ArrayAdapter,_BaseAdapter2);function ArrayAdapter(){_classCallCheck(this,ArrayAdapter);var _this147=_possibleConstructorReturn(this,(ArrayAdapter.__proto__||Object.getPrototypeOf(ArrayAdapter)).call(this));_this147.mNotifyOnChange=true;if(arguments.length===2){_this147.init(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],null,new ArrayList());}else if(arguments.length===3){if((arguments.length<=2?undefined:arguments[2])instanceof Array){_this147.init(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],null,Arrays.asList(arguments.length<=2?undefined:arguments[2]));}else{_this147.init(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],new ArrayList());}}else if(arguments.length===4){_this147.init(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3]);}return _this147;}_createClass(ArrayAdapter,[{key:'add',value:function add(object){{this.mObjects.add(object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'addAll',value:function addAll(collection){{this.mObjects.addAll(collection);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'insert',value:function insert(object,index){{this.mObjects.add(index,object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'remove',value:function remove(object){{this.mObjects.remove(object);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'clear',value:function clear(){{this.mObjects.clear();}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'sort',value:function sort(comparator){{Collections.sort(this.mObjects,comparator);}if(this.mNotifyOnChange)this.notifyDataSetChanged();}},{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){_get2(ArrayAdapter.prototype.__proto__||Object.getPrototypeOf(ArrayAdapter.prototype),'notifyDataSetChanged',this).call(this);this.mNotifyOnChange=true;}},{key:'setNotifyOnChange',value:function setNotifyOnChange(notifyOnChange){this.mNotifyOnChange=notifyOnChange;}},{key:'init',value:function init(context,resource,textViewResourceId,objects){this.mContext=context;this.mInflater=context.getLayoutInflater();this.mResource=this.mDropDownResource=resource;if(objects instanceof Array)objects=Arrays.asList(objects);this.mObjects=objects;this.mFieldId=textViewResourceId;}},{key:'getContext',value:function getContext(){return this.mContext;}},{key:'getCount',value:function getCount(){return this.mObjects.size();}},{key:'getItem',value:function getItem(position){return this.mObjects.get(position);}},{key:'getPosition',value:function getPosition(item){return this.mObjects.indexOf(item);}},{key:'getItemId',value:function getItemId(position){return position;}},{key:'getView',value:function getView(position,convertView,parent){return this.createViewFromResource(position,convertView,parent,this.mResource);}},{key:'createViewFromResource',value:function createViewFromResource(position,convertView,parent,resource){var view=void 0;var text=void 0;if(convertView==null){view=this.mInflater.inflate(this.mContext.getResources().getLayout(resource),parent,false);}else{view=convertView;}try{if(this.mFieldId==null){text=view;}else{text=view.findViewById(this.mFieldId);}}catch(e){Log.e("ArrayAdapter","You must supply a resource ID for a TextView");throw Error('new IllegalStateException("ArrayAdapter requires the resource ID to be a TextView", e)');}var item=this.getItem(position);if(typeof item==='string'){text.setText(item);}else{text.setText(item.toString());}return view;}},{key:'setDropDownViewResource',value:function setDropDownViewResource(resource){this.mDropDownResource=resource;}},{key:'getDropDownView',value:function getDropDownView(position,convertView,parent){return this.createViewFromResource(position,convertView,parent,this.mDropDownResource);}}]);return ArrayAdapter;}(BaseAdapter);widget.ArrayAdapter=ArrayAdapter;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var app;(function(app){var MATCH_PARENT=android.view.ViewGroup.LayoutParams.MATCH_PARENT;var R=android.R;var DialogInterface=android.content.DialogInterface;var Handler=android.os.Handler;var Message=android.os.Message;var TextUtils=android.text.TextUtils;var Gravity=android.view.Gravity;var View=android.view.View;var LayoutParams=android.view.ViewGroup.LayoutParams;var ArrayAdapter=android.widget.ArrayAdapter;var LinearLayout=android.widget.LinearLayout;var ListView=android.widget.ListView;var WeakReference=java.lang.ref.WeakReference;var AlertController=function(){function AlertController(context,di,window){var _this148=this;_classCallCheck(this,AlertController);this.mViewSpacingLeft=0;this.mViewSpacingTop=0;this.mViewSpacingRight=0;this.mViewSpacingBottom=0;this.mViewSpacingSpecified=false;this.mCheckedItem=-1;this.mButtonHandler=function(){var inner_this=_this148;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onClick',value:function onClick(v){var m=null;if(v==inner_this.mButtonPositive&&inner_this.mButtonPositiveMessage!=null){m=Message.obtain(inner_this.mButtonPositiveMessage);}else if(v==inner_this.mButtonNegative&&inner_this.mButtonNegativeMessage!=null){m=Message.obtain(inner_this.mButtonNegativeMessage);}else if(v==inner_this.mButtonNeutral&&inner_this.mButtonNeutralMessage!=null){m=Message.obtain(inner_this.mButtonNeutralMessage);}if(m!=null){m.sendToTarget();}inner_this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG,inner_this.mDialogInterface).sendToTarget();}}]);return _Inner;}();return new _Inner();}();this.mContext=context;this.mDialogInterface=di;this.mWindow=window;this.mHandler=new AlertController.ButtonHandler(di);this.mAlertDialogLayout=R.layout.alert_dialog;this.mListLayout=R.layout.select_dialog;this.mMultiChoiceItemLayout=R.layout.select_dialog_multichoice;this.mSingleChoiceItemLayout=R.layout.select_dialog_singlechoice;this.mListItemLayout=R.layout.select_dialog_item;}_createClass(AlertController,[{key:'installContent',value:function installContent(){var layout=this.mContext.getLayoutInflater().inflate(this.mAlertDialogLayout,this.mWindow.getContentParent(),false);this.mWindow.setContentView(layout);this.setupView();}},{key:'setTitle',value:function setTitle(title){this.mTitle=title;if(this.mTitleView!=null){this.mTitleView.setText(title);}}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.mCustomTitleView=customTitleView;}},{key:'setMessage',value:function setMessage(message){this.mMessage=message;if(this.mMessageView!=null){this.mMessageView.setText(message);}}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var viewSpacingTop=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var viewSpacingRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var viewSpacingBottom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;this.mView=view;if(!viewSpacingLeft&&!viewSpacingTop&&!viewSpacingRight&&!viewSpacingBottom){this.mViewSpacingSpecified=false;}else{this.mViewSpacingSpecified=true;this.mViewSpacingLeft=viewSpacingLeft;this.mViewSpacingTop=viewSpacingTop;this.mViewSpacingRight=viewSpacingRight;this.mViewSpacingBottom=viewSpacingBottom;}}},{key:'setButton',value:function setButton(whichButton,text,listener,msg){if(msg==null&&listener!=null){msg=this.mHandler.obtainMessage(whichButton,listener);}switch(whichButton){case DialogInterface.BUTTON_POSITIVE:this.mButtonPositiveText=text;this.mButtonPositiveMessage=msg;break;case DialogInterface.BUTTON_NEGATIVE:this.mButtonNegativeText=text;this.mButtonNegativeMessage=msg;break;case DialogInterface.BUTTON_NEUTRAL:this.mButtonNeutralText=text;this.mButtonNeutralMessage=msg;break;default:throw Error('new IllegalArgumentException("Button does not exist")');}}},{key:'setIcon',value:function setIcon(icon){this.mIcon=icon;if(this.mIconView!=null&&this.mIcon!=null){this.mIconView.setImageDrawable(icon);}}},{key:'setInverseBackgroundForced',value:function setInverseBackgroundForced(forceInverseBackground){this.mForceInverseBackground=forceInverseBackground;}},{key:'getListView',value:function getListView(){return this.mListView;}},{key:'getButton',value:function getButton(whichButton){switch(whichButton){case DialogInterface.BUTTON_POSITIVE:return this.mButtonPositive;case DialogInterface.BUTTON_NEGATIVE:return this.mButtonNegative;case DialogInterface.BUTTON_NEUTRAL:return this.mButtonNeutral;default:return null;}}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){return this.mScrollView!=null&&this.mScrollView.executeKeyEvent(event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){return this.mScrollView!=null&&this.mScrollView.executeKeyEvent(event);}},{key:'setupView',value:function setupView(){var contentPanel=this.mWindow.findViewById(R.id.contentPanel);this.setupContent(contentPanel);var hasButtons=this.setupButtons();var topPanel=this.mWindow.findViewById(R.id.topPanel);var hasTitle=this.setupTitle(topPanel);var buttonPanel=this.mWindow.findViewById(R.id.buttonPanel);if(!hasButtons){buttonPanel.setVisibility(View.GONE);this.mWindow.setCloseOnTouchOutsideIfNotSet(true);}var customPanel=null;if(this.mView!=null){customPanel=this.mWindow.findViewById(R.id.customPanel);var custom=this.mWindow.findViewById(R.id.custom);custom.addView(this.mView,new LayoutParams(MATCH_PARENT,MATCH_PARENT));if(this.mViewSpacingSpecified){custom.setPadding(this.mViewSpacingLeft,this.mViewSpacingTop,this.mViewSpacingRight,this.mViewSpacingBottom);}if(this.mListView!=null){customPanel.getLayoutParams().weight=0;}}else{this.mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);}if(hasTitle){var divider=null;if(this.mMessage!=null||this.mView!=null||this.mListView!=null){divider=this.mWindow.findViewById(R.id.titleDivider);}else{divider=this.mWindow.findViewById(R.id.titleDividerTop);}if(divider!=null){divider.setVisibility(View.VISIBLE);}}this.setBackground(topPanel,contentPanel,customPanel,hasButtons,hasTitle,buttonPanel);}},{key:'setupTitle',value:function setupTitle(topPanel){var hasTitle=true;if(this.mCustomTitleView!=null){var lp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);topPanel.addView(this.mCustomTitleView,0,lp);var titleTemplate=this.mWindow.findViewById(R.id.title_template);titleTemplate.setVisibility(View.GONE);}else{var hasTextTitle=!TextUtils.isEmpty(this.mTitle);this.mIconView=this.mWindow.findViewById(R.id.icon);if(hasTextTitle){this.mTitleView=this.mWindow.findViewById(R.id.alertTitle);this.mTitleView.setText(this.mTitle);if(this.mIcon!=null){this.mIconView.setImageDrawable(this.mIcon);}else{this.mTitleView.setPadding(this.mIconView.getPaddingLeft(),this.mIconView.getPaddingTop(),this.mIconView.getPaddingRight(),this.mIconView.getPaddingBottom());this.mIconView.setVisibility(View.GONE);}}else{var _titleTemplate=this.mWindow.findViewById(R.id.title_template);_titleTemplate.setVisibility(View.GONE);this.mIconView.setVisibility(View.GONE);topPanel.setVisibility(View.GONE);hasTitle=false;}}return hasTitle;}},{key:'setupContent',value:function setupContent(contentPanel){this.mScrollView=this.mWindow.findViewById(R.id.scrollView);this.mScrollView.setFocusable(false);this.mMessageView=this.mWindow.findViewById(R.id.message);if(this.mMessageView==null){return;}if(this.mMessage!=null){this.mMessageView.setText(this.mMessage);}else{this.mMessageView.setVisibility(View.GONE);this.mScrollView.removeView(this.mMessageView);if(this.mListView!=null){contentPanel.removeView(this.mWindow.findViewById(R.id.scrollView));contentPanel.addView(this.mListView,new LinearLayout.LayoutParams(MATCH_PARENT,MATCH_PARENT));contentPanel.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT,0,1.0));}else{contentPanel.setVisibility(View.GONE);}}}},{key:'setupButtons',value:function setupButtons(){var BIT_BUTTON_POSITIVE=1;var BIT_BUTTON_NEGATIVE=2;var BIT_BUTTON_NEUTRAL=4;var whichButtons=0;this.mButtonPositive=this.mWindow.findViewById(R.id.button1);this.mButtonPositive.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonPositiveText)){this.mButtonPositive.setVisibility(View.GONE);}else{this.mButtonPositive.setText(this.mButtonPositiveText);this.mButtonPositive.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_POSITIVE;}this.mButtonNegative=this.mWindow.findViewById(R.id.button2);this.mButtonNegative.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonNegativeText)){this.mButtonNegative.setVisibility(View.GONE);}else{this.mButtonNegative.setText(this.mButtonNegativeText);this.mButtonNegative.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_NEGATIVE;}this.mButtonNeutral=this.mWindow.findViewById(R.id.button3);this.mButtonNeutral.setOnClickListener(this.mButtonHandler);if(TextUtils.isEmpty(this.mButtonNeutralText)){this.mButtonNeutral.setVisibility(View.GONE);}else{this.mButtonNeutral.setText(this.mButtonNeutralText);this.mButtonNeutral.setVisibility(View.VISIBLE);whichButtons=whichButtons|BIT_BUTTON_NEUTRAL;}if(AlertController.shouldCenterSingleButton(this.mContext)){if(whichButtons==BIT_BUTTON_POSITIVE){this.centerButton(this.mButtonPositive);}else if(whichButtons==BIT_BUTTON_NEGATIVE){this.centerButton(this.mButtonNegative);}else if(whichButtons==BIT_BUTTON_NEUTRAL){this.centerButton(this.mButtonNeutral);}}return whichButtons!=0;}},{key:'centerButton',value:function centerButton(button){var params=button.getLayoutParams();params.gravity=Gravity.CENTER_HORIZONTAL;params.weight=0.5;button.setLayoutParams(params);var leftSpacer=this.mWindow.findViewById(R.id.leftSpacer);if(leftSpacer!=null){leftSpacer.setVisibility(View.VISIBLE);}var rightSpacer=this.mWindow.findViewById(R.id.rightSpacer);if(rightSpacer!=null){rightSpacer.setVisibility(View.VISIBLE);}}},{key:'setBackground',value:function setBackground(topPanel,contentPanel,customPanel,hasButtons,hasTitle,buttonPanel){var fullDark=R.image.popup_full_bright;var topDark=R.image.popup_top_bright;var centerDark=R.image.popup_center_bright;var bottomDark=R.image.popup_bottom_bright;var fullBright=R.image.popup_full_bright;var topBright=R.image.popup_top_bright;var centerBright=R.image.popup_center_bright;var bottomBright=R.image.popup_bottom_bright;var bottomMedium=R.image.popup_bottom_bright;var views=new Array(4);var light=new Array(4);var lastView=null;var lastLight=false;var pos=0;if(hasTitle){views[pos]=topPanel;light[pos]=false;pos++;}views[pos]=contentPanel.getVisibility()==View.GONE?null:contentPanel;light[pos]=this.mListView!=null;pos++;if(customPanel!=null){views[pos]=customPanel;light[pos]=this.mForceInverseBackground;pos++;}if(hasButtons){views[pos]=buttonPanel;light[pos]=true;}var setView=false;for(pos=0;pos-1){this.mListView.setItemChecked(this.mCheckedItem,true);this.mListView.setSelection(this.mCheckedItem);}}}}],[{key:'shouldCenterSingleButton',value:function shouldCenterSingleButton(context){return true;}}]);return AlertController;}();app.AlertController=AlertController;(function(AlertController){var ButtonHandler=function(_Handler5){_inherits(ButtonHandler,_Handler5);function ButtonHandler(dialog){_classCallCheck(this,ButtonHandler);var _this149=_possibleConstructorReturn(this,(ButtonHandler.__proto__||Object.getPrototypeOf(ButtonHandler)).call(this));_this149.mDialog=new WeakReference(dialog);return _this149;}_createClass(ButtonHandler,[{key:'handleMessage',value:function handleMessage(msg){switch(msg.what){case DialogInterface.BUTTON_POSITIVE:case DialogInterface.BUTTON_NEGATIVE:case DialogInterface.BUTTON_NEUTRAL:msg.obj.onClick(this.mDialog.get(),msg.what);break;case ButtonHandler.MSG_DISMISS_DIALOG:msg.obj.dismiss();}}}]);return ButtonHandler;}(Handler);ButtonHandler.MSG_DISMISS_DIALOG=1;AlertController.ButtonHandler=ButtonHandler;var RecycleListView=function(_ListView2){_inherits(RecycleListView,_ListView2);function RecycleListView(context,bindElement,defStyle){_classCallCheck(this,RecycleListView);var _this150=_possibleConstructorReturn(this,(RecycleListView.__proto__||Object.getPrototypeOf(RecycleListView)).call(this,context,bindElement,defStyle));_this150.mRecycleOnMeasure=true;return _this150;}_createClass(RecycleListView,[{key:'recycleOnMeasure',value:function recycleOnMeasure(){return this.mRecycleOnMeasure;}}]);return RecycleListView;}(ListView);AlertController.RecycleListView=RecycleListView;var AlertParams=function(){function AlertParams(context){_classCallCheck(this,AlertParams);this.mIconId=0;this.mViewSpacingLeft=0;this.mViewSpacingTop=0;this.mViewSpacingRight=0;this.mViewSpacingBottom=0;this.mViewSpacingSpecified=false;this.mCheckedItem=-1;this.mRecycleOnMeasure=true;this.mContext=context;this.mCancelable=true;this.mInflater=context.getLayoutInflater();}_createClass(AlertParams,[{key:'apply',value:function apply(dialog){if(this.mCustomTitleView!=null){dialog.setCustomTitle(this.mCustomTitleView);}else{if(this.mTitle!=null){dialog.setTitle(this.mTitle);}if(this.mIcon!=null){dialog.setIcon(this.mIcon);}}if(this.mMessage!=null){dialog.setMessage(this.mMessage);}if(this.mPositiveButtonText!=null){dialog.setButton(DialogInterface.BUTTON_POSITIVE,this.mPositiveButtonText,this.mPositiveButtonListener,null);}if(this.mNegativeButtonText!=null){dialog.setButton(DialogInterface.BUTTON_NEGATIVE,this.mNegativeButtonText,this.mNegativeButtonListener,null);}if(this.mNeutralButtonText!=null){dialog.setButton(DialogInterface.BUTTON_NEUTRAL,this.mNeutralButtonText,this.mNeutralButtonListener,null);}if(this.mForceInverseBackground){dialog.setInverseBackgroundForced(true);}if(this.mItems!=null||this.mAdapter!=null){this.createListView(dialog);}if(this.mView!=null){if(this.mViewSpacingSpecified){dialog.setView(this.mView,this.mViewSpacingLeft,this.mViewSpacingTop,this.mViewSpacingRight,this.mViewSpacingBottom);}else{dialog.setView(this.mView);}}}},{key:'createListView',value:function createListView(dialog){var _this151=this;var listView=this.mInflater.inflate(dialog.mListLayout,null);var adapter=void 0;if(this.mIsMultiChoice){adapter=function(){var inner_this=_this151;var _Inner=function(_ArrayAdapter){_inherits(_Inner,_ArrayAdapter);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,(_Inner.__proto__||Object.getPrototypeOf(_Inner)).apply(this,arguments));}_createClass(_Inner,[{key:'getView',value:function getView(position,convertView,parent){var view=_get2(_Inner.prototype.__proto__||Object.getPrototypeOf(_Inner.prototype),'getView',this).call(this,position,convertView,parent);if(inner_this.mCheckedItems!=null){var isItemChecked=inner_this.mCheckedItems[position];if(isItemChecked){listView.setItemChecked(position,true);}}return view;}}]);return _Inner;}(ArrayAdapter);return new _Inner(_this151.mContext,dialog.mMultiChoiceItemLayout,R.id.text1,_this151.mItems);}();}else{var layout=this.mIsSingleChoice?dialog.mSingleChoiceItemLayout:dialog.mListItemLayout;adapter=this.mAdapter!=null?this.mAdapter:new ArrayAdapter(this.mContext,layout,R.id.text1,this.mItems);}if(this.mOnPrepareListViewListener!=null){this.mOnPrepareListViewListener.onPrepareListView(listView);}dialog.mAdapter=adapter;dialog.mCheckedItem=this.mCheckedItem;var inner_this=this;if(this.mOnClickListener!=null){listView.setOnItemClickListener({onItemClick:function onItemClick(parent,v,position,id){inner_this.mOnClickListener.onClick(dialog.mDialogInterface,position);if(!inner_this.mIsSingleChoice){dialog.mDialogInterface.dismiss();}}});}else if(this.mOnCheckboxClickListener!=null){listView.setOnItemClickListener({onItemClick:function onItemClick(parent,v,position,id){if(inner_this.mCheckedItems!=null){inner_this.mCheckedItems[position]=listView.isItemChecked(position);}inner_this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface,position,listView.isItemChecked(position));}});}if(this.mOnItemSelectedListener!=null){listView.setOnItemSelectedListener(this.mOnItemSelectedListener);}if(this.mIsSingleChoice){listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);}else if(this.mIsMultiChoice){listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);}listView.mRecycleOnMeasure=this.mRecycleOnMeasure;dialog.mListView=listView;}}]);return AlertParams;}();AlertController.AlertParams=AlertParams;})(AlertController=app.AlertController||(app.AlertController={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var app;(function(app){var Dialog=android.app.Dialog;var AlertDialog=function(_Dialog){_inherits(AlertDialog,_Dialog);function AlertDialog(context,cancelable,cancelListener){_classCallCheck(this,AlertDialog);var _this153=_possibleConstructorReturn(this,(AlertDialog.__proto__||Object.getPrototypeOf(AlertDialog)).call(this,context));_this153.setCancelable(cancelable);_this153.setOnCancelListener(cancelListener);_this153.mAlert=new app.AlertController(context,_this153,_this153.getWindow());return _this153;}_createClass(AlertDialog,[{key:'getButton',value:function getButton(whichButton){return this.mAlert.getButton(whichButton);}},{key:'getListView',value:function getListView(){return this.mAlert.getListView();}},{key:'setTitle',value:function setTitle(title){_get2(AlertDialog.prototype.__proto__||Object.getPrototypeOf(AlertDialog.prototype),'setTitle',this).call(this,title);this.mAlert.setTitle(title);}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.mAlert.setCustomTitle(customTitleView);}},{key:'setMessage',value:function setMessage(message){this.mAlert.setMessage(message);}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var viewSpacingTop=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var viewSpacingRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var viewSpacingBottom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;this.mAlert.setView(view,viewSpacingLeft,viewSpacingTop,viewSpacingRight,viewSpacingBottom);}},{key:'setButton',value:function setButton(whichButton,text,listener){this.mAlert.setButton(whichButton,text,listener,null);}},{key:'setIcon',value:function setIcon(icon){this.mAlert.setIcon(icon);}},{key:'onCreate',value:function onCreate(savedInstanceState){_get2(AlertDialog.prototype.__proto__||Object.getPrototypeOf(AlertDialog.prototype),'onCreate',this).call(this,savedInstanceState);this.mAlert.installContent();}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.mAlert.onKeyDown(keyCode,event))return true;return _get2(AlertDialog.prototype.__proto__||Object.getPrototypeOf(AlertDialog.prototype),'onKeyDown',this).call(this,keyCode,event);}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(this.mAlert.onKeyUp(keyCode,event))return true;return _get2(AlertDialog.prototype.__proto__||Object.getPrototypeOf(AlertDialog.prototype),'onKeyUp',this).call(this,keyCode,event);}}]);return AlertDialog;}(Dialog);AlertDialog.THEME_TRADITIONAL=1;AlertDialog.THEME_HOLO_DARK=2;AlertDialog.THEME_HOLO_LIGHT=3;AlertDialog.THEME_DEVICE_DEFAULT_DARK=4;AlertDialog.THEME_DEVICE_DEFAULT_LIGHT=5;app.AlertDialog=AlertDialog;(function(AlertDialog){var Builder=function(){function Builder(context){_classCallCheck(this,Builder);this.P=new app.AlertController.AlertParams(context);}_createClass(Builder,[{key:'getContext',value:function getContext(){return this.P.mContext;}},{key:'setTitle',value:function setTitle(title){this.P.mTitle=title;return this;}},{key:'setCustomTitle',value:function setCustomTitle(customTitleView){this.P.mCustomTitleView=customTitleView;return this;}},{key:'setMessage',value:function setMessage(message){this.P.mMessage=message;return this;}},{key:'setIcon',value:function setIcon(icon){this.P.mIcon=icon;return this;}},{key:'setPositiveButton',value:function setPositiveButton(text,listener){this.P.mPositiveButtonText=text;this.P.mPositiveButtonListener=listener;return this;}},{key:'setNegativeButton',value:function setNegativeButton(text,listener){this.P.mNegativeButtonText=text;this.P.mNegativeButtonListener=listener;return this;}},{key:'setNeutralButton',value:function setNeutralButton(text,listener){this.P.mNeutralButtonText=text;this.P.mNeutralButtonListener=listener;return this;}},{key:'setCancelable',value:function setCancelable(cancelable){this.P.mCancelable=cancelable;return this;}},{key:'setOnCancelListener',value:function setOnCancelListener(onCancelListener){this.P.mOnCancelListener=onCancelListener;return this;}},{key:'setOnDismissListener',value:function setOnDismissListener(onDismissListener){this.P.mOnDismissListener=onDismissListener;return this;}},{key:'setOnKeyListener',value:function setOnKeyListener(onKeyListener){this.P.mOnKeyListener=onKeyListener;return this;}},{key:'setItems',value:function setItems(items,listener){this.P.mItems=items;this.P.mOnClickListener=listener;return this;}},{key:'setAdapter',value:function setAdapter(adapter,listener){this.P.mAdapter=adapter;this.P.mOnClickListener=listener;return this;}},{key:'setMultiChoiceItems',value:function setMultiChoiceItems(items,checkedItems,listener){this.P.mItems=items;this.P.mOnCheckboxClickListener=listener;this.P.mCheckedItems=checkedItems;this.P.mIsMultiChoice=true;return this;}},{key:'setSingleChoiceItems',value:function setSingleChoiceItems(items,checkedItem,listener){this.P.mItems=items;this.P.mOnClickListener=listener;this.P.mCheckedItem=checkedItem;this.P.mIsSingleChoice=true;return this;}},{key:'setSingleChoiceItemsWithAdapter',value:function setSingleChoiceItemsWithAdapter(adapter,checkedItem,listener){this.P.mAdapter=adapter;this.P.mOnClickListener=listener;this.P.mCheckedItem=checkedItem;this.P.mIsSingleChoice=true;return this;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(listener){this.P.mOnItemSelectedListener=listener;return this;}},{key:'setView',value:function setView(view){var viewSpacingLeft=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var viewSpacingTop=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var viewSpacingRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var viewSpacingBottom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;this.P.mView=view;if(!viewSpacingLeft&&!viewSpacingTop&&!viewSpacingRight&&!viewSpacingBottom){this.P.mViewSpacingSpecified=false;}else{this.P.mViewSpacingSpecified=true;this.P.mViewSpacingLeft=viewSpacingLeft;this.P.mViewSpacingTop=viewSpacingTop;this.P.mViewSpacingRight=viewSpacingRight;this.P.mViewSpacingBottom=viewSpacingBottom;}return this;}},{key:'setInverseBackgroundForced',value:function setInverseBackgroundForced(useInverseBackground){this.P.mForceInverseBackground=useInverseBackground;return this;}},{key:'setRecycleOnMeasureEnabled',value:function setRecycleOnMeasureEnabled(enabled){this.P.mRecycleOnMeasure=enabled;return this;}},{key:'create',value:function create(){var dialog=new AlertDialog(this.P.mContext);this.P.apply(dialog.mAlert);dialog.setCancelable(this.P.mCancelable);if(this.P.mCancelable){dialog.setCanceledOnTouchOutside(true);}dialog.setOnCancelListener(this.P.mOnCancelListener);dialog.setOnDismissListener(this.P.mOnDismissListener);if(this.P.mOnKeyListener!=null){dialog.setOnKeyListener(this.P.mOnKeyListener);}return dialog;}},{key:'show',value:function show(){var dialog=this.create();dialog.show();return dialog;}}]);return Builder;}();AlertDialog.Builder=Builder;})(AlertDialog=app.AlertDialog||(app.AlertDialog={}));})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var Rect=android.graphics.Rect;var SparseArray=android.util.SparseArray;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var AdapterView=android.widget.AdapterView;var ArrayAdapter=android.widget.ArrayAdapter;var AbsSpinner=function(_AdapterView2){_inherits(AbsSpinner,_AdapterView2);function AbsSpinner(context,bindElement,defStyle){_classCallCheck(this,AbsSpinner);var _this154=_possibleConstructorReturn(this,(AbsSpinner.__proto__||Object.getPrototypeOf(AbsSpinner)).call(this,context,bindElement,defStyle));_this154.mHeightMeasureSpec=0;_this154.mWidthMeasureSpec=0;_this154.mSelectionLeftPadding=0;_this154.mSelectionTopPadding=0;_this154.mSelectionRightPadding=0;_this154.mSelectionBottomPadding=0;_this154.mSpinnerPadding=new Rect();_this154.mRecycler=new AbsSpinner.RecycleBin(_this154);_this154.initAbsSpinner();var a=context.obtainStyledAttributes(bindElement,defStyle);var entries=a.getTextArray('entries');if(entries!=null){var adapter=new ArrayAdapter(context,android.R.layout.simple_spinner_item,entries);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);_this154.setAdapter(adapter);}a.recycle();return _this154;}_createClass(AbsSpinner,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(AbsSpinner.prototype.__proto__||Object.getPrototypeOf(AbsSpinner.prototype),'createClassAttrBinder',this).call(this).set('entries',{setter:function setter(v,value,attrBinder){var entries=attrBinder.parseStringArray(value);if(entries!=null){var adapter=new ArrayAdapter(v.getContext(),android.R.layout.simple_spinner_item,entries);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);v.setAdapter(adapter);}}});}},{key:'initAbsSpinner',value:function initAbsSpinner(){this.setFocusable(true);this.setWillNotDraw(false);}},{key:'setAdapter',value:function setAdapter(adapter){if(null!=this.mAdapter){this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);this.resetList();}this.mAdapter=adapter;this.mOldSelectedPosition=AbsSpinner.INVALID_POSITION;this.mOldSelectedRowId=AbsSpinner.INVALID_ROW_ID;if(this.mAdapter!=null){this.mOldItemCount=this.mItemCount;this.mItemCount=this.mAdapter.getCount();this.checkFocus();this.mDataSetObserver=new AdapterView.AdapterDataSetObserver(this);this.mAdapter.registerDataSetObserver(this.mDataSetObserver);var position=this.mItemCount>0?0:AbsSpinner.INVALID_POSITION;this.setSelectedPositionInt(position);this.setNextSelectedPositionInt(position);if(this.mItemCount==0){this.checkSelectionChanged();}}else{this.checkFocus();this.resetList();this.checkSelectionChanged();}this.requestLayout();}},{key:'resetList',value:function resetList(){this.mDataChanged=false;this.mNeedSync=false;this.removeAllViewsInLayout();this.mOldSelectedPosition=AbsSpinner.INVALID_POSITION;this.mOldSelectedRowId=AbsSpinner.INVALID_ROW_ID;this.setSelectedPositionInt(AbsSpinner.INVALID_POSITION);this.setNextSelectedPositionInt(AbsSpinner.INVALID_POSITION);this.invalidate();}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var widthMode=View.MeasureSpec.getMode(widthMeasureSpec);var widthSize=void 0;var heightSize=void 0;this.mSpinnerPadding.left=this.mPaddingLeft>this.mSelectionLeftPadding?this.mPaddingLeft:this.mSelectionLeftPadding;this.mSpinnerPadding.top=this.mPaddingTop>this.mSelectionTopPadding?this.mPaddingTop:this.mSelectionTopPadding;this.mSpinnerPadding.right=this.mPaddingRight>this.mSelectionRightPadding?this.mPaddingRight:this.mSelectionRightPadding;this.mSpinnerPadding.bottom=this.mPaddingBottom>this.mSelectionBottomPadding?this.mPaddingBottom:this.mSelectionBottomPadding;if(this.mDataChanged){this.handleDataChanged();}var preferredHeight=0;var preferredWidth=0;var needsMeasuring=true;var selectedPosition=this.getSelectedItemPosition();if(selectedPosition>=0&&this.mAdapter!=null&&selectedPosition0&&this.mSelectedPosition>=0){return this.getChildAt(this.mSelectedPosition-this.mFirstPosition);}else{return null;}}},{key:'requestLayout',value:function requestLayout(){if(!this.mBlockLayoutRequests){_get2(AbsSpinner.prototype.__proto__||Object.getPrototypeOf(AbsSpinner.prototype),'requestLayout',this).call(this);}}},{key:'getAdapter',value:function getAdapter(){return this.mAdapter;}},{key:'getCount',value:function getCount(){return this.mItemCount;}},{key:'pointToPosition',value:function pointToPosition(x,y){var frame=this.mTouchFrame;if(frame==null){this.mTouchFrame=new Rect();frame=this.mTouchFrame;}var count=this.getChildCount();for(var i=count-1;i>=0;i--){var child=this.getChildAt(i);if(child.getVisibility()==View.VISIBLE){child.getHitRect(frame);if(frame.contains(x,y)){return this.mFirstPosition+i;}}}return AbsSpinner.INVALID_POSITION;}}]);return AbsSpinner;}(AdapterView);widget.AbsSpinner=AbsSpinner;(function(AbsSpinner){var RecycleBin=function(){function RecycleBin(arg){_classCallCheck(this,RecycleBin);this.mScrapHeap=new SparseArray();this._AbsSpinner_this=arg;}_createClass(RecycleBin,[{key:'put',value:function put(position,v){this.mScrapHeap.put(position,v);}},{key:'get',value:function get(position){var result=this.mScrapHeap.get(position);if(result!=null){this.mScrapHeap.delete(position);}else{}return result;}},{key:'clear',value:function clear(){var scrapHeap=this.mScrapHeap;var count=scrapHeap.size();for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:0;var yoff=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var gravity=arguments.length>3&&arguments[3]!==undefined?arguments[3]:PopupWindow.DEFAULT_ANCHORED_GRAVITY;if(this.isShowing()||this.mContentView==null){return;}this.registerForScrollChanged(anchor,xoff,yoff,gravity);this.mIsShowing=true;this.mIsDropdown=true;var p=this.createPopupLayout();this.preparePopup(p);this.updateAboveAnchor(this.findDropDownPosition(anchor,p,xoff,yoff,gravity));if(this.mHeightMode<0)p.height=this.mLastHeight=this.mHeightMode;if(this.mWidthMode<0)p.width=this.mLastWidth=this.mWidthMode;p.enterAnimation=this.computeWindowEnterAnimation();p.exitAnimation=this.computeWindowExitAnimation();this.invokePopup(p);}},{key:'updateAboveAnchor',value:function updateAboveAnchor(aboveAnchor){if(aboveAnchor!=this.mAboveAnchor){this.mAboveAnchor=aboveAnchor;if(this.mBackground!=null){if(this.mAboveAnchorBackgroundDrawable!=null){if(this.mAboveAnchor){this.mPopupView.setBackgroundDrawable(this.mAboveAnchorBackgroundDrawable);}else{this.mPopupView.setBackgroundDrawable(this.mBelowAnchorBackgroundDrawable);}}else{this.mPopupView.refreshDrawableState();}}}}},{key:'isAboveAnchor',value:function isAboveAnchor(){return this.mAboveAnchor;}},{key:'preparePopup',value:function preparePopup(p){if(this.mContentView==null||this.mContext==null||this.mWindowManager==null){throw Error('new IllegalStateException("You must specify a valid content view by " + "calling setContentView() before attempting to show the popup.")');}this.mPopupWindow.setContentView(this.mContentView);this.mPopupWindow.setFloating(true);this.mPopupWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);this.mPopupWindow.setDimAmount(0);this.mPopupView=this.mPopupWindow.getDecorView();if(this.mBackground!=null){this.mPopupView.setBackground(this.mBackground);}this.mPopupViewInitialLayoutDirectionInherited=false;this.mPopupWidth=p.width;this.mPopupHeight=p.height;}},{key:'invokePopup',value:function invokePopup(p){this.setLayoutDirectionFromAnchor();this.mWindowManager.addWindow(this.mPopupWindow);}},{key:'setLayoutDirectionFromAnchor',value:function setLayoutDirectionFromAnchor(){if(this.mAnchor!=null){var anchor=this.mAnchor.get();if(anchor!=null&&this.mPopupViewInitialLayoutDirectionInherited){this.mPopupView.setLayoutDirection(anchor.getLayoutDirection());}}}},{key:'createPopupLayout',value:function createPopupLayout(){var p=this.mPopupWindow.getAttributes();p.gravity=Gravity.START|Gravity.TOP;p.width=this.mLastWidth=this.mWidth;p.height=this.mLastHeight=this.mHeight;p.flags=this.computeFlags(p.flags);p.type=this.mWindowLayoutType;p.setTitle("PopupWindow");return p;}},{key:'computeFlags',value:function computeFlags(curFlags){curFlags&=~(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|WindowManager.LayoutParams.FLAG_SPLIT_TOUCH);if(!this.mFocusable){curFlags|=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;}if(!this.mTouchable){curFlags|=WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;}if(this.mOutsideTouchable){curFlags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;}if(this.isSplitTouchEnabled()){curFlags|=WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;}if(this.mNotTouchModal){curFlags|=WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;}return curFlags;}},{key:'computeWindowEnterAnimation',value:function computeWindowEnterAnimation(){if(this.mEnterAnimation==null){if(this.mIsDropdown){return this.mAboveAnchor?this.mDefaultDropdownAboveEnterAnimation:this.mDefaultDropdownBelowEnterAnimation;}return null;}return this.mEnterAnimation;}},{key:'computeWindowExitAnimation',value:function computeWindowExitAnimation(){if(this.mExitAnimation==null){if(this.mIsDropdown){return this.mAboveAnchor?this.mDefaultDropdownAboveExitAnimation:this.mDefaultDropdownBelowExitAnimation;}return null;}return this.mExitAnimation;}},{key:'findDropDownPosition',value:function findDropDownPosition(anchor,p,xoff,yoff,gravity){var anchorHeight=anchor.getHeight();anchor.getLocationInWindow(this.mDrawingLocation);p.x=this.mDrawingLocation[0]+xoff;p.y=this.mDrawingLocation[1]+anchorHeight+yoff;var hgrav=Gravity.getAbsoluteGravity(gravity,anchor.getLayoutDirection())&Gravity.HORIZONTAL_GRAVITY_MASK;if(hgrav==Gravity.RIGHT){p.x-=this.mPopupWidth-anchor.getWidth();}var onTop=false;p.gravity=Gravity.LEFT|Gravity.TOP;anchor.getLocationOnScreen(this.mScreenLocation);var displayFrame=new Rect();anchor.getWindowVisibleDisplayFrame(displayFrame);var screenY=this.mScreenLocation[1]+anchorHeight+yoff;var root=anchor.getRootView();if(screenY+this.mPopupHeight>displayFrame.bottom||p.x+this.mPopupWidth-root.getWidth()>0){if(this.mAllowScrollingAnchorParent){var scrollX=anchor.getScrollX();var scrollY=anchor.getScrollY();var _r3=new Rect(scrollX,scrollY,scrollX+this.mPopupWidth+xoff,scrollY+this.mPopupHeight+anchor.getHeight()+yoff);anchor.requestRectangleOnScreen(_r3,true);}anchor.getLocationInWindow(this.mDrawingLocation);p.x=this.mDrawingLocation[0]+xoff;p.y=this.mDrawingLocation[1]+anchor.getHeight()+yoff;if(hgrav==Gravity.RIGHT){p.x-=this.mPopupWidth-anchor.getWidth();}anchor.getLocationOnScreen(this.mScreenLocation);onTop=displayFrame.bottom-this.mScreenLocation[1]-anchor.getHeight()-yoffdisplayFrameWidth){p.x-=right-displayFrameWidth;}if(p.x1&&arguments[1]!==undefined?arguments[1]:0;var ignoreBottomDecorations=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var displayFrame=new Rect();anchor.getWindowVisibleDisplayFrame(displayFrame);var anchorPos=this.mDrawingLocation;anchor.getLocationOnScreen(anchorPos);var bottomEdge=displayFrame.bottom;if(ignoreBottomDecorations){var res=anchor.getContext().getResources();bottomEdge=res.getDisplayMetrics().heightPixels;}var distanceToBottom=bottomEdge-(anchorPos[1]+anchor.getHeight())-yOffset;var distanceToTop=anchorPos[1]-displayFrame.top+yOffset;var returnedHeight=Math.max(distanceToBottom,distanceToTop);if(this.mBackground!=null){this.mBackground.getPadding(this.mTempRect);returnedHeight-=this.mTempRect.top+this.mTempRect.bottom;}return returnedHeight;}},{key:'dismiss',value:function dismiss(){if(this.isShowing()&&this.mPopupView!=null){this.mIsShowing=false;this.unregisterForScrollChanged();try{this.mWindowManager.removeWindow(this.mPopupWindow);}finally{if(this.mPopupView!=this.mContentView&&this.mPopupView instanceof ViewGroup){this.mPopupView.removeView(this.mContentView);}this.mPopupView=null;if(this.mOnDismissListener!=null){this.mOnDismissListener.onDismiss();}}}}},{key:'setOnDismissListener',value:function setOnDismissListener(onDismissListener){this.mOnDismissListener=onDismissListener;}},{key:'update',value:function update(){if(arguments.length==0){this._update();}else if(arguments.length==2){this._update_w_h(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]);}else if(arguments.length==3){this._update_a_w_h(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2]);}else if(arguments.length==4){this._update_x_y_w_h_f(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3]);}else if(arguments.length==5){if((arguments.length<=0?undefined:arguments[0])instanceof View)this._update_a_x_y_w_h(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3],arguments.length<=4?undefined:arguments[4]);else this._update_x_y_w_h_f(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3],arguments.length<=4?undefined:arguments[4]);}}},{key:'_update',value:function _update(){if(!this.isShowing()||this.mContentView==null){return;}var p=this.mPopupView.getLayoutParams();var update=false;var enterAnim=this.computeWindowEnterAnimation();var exitAnim=this.computeWindowExitAnimation();if(enterAnim!=p.enterAnimation){p.enterAnimation=enterAnim;update=true;}if(exitAnim!=p.exitAnimation){p.exitAnimation=exitAnim;update=true;}var newFlags=this.computeFlags(p.flags);if(newFlags!=p.flags){p.flags=newFlags;update=true;}if(update){this.setLayoutDirectionFromAnchor();this.mWindowManager.updateWindowLayout(this.mPopupWindow,p);}}},{key:'_update_w_h',value:function _update_w_h(width,height){var p=this.mPopupView.getLayoutParams();this.update(p.x,p.y,width,height,false);}},{key:'_update_x_y_w_h_f',value:function _update_x_y_w_h_f(x,y,width,height){var force=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;if(width!=-1){this.mLastWidth=width;this.setWidth(width);}if(height!=-1){this.mLastHeight=height;this.setHeight(height);}if(!this.isShowing()||this.mContentView==null){return;}var p=this.mPopupView.getLayoutParams();var update=force;var finalWidth=this.mWidthMode<0?this.mWidthMode:this.mLastWidth;if(width!=-1&&p.width!=finalWidth){p.width=this.mLastWidth=finalWidth;update=true;}var finalHeight=this.mHeightMode<0?this.mHeightMode:this.mLastHeight;if(height!=-1&&p.height!=finalHeight){p.height=this.mLastHeight=finalHeight;update=true;}if(p.x!=x){p.x=x;update=true;}if(p.y!=y){p.y=y;update=true;}var enterAnim=this.computeWindowEnterAnimation();var exitAnim=this.computeWindowExitAnimation();if(enterAnim!=p.enterAnimation){p.enterAnimation=enterAnim;update=true;}if(exitAnim!=p.exitAnimation){p.exitAnimation=exitAnim;update=true;}var newFlags=this.computeFlags(p.flags);if(newFlags!=p.flags){p.flags=newFlags;update=true;}if(update){this.setLayoutDirectionFromAnchor();this.mWindowManager.updateWindowLayout(this.mPopupWindow,p);}}},{key:'_update_a_w_h',value:function _update_a_w_h(anchor,width,height){this._update_all_args(anchor,false,0,0,true,width,height,this.mAnchoredGravity);}},{key:'_update_a_x_y_w_h',value:function _update_a_x_y_w_h(anchor,xoff,yoff,width,height){this._update_all_args(anchor,true,xoff,yoff,true,width,height,this.mAnchoredGravity);}},{key:'_update_all_args',value:function _update_all_args(anchor,updateLocation,xoff,yoff,updateDimension,width,height,gravity){if(!this.isShowing()||this.mContentView==null){return;}var oldAnchor=this.mAnchor;var needsUpdate=updateLocation&&(this.mAnchorXoff!=xoff||this.mAnchorYoff!=yoff);if(oldAnchor==null||oldAnchor.get()!=anchor||needsUpdate&&!this.mIsDropdown){this.registerForScrollChanged(anchor,xoff,yoff,gravity);}else if(needsUpdate){this.mAnchorXoff=xoff;this.mAnchorYoff=yoff;this.mAnchoredGravity=gravity;}var p=this.mPopupView.getLayoutParams();if(updateDimension){if(width==-1){width=this.mPopupWidth;}else{this.mPopupWidth=width;}if(height==-1){height=this.mPopupHeight;}else{this.mPopupHeight=height;}}var x=p.x;var y=p.y;if(updateLocation){this.updateAboveAnchor(this.findDropDownPosition(anchor,p,xoff,yoff,gravity));}else{this.updateAboveAnchor(this.findDropDownPosition(anchor,p,this.mAnchorXoff,this.mAnchorYoff,this.mAnchoredGravity));}this.update(p.x,p.y,width,height,x!=p.x||y!=p.y);}},{key:'unregisterForScrollChanged',value:function unregisterForScrollChanged(){var anchorRef=this.mAnchor;var anchor=null;if(anchorRef!=null){anchor=anchorRef.get();}if(anchor!=null){var vto=anchor.getViewTreeObserver();vto.removeOnScrollChangedListener(this.mOnScrollChangedListener);}this.mAnchor=null;}},{key:'registerForScrollChanged',value:function registerForScrollChanged(anchor,xoff,yoff,gravity){this.unregisterForScrollChanged();this.mAnchor=new WeakReference(anchor);var vto=anchor.getViewTreeObserver();if(vto!=null){vto.addOnScrollChangedListener(this.mOnScrollChangedListener);}this.mAnchorXoff=xoff;this.mAnchorYoff=yoff;this.mAnchoredGravity=gravity;}},{key:'onTouchEvent',value:function onTouchEvent(event){var x=Math.floor(event.getX());var y=Math.floor(event.getY());if(event.getAction()==MotionEvent.ACTION_DOWN&&(x<0||x>=this.mPopupView.getWidth()||y<0||y>=this.mPopupView.getHeight())){this.dismiss();return true;}else if(event.getAction()==MotionEvent.ACTION_OUTSIDE){this.dismiss();return true;}else if(this.mPopupView){return this.mPopupView.onTouchEvent(event);}return false;}},{key:'onGenericMotionEvent',value:function onGenericMotionEvent(event){return false;}},{key:'onWindowAttributesChanged',value:function onWindowAttributesChanged(params){if(this.mPopupWindow!=null){this.mWindowManager.updateWindowLayout(this.mPopupWindow,params);}}},{key:'onContentChanged',value:function onContentChanged(){}},{key:'onWindowFocusChanged',value:function onWindowFocusChanged(hasFocus){}},{key:'onAttachedToWindow',value:function onAttachedToWindow(){}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){}},{key:'dispatchKeyEvent',value:function dispatchKeyEvent(event){if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){if(this.mPopupView.getKeyDispatcherState()==null){return this.mPopupWindow.superDispatchKeyEvent(event);}if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getRepeatCount()==0){var state=this.mPopupView.getKeyDispatcherState();if(state!=null){state.startTracking(event,this);}return true;}else if(event.getAction()==KeyEvent.ACTION_UP){var _state2=this.mPopupView.getKeyDispatcherState();if(_state2!=null&&_state2.isTracking(event)&&!event.isCanceled()){this.dismiss();return true;}}return this.mPopupWindow.superDispatchKeyEvent(event);}else{return this.mPopupWindow.superDispatchKeyEvent(event);}}},{key:'dispatchTouchEvent',value:function dispatchTouchEvent(ev){if(this.mTouchInterceptor!=null&&this.mTouchInterceptor.onTouch(this.mPopupView,ev)){return true;}if(this.mPopupWindow.superDispatchTouchEvent(ev)){return true;}return this.onTouchEvent(ev);}},{key:'dispatchGenericMotionEvent',value:function dispatchGenericMotionEvent(ev){if(this.mPopupWindow.superDispatchGenericMotionEvent(ev)){return true;}return this.onGenericMotionEvent(ev);}}]);return PopupWindow;}();PopupWindow.INPUT_METHOD_FROM_FOCUSABLE=0;PopupWindow.INPUT_METHOD_NEEDED=1;PopupWindow.INPUT_METHOD_NOT_NEEDED=2;PopupWindow.DEFAULT_ANCHORED_GRAVITY=Gravity.TOP|Gravity.START;widget.PopupWindow=PopupWindow;})(widget=android.widget||(android.widget={}));})(android||(android={}));var android;(function(android){var widget;(function(widget){var DataSetObserver=android.database.DataSetObserver;var Rect=android.graphics.Rect;var Handler=android.os.Handler;var Log=android.util.Log;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var View=android.view.View;var MeasureSpec=android.view.View.MeasureSpec;var ViewConfiguration=android.view.ViewConfiguration;var ViewGroup=android.view.ViewGroup;var Integer=java.lang.Integer;var AbsListView=android.widget.AbsListView;var LinearLayout=android.widget.LinearLayout;var ListView=android.widget.ListView;var PopupWindow=android.widget.PopupWindow;var TextView=android.widget.TextView;var ListPopupWindow=function(){function ListPopupWindow(context){var styleAttr=arguments.length>1&&arguments[1]!==undefined?arguments[1]:android.R.attr.listPopupWindowStyle;_classCallCheck(this,ListPopupWindow);this.mDropDownHeight=ViewGroup.LayoutParams.WRAP_CONTENT;this.mDropDownWidth=ViewGroup.LayoutParams.WRAP_CONTENT;this.mDropDownHorizontalOffset=0;this.mDropDownVerticalOffset=0;this.mDropDownGravity=Gravity.NO_GRAVITY;this.mDropDownAlwaysVisible=false;this.mForceIgnoreOutsideTouch=false;this.mListItemExpandMaximum=Integer.MAX_VALUE;this.mPromptPosition=ListPopupWindow.POSITION_PROMPT_ABOVE;this.mResizePopupRunnable=new ListPopupWindow.ResizePopupRunnable(this);this.mTouchInterceptor=new ListPopupWindow.PopupTouchInterceptor(this);this.mScrollListener=new ListPopupWindow.PopupScrollListener(this);this.mHideSelector=new ListPopupWindow.ListSelectorHider(this);this.mHandler=new Handler();this.mTempRect=new Rect();this.mLayoutDirection=0;this.mContext=context;this.mPopup=new PopupWindow(context,styleAttr);this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);this.mLayoutDirection=View.LAYOUT_DIRECTION_LTR;}_createClass(ListPopupWindow,[{key:'setAdapter',value:function setAdapter(adapter){if(this.mObserver==null){this.mObserver=new ListPopupWindow.PopupDataSetObserver(this);}else if(this.mAdapter!=null){this.mAdapter.unregisterDataSetObserver(this.mObserver);}this.mAdapter=adapter;if(this.mAdapter!=null){adapter.registerDataSetObserver(this.mObserver);}if(this.mDropDownList!=null){this.mDropDownList.setAdapter(this.mAdapter);}}},{key:'setPromptPosition',value:function setPromptPosition(position){this.mPromptPosition=position;}},{key:'getPromptPosition',value:function getPromptPosition(){return this.mPromptPosition;}},{key:'setModal',value:function setModal(modal){this.mModal=true;this.mPopup.setFocusable(modal);}},{key:'isModal',value:function isModal(){return this.mModal;}},{key:'setForceIgnoreOutsideTouch',value:function setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch){this.mForceIgnoreOutsideTouch=forceIgnoreOutsideTouch;}},{key:'setDropDownAlwaysVisible',value:function setDropDownAlwaysVisible(dropDownAlwaysVisible){this.mDropDownAlwaysVisible=dropDownAlwaysVisible;}},{key:'isDropDownAlwaysVisible',value:function isDropDownAlwaysVisible(){return this.mDropDownAlwaysVisible;}},{key:'getBackground',value:function getBackground(){return this.mPopup.getBackground();}},{key:'setBackgroundDrawable',value:function setBackgroundDrawable(d){this.mPopup.setBackgroundDrawable(d);}},{key:'setWindowAnimation',value:function setWindowAnimation(enterAnimation,exitAnimation){this.mPopup.setWindowAnimation(enterAnimation,exitAnimation);}},{key:'getEnterAnimation',value:function getEnterAnimation(){return this.mPopup.mEnterAnimation;}},{key:'getExitAnimation',value:function getExitAnimation(){return this.mPopup.mExitAnimation;}},{key:'getAnchorView',value:function getAnchorView(){return this.mDropDownAnchorView;}},{key:'setAnchorView',value:function setAnchorView(anchor){this.mDropDownAnchorView=anchor;}},{key:'getHorizontalOffset',value:function getHorizontalOffset(){return this.mDropDownHorizontalOffset;}},{key:'setHorizontalOffset',value:function setHorizontalOffset(offset){this.mDropDownHorizontalOffset=offset;}},{key:'getVerticalOffset',value:function getVerticalOffset(){if(!this.mDropDownVerticalOffsetSet){return 0;}return this.mDropDownVerticalOffset;}},{key:'setVerticalOffset',value:function setVerticalOffset(offset){this.mDropDownVerticalOffset=offset;this.mDropDownVerticalOffsetSet=true;}},{key:'setDropDownGravity',value:function setDropDownGravity(gravity){this.mDropDownGravity=gravity;}},{key:'getWidth',value:function getWidth(){return this.mDropDownWidth;}},{key:'setWidth',value:function setWidth(width){this.mDropDownWidth=width;}},{key:'setContentWidth',value:function setContentWidth(width){var popupBackground=this.mPopup.getBackground();if(popupBackground!=null){popupBackground.getPadding(this.mTempRect);this.mDropDownWidth=this.mTempRect.left+this.mTempRect.right+width;}else{this.setWidth(width);}}},{key:'getHeight',value:function getHeight(){return this.mDropDownHeight;}},{key:'setHeight',value:function setHeight(height){this.mDropDownHeight=height;}},{key:'setOnItemClickListener',value:function setOnItemClickListener(clickListener){this.mItemClickListener=clickListener;}},{key:'setOnItemSelectedListener',value:function setOnItemSelectedListener(selectedListener){this.mItemSelectedListener=selectedListener;}},{key:'setPromptView',value:function setPromptView(prompt){var showing=this.isShowing();if(showing){this.removePromptView();}this.mPromptView=prompt;if(showing){this.show();}}},{key:'postShow',value:function postShow(){this.mHandler.post(this.mShowDropDownRunnable);}},{key:'show',value:function show(){var height=this.buildDropDown();var widthSpec=0;var heightSpec=0;var noInputMethod=this.isInputMethodNotNeeded();this.mPopup.setAllowScrollingAnchorParent(!noInputMethod);if(this.mPopup.isShowing()){if(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT){widthSpec=-1;}else if(this.mDropDownWidth==ViewGroup.LayoutParams.WRAP_CONTENT){widthSpec=this.getAnchorView().getWidth();}else{widthSpec=this.mDropDownWidth;}if(this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){heightSpec=noInputMethod?height:ViewGroup.LayoutParams.MATCH_PARENT;if(noInputMethod){this.mPopup.setWindowLayoutMode(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT?ViewGroup.LayoutParams.MATCH_PARENT:0,0);}else{this.mPopup.setWindowLayoutMode(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT?ViewGroup.LayoutParams.MATCH_PARENT:0,ViewGroup.LayoutParams.MATCH_PARENT);}}else if(this.mDropDownHeight==ViewGroup.LayoutParams.WRAP_CONTENT){heightSpec=height;}else{heightSpec=this.mDropDownHeight;}this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch&&!this.mDropDownAlwaysVisible);this.mPopup.update(this.getAnchorView(),this.mDropDownHorizontalOffset,this.mDropDownVerticalOffset,widthSpec,heightSpec);}else{if(this.mDropDownWidth==ViewGroup.LayoutParams.MATCH_PARENT){widthSpec=ViewGroup.LayoutParams.MATCH_PARENT;}else{if(this.mDropDownWidth==ViewGroup.LayoutParams.WRAP_CONTENT){this.mPopup.setWidth(this.getAnchorView().getWidth());}else{this.mPopup.setWidth(this.mDropDownWidth);}}if(this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){heightSpec=ViewGroup.LayoutParams.MATCH_PARENT;}else{if(this.mDropDownHeight==ViewGroup.LayoutParams.WRAP_CONTENT){this.mPopup.setHeight(height);}else{this.mPopup.setHeight(this.mDropDownHeight);}}this.mPopup.setWindowLayoutMode(widthSpec,heightSpec);this.mPopup.setClipToScreenEnabled(true);this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch&&!this.mDropDownAlwaysVisible);this.mPopup.setTouchInterceptor(this.mTouchInterceptor);this.mPopup.showAsDropDown(this.getAnchorView(),this.mDropDownHorizontalOffset,this.mDropDownVerticalOffset,this.mDropDownGravity);this.mDropDownList.setSelection(ListView.INVALID_POSITION);if(!this.mModal||this.mDropDownList.isInTouchMode()){this.clearListSelection();}if(!this.mModal){this.mHandler.post(this.mHideSelector);}}}},{key:'dismiss',value:function dismiss(){this.mPopup.dismiss();this.removePromptView();this.mPopup.setContentView(null);this.mDropDownList=null;this.mHandler.removeCallbacks(this.mResizePopupRunnable);}},{key:'setOnDismissListener',value:function setOnDismissListener(listener){this.mPopup.setOnDismissListener(listener);}},{key:'removePromptView',value:function removePromptView(){if(this.mPromptView!=null){var parent=this.mPromptView.getParent();if(parent instanceof ViewGroup){var group=parent;group.removeView(this.mPromptView);}}}},{key:'setInputMethodMode',value:function setInputMethodMode(mode){this.mPopup.setInputMethodMode(mode);}},{key:'getInputMethodMode',value:function getInputMethodMode(){return this.mPopup.getInputMethodMode();}},{key:'setSelection',value:function setSelection(position){var list=this.mDropDownList;if(this.isShowing()&&list!=null){list.mListSelectionHidden=false;list.setSelection(position);if(list.getChoiceMode()!=ListView.CHOICE_MODE_NONE){list.setItemChecked(position,true);}}}},{key:'clearListSelection',value:function clearListSelection(){var list=this.mDropDownList;if(list!=null){list.mListSelectionHidden=true;list.hideSelector();list.requestLayout();}}},{key:'isShowing',value:function isShowing(){return this.mPopup.isShowing();}},{key:'isInputMethodNotNeeded',value:function isInputMethodNotNeeded(){return this.mPopup.getInputMethodMode()==ListPopupWindow.INPUT_METHOD_NOT_NEEDED;}},{key:'performItemClick',value:function performItemClick(position){if(this.isShowing()){if(this.mItemClickListener!=null){var list=this.mDropDownList;var child=list.getChildAt(position-list.getFirstVisiblePosition());var adapter=list.getAdapter();this.mItemClickListener.onItemClick(list,child,position,adapter.getItemId(position));}return true;}return false;}},{key:'getSelectedItem',value:function getSelectedItem(){if(!this.isShowing()){return null;}return this.mDropDownList.getSelectedItem();}},{key:'getSelectedItemPosition',value:function getSelectedItemPosition(){if(!this.isShowing()){return ListView.INVALID_POSITION;}return this.mDropDownList.getSelectedItemPosition();}},{key:'getSelectedItemId',value:function getSelectedItemId(){if(!this.isShowing()){return ListView.INVALID_ROW_ID;}return this.mDropDownList.getSelectedItemId();}},{key:'getSelectedView',value:function getSelectedView(){if(!this.isShowing()){return null;}return this.mDropDownList.getSelectedView();}},{key:'getListView',value:function getListView(){return this.mDropDownList;}},{key:'setListItemExpandMax',value:function setListItemExpandMax(max){this.mListItemExpandMaximum=max;}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){if(this.isShowing()){if(keyCode!=KeyEvent.KEYCODE_SPACE&&(this.mDropDownList.getSelectedItemPosition()>=0||!KeyEvent.isConfirmKey(keyCode))){var curIndex=this.mDropDownList.getSelectedItemPosition();var consumed=void 0;var below=!this.mPopup.isAboveAnchor();var adapter=this.mAdapter;var allEnabled=void 0;var firstItem=Integer.MAX_VALUE;var lastItem=Integer.MIN_VALUE;if(adapter!=null){allEnabled=adapter.areAllItemsEnabled();firstItem=allEnabled?0:this.mDropDownList.lookForSelectablePosition(0,true);lastItem=allEnabled?adapter.getCount()-1:this.mDropDownList.lookForSelectablePosition(adapter.getCount()-1,false);}if(below&&keyCode==KeyEvent.KEYCODE_DPAD_UP&&curIndex<=firstItem||!below&&keyCode==KeyEvent.KEYCODE_DPAD_DOWN&&curIndex>=lastItem){this.clearListSelection();this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);this.show();return true;}else{this.mDropDownList.mListSelectionHidden=false;}consumed=this.mDropDownList.onKeyDown(keyCode,event);if(ListPopupWindow.DEBUG)Log.v(ListPopupWindow.TAG,"Key down: code="+keyCode+" list consumed="+consumed);if(consumed){this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);this.mDropDownList.requestFocusFromTouch();this.show();switch(keyCode){case KeyEvent.KEYCODE_ENTER:case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_DPAD_DOWN:case KeyEvent.KEYCODE_DPAD_UP:return true;}}else{if(below&&keyCode==KeyEvent.KEYCODE_DPAD_DOWN){if(curIndex==lastItem){return true;}}else if(!below&&keyCode==KeyEvent.KEYCODE_DPAD_UP&&curIndex==firstItem){return true;}}}}return false;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){if(this.isShowing()&&this.mDropDownList.getSelectedItemPosition()>=0){var consumed=this.mDropDownList.onKeyUp(keyCode,event);if(consumed&&KeyEvent.isConfirmKey(keyCode)){this.dismiss();}return consumed;}return false;}},{key:'onKeyPreIme',value:function onKeyPreIme(keyCode,event){if(keyCode==KeyEvent.KEYCODE_BACK&&this.isShowing()){var anchorView=this.mDropDownAnchorView;if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getRepeatCount()==0){var state=anchorView.getKeyDispatcherState();if(state!=null){state.startTracking(event,this);}return true;}else if(event.getAction()==KeyEvent.ACTION_UP){var _state3=anchorView.getKeyDispatcherState();if(_state3!=null){_state3.handleUpEvent(event);}if(event.isTracking()&&!event.isCanceled()){this.dismiss();return true;}}}return false;}},{key:'createDragToOpenListener',value:function createDragToOpenListener(src){var _this156=this;return function(){var inner_this=_this156;var _Inner=function(_ListPopupWindow$Forw){_inherits(_Inner,_ListPopupWindow$Forw);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,(_Inner.__proto__||Object.getPrototypeOf(_Inner)).apply(this,arguments));}_createClass(_Inner,[{key:'getPopup',value:function getPopup(){return inner_this;}}]);return _Inner;}(ListPopupWindow.ForwardingListener);return new _Inner(src);}();}},{key:'buildDropDown',value:function buildDropDown(){var _this158=this;var dropDownView=void 0;var otherHeights=0;if(this.mDropDownList==null){var context=this.mContext;this.mShowDropDownRunnable=function(){var inner_this=_this158;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'run',value:function run(){var view=inner_this.getAnchorView();if(view!=null&&view.isAttachedToWindow()){inner_this.show();}}}]);return _Inner;}();return new _Inner();}();this.mDropDownList=new ListPopupWindow.DropDownListView(context,!this.mModal);if(this.mDropDownListHighlight!=null){this.mDropDownList.setSelector(this.mDropDownListHighlight);}this.mDropDownList.setAdapter(this.mAdapter);this.mDropDownList.setOnItemClickListener(this.mItemClickListener);this.mDropDownList.setFocusable(true);this.mDropDownList.setFocusableInTouchMode(true);this.mDropDownList.setOnItemSelectedListener(function(){var inner_this=_this158;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onItemSelected',value:function onItemSelected(parent,view,position,id){if(position!=-1){var dropDownList=inner_this.mDropDownList;if(dropDownList!=null){dropDownList.mListSelectionHidden=false;}}}},{key:'onNothingSelected',value:function onNothingSelected(parent){}}]);return _Inner;}();return new _Inner();}());this.mDropDownList.setOnScrollListener(this.mScrollListener);if(this.mItemSelectedListener!=null){this.mDropDownList.setOnItemSelectedListener(this.mItemSelectedListener);}dropDownView=this.mDropDownList;var hintView=this.mPromptView;if(hintView!=null){var hintContainer=new LinearLayout(context);hintContainer.setOrientation(LinearLayout.VERTICAL);var hintParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,0,1.0);switch(this.mPromptPosition){case ListPopupWindow.POSITION_PROMPT_BELOW:hintContainer.addView(dropDownView,hintParams);hintContainer.addView(hintView);break;case ListPopupWindow.POSITION_PROMPT_ABOVE:hintContainer.addView(hintView);hintContainer.addView(dropDownView,hintParams);break;default:Log.e(ListPopupWindow.TAG,"Invalid hint position "+this.mPromptPosition);break;}var widthSpec=MeasureSpec.makeMeasureSpec(this.mDropDownWidth,MeasureSpec.AT_MOST);var heightSpec=MeasureSpec.UNSPECIFIED;hintView.measure(widthSpec,heightSpec);hintParams=hintView.getLayoutParams();otherHeights=hintView.getMeasuredHeight()+hintParams.topMargin+hintParams.bottomMargin;dropDownView=hintContainer;}this.mPopup.setContentView(dropDownView);}else{dropDownView=this.mPopup.getContentView();var view=this.mPromptView;if(view!=null){var _hintParams=view.getLayoutParams();otherHeights=view.getMeasuredHeight()+_hintParams.topMargin+_hintParams.bottomMargin;}}var padding=0;var background=this.mPopup.getBackground();if(background!=null){background.getPadding(this.mTempRect);padding=this.mTempRect.top+this.mTempRect.bottom;if(!this.mDropDownVerticalOffsetSet){this.mDropDownVerticalOffset=-this.mTempRect.top;}}else{this.mTempRect.setEmpty();}var ignoreBottomDecorations=this.mPopup.getInputMethodMode()==PopupWindow.INPUT_METHOD_NOT_NEEDED;var maxHeight=this.mPopup.getMaxAvailableHeight(this.getAnchorView(),this.mDropDownVerticalOffset,ignoreBottomDecorations);if(this.mDropDownAlwaysVisible||this.mDropDownHeight==ViewGroup.LayoutParams.MATCH_PARENT){return maxHeight+padding;}var childWidthSpec=void 0;switch(this.mDropDownWidth){case ViewGroup.LayoutParams.WRAP_CONTENT:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels-(this.mTempRect.left+this.mTempRect.right),MeasureSpec.AT_MOST);break;case ViewGroup.LayoutParams.MATCH_PARENT:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels-(this.mTempRect.left+this.mTempRect.right),MeasureSpec.EXACTLY);break;default:childWidthSpec=MeasureSpec.makeMeasureSpec(this.mDropDownWidth,MeasureSpec.EXACTLY);break;}var listContent=this.mDropDownList.measureHeightOfChildren(childWidthSpec,0,ListView.NO_POSITION,maxHeight-otherHeights,-1);if(listContent>0)otherHeights+=padding;return listContent+otherHeights;}}]);return ListPopupWindow;}();ListPopupWindow.TAG="ListPopupWindow";ListPopupWindow.DEBUG=false;ListPopupWindow.EXPAND_LIST_TIMEOUT=250;ListPopupWindow.POSITION_PROMPT_ABOVE=0;ListPopupWindow.POSITION_PROMPT_BELOW=1;ListPopupWindow.MATCH_PARENT=ViewGroup.LayoutParams.MATCH_PARENT;ListPopupWindow.WRAP_CONTENT=ViewGroup.LayoutParams.WRAP_CONTENT;ListPopupWindow.INPUT_METHOD_FROM_FOCUSABLE=PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;ListPopupWindow.INPUT_METHOD_NEEDED=PopupWindow.INPUT_METHOD_NEEDED;ListPopupWindow.INPUT_METHOD_NOT_NEEDED=PopupWindow.INPUT_METHOD_NOT_NEEDED;widget.ListPopupWindow=ListPopupWindow;(function(ListPopupWindow){var ForwardingListener=function(){function ForwardingListener(src){_classCallCheck(this,ForwardingListener);this.mScaledTouchSlop=0;this.mTapTimeout=0;this.mActivePointerId=0;this.mSrc=src;this.mScaledTouchSlop=ViewConfiguration.get(src.getContext()).getScaledTouchSlop();this.mTapTimeout=ViewConfiguration.getTapTimeout();src.addOnAttachStateChangeListener(this);}_createClass(ForwardingListener,[{key:'onTouch',value:function onTouch(v,event){var wasForwarding=this.mForwarding;var forwarding=void 0;if(wasForwarding){forwarding=this.onTouchForwarded(event)||!this.onForwardingStopped();}else{forwarding=this.onTouchObserved(event)&&this.onForwardingStarted();}this.mForwarding=forwarding;return forwarding||wasForwarding;}},{key:'onViewAttachedToWindow',value:function onViewAttachedToWindow(v){}},{key:'onViewDetachedFromWindow',value:function onViewDetachedFromWindow(v){this.mForwarding=false;this.mActivePointerId=MotionEvent.INVALID_POINTER_ID;if(this.mDisallowIntercept!=null){this.mSrc.removeCallbacks(this.mDisallowIntercept);}}},{key:'onForwardingStarted',value:function onForwardingStarted(){var popup=this.getPopup();if(popup!=null&&!popup.isShowing()){popup.show();}return true;}},{key:'onForwardingStopped',value:function onForwardingStopped(){var popup=this.getPopup();if(popup!=null&&popup.isShowing()){popup.dismiss();}return true;}},{key:'onTouchObserved',value:function onTouchObserved(srcEvent){var src=this.mSrc;if(!src.isEnabled()){return false;}var actionMasked=srcEvent.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_DOWN:this.mActivePointerId=srcEvent.getPointerId(0);if(this.mDisallowIntercept==null){this.mDisallowIntercept=new ForwardingListener.DisallowIntercept(this);}src.postDelayed(this.mDisallowIntercept,this.mTapTimeout);break;case MotionEvent.ACTION_MOVE:var activePointerIndex=srcEvent.findPointerIndex(this.mActivePointerId);if(activePointerIndex>=0){var _x229=srcEvent.getX(activePointerIndex);var _y18=srcEvent.getY(activePointerIndex);if(!src.pointInView(_x229,_y18,this.mScaledTouchSlop)){if(this.mDisallowIntercept!=null){src.removeCallbacks(this.mDisallowIntercept);}src.getParent().requestDisallowInterceptTouchEvent(true);return true;}}break;case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:if(this.mDisallowIntercept!=null){src.removeCallbacks(this.mDisallowIntercept);}break;}return false;}},{key:'onTouchForwarded',value:function onTouchForwarded(srcEvent){return false;}}]);return ForwardingListener;}();ListPopupWindow.ForwardingListener=ForwardingListener;(function(ForwardingListener){var DisallowIntercept=function(){function DisallowIntercept(arg){_classCallCheck(this,DisallowIntercept);this._ForwardingListener_this=arg;}_createClass(DisallowIntercept,[{key:'run',value:function run(){var parent=this._ForwardingListener_this.mSrc.getParent();parent.requestDisallowInterceptTouchEvent(true);}}]);return DisallowIntercept;}();ForwardingListener.DisallowIntercept=DisallowIntercept;})(ForwardingListener=ListPopupWindow.ForwardingListener||(ListPopupWindow.ForwardingListener={}));var DropDownListView=function(_ListView3){_inherits(DropDownListView,_ListView3);function DropDownListView(context,hijackFocus){_classCallCheck(this,DropDownListView);var _this159=_possibleConstructorReturn(this,(DropDownListView.__proto__||Object.getPrototypeOf(DropDownListView)).call(this,context,null,android.R.attr.dropDownListViewStyle));_this159.mHijackFocus=hijackFocus;_this159.setCacheColorHint(0);return _this159;}_createClass(DropDownListView,[{key:'onForwardedEvent',value:function onForwardedEvent(event,activePointerId){var handledEvent=true;var clearPressedItem=false;var actionMasked=event.getActionMasked();switch(actionMasked){case MotionEvent.ACTION_CANCEL:handledEvent=false;break;case MotionEvent.ACTION_UP:handledEvent=false;case MotionEvent.ACTION_MOVE:var activeIndex=event.findPointerIndex(activePointerId);if(activeIndex<0){handledEvent=false;break;}var _x230=Math.floor(event.getX(activeIndex));var _y19=Math.floor(event.getY(activeIndex));var position=this.pointToPosition(_x230,_y19);if(position==DropDownListView.INVALID_POSITION){clearPressedItem=true;break;}var child=this.getChildAt(position-this.getFirstVisiblePosition());this.setPressedItem(child,position);handledEvent=true;if(actionMasked==MotionEvent.ACTION_UP){this.clickPressedItem(child,position);}break;}if(!handledEvent||clearPressedItem){this.clearPressedItem();}return handledEvent;}},{key:'clickPressedItem',value:function clickPressedItem(child,position){var id=this.getItemIdAtPosition(position);this.performItemClick(child,position,id);}},{key:'clearPressedItem',value:function clearPressedItem(){this.mDrawsInPressedState=false;this.setPressed(false);this.updateSelectorState();}},{key:'setPressedItem',value:function setPressedItem(child,position){this.mDrawsInPressedState=true;this.setPressed(true);this.layoutChildren();this.setSelectedPositionInt(position);this.positionSelector(position,child);this.refreshDrawableState();}},{key:'touchModeDrawsInPressedState',value:function touchModeDrawsInPressedState(){return this.mDrawsInPressedState||_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'touchModeDrawsInPressedState',this).call(this);}},{key:'obtainView',value:function obtainView(position,isScrap){var view=_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'obtainView',this).call(this,position,isScrap);if(view instanceof TextView){view.setHorizontallyScrolling(true);}return view;}},{key:'isInTouchMode',value:function isInTouchMode(){return this.mHijackFocus&&this.mListSelectionHidden||_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'isInTouchMode',this).call(this);}},{key:'hasWindowFocus',value:function hasWindowFocus(){return this.mHijackFocus||_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'hasWindowFocus',this).call(this);}},{key:'isFocused',value:function isFocused(){return this.mHijackFocus||_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'isFocused',this).call(this);}},{key:'hasFocus',value:function hasFocus(){return this.mHijackFocus||_get2(DropDownListView.prototype.__proto__||Object.getPrototypeOf(DropDownListView.prototype),'hasFocus',this).call(this);}}]);return DropDownListView;}(ListView);DropDownListView.CLICK_ANIM_DURATION=150;DropDownListView.CLICK_ANIM_ALPHA=0x80;ListPopupWindow.DropDownListView=DropDownListView;var PopupDataSetObserver=function(_DataSetObserver3){_inherits(PopupDataSetObserver,_DataSetObserver3);function PopupDataSetObserver(arg){_classCallCheck(this,PopupDataSetObserver);var _this160=_possibleConstructorReturn(this,(PopupDataSetObserver.__proto__||Object.getPrototypeOf(PopupDataSetObserver)).call(this));_this160._ListPopupWindow_this=arg;return _this160;}_createClass(PopupDataSetObserver,[{key:'onChanged',value:function onChanged(){if(this._ListPopupWindow_this.isShowing()){this._ListPopupWindow_this.show();}}},{key:'onInvalidated',value:function onInvalidated(){this._ListPopupWindow_this.dismiss();}}]);return PopupDataSetObserver;}(DataSetObserver);ListPopupWindow.PopupDataSetObserver=PopupDataSetObserver;var ListSelectorHider=function(){function ListSelectorHider(arg){_classCallCheck(this,ListSelectorHider);this._ListPopupWindow_this=arg;}_createClass(ListSelectorHider,[{key:'run',value:function run(){this._ListPopupWindow_this.clearListSelection();}}]);return ListSelectorHider;}();ListPopupWindow.ListSelectorHider=ListSelectorHider;var ResizePopupRunnable=function(){function ResizePopupRunnable(arg){_classCallCheck(this,ResizePopupRunnable);this._ListPopupWindow_this=arg;}_createClass(ResizePopupRunnable,[{key:'run',value:function run(){if(this._ListPopupWindow_this.mDropDownList!=null&&this._ListPopupWindow_this.mDropDownList.getCount()>this._ListPopupWindow_this.mDropDownList.getChildCount()&&this._ListPopupWindow_this.mDropDownList.getChildCount()<=this._ListPopupWindow_this.mListItemExpandMaximum){this._ListPopupWindow_this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);this._ListPopupWindow_this.show();}}}]);return ResizePopupRunnable;}();ListPopupWindow.ResizePopupRunnable=ResizePopupRunnable;var PopupTouchInterceptor=function(){function PopupTouchInterceptor(arg){_classCallCheck(this,PopupTouchInterceptor);this._ListPopupWindow_this=arg;}_createClass(PopupTouchInterceptor,[{key:'onTouch',value:function onTouch(v,event){var action=event.getAction();var x=Math.floor(event.getX());var y=Math.floor(event.getY());if(action==MotionEvent.ACTION_DOWN&&this._ListPopupWindow_this.mPopup!=null&&this._ListPopupWindow_this.mPopup.isShowing()&&x>=0&&x=0&&y2&&arguments[2]!==undefined?arguments[2]:R.attr.spinnerStyle;var mode=arguments.length>3&&arguments[3]!==undefined?arguments[3]:Spinner.MODE_THEME;_classCallCheck(this,Spinner);var _this161=_possibleConstructorReturn(this,(Spinner.__proto__||Object.getPrototypeOf(Spinner)).call(this,context,bindElement,defStyle));_this161.mDropDownWidth=0;_this161.mGravity=0;_this161.mTempRect=new Rect();var a=context.obtainStyledAttributes(bindElement,defStyle);if(mode==Spinner.MODE_THEME){if('dialog'===a.getAttrValue('spinnerMode')){mode=Spinner.MODE_DIALOG;}else{mode=Spinner.MODE_DROPDOWN;}}switch(mode){case Spinner.MODE_DIALOG:{_this161.mPopup=new Spinner.DialogPopup(_this161);break;}case Spinner.MODE_DROPDOWN:{var popup=new Spinner.DropdownPopup(context,defStyle,_this161);_this161.mDropDownWidth=a.getLayoutDimension('dropDownWidth',ViewGroup.LayoutParams.WRAP_CONTENT);popup.setBackgroundDrawable(a.getDrawable('popupBackground'));var verticalOffset=a.getDimensionPixelOffset('dropDownVerticalOffset',0);if(verticalOffset!=0){popup.setVerticalOffset(verticalOffset);}var horizontalOffset=a.getDimensionPixelOffset('dropDownHorizontalOffset',0);if(horizontalOffset!=0){popup.setHorizontalOffset(horizontalOffset);}_this161.mPopup=popup;break;}}_this161.mGravity=Gravity.parseGravity(a.getAttrValue('gravity'),Gravity.CENTER);_this161.mPopup.setPromptText(a.getString('prompt'));_this161.mDisableChildrenWhenDisabled=a.getBoolean('disableChildrenWhenDisabled',false);a.recycle();if(_this161.mTempAdapter!=null){_this161.mPopup.setAdapter(_this161.mTempAdapter);_this161.mTempAdapter=null;}return _this161;}_createClass(Spinner,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'createClassAttrBinder',this).call(this).set('dropDownWidth',{setter:function setter(v,value,a){v.mDropDownWidth=a.parseNumberPixelSize(value,v.mDropDownWidth);},getter:function getter(v){return v.mDropDownWidth;}}).set('popupBackground',{setter:function setter(v,value,a){v.mPopup.setBackgroundDrawable(a.parseDrawable(value));},getter:function getter(v){return v.mPopup.getBackground();}}).set('dropDownVerticalOffset',{setter:function setter(v,value,a){var verticalOffset=a.parseNumberPixelSize(value,0);if(verticalOffset!=0){v.mPopup.setVerticalOffset(verticalOffset);}},getter:function getter(v){return v.mPopup.getVerticalOffset();}}).set('dropDownHorizontalOffset',{setter:function setter(v,value,a){var horizontalOffset=a.parseNumberPixelSize(value,0);if(horizontalOffset!=0){v.mPopup.setHorizontalOffset(horizontalOffset);}},getter:function getter(v){return v.mPopup.getHorizontalOffset();}}).set('gravity',{setter:function setter(v,value,a){v.mGravity=a.parseGravity(value,Gravity.CENTER);},getter:function getter(v){return v.mGravity;}}).set('prompt',{setter:function setter(v,value,a){v.mPopup.setPromptText(a.parseString(value));},getter:function getter(v){return v.mPopup.getHintText();}}).set('disableChildrenWhenDisabled',{setter:function setter(v,value,a){v.mDisableChildrenWhenDisabled=a.parseBoolean(value,false);},getter:function getter(v){return v.mDisableChildrenWhenDisabled;}});}},{key:'setPopupBackgroundDrawable',value:function setPopupBackgroundDrawable(background){if(!(this.mPopup instanceof Spinner.DropdownPopup)){Log.e(Spinner.TAG,"setPopupBackgroundDrawable: incompatible spinner mode; ignoring...");return;}this.mPopup.setBackgroundDrawable(background);}},{key:'getPopupBackground',value:function getPopupBackground(){return this.mPopup.getBackground();}},{key:'setDropDownVerticalOffset',value:function setDropDownVerticalOffset(pixels){this.mPopup.setVerticalOffset(pixels);}},{key:'getDropDownVerticalOffset',value:function getDropDownVerticalOffset(){return this.mPopup.getVerticalOffset();}},{key:'setDropDownHorizontalOffset',value:function setDropDownHorizontalOffset(pixels){this.mPopup.setHorizontalOffset(pixels);}},{key:'getDropDownHorizontalOffset',value:function getDropDownHorizontalOffset(){return this.mPopup.getHorizontalOffset();}},{key:'setDropDownWidth',value:function setDropDownWidth(pixels){if(!(this.mPopup instanceof Spinner.DropdownPopup)){Log.e(Spinner.TAG,"Cannot set dropdown width for MODE_DIALOG, ignoring");return;}this.mDropDownWidth=pixels;}},{key:'getDropDownWidth',value:function getDropDownWidth(){return this.mDropDownWidth;}},{key:'setEnabled',value:function setEnabled(enabled){_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'setEnabled',this).call(this,enabled);if(this.mDisableChildrenWhenDisabled){var count=this.getChildCount();for(var i=0;i0){child=this.getChildAt(0);}else if(this.mAdapter!=null&&this.mAdapter.getCount()>0){child=this.makeView(0,false);this.mRecycler.put(0,child);}if(child!=null){var childBaseline=child.getBaseline();return childBaseline>=0?child.getTop()+childBaseline:-1;}else{return-1;}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'onDetachedFromWindow',this).call(this);if(this.mPopup!=null&&this.mPopup.isShowing()){this.mPopup.dismiss();}}},{key:'setOnItemClickListener',value:function setOnItemClickListener(l){throw Error('new RuntimeException("setOnItemClickListener cannot be used with a spinner.")');}},{key:'setOnItemClickListenerInt',value:function setOnItemClickListenerInt(l){_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'setOnItemClickListener',this).call(this,l);}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'onMeasure',this).call(this,widthMeasureSpec,heightMeasureSpec);if(this.mPopup!=null&&View.MeasureSpec.getMode(widthMeasureSpec)==View.MeasureSpec.AT_MOST){var measuredWidth=this.getMeasuredWidth();this.setMeasuredDimension(Math.min(Math.max(measuredWidth,this.measureContentWidth(this.getAdapter(),this.getBackground())),View.MeasureSpec.getSize(widthMeasureSpec)),this.getMeasuredHeight());}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'onLayout',this).call(this,changed,l,t,r,b);this.mInLayout=true;this.layoutSpinner(0,false);this.mInLayout=false;}},{key:'layoutSpinner',value:function layoutSpinner(delta,animate){var childrenLeft=this.mSpinnerPadding.left;var childrenWidth=this.mRight-this.mLeft-this.mSpinnerPadding.left-this.mSpinnerPadding.right;if(this.mDataChanged){this.handleDataChanged();}if(this.mItemCount==0){this.resetList();return;}if(this.mNextSelectedPosition>=0){this.setSelectedPositionInt(this.mNextSelectedPosition);}this.recycleAllViews();this.removeAllViewsInLayout();this.mFirstPosition=this.mSelectedPosition;if(this.mAdapter!=null){var sel=this.makeView(this.mSelectedPosition,true);var width=sel.getMeasuredWidth();var selectedOffset=childrenLeft;var layoutDirection=this.getLayoutDirection();var absoluteGravity=Gravity.getAbsoluteGravity(this.mGravity,layoutDirection);switch(absoluteGravity&Gravity.HORIZONTAL_GRAVITY_MASK){case Gravity.CENTER_HORIZONTAL:selectedOffset=childrenLeft+childrenWidth/2-width/2;break;case Gravity.RIGHT:selectedOffset=childrenLeft+childrenWidth-width;break;}sel.offsetLeftAndRight(selectedOffset);}this.mRecycler.clear();this.invalidate();this.checkSelectionChanged();this.mDataChanged=false;this.mNeedSync=false;this.setNextSelectedPositionInt(this.mSelectedPosition);}},{key:'makeView',value:function makeView(position,addChild){var child=void 0;if(!this.mDataChanged){child=this.mRecycler.get(position);if(child!=null){this.setUpChild(child,addChild);return child;}}child=this.mAdapter.getView(position,null,this);this.setUpChild(child,addChild);return child;}},{key:'setUpChild',value:function setUpChild(child,addChild){var lp=child.getLayoutParams();if(lp==null){lp=this.generateDefaultLayoutParams();}if(addChild){this.addViewInLayout(child,0,lp);}child.setSelected(this.hasFocus());if(this.mDisableChildrenWhenDisabled){child.setEnabled(this.isEnabled());}var childHeightSpec=ViewGroup.getChildMeasureSpec(this.mHeightMeasureSpec,this.mSpinnerPadding.top+this.mSpinnerPadding.bottom,lp.height);var childWidthSpec=ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec,this.mSpinnerPadding.left+this.mSpinnerPadding.right,lp.width);child.measure(childWidthSpec,childHeightSpec);var childLeft=void 0;var childRight=void 0;var childTop=this.mSpinnerPadding.top+(this.getMeasuredHeight()-this.mSpinnerPadding.bottom-this.mSpinnerPadding.top-child.getMeasuredHeight())/2;var childBottom=childTop+child.getMeasuredHeight();var width=child.getMeasuredWidth();childLeft=0;childRight=childLeft+width;child.layout(childLeft,childTop,childRight,childBottom);}},{key:'performClick',value:function performClick(){var handled=_get2(Spinner.prototype.__proto__||Object.getPrototypeOf(Spinner.prototype),'performClick',this).call(this);if(!handled){handled=true;if(!this.mPopup.isShowing()){this.mPopup.showPopup(this.getTextDirection(),this.getTextAlignment());}}return handled;}},{key:'onClick',value:function onClick(dialog,which){this.setSelection(which);dialog.dismiss();}},{key:'setPrompt',value:function setPrompt(prompt){this.mPopup.setPromptText(prompt);}},{key:'getPrompt',value:function getPrompt(){return this.mPopup.getHintText();}},{key:'measureContentWidth',value:function measureContentWidth(adapter,background){if(adapter==null){return 0;}var width=0;var itemView=null;var itemType=0;var widthMeasureSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);var heightMeasureSpec=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);var start=Math.max(0,this.getSelectedItemPosition());var end=Math.min(adapter.getCount(),start+Spinner.MAX_ITEMS_MEASURED);var count=end-start;start=Math.max(0,start-(Spinner.MAX_ITEMS_MEASURED-count));for(var i=start;icontentWidthLimit){contentWidth=contentWidthLimit;}this.setContentWidth(Math.max(contentWidth,spinnerWidth-spinnerPaddingLeft-spinnerPaddingRight));}else if(this._Spinner_this.mDropDownWidth==DropdownPopup.MATCH_PARENT){this.setContentWidth(spinnerWidth-spinnerPaddingLeft-spinnerPaddingRight);}else{this.setContentWidth(this._Spinner_this.mDropDownWidth);}if(this._Spinner_this.isLayoutRtl()){hOffset+=spinnerWidth-spinnerPaddingRight-this.getWidth();}else{hOffset+=spinnerPaddingLeft;}this.setHorizontalOffset(hOffset);}},{key:'showPopup',value:function showPopup(textDirection,textAlignment){var _this163=this;var wasShowing=this.isShowing();this.computeContentWidth();this.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);_get2(DropdownPopup.prototype.__proto__||Object.getPrototypeOf(DropdownPopup.prototype),'show',this).call(this);var listView=this.getListView();listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);listView.setTextDirection(textDirection);listView.setTextAlignment(textAlignment);this.setSelection(this._Spinner_this.getSelectedItemPosition());if(wasShowing){return;}var vto=this._Spinner_this.getViewTreeObserver();if(vto!=null){(function(){var layoutListener=function(){var inner_this=_this163;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onGlobalLayout',value:function onGlobalLayout(){if(!inner_this._Spinner_this.isVisibleToUser()){inner_this.dismiss();}else{inner_this.computeContentWidth();inner_this.show();}}}]);return _Inner;}();return new _Inner();}();vto.addOnGlobalLayoutListener(layoutListener);_this163.setOnDismissListener(function(){var inner_this=_this163;var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'onDismiss',value:function onDismiss(){var vto=inner_this._Spinner_this.getViewTreeObserver();if(vto!=null){vto.removeOnGlobalLayoutListener(layoutListener);}}}]);return _Inner;}();return new _Inner();}());})();}}}]);return DropdownPopup;}(ListPopupWindow);Spinner.DropdownPopup=DropdownPopup;})(Spinner=widget.Spinner||(widget.Spinner={}));})(widget=android.widget||(android.widget={}));})(android||(android={}));var androidui;(function(androidui){var widget;(function(widget){var View=android.view.View;var HtmlBaseView=function(_View4){_inherits(HtmlBaseView,_View4);function HtmlBaseView(context,bindElement,defStyle){_classCallCheck(this,HtmlBaseView);var _this164=_possibleConstructorReturn(this,(HtmlBaseView.__proto__||Object.getPrototypeOf(HtmlBaseView)).call(this,context,bindElement,defStyle));_this164.mHtmlTouchAble=false;return _this164;}_createClass(HtmlBaseView,[{key:'onTouchEvent',value:function onTouchEvent(event){if(this.mHtmlTouchAble){event[android.view.ViewRootImpl.ContinueEventToDom]=true;}return _get2(HtmlBaseView.prototype.__proto__||Object.getPrototypeOf(HtmlBaseView.prototype),'onTouchEvent',this).call(this,event)||this.mHtmlTouchAble;}},{key:'setHtmlTouchAble',value:function setHtmlTouchAble(enable){this.mHtmlTouchAble=enable;}},{key:'isHtmlTouchAble',value:function isHtmlTouchAble(){return this.mHtmlTouchAble;}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return true;}}]);return HtmlBaseView;}(View);widget.HtmlBaseView=HtmlBaseView;})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var android;(function(android){var webkit;(function(webkit){var WebViewClient=function(){function WebViewClient(){_classCallCheck(this,WebViewClient);}_createClass(WebViewClient,[{key:'onPageFinished',value:function onPageFinished(view,url){}},{key:'onReceivedTitle',value:function onReceivedTitle(view,title){}}]);return WebViewClient;}();webkit.WebViewClient=WebViewClient;})(webkit=android.webkit||(android.webkit={}));})(android||(android={}));var android;(function(android){var webkit;(function(webkit){var HtmlBaseView=androidui.widget.HtmlBaseView;var WebView=function(_HtmlBaseView){_inherits(WebView,_HtmlBaseView);function WebView(context,bindElement,defStyle){_classCallCheck(this,WebView);var _this165=_possibleConstructorReturn(this,(WebView.__proto__||Object.getPrototypeOf(WebView)).call(this,context,bindElement,defStyle));_this165.initIFrameHistoryLength=-1;var density=_this165.getResources().getDisplayMetrics().density;_this165.setMinimumWidth(300*density);_this165.setMinimumHeight(150*density);return _this165;}_createClass(WebView,[{key:'initIFrameElement',value:function initIFrameElement(url){var _this166=this;this.iFrameElement=document.createElement('iframe');this.iFrameElement.style.border='none';this.iFrameElement.style.height='100%';this.iFrameElement.style.width='100%';this.iFrameElement.onload=function(){_this166.checkActivityResume();if(_this166.initIFrameHistoryLength<0)_this166.initIFrameHistoryLength=history.length;if(_this166.mClient){_this166.mClient.onReceivedTitle(_this166,_this166.getTitle());_this166.mClient.onPageFinished(_this166,_this166.getUrl());}};this.bindElement.style['webkitOverflowScrolling']=this.bindElement.style['overflowScrolling']='touch';this.bindElement.style.overflowY='auto';if(url)this.iFrameElement.src=url;this.bindElement.appendChild(this.iFrameElement);var activity=this.getContext();var onDestroy=activity.onDestroy;activity.onDestroy=function(){onDestroy.call(activity);PageStack.preClosePageHasIFrame(_this166.initIFrameHistoryLength);};}},{key:'checkActivityResume',value:function checkActivityResume(){if(!this.getContext().mResumed){console.error('can\'t call any webview\'s methods when host activity was pause');}}},{key:'goBack',value:function goBack(){this.checkActivityResume();if(this.canGoBack()){history.back();}}},{key:'canGoBack',value:function canGoBack(){this.checkActivityResume();if(this.initIFrameHistoryLength<0)return false;return history.length>this.initIFrameHistoryLength;}},{key:'loadUrl',value:function loadUrl(url){if(this.initIFrameHistoryLength>0){this.checkActivityResume();}if(!this.iFrameElement){this.initIFrameElement(url);}this.iFrameElement.src=url;}},{key:'reload',value:function reload(){if(!this.iFrameElement)return;try{this.iFrameElement.contentWindow.location.reload();}catch(e){this.iFrameElement.src=this.iFrameElement.src;}}},{key:'getUrl',value:function getUrl(){if(!this.iFrameElement)return'';try{return this.iFrameElement.contentWindow.document.URL;}catch(e){return this.iFrameElement.src;}}},{key:'getTitle',value:function getTitle(){try{return this.iFrameElement.contentWindow.document.title;}catch(e){console.warn(e);return'';}}},{key:'setWebViewClient',value:function setWebViewClient(client){this.mClient=client;}}]);return WebView;}(HtmlBaseView);webkit.WebView=WebView;})(webkit=android.webkit||(android.webkit={}));})(android||(android={}));var android;(function(android){var view;(function(view){var animation;(function(animation){var Animation=android.view.animation.Animation;var RotateAnimation=function(_Animation5){_inherits(RotateAnimation,_Animation5);function RotateAnimation(fromDegrees,toDegrees){var pivotXType=arguments.length>2&&arguments[2]!==undefined?arguments[2]:RotateAnimation.ABSOLUTE;var pivotXValue=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var pivotYType=arguments.length>4&&arguments[4]!==undefined?arguments[4]:RotateAnimation.ABSOLUTE;var pivotYValue=arguments.length>5&&arguments[5]!==undefined?arguments[5]:0;_classCallCheck(this,RotateAnimation);var _this167=_possibleConstructorReturn(this,(RotateAnimation.__proto__||Object.getPrototypeOf(RotateAnimation)).call(this));_this167.mFromDegrees=0;_this167.mToDegrees=0;_this167.mPivotXType=RotateAnimation.ABSOLUTE;_this167.mPivotYType=RotateAnimation.ABSOLUTE;_this167.mPivotXValue=0.0;_this167.mPivotYValue=0.0;_this167.mPivotX=0;_this167.mPivotY=0;_this167.mFromDegrees=fromDegrees;_this167.mToDegrees=toDegrees;_this167.mPivotXValue=pivotXValue;_this167.mPivotXType=pivotXType;_this167.mPivotYValue=pivotYValue;_this167.mPivotYType=pivotYType;_this167.initializePivotPoint();return _this167;}_createClass(RotateAnimation,[{key:'initializePivotPoint',value:function initializePivotPoint(){if(this.mPivotXType==RotateAnimation.ABSOLUTE){this.mPivotX=this.mPivotXValue;}if(this.mPivotYType==RotateAnimation.ABSOLUTE){this.mPivotY=this.mPivotYValue;}}},{key:'applyTransformation',value:function applyTransformation(interpolatedTime,t){var degrees=this.mFromDegrees+(this.mToDegrees-this.mFromDegrees)*interpolatedTime;var scale=this.getScaleFactor();if(this.mPivotX==0.0&&this.mPivotY==0.0){t.getMatrix().setRotate(degrees);}else{t.getMatrix().setRotate(degrees,this.mPivotX*scale,this.mPivotY*scale);}}},{key:'initialize',value:function initialize(width,height,parentWidth,parentHeight){_get2(RotateAnimation.prototype.__proto__||Object.getPrototypeOf(RotateAnimation.prototype),'initialize',this).call(this,width,height,parentWidth,parentHeight);this.mPivotX=this.resolveSize(this.mPivotXType,this.mPivotXValue,width,parentWidth);this.mPivotY=this.resolveSize(this.mPivotYType,this.mPivotYValue,height,parentHeight);}}]);return RotateAnimation;}(Animation);animation.RotateAnimation=RotateAnimation;})(animation=view.animation||(view.animation={}));})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view_6){var MenuItem=function(){function MenuItem(menu,group,id,categoryOrder,ordering,title){_classCallCheck(this,MenuItem);this.mId=0;this.mGroup=0;this.mCategoryOrder=0;this.mOrdering=0;this.mVisible=true;this.mEnable=true;this.mMenu=menu;this.mId=id;this.mGroup=group;this.mCategoryOrder=categoryOrder;this.mOrdering=ordering;this.mTitle=title;}_createClass(MenuItem,[{key:'getItemId',value:function getItemId(){return this.mId;}},{key:'getGroupId',value:function getGroupId(){return this.mGroup;}},{key:'getOrder',value:function getOrder(){return this.mOrdering;}},{key:'setTitle',value:function setTitle(title){this.mTitle=title;return this;}},{key:'getTitle',value:function getTitle(){return this.mTitle;}},{key:'setIcon',value:function setIcon(icon){this.mIconDrawable=icon;return this;}},{key:'getIcon',value:function getIcon(){return this.mIconDrawable;}},{key:'setIntent',value:function setIntent(intent){this.mIntent=intent;return this;}},{key:'getIntent',value:function getIntent(){return this.mIntent;}},{key:'setVisible',value:function setVisible(visible){this.mVisible=visible;return this;}},{key:'isVisible',value:function isVisible(){return this.mVisible;}},{key:'setEnabled',value:function setEnabled(enabled){this.mEnable=enabled;return this;}},{key:'isEnabled',value:function isEnabled(){return this.mEnable;}},{key:'setOnMenuItemClickListener',value:function setOnMenuItemClickListener(menuItemClickListener){this.mClickListener=menuItemClickListener;return this;}},{key:'setActionView',value:function setActionView(view){this.mActionView=view;return this;}},{key:'getActionView',value:function getActionView(){return this.mActionView;}},{key:'invoke',value:function invoke(){if(this.mClickListener!=null&&this.mClickListener.onMenuItemClick(this)){return true;}if(this.mMenu.dispatchMenuItemSelected(this.mMenu.getRootMenu(),this)){return true;}if(this.mIntent!=null){try{this.mMenu.getContext().startActivity(this.mIntent);return true;}catch(e){android.util.Log.e("MenuItem","Can't find activity to handle intent; ignoring",e);}}return false;}}]);return MenuItem;}();view_6.MenuItem=MenuItem;})(view=android.view||(android.view={}));})(android||(android={}));var android;(function(android){var view;(function(view){var MenuItem=android.view.MenuItem;var ArrayList=java.util.ArrayList;var Menu=function(){function Menu(context){_classCallCheck(this,Menu);this.mItems=new ArrayList();this.mVisibleItems=new ArrayList();this.mContext=context;}_createClass(Menu,[{key:'getContext',value:function getContext(){return this.mContext;}},{key:'add',value:function add(){if(arguments.length==1)return this.addInternal(0,0,0,arguments.length<=0?undefined:arguments[0]);return this.addInternal(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2],arguments.length<=3?undefined:arguments[3]);}},{key:'addInternal',value:function addInternal(group,id,categoryOrder,title){var ordering=0;var item=new MenuItem(this,group,id,categoryOrder,ordering,title);this.mItems.add(item);this.onItemsChanged(true);return item;}},{key:'removeItem',value:function removeItem(id){this.removeItemAtInt(this.findItemIndex(id),true);}},{key:'removeGroup',value:function removeGroup(groupId){var i=this.findGroupIndex(groupId);if(i>=0){var maxRemovable=this.mItems.size()-i;var numRemoved=0;while(numRemoved++=this.mItems.size()){return;}this.mItems.remove(index);if(updateChildrenOnMenuViews){this.onItemsChanged(true);}}},{key:'clear',value:function clear(){this.mItems.clear();this.onItemsChanged(true);}},{key:'setGroupVisible',value:function setGroupVisible(group,visible){var N=this.mItems.size();var changedAtLeastOneItem=false;for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:0;var size=this.size();if(start<0){start=0;}for(var i=start;i2&&arguments[2]!==undefined?arguments[2]:null;_classCallCheck(this,MenuPopupHelper);this.mPopupMaxWidth=0;this.mContext=context;this.mInflater=LayoutInflater.from(context);this.mMenu=menu;var res=context.getResources();this.mPopupMaxWidth=Math.max(res.getDisplayMetrics().widthPixels/2,res.getDisplayMetrics().density*320);this.mAnchorView=anchorView;}_createClass(MenuPopupHelper,[{key:'setAnchorView',value:function setAnchorView(anchor){this.mAnchorView=anchor;}},{key:'show',value:function show(){if(!this.tryShow()){throw Error('new IllegalStateException("MenuPopupHelper cannot be used without an anchor")');}}},{key:'tryShow',value:function tryShow(){this.mPopup=new ListPopupWindow(this.mContext,R.attr.popupMenuStyle);this.mPopup.setOnDismissListener(this);this.mPopup.setOnItemClickListener(this);this.mAdapter=new MenuPopupHelper.MenuAdapter(this.mMenu,this);this.mPopup.setAdapter(this.mAdapter);this.mPopup.setModal(true);var anchor=this.mAnchorView;if(anchor!=null){var addGlobalListener=this.mTreeObserver==null;this.mTreeObserver=anchor.getViewTreeObserver();if(addGlobalListener){this.mTreeObserver.addOnGlobalLayoutListener(this);}this.mPopup.setAnchorView(anchor);}else{return false;}this.mPopup.setContentWidth(Math.min(this.measureContentWidth(this.mAdapter),this.mPopupMaxWidth));this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);this.mPopup.show();this.mPopup.getListView().setOnKeyListener(this);return true;}},{key:'dismiss',value:function dismiss(){if(this.isShowing()){this.mPopup.dismiss();}}},{key:'onDismiss',value:function onDismiss(){this.mPopup=null;if(this.mTreeObserver!=null){if(!this.mTreeObserver.isAlive()){this.mTreeObserver=this.mAnchorView.getViewTreeObserver();}this.mTreeObserver.removeGlobalOnLayoutListener(this);this.mTreeObserver=null;}}},{key:'isShowing',value:function isShowing(){return this.mPopup!=null&&this.mPopup.isShowing();}},{key:'onItemClick',value:function onItemClick(parent,view,position,id){var adapter=this.mAdapter;var invoked=adapter.getItem(position).invoke();if(invoked)this.mPopup.dismiss();}},{key:'onKey',value:function onKey(v,keyCode,event){if(event.getAction()==KeyEvent.ACTION_UP&&keyCode==KeyEvent.KEYCODE_MENU){this.dismiss();return true;}return false;}},{key:'measureContentWidth',value:function measureContentWidth(adapter){var width=0;var itemView=null;var itemType=0;var widthMeasureSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);var heightMeasureSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);var count=adapter.getCount();for(var i=0;i=0){this.setCurrentItemInternal(this.mRestoredCurItem,false,true);this.mRestoredCurItem=-1;}else if(!wasFirstLayout){this.populate();}else{this.requestLayout();}}if(this.mAdapterChangeListener!=null&&oldAdapter!=adapter){this.mAdapterChangeListener.onAdapterChanged(oldAdapter,adapter);}}},{key:'removeNonDecorViews',value:function removeNonDecorViews(){for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:!this.mFirstLayout;this.mPopulatePending=false;this.setCurrentItemInternal(item,smoothScroll,false);}},{key:'getCurrentItem',value:function getCurrentItem(){return this.mCurItem;}},{key:'setCurrentItemInternal',value:function setCurrentItemInternal(item,smoothScroll,always){var velocity=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;if(this.mAdapter==null||this.mAdapter.getCount()<=0){this.setScrollingCacheEnabled(false);return;}if(!always&&this.mCurItem==item&&this.mItems.size()!=0){this.setScrollingCacheEnabled(false);return;}if(item<0){item=0;}else if(item>=this.mAdapter.getCount()){item=this.mAdapter.getCount()-1;}var pageLimit=this.mOffscreenPageLimit;if(item>this.mCurItem+pageLimit||item0&&arguments[0]!==undefined?arguments[0]:true;this.setChildrenDrawingOrderEnabled(enable);}},{key:'getChildDrawingOrder',value:function getChildDrawingOrder(childCount,i){var index=this.mDrawingOrder==ViewPager.DRAW_ORDER_REVERSE?childCount-1-i:i;var result=this.mDrawingOrderedChildren.get(index).getLayoutParams().childIndex;return result;}},{key:'setInternalPageChangeListener',value:function setInternalPageChangeListener(listener){var oldListener=this.mInternalPageChangeListener;this.mInternalPageChangeListener=listener;return oldListener;}},{key:'getOffscreenPageLimit',value:function getOffscreenPageLimit(){return this.mOffscreenPageLimit;}},{key:'setOffscreenPageLimit',value:function setOffscreenPageLimit(limit){if(limit2&&arguments[2]!==undefined?arguments[2]:0;if(this.getChildCount()==0){this.setScrollingCacheEnabled(false);return;}var sx=this.getScrollX();var sy=this.getScrollY();var dx=x-sx;var dy=y-sy;if(dx==0&&dy==0){this.completeScroll(false);this.populate();this.setScrollState(ViewPager.SCROLL_STATE_IDLE);return;}this.setScrollingCacheEnabled(true);this.setScrollState(ViewPager.SCROLL_STATE_SETTLING);var width=this.getClientWidth();var halfWidth=width/2;var distanceRatio=Math.min(1,1.0*Math.abs(dx)/width);var distance=halfWidth+halfWidth*this.distanceInfluenceForSnapDuration(distanceRatio);var duration=0;velocity=Math.abs(velocity);if(velocity>0){duration=4*Math.round(1000*Math.abs(distance/velocity));}else{var pageWidth=width*this.mAdapter.getPageWidth(this.mCurItem);var pageDelta=Math.abs(dx)/(pageWidth+this.mPageMargin);duration=Math.floor((pageDelta+1)*100);}duration=Math.min(duration,ViewPager.MAX_SETTLE_DURATION);this.mScroller.startScroll(sx,sy,dx,dy,duration);this.postInvalidateOnAnimation();}},{key:'addNewItem',value:function addNewItem(position,index){var ii=new ItemInfo();ii.position=position;ii.object=this.mAdapter.instantiateItem(this,position);ii.widthFactor=this.mAdapter.getPageWidth(position);if(index<0||index>=this.mItems.size()){this.mItems.add(ii);}else{this.mItems.add(index,ii);}return ii;}},{key:'dataSetChanged',value:function dataSetChanged(){var adapterCount=this.mAdapter.getCount();this.mExpectedAdapterCount=adapterCount;var needPopulate=this.mItems.size()0&&arguments[0]!==undefined?arguments[0]:this.mCurItem;var oldCurInfo=null;var focusDirection=View.FOCUS_FORWARD;if(this.mCurItem!=newCurrentItem){focusDirection=this.mCurItem=this.mCurItem){if(ii.position==this.mCurItem)curItem=ii;break;}}if(curItem==null&&N>0){curItem=this.addNewItem(this.mCurItem,curIndex);}if(curItem!=null){var extraWidthLeft=0;var itemIndex=curIndex-1;var _ii=itemIndex>=0?this.mItems.get(itemIndex):null;var clientWidth=this.getClientWidth();var leftWidthNeeded=clientWidth<=0?0:2-curItem.widthFactor+this.getPaddingLeft()/clientWidth;for(var pos=this.mCurItem-1;pos>=0;pos--){if(extraWidthLeft>=leftWidthNeeded&&pos=0?this.mItems.get(itemIndex):null;}}else if(_ii!=null&&pos==_ii.position){extraWidthLeft+=_ii.widthFactor;itemIndex--;_ii=itemIndex>=0?this.mItems.get(itemIndex):null;}else{_ii=this.addNewItem(pos,itemIndex+1);extraWidthLeft+=_ii.widthFactor;curIndex++;_ii=itemIndex>=0?this.mItems.get(itemIndex):null;}}var extraWidthRight=curItem.widthFactor;itemIndex=curIndex+1;if(extraWidthRight<2){_ii=itemIndex=rightWidthNeeded&&_pos2>endPos){if(_ii==null){break;}if(_pos2==_ii.position&&!_ii.scrolling){this.mItems.remove(itemIndex);this.mAdapter.destroyItem(this,_pos2,_ii.object);if(DEBUG){Log.i(TAG,"populate() - destroyItem() with pos: "+_pos2+" view: "+_ii.object);}_ii=itemIndex0?this.mPageMargin/width:0;if(oldCurInfo!=null){var oldCurPosition=oldCurInfo.position;if(oldCurPositionii.position&&itemIndexcurItem.position){var _itemIndex2=this.mItems.size()-1;var _ii4=null;var _offset4=oldCurInfo.offset;for(var _pos4=oldCurPosition-1;_pos4>=curItem.position&&_itemIndex2>=0;_pos4--){_ii4=this.mItems.get(_itemIndex2);while(_pos4<_ii4.position&&_itemIndex2>0){_itemIndex2--;_ii4=this.mItems.get(_itemIndex2);}while(_pos4>_ii4.position){_offset4-=this.mAdapter.getPageWidth(_pos4)+marginOffset;_pos4--;}_offset4-=_ii4.widthFactor+marginOffset;_ii4.offset=_offset4;}}}var itemCount=this.mItems.size();var offset=curItem.offset;var pos=curItem.position-1;this.mFirstOffset=curItem.position==0?curItem.offset:-Number.MAX_VALUE;this.mLastOffset=curItem.position==N-1?curItem.offset+curItem.widthFactor-1:Number.MAX_VALUE;for(var i=curIndex-1;i>=0;i--,pos--){var _ii5=this.mItems.get(i);while(pos>_ii5.position){offset-=this.mAdapter.getPageWidth(pos--)+marginOffset;}offset-=_ii5.widthFactor+marginOffset;_ii5.offset=offset;if(_ii5.position==0)this.mFirstOffset=offset;}offset=curItem.offset+curItem.widthFactor+marginOffset;pos=curItem.position+1;for(var _i64=curIndex+1;_i640&&!this.mItems.isEmpty()){var widthWithMargin=width-this.getPaddingLeft()-this.getPaddingRight()+margin;var oldWidthWithMargin=oldWidth-this.getPaddingLeft()-this.getPaddingRight()+oldMargin;var xpos=this.getScrollX();var pageOffset=xpos/oldWidthWithMargin;var newOffsetPixels=Math.floor(pageOffset*widthWithMargin);this.scrollTo(newOffsetPixels,this.getScrollY());if(!this.mScroller.isFinished()){var newDuration=this.mScroller.getDuration()-this.mScroller.timePassed();var targetInfo=this.infoForPosition(this.mCurItem);this.mScroller.startScroll(newOffsetPixels,0,Math.floor(targetInfo.offset*width),0,newDuration);}}else{var ii=this.infoForPosition(this.mCurItem);var scrollOffset=ii!=null?Math.min(ii.offset,this.mLastOffset):0;var scrollPos=Math.floor(scrollOffset*(width-this.getPaddingLeft()-this.getPaddingRight()));if(scrollPos!=this.getScrollX()){this.completeScroll(false);this.scrollTo(scrollPos,this.getScrollY());}}}},{key:'onLayout',value:function onLayout(changed,l,t,r,b){var count=this.getChildCount();var width=r-l;var height=b-t;var paddingLeft=this.getPaddingLeft();var paddingTop=this.getPaddingTop();var paddingRight=this.getPaddingRight();var paddingBottom=this.getPaddingBottom();var scrollX=this.getScrollX();var decorCount=0;for(var i=0;i0){var scrollX=this.getScrollX();var paddingLeft=this.getPaddingLeft();var paddingRight=this.getPaddingRight();var width=this.getWidth();var childCount=this.getChildCount();for(var i=0;i0||x>this.getWidth()-this.mGutterSize&&dx<0;}},{key:'enableLayers',value:function enableLayers(enable){}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getAction()&MotionEvent.ACTION_MASK;if(action==MotionEvent.ACTION_CANCEL||action==MotionEvent.ACTION_UP){if(DEBUG)Log.v(TAG,"Intercept done!");this.resetTouch();return false;}if(action!=MotionEvent.ACTION_DOWN){if(this.mIsBeingDragged){if(DEBUG)Log.v(TAG,"Intercept returning true!");return true;}if(this.mIsUnableToDrag){if(DEBUG)Log.v(TAG,"Intercept returning false!");return false;}}switch(action){case MotionEvent.ACTION_MOVE:{var activePointerId=this.mActivePointerId;if(activePointerId==ViewPager.INVALID_POINTER){break;}var pointerIndex=ev.findPointerIndex(activePointerId);var _x246=ev.getX(pointerIndex);var _dx7=_x246-this.mLastMotionX;var xDiff=Math.abs(_dx7);var _y22=ev.getY(pointerIndex);var yDiff=Math.abs(_y22-this.mInitialMotionY);if(DEBUG)Log.v(TAG,"Moved x to "+_x246+","+_y22+" diff="+xDiff+","+yDiff);if(_dx7!=0&&!this.isGutterDrag(this.mLastMotionX,_dx7)&&this.canScroll(this,false,Math.floor(_dx7),Math.floor(_x246),Math.floor(_y22))){this.mLastMotionX=_x246;this.mLastMotionY=_y22;this.mIsUnableToDrag=true;return false;}if(xDiff>this.mTouchSlop&&xDiff*0.5>yDiff){if(DEBUG)Log.v(TAG,"Starting drag!");this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.mLastMotionX=_dx7>0?this.mInitialMotionX+this.mTouchSlop:this.mInitialMotionX-this.mTouchSlop;this.mLastMotionY=_y22;this.setScrollingCacheEnabled(true);}else if(yDiff>this.mTouchSlop){if(DEBUG)Log.v(TAG,"Starting unable to drag!");this.mIsUnableToDrag=true;}if(this.mIsBeingDragged){if(this.performDrag(_x246)){this.postInvalidateOnAnimation();}}break;}case MotionEvent.ACTION_DOWN:{this.mLastMotionX=this.mInitialMotionX=ev.getX();this.mLastMotionY=this.mInitialMotionY=ev.getY();this.mActivePointerId=ev.getPointerId(0);this.mIsUnableToDrag=false;this.mScroller.computeScrollOffset();if(this.mScrollState==ViewPager.SCROLL_STATE_SETTLING&&Math.abs(this.mScroller.getFinalX()-this.mScroller.getCurrX())>this.mCloseEnough){this.mScroller.abortAnimation();this.mPopulatePending=false;this.populate();this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);}else{this.completeScroll(false);this.mIsBeingDragged=false;}if(DEBUG)Log.v(TAG,"Down at "+this.mLastMotionX+","+this.mLastMotionY+" mIsBeingDragged="+this.mIsBeingDragged+"mIsUnableToDrag="+this.mIsUnableToDrag);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);break;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);return this.mIsBeingDragged;}},{key:'onTouchEvent',value:function onTouchEvent(ev){if(this.mFakeDragging){return true;}if(ev.getAction()==MotionEvent.ACTION_DOWN&&ev.getEdgeFlags()!=0){return false;}if(this.mAdapter==null||this.mAdapter.getCount()==0){return false;}if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}this.mVelocityTracker.addMovement(ev);var action=ev.getAction();var needsInvalidate=false;switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{this.mScroller.abortAnimation();this.mPopulatePending=false;this.populate();this.mLastMotionX=this.mInitialMotionX=ev.getX();this.mLastMotionY=this.mInitialMotionY=ev.getY();this.mActivePointerId=ev.getPointerId(0);break;}case MotionEvent.ACTION_MOVE:if(!this.mIsBeingDragged){var pointerIndex=ev.findPointerIndex(this.mActivePointerId);if(pointerIndex==-1){needsInvalidate=this.resetTouch();break;}var _x247=ev.getX(pointerIndex);var xDiff=Math.abs(_x247-this.mLastMotionX);var _y23=ev.getY(pointerIndex);var yDiff=Math.abs(_y23-this.mLastMotionY);if(DEBUG)Log.v(TAG,"Moved x to "+_x247+","+_y23+" diff="+xDiff+","+yDiff);if(xDiff>this.mTouchSlop&&xDiff>yDiff){if(DEBUG)Log.v(TAG,"Starting drag!");this.mIsBeingDragged=true;this.requestParentDisallowInterceptTouchEvent(true);this.mLastMotionX=_x247-this.mInitialMotionX>0?this.mInitialMotionX+this.mTouchSlop:this.mInitialMotionX-this.mTouchSlop;this.mLastMotionY=_y23;this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.setScrollingCacheEnabled(true);var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(true);}}}if(this.mIsBeingDragged){var activePointerIndex=ev.findPointerIndex(this.mActivePointerId);var _x248=ev.getX(activePointerIndex);needsInvalidate=needsInvalidate||this.performDrag(_x248);}break;case MotionEvent.ACTION_UP:if(this.mIsBeingDragged){var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=velocityTracker.getXVelocity(this.mActivePointerId);this.mPopulatePending=true;var width=this.getClientWidth();var scrollX=this.getScrollX();var ii=this.infoForCurrentScrollPosition();var currentPage=ii.position;var pageOffset=(scrollX/width-ii.offset)/ii.widthFactor;var _activePointerIndex=ev.findPointerIndex(this.mActivePointerId);var _x249=ev.getX(_activePointerIndex);var totalDelta=_x249-this.mInitialMotionX;var nextPage=this.determineTargetPage(currentPage,pageOffset,initialVelocity,totalDelta);this.setCurrentItemInternal(nextPage,true,true,initialVelocity);needsInvalidate=this.resetTouch();}break;case MotionEvent.ACTION_CANCEL:if(this.mIsBeingDragged){this.scrollToItem(this.mCurItem,true,0,false);needsInvalidate=this.resetTouch();}break;case MotionEvent.ACTION_POINTER_DOWN:{var index=ev.getActionIndex();var _x250=ev.getX(index);this.mLastMotionX=_x250;this.mActivePointerId=ev.getPointerId(index);break;}case MotionEvent.ACTION_POINTER_UP:this.onSecondaryPointerUp(ev);this.mLastMotionX=ev.getX(ev.findPointerIndex(this.mActivePointerId));break;}if(needsInvalidate){this.postInvalidateOnAnimation();}return true;}},{key:'resetTouch',value:function resetTouch(){var needsInvalidate=false;this.mActivePointerId=ViewPager.INVALID_POINTER;this.endDrag();return needsInvalidate;}},{key:'requestParentDisallowInterceptTouchEvent',value:function requestParentDisallowInterceptTouchEvent(disallowIntercept){var parent=this.getParent();if(parent!=null){parent.requestDisallowInterceptTouchEvent(disallowIntercept);}}},{key:'performDrag',value:function performDrag(x){var needsInvalidate=false;var deltaX=this.mLastMotionX-x;this.mLastMotionX=x;var oldScrollX=this.getScrollX();var scrollX=oldScrollX+deltaX;var width=this.getClientWidth();var leftBound=width*this.mFirstOffset;var rightBound=width*this.mLastOffset;var leftAbsolute=true;var rightAbsolute=true;var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);if(firstItem.position!=0){leftAbsolute=false;leftBound=firstItem.offset*width;}if(lastItem.position!=this.mAdapter.getCount()-1){rightAbsolute=false;rightBound=lastItem.offset*width;}if(scrollXrightBound){if(rightAbsolute){var _over=scrollX-rightBound;needsInvalidate=false;}scrollX-=deltaX/2;}this.mLastMotionX+=scrollX-Math.floor(scrollX);this.scrollTo(scrollX,this.getScrollY());this.pageScrolled(scrollX);return needsInvalidate;}},{key:'infoForCurrentScrollPosition',value:function infoForCurrentScrollPosition(){var width=this.getClientWidth();var scrollOffset=width>0?this.getScrollX()/width:0;var marginOffset=width>0?this.mPageMargin/width:0;var lastPos=-1;var lastOffset=0;var lastWidth=0;var first=true;var lastItem=null;for(var i=0;i=leftBound){if(scrollOffsetthis.mFlingDistance&&Math.abs(velocity)>this.mMinimumVelocity){targetPage=velocity>0?currentPage:currentPage+1;}else{var truncator=currentPage>=this.mCurItem?0.4:0.6;targetPage=Math.floor(currentPage+pageOffset+truncator);}if(this.mItems.size()>0){var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);targetPage=Math.max(firstItem.position,Math.min(targetPage,lastItem.position));}return targetPage;}},{key:'draw',value:function draw(canvas){_get2(ViewPager.prototype.__proto__||Object.getPrototypeOf(ViewPager.prototype),'draw',this).call(this,canvas);var needsInvalidate=false;if(needsInvalidate){this.postInvalidateOnAnimation();}}},{key:'onDraw',value:function onDraw(canvas){_get2(ViewPager.prototype.__proto__||Object.getPrototypeOf(ViewPager.prototype),'onDraw',this).call(this,canvas);if(this.mPageMargin>0&&this.mMarginDrawable!=null&&this.mItems.size()>0&&this.mAdapter!=null){var scrollX=this.getScrollX();var width=this.getWidth();var marginOffset=this.mPageMargin/width;var itemIndex=0;var ii=this.mItems.get(0);var offset=ii.offset;var itemCount=this.mItems.size();var firstPos=ii.position;var lastPos=this.mItems.get(itemCount-1).position;for(var pos=firstPos;posii.position&&itemIndexscrollX){this.mMarginDrawable.setBounds(drawAt,this.mTopPageBounds,drawAt+this.mPageMargin,this.mBottomPageBounds);this.mMarginDrawable.draw(canvas);}if(drawAt>scrollX+width){break;}}}}},{key:'beginFakeDrag',value:function beginFakeDrag(){if(this.mIsBeingDragged){return false;}this.mFakeDragging=true;this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);this.mInitialMotionX=this.mLastMotionX=0;if(this.mVelocityTracker==null){this.mVelocityTracker=VelocityTracker.obtain();}else{this.mVelocityTracker.clear();}var time=android.os.SystemClock.uptimeMillis();var ev=MotionEvent.obtainWithAction(time,time,MotionEvent.ACTION_DOWN,0,0,0);this.mVelocityTracker.addMovement(ev);ev.recycle();this.mFakeDragBeginTime=time;return true;}},{key:'endFakeDrag',value:function endFakeDrag(){if(!this.mFakeDragging){throw new Error("No fake drag in progress. Call beginFakeDrag first.");}var velocityTracker=this.mVelocityTracker;velocityTracker.computeCurrentVelocity(1000,this.mMaximumVelocity);var initialVelocity=Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));this.mPopulatePending=true;var width=this.getClientWidth();var scrollX=this.getScrollX();var ii=this.infoForCurrentScrollPosition();var currentPage=ii.position;var pageOffset=(scrollX/width-ii.offset)/ii.widthFactor;var totalDelta=Math.floor(this.mLastMotionX-this.mInitialMotionX);var nextPage=this.determineTargetPage(currentPage,pageOffset,initialVelocity,totalDelta);this.setCurrentItemInternal(nextPage,true,true,initialVelocity);this.endDrag();this.mFakeDragging=false;}},{key:'fakeDragBy',value:function fakeDragBy(xOffset){if(!this.mFakeDragging){throw new Error("No fake drag in progress. Call beginFakeDrag first.");}this.mLastMotionX+=xOffset;var oldScrollX=this.getScrollX();var scrollX=oldScrollX-xOffset;var width=this.getClientWidth();var leftBound=width*this.mFirstOffset;var rightBound=width*this.mLastOffset;var firstItem=this.mItems.get(0);var lastItem=this.mItems.get(this.mItems.size()-1);if(firstItem.position!=0){leftBound=firstItem.offset*width;}if(lastItem.position!=this.mAdapter.getCount()-1){rightBound=lastItem.offset*width;}if(scrollXrightBound){scrollX=rightBound;}this.mLastMotionX+=scrollX-Math.floor(scrollX);this.scrollTo(Math.floor(scrollX),this.getScrollY());this.pageScrolled(Math.floor(scrollX));var time=android.os.SystemClock.uptimeMillis();var ev=MotionEvent.obtainWithAction(this.mFakeDragBeginTime,time,MotionEvent.ACTION_MOVE,this.mLastMotionX,0,0);this.mVelocityTracker.addMovement(ev);ev.recycle();}},{key:'isFakeDragging',value:function isFakeDragging(){return this.mFakeDragging;}},{key:'onSecondaryPointerUp',value:function onSecondaryPointerUp(ev){var pointerIndex=ev.getActionIndex();var pointerId=ev.getPointerId(pointerIndex);if(pointerId==this.mActivePointerId){var newPointerIndex=pointerIndex==0?1:0;this.mLastMotionX=ev.getX(newPointerIndex);this.mActivePointerId=ev.getPointerId(newPointerIndex);if(this.mVelocityTracker!=null){this.mVelocityTracker.clear();}}}},{key:'endDrag',value:function endDrag(){this.mIsBeingDragged=false;this.mIsUnableToDrag=false;if(this.mVelocityTracker!=null){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}}},{key:'setScrollingCacheEnabled',value:function setScrollingCacheEnabled(enabled){if(this.mScrollingCacheEnabled!=enabled){this.mScrollingCacheEnabled=enabled;if(ViewPager.USE_CACHE){var size=this.getChildCount();for(var i=0;iwidth*this.mFirstOffset;}else if(direction>0){return scrollX=0;i--){var child=group.getChildAt(i);if(x+scrollX>=child.getLeft()&&x+scrollX=child.getTop()&&y+scrollY ").append(_parent3.toString());}Log.e(TAG,"arrowScroll tried to find focus based on non-child "+"current focused view "+sb.toString());currentFocused=null;}}var handled=false;var nextFocused=android.view.FocusFinder.getInstance().findNextFocus(this,currentFocused,direction);if(nextFocused!=null&&nextFocused!=currentFocused){if(direction==View.FOCUS_LEFT){var nextLeft=this.getChildRectInPagerCoordinates(this.mTempRect,nextFocused).left;var currLeft=this.getChildRectInPagerCoordinates(this.mTempRect,currentFocused).left;if(currentFocused!=null&&nextLeft>=currLeft){handled=this.pageLeft();}else{handled=nextFocused.requestFocus();}}else if(direction==View.FOCUS_RIGHT){var _nextLeft=this.getChildRectInPagerCoordinates(this.mTempRect,nextFocused).left;var _currLeft=this.getChildRectInPagerCoordinates(this.mTempRect,currentFocused).left;if(currentFocused!=null&&_nextLeft<=_currLeft){handled=this.pageRight();}else{handled=nextFocused.requestFocus();}}}else if(direction==View.FOCUS_LEFT||direction==View.FOCUS_BACKWARD){handled=this.pageLeft();}else if(direction==View.FOCUS_RIGHT||direction==View.FOCUS_FORWARD){handled=this.pageRight();}return handled;}},{key:'getChildRectInPagerCoordinates',value:function getChildRectInPagerCoordinates(outRect,child){if(outRect==null){outRect=new Rect();}if(child==null){outRect.set(0,0,0,0);return outRect;}outRect.left=child.getLeft();outRect.right=child.getRight();outRect.top=child.getTop();outRect.bottom=child.getBottom();var parent=child.getParent();while(parent instanceof ViewGroup&&parent!=this){var group=parent;outRect.left+=group.getLeft();outRect.right+=group.getRight();outRect.top+=group.getTop();outRect.bottom+=group.getBottom();parent=group.getParent();}return outRect;}},{key:'pageLeft',value:function pageLeft(){if(this.mCurItem>0){this.setCurrentItem(this.mCurItem-1,true);return true;}return false;}},{key:'pageRight',value:function pageRight(){if(this.mAdapter!=null&&this.mCurItem0){duration=4*Math.round(1000*Math.abs(distance/velocity));}else{var range=Math.abs(delta)/motionRange;duration=Math.floor((range+1)*ViewDragHelper.BASE_SETTLE_DURATION);}return Math.min(duration,ViewDragHelper.MAX_SETTLE_DURATION);}},{key:'clampMag',value:function clampMag(value,absMin,absMax){var absValue=Math.abs(value);if(absValueabsMax)return value>0?absMax:-absMax;return value;}},{key:'distanceInfluenceForSnapDuration',value:function distanceInfluenceForSnapDuration(f){f-=0.5;f*=0.3*Math.PI/2.0;return Math.sin(f);}},{key:'flingCapturedView',value:function flingCapturedView(minLeft,minTop,maxLeft,maxTop){if(!this.mReleaseInProgress){throw Error('new IllegalStateException("Cannot flingCapturedView outside of a call to " + "Callback#onViewReleased")');}this.mScroller.fling(this.mCapturedView.getLeft(),this.mCapturedView.getTop(),Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)),Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)),minLeft,maxLeft,minTop,maxTop);this.setDragState(ViewDragHelper.STATE_SETTLING);}},{key:'continueSettling',value:function continueSettling(deferCallbacks){if(this.mDragState==ViewDragHelper.STATE_SETTLING){var keepGoing=this.mScroller.computeScrollOffset();var _x251=this.mScroller.getCurrX();var _y24=this.mScroller.getCurrY();var _dx8=_x251-this.mCapturedView.getLeft();var _dy4=_y24-this.mCapturedView.getTop();if(_dx8!=0){this.mCapturedView.offsetLeftAndRight(_dx8);}if(_dy4!=0){this.mCapturedView.offsetTopAndBottom(_dy4);}if(_dx8!=0||_dy4!=0){this.mCallback.onViewPositionChanged(this.mCapturedView,_x251,_y24,_dx8,_dy4);}if(keepGoing&&_x251==this.mScroller.getFinalX()&&_y24==this.mScroller.getFinalY()){this.mScroller.abortAnimation();keepGoing=this.mScroller.isFinished();}if(!keepGoing){if(deferCallbacks){this.mParentView.post(this.mSetIdleRunnable);}else{this.setDragState(ViewDragHelper.STATE_IDLE);}}}return this.mDragState==ViewDragHelper.STATE_SETTLING;}},{key:'dispatchViewReleased',value:function dispatchViewReleased(xvel,yvel){this.mReleaseInProgress=true;this.mCallback.onViewReleased(this.mCapturedView,xvel,yvel);this.mReleaseInProgress=false;if(this.mDragState==ViewDragHelper.STATE_DRAGGING){this.setDragState(ViewDragHelper.STATE_IDLE);}}},{key:'clearMotionHistory',value:function clearMotionHistory(pointerId){if(this.mInitialMotionX==null){return;}if(pointerId==null){this.mInitialMotionX=[];this.mInitialMotionY=[];this.mLastMotionX=[];this.mLastMotionY=[];this.mInitialEdgesTouched=[];this.mEdgeDragsInProgress=[];this.mEdgeDragsLocked=[];this.mPointersDown=0;}else{this.mInitialMotionX[pointerId]=0;this.mInitialMotionY[pointerId]=0;this.mLastMotionX[pointerId]=0;this.mLastMotionY[pointerId]=0;this.mInitialEdgesTouched[pointerId]=0;this.mEdgeDragsInProgress[pointerId]=0;this.mEdgeDragsLocked[pointerId]=0;this.mPointersDown&=~(1<=0;i--){var child=group.getChildAt(i);if(x+scrollX>=child.getLeft()&&x+scrollX=child.getTop()&&y+scrollYthis.mTouchSlop;}},{key:'checkTouchSlop',value:function checkTouchSlop(){if(arguments.length===1)return this._checkTouchSlop_1(arguments.length<=0?undefined:arguments[0]);if(arguments.length===2)return this._checkTouchSlop_2(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]);if(arguments.length===3)return this._checkTouchSlop_3(arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1],arguments.length<=2?undefined:arguments[2]);return false;}},{key:'_checkTouchSlop_3',value:function _checkTouchSlop_3(child,dx,dy){if(child==null){return false;}var checkHorizontal=this.mCallback.getViewHorizontalDragRange(child)>0;var checkVertical=this.mCallback.getViewVerticalDragRange(child)>0;if(checkHorizontal&&checkVertical){return dx*dx+dy*dy>this.mTouchSlop*this.mTouchSlop;}else if(checkHorizontal){return Math.abs(dx)>this.mTouchSlop;}else if(checkVertical){return Math.abs(dy)>this.mTouchSlop;}return false;}},{key:'_checkTouchSlop_1',value:function _checkTouchSlop_1(directions){var count=this.mInitialMotionX.length;for(var i=0;ithis.mTouchSlop*this.mTouchSlop;}else if(checkHorizontal){return Math.abs(dx)>this.mTouchSlop;}else if(checkVertical){return Math.abs(dy)>this.mTouchSlop;}return false;}},{key:'isEdgeTouched',value:function isEdgeTouched(edges,pointerId){if(pointerId==null){var count=this.mInitialEdgesTouched.length;for(var i=0;i=view.getLeft()&&x=view.getTop()&&y=0;i--){var child=this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(i));if(x>=child.getLeft()&&x=child.getTop()&&ythis.mParentView.getRight()-this.mEdgeSize)result|=ViewDragHelper.EDGE_RIGHT;if(y>this.mParentView.getBottom()-this.mEdgeSize)result|=ViewDragHelper.EDGE_BOTTOM;return result;}}],[{key:'create',value:function create(){for(var _len35=arguments.length,args=Array(_len35),_key36=0;_key36<_len35;_key36++){args[_key36]=arguments[_key36];}if(args.length===2)return new ViewDragHelper(args[0],args[1]);else if(args.length===3){var forParent=args[0],sensitivity=args[1],cb=args[2];var helper=ViewDragHelper.create(forParent,cb);helper.mTouchSlop=Math.floor(helper.mTouchSlop*(1/sensitivity));return helper;}}}]);return ViewDragHelper;}();ViewDragHelper.TAG="ViewDragHelper";ViewDragHelper.INVALID_POINTER=-1;ViewDragHelper.STATE_IDLE=0;ViewDragHelper.STATE_DRAGGING=1;ViewDragHelper.STATE_SETTLING=2;ViewDragHelper.EDGE_LEFT=1<<0;ViewDragHelper.EDGE_RIGHT=1<<1;ViewDragHelper.EDGE_TOP=1<<2;ViewDragHelper.EDGE_BOTTOM=1<<3;ViewDragHelper.EDGE_ALL=ViewDragHelper.EDGE_LEFT|ViewDragHelper.EDGE_TOP|ViewDragHelper.EDGE_RIGHT|ViewDragHelper.EDGE_BOTTOM;ViewDragHelper.DIRECTION_HORIZONTAL=1<<0;ViewDragHelper.DIRECTION_VERTICAL=1<<1;ViewDragHelper.DIRECTION_ALL=ViewDragHelper.DIRECTION_HORIZONTAL|ViewDragHelper.DIRECTION_VERTICAL;ViewDragHelper.EDGE_SIZE=20;ViewDragHelper.BASE_SETTLE_DURATION=256;ViewDragHelper.MAX_SETTLE_DURATION=600;ViewDragHelper.sInterpolator=function(){var _Inner=function(){function _Inner(){_classCallCheck(this,_Inner);}_createClass(_Inner,[{key:'getInterpolation',value:function getInterpolation(t){t-=1.0;return t*t*t*t*t+1.0;}}]);return _Inner;}();return new _Inner();}();widget.ViewDragHelper=ViewDragHelper;(function(ViewDragHelper){var Callback=function(){function Callback(){_classCallCheck(this,Callback);}_createClass(Callback,[{key:'onViewDragStateChanged',value:function onViewDragStateChanged(state){}},{key:'onViewPositionChanged',value:function onViewPositionChanged(changedView,left,top,dx,dy){}},{key:'onViewCaptured',value:function onViewCaptured(capturedChild,activePointerId){}},{key:'onViewReleased',value:function onViewReleased(releasedChild,xvel,yvel){}},{key:'onEdgeTouched',value:function onEdgeTouched(edgeFlags,pointerId){}},{key:'onEdgeLock',value:function onEdgeLock(edgeFlags){return false;}},{key:'onEdgeDragStarted',value:function onEdgeDragStarted(edgeFlags,pointerId){}},{key:'getOrderedChildIndex',value:function getOrderedChildIndex(index){return index;}},{key:'getViewHorizontalDragRange',value:function getViewHorizontalDragRange(child){return 0;}},{key:'getViewVerticalDragRange',value:function getViewVerticalDragRange(child){return 0;}},{key:'clampViewPositionHorizontal',value:function clampViewPositionHorizontal(child,left,dx){return 0;}},{key:'clampViewPositionVertical',value:function clampViewPositionVertical(child,top,dy){return 0;}}]);return Callback;}();ViewDragHelper.Callback=Callback;})(ViewDragHelper=widget.ViewDragHelper||(widget.ViewDragHelper={}));})(widget=v4.widget||(v4.widget={}));})(v4=support.v4||(support.v4={}));})(support=android.support||(android.support={}));})(android||(android={}));var android;(function(android){var support;(function(support){var v4;(function(v4){var widget;(function(widget){var Paint=android.graphics.Paint;var PixelFormat=android.graphics.PixelFormat;var SystemClock=android.os.SystemClock;var Gravity=android.view.Gravity;var KeyEvent=android.view.KeyEvent;var MotionEvent=android.view.MotionEvent;var View=android.view.View;var ViewGroup=android.view.ViewGroup;var ViewDragHelper=android.support.v4.widget.ViewDragHelper;var Context=android.content.Context;var DrawerLayout=function(_ViewGroup6){_inherits(DrawerLayout,_ViewGroup6);function DrawerLayout(context,bindElement,defStyle){_classCallCheck(this,DrawerLayout);var _this173=_possibleConstructorReturn(this,(DrawerLayout.__proto__||Object.getPrototypeOf(DrawerLayout)).call(this,context,bindElement,defStyle));_this173.mMinDrawerMargin=0;_this173.mScrimColor=DrawerLayout.DEFAULT_SCRIM_COLOR;_this173.mScrimOpacity=0;_this173.mScrimPaint=new Paint();_this173.mDrawerState=0;_this173.mFirstLayout=true;_this173.mLockModeLeft=0;_this173.mLockModeRight=0;_this173.mInitialMotionX=0;_this173.mInitialMotionY=0;var density=_this173.getResources().getDisplayMetrics().density;_this173.mMinDrawerMargin=Math.floor(DrawerLayout.MIN_DRAWER_MARGIN*density+0.5);var minVel=DrawerLayout.MIN_FLING_VELOCITY*density;_this173.mLeftCallback=new DrawerLayout.ViewDragCallback(_this173,Gravity.LEFT);_this173.mRightCallback=new DrawerLayout.ViewDragCallback(_this173,Gravity.RIGHT);_this173.mLeftDragger=ViewDragHelper.create(_this173,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this173.mLeftCallback);_this173.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);_this173.mLeftDragger.setMinVelocity(minVel);_this173.mLeftCallback.setDragger(_this173.mLeftDragger);_this173.mRightDragger=ViewDragHelper.create(_this173,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this173.mRightCallback);_this173.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);_this173.mRightDragger.setMinVelocity(minVel);_this173.mRightCallback.setDragger(_this173.mRightDragger);_this173.setFocusableInTouchMode(true);_this173.setMotionEventSplittingEnabled(false);return _this173;}_createClass(DrawerLayout,[{key:'setDrawerShadow',value:function setDrawerShadow(shadowDrawable,gravity){var absGravity=Gravity.getAbsoluteGravity(gravity,this.getLayoutDirection());if((absGravity&Gravity.LEFT)==Gravity.LEFT){this.mShadowLeft=shadowDrawable;this.invalidate();}if((absGravity&Gravity.RIGHT)==Gravity.RIGHT){this.mShadowRight=shadowDrawable;this.invalidate();}}},{key:'setScrimColor',value:function setScrimColor(color){this.mScrimColor=color;this.invalidate();}},{key:'setDrawerListener',value:function setDrawerListener(listener){this.mListener=listener;}},{key:'setDrawerLockMode',value:function setDrawerLockMode(lockMode,edgeGravityOrView){if(edgeGravityOrView==null){this.setDrawerLockMode(lockMode,Gravity.LEFT);this.setDrawerLockMode(lockMode,Gravity.RIGHT);return;}if(edgeGravityOrView instanceof View){if(!this.isDrawerView(edgeGravityOrView)){throw Error('new IllegalArgumentException("View " + drawerView + " is not a " + "drawer with appropriate layout_gravity")');}var gravity=edgeGravityOrView.getLayoutParams().gravity;this.setDrawerLockMode(lockMode,gravity);return;}var edgeGravity=edgeGravityOrView;var absGravity=Gravity.getAbsoluteGravity(edgeGravity,this.getLayoutDirection());if(absGravity==Gravity.LEFT){this.mLockModeLeft=lockMode;}else if(absGravity==Gravity.RIGHT){this.mLockModeRight=lockMode;}if(lockMode!=DrawerLayout.LOCK_MODE_UNLOCKED){var helper=absGravity==Gravity.LEFT?this.mLeftDragger:this.mRightDragger;helper.cancel();}switch(lockMode){case DrawerLayout.LOCK_MODE_LOCKED_OPEN:var toOpen=this.findDrawerWithGravity(absGravity);if(toOpen!=null){this.openDrawer(toOpen);}break;case DrawerLayout.LOCK_MODE_LOCKED_CLOSED:var toClose=this.findDrawerWithGravity(absGravity);if(toClose!=null){this.closeDrawer(toClose);}break;}}},{key:'getDrawerLockMode',value:function getDrawerLockMode(edgeGravityOrView){if(edgeGravityOrView instanceof View){var drawerView=edgeGravityOrView;var absGravity=this.getDrawerViewAbsoluteGravity(drawerView);if(absGravity==Gravity.LEFT){return this.mLockModeLeft;}else if(absGravity==Gravity.RIGHT){return this.mLockModeRight;}return DrawerLayout.LOCK_MODE_UNLOCKED;}else{var edgeGravity=edgeGravityOrView;var _absGravity=Gravity.getAbsoluteGravity(edgeGravity,this.getLayoutDirection());if(_absGravity==Gravity.LEFT){return this.mLockModeLeft;}else if(_absGravity==Gravity.RIGHT){return this.mLockModeRight;}return DrawerLayout.LOCK_MODE_UNLOCKED;}}},{key:'updateDrawerState',value:function updateDrawerState(forGravity,activeState,activeDrawer){var leftState=this.mLeftDragger.getViewDragState();var rightState=this.mRightDragger.getViewDragState();var state=void 0;if(leftState==DrawerLayout.STATE_DRAGGING||rightState==DrawerLayout.STATE_DRAGGING){state=DrawerLayout.STATE_DRAGGING;}else if(leftState==DrawerLayout.STATE_SETTLING||rightState==DrawerLayout.STATE_SETTLING){state=DrawerLayout.STATE_SETTLING;}else{state=DrawerLayout.STATE_IDLE;}if(activeDrawer!=null&&activeState==DrawerLayout.STATE_IDLE){var lp=activeDrawer.getLayoutParams();if(lp.onScreen==0){this.dispatchOnDrawerClosed(activeDrawer);}else if(lp.onScreen==1){this.dispatchOnDrawerOpened(activeDrawer);}}if(state!=this.mDrawerState){this.mDrawerState=state;if(this.mListener!=null){this.mListener.onDrawerStateChanged(state);}}}},{key:'dispatchOnDrawerClosed',value:function dispatchOnDrawerClosed(drawerView){var lp=drawerView.getLayoutParams();if(lp.knownOpen){lp.knownOpen=false;if(this.mListener!=null){this.mListener.onDrawerClosed(drawerView);}}}},{key:'dispatchOnDrawerOpened',value:function dispatchOnDrawerOpened(drawerView){var lp=drawerView.getLayoutParams();if(!lp.knownOpen){lp.knownOpen=true;if(this.mListener!=null){this.mListener.onDrawerOpened(drawerView);}}}},{key:'dispatchOnDrawerSlide',value:function dispatchOnDrawerSlide(drawerView,slideOffset){if(this.mListener!=null){this.mListener.onDrawerSlide(drawerView,slideOffset);}}},{key:'setDrawerViewOffset',value:function setDrawerViewOffset(drawerView,slideOffset){var lp=drawerView.getLayoutParams();if(slideOffset==lp.onScreen){return;}lp.onScreen=slideOffset;this.dispatchOnDrawerSlide(drawerView,slideOffset);}},{key:'getDrawerViewOffset',value:function getDrawerViewOffset(drawerView){return drawerView.getLayoutParams().onScreen;}},{key:'getDrawerViewAbsoluteGravity',value:function getDrawerViewAbsoluteGravity(drawerView){var gravity=drawerView.getLayoutParams().gravity;return Gravity.getAbsoluteGravity(gravity,this.getLayoutDirection());}},{key:'checkDrawerViewAbsoluteGravity',value:function checkDrawerViewAbsoluteGravity(drawerView,checkFor){var absGravity=this.getDrawerViewAbsoluteGravity(drawerView);return(absGravity&checkFor)==checkFor;}},{key:'findOpenDrawer',value:function findOpenDrawer(){var childCount=this.getChildCount();for(var i=0;i_height-lp.bottomMargin){childTop=_height-lp.bottomMargin-childHeight;}child.layout(childLeft,childTop,childLeft+childWidth,childTop+childHeight);break;}}if(changeOffset){this.setDrawerViewOffset(child,newOffset);}var newVisibility=lp.onScreen>0?DrawerLayout.VISIBLE:DrawerLayout.INVISIBLE;if(child.getVisibility()!=newVisibility){child.setVisibility(newVisibility);}}}this.mInLayout=false;this.mFirstLayout=false;}},{key:'requestLayout',value:function requestLayout(){if(!this.mInLayout){_get2(DrawerLayout.prototype.__proto__||Object.getPrototypeOf(DrawerLayout.prototype),'requestLayout',this).call(this);}}},{key:'computeScroll',value:function computeScroll(){var childCount=this.getChildCount();var scrimOpacity=0;for(var i=0;iclipLeft)clipLeft=vright;}else{var vleft=v.getLeft();if(vleft0&&drawingContent){var baseAlpha=(this.mScrimColor&0xff000000)>>>24;var imag=Math.floor(baseAlpha*this.mScrimOpacity);var color=imag<<24|this.mScrimColor&0xffffff;this.mScrimPaint.setColor(color);canvas.drawRect(clipLeft,0,clipRight,this.getHeight(),this.mScrimPaint);}else if(this.mShadowLeft!=null&&this.checkDrawerViewAbsoluteGravity(child,Gravity.LEFT)){var shadowWidth=this.mShadowLeft.getIntrinsicWidth();var childRight=child.getRight();var drawerPeekDistance=this.mLeftDragger.getEdgeSize();var alpha=Math.max(0,Math.min(childRight/drawerPeekDistance,1.));this.mShadowLeft.setBounds(childRight,child.getTop(),childRight+shadowWidth,child.getBottom());this.mShadowLeft.setAlpha(Math.floor(0xff*alpha));this.mShadowLeft.draw(canvas);}else if(this.mShadowRight!=null&&this.checkDrawerViewAbsoluteGravity(child,Gravity.RIGHT)){var _shadowWidth=this.mShadowRight.getIntrinsicWidth();var childLeft=child.getLeft();var showing=this.getWidth()-childLeft;var _drawerPeekDistance=this.mRightDragger.getEdgeSize();var _alpha=Math.max(0,Math.min(showing/_drawerPeekDistance,1.));this.mShadowRight.setBounds(childLeft-_shadowWidth,child.getTop(),childLeft,child.getBottom());this.mShadowRight.setAlpha(Math.floor(0xff*_alpha));this.mShadowRight.draw(canvas);}return result;}},{key:'isContentView',value:function isContentView(child){return child.getLayoutParams().gravity==Gravity.NO_GRAVITY;}},{key:'isDrawerView',value:function isDrawerView(child){var gravity=child.getLayoutParams().gravity;var absGravity=Gravity.getAbsoluteGravity(gravity,child.getLayoutDirection());return(absGravity&(Gravity.LEFT|Gravity.RIGHT))!=0;}},{key:'onInterceptTouchEvent',value:function onInterceptTouchEvent(ev){var action=ev.getActionMasked();var leftIntercept=this.mLeftDragger.shouldInterceptTouchEvent(ev);var rightIntercept=this.mRightDragger.shouldInterceptTouchEvent(ev);var interceptForDrag=leftIntercept||rightIntercept;var interceptForTap=false;switch(action){case MotionEvent.ACTION_DOWN:{var _x261=ev.getX();var _y34=ev.getY();this.mInitialMotionX=_x261;this.mInitialMotionY=_y34;if(this.mScrimOpacity>0&&this.isContentView(this.mLeftDragger.findTopChildUnder(Math.floor(_x261),Math.floor(_y34)))){interceptForTap=true;}this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;break;}case MotionEvent.ACTION_MOVE:{if(this.mLeftDragger.checkTouchSlop(ViewDragHelper.DIRECTION_ALL)){this.mLeftCallback.removeCallbacks();this.mRightCallback.removeCallbacks();}break;}case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:{this.closeDrawers(true);this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;}}return interceptForDrag||interceptForTap||this.hasPeekingDrawer()||this.mChildrenCanceledTouch;}},{key:'onTouchEvent',value:function onTouchEvent(ev){this.mLeftDragger.processTouchEvent(ev);this.mRightDragger.processTouchEvent(ev);var action=ev.getAction();var wantTouchEvents=true;switch(action&MotionEvent.ACTION_MASK){case MotionEvent.ACTION_DOWN:{var _x262=ev.getX();var _y35=ev.getY();this.mInitialMotionX=_x262;this.mInitialMotionY=_y35;this.mDisallowInterceptRequested=false;this.mChildrenCanceledTouch=false;break;}case MotionEvent.ACTION_UP:{var _x263=ev.getX();var _y36=ev.getY();var peekingOnly=true;var touchedView=this.mLeftDragger.findTopChildUnder(Math.floor(_x263),Math.floor(_y36));if(touchedView!=null&&this.isContentView(touchedView)){var _dx11=_x263-this.mInitialMotionX;var _dy7=_y36-this.mInitialMotionY;var slop=this.mLeftDragger.getTouchSlop();if(_dx11*_dx11+_dy7*_dy70&&arguments[0]!==undefined?arguments[0]:false;var needsInvalidate=false;var childCount=this.getChildCount();for(var i=0;i0;}},{key:'_isDrawerVisible_gravity',value:function _isDrawerVisible_gravity(drawerGravity){var drawerView=this.findDrawerWithGravity(drawerGravity);if(drawerView!=null){return this.isDrawerVisible(drawerView);}return false;}},{key:'hasPeekingDrawer',value:function hasPeekingDrawer(){var childCount=this.getChildCount();for(var i=0;i0||xvel==0&&offset>0.5?0:-childWidth;}else{var width=this._DrawerLayout_this.getWidth();left=xvel<0||xvel==0&&offset>0.5?width-childWidth:width;}this.mDragger.settleCapturedViewAt(left,releasedChild.getTop());this._DrawerLayout_this.invalidate();}},{key:'onEdgeTouched',value:function onEdgeTouched(edgeFlags,pointerId){this._DrawerLayout_this.postDelayed(this.mPeekRunnable,DrawerLayout.PEEK_DELAY);}},{key:'peekDrawer',value:function peekDrawer(){var toCapture=void 0;var childLeft=void 0;var peekDistance=this.mDragger.getEdgeSize();var leftEdge=this.mAbsGravity==Gravity.LEFT;if(leftEdge){toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);childLeft=(toCapture!=null?-toCapture.getWidth():0)+peekDistance;}else{toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);childLeft=this._DrawerLayout_this.getWidth()-peekDistance;}if(toCapture!=null&&(leftEdge&&toCapture.getLeft()childLeft)&&this._DrawerLayout_this.getDrawerLockMode(toCapture)==DrawerLayout.LOCK_MODE_UNLOCKED){var lp=toCapture.getLayoutParams();this.mDragger.smoothSlideViewTo(toCapture,childLeft,toCapture.getTop());lp.isPeeking=true;this._DrawerLayout_this.invalidate();this.closeOtherDrawer();this._DrawerLayout_this.cancelChildViewTouch();}}},{key:'onEdgeLock',value:function onEdgeLock(edgeFlags){if(DrawerLayout.ALLOW_EDGE_LOCK){var drawer=this._DrawerLayout_this.findDrawerWithGravity(this.mAbsGravity);if(drawer!=null&&!this._DrawerLayout_this.isDrawerOpen(drawer)){this._DrawerLayout_this.closeDrawer(drawer);}return true;}return false;}},{key:'onEdgeDragStarted',value:function onEdgeDragStarted(edgeFlags,pointerId){var toCapture=void 0;if((edgeFlags&ViewDragHelper.EDGE_LEFT)==ViewDragHelper.EDGE_LEFT){toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);}else{toCapture=this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);}if(toCapture!=null&&this._DrawerLayout_this.getDrawerLockMode(toCapture)==DrawerLayout.LOCK_MODE_UNLOCKED){this.mDragger.captureChildView(toCapture,pointerId);}}},{key:'getViewHorizontalDragRange',value:function getViewHorizontalDragRange(child){return child.getWidth();}},{key:'clampViewPositionHorizontal',value:function clampViewPositionHorizontal(child,left,dx){if(this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child,Gravity.LEFT)){return Math.max(-child.getWidth(),Math.min(left,0));}else{var width=this._DrawerLayout_this.getWidth();return Math.max(width-child.getWidth(),Math.min(left,width));}}},{key:'clampViewPositionVertical',value:function clampViewPositionVertical(child,top,dy){return child.getTop();}}]);return ViewDragCallback;}(ViewDragHelper.Callback);DrawerLayout.ViewDragCallback=ViewDragCallback;var LayoutParams=function(_ViewGroup$MarginLayo3){_inherits(LayoutParams,_ViewGroup$MarginLayo3);function LayoutParams(){var _ref11;for(var _len36=arguments.length,args=Array(_len36),_key37=0;_key37<_len36;_key37++){args[_key37]=arguments[_key37];}_classCallCheck(this,LayoutParams);var _this175=_possibleConstructorReturn(this,(_ref11=LayoutParams.__proto__||Object.getPrototypeOf(LayoutParams)).call.apply(_ref11,[this].concat(_toConsumableArray(function(){if(args[0]instanceof android.content.Context&&args[1]instanceof HTMLElement)return[args[0],args[1]];else if(typeof args[0]==='number'&&typeof args[1]==='number'&&typeof args[2]==='number')return[args[0],args[1]];else if(typeof args[0]==='number'&&typeof args[1]==='number')return[args[0],args[1]];else if(args[0]instanceof DrawerLayout.LayoutParams)return[args[0]];else if(args[0]instanceof ViewGroup.MarginLayoutParams)return[args[0]];else if(args[0]instanceof ViewGroup.LayoutParams)return[args[0]];}()))));_this175.gravity=Gravity.NO_GRAVITY;_this175.onScreen=0;if(args[0]instanceof Context&&args[1]instanceof HTMLElement){var c=args[0];var attrs=args[1];var _a16=c.obtainStyledAttributes(attrs);_this175.gravity=Gravity.parseGravity(_a16.getAttrValue('layout_gravity'),Gravity.NO_GRAVITY);_a16.recycle();}else if(typeof args[0]==='number'&&typeof args[1]==='number'&&typeof args[2]=='number'){_this175.gravity=args[2];}else if(typeof args[0]==='number'&&typeof args[1]==='number'){}else if(args[0]instanceof DrawerLayout.LayoutParams){var source=args[0];_this175.gravity=source.gravity;}else if(args[0]instanceof ViewGroup.MarginLayoutParams){}else if(args[0]instanceof ViewGroup.LayoutParams){}return _this175;}_createClass(LayoutParams,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(LayoutParams.prototype.__proto__||Object.getPrototypeOf(LayoutParams.prototype),'createClassAttrBinder',this).call(this).set('layout_gravity',{setter:function setter(param,value,attrBinder){param.gravity=attrBinder.parseGravity(value,param.gravity);},getter:function getter(param){return param.gravity;}});}}]);return LayoutParams;}(ViewGroup.MarginLayoutParams);DrawerLayout.LayoutParams=LayoutParams;})(DrawerLayout=widget.DrawerLayout||(widget.DrawerLayout={}));})(widget=v4.widget||(v4.widget={}));})(v4=support.v4||(support.v4={}));})(support=android.support||(android.support={}));})(android||(android={}));var com;(function(com){var jakewharton;(function(jakewharton){var salvage;(function(salvage){var SparseArray=android.util.SparseArray;var PagerAdapter=android.support.v4.view.PagerAdapter;var RecyclingPagerAdapter=function(_PagerAdapter){_inherits(RecyclingPagerAdapter,_PagerAdapter);function RecyclingPagerAdapter(){_classCallCheck(this,RecyclingPagerAdapter);var _this176=_possibleConstructorReturn(this,(RecyclingPagerAdapter.__proto__||Object.getPrototypeOf(RecyclingPagerAdapter)).call(this));_this176.recycleBin=new RecycleBin();_this176.recycleBin.setViewTypeCount(_this176.getViewTypeCount());return _this176;}_createClass(RecyclingPagerAdapter,[{key:'notifyDataSetChanged',value:function notifyDataSetChanged(){this.recycleBin.scrapActiveViews();_get2(RecyclingPagerAdapter.prototype.__proto__||Object.getPrototypeOf(RecyclingPagerAdapter.prototype),'notifyDataSetChanged',this).call(this);}},{key:'instantiateItem',value:function instantiateItem(container,position){var viewType=this.getItemViewType(position);var view=null;if(viewType!=RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE){view=this.recycleBin.getScrapView(position,viewType);}view=this.getView(position,view,container);container.addView(view);return view;}},{key:'destroyItem',value:function destroyItem(container,position,object){var view=object;container.removeView(view);var viewType=this.getItemViewType(position);if(viewType!=RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE){this.recycleBin.addScrapView(view,position,viewType);}}},{key:'isViewFromObject',value:function isViewFromObject(view,object){return view===object;}},{key:'getViewTypeCount',value:function getViewTypeCount(){return 1;}},{key:'getItemViewType',value:function getItemViewType(position){return 0;}}]);return RecyclingPagerAdapter;}(PagerAdapter);RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE=-1;salvage.RecyclingPagerAdapter=RecyclingPagerAdapter;var RecycleBin=function(){function RecycleBin(){_classCallCheck(this,RecycleBin);this.activeViews=[];this.activeViewTypes=[];this.viewTypeCount=0;}_createClass(RecycleBin,[{key:'setViewTypeCount',value:function setViewTypeCount(viewTypeCount){if(viewTypeCount<1){throw new Error("Can't have a viewTypeCount < 1");}var scrapViews=new Array(viewTypeCount);for(var i=0;i=0;}},{key:'getScrapView',value:function getScrapView(position,viewType){if(this.viewTypeCount==1){return this.retrieveFromScrap(this.currentScrapViews,position);}else if(viewType>=0&&viewType1;var scrapViews=this.currentScrapViews;var count=activeViews.length;for(var i=count-1;i>=0;i--){var victim=activeViews[i];if(victim!=null){var whichScrap=activeViewTypes[i];activeViews[i]=null;activeViewTypes[i]=-1;if(!this.shouldRecycleViewType(whichScrap)){continue;}if(multipleScraps){scrapViews=this.scrapViews[whichScrap];}scrapViews.put(i,victim);}}this.pruneScrapViews();}},{key:'pruneScrapViews',value:function pruneScrapViews(){var maxViews=this.activeViews.length;var viewTypeCount=this.viewTypeCount;var scrapViews=this.scrapViews;for(var i=0;i0){for(var i=0;i=this.mTouchSlop;}if(this.mIsDragging){this.mListener.onDrag(_dx12,_dy8);this.mLastTouchX=_x265;this.mLastTouchY=_y37;if(null!=this.mVelocityTracker){this.mVelocityTracker.addMovement(ev);}}break;}case MotionEvent.ACTION_CANCEL:{if(null!=this.mVelocityTracker){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}case MotionEvent.ACTION_UP:{if(this.mIsDragging){if(null!=this.mVelocityTracker){this.mLastTouchX=this.getActiveX(ev);this.mLastTouchY=this.getActiveY(ev);this.mVelocityTracker.addMovement(ev);this.mVelocityTracker.computeCurrentVelocity(1000);var vX=this.mVelocityTracker.getXVelocity(),vY=this.mVelocityTracker.getYVelocity();if(Math.max(Math.abs(vX),Math.abs(vY))>=this.mMinimumVelocity){this.mListener.onFling(this.mLastTouchX,this.mLastTouchY,-vX,-vY);}}}if(null!=this.mVelocityTracker){this.mVelocityTracker.recycle();this.mVelocityTracker=null;}break;}}return true;}}]);return GestureDetector;}();GestureDetector.LOG_TAG="CupcakeGestureDetector";GestureDetector.INVALID_POINTER_ID=-1;photoview.GestureDetector=GestureDetector;})(photoview=senab.photoview||(senab.photoview={}));})(senab=co.senab||(co.senab={}));})(co=uk.co||(uk.co={}));})(uk||(uk={}));var uk;(function(uk){var co;(function(co){var senab;(function(senab){var photoview;(function(photoview){var IPhotoView;(function(IPhotoView){IPhotoView.DEFAULT_MAX_SCALE=3.0;IPhotoView.DEFAULT_MID_SCALE=1.75;IPhotoView.DEFAULT_MIN_SCALE=1.0;IPhotoView.DEFAULT_ZOOM_DURATION=200;function isImpl(obj){if(!obj)return false;return obj['canZoom']&&obj['getDisplayRect']&&obj['setDisplayMatrix']&&obj['getDisplayMatrix']&&obj['getMinScale']&&obj['getMinimumScale']&&obj['getMidScale']&&obj['getMediumScale']&&obj['getMaxScale']&&obj['getMaximumScale']&&obj['getScale']&&obj['getScaleType']&&obj['setAllowParentInterceptOnEdge']&&obj['setMinScale']&&obj['setMinimumScale']&&obj['setMidScale']&&obj['setMediumScale']&&obj['setMaxScale']&&obj['setMaximumScale']&&obj['setScaleLevels']&&obj['setOnLongClickListener']&&obj['setOnMatrixChangeListener']&&obj['setOnPhotoTapListener']&&obj['getOnPhotoTapListener']&&obj['setOnViewTapListener']&&obj['setRotationTo']&&obj['setRotationBy']&&obj['getOnViewTapListener']&&obj['setScale']&&obj['setScale']&&obj['setScale']&&obj['setScaleType']&&obj['setZoomable']&&obj['setPhotoViewRotation']&&obj['getVisibleRectangleBitmap']&&obj['setZoomTransitionDuration']&&obj['getIPhotoViewImplementation']&&obj['setOnDoubleTapListener']&&obj['setOnScaleChangeListener'];}IPhotoView.isImpl=isImpl;})(IPhotoView=photoview.IPhotoView||(photoview.IPhotoView={}));})(photoview=senab.photoview||(senab.photoview={}));})(senab=co.senab||(co.senab={}));})(co=uk.co||(uk.co={}));})(uk||(uk={}));var uk;(function(uk){var co;(function(co){var senab;(function(senab){var photoview;(function(photoview){var Matrix=android.graphics.Matrix;var ScaleToFit=android.graphics.Matrix.ScaleToFit;var RectF=android.graphics.RectF;var Log=android.util.Log;var AccelerateDecelerateInterpolator=android.view.animation.AccelerateDecelerateInterpolator;var ScaleType=android.widget.ImageView.ScaleType;var OverScroller=android.widget.OverScroller;var WeakReference=java.lang.ref.WeakReference;var MotionEvent=android.view.MotionEvent;var ACTION_CANCEL=MotionEvent.ACTION_CANCEL;var ACTION_DOWN=MotionEvent.ACTION_DOWN;var ACTION_UP=MotionEvent.ACTION_UP;var System=java.lang.System;var GestureDetector=uk.co.senab.photoview.GestureDetector;var IPhotoView=uk.co.senab.photoview.IPhotoView;var PhotoViewAttacher=function(){function PhotoViewAttacher(imageView){var _this177=this;var zoomable=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;_classCallCheck(this,PhotoViewAttacher);this.ZOOM_DURATION=IPhotoView.DEFAULT_ZOOM_DURATION;this.mMinScale=IPhotoView.DEFAULT_MIN_SCALE;this.mMidScale=IPhotoView.DEFAULT_MID_SCALE;this.mMaxScale=IPhotoView.DEFAULT_MAX_SCALE;this.mAllowParentInterceptOnEdge=true;this.mBlockParentIntercept=false;this.mBaseMatrix=new Matrix();this.mDrawMatrix=new Matrix();this.mSuppMatrix=new Matrix();this.mDisplayRect=new RectF();this.mMatrixValues=androidui.util.ArrayCreator.newNumberArray(9);this.mIvTop=0;this.mIvRight=0;this.mIvBottom=0;this.mIvLeft=0;this.mScrollEdge=PhotoViewAttacher.EDGE_BOTH;this.mScaleType=ScaleType.FIT_CENTER;this.mImageView=new WeakReference(imageView);imageView.setOnTouchListener(this);var observer=imageView.getViewTreeObserver();if(null!=observer)observer.addOnGlobalLayoutListener(this);PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);this.mScaleDragDetector=new GestureDetector();this.mScaleDragDetector.setOnGestureListener(this);this.mGestureDetector=new android.view.GestureDetector(function(){var inner_this=_this177;var _Inner=function(_android$view$Gesture){_inherits(_Inner,_android$view$Gesture);function _Inner(){_classCallCheck(this,_Inner);return _possibleConstructorReturn(this,(_Inner.__proto__||Object.getPrototypeOf(_Inner)).apply(this,arguments));}_createClass(_Inner,[{key:'onLongPress',value:function onLongPress(e){if(null!=inner_this.mLongClickListener){inner_this.mLongClickListener.onLongClick(inner_this.getImageView());}}}]);return _Inner;}(android.view.GestureDetector.SimpleOnGestureListener);return new _Inner();}());this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));this.setZoomable(zoomable);}_createClass(PhotoViewAttacher,[{key:'setOnDoubleTapListener',value:function setOnDoubleTapListener(newOnDoubleTapListener){if(newOnDoubleTapListener!=null){this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener);}else{this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));}}},{key:'setOnScaleChangeListener',value:function setOnScaleChangeListener(onScaleChangeListener){this.mScaleChangeListener=onScaleChangeListener;}},{key:'canZoom',value:function canZoom(){return this.mZoomEnabled;}},{key:'cleanup',value:function cleanup(){if(null==this.mImageView){return;}var imageView=this.mImageView.get();if(null!=imageView){var observer=imageView.getViewTreeObserver();if(null!=observer&&observer.isAlive()){observer.removeGlobalOnLayoutListener(this);}imageView.setOnTouchListener(null);this.cancelFling();}if(null!=this.mGestureDetector){this.mGestureDetector.setOnDoubleTapListener(null);}this.mMatrixChangeListener=null;this.mPhotoTapListener=null;this.mViewTapListener=null;this.mImageView=null;}},{key:'getDisplayRect',value:function getDisplayRect(){this.checkMatrixBounds();return this._getDisplayRect(this.getDrawMatrix());}},{key:'setDisplayMatrix',value:function setDisplayMatrix(finalMatrix){if(finalMatrix==null)throw Error('new IllegalArgumentException("Matrix cannot be null")');var imageView=this.getImageView();if(null==imageView)return false;if(null==imageView.getDrawable())return false;this.mSuppMatrix.set(finalMatrix);this.setImageViewMatrix(this.getDrawMatrix());this.checkMatrixBounds();return true;}},{key:'setPhotoViewRotation',value:function setPhotoViewRotation(degrees){this.mSuppMatrix.setRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'setRotationTo',value:function setRotationTo(degrees){this.mSuppMatrix.setRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'setRotationBy',value:function setRotationBy(degrees){this.mSuppMatrix.postRotate(degrees%360);this.checkAndDisplayMatrix();}},{key:'getImageView',value:function getImageView(){var imageView=null;if(null!=this.mImageView){imageView=this.mImageView.get();}if(null==imageView){this.cleanup();if(PhotoViewAttacher.DEBUG)Log.i(PhotoViewAttacher.LOG_TAG,"ImageView no longer exists. You should not use this PhotoViewAttacher any more.");}return imageView;}},{key:'getMinScale',value:function getMinScale(){return this.getMinimumScale();}},{key:'getMinimumScale',value:function getMinimumScale(){return this.mMinScale;}},{key:'getMidScale',value:function getMidScale(){return this.getMediumScale();}},{key:'getMediumScale',value:function getMediumScale(){return this.mMidScale;}},{key:'getMaxScale',value:function getMaxScale(){return this.getMaximumScale();}},{key:'getMaximumScale',value:function getMaximumScale(){return this.mMaxScale;}},{key:'getScale',value:function getScale(){return Math.sqrt(Math.pow(this.getValue(this.mSuppMatrix,Matrix.MSCALE_X),2)+Math.pow(this.getValue(this.mSuppMatrix,Matrix.MSKEW_Y),2));}},{key:'getScaleType',value:function getScaleType(){return this.mScaleType;}},{key:'onDrag',value:function onDrag(dx,dy){if(this.mScaleDragDetector.isScaling()){return;}if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,'onDrag: dx: '+dx.toFixed(2)+'. dy: '+dy.toFixed(2));}var imageView=this.getImageView();this.mSuppMatrix.postTranslate(dx,dy);this.checkAndDisplayMatrix();var parent=imageView.getParent();if(this.mAllowParentInterceptOnEdge&&!this.mScaleDragDetector.isScaling()&&!this.mBlockParentIntercept){if(this.mScrollEdge==PhotoViewAttacher.EDGE_BOTH||this.mScrollEdge==PhotoViewAttacher.EDGE_LEFT&&dx>=1||this.mScrollEdge==PhotoViewAttacher.EDGE_RIGHT&&dx<=-1){if(null!=parent)parent.requestDisallowInterceptTouchEvent(false);}}else{if(null!=parent){parent.requestDisallowInterceptTouchEvent(true);}}}},{key:'onFling',value:function onFling(startX,startY,velocityX,velocityY){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,"onFling. sX: "+startX+" sY: "+startY+" Vx: "+velocityX+" Vy: "+velocityY);}var imageView=this.getImageView();this.mCurrentFlingRunnable=new PhotoViewAttacher.FlingRunnable(this);this.mCurrentFlingRunnable.fling(this.getImageViewWidth(imageView),this.getImageViewHeight(imageView),Math.floor(velocityX),Math.floor(velocityY));imageView.post(this.mCurrentFlingRunnable);}},{key:'onGlobalLayout',value:function onGlobalLayout(){var imageView=this.getImageView();if(null!=imageView){if(this.mZoomEnabled){var top=imageView.getTop();var right=imageView.getRight();var bottom=imageView.getBottom();var left=imageView.getLeft();if(top!=this.mIvTop||bottom!=this.mIvBottom||left!=this.mIvLeft||right!=this.mIvRight){this.updateBaseMatrix(imageView.getDrawable());this.mIvTop=top;this.mIvRight=right;this.mIvBottom=bottom;this.mIvLeft=left;}}else{this.updateBaseMatrix(imageView.getDrawable());}}}},{key:'onScale',value:function onScale(scaleFactor,focusX,focusY){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,'onScale: scale: '+scaleFactor.toFixed(2)+'. fX: '+focusX.toFixed(2)+'. fY: '+focusY.toFixed(2)+'f');}if(this.getScale()=3){this.setScale_4.apply(this,arguments);}else{this.setScale_2.apply(this,arguments);}}},{key:'setScale_2',value:function setScale_2(scale){var animate=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var imageView=this.getImageView();if(null!=imageView){this.setScale(scale,imageView.getRight()/2,imageView.getBottom()/2,animate);}}},{key:'setScale_4',value:function setScale_4(scale,focalX,focalY){var animate=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var imageView=this.getImageView();if(null!=imageView){if(scalethis.mMaxScale){Log.i(PhotoViewAttacher.LOG_TAG,"Scale must be within the range of minScale and maxScale");return;}if(animate){imageView.post(new PhotoViewAttacher.AnimatedZoomRunnable(this,this.getScale(),scale,focalX,focalY));}else{this.mSuppMatrix.setScale(scale,scale,focalX,focalY);this.checkAndDisplayMatrix();}}}},{key:'setScaleType',value:function setScaleType(scaleType){if(PhotoViewAttacher.isSupportedScaleType(scaleType)&&scaleType!=this.mScaleType){this.mScaleType=scaleType;this.update();}}},{key:'setZoomable',value:function setZoomable(zoomable){this.mZoomEnabled=zoomable;this.update();}},{key:'update',value:function update(){var imageView=this.getImageView();if(null!=imageView){if(this.mZoomEnabled){PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);this.updateBaseMatrix(imageView.getDrawable());}else{this.resetMatrix();}}}},{key:'getDisplayMatrix',value:function getDisplayMatrix(){return new Matrix(this.getDrawMatrix());}},{key:'getDrawMatrix',value:function getDrawMatrix(){this.mDrawMatrix.set(this.mBaseMatrix);this.mDrawMatrix.postConcat(this.mSuppMatrix);return this.mDrawMatrix;}},{key:'cancelFling',value:function cancelFling(){if(null!=this.mCurrentFlingRunnable){this.mCurrentFlingRunnable.cancelFling();this.mCurrentFlingRunnable=null;}}},{key:'checkAndDisplayMatrix',value:function checkAndDisplayMatrix(){if(this.checkMatrixBounds()){this.setImageViewMatrix(this.getDrawMatrix());}}},{key:'checkImageViewScaleType',value:function checkImageViewScaleType(){var imageView=this.getImageView();if(null!=imageView&&!IPhotoView.isImpl(imageView)){if(ScaleType.MATRIX!=imageView.getScaleType()){throw Error('new IllegalStateException("The ImageView\'s ScaleType has been changed since attaching a PhotoViewAttacher")');}}}},{key:'checkMatrixBounds',value:function checkMatrixBounds(){var imageView=this.getImageView();if(null==imageView){return false;}var rect=this._getDisplayRect(this.getDrawMatrix());if(null==rect){return false;}var height=rect.height(),width=rect.width();var deltaX=0,deltaY=0;var viewHeight=this.getImageViewHeight(imageView);if(height<=viewHeight){switch(this.mScaleType){case ScaleType.FIT_START:deltaY=-rect.top;break;case ScaleType.FIT_END:deltaY=viewHeight-height-rect.top;break;default:deltaY=(viewHeight-height)/2-rect.top;break;}}else if(rect.top>0){deltaY=-rect.top;}else if(rect.bottom0){this.mScrollEdge=PhotoViewAttacher.EDGE_LEFT;deltaX=-rect.left;}else if(rect.right=midZoom){throw Error('new IllegalArgumentException("MinZoom has to be less than MidZoom")');}else if(midZoom>=maxZoom){throw Error('new IllegalArgumentException("MidZoom has to be less than MaxZoom")');}}},{key:'hasDrawable',value:function hasDrawable(imageView){return null!=imageView&&null!=imageView.getDrawable();}},{key:'isSupportedScaleType',value:function isSupportedScaleType(scaleType){if(null==scaleType){return false;}switch(scaleType){case ScaleType.MATRIX:throw Error('new IllegalArgumentException(ScaleType.MATRIX is not supported in PhotoView)');default:return true;}}},{key:'setImageViewScaleTypeMatrix',value:function setImageViewScaleTypeMatrix(imageView){if(null!=imageView&&!IPhotoView.isImpl(imageView)){if(ScaleType.MATRIX!=imageView.getScaleType()){imageView.setScaleType(ScaleType.MATRIX);}}}}]);return PhotoViewAttacher;}();PhotoViewAttacher.LOG_TAG="PhotoViewAttacher";PhotoViewAttacher.DEBUG=Log.View_DBG;PhotoViewAttacher.sInterpolator=new AccelerateDecelerateInterpolator();PhotoViewAttacher.EDGE_NONE=-1;PhotoViewAttacher.EDGE_LEFT=0;PhotoViewAttacher.EDGE_RIGHT=1;PhotoViewAttacher.EDGE_BOTH=2;photoview.PhotoViewAttacher=PhotoViewAttacher;(function(PhotoViewAttacher){var AnimatedZoomRunnable=function(){function AnimatedZoomRunnable(arg,currentZoom,targetZoom,focalX,focalY){_classCallCheck(this,AnimatedZoomRunnable);this.mFocalX=0;this.mFocalY=0;this.mStartTime=0;this.mZoomStart=0;this.mZoomEnd=0;this._PhotoViewAttacher_this=arg;this.mFocalX=focalX;this.mFocalY=focalY;this.mStartTime=System.currentTimeMillis();this.mZoomStart=currentZoom;this.mZoomEnd=targetZoom;}_createClass(AnimatedZoomRunnable,[{key:'run',value:function run(){var imageView=this._PhotoViewAttacher_this.getImageView();if(imageView==null){return;}var t=this.interpolate();var scale=this.mZoomStart+t*(this.mZoomEnd-this.mZoomStart);var deltaScale=scale/this._PhotoViewAttacher_this.getScale();this._PhotoViewAttacher_this.onScale(deltaScale,this.mFocalX,this.mFocalY);if(t<1){imageView.postOnAnimation(this);}}},{key:'interpolate',value:function interpolate(){var t=1*(System.currentTimeMillis()-this.mStartTime)/this._PhotoViewAttacher_this.ZOOM_DURATION;t=Math.min(1,t);t=PhotoViewAttacher.sInterpolator.getInterpolation(t);return t;}}]);return AnimatedZoomRunnable;}();PhotoViewAttacher.AnimatedZoomRunnable=AnimatedZoomRunnable;var FlingRunnable=function(){function FlingRunnable(arg){_classCallCheck(this,FlingRunnable);this.mCurrentX=0;this.mCurrentY=0;this._PhotoViewAttacher_this=arg;this.mScroller=new OverScroller();}_createClass(FlingRunnable,[{key:'cancelFling',value:function cancelFling(){if(PhotoViewAttacher.DEBUG){Log.d(PhotoViewAttacher.LOG_TAG,"Cancel Fling");}this.mScroller.forceFinished(true);}},{key:'fling',value:function fling(viewWidth,viewHeight,velocityX,velocityY){var rect=this._PhotoViewAttacher_this.getDisplayRect();if(null==rect){return;}var startX=Math.round(-rect.left);var minX=void 0,maxX=void 0,minY=void 0,maxY=void 0;if(viewWidth=this.photoViewAttacher.getMediumScale()&&scale2&&arguments[2]!==undefined?arguments[2]:android.R.attr.actionBarStyle;_classCallCheck(this,ActionBar);var _this180=_possibleConstructorReturn(this,(ActionBar.__proto__||Object.getPrototypeOf(ActionBar)).call(this,context,bindElement,defStyle));context.getLayoutInflater().inflate(android.R.layout.action_bar,_this180);_this180.mCenterLayout=_this180.findViewById('action_bar_center_layout');_this180.mTitleView=_this180.findViewById('action_bar_title');_this180.mSubTitleView=_this180.findViewById('action_bar_sub_title');_this180.mActionLeft=_this180.findViewById('action_bar_left');_this180.mActionRight=_this180.findViewById('action_bar_right');return _this180;}_createClass(ActionBar,[{key:'setCustomView',value:function setCustomView(view,layoutParams){this.mCenterLayout.removeAllViews();this.mCustomView=view;if(layoutParams)this.mCenterLayout.addView(view,layoutParams);else this.mCenterLayout.addView(view);}},{key:'setIcon',value:function setIcon(icon){icon.setBounds(0,0,icon.getIntrinsicWidth(),icon.getIntrinsicHeight());var drawables=this.mTitleView.getCompoundDrawables();this.mTitleView.setCompoundDrawables(icon,drawables[1],drawables[2],drawables[3]);}},{key:'setLogo',value:function setLogo(logo){this.setIcon(logo);}},{key:'setTitle',value:function setTitle(title){this.mTitleView.setText(title);}},{key:'setSubtitle',value:function setSubtitle(subtitle){this.mSubTitleView.setText(subtitle);var empty=subtitle==null||subtitle.length==0;this.mSubTitleView.setVisibility(empty?View.GONE:View.VISIBLE);}},{key:'getCustomView',value:function getCustomView(){return this.mCustomView;}},{key:'getTitle',value:function getTitle(){return this.mTitleView.getText().toString();}},{key:'getSubtitle',value:function getSubtitle(){return this.mSubTitleView.getText().toString();}},{key:'show',value:function show(){this.setVisibility(View.VISIBLE);}},{key:'hide',value:function hide(){this.setVisibility(View.GONE);}},{key:'isShowing',value:function isShowing(){return this.isShown();}},{key:'setActionLeft',value:function setActionLeft(name,icon,listener){this.mActionLeft.setText(name);this.mActionLeft.setVisibility(View.VISIBLE);var drawables=this.mActionLeft.getCompoundDrawables();icon.setBounds(0,0,icon.getIntrinsicWidth(),icon.getIntrinsicHeight());this.mActionLeft.setCompoundDrawables(icon,drawables[1],drawables[2],drawables[3]);this.mActionLeft.setOnClickListener(listener);}},{key:'hideActionLeft',value:function hideActionLeft(){this.mActionLeft.setVisibility(View.GONE);}},{key:'setActionRight',value:function setActionRight(name,icon,listener){this.mActionRight.setText(name);this.mActionRight.setVisibility(View.VISIBLE);var drawables=this.mActionRight.getCompoundDrawables();if(icon)icon.setBounds(0,0,icon.getIntrinsicWidth(),icon.getIntrinsicHeight());this.mActionRight.setCompoundDrawables(drawables[0],drawables[1],icon,drawables[3]);this.mActionRight.setOnClickListener(listener);}},{key:'hideActionRight',value:function hideActionRight(){this.mActionRight.setVisibility(View.GONE);}}]);return ActionBar;}(FrameLayout);app.ActionBar=ActionBar;})(app=android.app||(android.app={}));})(android||(android={}));var android;(function(android){var app;(function(app){var ActionBarActivity=function(_app$Activity){_inherits(ActionBarActivity,_app$Activity);function ActionBarActivity(){_classCallCheck(this,ActionBarActivity);return _possibleConstructorReturn(this,(ActionBarActivity.__proto__||Object.getPrototypeOf(ActionBarActivity)).apply(this,arguments));}_createClass(ActionBarActivity,[{key:'onCreate',value:function onCreate(savedInstanceState){_get2(ActionBarActivity.prototype.__proto__||Object.getPrototypeOf(ActionBarActivity.prototype),'onCreate',this).call(this,savedInstanceState);this.initActionBar();}},{key:'initActionBar',value:function initActionBar(){this.setActionBar(new app.ActionBar(this));this.initDefaultBackFinish();}},{key:'initDefaultBackFinish',value:function initDefaultBackFinish(){if(this.androidUI.mActivityThread.mLaunchedActivities.size===0)return;var activity=this;this.mActionBar.setActionLeft(android.R.string_.back,android.R.image.actionbar_ic_back_white,{onClick:function onClick(view){activity.finish();}});}},{key:'setActionBar',value:function setActionBar(actionBar){var activity=this;var w=this.getWindow();var decorView=w.mDecor;this.mActionBar=actionBar;decorView.addView(actionBar,-1,-2);var onMeasure=decorView.onMeasure;decorView.onMeasure=function(widthMeasureSpec,heightMeasureSpec){onMeasure.call(decorView,widthMeasureSpec,heightMeasureSpec);if(activity.mActionBar===actionBar){var params=w.mContentParent.getLayoutParams();if(params.topMargin!=actionBar.getMeasuredHeight()){params.topMargin=actionBar.getMeasuredHeight();onMeasure.call(decorView,widthMeasureSpec,heightMeasureSpec);}}};}},{key:'invalidateOptionsMenuPopupHelper',value:function invalidateOptionsMenuPopupHelper(menu){var menuPopuoHelper=new android.view.menu.MenuPopupHelper(this,menu,this.getActionBar().mActionRight);if(menu.hasVisibleItems()){this.getActionBar().setActionRight('',android.R.image.ic_menu_moreoverflow_normal_holo_dark,{onClick:function onClick(view){menuPopuoHelper.show();}});}return menuPopuoHelper;}},{key:'getActionBar',value:function getActionBar(){return this.mActionBar;}},{key:'onTitleChanged',value:function onTitleChanged(title,color){_get2(ActionBarActivity.prototype.__proto__||Object.getPrototypeOf(ActionBarActivity.prototype),'onTitleChanged',this).call(this,title,color);this.mActionBar.setTitle(title);}}]);return ActionBarActivity;}(app.Activity);app.ActionBarActivity=ActionBarActivity;})(app=android.app||(android.app={}));})(android||(android={}));var androidui;(function(androidui){var widget;(function(widget){var View=android.view.View;var MeasureSpec=View.MeasureSpec;var HtmlView=function(_widget$HtmlBaseView){_inherits(HtmlView,_widget$HtmlBaseView);function HtmlView(context,bindElement,defStyle){_classCallCheck(this,HtmlView);return _possibleConstructorReturn(this,(HtmlView.__proto__||Object.getPrototypeOf(HtmlView)).call(this,context,bindElement,defStyle));}_createClass(HtmlView,[{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var widthMode=MeasureSpec.getMode(widthMeasureSpec);var heightMode=MeasureSpec.getMode(heightMeasureSpec);var widthSize=MeasureSpec.getSize(widthMeasureSpec);var heightSize=MeasureSpec.getSize(heightMeasureSpec);var width=void 0,height=void 0;var density=this.getResources().getDisplayMetrics().density;if(widthMode==MeasureSpec.EXACTLY){width=widthSize;}else{var sWidth=this.bindElement.style.width,sLeft=this.bindElement.style.left;this.bindElement.style.width='';this.bindElement.style.left='';width=this.bindElement.offsetWidth*density+2;this.bindElement.style.width=sWidth;this.bindElement.style.left=sLeft;width=Math.max(width,this.getSuggestedMinimumWidth());if(widthMode==MeasureSpec.AT_MOST){width=Math.min(widthSize,width);}}if(heightMode==MeasureSpec.EXACTLY){height=heightSize;}else{var _sWidth=this.bindElement.style.width;this.bindElement.style.width=width/density+"px";this.bindElement.style.height='';height=this.bindElement.offsetHeight*density;this.bindElement.style.width=_sWidth;height=Math.max(height,this.getSuggestedMinimumHeight());if(heightMode==MeasureSpec.AT_MOST){height=Math.min(height,heightSize);}}this.setMeasuredDimension(width,height);}},{key:'setHtml',value:function setHtml(html){this.bindElement.innerHTML=html;this.requestLayout();}},{key:'getHtml',value:function getHtml(){return this.bindElement.innerHTML;}}]);return HtmlView;}(widget.HtmlBaseView);widget.HtmlView=HtmlView;})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var androidui;(function(androidui){var widget;(function(widget){var View=android.view.View;var MeasureSpec=View.MeasureSpec;var HtmlImageView=function(_widget$HtmlBaseView2){_inherits(HtmlImageView,_widget$HtmlBaseView2);function HtmlImageView(context,bindElement,defStyle){_classCallCheck(this,HtmlImageView);var _this183=_possibleConstructorReturn(this,(HtmlImageView.__proto__||Object.getPrototypeOf(HtmlImageView)).call(this,context,bindElement,defStyle));_this183.mHaveFrame=false;_this183.mAdjustViewBounds=false;_this183.mMaxWidth=Number.MAX_SAFE_INTEGER;_this183.mMaxHeight=Number.MAX_SAFE_INTEGER;_this183.mAlpha=255;_this183.mDrawableWidth=0;_this183.mDrawableHeight=0;_this183.mAdjustViewBoundsCompat=false;_this183.initImageView();var a=context.obtainStyledAttributes(bindElement,defStyle);var src=a.getString('src');if(src){_this183.setImageURI(src);}_this183.setAdjustViewBounds(a.getBoolean('adjustViewBounds',false));_this183.setMaxWidth(a.getDimensionPixelSize('maxWidth',_this183.mMaxWidth));_this183.setMaxHeight(a.getDimensionPixelSize('maxHeight',_this183.mMaxHeight));_this183.setScaleType(android.widget.ImageView.parseScaleType(a.getAttrValue('scaleType'),_this183.mScaleType));_this183.setImageAlpha(a.getInt('drawableAlpha',_this183.mAlpha));return _this183;}_createClass(HtmlImageView,[{key:'createClassAttrBinder',value:function createClassAttrBinder(){return _get2(HtmlImageView.prototype.__proto__||Object.getPrototypeOf(HtmlImageView.prototype),'createClassAttrBinder',this).call(this).set('src',{setter:function setter(v,value,attrBinder){v.setImageURI(value);},getter:function getter(v){return v.mImgElement.src;}}).set('adjustViewBounds',{setter:function setter(v,value,attrBinder){v.setAdjustViewBounds(attrBinder.parseBoolean(value,false));},getter:function getter(v){return v.getAdjustViewBounds();}}).set('maxWidth',{setter:function setter(v,value,attrBinder){v.setMaxWidth(attrBinder.parseNumberPixelSize(value,v.mMaxWidth));},getter:function getter(v){return v.mMaxWidth;}}).set('maxHeight',{setter:function setter(v,value,attrBinder){v.setMaxHeight(attrBinder.parseNumberPixelSize(value,v.mMaxHeight));},getter:function getter(v){return v.mMaxHeight;}}).set('scaleType',{setter:function setter(v,value,attrBinder){if(typeof value==='number'){v.setScaleType(value);}else{v.setScaleType(android.widget.ImageView.parseScaleType(value,v.mScaleType));}},getter:function getter(v){return v.mScaleType;}}).set('drawableAlpha',{setter:function setter(v,value,attrBinder){v.setImageAlpha(attrBinder.parseInt(value,v.mAlpha));},getter:function getter(v){return v.mAlpha;}});}},{key:'initImageView',value:function initImageView(){var _this184=this;this.mScaleType=android.widget.ImageView.ScaleType.FIT_CENTER;this.mImgElement=document.createElement('img');this.mImgElement.style.position="absolute";this.mImgElement.onload=function(){_this184.mImgElement.style.left=0+'px';_this184.mImgElement.style.top=0+'px';_this184.mImgElement.style.width='';_this184.mImgElement.style.height='';_this184.mDrawableWidth=_this184.mImgElement.width;_this184.mDrawableHeight=_this184.mImgElement.height;_this184.mImgElement.style.display='none';_this184.mImgElement.style.opacity='';_this184.requestLayout();};this.bindElement.appendChild(this.mImgElement);}},{key:'getAdjustViewBounds',value:function getAdjustViewBounds(){return this.mAdjustViewBounds;}},{key:'setAdjustViewBounds',value:function setAdjustViewBounds(adjustViewBounds){this.mAdjustViewBounds=adjustViewBounds;if(adjustViewBounds){this.setScaleType(android.widget.ImageView.ScaleType.FIT_CENTER);}}},{key:'getMaxWidth',value:function getMaxWidth(){return this.mMaxWidth;}},{key:'setMaxWidth',value:function setMaxWidth(maxWidth){this.mMaxWidth=maxWidth;}},{key:'getMaxHeight',value:function getMaxHeight(){return this.mMaxHeight;}},{key:'setMaxHeight',value:function setMaxHeight(maxHeight){this.mMaxHeight=maxHeight;}},{key:'setImageURI',value:function setImageURI(uri){this.mDrawableWidth=-1;this.mDrawableHeight=-1;this.mImgElement.style.opacity='0';this.mImgElement.src=uri;}},{key:'setScaleType',value:function setScaleType(scaleType){if(scaleType==null){throw new Error('NullPointerException');}if(this.mScaleType!=scaleType){this.mScaleType=scaleType;this.setWillNotCacheDrawing(scaleType==android.widget.ImageView.ScaleType.CENTER);this.requestLayout();this.invalidate();}}},{key:'getScaleType',value:function getScaleType(){return this.mScaleType;}},{key:'onMeasure',value:function onMeasure(widthMeasureSpec,heightMeasureSpec){var w=void 0;var h=void 0;var desiredAspect=0.0;var resizeWidth=false;var resizeHeight=false;var widthSpecMode=MeasureSpec.getMode(widthMeasureSpec);var heightSpecMode=MeasureSpec.getMode(heightMeasureSpec);if(!this.mImgElement.src||!this.mImgElement.complete){this.mDrawableWidth=-1;this.mDrawableHeight=-1;w=h=0;}else{w=this.mDrawableWidth;h=this.mDrawableHeight;if(w<=0)w=1;if(h<=0)h=1;if(this.mAdjustViewBounds){resizeWidth=widthSpecMode!=MeasureSpec.EXACTLY;resizeHeight=heightSpecMode!=MeasureSpec.EXACTLY;desiredAspect=w/h;}}var pleft=this.mPaddingLeft;var pright=this.mPaddingRight;var ptop=this.mPaddingTop;var pbottom=this.mPaddingBottom;var widthSize=void 0;var heightSize=void 0;if(resizeWidth||resizeHeight){widthSize=this.resolveAdjustedSize(w+pleft+pright,this.mMaxWidth,widthMeasureSpec);heightSize=this.resolveAdjustedSize(h+ptop+pbottom,this.mMaxHeight,heightMeasureSpec);if(desiredAspect!=0){var actualAspect=(widthSize-pleft-pright)/(heightSize-ptop-pbottom);if(Math.abs(actualAspect-desiredAspect)>0.0000001){var done=false;if(resizeWidth){var newWidth=Math.floor(desiredAspect*(heightSize-ptop-pbottom))+pleft+pright;if(!resizeHeight&&!this.mAdjustViewBoundsCompat){widthSize=this.resolveAdjustedSize(newWidth,this.mMaxWidth,widthMeasureSpec);}if(newWidth<=widthSize){widthSize=newWidth;done=true;}}if(!done&&resizeHeight){var newHeight=Math.floor((widthSize-pleft-pright)/desiredAspect)+ptop+pbottom;if(!resizeWidth&&!this.mAdjustViewBoundsCompat){heightSize=this.resolveAdjustedSize(newHeight,this.mMaxHeight,heightMeasureSpec);}if(newHeight<=heightSize){heightSize=newHeight;}}}}}else{w+=pleft+pright;h+=ptop+pbottom;w=Math.max(w,this.getSuggestedMinimumWidth());h=Math.max(h,this.getSuggestedMinimumHeight());widthSize=HtmlImageView.resolveSizeAndState(w,widthMeasureSpec,0);heightSize=HtmlImageView.resolveSizeAndState(h,heightMeasureSpec,0);}this.setMeasuredDimension(widthSize,heightSize);}},{key:'resolveAdjustedSize',value:function resolveAdjustedSize(desiredSize,maxSize,measureSpec){var result=desiredSize;var specMode=MeasureSpec.getMode(measureSpec);var specSize=MeasureSpec.getSize(measureSpec);switch(specMode){case MeasureSpec.UNSPECIFIED:result=Math.min(desiredSize,maxSize);break;case MeasureSpec.AT_MOST:result=Math.min(Math.min(desiredSize,specSize),maxSize);break;case MeasureSpec.EXACTLY:result=specSize;break;}return result;}},{key:'setFrame',value:function setFrame(left,top,right,bottom){var changed=_get2(HtmlImageView.prototype.__proto__||Object.getPrototypeOf(HtmlImageView.prototype),'setFrame',this).call(this,left,top,right,bottom);this.mHaveFrame=true;this.configureBounds();this.mImgElement.style.display='';return changed;}},{key:'configureBounds',value:function configureBounds(){var dwidth=this.mDrawableWidth;var dheight=this.mDrawableHeight;var vwidth=this.getWidth()-this.mPaddingLeft-this.mPaddingRight;var vheight=this.getHeight()-this.mPaddingTop-this.mPaddingBottom;var fits=(dwidth<0||vwidth==dwidth)&&(dheight<0||vheight==dheight);this.mImgElement.style.left=0+'px';this.mImgElement.style.top=0+'px';this.mImgElement.style.width='';this.mImgElement.style.height='';if(dwidth<=0||dheight<=0){return;}if(this.mScaleType===android.widget.ImageView.ScaleType.FIT_XY){this.mImgElement.style.width=vwidth+'px';this.mImgElement.style.height=vheight+'px';return;}this.mImgElement.style.width=dwidth+'px';this.mImgElement.style.height=dheight+'px';if(android.widget.ImageView.ScaleType.MATRIX===this.mScaleType){}else if(fits){}else if(android.widget.ImageView.ScaleType.CENTER===this.mScaleType){var left=Math.round((vwidth-dwidth)*0.5);var top=Math.round((vheight-dheight)*0.5);this.mImgElement.style.left=left+'px';this.mImgElement.style.top=top+'px';}else if(android.widget.ImageView.ScaleType.CENTER_CROP===this.mScaleType){var scale=void 0;var _dx13=0,_dy9=0;if(dwidth*vheight>vwidth*dheight){scale=vheight/dheight;_dx13=(vwidth-dwidth*scale)*0.5;this.mImgElement.style.width='auto';this.mImgElement.style.height=vheight+'px';this.mImgElement.style.left=Math.round(_dx13)+'px';this.mImgElement.style.top='0px';}else{scale=vwidth/dwidth;_dy9=(vheight-dheight*scale)*0.5;this.mImgElement.style.width=vwidth+'px';this.mImgElement.style.height='auto';this.mImgElement.style.left='0px';this.mImgElement.style.top=Math.round(_dy9)+'px';}}else if(android.widget.ImageView.ScaleType.CENTER_INSIDE===this.mScaleType){var _scale4=1;if(dwidth<=vwidth&&dheight<=vheight){}else{var wScale=vwidth/dwidth;var hScale=vheight/dheight;if(wScalelockBottom){this.springBackToLockBottom();}}}]);return BaseOverScrollLocker;}();var ListViewOverScrollLocker=function(_BaseOverScrollLocker){_inherits(ListViewOverScrollLocker,_BaseOverScrollLocker);function ListViewOverScrollLocker(listView){_classCallCheck(this,ListViewOverScrollLocker);var _this189=_possibleConstructorReturn(this,(ListViewOverScrollLocker.__proto__||Object.getPrototypeOf(ListViewOverScrollLocker)).call(this,listView));_this189.listView=listView;_this189.configListView();return _this189;}_createClass(ListViewOverScrollLocker,[{key:'configListView',value:function configListView(){var _this190=this;var listView=this.listView;if(!listView.mFlingRunnable)listView.mFlingRunnable=new AbsListView.FlingRunnable(listView);var scroller=listView.mFlingRunnable.mScroller;listView.mFlingRunnable.startOverfling=function(initialVelocity){scroller.setInterpolator(null);var minY=Integer.MIN_VALUE,maxY=Integer.MAX_VALUE;if(listView.mScrollY<0)minY=-_this190.lockTop;else if(listView.mScrollY>0)maxY=_this190.lockBottom;scroller.fling(0,listView.mScrollY,0,initialVelocity,0,0,minY,maxY,0,listView._mOverflingDistance);listView.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;listView.invalidate();listView.postOnAnimation(listView.mFlingRunnable);};var layoutChildrenFunc=listView.layoutChildren;listView.layoutChildren=function(){var overScrollY=_this190.getOverScrollY();layoutChildrenFunc.call(listView);if(overScrollY!==0){listView.overScrollBy(0,-overScrollY,0,listView.mScrollY,0,0,0,listView.mOverscrollDistance,false);var atEdge=listView.trackMotionScroll(-overScrollY,-overScrollY);if(atEdge){listView.overScrollBy(0,overScrollY,0,listView.mScrollY,0,0,0,listView.mOverscrollDistance,false);}else{listView.mFlingRunnable.mScroller.abortAnimation();}}};listView.checkOverScrollStartScrollIfNeeded=function(){return listView.mScrollY>_this190.lockBottom||listView.mScrollY<_this190.lockTop;};listView.mFlingRunnable.edgeReached=function(delta){var initialVelocity=listView.mFlingRunnable.mScroller.getCurrVelocity();if(delta>0)initialVelocity=-initialVelocity;listView.mFlingRunnable.startOverfling(initialVelocity);};var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this190.lockTop;maxY=_this190.lockBottom;return oldSpringBack.call(scroller,startX,startY,minX,maxX,minY,maxY);};var oldFling=scroller.fling;scroller.fling=function(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY){var overX=arguments.length>8&&arguments[8]!==undefined?arguments[8]:0;var overY=arguments.length>9&&arguments[9]!==undefined?arguments[9]:0;if(velocityY>0)overY+=_this190.lockBottom;else overY+=_this190.lockTop;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};}},{key:'getScrollContentBottom',value:function getScrollContentBottom(){var childCount=this.listView.getChildCount();var maxBottom=0;var minTop=0;for(var i=0;imaxBottom){maxBottom=childBottom;}if(childTop0)minTop=0;if(this.listView.getAdapter()&&childCount>0){return(maxBottom-minTop)*this.listView.getAdapter().getCount()/childCount;}return 0;}},{key:'getOverScrollY',value:function getOverScrollY(){return this.listView.mScrollY;}},{key:'startSpringBack',value:function startSpringBack(){this.listView.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);this.listView.mFlingRunnable.mScroller.springBack(0,this.listView.mScrollY,0,0,0,0);this.listView.mTouchMode=AbsListView.TOUCH_MODE_OVERFLING;this.listView.postOnAnimation(this.listView.mFlingRunnable);}},{key:'springBackToLockTop',value:function springBackToLockTop(){this.startSpringBack();}},{key:'springBackToLockBottom',value:function springBackToLockBottom(){this.startSpringBack();}}]);return ListViewOverScrollLocker;}(BaseOverScrollLocker);var ScrollViewScrollLocker=function(_BaseOverScrollLocker2){_inherits(ScrollViewScrollLocker,_BaseOverScrollLocker2);function ScrollViewScrollLocker(scrollView){_classCallCheck(this,ScrollViewScrollLocker);var _this191=_possibleConstructorReturn(this,(ScrollViewScrollLocker.__proto__||Object.getPrototypeOf(ScrollViewScrollLocker)).call(this,scrollView));_this191.scrollView=scrollView;var scroller=scrollView.mScroller;var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this191.lockTop;maxY=_this191.scrollView.getScrollRange()+_this191.lockBottom;return oldSpringBack.call(scroller,startX,startY,minX,maxX,minY,maxY);};var oldFling=scroller.fling;scroller.fling=function(startX,startY,velocityX,velocityY,minX,maxX,minY,maxY){var overX=arguments.length>8&&arguments[8]!==undefined?arguments[8]:0;var overY=arguments.length>9&&arguments[9]!==undefined?arguments[9]:0;if(velocityY>0)overY+=_this191.lockBottom;else overY+=_this191.lockTop;minY-=_this191.lockTop;maxY+=_this191.lockBottom;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};_this191.listenScrollContentHeightChange();return _this191;}_createClass(ScrollViewScrollLocker,[{key:'listenScrollContentHeightChange',value:function listenScrollContentHeightChange(){var _this192=this;var listenHeightChange=function listenHeightChange(v){var onSizeChangedFunc=v.onSizeChanged;v.onSizeChanged=function(w,h,oldw,oldh){onSizeChangedFunc.call(v,w,h,oldw,oldh);_this192.scrollView.overScrollBy(0,0,0,_this192.scrollView.mScrollY,0,_this192.scrollView.getScrollRange(),0,_this192.scrollView.mOverscrollDistance,false);};};if(this.scrollView.getChildCount()>0){listenHeightChange(this.scrollView.getChildAt(0));}else{(function(){var onViewAddedFunc=_this192.scrollView.onViewAdded;_this192.scrollView.onViewAdded=function(v){onViewAddedFunc.call(_this192.scrollView,v);listenHeightChange(v);};})();}}},{key:'getScrollContentBottom',value:function getScrollContentBottom(){if(this.scrollView.getChildCount()>0){return this.scrollView.getChildAt(0).getBottom();}return this.scrollView.getPaddingTop();}},{key:'getOverScrollY',value:function getOverScrollY(){var scrollY=this.scrollView.getScrollY();if(scrollY<0)return scrollY;var scrollRange=this.scrollView.getScrollRange();if(scrollY>scrollRange){return scrollY-scrollRange;}return 0;}},{key:'startSpringBack',value:function startSpringBack(){if(this.scrollView.mScroller.springBack(this.scrollView.mScrollX,this.scrollView.mScrollY,0,0,0,this.scrollView.getScrollRange())){this.scrollView.postInvalidateOnAnimation();}}},{key:'springBackToLockTop',value:function springBackToLockTop(){this.startSpringBack();}},{key:'springBackToLockBottom',value:function springBackToLockBottom(){this.startSpringBack();}}]);return ScrollViewScrollLocker;}(BaseOverScrollLocker);})(OverScrollLocker=widget.OverScrollLocker||(widget.OverScrollLocker={}));})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var androidui;(function(androidui){var widget;(function(widget){var _PullRefreshLoadLayou;var View=android.view.View;var Gravity=android.view.Gravity;var ViewGroup=android.view.ViewGroup;var FrameLayout=android.widget.FrameLayout;var TextView=android.widget.TextView;var LinearLayout=android.widget.LinearLayout;var ProgressBar=android.widget.ProgressBar;var R=android.R;var PullRefreshLoadLayout=function(_FrameLayout5){_inherits(PullRefreshLoadLayout,_FrameLayout5);function PullRefreshLoadLayout(context,bindElement,defStyle){_classCallCheck(this,PullRefreshLoadLayout);var _this193=_possibleConstructorReturn(this,(PullRefreshLoadLayout.__proto__||Object.getPrototypeOf(PullRefreshLoadLayout)).call(this,context,bindElement,defStyle));_this193.autoLoadScrollAtBottom=true;_this193.footerViewReadyDistance=36*android.content.res.Resources.getDisplayMetrics().density;_this193.contentOverY=0;var a=context.obtainStyledAttributes(bindElement,defStyle);if(a.getBoolean('refreshEnable',true)){_this193.setRefreshEnable(true);}if(a.getBoolean('loadEnable',true)){_this193.setLoadEnable(true);}a.recycle();return _this193;}_createClass(PullRefreshLoadLayout,[{key:'onViewAdded',value:function onViewAdded(child){_get2(PullRefreshLoadLayout.prototype.__proto__||Object.getPrototypeOf(PullRefreshLoadLayout.prototype),'onViewAdded',this).call(this,child);if(child instanceof PullRefreshLoadLayout.HeaderView){if(child!=this.headerView)this.setHeaderView(child);}else if(child instanceof PullRefreshLoadLayout.FooterView){if(child!=this.footerView)this.setFooterView(child);}else{if(child!=this.contentView)this.setContentView(child);}if(this.footerView!=null){this.bringChildToFront(this.footerView);}}},{key:'configHeaderView',value:function configHeaderView(){var headerView=this.headerView;var params=headerView.getLayoutParams();params.gravity=Gravity.TOP|Gravity.CENTER_HORIZONTAL;params.height=ViewGroup.LayoutParams.WRAP_CONTENT;params.width=ViewGroup.LayoutParams.MATCH_PARENT;headerView.setLayoutParams(params);}},{key:'configFooterView',value:function configFooterView(){var footerView=this.footerView;var params=footerView.getLayoutParams();params.gravity=Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL;params.height=ViewGroup.LayoutParams.WRAP_CONTENT;params.width=ViewGroup.LayoutParams.WRAP_CONTENT;footerView.setLayoutParams(params);}},{key:'configContentView',value:function configContentView(){var _this194=this;var contentView=this.contentView;var params=contentView.getLayoutParams();params.height=ViewGroup.LayoutParams.MATCH_PARENT;params.width=ViewGroup.LayoutParams.MATCH_PARENT;contentView.setLayoutParams(params);this.overScrollLocker=widget.OverScrollLocker.getFrom(contentView);var overScrollByFunc=contentView.overScrollBy;contentView.overScrollBy=function(deltaX,deltaY,scrollX,scrollY,scrollRangeX,scrollRangeY,maxOverScrollX,maxOverScrollY,isTouchEvent){var result=overScrollByFunc.call(contentView,deltaX,deltaY,scrollX,scrollY,scrollRangeX,scrollRangeY,maxOverScrollX,maxOverScrollY,isTouchEvent);if(contentView===_this194.contentView){_this194.onContentOverScroll(scrollRangeY,maxOverScrollY,isTouchEvent);}return result;};}},{key:'onContentOverScroll',value:function onContentOverScroll(scrollRangeY,maxOverScrollY,isTouchEvent){var newScrollY=this.contentView.mScrollY;var top=0;var bottom=scrollRangeY;if(newScrollY>bottom){this.contentOverY=newScrollY-bottom;}else if(newScrollYthis.footerView.getHeight()+this.footerViewReadyDistance){if(isTouchEvent){this.setFooterState(PullRefreshLoadLayout.State_Footer_ReadyToLoad);}else if(footerState===PullRefreshLoadLayout.State_Footer_ReadyToLoad){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}else if(footerState===PullRefreshLoadLayout.State_Footer_ReadyToLoad){this.setFooterState(this.footerView.stateBeforeReady);}if(this.contentOverY>0&&this.autoLoadScrollAtBottom&&footerState===PullRefreshLoadLayout.State_Footer_Normal){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}}},{key:'setHeaderView',value:function setHeaderView(headerView){if(this.headerView){this.removeView(this.headerView);}this.headerView=headerView;if(headerView.getParent()==null)this.addView(headerView);this.configHeaderView();}},{key:'setFooterView',value:function setFooterView(footerView){if(this.footerView){this.removeView(this.footerView);}this.footerView=footerView;if(footerView.getParent()==null)this.addView(footerView);this.configFooterView();}},{key:'setContentView',value:function setContentView(contentView){if(this.contentView){this.removeView(this.contentView);}this.contentView=contentView;if(contentView.getParent()==null)this.addView(contentView);this.configContentView();}},{key:'setHeaderState',value:function setHeaderState(newState){if(!this.headerView)return;if(this.headerView.state===newState)return;var changeLimit=PullRefreshLoadLayout.StateChangeLimit[this.headerView.state];if(changeLimit&&changeLimit.indexOf(newState)!==-1)return;this.headerView.setStateInner(this,newState);this.checkLockOverScroll();if(newState===PullRefreshLoadLayout.State_Header_Refreshing&&this.refreshLoadListener){this.refreshLoadListener.onRefresh(this);}}},{key:'getHeaderState',value:function getHeaderState(){if(!this.headerView)return PullRefreshLoadLayout.State_Disable;return this.headerView.state;}},{key:'setFooterState',value:function setFooterState(newState){if(!this.footerView)return;if(this.footerView.state===newState)return;var changeLimit=PullRefreshLoadLayout.StateChangeLimit[this.footerView.state];if(changeLimit&&changeLimit.indexOf(newState)!==-1)return;this.footerView.setStateInner(this,newState);this.checkLockOverScroll();if(newState===PullRefreshLoadLayout.State_Footer_Loading&&this.refreshLoadListener){this.refreshLoadListener.onLoadMore(this);}}},{key:'getFooterState',value:function getFooterState(){if(!this.footerView)return PullRefreshLoadLayout.State_Disable;return this.footerView.state;}},{key:'checkLockOverScroll',value:function checkLockOverScroll(){if(!this.overScrollLocker)return;if(this.headerView){switch(this.headerView.state){case PullRefreshLoadLayout.State_Header_Normal:this.overScrollLocker.lockOverScrollTop(0);break;case PullRefreshLoadLayout.State_Header_Refreshing:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;case PullRefreshLoadLayout.State_Header_RefreshFail:this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());break;}}else{this.overScrollLocker.lockOverScrollTop(0);}this.overScrollLocker.lockOverScrollBottom(this.footerView?this.footerView.getHeight():0);}},{key:'checkHeaderFooterPosition',value:function checkHeaderFooterPosition(){if(this.contentOverY>0){this.setHeaderViewAppearDistance(0);this.setFooterViewAppearDistance(this.contentOverY);}else if(this.contentOverY<0){this.setHeaderViewAppearDistance(-this.contentOverY);this.setFooterViewAppearDistance(0);}else{this.setHeaderViewAppearDistance(0);this.setFooterViewAppearDistance(0);}}},{key:'setHeaderViewAppearDistance',value:function setHeaderViewAppearDistance(distance){if(!this.headerView)return;var offset=-this.headerView.getHeight()-this.headerView.getTop()+distance;this.headerView.offsetTopAndBottom(offset);}},{key:'setFooterViewAppearDistance',value:function setFooterViewAppearDistance(distance){if(!this.contentView||!this.footerView)return;var bottomToParentBottom=Math.min(this.overScrollLocker.getScrollContentBottom(),this.contentView.getHeight())-this.footerView.getBottom();if(this.contentOverY<0)bottomToParentBottom-=this.contentOverY;var offset=this.footerView.getHeight()+bottomToParentBottom-distance;this.footerView.offsetTopAndBottom(offset);}},{key:'onLayout',value:function onLayout(changed,left,top,right,bottom){_get2(PullRefreshLoadLayout.prototype.__proto__||Object.getPrototypeOf(PullRefreshLoadLayout.prototype),'onLayout',this).call(this,changed,left,top,right,bottom);this.checkHeaderFooterPosition();this.checkLockOverScroll();if(!this.isLaidOut()){if(this.autoLoadScrollAtBottom&&this.footerView!=null&&this.footerView.getGlobalVisibleRect(new android.graphics.Rect())){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}}},{key:'setAutoLoadMoreWhenScrollBottom',value:function setAutoLoadMoreWhenScrollBottom(autoLoad){this.autoLoadScrollAtBottom=autoLoad;}},{key:'setRefreshEnable',value:function setRefreshEnable(enable){var oldEnable=this.headerView!=null;if(enable===oldEnable)return;if(!enable){this.removeView(this.headerView);this.headerView=null;if(this.overScrollLocker)this.overScrollLocker.lockOverScrollTop(0);}else{this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(this.getContext()));}}},{key:'setLoadEnable',value:function setLoadEnable(enable){var oldEnable=this.footerView!=null;if(enable===oldEnable)return;if(!enable){this.removeView(this.footerView);this.footerView=null;if(this.overScrollLocker)this.overScrollLocker.lockOverScrollBottom(0);}else{this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(this.getContext()));}}},{key:'setRefreshLoadListener',value:function setRefreshLoadListener(refreshLoadListener){this.refreshLoadListener=refreshLoadListener;}},{key:'startRefresh',value:function startRefresh(){this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);}},{key:'startLoadMore',value:function startLoadMore(){this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}]);return PullRefreshLoadLayout;}(FrameLayout);PullRefreshLoadLayout.State_Disable=-1;PullRefreshLoadLayout.State_Header_Normal=0;PullRefreshLoadLayout.State_Header_Refreshing=1;PullRefreshLoadLayout.State_Header_ReadyToRefresh=2;PullRefreshLoadLayout.State_Header_RefreshFail=3;PullRefreshLoadLayout.State_Footer_Normal=4;PullRefreshLoadLayout.State_Footer_Loading=5;PullRefreshLoadLayout.State_Footer_ReadyToLoad=6;PullRefreshLoadLayout.State_Footer_LoadFail=7;PullRefreshLoadLayout.State_Footer_NoMoreToLoad=8;PullRefreshLoadLayout.StateChangeLimit=(_PullRefreshLoadLayou={},_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Header_Refreshing,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Footer_Loading,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Footer_LoadFail,PullRefreshLoadLayout.State_Footer_NoMoreToLoad]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Header_RefreshFail,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Footer_Loading,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Footer_LoadFail,PullRefreshLoadLayout.State_Footer_NoMoreToLoad]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Footer_Loading,[PullRefreshLoadLayout.State_Header_ReadyToRefresh,PullRefreshLoadLayout.State_Header_Refreshing,PullRefreshLoadLayout.State_Footer_ReadyToLoad,PullRefreshLoadLayout.State_Header_RefreshFail]),_defineProperty(_PullRefreshLoadLayou,PullRefreshLoadLayout.State_Footer_NoMoreToLoad,[PullRefreshLoadLayout.State_Footer_ReadyToLoad]),_PullRefreshLoadLayou);widget.PullRefreshLoadLayout=PullRefreshLoadLayout;(function(PullRefreshLoadLayout){var HeaderView=function(_FrameLayout6){_inherits(HeaderView,_FrameLayout6);function HeaderView(){_classCallCheck(this,HeaderView);var _this195=_possibleConstructorReturn(this,(HeaderView.__proto__||Object.getPrototypeOf(HeaderView)).apply(this,arguments));_this195.state=PullRefreshLoadLayout.State_Header_Normal;_this195.stateBeforeReady=PullRefreshLoadLayout.State_Header_Normal;return _this195;}_createClass(HeaderView,[{key:'setStateInner',value:function setStateInner(prll,state){var oldState=this.state;this.state=state;this.onStateChange(state,oldState);var inner_this=this;switch(state){case PullRefreshLoadLayout.State_Header_RefreshFail:this.postDelayed({run:function run(){if(state===inner_this.state){prll.setHeaderState(PullRefreshLoadLayout.State_Header_Normal);}}},1000);break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.stateBeforeReady=oldState;break;}}}]);return HeaderView;}(FrameLayout);PullRefreshLoadLayout.HeaderView=HeaderView;var FooterView=function(_FrameLayout7){_inherits(FooterView,_FrameLayout7);function FooterView(){_classCallCheck(this,FooterView);var _this196=_possibleConstructorReturn(this,(FooterView.__proto__||Object.getPrototypeOf(FooterView)).apply(this,arguments));_this196.state=PullRefreshLoadLayout.State_Footer_Normal;_this196.stateBeforeReady=PullRefreshLoadLayout.State_Footer_Normal;return _this196;}_createClass(FooterView,[{key:'setStateInner',value:function setStateInner(prll,state){var oldState=this.state;this.state=state;this.onStateChange(state,oldState);switch(state){case PullRefreshLoadLayout.State_Footer_ReadyToLoad:this.stateBeforeReady=oldState;break;}}}]);return FooterView;}(FrameLayout);PullRefreshLoadLayout.FooterView=FooterView;var DefaultHeaderView=function(_HeaderView){_inherits(DefaultHeaderView,_HeaderView);function DefaultHeaderView(context,bindElement,defStyle){_classCallCheck(this,DefaultHeaderView);var _this197=_possibleConstructorReturn(this,(DefaultHeaderView.__proto__||Object.getPrototypeOf(DefaultHeaderView)).call(this,context,bindElement,defStyle));_this197.progressBar=new ProgressBar(context);_this197.progressBar.setVisibility(View.GONE);_this197.textView=new TextView(context);var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this197.textView.setPadding(pad/2,pad,pad/2,pad);_this197.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout(context);linear.addView(_this197.progressBar,32*density,32*density);linear.addView(_this197.textView);linear.setGravity(Gravity.CENTER);_this197.addView(linear,-1,-2);_this197.onStateChange(PullRefreshLoadLayout.State_Header_Normal,PullRefreshLoadLayout.State_Disable);return _this197;}_createClass(DefaultHeaderView,[{key:'onStateChange',value:function onStateChange(newState,oldState){switch(newState){case PullRefreshLoadLayout.State_Header_Refreshing:this.textView.setText(R.string_.prll_header_state_loading);this.progressBar.setVisibility(View.VISIBLE);break;case PullRefreshLoadLayout.State_Header_ReadyToRefresh:this.textView.setText(R.string_.prll_header_state_ready);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Header_RefreshFail:this.textView.setText(R.string_.prll_header_state_fail);this.progressBar.setVisibility(View.GONE);break;default:this.textView.setText(R.string_.prll_header_state_normal);this.progressBar.setVisibility(View.GONE);}}}]);return DefaultHeaderView;}(HeaderView);PullRefreshLoadLayout.DefaultHeaderView=DefaultHeaderView;var DefaultFooterView=function(_FooterView){_inherits(DefaultFooterView,_FooterView);function DefaultFooterView(context,bindElement,defStyle){_classCallCheck(this,DefaultFooterView);var _this198=_possibleConstructorReturn(this,(DefaultFooterView.__proto__||Object.getPrototypeOf(DefaultFooterView)).call(this,context,bindElement,defStyle));_this198.progressBar=new ProgressBar(context);_this198.progressBar.setVisibility(View.GONE);_this198.textView=new TextView(context);var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this198.textView.setPadding(pad/2,pad,pad/2,pad);_this198.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout(context);linear.addView(_this198.progressBar);linear.addView(_this198.textView);linear.setGravity(Gravity.CENTER);_this198.addView(linear,-1,-2);_this198.onStateChange(PullRefreshLoadLayout.State_Footer_Normal,PullRefreshLoadLayout.State_Disable);_this198.setOnClickListener({onClick:function onClick(v){var parent=v.getParent();if(parent instanceof PullRefreshLoadLayout){parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}});return _this198;}_createClass(DefaultFooterView,[{key:'onStateChange',value:function onStateChange(newState,oldState){switch(newState){case PullRefreshLoadLayout.State_Footer_Loading:this.textView.setText(R.string_.prll_footer_state_loading);this.progressBar.setVisibility(View.VISIBLE);break;case PullRefreshLoadLayout.State_Footer_ReadyToLoad:this.textView.setText(R.string_.prll_footer_state_ready);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Footer_LoadFail:this.textView.setText(R.string_.prll_footer_state_fail);this.progressBar.setVisibility(View.GONE);break;case PullRefreshLoadLayout.State_Footer_NoMoreToLoad:this.textView.setText(R.string_.prll_footer_state_no_more);this.progressBar.setVisibility(View.GONE);break;default:this.textView.setText(R.string_.prll_footer_state_normal);this.progressBar.setVisibility(View.GONE);}}}]);return DefaultFooterView;}(FooterView);PullRefreshLoadLayout.DefaultFooterView=DefaultFooterView;})(PullRefreshLoadLayout=widget.PullRefreshLoadLayout||(widget.PullRefreshLoadLayout={}));})(widget=androidui.widget||(androidui.widget={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var Canvas=android.graphics.Canvas;var sNextID=0;var NativeCanvas=function(_Canvas2){_inherits(NativeCanvas,_Canvas2);function NativeCanvas(){_classCallCheck(this,NativeCanvas);return _possibleConstructorReturn(this,(NativeCanvas.__proto__||Object.getPrototypeOf(NativeCanvas)).apply(this,arguments));}_createClass(NativeCanvas,[{key:'initCanvasImpl',value:function initCanvasImpl(){this.canvasId=++sNextID;this.createCanvasImpl();}},{key:'createCanvasImpl',value:function createCanvasImpl(){native.NativeApi.canvas.createCanvas(this.canvasId,this.mWidth,this.mHeight);this.save();}},{key:'recycleImpl',value:function recycleImpl(){native.NativeApi.canvas.recycleCanvas(this.canvasId);}},{key:'isNativeAccelerated',value:function isNativeAccelerated(){return true;}},{key:'translateImpl',value:function translateImpl(dx,dy){native.NativeApi.canvas.translate(this.canvasId,dx,dy);}},{key:'scaleImpl',value:function scaleImpl(sx,sy){native.NativeApi.canvas.scale(this.canvasId,sx,sy);}},{key:'rotateImpl',value:function rotateImpl(degrees){native.NativeApi.canvas.rotate(this.canvasId,degrees);}},{key:'concatImpl',value:function concatImpl(MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y,MPERSP_0,MPERSP_1,MPERSP_2){native.NativeApi.canvas.concat(this.canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y);}},{key:'drawARGBImpl',value:function drawARGBImpl(a,r,g,b){native.NativeApi.canvas.drawColor(this.canvasId,android.graphics.Color.argb(a,r,g,b));}},{key:'clearColorImpl',value:function clearColorImpl(){native.NativeApi.canvas.clearColor(this.canvasId);}},{key:'saveImpl',value:function saveImpl(){native.NativeApi.canvas.save(this.canvasId);}},{key:'restoreImpl',value:function restoreImpl(){native.NativeApi.canvas.restore(this.canvasId);}},{key:'clipRectImpl',value:function clipRectImpl(left,top,width,height){native.NativeApi.canvas.clipRect(this.canvasId,left,top,width,height);}},{key:'clipRoundRectImpl',value:function clipRoundRectImpl(left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft){native.NativeApi.canvas.clipRoundRectImpl(this.canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft);}},{key:'drawCanvasImpl',value:function drawCanvasImpl(canvas,offsetX,offsetY){if(canvas instanceof NativeCanvas){native.NativeApi.canvas.drawCanvas(this.canvasId,canvas.canvasId,offsetX,offsetY);}else{throw Error('canvas should be NativeCanvas');}}},{key:'drawImageImpl',value:function drawImageImpl(image,srcRect,dstRect){if(image instanceof native.NativeImage){if(srcRect&&dstRect){native.NativeApi.canvas.drawImage8args(this.canvasId,image.imageId,srcRect.left,srcRect.top,srcRect.right,srcRect.bottom,dstRect.left,dstRect.top,dstRect.right,dstRect.bottom);}else if(dstRect){native.NativeApi.canvas.drawImage4args(this.canvasId,image.imageId,dstRect.left,dstRect.top,dstRect.right,dstRect.bottom);}else{native.NativeApi.canvas.drawImage2args(this.canvasId,image.imageId,0,0);}}else{throw Error('image should be NativeImage');}}},{key:'drawRectImpl',value:function drawRectImpl(left,top,width,height,style){native.NativeApi.canvas.drawRect(this.canvasId,left,top,width,height,style);}},{key:'drawOvalImpl',value:function drawOvalImpl(oval,style){native.NativeApi.canvas.drawOval(this.canvasId,oval.left,oval.top,oval.right,oval.bottom,style);}},{key:'drawCircleImpl',value:function drawCircleImpl(cx,cy,radius,style){native.NativeApi.canvas.drawCircle(this.canvasId,cx,cy,radius,style);}},{key:'drawArcImpl',value:function drawArcImpl(oval,startAngle,sweepAngle,useCenter,style){native.NativeApi.canvas.drawArc(this.canvasId,oval.left,oval.top,oval.right,oval.bottom,startAngle,sweepAngle,useCenter,style);}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(rect,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style){native.NativeApi.canvas.drawRoundRectImpl(this.canvasId,rect.left,rect.top,rect.width(),rect.height(),radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style);}},{key:'drawTextImpl',value:function drawTextImpl(text,x,y,style){native.NativeApi.canvas.drawText(this.canvasId,text,x,y,style);}},{key:'setColorImpl',value:function setColorImpl(color,style){native.NativeApi.canvas.setFillColor(this.canvasId,color,style);}},{key:'multiplyGlobalAlphaImpl',value:function multiplyGlobalAlphaImpl(alpha){native.NativeApi.canvas.multiplyGlobalAlpha(this.canvasId,alpha);}},{key:'setGlobalAlphaImpl',value:function setGlobalAlphaImpl(alpha){native.NativeApi.canvas.setGlobalAlpha(this.canvasId,alpha);}},{key:'setTextAlignImpl',value:function setTextAlignImpl(align){native.NativeApi.canvas.setTextAlign(this.canvasId,align);}},{key:'setLineWidthImpl',value:function setLineWidthImpl(width){native.NativeApi.canvas.setLineWidth(this.canvasId,width);}},{key:'setLineCapImpl',value:function setLineCapImpl(lineCap){native.NativeApi.canvas.setLineCap(this.canvasId,lineCap);}},{key:'setLineJoinImpl',value:function setLineJoinImpl(lineJoin){native.NativeApi.canvas.setLineJoin(this.canvasId,lineJoin);}},{key:'setShadowImpl',value:function setShadowImpl(radius,dx,dy,color){native.NativeApi.canvas.setShadow(this.canvasId,radius,dx,dy,color);}},{key:'setFontSizeImpl',value:function setFontSizeImpl(size){native.NativeApi.canvas.setFontSize(this.canvasId,size);}},{key:'setFontImpl',value:function setFontImpl(fontName){native.NativeApi.canvas.setFont(this.canvasId,fontName);}},{key:'isImageSmoothingEnabledImpl',value:function isImageSmoothingEnabledImpl(){return false;}},{key:'setImageSmoothingEnabledImpl',value:function setImageSmoothingEnabledImpl(enable){}}],[{key:'applyTextMeasure',value:function applyTextMeasure(cacheMeasureTextSize,defaultWidth,widths){android.graphics.Canvas.measureTextImpl=function(text,textSize){var width=0;for(var i=0,length=text.length;i0){this.computeTextArea();native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(),this.mRectTmp.left,this.mRectTmp.top,this.mRectTmp.right,this.mRectTmp.bottom);}}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(NativeEditText.prototype.__proto__||Object.getPrototypeOf(NativeEditText.prototype),'onDetachedFromWindow',this).call(this);native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());}}]);return NativeEditText;}(android.widget.EditText);native.NativeEditText=NativeEditText;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var WebView=android.webkit.WebView;var Rect=android.graphics.Rect;var anchor=document.createElement('a');var webViewMap=new Map();var NativeWebView=function(_WebView){_inherits(NativeWebView,_WebView);function NativeWebView(context,bindElement,defStyle){_classCallCheck(this,NativeWebView);var _this204=_possibleConstructorReturn(this,(NativeWebView.__proto__||Object.getPrototypeOf(NativeWebView)).call(this,context,bindElement,defStyle));_this204.mBoundRect=new Rect();_this204.mRectTmp=new Rect();_this204.mLocationTmp=androidui.util.ArrayCreator.newNumberArray(2);native.NativeApi.webView.createWebView(_this204.hashCode());webViewMap.set(_this204.hashCode(),_this204);var activity=_this204.getContext();var onDestroy=activity.onDestroy;activity.onDestroy=function(){onDestroy.call(activity);webViewMap.delete(_this204.hashCode());native.NativeApi.webView.destroyWebView(_this204.hashCode());};return _this204;}_createClass(NativeWebView,[{key:'goBack',value:function goBack(){native.NativeApi.webView.webViewGoBack(this.hashCode());}},{key:'canGoBack',value:function canGoBack(){return this.mCanGoBack;}},{key:'loadUrl',value:function loadUrl(url){anchor.href=url;url=anchor.href;this.mUrl=url;native.NativeApi.webView.webViewLoadUrl(this.hashCode(),url);}},{key:'reload',value:function reload(){native.NativeApi.webView.webViewReload(this.hashCode());}},{key:'getUrl',value:function getUrl(){return this.mUrl;}},{key:'getTitle',value:function getTitle(){return this.mTitle||this.getUrl();}},{key:'setWebViewClient',value:function setWebViewClient(client){_get2(NativeWebView.prototype.__proto__||Object.getPrototypeOf(NativeWebView.prototype),'setWebViewClient',this).call(this,client);}},{key:'dependOnDebugLayout',value:function dependOnDebugLayout(){return false;}},{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){_get2(NativeWebView.prototype.__proto__||Object.getPrototypeOf(NativeWebView.prototype),'_syncBoundAndScrollToElement',this).call(this);this.getLocationOnScreen(this.mLocationTmp);this.mRectTmp.set(this.mLocationTmp[0],this.mLocationTmp[1],this.mLocationTmp[0]+this.getWidth(),this.mLocationTmp[1]+this.getHeight());if(!this.mRectTmp.equals(this.mBoundRect)){this.mBoundRect.set(this.mRectTmp);native.NativeApi.webView.webViewBoundChange(this.hashCode(),this.mBoundRect.left,this.mBoundRect.top,this.mBoundRect.right,this.mBoundRect.bottom);}}}],[{key:'notifyLoadFinish',value:function notifyLoadFinish(viewHash,url,title){var nativeWebView=webViewMap.get(viewHash);if(nativeWebView==null)return;nativeWebView.mUrl=url;nativeWebView.mTitle=title;if(nativeWebView.mClient!=null){nativeWebView.mClient.onReceivedTitle(nativeWebView,title);nativeWebView.mClient.onPageFinished(nativeWebView,url);}}},{key:'notifyWebViewHistoryChange',value:function notifyWebViewHistoryChange(viewHash,currentHistoryIndex,historySize){var nativeWebView=webViewMap.get(viewHash);if(nativeWebView==null)return;nativeWebView.mCanGoBack=currentHistoryIndex>0;}}]);return NativeWebView;}(WebView);native.NativeWebView=NativeWebView;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var HtmlView=androidui.widget.HtmlView;var Rect=android.graphics.Rect;var NativeHtmlView=function(_HtmlView){_inherits(NativeHtmlView,_HtmlView);function NativeHtmlView(){_classCallCheck(this,NativeHtmlView);var _this205=_possibleConstructorReturn(this,(NativeHtmlView.__proto__||Object.getPrototypeOf(NativeHtmlView)).apply(this,arguments));_this205.mRectDrawHTMLBoundTmp=new Rect();return _this205;}_createClass(NativeHtmlView,[{key:'_syncBoundAndScrollToElement',value:function _syncBoundAndScrollToElement(){_get2(NativeHtmlView.prototype.__proto__||Object.getPrototypeOf(NativeHtmlView.prototype),'_syncBoundAndScrollToElement',this).call(this);this.getGlobalVisibleRect(this.mRectDrawHTMLBoundTmp);native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(),this.mRectDrawHTMLBoundTmp.left,this.mRectDrawHTMLBoundTmp.top,this.mRectDrawHTMLBoundTmp.right,this.mRectDrawHTMLBoundTmp.bottom);}},{key:'onDetachedFromWindow',value:function onDetachedFromWindow(){_get2(NativeHtmlView.prototype.__proto__||Object.getPrototypeOf(NativeHtmlView.prototype),'onDetachedFromWindow',this).call(this);native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());}}]);return NativeHtmlView;}(HtmlView);native.NativeHtmlView=NativeHtmlView;})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));var androidui;(function(androidui){var native;(function(native){var AndroidJsBridgeProperty='AndroidUIRuntime';var JSBridge=window[AndroidJsBridgeProperty];var NativeApi=function NativeApi(){_classCallCheck(this,NativeApi);};native.NativeApi=NativeApi;(function(NativeApi){var BatchCall=function(){function BatchCall(){_classCallCheck(this,BatchCall);this.calls=[];}_createClass(BatchCall,[{key:'pushCall',value:function pushCall(method,methodArgs){var _calls;this.calls.push(method);(_calls=this.calls).push.apply(_calls,_toConsumableArray(methodArgs));this.calls.push(null);}},{key:'clear',value:function clear(){this.calls=[];}},{key:'toString',value:function toString(){return this.calls.join('\n');}}]);return BatchCall;}();var batchCall=new BatchCall();var SurfaceApi=function(){function SurfaceApi(){_classCallCheck(this,SurfaceApi);}_createClass(SurfaceApi,[{key:'createSurface',value:function createSurface(surfaceId,left,top,right,bottom){JSBridge.createSurface(surfaceId,left,top,right,bottom);}},{key:'onSurfaceBoundChange',value:function onSurfaceBoundChange(surfaceId,left,top,right,bottom){JSBridge.onSurfaceBoundChange(surfaceId,left,top,right,bottom);}},{key:'lockCanvas',value:function lockCanvas(surfaceId,canvasId,left,top,right,bottom){batchCall.pushCall('31',[surfaceId,canvasId,left,top,right,bottom]);}},{key:'unlockCanvasAndPost',value:function unlockCanvasAndPost(surfaceId,canvasId){batchCall.pushCall('32',[surfaceId,canvasId]);JSBridge.batchCall(batchCall.toString());batchCall.clear();}},{key:'showFps',value:function showFps(fps){JSBridge.showJSFps(fps);}}]);return SurfaceApi;}();NativeApi.SurfaceApi=SurfaceApi;var CanvasApi=function(){function CanvasApi(){_classCallCheck(this,CanvasApi);}_createClass(CanvasApi,[{key:'createCanvas',value:function createCanvas(canvasId,width,height){batchCall.pushCall('33',[canvasId,width,height]);}},{key:'recycleCanvas',value:function recycleCanvas(canvasId){batchCall.pushCall('34',[canvasId]);}},{key:'translate',value:function translate(canvasId,dx,dy){batchCall.pushCall('35',[canvasId,dx,dy]);}},{key:'scale',value:function scale(canvasId,sx,sy){batchCall.pushCall('36',[canvasId,sx,sy]);}},{key:'rotate',value:function rotate(canvasId,degrees){batchCall.pushCall('37',[canvasId,degrees]);}},{key:'concat',value:function concat(canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y){batchCall.pushCall('38',[canvasId,MSCALE_X,MSKEW_X,MTRANS_X,MSKEW_Y,MSCALE_Y,MTRANS_Y]);}},{key:'drawColor',value:function drawColor(canvasId,color){batchCall.pushCall('39',[canvasId,color]);}},{key:'clearColor',value:function clearColor(canvasId){batchCall.pushCall('40',[canvasId]);}},{key:'drawRect',value:function drawRect(canvasId,left,top,width,height,style){batchCall.pushCall('41',[canvasId,left,top,width,height,style||android.graphics.Paint.Style.FILL]);}},{key:'clipRect',value:function clipRect(canvasId,left,top,width,height){batchCall.pushCall('42',[canvasId,left,top,width,height]);}},{key:'save',value:function save(canvasId){batchCall.pushCall('43',[canvasId]);}},{key:'restore',value:function restore(canvasId){batchCall.pushCall('44',[canvasId]);}},{key:'drawCanvas',value:function drawCanvas(canvasId,drawCanvasId,offsetX,offsetY){batchCall.pushCall('45',[canvasId,drawCanvasId,offsetX,offsetY]);}},{key:'drawText',value:function drawText(canvasId,text,x,y,fillStyle){text='"'+text.replace(/(\n)+|(\r\n)+/g,"\\n")+'"';batchCall.pushCall('47',[canvasId,text,x,y,fillStyle||android.graphics.Paint.Style.FILL]);}},{key:'setFillColor',value:function setFillColor(canvasId,color,style){batchCall.pushCall('49',[canvasId,color,style||android.graphics.Paint.Style.FILL]);}},{key:'multiplyGlobalAlpha',value:function multiplyGlobalAlpha(canvasId,alpha){batchCall.pushCall('50',[canvasId,alpha]);}},{key:'setGlobalAlpha',value:function setGlobalAlpha(canvasId,alpha){batchCall.pushCall('51',[canvasId,alpha]);}},{key:'setTextAlign',value:function setTextAlign(canvasId,align){batchCall.pushCall('52',[canvasId,align]);}},{key:'setLineWidth',value:function setLineWidth(canvasId,width){batchCall.pushCall('53',[canvasId,width]);}},{key:'setLineCap',value:function setLineCap(canvasId,lineCap){batchCall.pushCall('54',[canvasId,lineCap]);}},{key:'setLineJoin',value:function setLineJoin(canvasId,lineJoin){batchCall.pushCall('55',[canvasId,lineJoin]);}},{key:'setShadow',value:function setShadow(canvasId,radius,dx,dy,color){batchCall.pushCall('56',[canvasId,radius,dx,dy,color]);}},{key:'setFontSize',value:function setFontSize(canvasId,size){batchCall.pushCall('57',[canvasId,size]);}},{key:'setFont',value:function setFont(canvasId,fontName){batchCall.pushCall('58',[canvasId,fontName]);}},{key:'drawOval',value:function drawOval(canvasId,left,top,right,bottom,style){batchCall.pushCall('59',[canvasId,left,top,right,bottom,style||android.graphics.Paint.Style.FILL]);}},{key:'drawCircle',value:function drawCircle(canvasId,cx,cy,radius,style){batchCall.pushCall('60',[canvasId,cx,cy,radius,style||android.graphics.Paint.Style.FILL]);}},{key:'drawArc',value:function drawArc(canvasId,left,top,right,bottom,startAngle,sweepAngle,useCenter,style){batchCall.pushCall('61',[canvasId,left,top,right,bottom,startAngle,sweepAngle,useCenter,style||android.graphics.Paint.Style.FILL]);}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style){batchCall.pushCall('62',[canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft,style||android.graphics.Paint.Style.FILL]);}},{key:'clipRoundRectImpl',value:function clipRoundRectImpl(canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft){batchCall.pushCall('63',[canvasId,left,top,width,height,radiusTopLeft,radiusTopRight,radiusBottomRight,radiusBottomLeft]);}},{key:'drawImage2args',value:function drawImage2args(canvasId,drawImageId,left,top){batchCall.pushCall('70',[canvasId,drawImageId,left,top]);}},{key:'drawImage4args',value:function drawImage4args(canvasId,drawImageId,dstLeft,dstTop,dstRight,dstBottom){batchCall.pushCall('71',[canvasId,drawImageId,dstLeft,dstTop,dstRight,dstBottom]);}},{key:'drawImage8args',value:function drawImage8args(canvasId,drawImageId,srcLeft,srcTop,srcRight,srcBottom,dstLeft,dstTop,dstRight,dstBottom){batchCall.pushCall('72',[canvasId,drawImageId,srcLeft,srcTop,srcRight,srcBottom,dstLeft,dstTop,dstRight,dstBottom]);}}]);return CanvasApi;}();NativeApi.CanvasApi=CanvasApi;})(NativeApi=native.NativeApi||(native.NativeApi={}));if(JSBridge){android.view.Surface.prototype=native.NativeSurface.prototype;android.graphics.Canvas.prototype=native.NativeCanvas.prototype;androidui.image.NetImage.prototype=native.NativeImage.prototype;android.widget.EditText=native.NativeEditText;android.webkit.WebView=native.NativeWebView;androidui.widget.HtmlView=native.NativeHtmlView;NativeApi.surface=new NativeApi.SurfaceApi();NativeApi.canvas=new NativeApi.CanvasApi();NativeApi.image=JSBridge;NativeApi.drawHTML=JSBridge;NativeApi.webView=JSBridge;android.os.MessageQueue.requestNextLoop=function(){setTimeout(android.os.MessageQueue.loop,0);};androidui.AndroidUI.showAppClosed=function(){JSBridge.closeApp();};JSBridge.initRuntime();window.addEventListener('load',function(){setInterval(function(){JSBridge.pageAlive(1500);},800);});}})(native=androidui.native||(androidui.native={}));})(androidui||(androidui={}));window['android']=android;window['java']=java;window['AndroidUI']=androidui.AndroidUI;(function(){var event=document.createEvent("CustomEvent");event.initCustomEvent("AndroidUILoadFinish",true,true,null);document.dispatchEvent(event);})(); //# sourceMappingURL=android-ui.es5.js.map \ No newline at end of file diff --git a/dist/android-ui.es5.js.map b/dist/android-ui.es5.js.map index 08a3433..cb2f802 100644 --- a/dist/android-ui.es5.js.map +++ b/dist/android-ui.es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["android-ui.js"],"names":[],"mappings":"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","file":"android-ui.es5.js","sourcesContent":["/**\n * AndroidUIX v0.6.7\n * https://github.com/linfaxin/AndroidUIX\n */\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class ArrayList {\n constructor(initialCapacity = 0) {\n this.array = [];\n }\n size() {\n return this.array.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n contains(o) {\n return this.indexOf(o) >= 0;\n }\n indexOf(o) {\n return this.array.indexOf(o);\n }\n lastIndexOf(o) {\n return this.array.lastIndexOf(o);\n }\n clone() {\n let arrayList = new ArrayList();\n arrayList.array.push(...this.array);\n return arrayList;\n }\n toArray(a = new Array(this.size())) {\n let size = this.size();\n for (let i = 0; i < size; i++) {\n a[i] = this.array[i];\n }\n return a;\n }\n getArray() {\n return this.array;\n }\n get(index) {\n index = Math.floor(index);\n return this.array[index];\n }\n set(index, element) {\n index = Math.floor(index);\n let old = this.array[index];\n this.array[index] = element;\n return old;\n }\n add(...args) {\n let index, t;\n if (args.length === 1)\n t = args[0];\n else if (args.length === 2) {\n index = Math.floor(args[0]);\n t = args[1];\n }\n if (index === undefined)\n this.array.push(t);\n else\n this.array.splice(index, 0, t);\n }\n remove(o) {\n let index;\n if (Number.isInteger(o)) {\n index = o;\n }\n else {\n index = this.array.indexOf(o);\n }\n let old = this.array[index];\n this.array.splice(index, 1);\n return old;\n }\n clear() {\n this.array = [];\n }\n addAll(...args) {\n let index, list;\n if (args.length === 1) {\n list = args[0];\n }\n else if (args.length === 2) {\n index = Math.floor(args[0]);\n list = args[1];\n }\n if (index === undefined) {\n this.array.push(...list.array);\n }\n else {\n this.array.splice(index, 0, ...list.array);\n }\n }\n removeAll(list) {\n let oldSize = this.size();\n list.array.forEach((item) => {\n let index = this.array.indexOf(item);\n this.array.splice(index, 1);\n });\n return this.size() === oldSize;\n }\n [Symbol.iterator]() {\n return this.array[Symbol.iterator];\n }\n subList(fromIndex, toIndex) {\n let list = new ArrayList();\n fromIndex = Math.floor(fromIndex);\n toIndex = Math.floor(toIndex);\n for (var i = fromIndex; i < toIndex; i++) {\n list.array.push(this.array[i]);\n }\n return list;\n }\n toString() {\n return this.array.toString();\n }\n sort(compareFn) {\n this.array.sort(compareFn);\n }\n }\n util.ArrayList = ArrayList;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Bundle {\n constructor(copy) {\n if (copy)\n Object.assign(this, copy);\n }\n get(key, defaultValue) {\n if (this.containsKey(key)) {\n return this[key];\n }\n return defaultValue;\n }\n put(key, value) {\n this[key] = value;\n }\n containsKey(key) {\n return key in this;\n }\n }\n os.Bundle = Bundle;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class StringBuilder {\n constructor(arg) {\n this.array = [];\n if (!Number.isInteger(arg) && arg) {\n this.append(arg);\n }\n }\n length() {\n return this.array.length;\n }\n append(a) {\n let str = a + '';\n this.array.push(...str.split(''));\n return this;\n }\n deleteCharAt(index) {\n this.array.splice(index, 1);\n return this;\n }\n replace(start, end, str) {\n this.array.splice(start, end - start, ...str.split(''));\n return this;\n }\n setLength(length) {\n let arrayLength = this.array.length;\n if (length === arrayLength)\n return;\n if (length < arrayLength) {\n this.array = this.array.splice(length, arrayLength - length);\n }\n else {\n for (let i = 0; i < arrayLength - length; i++) {\n this.array.push('\\0');\n }\n }\n }\n toString() {\n return this.array.join('');\n }\n }\n lang.StringBuilder = StringBuilder;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var StringBuilder = java.lang.StringBuilder;\n class Rect {\n constructor(...args) {\n this.left = 0;\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n if (args.length === 1) {\n let rect = args[0];\n this.left = rect.left;\n this.top = rect.top;\n this.right = rect.right;\n this.bottom = rect.bottom;\n }\n else if (args.length === 4 || args.length === 0) {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n this.left = left || 0;\n this.top = t || 0;\n this.right = right || 0;\n this.bottom = bottom || 0;\n }\n }\n equals(r) {\n if (this === r)\n return true;\n if (!r || !(r instanceof Rect))\n return false;\n return this.left === r.left && this.top === r.top\n && this.right === r.right && this.bottom === r.bottom;\n }\n toString() {\n let sb = new StringBuilder();\n sb.append(\"Rect(\");\n sb.append(this.left);\n sb.append(\", \");\n sb.append(this.top);\n sb.append(\" - \");\n sb.append(this.right);\n sb.append(\", \");\n sb.append(this.bottom);\n sb.append(\")\");\n return sb.toString();\n }\n toShortString(sb = new StringBuilder()) {\n sb.setLength(0);\n sb.append('[');\n sb.append(this.left);\n sb.append(',');\n sb.append(this.top);\n sb.append(\"][\");\n sb.append(this.right);\n sb.append(',');\n sb.append(this.bottom);\n sb.append(']');\n return sb.toString();\n }\n flattenToString() {\n let sb = new StringBuilder(32);\n sb.append(this.left);\n sb.append(' ');\n sb.append(this.top);\n sb.append(' ');\n sb.append(this.right);\n sb.append(' ');\n sb.append(this.bottom);\n return sb.toString();\n }\n static unflattenFromString(str) {\n let parts = str.split(\" \");\n return new Rect(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]), Number.parseInt(parts[3]));\n }\n isEmpty() {\n return this.left >= this.right || this.top >= this.bottom;\n }\n width() {\n return this.right - this.left;\n }\n height() {\n return this.bottom - this.top;\n }\n centerX() {\n return (this.left + this.right) >> 1;\n }\n centerY() {\n return (this.top + this.bottom) >> 1;\n }\n exactCenterX() {\n return (this.left + this.right) * 0.5;\n }\n exactCenterY() {\n return (this.top + this.bottom) * 0.5;\n }\n setEmpty() {\n this.left = this.right = this.top = this.bottom = 0;\n }\n set(...args) {\n if (args.length === 1) {\n let rect = args[0];\n [this.left, this.top, this.right, this.bottom] = [rect.left, rect.top, rect.right, rect.bottom];\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n this.left = left || 0;\n this.top = t || 0;\n this.right = right || 0;\n this.bottom = bottom || 0;\n }\n }\n offset(dx, dy) {\n this.left += dx;\n this.top += dy;\n this.right += dx;\n this.bottom += dy;\n }\n offsetTo(newLeft, newTop) {\n this.right += newLeft - this.left;\n this.bottom += newTop - this.top;\n this.left = newLeft;\n this.top = newTop;\n }\n inset(dx, dy) {\n this.left += dx;\n this.top += dy;\n this.right -= dx;\n this.bottom -= dy;\n }\n contains(...args) {\n if (args.length === 1) {\n let r = args[0];\n return this.left < this.right && this.top < this.bottom\n && this.left <= r.left && this.top <= r.top && this.right >= r.right && this.bottom >= r.bottom;\n }\n else if (args.length === 2) {\n let [x, y] = args;\n return this.left < this.right && this.top < this.bottom\n && x >= this.left && x < this.right && y >= this.top && y < this.bottom;\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return this.left < this.right && this.top < this.bottom\n && this.left <= left && this.top <= t\n && this.right >= right && this.bottom >= bottom;\n }\n }\n intersect(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.intersect(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n if (this.left < right && left < this.right && this.top < bottom && t < this.bottom) {\n if (this.left < left)\n this.left = left;\n if (this.top < t)\n this.top = t;\n if (this.right > right)\n this.right = right;\n if (this.bottom > bottom)\n this.bottom = bottom;\n return true;\n }\n return false;\n }\n }\n setIntersect(a, b) {\n if (a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom) {\n this.left = Math.max(a.left, b.left);\n this.top = Math.max(a.top, b.top);\n this.right = Math.min(a.right, b.right);\n this.bottom = Math.min(a.bottom, b.bottom);\n return true;\n }\n return false;\n }\n intersects(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.intersects(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return this.left < right && left < this.right && this.top < bottom && t < this.bottom;\n }\n }\n static intersects(a, b) {\n return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;\n }\n union(...args) {\n if (arguments.length === 1) {\n let rect = args[0];\n this.union(rect.left, rect.top, rect.right, rect.bottom);\n }\n else if (arguments.length === 2) {\n let [x = 0, y = 0] = args;\n if (x < this.left) {\n this.left = x;\n }\n else if (x > this.right) {\n this.right = x;\n }\n if (y < this.top) {\n this.top = y;\n }\n else if (y > this.bottom) {\n this.bottom = y;\n }\n }\n else {\n let left = args[0];\n let top = args[1];\n let right = args[2];\n let bottom = args[3];\n if ((left < right) && (top < bottom)) {\n if ((this.left < this.right) && (this.top < this.bottom)) {\n if (this.left > left)\n this.left = left;\n if (this.top > top)\n this.top = top;\n if (this.right < right)\n this.right = right;\n if (this.bottom < bottom)\n this.bottom = bottom;\n }\n else {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n }\n }\n }\n sort() {\n if (this.left > this.right) {\n [this.left, this.right] = [this.right, this.left];\n }\n if (this.top > this.bottom) {\n [this.top, this.bottom] = [this.bottom, this.top];\n }\n }\n scale(scale) {\n if (scale != 1) {\n this.left = this.left * scale;\n this.top = this.top * scale;\n this.right = this.right * scale;\n this.bottom = this.bottom * scale;\n }\n }\n }\n graphics.Rect = Rect;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class Gravity {\n static apply(gravity, w, h, container, outRect, layoutDirection) {\n let xAdj = 0, yAdj = 0;\n if (layoutDirection != null)\n gravity = Gravity.getAbsoluteGravity(gravity, layoutDirection);\n switch (gravity & ((Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_X_SHIFT)) {\n case 0:\n outRect.left = container.left + ((container.right - container.left - w) / 2) + xAdj;\n outRect.right = outRect.left + w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.left < container.left) {\n outRect.left = container.left;\n }\n if (outRect.right > container.right) {\n outRect.right = container.right;\n }\n }\n break;\n case Gravity.AXIS_PULL_BEFORE << Gravity.AXIS_X_SHIFT:\n outRect.left = container.left + xAdj;\n outRect.right = outRect.left + w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.right > container.right) {\n outRect.right = container.right;\n }\n }\n break;\n case Gravity.AXIS_PULL_AFTER << Gravity.AXIS_X_SHIFT:\n outRect.right = container.right - xAdj;\n outRect.left = outRect.right - w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.left < container.left) {\n outRect.left = container.left;\n }\n }\n break;\n default:\n outRect.left = container.left + xAdj;\n outRect.right = container.right + xAdj;\n break;\n }\n switch (gravity & ((Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_Y_SHIFT)) {\n case 0:\n outRect.top = container.top + ((container.bottom - container.top - h) / 2) + yAdj;\n outRect.bottom = outRect.top + h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.top < container.top) {\n outRect.top = container.top;\n }\n if (outRect.bottom > container.bottom) {\n outRect.bottom = container.bottom;\n }\n }\n break;\n case Gravity.AXIS_PULL_BEFORE << Gravity.AXIS_Y_SHIFT:\n outRect.top = container.top + yAdj;\n outRect.bottom = outRect.top + h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.bottom > container.bottom) {\n outRect.bottom = container.bottom;\n }\n }\n break;\n case Gravity.AXIS_PULL_AFTER << Gravity.AXIS_Y_SHIFT:\n outRect.bottom = container.bottom - yAdj;\n outRect.top = outRect.bottom - h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.top < container.top) {\n outRect.top = container.top;\n }\n }\n break;\n default:\n outRect.top = container.top + yAdj;\n outRect.bottom = container.bottom + yAdj;\n break;\n }\n }\n static getAbsoluteGravity(gravity, layoutDirection) {\n return gravity;\n }\n static parseGravity(gravityStr, defaultGravity = Gravity.NO_GRAVITY) {\n if (!gravityStr)\n return defaultGravity;\n let gravity = null;\n try {\n let parts = gravityStr.split(\"|\");\n for (let part of parts) {\n let g = Gravity[part.toUpperCase()];\n if (Number.isInteger(g))\n gravity |= g;\n }\n }\n catch (e) {\n console.error(e);\n }\n if (Number.isNaN(gravity))\n return defaultGravity;\n return gravity;\n }\n }\n Gravity.NO_GRAVITY = 0x0000;\n Gravity.AXIS_SPECIFIED = 0x0001;\n Gravity.AXIS_PULL_BEFORE = 0x0002;\n Gravity.AXIS_PULL_AFTER = 0x0004;\n Gravity.AXIS_CLIP = 0x0008;\n Gravity.AXIS_X_SHIFT = 0;\n Gravity.AXIS_Y_SHIFT = 4;\n Gravity.TOP = (Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_Y_SHIFT;\n Gravity.BOTTOM = (Gravity.AXIS_PULL_AFTER | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_Y_SHIFT;\n Gravity.LEFT = (Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_X_SHIFT;\n Gravity.RIGHT = (Gravity.AXIS_PULL_AFTER | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_X_SHIFT;\n Gravity.START = Gravity.LEFT;\n Gravity.END = Gravity.RIGHT;\n Gravity.CENTER_VERTICAL = Gravity.AXIS_SPECIFIED << Gravity.AXIS_Y_SHIFT;\n Gravity.FILL_VERTICAL = Gravity.TOP | Gravity.BOTTOM;\n Gravity.CENTER_HORIZONTAL = Gravity.AXIS_SPECIFIED << Gravity.AXIS_X_SHIFT;\n Gravity.FILL_HORIZONTAL = Gravity.LEFT | Gravity.RIGHT;\n Gravity.CENTER = Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL;\n Gravity.FILL = Gravity.FILL_VERTICAL | Gravity.FILL_HORIZONTAL;\n Gravity.CLIP_VERTICAL = Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT;\n Gravity.CLIP_HORIZONTAL = Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT;\n Gravity.HORIZONTAL_GRAVITY_MASK = (Gravity.AXIS_SPECIFIED |\n Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_X_SHIFT;\n Gravity.VERTICAL_GRAVITY_MASK = (Gravity.AXIS_SPECIFIED |\n Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_Y_SHIFT;\n Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK = Gravity.HORIZONTAL_GRAVITY_MASK;\n Gravity.DISPLAY_CLIP_VERTICAL = 0x10000000;\n Gravity.DISPLAY_CLIP_HORIZONTAL = 0x01000000;\n view.Gravity = Gravity;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseMap {\n constructor(initialCapacity) {\n this.map = new Map();\n }\n clone() {\n let clone = new SparseMap();\n clone.map = new Map(this.map);\n return clone;\n }\n get(key, valueIfKeyNotFound = null) {\n let value = this.map.get(key);\n if (value === undefined)\n return valueIfKeyNotFound;\n return value;\n }\n delete(key) {\n this.map.delete(key);\n }\n remove(key) {\n this.delete(key);\n }\n removeAt(index) {\n this.removeAtRange(index);\n }\n removeAtRange(index, size = 1) {\n let keys = [...this.map.keys()];\n let end = Math.min(this.map.size, index + size);\n for (let i = index; i < end; i++) {\n this.map.delete(keys[i]);\n }\n }\n put(key, value) {\n this.map.set(key, value);\n }\n size() {\n return this.map.size;\n }\n keyAt(index) {\n return [...this.map.keys()][index];\n }\n valueAt(index) {\n return [...this.map.values()][index];\n }\n setValueAt(index, value) {\n let key = this.keyAt(index);\n this.map.set(key, value);\n }\n indexOfKey(key) {\n return [...this.map.keys()].indexOf(key);\n }\n indexOfValue(value) {\n return [...this.map.values()].indexOf(value);\n }\n clear() {\n this.map.clear();\n }\n append(key, value) {\n this.put(key, value);\n }\n }\n util.SparseMap = SparseMap;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseArray extends util.SparseMap {\n }\n util.SparseArray = SparseArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Log {\n static getPriorityString(priority) {\n if (priority > Log.PriorityString.length)\n return \"\";\n return Log.PriorityString[priority - 2];\n }\n static v(tag, msg, tr) {\n console.log(Log.getLogMsg(Log.VERBOSE, tag, msg));\n if (tr)\n console.log(tr);\n }\n static d(tag, msg) {\n console.debug(Log.getLogMsg(Log.DEBUG, tag, msg));\n }\n static i(tag, msg, tr) {\n console.info(Log.getLogMsg(Log.INFO, tag, msg));\n if (tr)\n console.info(tr);\n }\n static w(tag, msg, tr) {\n console.warn(Log.getLogMsg(Log.WARN, tag, msg));\n if (tr)\n console.warn(tr);\n }\n static e(tag, msg, tr) {\n console.error(Log.getLogMsg(Log.ERROR, tag, msg));\n if (tr)\n console.error(tr);\n }\n static getLogMsg(priority, tag, msg) {\n let d = new Date();\n let dateFormat = d.toLocaleTimeString() + '.' + d.getUTCMilliseconds();\n return \"[\" + Log.getPriorityString(priority) + \"] \" + dateFormat + \" \\t \" + tag + \" \\t \" + msg;\n }\n }\n Log.View_DBG = false;\n Log.VelocityTracker_DBG = false;\n Log.DBG_DrawableContainer = false;\n Log.DBG_StateListDrawable = false;\n Log.VERBOSE = 2;\n Log.DEBUG = 3;\n Log.INFO = 4;\n Log.WARN = 5;\n Log.ERROR = 6;\n Log.ASSERT = 7;\n Log.PriorityString = [\"VERBOSE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\", \"ASSERT\"];\n util.Log = Log;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class PixelFormat {\n }\n PixelFormat.UNKNOWN = 0;\n PixelFormat.TRANSLUCENT = -3;\n PixelFormat.TRANSPARENT = -2;\n PixelFormat.OPAQUE = -1;\n PixelFormat.RGBA_8888 = 1;\n PixelFormat.RGBX_8888 = 2;\n PixelFormat.RGB_888 = 3;\n PixelFormat.RGB_565 = 4;\n graphics.PixelFormat = PixelFormat;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var ref;\n (function (ref) {\n class WeakReference {\n constructor(referent) {\n this.weakMap = new WeakMap();\n this.weakMap.set(this, referent);\n }\n get() {\n return this.weakMap.get(this);\n }\n set(value) {\n this.weakMap.set(this, value);\n }\n clear() {\n this.weakMap.delete(this);\n }\n }\n ref.WeakReference = WeakReference;\n })(ref = lang.ref || (lang.ref = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var Runnable;\n (function (Runnable) {\n function of(func) {\n return {\n run: func\n };\n }\n Runnable.of = of;\n })(Runnable = lang.Runnable || (lang.Runnable = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class System {\n static currentTimeMillis() {\n return new Date().getTime();\n }\n static arraycopy(src, srcPos, dest, destPos, length) {\n let srcLength = src.length;\n let destLength = dest.length;\n for (let i = 0; i < length; i++) {\n let srcIndex = i + srcPos;\n if (srcIndex >= srcLength)\n return;\n let destIndex = i + destPos;\n if (destIndex >= destLength)\n return;\n dest[destIndex] = src[srcIndex];\n }\n }\n }\n System.out = {\n println(any) {\n console.log('\\n');\n console.log(any);\n },\n print(any) {\n console.log(any);\n }\n };\n lang.System = System;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class ArrayCreator {\n static newNumberArray(size) {\n let array = new Array(size);\n if (size > 0)\n ArrayCreator.fillArray(array, 0);\n return array;\n }\n static newBooleanArray(size) {\n let array = new Array(size);\n ArrayCreator.fillArray(array, false);\n return array;\n }\n static fillArray(array, value) {\n for (var i = 0, length = array.length; i < length; i++) {\n array[i] = value;\n }\n }\n }\n util.ArrayCreator = ArrayCreator;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n var System = java.lang.System;\n class StateSet {\n static isWildCard(stateSetOrSpec) {\n return stateSetOrSpec.length == 0 || stateSetOrSpec[0] == 0;\n }\n static stateSetMatches(stateSpec, stateSetOrState) {\n if (Number.isInteger(stateSetOrState)) {\n return StateSet._stateSetMatches_single(stateSpec, stateSetOrState);\n }\n let stateSet = stateSetOrState;\n if (stateSet == null) {\n return (stateSpec == null || this.isWildCard(stateSpec));\n }\n let stateSpecSize = stateSpec.length;\n let stateSetSize = stateSet.length;\n for (let i = 0; i < stateSpecSize; i++) {\n let stateSpecState = stateSpec[i];\n if (stateSpecState == 0) {\n return true;\n }\n let mustMatch;\n if (stateSpecState > 0) {\n mustMatch = true;\n }\n else {\n mustMatch = false;\n stateSpecState = -stateSpecState;\n }\n let found = false;\n for (let j = 0; j < stateSetSize; j++) {\n const state = stateSet[j];\n if (state == 0) {\n if (mustMatch) {\n return false;\n }\n else {\n break;\n }\n }\n if (state == stateSpecState) {\n if (mustMatch) {\n found = true;\n break;\n }\n else {\n return false;\n }\n }\n }\n if (mustMatch && !found) {\n return false;\n }\n }\n return true;\n }\n static _stateSetMatches_single(stateSpec, state) {\n let stateSpecSize = stateSpec.length;\n for (let i = 0; i < stateSpecSize; i++) {\n let stateSpecState = stateSpec[i];\n if (stateSpecState == 0) {\n return true;\n }\n if (stateSpecState > 0) {\n if (state != stateSpecState) {\n return false;\n }\n }\n else {\n if (state == -stateSpecState) {\n return false;\n }\n }\n }\n return true;\n }\n static trimStateSet(states, newSize) {\n if (states.length == newSize) {\n return states;\n }\n let trimmedStates = androidui.util.ArrayCreator.newNumberArray(newSize);\n System.arraycopy(states, 0, trimmedStates, 0, newSize);\n return trimmedStates;\n }\n }\n StateSet.WILD_CARD = [];\n StateSet.NOTHING = [0];\n util.StateSet = StateSet;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Pools {\n }\n util.Pools = Pools;\n (function (Pools) {\n class SimplePool {\n constructor(maxPoolSize) {\n this.mPoolSize = 0;\n if (maxPoolSize <= 0) {\n throw new Error(\"The max pool size must be > 0\");\n }\n this.mPool = new Array(maxPoolSize);\n }\n acquire() {\n if (this.mPoolSize > 0) {\n const lastPooledIndex = this.mPoolSize - 1;\n let instance = this.mPool[lastPooledIndex];\n this.mPool[lastPooledIndex] = null;\n this.mPoolSize--;\n return instance;\n }\n return null;\n }\n release(instance) {\n if (this.isInPool(instance)) {\n throw new Error(\"Already in the pool!\");\n }\n if (this.mPoolSize < this.mPool.length) {\n this.mPool[this.mPoolSize] = instance;\n this.mPoolSize++;\n return true;\n }\n return false;\n }\n isInPool(instance) {\n for (let i = 0; i < this.mPoolSize; i++) {\n if (this.mPool[i] == instance) {\n return true;\n }\n }\n return false;\n }\n }\n Pools.SimplePool = SimplePool;\n class SynchronizedPool extends SimplePool {\n }\n Pools.SynchronizedPool = SynchronizedPool;\n })(Pools = util.Pools || (util.Pools = {}));\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Color {\n static alpha(color) {\n return color >>> 24;\n }\n static red(color) {\n return (color >> 16) & 0xFF;\n }\n static green(color) {\n return (color >> 8) & 0xFF;\n }\n static blue(color) {\n return color & 0xFF;\n }\n static rgb(red, green, blue) {\n return (0xFF << 24) | (red << 16) | (green << 8) | blue;\n }\n static argb(alpha, red, green, blue) {\n return (alpha << 24) | (red << 16) | (green << 8) | blue;\n }\n static rgba(red, green, blue, alpha) {\n return (alpha << 24) | (red << 16) | (green << 8) | blue;\n }\n static parseColor(colorString, defaultColor) {\n if (colorString.charAt(0) == '#') {\n if (colorString.length === 4) {\n colorString = '#' + colorString[1] + colorString[1] + colorString[2] + colorString[2] + colorString[3] + colorString[3];\n }\n let color = parseInt(colorString.substring(1), 16);\n if (colorString.length == 7) {\n color |= 0x00000000ff000000;\n }\n else if (colorString.length != 9) {\n if (defaultColor != null)\n return defaultColor;\n throw new Error(\"Unknown color : \" + colorString);\n }\n return color;\n }\n else if (colorString.startsWith('rgb(')) {\n colorString = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')'));\n let parts = colorString.split(',');\n return Color.rgb(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]));\n }\n else if (colorString.startsWith('rgba(')) {\n colorString = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')'));\n let parts = colorString.split(',');\n return Color.rgba(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]), Number.parseFloat(parts[3]) * 255);\n }\n else {\n let color = Color.sColorNameMap.get(colorString.toLowerCase());\n if (color != null) {\n return color;\n }\n }\n if (defaultColor != null)\n return defaultColor;\n throw new Error(\"Unknown color : \" + colorString);\n }\n static toARGBHex(color) {\n let r = Color.red(color);\n let g = Color.green(color);\n let b = Color.blue(color);\n let a = Color.alpha(color);\n let hR = r < 16 ? '0' + r.toString(16) : r.toString(16);\n let hG = g < 16 ? '0' + g.toString(16) : g.toString(16);\n let hB = b < 16 ? '0' + b.toString(16) : b.toString(16);\n let hA = a < 16 ? '0' + a.toString(16) : a.toString(16);\n return \"#\" + hA + hR + hG + hB;\n }\n static toRGBAFunc(color) {\n let r = Color.red(color);\n let g = Color.green(color);\n let b = Color.blue(color);\n let a = Color.alpha(color);\n return `rgba(${r},${g},${b},${a / 255})`;\n }\n static getHtmlColor(color) {\n let i = Color.sColorNameMap.get(color.toLowerCase());\n return i;\n }\n }\n Color.BLACK = 0xFF000000;\n Color.DKGRAY = 0xFF444444;\n Color.GRAY = 0xFF888888;\n Color.LTGRAY = 0xFFCCCCCC;\n Color.WHITE = 0xFFFFFFFF;\n Color.RED = 0xFFFF0000;\n Color.GREEN = 0xFF00FF00;\n Color.BLUE = 0xFF0000FF;\n Color.YELLOW = 0xFFFFFF00;\n Color.CYAN = 0xFF00FFFF;\n Color.MAGENTA = 0xFFFF00FF;\n Color.TRANSPARENT = 0;\n Color.sColorNameMap = new Map();\n graphics.Color = Color;\n Color.sColorNameMap = new Map();\n Color.sColorNameMap.set(\"black\", Color.BLACK);\n Color.sColorNameMap.set(\"darkgray\", Color.DKGRAY);\n Color.sColorNameMap.set(\"gray\", Color.GRAY);\n Color.sColorNameMap.set(\"lightgray\", Color.LTGRAY);\n Color.sColorNameMap.set(\"white\", Color.WHITE);\n Color.sColorNameMap.set(\"red\", Color.RED);\n Color.sColorNameMap.set(\"green\", Color.GREEN);\n Color.sColorNameMap.set(\"blue\", Color.BLUE);\n Color.sColorNameMap.set(\"yellow\", Color.YELLOW);\n Color.sColorNameMap.set(\"cyan\", Color.CYAN);\n Color.sColorNameMap.set(\"magenta\", Color.MAGENTA);\n Color.sColorNameMap.set(\"aqua\", 0xFF00FFFF);\n Color.sColorNameMap.set(\"fuchsia\", 0xFFFF00FF);\n Color.sColorNameMap.set(\"darkgrey\", Color.DKGRAY);\n Color.sColorNameMap.set(\"grey\", Color.GRAY);\n Color.sColorNameMap.set(\"lightgrey\", Color.LTGRAY);\n Color.sColorNameMap.set(\"lime\", 0xFF00FF00);\n Color.sColorNameMap.set(\"maroon\", 0xFF800000);\n Color.sColorNameMap.set(\"navy\", 0xFF000080);\n Color.sColorNameMap.set(\"olive\", 0xFF808000);\n Color.sColorNameMap.set(\"purple\", 0xFF800080);\n Color.sColorNameMap.set(\"silver\", 0xFFC0C0C0);\n Color.sColorNameMap.set(\"teal\", 0xFF008080);\n Color.sColorNameMap.set(\"transparent\", Color.TRANSPARENT);\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Paint {\n constructor(flag = 0) {\n this.mTextStyle = Paint.Style.FILL;\n this.textScaleX = 1;\n this.mFlag = 0;\n this.shadowDx = 0;\n this.shadowDy = 0;\n this.shadowRadius = 0;\n this.shadowColor = 0;\n this.mFlag = flag;\n }\n set(src) {\n if (this != src) {\n this.setClassVariablesFrom(src);\n }\n }\n setClassVariablesFrom(paint) {\n this.mTextStyle = paint.mTextStyle;\n this.mColor = paint.mColor;\n this.mStrokeWidth = paint.mStrokeWidth;\n this.align = paint.align;\n this.mStrokeCap = paint.mStrokeCap;\n this.mStrokeJoin = paint.mStrokeJoin;\n this.textSize = paint.textSize;\n this.textScaleX = paint.textScaleX;\n this.mFlag = paint.mFlag;\n this.hasShadow = paint.hasShadow;\n this.shadowDx = paint.shadowDx;\n this.shadowDy = paint.shadowDy;\n this.shadowRadius = paint.shadowRadius;\n this.shadowColor = paint.shadowColor;\n this.drawableState = paint.drawableState;\n }\n getStyle() {\n return this.mTextStyle;\n }\n setStyle(style) {\n this.mTextStyle = style;\n }\n getFlags() {\n return this.mFlag;\n }\n setFlags(flags) {\n this.mFlag = flags;\n }\n getTextScaleX() {\n return this.textScaleX;\n }\n setTextScaleX(scaleX) {\n this.textScaleX = scaleX;\n }\n getColor() {\n return this.mColor;\n }\n setColor(color) {\n this.mColor = color;\n }\n setARGB(a, r, g, b) {\n this.setColor((a << 24) | (r << 16) | (g << 8) | b);\n }\n getAlpha() {\n return graphics.Color.alpha(this.mColor);\n }\n setAlpha(alpha) {\n this.setColor(graphics.Color.argb(alpha, graphics.Color.red(this.mColor), graphics.Color.green(this.mColor), graphics.Color.blue(this.mColor)));\n }\n getStrokeWidth() {\n return this.mStrokeWidth;\n }\n setStrokeWidth(width) {\n this.mStrokeWidth = width;\n }\n getStrokeCap() {\n return this.mStrokeCap;\n }\n setStrokeCap(cap) {\n this.mStrokeCap = cap;\n }\n getStrokeJoin() {\n return this.mStrokeJoin;\n }\n setStrokeJoin(join) {\n this.mStrokeJoin = join;\n }\n setAntiAlias(enable) {\n }\n isAntiAlias() {\n return true;\n }\n setShadowLayer(radius, dx, dy, color) {\n this.hasShadow = radius > 0.0;\n this.shadowRadius = radius;\n this.shadowDx = dx;\n this.shadowDy = dy;\n this.shadowColor = color;\n }\n clearShadowLayer() {\n this.hasShadow = false;\n }\n getTextAlign() {\n return this.align;\n }\n setTextAlign(align) {\n this.align = align;\n }\n getTextSize() {\n return this.textSize;\n }\n setTextSize(textSize) {\n this.textSize = textSize;\n }\n ascent() {\n return this.textSize * Paint.FontMetrics_Size_Ascent;\n }\n descent() {\n return this.textSize * Paint.FontMetrics_Size_Descent;\n }\n getFontMetricsInt(fmi) {\n if (this.textSize == null) {\n console.warn('call Paint.getFontMetricsInt but textSize not init');\n return 0;\n }\n if (fmi == null) {\n return Math.floor((Paint.FontMetrics_Size_Descent - Paint.FontMetrics_Size_Ascent) * this.textSize);\n }\n fmi.ascent = Math.floor(Paint.FontMetrics_Size_Ascent * this.textSize);\n fmi.bottom = Math.floor(Paint.FontMetrics_Size_Bottom * this.textSize);\n fmi.descent = Math.floor(Paint.FontMetrics_Size_Descent * this.textSize);\n fmi.leading = Math.floor(Paint.FontMetrics_Size_Leading * this.textSize);\n fmi.top = Math.floor(Paint.FontMetrics_Size_Top * this.textSize);\n return fmi.descent - fmi.ascent;\n }\n getFontMetrics(metrics) {\n if (this.textSize == null) {\n console.warn('call Paint.getFontMetrics but textSize not init');\n return 0;\n }\n if (metrics == null) {\n return (Paint.FontMetrics_Size_Descent - Paint.FontMetrics_Size_Ascent) * this.textSize;\n }\n metrics.ascent = Paint.FontMetrics_Size_Ascent * this.textSize;\n metrics.bottom = Paint.FontMetrics_Size_Bottom * this.textSize;\n metrics.descent = Paint.FontMetrics_Size_Descent * this.textSize;\n metrics.leading = Paint.FontMetrics_Size_Leading * this.textSize;\n metrics.top = Paint.FontMetrics_Size_Top * this.textSize;\n return metrics.descent - metrics.ascent;\n }\n measureText(text, index = 0, count = text.length) {\n return graphics.Canvas.measureText(text.substr(index, count), this.textSize) * this.textScaleX;\n }\n getTextWidths_count(text, index, count, widths) {\n return this.getTextWidths_end(text, index, index + count, widths);\n }\n getTextWidths_end(text, start, end, widths) {\n if (text == null) {\n throw Error(`new IllegalArgumentException(\"text cannot be null\")`);\n }\n if ((start | end | (end - start) | (text.length - end)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n if (end - start > widths.length) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n if (text.length == 0 || start == end) {\n return 0;\n }\n for (let i = start; i < end; i++) {\n widths[i - start] = this.measureText(text[i]);\n }\n return end - start;\n }\n getTextWidths_2(text, widths) {\n return this.getTextWidths_end(text, 0, text.length, widths);\n }\n getTextRunAdvances_count(chars, index, count, contextIndex, contextCount, flags, advances, advancesIndex) {\n return this.getTextRunAdvances_end(chars, index, index + count, contextIndex, contextCount, flags, advances, advancesIndex);\n }\n getTextRunAdvances_end(text, start, end, contextStart, contextEnd, flags, advances, advancesIndex) {\n if (text == null) {\n throw Error(`new IllegalArgumentException(\"text cannot be null\")`);\n }\n if (flags != Paint.DIRECTION_LTR && flags != Paint.DIRECTION_RTL) {\n throw Error(`new IllegalArgumentException(\"unknown flags value: \" + flags)`);\n }\n if ((start | end | contextStart | contextEnd | advancesIndex | (end - start)\n | (start - contextStart) | (contextEnd - end) | (text.length - contextEnd)\n | (advances == null ? 0 : (advances.length - advancesIndex - (end - start)))) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n if (text.length == 0 || start == end) {\n return 0;\n }\n let totalAdvance = 0;\n for (let i = start; i < end; i++) {\n let width = this.measureText(text[i]);\n if (advances)\n advances[i - start + advancesIndex] = width;\n totalAdvance += width;\n }\n return totalAdvance;\n }\n getTextRunCursor_len(text, contextStart, contextLength, flags, offset, cursorOpt) {\n let contextEnd = contextStart + contextLength;\n if (((contextStart | contextEnd | offset | (contextEnd - contextStart) | (offset - contextStart) | (contextEnd - offset)\n | (text.length - contextEnd) | cursorOpt) < 0) || cursorOpt > Paint.CURSOR_OPT_MAX_VALUE) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n const scalarArray = androidui.util.ArrayCreator.newNumberArray(contextLength);\n this.getTextRunAdvances_count(text, contextStart, contextLength, contextStart, contextLength, flags, scalarArray, 0);\n let pos = offset - contextStart;\n switch (cursorOpt) {\n case Paint.CURSOR_AFTER:\n if (pos < contextLength) {\n pos += 1;\n }\n case Paint.CURSOR_AT_OR_AFTER:\n while (pos < contextLength && scalarArray[pos] == 0) {\n ++pos;\n }\n break;\n case Paint.CURSOR_BEFORE:\n if (pos > 0) {\n --pos;\n }\n case Paint.CURSOR_AT_OR_BEFORE:\n while (pos > 0 && scalarArray[pos] == 0) {\n --pos;\n }\n break;\n case Paint.CURSOR_AT:\n default:\n if (scalarArray[pos] == 0) {\n pos = -1;\n }\n break;\n }\n if (pos != -1) {\n pos += contextStart;\n }\n return pos;\n }\n getTextRunCursor_end(text, contextStart, contextEnd, flags, offset, cursorOpt) {\n if (((contextStart | contextEnd | offset | (contextEnd - contextStart) | (offset - contextStart) | (contextEnd - offset)\n | (text.length - contextEnd) | cursorOpt) < 0) || cursorOpt > Paint.CURSOR_OPT_MAX_VALUE) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n let contextLen = contextEnd - contextStart;\n return this.getTextRunCursor_len(text, 0, contextLen, flags, offset - contextStart, cursorOpt);\n }\n isEmpty() {\n return this.mColor == null\n && this.align == null\n && this.mStrokeWidth == null\n && this.mStrokeCap == null\n && this.mStrokeJoin == null\n && !this.hasShadow\n && this.textSize == null;\n }\n applyToCanvas(canvas) {\n if (this.mColor != null) {\n canvas.setColor(this.mColor, this.getStyle());\n }\n if (this.align != null) {\n canvas.setTextAlign(Paint.Align[this.align].toLowerCase());\n }\n if (this.mStrokeWidth != null) {\n canvas.setLineWidth(this.mStrokeWidth);\n }\n if (this.mStrokeCap != null) {\n canvas.setLineCap(Paint.Cap[this.mStrokeCap].toLowerCase());\n }\n if (this.mStrokeJoin != null) {\n canvas.setLineJoin(Paint.Join[this.mStrokeJoin].toLowerCase());\n }\n if (this.hasShadow) {\n canvas.setShadow(this.shadowRadius, this.shadowDx, this.shadowDy, this.shadowColor);\n }\n if (this.textSize != null) {\n canvas.setFontSize(this.textSize);\n }\n if (this.textScaleX != 1) {\n canvas.scale(this.textScaleX, 1);\n }\n }\n }\n Paint.FontMetrics_Size_Ascent = -0.9277344;\n Paint.FontMetrics_Size_Bottom = 0.2709961;\n Paint.FontMetrics_Size_Descent = 0.24414062;\n Paint.FontMetrics_Size_Leading = 0;\n Paint.FontMetrics_Size_Top = -1.05615234;\n Paint.DIRECTION_LTR = 0;\n Paint.DIRECTION_RTL = 1;\n Paint.CURSOR_AFTER = 0;\n Paint.CURSOR_AT_OR_AFTER = 1;\n Paint.CURSOR_BEFORE = 2;\n Paint.CURSOR_AT_OR_BEFORE = 3;\n Paint.CURSOR_AT = 4;\n Paint.CURSOR_OPT_MAX_VALUE = Paint.CURSOR_AT;\n Paint.ANTI_ALIAS_FLAG = 0x01;\n Paint.FILTER_BITMAP_FLAG = 0x02;\n Paint.DITHER_FLAG = 0x04;\n Paint.UNDERLINE_TEXT_FLAG = 0x08;\n Paint.STRIKE_THRU_TEXT_FLAG = 0x10;\n Paint.FAKE_BOLD_TEXT_FLAG = 0x20;\n Paint.LINEAR_TEXT_FLAG = 0x40;\n Paint.SUBPIXEL_TEXT_FLAG = 0x80;\n Paint.DEV_KERN_TEXT_FLAG = 0x100;\n Paint.LCD_RENDER_TEXT_FLAG = 0x200;\n Paint.EMBEDDED_BITMAP_TEXT_FLAG = 0x400;\n Paint.AUTO_HINTING_TEXT_FLAG = 0x800;\n Paint.VERTICAL_TEXT_FLAG = 0x1000;\n Paint.DEFAULT_PAINT_FLAGS = Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG;\n graphics.Paint = Paint;\n (function (Paint) {\n (function (Align) {\n Align[Align[\"LEFT\"] = 0] = \"LEFT\";\n Align[Align[\"CENTER\"] = 1] = \"CENTER\";\n Align[Align[\"RIGHT\"] = 2] = \"RIGHT\";\n })(Paint.Align || (Paint.Align = {}));\n var Align = Paint.Align;\n class FontMetrics {\n constructor() {\n this.top = 0;\n this.ascent = 0;\n this.descent = 0;\n this.bottom = 0;\n this.leading = 0;\n }\n }\n Paint.FontMetrics = FontMetrics;\n class FontMetricsInt {\n constructor() {\n this.top = 0;\n this.ascent = 0;\n this.descent = 0;\n this.bottom = 0;\n this.leading = 0;\n }\n toString() {\n return \"FontMetricsInt: top=\" + this.top + \" ascent=\" + this.ascent + \" descent=\" + this.descent + \" bottom=\" + this.bottom + \" leading=\" + this.leading;\n }\n }\n Paint.FontMetricsInt = FontMetricsInt;\n (function (Style) {\n Style[Style[\"FILL\"] = 0] = \"FILL\";\n Style[Style[\"STROKE\"] = 1] = \"STROKE\";\n Style[Style[\"FILL_AND_STROKE\"] = 2] = \"FILL_AND_STROKE\";\n })(Paint.Style || (Paint.Style = {}));\n var Style = Paint.Style;\n (function (Cap) {\n Cap[Cap[\"BUTT\"] = 0] = \"BUTT\";\n Cap[Cap[\"ROUND\"] = 1] = \"ROUND\";\n Cap[Cap[\"SQUARE\"] = 2] = \"SQUARE\";\n })(Paint.Cap || (Paint.Cap = {}));\n var Cap = Paint.Cap;\n (function (Join) {\n Join[Join[\"MITER\"] = 0] = \"MITER\";\n Join[Join[\"ROUND\"] = 1] = \"ROUND\";\n Join[Join[\"BEVEL\"] = 2] = \"BEVEL\";\n })(Paint.Join || (Paint.Join = {}));\n var Join = Paint.Join;\n })(Paint = graphics.Paint || (graphics.Paint = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Path {\n reset() {\n }\n }\n graphics.Path = Path;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Point {\n constructor(...args) {\n this.x = 0;\n this.y = 0;\n if (args.length === 1) {\n let src = args[0];\n this.x = src.x;\n this.y = src.y;\n }\n else {\n let [x = 0, y = 0] = args;\n this.x = x;\n this.y = y;\n }\n }\n set(x, y) {\n this.x = x;\n this.y = y;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n }\n offset(dx, dy) {\n this.x += dx;\n this.y += dy;\n }\n equals(...args) {\n if (args.length === 2) {\n let [x = 0, y = 0] = args;\n return this.x == x && this.y == y;\n }\n else {\n let o = args[0];\n if (this === o)\n return true;\n if (!o || !(o instanceof Point))\n return false;\n let point = o;\n if (this.x != point.x)\n return false;\n if (this.y != point.y)\n return false;\n return true;\n }\n }\n toString() {\n return \"Point(\" + this.x + \", \" + this.y + \")\";\n }\n }\n graphics.Point = Point;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class RectF extends graphics.Rect {\n }\n graphics.RectF = RectF;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var System = java.lang.System;\n var StringBuilder = java.lang.StringBuilder;\n class Matrix {\n constructor(values) {\n this.mValues = androidui.util.ArrayCreator.newNumberArray(Matrix.MATRIX_SIZE);\n if (values instanceof Matrix)\n this.set(values);\n else if (values instanceof Array) {\n System.arraycopy(values, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n else {\n Matrix.reset(this.mValues);\n }\n }\n isIdentity() {\n for (let i = 0, k = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++, k++) {\n if (this.mValues[k] != ((i == j) ? 1 : 0)) {\n return false;\n }\n }\n }\n return true;\n }\n hasPerspective() {\n return (this.mValues[6] != 0 || this.mValues[7] != 0 || this.mValues[8] != 1);\n }\n rectStaysRect() {\n return (this.computeTypeMask() & Matrix.kRectStaysRect_Mask) != 0;\n }\n set(src) {\n if (src == null) {\n this.reset();\n }\n else {\n System.arraycopy(src.mValues, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n }\n equals(obj) {\n if (!(obj instanceof Matrix))\n return false;\n let another = obj;\n for (let i = 0; i < Matrix.MATRIX_SIZE; i++) {\n if (this.mValues[i] != another.mValues[i]) {\n return false;\n }\n }\n return true;\n }\n hashCode() {\n return 44;\n }\n reset() {\n Matrix.reset(this.mValues);\n }\n setTranslate(dx, dy) {\n Matrix.setTranslate(this.mValues, dx, dy);\n }\n setScale(sx, sy, px, py) {\n if (px == null || py == null) {\n this.mValues[0] = sx;\n this.mValues[1] = 0;\n this.mValues[2] = 0;\n this.mValues[3] = 0;\n this.mValues[4] = sy;\n this.mValues[5] = 0;\n this.mValues[6] = 0;\n this.mValues[7] = 0;\n this.mValues[8] = 1;\n }\n else {\n this.mValues = Matrix.getScale(sx, sy, px, py);\n }\n }\n setRotate(degrees, px, py) {\n if (px == null || py == null) {\n Matrix.setRotate_1(this.mValues, degrees);\n }\n else {\n this.mValues = Matrix.getRotate_3(degrees, px, py);\n }\n }\n setSinCos(sinValue, cosValue, px, py) {\n if (px == null || py == null) {\n Matrix.setRotate_2(this.mValues, sinValue, cosValue);\n }\n else {\n Matrix.setTranslate(this.mValues, -px, -py);\n this.postTransform(Matrix.getRotate_2(sinValue, cosValue));\n this.postTransform(Matrix.getTranslate(px, py));\n }\n }\n setSkew(kx, ky, px, py) {\n if (px == null || py == null) {\n this.mValues[0] = 1;\n this.mValues[1] = kx;\n this.mValues[2] = -0;\n this.mValues[3] = ky;\n this.mValues[4] = 1;\n this.mValues[5] = 0;\n this.mValues[6] = 0;\n this.mValues[7] = 0;\n this.mValues[8] = 1;\n }\n else {\n this.mValues = Matrix.getSkew(kx, ky, px, py);\n }\n }\n setConcat(a, b) {\n Matrix.multiply(this.mValues, a.mValues, b.mValues);\n return true;\n }\n preTranslate(dx, dy) {\n this.preTransform(Matrix.getTranslate(dx, dy));\n return true;\n }\n preScale(sx, sy, px, py) {\n this.preTransform(Matrix.getScale(sx, sy, px, py));\n return true;\n }\n preRotate(degrees, px, py) {\n if (px == null || py == null) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n this.preTransform(Matrix.getRotate_2(sin, cos));\n return true;\n }\n this.preTransform(Matrix.getRotate_3(degrees, px, py));\n return true;\n }\n preSkew(kx, ky, px, py) {\n this.preTransform(Matrix.getSkew(kx, ky, px, py));\n return true;\n }\n preConcat(other) {\n this.preTransform(other.mValues);\n return true;\n }\n postTranslate(dx, dy) {\n this.postTransform(Matrix.getTranslate(dx, dy));\n return true;\n }\n postScale(sx, sy, px, py) {\n this.postTransform(Matrix.getScale(sx, sy, px, py));\n return true;\n }\n postRotate(degrees, px, py) {\n this.postTransform(Matrix.getRotate_3(degrees, px, py));\n return true;\n }\n postSkew(kx, ky, px, py) {\n this.postTransform(Matrix.getSkew(kx, ky, px, py));\n return true;\n }\n postConcat(other) {\n this.postTransform(other.mValues);\n return true;\n }\n setRectToRect(src, dst, stf) {\n if (dst == null || src == null) {\n throw Error(`new NullPointerException()`);\n }\n let d = this;\n if (src.isEmpty()) {\n Matrix.reset(d.mValues);\n return false;\n }\n if (dst.isEmpty()) {\n d.mValues[0] = d.mValues[1] = d.mValues[2] = d.mValues[3] = d.mValues[4] = d.mValues[5] = d.mValues[6] = d.mValues[7] = 0;\n d.mValues[8] = 1;\n }\n else {\n let tx, sx = dst.width() / src.width();\n let ty, sy = dst.height() / src.height();\n let xLarger = false;\n if (stf != Matrix.ScaleToFit.FILL) {\n if (sx > sy) {\n xLarger = true;\n sx = sy;\n }\n else {\n sy = sx;\n }\n }\n tx = dst.left - src.left * sx;\n ty = dst.top - src.top * sy;\n if (stf == Matrix.ScaleToFit.CENTER || stf == Matrix.ScaleToFit.END) {\n let diff;\n if (xLarger) {\n diff = dst.width() - src.width() * sy;\n }\n else {\n diff = dst.height() - src.height() * sy;\n }\n if (stf == Matrix.ScaleToFit.CENTER) {\n diff = diff / 2;\n }\n if (xLarger) {\n tx += diff;\n }\n else {\n ty += diff;\n }\n }\n d.mValues[0] = sx;\n d.mValues[4] = sy;\n d.mValues[2] = tx;\n d.mValues[5] = ty;\n d.mValues[1] = d.mValues[3] = d.mValues[6] = d.mValues[7] = 0;\n }\n d.mValues[8] = 1;\n return true;\n }\n static checkPointArrays(src, srcIndex, dst, dstIndex, pointCount) {\n let srcStop = srcIndex + (pointCount << 1);\n let dstStop = dstIndex + (pointCount << 1);\n if ((pointCount | srcIndex | dstIndex | srcStop | dstStop) < 0 || srcStop > src.length || dstStop > dst.length) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n }\n mapPoints(dst, dstIndex = 0, src = dst, srcIndex = 0, pointCount = dst.length >> 1) {\n Matrix.checkPointArrays(src, srcIndex, dst, dstIndex, pointCount);\n const count = pointCount * 2;\n let tmpDest = dst;\n let inPlace = dst == src;\n if (inPlace) {\n tmpDest = androidui.util.ArrayCreator.newNumberArray(dstIndex + count);\n }\n for (let i = 0; i < count; i += 2) {\n let x = this.mValues[0] * src[i + srcIndex] + this.mValues[1] * src[i + srcIndex + 1] + this.mValues[2];\n let y = this.mValues[3] * src[i + srcIndex] + this.mValues[4] * src[i + srcIndex + 1] + this.mValues[5];\n tmpDest[i + dstIndex] = x;\n tmpDest[i + dstIndex + 1] = y;\n }\n if (inPlace) {\n System.arraycopy(tmpDest, dstIndex, dst, dstIndex, count);\n }\n }\n mapVectors(dst, dstIndex = 0, src = dst, srcIndex = 0, ptCount = dst.length >> 1) {\n Matrix.checkPointArrays(src, srcIndex, dst, dstIndex, ptCount);\n if (this.hasPerspective()) {\n let origin = [0., 0.];\n this.mapPoints(origin);\n this.mapPoints(dst, dstIndex, src, srcIndex, ptCount);\n const count = ptCount * 2;\n for (let i = 0; i < count; i += 2) {\n dst[dstIndex + i] = dst[dstIndex + i] - origin[0];\n dst[dstIndex + i + 1] = dst[dstIndex + i + 1] - origin[1];\n }\n }\n else {\n let copy = new Matrix(this.mValues);\n Matrix.setTranslate(copy.mValues, 0, 0);\n copy.mapPoints(dst, dstIndex, src, srcIndex, ptCount);\n }\n }\n mapRect(dst, src = dst) {\n if (dst == null || src == null) {\n throw Error(`new NullPointerException()`);\n }\n let corners = [src.left, src.top, src.right, src.top, src.right, src.bottom, src.left, src.bottom];\n this.mapPoints(corners);\n dst.left = Math.min(Math.min(corners[0], corners[2]), Math.min(corners[4], corners[6]));\n dst.right = Math.max(Math.max(corners[0], corners[2]), Math.max(corners[4], corners[6]));\n dst.top = Math.min(Math.min(corners[1], corners[3]), Math.min(corners[5], corners[7]));\n dst.bottom = Math.max(Math.max(corners[1], corners[3]), Math.max(corners[5], corners[7]));\n return (this.computeTypeMask() & Matrix.kRectStaysRect_Mask) != 0;\n }\n mapRadius(radius) {\n let src = [radius, 0., 0., radius];\n this.mapVectors(src, 0, src, 0, 2);\n let l1 = Matrix.getPointLength(src, 0);\n let l2 = Matrix.getPointLength(src, 2);\n return Math.sqrt(l1 * l2);\n }\n getValues(values) {\n if (values.length < 9) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n System.arraycopy(this.mValues, 0, values, 0, Matrix.MATRIX_SIZE);\n }\n setValues(values) {\n if (values.length < 9) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n System.arraycopy(values, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n toString() {\n let sb = new StringBuilder(64);\n sb.append(\"Matrix{\");\n this.toShortString(sb);\n sb.append('}');\n return sb.toString();\n }\n toShortString(sb) {\n let values = androidui.util.ArrayCreator.newNumberArray(9);\n this.getValues(values);\n sb.append('[');\n sb.append(values[0]);\n sb.append(\", \");\n sb.append(values[1]);\n sb.append(\", \");\n sb.append(values[2]);\n sb.append(\"][\");\n sb.append(values[3]);\n sb.append(\", \");\n sb.append(values[4]);\n sb.append(\", \");\n sb.append(values[5]);\n sb.append(\"][\");\n sb.append(values[6]);\n sb.append(\", \");\n sb.append(values[7]);\n sb.append(\", \");\n sb.append(values[8]);\n sb.append(']');\n }\n postTransform(matrix) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n Matrix.multiply(tmp, this.mValues, matrix);\n this.mValues = tmp;\n }\n preTransform(matrix) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n Matrix.multiply(tmp, matrix, this.mValues);\n this.mValues = tmp;\n }\n static getPointLength(src, index) {\n return Math.sqrt(src[index] * src[index] + src[index + 1] * src[index + 1]);\n }\n static multiply(dest, a, b) {\n dest[0] = b[0] * a[0] + b[1] * a[3] + b[2] * a[6];\n dest[1] = b[0] * a[1] + b[1] * a[4] + b[2] * a[7];\n dest[2] = b[0] * a[2] + b[1] * a[5] + b[2] * a[8];\n dest[3] = b[3] * a[0] + b[4] * a[3] + b[5] * a[6];\n dest[4] = b[3] * a[1] + b[4] * a[4] + b[5] * a[7];\n dest[5] = b[3] * a[2] + b[4] * a[5] + b[5] * a[8];\n dest[6] = b[6] * a[0] + b[7] * a[3] + b[8] * a[6];\n dest[7] = b[6] * a[1] + b[7] * a[4] + b[8] * a[7];\n dest[8] = b[6] * a[2] + b[7] * a[5] + b[8] * a[8];\n }\n static getTranslate(dx, dy) {\n return this.setTranslate(androidui.util.ArrayCreator.newNumberArray(9), dx, dy);\n }\n static setTranslate(dest, dx, dy) {\n dest[0] = 1;\n dest[1] = 0;\n dest[2] = dx;\n dest[3] = 0;\n dest[4] = 1;\n dest[5] = dy;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = 1;\n return dest;\n }\n static getScale(sx, sy, px, py) {\n if (px == null || py == null) {\n return [sx, 0, 0, 0, sy, 0, 0, 0, 1];\n }\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n Matrix.multiply(tmp2, tmp, Matrix.getScale(sx, sy));\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static getRotate_1(degrees) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n return Matrix.getRotate_2(sin, cos);\n }\n static getRotate_2(sin, cos) {\n return this.setRotate_2(androidui.util.ArrayCreator.newNumberArray(9), sin, cos);\n }\n static setRotate_1(dest, degrees) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n return Matrix.setRotate_2(dest, sin, cos);\n }\n static setRotate_2(dest, sin, cos) {\n dest[0] = cos;\n dest[1] = -sin;\n dest[2] = 0;\n dest[3] = sin;\n dest[4] = cos;\n dest[5] = 0;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = 1;\n return dest;\n }\n static getRotate_3(degrees, px, py) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n let rad = Math_toRadians(degrees);\n let cos = Math.cos(rad);\n let sin = Math.sin(rad);\n Matrix.multiply(tmp2, tmp, Matrix.getRotate_2(sin, cos));\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static getSkew(kx, ky, px, py) {\n if (px == null || py == null) {\n return [1, kx, 0, ky, 1, 0, 0, 0, 1];\n }\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n Matrix.multiply(tmp2, tmp, [1, kx, 0, ky, 1, 0, 0, 0, 1]);\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static reset(mtx) {\n mtx[0] = 1;\n mtx[1] = 0;\n mtx[2] = 0;\n mtx[3] = 0;\n mtx[4] = 1;\n mtx[5] = 0;\n mtx[6] = 0;\n mtx[7] = 0;\n mtx[8] = 1;\n }\n computeTypeMask() {\n let mask = 0;\n if (this.mValues[6] != 0. || this.mValues[7] != 0. || this.mValues[8] != 1.) {\n mask |= Matrix.kPerspective_Mask;\n }\n if (this.mValues[2] != 0. || this.mValues[5] != 0.) {\n mask |= Matrix.kTranslate_Mask;\n }\n let m00 = this.mValues[0];\n let m01 = this.mValues[1];\n let m10 = this.mValues[3];\n let m11 = this.mValues[4];\n if (m01 != 0. || m10 != 0.) {\n mask |= Matrix.kAffine_Mask;\n }\n if (m00 != 1. || m11 != 1.) {\n mask |= Matrix.kScale_Mask;\n }\n if ((mask & Matrix.kPerspective_Mask) == 0) {\n let im00 = m00 != 0 ? 1 : 0;\n let im01 = m01 != 0 ? 1 : 0;\n let im10 = m10 != 0 ? 1 : 0;\n let im11 = m11 != 0 ? 1 : 0;\n let dp0 = (im00 | im11) ^ 1;\n let dp1 = im00 & im11;\n let ds0 = (im01 | im10) ^ 1;\n let ds1 = im01 & im10;\n mask |= ((dp0 & ds1) | (dp1 & ds0)) << Matrix.kRectStaysRect_Shift;\n }\n return mask;\n }\n }\n Matrix.MSCALE_X = 0;\n Matrix.MSKEW_X = 1;\n Matrix.MTRANS_X = 2;\n Matrix.MSKEW_Y = 3;\n Matrix.MSCALE_Y = 4;\n Matrix.MTRANS_Y = 5;\n Matrix.MPERSP_0 = 6;\n Matrix.MPERSP_1 = 7;\n Matrix.MPERSP_2 = 8;\n Matrix.MATRIX_SIZE = 9;\n Matrix.IDENTITY_MATRIX = (() => {\n class _Inner extends Matrix {\n oops() {\n throw Error(`new IllegalStateException(\"Matrix can not be modified\")`);\n }\n set(src) {\n this.oops();\n }\n reset() {\n this.oops();\n }\n setTranslate(dx, dy) {\n this.oops();\n }\n setScale(sx, sy, px, py) {\n this.oops();\n }\n setRotate(degrees, px, py) {\n this.oops();\n }\n setSinCos(sinValue, cosValue, px, py) {\n this.oops();\n }\n setSkew(kx, ky, px, py) {\n this.oops();\n }\n setConcat(a, b) {\n this.oops();\n return false;\n }\n preTranslate(dx, dy) {\n this.oops();\n return false;\n }\n preScale(sx, sy, px, py) {\n this.oops();\n return false;\n }\n preRotate(degrees, px, py) {\n this.oops();\n return false;\n }\n preSkew(kx, ky, px, py) {\n this.oops();\n return false;\n }\n preConcat(other) {\n this.oops();\n return false;\n }\n postTranslate(dx, dy) {\n this.oops();\n return false;\n }\n postScale(sx, sy, px, py) {\n this.oops();\n return false;\n }\n postRotate(degrees, px, py) {\n this.oops();\n return false;\n }\n postSkew(kx, ky, px, py) {\n this.oops();\n return false;\n }\n postConcat(other) {\n this.oops();\n return false;\n }\n setRectToRect(src, dst, stf) {\n this.oops();\n return false;\n }\n setPolyToPoly(src, srcIndex, dst, dstIndex, pointCount) {\n this.oops();\n return false;\n }\n setValues(values) {\n this.oops();\n }\n }\n return new _Inner();\n })();\n Matrix.kIdentity_Mask = 0;\n Matrix.kTranslate_Mask = 0x01;\n Matrix.kScale_Mask = 0x02;\n Matrix.kAffine_Mask = 0x04;\n Matrix.kPerspective_Mask = 0x08;\n Matrix.kRectStaysRect_Mask = 0x10;\n Matrix.kUnknown_Mask = 0x80;\n Matrix.kAllMasks = Matrix.kTranslate_Mask | Matrix.kScale_Mask | Matrix.kAffine_Mask | Matrix.kPerspective_Mask | Matrix.kRectStaysRect_Mask;\n Matrix.kTranslate_Shift = 0;\n Matrix.kScale_Shift = 1;\n Matrix.kAffine_Shift = 2;\n Matrix.kPerspective_Shift = 3;\n Matrix.kRectStaysRect_Shift = 4;\n graphics.Matrix = Matrix;\n (function (Matrix) {\n (function (ScaleToFit) {\n ScaleToFit[ScaleToFit[\"FILL\"] = 0] = \"FILL\";\n ScaleToFit[ScaleToFit[\"START\"] = 1] = \"START\";\n ScaleToFit[ScaleToFit[\"CENTER\"] = 2] = \"CENTER\";\n ScaleToFit[ScaleToFit[\"END\"] = 3] = \"END\";\n })(Matrix.ScaleToFit || (Matrix.ScaleToFit = {}));\n var ScaleToFit = Matrix.ScaleToFit;\n })(Matrix = graphics.Matrix || (graphics.Matrix = {}));\n function Math_toRadians(angdeg) {\n return angdeg / 180.0 * Math.PI;\n }\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image) {\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n class NetImage {\n constructor(src, overrideImageRatio) {\n this.mImageWidth = 0;\n this.mImageHeight = 0;\n this.mOnLoads = new Set();\n this.mOnErrors = new Set();\n this.mImageLoaded = false;\n this.init(src);\n this.mOverrideImageRatio = overrideImageRatio;\n }\n init(src) {\n this.createImage();\n this.src = src;\n }\n createImage() {\n this.browserImage = new Image();\n }\n loadImage() {\n this.browserImage.src = this.mSrc;\n this.browserImage.onload = () => {\n this.mImageWidth = this.browserImage.width;\n this.mImageHeight = this.browserImage.height;\n this.fireOnLoad();\n };\n this.browserImage.onerror = () => {\n this.mImageWidth = this.mImageHeight = 0;\n this.fireOnError();\n };\n }\n get src() {\n return this.mSrc;\n }\n set src(value) {\n value = convertToAbsUrl(value);\n if (value !== this.mSrc) {\n this.mSrc = value;\n this.loadImage();\n }\n }\n get width() {\n return this.mImageWidth;\n }\n get height() {\n return this.mImageHeight;\n }\n getImageRatio() {\n if (this.mOverrideImageRatio)\n return this.mOverrideImageRatio;\n let url = this.src;\n if (!url)\n return 1;\n if (url.startsWith('data:'))\n return 1;\n let idx = url.lastIndexOf('.');\n if (idx > 0) {\n url = url.substring(0, idx);\n }\n if (url.endsWith('.9'))\n url = url.substring(0, url.length - 2);\n if (url.endsWith('@2x'))\n return 2;\n if (url.endsWith('@3x'))\n return 3;\n if (url.endsWith('@4x'))\n return 4;\n if (url.endsWith('@5x'))\n return 5;\n if (url.endsWith('@6x'))\n return 6;\n return 1;\n }\n isImageLoaded() {\n return this.mImageLoaded;\n }\n fireOnLoad() {\n this.mImageLoaded = true;\n for (let load of [...this.mOnLoads]) {\n load();\n }\n }\n fireOnError() {\n this.mImageLoaded = false;\n for (let error of [...this.mOnErrors]) {\n error();\n }\n }\n addLoadListener(onload, onerror) {\n if (onload) {\n this.mOnLoads.add(onload);\n }\n if (onerror) {\n this.mOnErrors.add(onerror);\n }\n }\n removeLoadListener(onload, onerror) {\n if (onload) {\n this.mOnLoads.delete(onload);\n }\n if (onerror) {\n this.mOnErrors.delete(onerror);\n }\n }\n recycle() {\n }\n getBorderPixels(callBack) {\n if (!callBack)\n return;\n let mTmpRect = new Rect();\n mTmpRect.set(0, 1, 1, this.height - 1);\n this.getPixels(mTmpRect, (leftBorder) => {\n mTmpRect.set(1, 0, this.width - 1, 1);\n this.getPixels(mTmpRect, (topBorder) => {\n mTmpRect.set(this.width - 1, 1, this.width, this.height - 1);\n this.getPixels(mTmpRect, (rightBorder) => {\n mTmpRect.set(1, this.height - 1, this.width - 1, this.height);\n this.getPixels(mTmpRect, (bottomBorder) => {\n callBack(leftBorder, topBorder, rightBorder, bottomBorder);\n });\n });\n });\n });\n }\n getPixels(bound, callBack) {\n if (!callBack)\n return;\n let canvasEle = document.createElement('canvas');\n if (!bound)\n bound = new Rect(0, 0, this.width, this.height);\n if (bound.isEmpty()) {\n callBack([]);\n return;\n }\n let w = bound.width();\n let h = bound.height();\n canvasEle.width = w;\n canvasEle.height = h;\n let canvas = canvasEle.getContext('2d');\n canvas.drawImage(this.browserImage, bound.left, bound.top, w, h, 0, 0, w, h);\n let data = canvas.getImageData(0, 0, w, h).data;\n let colorData = [];\n for (let i = 0; i < data.length; i += 4) {\n colorData.push(Color.rgba(data[i], data[i + 1], data[i + 2], data[i + 3]));\n }\n callBack(colorData);\n canvasEle.width = 0;\n canvasEle.height = 0;\n }\n }\n image.NetImage = NetImage;\n let convertA = document.createElement('a');\n function convertToAbsUrl(url) {\n convertA.href = url;\n return convertA.href;\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var Pools = android.util.Pools;\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n class Canvas {\n constructor(width, height) {\n this.mWidth = 0;\n this.mHeight = 0;\n this._saveCount = 0;\n this.mClipStateMap = new Map();\n this.mWidth = width;\n this.mHeight = height;\n this.mCurrentClip = Canvas.obtainRect();\n this.mCurrentClip.set(0, 0, this.mWidth, this.mHeight);\n this.initCanvasImpl();\n }\n static obtainRect(copy) {\n let rect = Canvas.sRectPool.acquire();\n if (!rect)\n rect = new Rect();\n if (copy)\n rect.set(copy);\n return rect;\n }\n static recycleRect(rect) {\n rect.setEmpty();\n Canvas.sRectPool.release(rect);\n }\n initCanvasImpl() {\n this.mCanvasElement = document.createElement(\"canvas\");\n this.mCanvasElement.width = this.mWidth;\n this.mCanvasElement.height = this.mHeight;\n this._mCanvasContent = this.mCanvasElement.getContext(\"2d\");\n this.save();\n }\n recycle() {\n Canvas.recycleRect(this.mCurrentClip);\n for (let rect of this.mClipStateMap.values()) {\n Canvas.recycleRect(rect);\n }\n this.recycleImpl();\n }\n recycleImpl() {\n if (this.mCanvasElement)\n this.mCanvasElement.width = this.mCanvasElement.height = 0;\n }\n getHeight() {\n return this.mHeight;\n }\n getWidth() {\n return this.mWidth;\n }\n isNativeAccelerated() {\n return false;\n }\n translate(dx, dy) {\n if (dx == 0 && dy == 0)\n return;\n if (this.mCurrentClip)\n this.mCurrentClip.offset(-dx, -dy);\n this.translateImpl(dx, dy);\n }\n translateImpl(dx, dy) {\n this._mCanvasContent.translate(dx, dy);\n }\n scale(sx, sy, px, py) {\n if (px || py)\n this.translate(px, py);\n this.scaleImpl(sx, sy);\n if (px || py)\n this.translate(-px, -py);\n }\n scaleImpl(sx, sy) {\n this._mCanvasContent.scale(sx, sy);\n }\n rotate(degrees, px, py) {\n if (px || py)\n this.translate(px, py);\n this.rotateImpl(degrees);\n if (px || py)\n this.translate(-px, -py);\n }\n rotateImpl(degrees) {\n this._mCanvasContent.rotate(degrees * Math.PI / 180);\n }\n concat(m) {\n let v = Canvas.TempMatrixValue;\n m.getValues(v);\n this.concatImpl(v[graphics.Matrix.MSCALE_X], v[graphics.Matrix.MSKEW_X], v[graphics.Matrix.MTRANS_X], v[graphics.Matrix.MSKEW_Y], v[graphics.Matrix.MSCALE_Y], v[graphics.Matrix.MTRANS_Y], v[graphics.Matrix.MPERSP_0], v[graphics.Matrix.MPERSP_1], v[graphics.Matrix.MPERSP_2]);\n }\n concatImpl(MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y, MPERSP_0, MPERSP_1, MPERSP_2) {\n this._mCanvasContent.transform(MSCALE_X, -MSKEW_X, -MSKEW_Y, MSCALE_Y, MTRANS_X, MTRANS_Y);\n }\n drawRGB(r, g, b) {\n this.drawARGB(255, r, g, b);\n }\n drawARGB(a, r, g, b) {\n this.drawARGBImpl(a, r, g, b);\n }\n drawColor(color) {\n this.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));\n }\n drawARGBImpl(a, r, g, b) {\n let preStyle = this._mCanvasContent.fillStyle;\n this._mCanvasContent.fillStyle = `rgba(${r},${g},${b},${a / 255})`;\n this._mCanvasContent.fillRect(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n this._mCanvasContent.fillStyle = preStyle;\n }\n clearColor() {\n this.clearColorImpl();\n }\n clearColorImpl() {\n this._mCanvasContent.clearRect(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n }\n save() {\n this.saveImpl();\n if (this.mCurrentClip)\n this.mClipStateMap.set(this._saveCount, Canvas.obtainRect(this.mCurrentClip));\n this._saveCount++;\n return this._saveCount;\n }\n saveImpl() {\n this._mCanvasContent.save();\n }\n restore() {\n this._saveCount--;\n this.restoreImpl();\n let savedClip = this.mClipStateMap.get(this._saveCount);\n if (savedClip) {\n this.mClipStateMap.delete(this._saveCount);\n this.mCurrentClip.set(savedClip);\n Canvas.recycleRect(savedClip);\n }\n }\n restoreImpl() {\n this._mCanvasContent.restore();\n }\n restoreToCount(saveCount) {\n if (saveCount <= 0)\n throw Error('saveCount can\\'t <= 0');\n while (saveCount <= this._saveCount) {\n this.restore();\n }\n }\n getSaveCount() {\n return this._saveCount;\n }\n clipRect(...args) {\n let rect = Canvas.obtainRect();\n if (args.length === 1) {\n rect.set(args[0]);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n rect.set(left, t, right, bottom);\n }\n if (args.length === 4 || (!args[4] && !args[5] && !args[6] && !args[7])) {\n this.clipRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()));\n }\n else if (args.length === 8 && (args[4] != 0 || args[5] != 0 || args[6] != 0 || args[7] != 0)) {\n this.clipRoundRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()), args[4], args[5], args[6], args[7]);\n }\n this.mCurrentClip.intersect(rect);\n let r = rect.isEmpty();\n Canvas.recycleRect(rect);\n return r;\n }\n clipRectImpl(left, top, width, height) {\n this._mCanvasContent.beginPath();\n this._mCanvasContent.rect(left, top, width, height);\n this._mCanvasContent.clip();\n }\n clipRoundRect(r, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n let rect = Canvas.obtainRect(r);\n this.clipRoundRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this.mCurrentClip.intersect(rect);\n let empty = rect.isEmpty();\n Canvas.recycleRect(rect);\n return empty;\n }\n clipRoundRectImpl(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n this.doRoundRectPath(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this._mCanvasContent.clip();\n }\n doRoundRectPath(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n let scale1 = height / (radiusTopLeft + radiusBottomLeft);\n let scale2 = height / (radiusTopRight + radiusBottomRight);\n let scale3 = width / (radiusTopLeft + radiusTopRight);\n let scale4 = width / (radiusBottomLeft + radiusBottomRight);\n let scale = Math.min(scale1, scale2, scale3, scale4);\n if (scale < 1) {\n radiusTopLeft *= scale;\n radiusTopRight *= scale;\n radiusBottomRight *= scale;\n radiusBottomLeft *= scale;\n }\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n ctx.moveTo(left + radiusTopLeft, top);\n ctx.arcTo(left + width, top, left + width, top + radiusTopRight, radiusTopRight);\n ctx.arcTo(left + width, top + height, left + width - radiusBottomRight, top + height, radiusBottomRight);\n ctx.arcTo(left, top + height, left, top + height - radiusBottomLeft, radiusBottomLeft);\n ctx.arcTo(left, top, left + radiusTopLeft, top, radiusTopLeft);\n ctx.closePath();\n }\n getClipBounds(bounds) {\n if (!this.mCurrentClip)\n this.mCurrentClip = Canvas.obtainRect();\n let rect = bounds || Canvas.obtainRect();\n rect.set(this.mCurrentClip);\n return rect;\n }\n quickReject(...args) {\n if (!this.mCurrentClip)\n return false;\n if (args.length == 1) {\n return !this.mCurrentClip.intersects(args[0]);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return !this.mCurrentClip.intersects(left, t, right, bottom);\n }\n }\n drawCanvas(canvas, offsetX = 0, offsetY = 0) {\n this.drawCanvasImpl(canvas, offsetX, offsetY);\n }\n drawCanvasImpl(canvas, offsetX, offsetY) {\n this._mCanvasContent.drawImage(canvas.mCanvasElement, offsetX, offsetY);\n }\n drawImage(image, srcRect, dstRect, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n this.drawImageImpl(image, srcRect, dstRect);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawImageImpl(image, srcRect, dstRect) {\n if (!dstRect) {\n if (!srcRect) {\n this._mCanvasContent.drawImage(image.browserImage, 0, 0);\n }\n else {\n this._mCanvasContent.drawImage(image.browserImage, srcRect.left, srcRect.top, srcRect.width(), srcRect.height(), 0, 0, srcRect.width(), srcRect.height());\n }\n }\n else {\n if (dstRect.isEmpty())\n return;\n if (!srcRect) {\n this._mCanvasContent.drawImage(image.browserImage, dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\n }\n else {\n this._mCanvasContent.drawImage(image.browserImage, srcRect.left, srcRect.top, srcRect.width(), srcRect.height(), dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\n }\n }\n }\n drawRect(...args) {\n if (args.length == 2) {\n let rect = args[0];\n this.drawRect(rect.left, rect.top, rect.right, rect.bottom, args[1]);\n }\n else {\n let [left, top, right, bottom, paint] = args;\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawRectImpl(left, top, right - left, bottom - top, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n }\n drawRectImpl(left, top, width, height, style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.strokeRect(left, top, width, height);\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.fillRect(left, top, width, height);\n this._mCanvasContent.strokeRect(left, top, width, height);\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fillRect(left, top, width, height);\n break;\n }\n }\n applyFillOrStrokeToContent(style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.stroke();\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.fill();\n this._mCanvasContent.stroke();\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fill();\n break;\n }\n }\n drawOval(oval, paint) {\n if (oval == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawOvalImpl(oval, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawOvalImpl(oval, style) {\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n let cx = oval.centerX();\n let cy = oval.centerY();\n let rx = oval.width() / 2;\n let ry = oval.height() / 2;\n ctx.save();\n ctx.translate(cx - rx, cy - ry);\n ctx.scale(rx, ry);\n ctx.arc(1, 1, 1, 0, 2 * Math.PI, false);\n ctx.restore();\n this.applyFillOrStrokeToContent(style);\n }\n drawCircle(cx, cy, radius, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawCircleImpl(cx, cy, radius, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawCircleImpl(cx, cy, radius, style) {\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, 2 * Math.PI, false);\n this.applyFillOrStrokeToContent(style);\n }\n drawArc(oval, startAngle, sweepAngle, useCenter, paint) {\n if (oval == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawArcImpl(oval, startAngle, sweepAngle, useCenter, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n let ctx = this._mCanvasContent;\n ctx.save();\n ctx.beginPath();\n let cx = oval.centerX();\n let cy = oval.centerY();\n let rx = oval.width() / 2;\n let ry = oval.height() / 2;\n ctx.translate(cx - rx, cy - ry);\n ctx.scale(rx, ry);\n ctx.arc(1, 1, 1, startAngle / 180 * Math.PI, (sweepAngle + startAngle) / 180 * Math.PI, false);\n if (useCenter) {\n ctx.lineTo(1, 1);\n ctx.closePath();\n }\n ctx.restore();\n this.applyFillOrStrokeToContent(style);\n }\n drawRoundRect(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, paint) {\n if (rect == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n this.doRoundRectPath(rect.left, rect.top, rect.width(), rect.height(), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this.applyFillOrStrokeToContent(style);\n }\n drawPath(path, paint) {\n }\n drawText_count(text, index, count, x, y, paint) {\n if ((index | count | (index + count) | (text.length - index - count)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n this.drawText(text.substr(index, count), x, y, paint);\n }\n drawText_end(text, start, end, x, y, paint) {\n if ((start | end | (end - start) | (text.length - end)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n this.drawText(text.substring(start, end), x, y, paint);\n }\n drawText(text, x, y, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n this.drawTextImpl(text, x, y, paint ? paint.getStyle() : null);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawTextImpl(text, x, y, style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.strokeText(text, x, y);\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.strokeText(text, x, y);\n this._mCanvasContent.fillText(text, x, y);\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fillText(text, x, y);\n break;\n }\n }\n drawTextRun_count(text, index, count, contextIndex, contextCount, x, y, dir, paint) {\n this.drawText_count(text, index, count, x, y, paint);\n }\n drawTextRun_end(text, start, end, contextStart, contextEnd, x, y, dir, paint) {\n this.drawText_end(text, start, end, x, y, paint);\n }\n static measureText(text, textSize) {\n if (textSize == null || textSize === 0)\n return 0;\n return Canvas.measureTextImpl(text, textSize);\n }\n static measureTextImpl(text, textSize) {\n let width = 0;\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.charCodeAt(i);\n let cWidth = Canvas._measureCacheMap.get(c);\n if (cWidth == null) {\n cWidth = Canvas._measureTextContext.measureText(text[i]).width;\n Canvas._measureCacheMap.set(c, cWidth);\n }\n width += (cWidth * textSize / Canvas._measureCacheTextSize);\n }\n return width;\n }\n static getMeasureTextFontFamily() {\n let fontParts = Canvas._measureTextContext.font.split(' ');\n return fontParts[fontParts.length - 1];\n }\n setColor(color, style) {\n if (color != null) {\n this.setColorImpl(color, style);\n }\n }\n setColorImpl(color, style) {\n let colorS = Color.toRGBAFunc(color);\n switch (style) {\n case graphics.Paint.Style.STROKE:\n if (Color.parseColor(this._mCanvasContent.strokeStyle + '', 0) != color) {\n this._mCanvasContent.strokeStyle = colorS;\n }\n break;\n case graphics.Paint.Style.FILL:\n if (Color.parseColor(this._mCanvasContent.fillStyle + '', 0) != color) {\n this._mCanvasContent.fillStyle = colorS;\n }\n break;\n default:\n case graphics.Paint.Style.FILL_AND_STROKE:\n if (Color.parseColor(this._mCanvasContent.fillStyle + '', 0) != color) {\n this._mCanvasContent.fillStyle = colorS;\n }\n if (Color.parseColor(this._mCanvasContent.strokeStyle + '', 0) != color) {\n this._mCanvasContent.strokeStyle = colorS;\n }\n break;\n }\n }\n multiplyGlobalAlpha(alpha) {\n if (typeof alpha === 'number' && alpha < 1) {\n this.multiplyGlobalAlphaImpl(alpha);\n }\n }\n multiplyGlobalAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha *= alpha;\n }\n setGlobalAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.setGlobalAlphaImpl(alpha);\n }\n }\n setGlobalAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha = alpha;\n }\n setTextAlign(align) {\n if (align != null)\n this.setTextAlignImpl(align);\n }\n setTextAlignImpl(align) {\n this._mCanvasContent.textAlign = align;\n }\n setLineWidth(width) {\n if (width != null)\n this.setLineWidthImpl(width);\n }\n setLineWidthImpl(width) {\n this._mCanvasContent.lineWidth = width;\n }\n setLineCap(lineCap) {\n if (lineCap != null)\n this.setLineCapImpl(lineCap);\n }\n setLineCapImpl(lineCap) {\n this._mCanvasContent.lineCap = lineCap;\n }\n setLineJoin(lineJoin) {\n if (lineJoin != null)\n this.setLineJoinImpl(lineJoin);\n }\n setLineJoinImpl(lineJoin) {\n this._mCanvasContent.lineJoin = lineJoin;\n }\n setShadow(radius, dx, dy, color) {\n if (radius > 0) {\n this.setShadowImpl(radius, dx, dy, color);\n }\n }\n setShadowImpl(radius, dx, dy, color) {\n this._mCanvasContent.shadowBlur = radius;\n this._mCanvasContent.shadowOffsetX = dx;\n this._mCanvasContent.shadowOffsetY = dy;\n this._mCanvasContent.shadowColor = Color.toRGBAFunc(color);\n }\n setFontSize(size) {\n if (size != null) {\n this.setFontSizeImpl(size);\n }\n }\n setFontSizeImpl(size) {\n let cFont = this._mCanvasContent.font;\n let fontParts = cFont.split(' ');\n if (Number.parseFloat(fontParts[fontParts.length - 2]) == size)\n return;\n fontParts[fontParts.length - 2] = size + 'px';\n this._mCanvasContent.font = fontParts.join(' ');\n }\n setFont(fontName) {\n if (fontName != null) {\n this.setFontImpl(fontName);\n }\n }\n setFontImpl(fontName) {\n let cFont = this._mCanvasContent.font;\n let fontParts = cFont.split(' ');\n fontParts[fontParts.length - 1] = fontName;\n let font = fontParts.join(' ');\n if (font != cFont)\n this._mCanvasContent.font = font;\n }\n isImageSmoothingEnabled() {\n return this.isImageSmoothingEnabledImpl();\n }\n isImageSmoothingEnabledImpl() {\n return this._mCanvasContent['imageSmoothingEnabled'] || this._mCanvasContent['webkitImageSmoothingEnabled'];\n }\n setImageSmoothingEnabled(enable) {\n this.setImageSmoothingEnabledImpl(enable);\n }\n setImageSmoothingEnabledImpl(enable) {\n if ('imageSmoothingEnabled' in this._mCanvasContent) {\n this._mCanvasContent['imageSmoothingEnabled'] = enable;\n }\n else if ('webkitImageSmoothingEnabled' in this._mCanvasContent) {\n this._mCanvasContent['webkitImageSmoothingEnabled'] = enable;\n }\n }\n }\n Canvas.TempMatrixValue = androidui.util.ArrayCreator.newNumberArray(9);\n Canvas.DIRECTION_LTR = 0;\n Canvas.DIRECTION_RTL = 1;\n Canvas.sRectPool = new Pools.SynchronizedPool(20);\n Canvas._measureTextContext = document.createElement('canvas').getContext('2d');\n Canvas._measureCacheTextSize = 1000;\n Canvas._static = (() => {\n Canvas._measureTextContext.font = Canvas._measureCacheTextSize + 'px ' + Canvas.getMeasureTextFontFamily();\n })();\n Canvas._measureCacheMap = new Map();\n graphics.Canvas = Canvas;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_1) {\n var Rect = android.graphics.Rect;\n var PixelFormat = android.graphics.PixelFormat;\n var WeakReference = java.lang.ref.WeakReference;\n var StateSet = android.util.StateSet;\n class Drawable {\n constructor() {\n this.mBounds = Drawable.ZERO_BOUNDS_RECT;\n this.mStateSet = StateSet.WILD_CARD;\n this.mLevel = 0;\n this.mVisible = true;\n this.mIgnoreNotifySizeChange = false;\n }\n setBounds(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.setBounds(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, top = 0, right = 0, bottom = 0] = args;\n let oldBounds = this.mBounds;\n if (oldBounds == Drawable.ZERO_BOUNDS_RECT) {\n oldBounds = this.mBounds = new Rect();\n }\n if (oldBounds.left != left || oldBounds.top != top ||\n oldBounds.right != right || oldBounds.bottom != bottom) {\n if (!oldBounds.isEmpty()) {\n this.invalidateSelf();\n }\n this.mBounds.set(left, top, right, bottom);\n this.onBoundsChange(this.mBounds);\n }\n }\n }\n copyBounds(bounds = new Rect()) {\n bounds.set(this.mBounds);\n return bounds;\n }\n getBounds() {\n if (this.mBounds == Drawable.ZERO_BOUNDS_RECT) {\n this.mBounds = new Rect();\n }\n return this.mBounds;\n }\n setDither(dither) { }\n setCallback(cb) {\n this.mCallback = new WeakReference(cb);\n }\n getCallback() {\n if (this.mCallback != null) {\n return this.mCallback.get();\n }\n return null;\n }\n setIgnoreNotifySizeChange(isIgnore) {\n this.mIgnoreNotifySizeChange = isIgnore;\n }\n notifySizeChangeSelf() {\n if (this.mIgnoreNotifySizeChange)\n return;\n let callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateSelf() {\n let callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleSelf(what, when) {\n let callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleSelf(what) {\n let callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getAlpha() {\n return 0xFF;\n }\n isStateful() {\n return false;\n }\n setState(stateSet) {\n if (this.mStateSet + '' !== stateSet + '') {\n this.mStateSet = stateSet;\n return this.onStateChange(stateSet);\n }\n return false;\n }\n getState() {\n return this.mStateSet;\n }\n jumpToCurrentState() {\n }\n getCurrent() {\n return this;\n }\n setLevel(level) {\n if (this.mLevel != level) {\n this.mLevel = level;\n return this.onLevelChange(level);\n }\n return false;\n }\n getLevel() {\n return this.mLevel;\n }\n setVisible(visible, restart) {\n let changed = this.mVisible != visible;\n if (changed) {\n this.mVisible = visible;\n this.invalidateSelf();\n }\n return changed;\n }\n isVisible() {\n return this.mVisible;\n }\n setAutoMirrored(mirrored) {\n }\n isAutoMirrored() {\n return false;\n }\n getOpacity() {\n return PixelFormat.TRANSLUCENT;\n }\n static resolveOpacity(op1, op2) {\n if (op1 == op2) {\n return op1;\n }\n if (op1 == PixelFormat.UNKNOWN || op2 == PixelFormat.UNKNOWN) {\n return PixelFormat.UNKNOWN;\n }\n if (op1 == PixelFormat.TRANSLUCENT || op2 == PixelFormat.TRANSLUCENT) {\n return PixelFormat.TRANSLUCENT;\n }\n if (op1 == PixelFormat.TRANSPARENT || op2 == PixelFormat.TRANSPARENT) {\n return PixelFormat.TRANSPARENT;\n }\n return PixelFormat.OPAQUE;\n }\n onStateChange(state) {\n return false;\n }\n onLevelChange(level) {\n return false;\n }\n onBoundsChange(bounds) {\n }\n getIntrinsicWidth() {\n return -1;\n }\n getIntrinsicHeight() {\n return -1;\n }\n getMinimumWidth() {\n let intrinsicWidth = this.getIntrinsicWidth();\n return intrinsicWidth > 0 ? intrinsicWidth : 0;\n }\n getMinimumHeight() {\n let intrinsicHeight = this.getIntrinsicHeight();\n return intrinsicHeight > 0 ? intrinsicHeight : 0;\n }\n getPadding(padding) {\n padding.set(0, 0, 0, 0);\n return false;\n }\n mutate() {\n return this;\n }\n getConstantState() {\n return null;\n }\n static createFromXml(r, parser) {\n let drawable;\n let name = parser.tagName.toLowerCase();\n switch (name) {\n case \"selector\":\n drawable = new drawable_1.StateListDrawable();\n break;\n case \"layer-list\":\n drawable = new drawable_1.LayerDrawable(null);\n break;\n case \"color\":\n drawable = new drawable_1.ColorDrawable();\n break;\n case \"scale\":\n drawable = new drawable_1.ScaleDrawable();\n break;\n case \"clip\":\n drawable = new drawable_1.ClipDrawable();\n break;\n case \"rotate\":\n drawable = new drawable_1.RotateDrawable();\n break;\n case \"animation-list\":\n drawable = new drawable_1.AnimationDrawable();\n break;\n case \"inset\":\n drawable = new drawable_1.InsetDrawable(null, 0);\n break;\n case \"bitmap\":\n let srcAttr = parser.getAttribute('src');\n if (!srcAttr)\n throw Error(\"XmlPullParserException: bitmap tag must have 'src' attribute\");\n drawable = r.getDrawable(srcAttr);\n break;\n default:\n throw Error(\"XmlPullParserException: invalid drawable tag \" + name);\n }\n drawable.inflate(r, parser);\n return drawable;\n }\n inflate(r, parser) {\n this.mVisible = (parser.getAttribute('android:visible') !== 'false');\n }\n }\n Drawable.ZERO_BOUNDS_RECT = new Rect();\n drawable_1.Drawable = Drawable;\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n class ColorDrawable extends drawable.Drawable {\n constructor(color) {\n super();\n this.mMutated = false;\n this.mPaint = new graphics.Paint();\n this.mState = new ColorState();\n if (color !== undefined) {\n this.setColor(color);\n }\n }\n _setStateCopyFrom(state) {\n this.mState = new ColorState(state);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState = new ColorState(this.mState);\n this.mMutated = true;\n }\n return this;\n }\n draw(canvas) {\n if ((this.mState.mUseColor >>> 24) != 0) {\n this.mPaint.setColor(this.mState.mUseColor);\n canvas.drawRect(this.getBounds(), this.mPaint);\n }\n }\n getColor() {\n return this.mState.mUseColor;\n }\n setColor(color) {\n if (this.mState.mBaseColor != color || this.mState.mUseColor != color) {\n this.invalidateSelf();\n this.mState.mBaseColor = this.mState.mUseColor = color;\n }\n }\n getAlpha() {\n return this.mState.mUseColor >>> 24;\n }\n setAlpha(alpha) {\n alpha += alpha >> 7;\n let baseAlpha = this.mState.mBaseColor >>> 24;\n let useAlpha = baseAlpha * alpha >> 8;\n let oldUseColor = this.mState.mUseColor;\n this.mState.mUseColor = (this.mState.mBaseColor << 8 >>> 8) | (useAlpha << 24);\n if (oldUseColor != this.mState.mUseColor) {\n this.invalidateSelf();\n }\n }\n getOpacity() {\n switch (this.mState.mUseColor >>> 24) {\n case 255:\n return graphics.PixelFormat.OPAQUE;\n case 0:\n return graphics.PixelFormat.TRANSPARENT;\n }\n return graphics.PixelFormat.TRANSLUCENT;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let state = this.mState;\n state.mBaseColor = androidui.attr.AttrValueParser.parseColor(r, parser.innerText, state.mBaseColor);\n state.mUseColor = state.mBaseColor;\n }\n getConstantState() {\n return this.mState;\n }\n }\n drawable.ColorDrawable = ColorDrawable;\n class ColorState {\n constructor(state) {\n this.mBaseColor = 0;\n this.mUseColor = 0;\n if (state != null) {\n this.mBaseColor = state.mBaseColor;\n this.mUseColor = state.mUseColor;\n }\n }\n newDrawable() {\n let c = new ColorDrawable();\n c._setStateCopyFrom(this);\n return c;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Drawable = android.graphics.drawable.Drawable;\n class ScrollBarDrawable extends Drawable {\n constructor(...args) {\n super(...args);\n this.mRange = 0;\n this.mOffset = 0;\n this.mExtent = 0;\n this.mVertical = false;\n this.mChanged = false;\n this.mRangeChanged = false;\n this.mTempBounds = new graphics.Rect();\n this.mAlwaysDrawHorizontalTrack = false;\n this.mAlwaysDrawVerticalTrack = false;\n }\n setAlwaysDrawHorizontalTrack(alwaysDrawTrack) {\n this.mAlwaysDrawHorizontalTrack = alwaysDrawTrack;\n }\n setAlwaysDrawVerticalTrack(alwaysDrawTrack) {\n this.mAlwaysDrawVerticalTrack = alwaysDrawTrack;\n }\n getAlwaysDrawVerticalTrack() {\n return this.mAlwaysDrawVerticalTrack;\n }\n getAlwaysDrawHorizontalTrack() {\n return this.mAlwaysDrawHorizontalTrack;\n }\n setParameters(range, offset, extent, vertical) {\n if (this.mVertical != vertical) {\n this.mChanged = true;\n }\n if (this.mRange != range || this.mOffset != offset || this.mExtent != extent) {\n this.mRangeChanged = true;\n }\n this.mRange = range;\n this.mOffset = offset;\n this.mExtent = extent;\n this.mVertical = vertical;\n }\n draw(canvas) {\n const vertical = this.mVertical;\n const extent = this.mExtent;\n const range = this.mRange;\n let drawTrack = true;\n let drawThumb = true;\n if (extent <= 0 || range <= extent) {\n drawTrack = vertical ? this.mAlwaysDrawVerticalTrack : this.mAlwaysDrawHorizontalTrack;\n drawThumb = false;\n }\n let r = this.getBounds();\n if (drawTrack) {\n this.drawTrack(canvas, r, vertical);\n }\n if (drawThumb) {\n let size = vertical ? r.height() : r.width();\n let thickness = vertical ? r.width() : r.height();\n let length = Math.round(size * extent / range);\n let offset = Math.round((size - length) * this.mOffset / (range - extent));\n let minLength = thickness * 2;\n if (length < minLength) {\n length = minLength;\n }\n if (offset + length > size) {\n offset = size - length;\n }\n this.drawThumb(canvas, r, offset, length, vertical);\n }\n }\n onBoundsChange(bounds) {\n super.onBoundsChange(bounds);\n this.mChanged = true;\n }\n drawTrack(canvas, bounds, vertical) {\n let track;\n if (vertical) {\n track = this.mVerticalTrack;\n }\n else {\n track = this.mHorizontalTrack;\n }\n if (track != null) {\n if (this.mChanged) {\n track.setBounds(bounds);\n }\n track.draw(canvas);\n }\n }\n drawThumb(canvas, bounds, offset, length, vertical) {\n const thumbRect = this.mTempBounds;\n const changed = this.mRangeChanged || this.mChanged;\n if (changed) {\n if (vertical) {\n thumbRect.set(bounds.left, bounds.top + offset, bounds.right, bounds.top + offset + length);\n }\n else {\n thumbRect.set(bounds.left + offset, bounds.top, bounds.left + offset + length, bounds.bottom);\n }\n }\n if (vertical) {\n const thumb = this.mVerticalThumb;\n if (changed)\n thumb.setBounds(thumbRect);\n thumb.draw(canvas);\n }\n else {\n const thumb = this.mHorizontalThumb;\n if (changed)\n thumb.setBounds(thumbRect);\n thumb.draw(canvas);\n }\n }\n setVerticalThumbDrawable(thumb) {\n if (thumb != null) {\n this.mVerticalThumb = thumb;\n }\n }\n setVerticalTrackDrawable(track) {\n this.mVerticalTrack = track;\n }\n setHorizontalThumbDrawable(thumb) {\n if (thumb != null) {\n this.mHorizontalThumb = thumb;\n }\n }\n setHorizontalTrackDrawable(track) {\n this.mHorizontalTrack = track;\n }\n getSize(vertical) {\n if (vertical) {\n return (this.mVerticalTrack != null ?\n this.mVerticalTrack : this.mVerticalThumb).getIntrinsicWidth();\n }\n else {\n return (this.mHorizontalTrack != null ?\n this.mHorizontalTrack : this.mHorizontalThumb).getIntrinsicHeight();\n }\n }\n setAlpha(alpha) {\n if (this.mVerticalTrack != null) {\n this.mVerticalTrack.setAlpha(alpha);\n }\n this.mVerticalThumb.setAlpha(alpha);\n if (this.mHorizontalTrack != null) {\n this.mHorizontalTrack.setAlpha(alpha);\n }\n this.mHorizontalThumb.setAlpha(alpha);\n }\n getAlpha() {\n return this.mVerticalThumb.getAlpha();\n }\n getOpacity() {\n return graphics.PixelFormat.TRANSLUCENT;\n }\n toString() {\n return \"ScrollBarDrawable: range=\" + this.mRange + \" offset=\" + this.mOffset +\n \" extent=\" + this.mExtent + (this.mVertical ? \" V\" : \" H\");\n }\n }\n drawable.ScrollBarDrawable = ScrollBarDrawable;\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_2) {\n var Integer = java.lang.Integer;\n class InsetDrawable extends drawable_2.Drawable {\n constructor(drawable, insetLeft, insetTop = insetLeft, insetRight = insetTop, insetBottom = insetRight) {\n super();\n this.mTmpRect = new graphics.Rect();\n this.mMutated = false;\n this.mInsetState = new InsetState(null, this);\n this.mInsetState.mDrawable = drawable;\n this.mInsetState.mInsetLeft = insetLeft;\n this.mInsetState.mInsetTop = insetTop;\n this.mInsetState.mInsetRight = insetRight;\n this.mInsetState.mInsetBottom = insetBottom;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n this.mInsetState.mDrawable = null;\n let state = this.mInsetState;\n let a = r.obtainAttributes(parser);\n let dr = a.getDrawable(\"android:drawable\");\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = drawable_2.Drawable.createFromXml(r, parser.children[0]);\n }\n if (!dr) {\n throw Error(\" tag requires a 'drawable' attribute or child tag defining a drawable\");\n }\n let inset = a.getDimensionPixelOffset(\"android:inset\", Integer.MIN_VALUE);\n if (inset != Integer.MIN_VALUE) {\n state.mInsetLeft = inset;\n state.mInsetTop = inset;\n state.mInsetRight = inset;\n state.mInsetBottom = inset;\n }\n state.mInsetLeft = a.getDimensionPixelOffset(\"android:insetLeft\", state.mInsetLeft);\n state.mInsetTop = a.getDimensionPixelOffset(\"android:insetTop\", state.mInsetTop);\n state.mInsetRight = a.getDimensionPixelOffset(\"android:insetRight\", state.mInsetRight);\n state.mInsetBottom = a.getDimensionPixelOffset(\"android:insetBottom\", state.mInsetBottom);\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n this.mInsetState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n let pad = this.mInsetState.mDrawable.getPadding(padding);\n padding.left += this.mInsetState.mInsetLeft;\n padding.right += this.mInsetState.mInsetRight;\n padding.top += this.mInsetState.mInsetTop;\n padding.bottom += this.mInsetState.mInsetBottom;\n if (pad || (this.mInsetState.mInsetLeft | this.mInsetState.mInsetRight |\n this.mInsetState.mInsetTop | this.mInsetState.mInsetBottom) != 0) {\n return true;\n }\n else {\n return false;\n }\n }\n setVisible(visible, restart) {\n this.mInsetState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mInsetState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mInsetState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mInsetState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mInsetState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mInsetState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(bounds) {\n const r = this.mTmpRect;\n r.set(bounds);\n r.left += this.mInsetState.mInsetLeft;\n r.top += this.mInsetState.mInsetTop;\n r.right -= this.mInsetState.mInsetRight;\n r.bottom -= this.mInsetState.mInsetBottom;\n this.mInsetState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n getIntrinsicWidth() {\n return this.mInsetState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mInsetState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mInsetState.canConstantState()) {\n return this.mInsetState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mInsetState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mInsetState.mDrawable;\n }\n }\n drawable_2.InsetDrawable = InsetDrawable;\n class InsetState {\n constructor(orig, owner) {\n this.mInsetLeft = 0;\n this.mInsetTop = 0;\n this.mInsetRight = 0;\n this.mInsetBottom = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mInsetLeft = orig.mInsetLeft;\n this.mInsetTop = orig.mInsetTop;\n this.mInsetRight = orig.mInsetRight;\n this.mInsetBottom = orig.mInsetBottom;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n let drawable = new InsetDrawable(null, 0);\n drawable.mInsetState = new InsetState(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_3) {\n class ShadowDrawable extends drawable_3.Drawable {\n constructor(drawable, radius, dx, dy, color) {\n super();\n this.mMutated = false;\n this.mState = new DrawableState(null, this);\n this.mState.mDrawable = drawable;\n this.mState.shadowDx = dx;\n this.mState.shadowDy = dy;\n this.mState.shadowRadius = radius;\n this.mState.shadowColor = color;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n setShadow(radius, dx, dy, color) {\n this.mState.shadowDx = dx;\n this.mState.shadowDy = dy;\n this.mState.shadowRadius = radius;\n this.mState.shadowColor = color;\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n if (!this.mState.shadowRadius || graphics.Color.alpha(this.mState.shadowColor) === 0) {\n this.mState.mDrawable.draw(canvas);\n return;\n }\n let saveCount = canvas.save();\n canvas.setShadow(this.mState.shadowRadius, this.mState.shadowDx, this.mState.shadowDy, this.mState.shadowColor);\n this.mState.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return graphics.PixelFormat.TRANSPARENT;\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(bounds) {\n this.mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n }\n drawable_3.ShadowDrawable = ShadowDrawable;\n class DrawableState {\n constructor(orig, owner) {\n this.shadowDx = 0;\n this.shadowDy = 0;\n this.shadowRadius = 0;\n this.shadowColor = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.shadowDx = orig.shadowDx;\n this.shadowDy = orig.shadowDy;\n this.shadowRadius = orig.shadowRadius;\n this.shadowColor = orig.shadowColor;\n }\n }\n newDrawable() {\n let drawable = new ShadowDrawable(null, 0, 0, 0, 0);\n drawable.mState = new DrawableState(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n class RoundRectDrawable extends drawable.Drawable {\n constructor(color, radiusTopLeft, radiusTopRight = radiusTopLeft, radiusBottomRight = radiusTopRight, radiusBottomLeft = radiusBottomRight) {\n super();\n this.mMutated = false;\n this.mPaint = new graphics.Paint();\n this.mState = new State();\n this.setColor(color);\n this.mState.mRadiusTopLeft = radiusTopLeft;\n this.mState.mRadiusTopRight = radiusTopRight;\n this.mState.mRadiusBottomRight = radiusBottomRight;\n this.mState.mRadiusBottomLeft = radiusBottomLeft;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState = new State(this.mState);\n this.mMutated = true;\n }\n return this;\n }\n draw(canvas) {\n if ((this.mState.mUseColor >>> 24) != 0) {\n this.mPaint.setColor(this.mState.mUseColor);\n canvas.drawRoundRect(this.getBounds(), this.mState.mRadiusTopLeft, this.mState.mRadiusTopRight, this.mState.mRadiusBottomRight, this.mState.mRadiusBottomLeft, this.mPaint);\n }\n }\n getColor() {\n return this.mState.mUseColor;\n }\n setColor(color) {\n if (this.mState.mBaseColor != color || this.mState.mUseColor != color) {\n this.invalidateSelf();\n this.mState.mBaseColor = this.mState.mUseColor = color;\n }\n }\n getAlpha() {\n return this.mState.mUseColor >>> 24;\n }\n setAlpha(alpha) {\n alpha += alpha >> 7;\n let baseAlpha = this.mState.mBaseColor >>> 24;\n let useAlpha = baseAlpha * alpha >> 8;\n let oldUseColor = this.mState.mUseColor;\n this.mState.mUseColor = (this.mState.mBaseColor << 8 >>> 8) | (useAlpha << 24);\n if (oldUseColor != this.mState.mUseColor) {\n this.invalidateSelf();\n }\n }\n getOpacity() {\n switch (this.mState.mUseColor >>> 24) {\n case 255:\n return graphics.PixelFormat.OPAQUE;\n case 0:\n return graphics.PixelFormat.TRANSPARENT;\n }\n return graphics.PixelFormat.TRANSLUCENT;\n }\n getConstantState() {\n return this.mState;\n }\n }\n drawable.RoundRectDrawable = RoundRectDrawable;\n class State {\n constructor(state) {\n this.mBaseColor = 0;\n this.mUseColor = 0;\n this.mRadiusTopLeft = 0;\n this.mRadiusTopRight = 0;\n this.mRadiusBottomRight = 0;\n this.mRadiusBottomLeft = 0;\n if (state != null) {\n this.mBaseColor = state.mBaseColor;\n this.mUseColor = state.mUseColor;\n this.mRadiusTopLeft = state.mRadiusTopLeft;\n this.mRadiusTopRight = state.mRadiusTopRight;\n this.mRadiusBottomRight = state.mRadiusBottomRight;\n this.mRadiusBottomLeft = state.mRadiusBottomLeft;\n }\n }\n newDrawable() {\n let c = new RoundRectDrawable(0, 0, 0, 0, 0);\n c.mState = new State(this);\n return c;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n let hashCodeGenerator = 0;\n class JavaObject {\n constructor() {\n this.hash = hashCodeGenerator++;\n }\n static get class() {\n return Class.getClass(this);\n }\n hashCode() {\n return this.hash;\n }\n getClass() {\n return Class.getClass(this.constructor);\n }\n equals(o) {\n return this === o;\n }\n }\n lang.JavaObject = JavaObject;\n class Class {\n constructor(clazz) {\n this.clazz = clazz;\n }\n static getClass(clazz) {\n let c = Class.classCache.get(clazz);\n if (!c) {\n c = new Class(clazz);\n Class.classCache.set(clazz, c);\n }\n return c;\n }\n getName() {\n return this.clazz.name;\n }\n getSimpleName() {\n return this.clazz.name;\n }\n }\n Class.classCache = new Map();\n lang.Class = Class;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var util;\n (function (util) {\n var concurrent;\n (function (concurrent) {\n class CopyOnWriteArrayList {\n constructor() {\n this.mData = [];\n this.isDataNew = true;\n }\n iterator() {\n this.isDataNew = false;\n return this.mData;\n }\n [Symbol.iterator]() {\n this.isDataNew = false;\n return this.mData[Symbol.iterator]();\n }\n checkNewData() {\n if (!this.isDataNew) {\n this.isDataNew = true;\n this.mData = [...this.mData];\n }\n }\n size() {\n return this.mData.length;\n }\n add(...items) {\n this.checkNewData();\n this.mData.push(...items);\n }\n addAll(array) {\n this.checkNewData();\n this.mData.push(...array.mData);\n }\n remove(item) {\n this.checkNewData();\n this.mData.splice(this.mData.indexOf(item), 1);\n }\n }\n concurrent.CopyOnWriteArrayList = CopyOnWriteArrayList;\n })(concurrent = util.concurrent || (util.concurrent = {}));\n })(util = lang.util || (lang.util = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Access {\n get(index) {\n return this.mData[index];\n }\n size() {\n return this.mSize;\n }\n }\n class CopyOnWriteArray {\n constructor() {\n this.mData = [];\n this.mAccess = new Access();\n }\n getArray() {\n if (this.mStart) {\n if (this.mDataCopy == null)\n this.mDataCopy = [...this.mData];\n return this.mDataCopy;\n }\n return this.mData;\n }\n start() {\n if (this.mStart)\n throw new Error(\"Iteration already started\");\n this.mStart = true;\n this.mDataCopy = null;\n this.mAccess.mData = this.mData;\n this.mAccess.mSize = this.mData.length;\n return this.mAccess.mData;\n }\n end() {\n if (!this.mStart)\n throw new Error(\"Iteration not started\");\n this.mStart = false;\n if (this.mDataCopy != null) {\n this.mData = this.mDataCopy;\n this.mAccess.mData = [];\n this.mAccess.mSize = 0;\n }\n this.mDataCopy = null;\n }\n size() {\n return this.getArray().length;\n }\n add(...items) {\n this.getArray().push(...items);\n }\n addAll(array) {\n this.getArray().push(...array.mData);\n }\n remove(item) {\n this.getArray().splice(this.getArray().indexOf(item), 1);\n }\n }\n util.CopyOnWriteArray = CopyOnWriteArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var CopyOnWriteArrayList = java.lang.util.concurrent.CopyOnWriteArrayList;\n var CopyOnWriteArray = android.util.CopyOnWriteArray;\n class ViewTreeObserver {\n constructor() {\n this.mAlive = true;\n }\n addOnGlobalLayoutListener(listener) {\n this.checkIsAlive();\n if (this.mOnGlobalLayoutListeners == null) {\n this.mOnGlobalLayoutListeners = new CopyOnWriteArray();\n }\n this.mOnGlobalLayoutListeners.add(listener);\n }\n removeGlobalOnLayoutListener(victim) {\n this.removeOnGlobalLayoutListener(victim);\n }\n removeOnGlobalLayoutListener(victim) {\n this.checkIsAlive();\n if (this.mOnGlobalLayoutListeners == null) {\n return;\n }\n this.mOnGlobalLayoutListeners.remove(victim);\n }\n dispatchOnGlobalLayout() {\n let listeners = this.mOnGlobalLayoutListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n access[i].onGlobalLayout();\n }\n }\n finally {\n listeners.end();\n }\n }\n }\n addOnPreDrawListener(listener) {\n this.checkIsAlive();\n if (this.mOnPreDrawListeners == null) {\n this.mOnPreDrawListeners = new CopyOnWriteArray();\n }\n this.mOnPreDrawListeners.add(listener);\n }\n removeOnPreDrawListener(victim) {\n this.checkIsAlive();\n if (this.mOnPreDrawListeners == null) {\n return;\n }\n this.mOnPreDrawListeners.remove(victim);\n }\n dispatchOnPreDraw() {\n let cancelDraw = false;\n const listeners = this.mOnPreDrawListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n cancelDraw = cancelDraw || !(access[i].onPreDraw());\n }\n }\n finally {\n listeners.end();\n }\n }\n return cancelDraw;\n }\n addOnTouchModeChangeListener(listener) {\n this.checkIsAlive();\n if (this.mOnTouchModeChangeListeners == null) {\n this.mOnTouchModeChangeListeners = new CopyOnWriteArrayList();\n }\n this.mOnTouchModeChangeListeners.add(listener);\n }\n removeOnTouchModeChangeListener(victim) {\n this.checkIsAlive();\n if (this.mOnTouchModeChangeListeners == null) {\n return;\n }\n this.mOnTouchModeChangeListeners.remove(victim);\n }\n dispatchOnTouchModeChanged(inTouchMode) {\n const listeners = this.mOnTouchModeChangeListeners;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onTouchModeChanged(inTouchMode);\n }\n }\n }\n addOnScrollChangedListener(listener) {\n this.checkIsAlive();\n if (this.mOnScrollChangedListeners == null) {\n this.mOnScrollChangedListeners = new CopyOnWriteArray();\n }\n this.mOnScrollChangedListeners.add(listener);\n }\n removeOnScrollChangedListener(victim) {\n this.checkIsAlive();\n if (this.mOnScrollChangedListeners == null) {\n return;\n }\n this.mOnScrollChangedListeners.remove(victim);\n }\n dispatchOnScrollChanged() {\n let listeners = this.mOnScrollChangedListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n access[i].onScrollChanged();\n }\n }\n finally {\n listeners.end();\n }\n }\n }\n addOnDrawListener(listener) {\n this.checkIsAlive();\n if (this.mOnDrawListeners == null) {\n this.mOnDrawListeners = new CopyOnWriteArrayList();\n }\n this.mOnDrawListeners.add(listener);\n }\n removeOnDrawListener(victim) {\n this.checkIsAlive();\n if (this.mOnDrawListeners == null) {\n return;\n }\n this.mOnDrawListeners.remove(victim);\n }\n dispatchOnDraw() {\n if (this.mOnDrawListeners != null) {\n for (let listener of this.mOnDrawListeners) {\n listener.onDraw();\n }\n }\n }\n merge(observer) {\n if (observer.mOnGlobalLayoutListeners != null) {\n if (this.mOnGlobalLayoutListeners != null) {\n this.mOnGlobalLayoutListeners.addAll(observer.mOnGlobalLayoutListeners);\n }\n else {\n this.mOnGlobalLayoutListeners = observer.mOnGlobalLayoutListeners;\n }\n }\n if (observer.mOnPreDrawListeners != null) {\n if (this.mOnPreDrawListeners != null) {\n this.mOnPreDrawListeners.addAll(observer.mOnPreDrawListeners);\n }\n else {\n this.mOnPreDrawListeners = observer.mOnPreDrawListeners;\n }\n }\n if (observer.mOnScrollChangedListeners != null) {\n if (this.mOnScrollChangedListeners != null) {\n this.mOnScrollChangedListeners.addAll(observer.mOnScrollChangedListeners);\n }\n else {\n this.mOnScrollChangedListeners = observer.mOnScrollChangedListeners;\n }\n }\n observer.kill();\n }\n checkIsAlive() {\n if (!this.mAlive) {\n throw new Error(\"This ViewTreeObserver is not alive, call \"\n + \"getViewTreeObserver() again\");\n }\n }\n isAlive() {\n return this.mAlive;\n }\n kill() {\n this.mAlive = false;\n }\n }\n view.ViewTreeObserver = ViewTreeObserver;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class DisplayMetrics {\n }\n DisplayMetrics.DENSITY_LOW = 120;\n DisplayMetrics.DENSITY_MEDIUM = 160;\n DisplayMetrics.DENSITY_HIGH = 240;\n DisplayMetrics.DENSITY_XHIGH = 320;\n DisplayMetrics.DENSITY_XXHIGH = 480;\n DisplayMetrics.DENSITY_XXXHIGH = 640;\n DisplayMetrics.DENSITY_DEFAULT = DisplayMetrics.DENSITY_MEDIUM;\n util.DisplayMetrics = DisplayMetrics;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var Bundle = android.os.Bundle;\n class Intent {\n constructor(activityName) {\n this.mRequestCode = -1;\n this.mFlags = 0;\n this.activityName = activityName;\n }\n getBooleanExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getIntExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getLongExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getFloatExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getDoubleExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getStringExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getStringArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getIntegerArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getLongArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getFloatArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getDoubleArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getBooleanArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n hasExtra(name) {\n return this.mExtras != null && this.mExtras.containsKey(name);\n }\n putExtra(name, value) {\n if (this.mExtras == null) {\n this.mExtras = new Bundle();\n }\n this.mExtras.put(name, value);\n return this;\n }\n getExtras() {\n return (this.mExtras != null) ? new Bundle(this.mExtras) : null;\n }\n getFlags() {\n return this.mFlags;\n }\n setFlags(flags) {\n this.mFlags = flags;\n return this;\n }\n addFlags(flags) {\n this.mFlags |= flags;\n return this;\n }\n }\n Intent.FLAG_ACTIVITY_CLEAR_TOP = 0x04000000;\n content.Intent = Intent;\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class ClassFinder {\n static findClass(classFullName, findInRoot = window) {\n let nameParts = classFullName.split('.');\n let finding = findInRoot;\n for (let part of nameParts) {\n let quickFind = finding[part.toLowerCase()];\n if (quickFind) {\n finding = quickFind;\n continue;\n }\n let found = false;\n for (let key in finding) {\n if (key.toUpperCase() === part.toUpperCase()) {\n finding = finding[key];\n found = true;\n break;\n }\n }\n if (!found)\n return null;\n }\n if (finding === findInRoot) {\n return null;\n }\n return finding;\n }\n static findViewClass(className) {\n let rootViewClass = ClassFinder._findViewClassCache[className];\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, android.view);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, android['widget']);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, androidui['widget']);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className);\n if (!rootViewClass) {\n if (document.createElement(className) instanceof HTMLUnknownElement) {\n console.warn('inflate: not find class ' + className);\n }\n return null;\n }\n ClassFinder._findViewClassCache[className] = rootViewClass;\n return rootViewClass;\n }\n }\n ClassFinder._findViewClassCache = {};\n util.ClassFinder = ClassFinder;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_1) {\n var ClassFinder = androidui.util.ClassFinder;\n class LayoutInflater {\n constructor(context) {\n this.mContext = context;\n }\n static from(context) {\n return context.getLayoutInflater();\n }\n getContext() {\n return this.mContext;\n }\n inflate(layout, viewParent, attachToRoot = (viewParent != null)) {\n let domtree = layout instanceof HTMLElement ? layout : this.mContext.getResources().getLayout(layout);\n if (!domtree) {\n console.error('not find layout: ' + layout);\n return null;\n }\n let className = domtree.tagName;\n if (className.startsWith('ANDROID-')) {\n className = className.substring('ANDROID-'.length);\n }\n if (className === 'LAYOUT') {\n domtree = domtree.firstElementChild;\n }\n if (className === 'INCLUDE') {\n let refLayoutId = domtree.getAttribute('layout');\n if (!refLayoutId)\n return null;\n let refEle = this.mContext.getResources().getLayout(refLayoutId);\n let view = this.inflate(refEle, viewParent, false);\n if (view) {\n for (let attr of Array.from(domtree.attributes)) {\n let name = attr.name;\n if (name === 'layout')\n continue;\n view.bindElement.setAttribute(name, attr.value);\n }\n }\n return view;\n }\n else if (className === 'MERGE') {\n if (!viewParent)\n throw Error('merge tag need ViewParent');\n Array.from(domtree.children).forEach((item) => {\n if (item instanceof HTMLElement) {\n this.inflate(item, viewParent);\n }\n });\n return viewParent;\n }\n else if (className === 'VIEW') {\n let overrideClass = domtree.className || domtree.getAttribute('android:class');\n if (overrideClass)\n className = overrideClass;\n }\n let rootViewClass = ClassFinder.findViewClass(className);\n if (!rootViewClass) {\n return null;\n }\n let children = Array.from(domtree.children);\n let defStyle;\n let styleAttrValue = domtree.getAttribute('style');\n if (styleAttrValue) {\n defStyle = this.mContext.getResources().getDefStyle(styleAttrValue);\n }\n let rootView;\n if (styleAttrValue)\n rootView = new rootViewClass(this.mContext, domtree, defStyle);\n else\n rootView = new rootViewClass(this.mContext, domtree);\n if (rootView['onInflateAdapter']) {\n rootView.onInflateAdapter(domtree, this.mContext, viewParent);\n domtree.parentNode.removeChild(domtree);\n }\n if (!(rootView instanceof view_1.View)) {\n return rootView;\n }\n let params;\n if (viewParent) {\n params = viewParent.generateDefaultLayoutParams();\n params.parseAttributeFrom(domtree, this.mContext);\n rootView.setLayoutParams(params);\n }\n rootView._fireInitedAttributeChange();\n if (rootView instanceof view_1.ViewGroup) {\n let parent = rootView;\n children.forEach((item) => {\n if (item instanceof HTMLElement) {\n this.inflate(item, parent);\n }\n });\n }\n rootView.onFinishInflate();\n if (attachToRoot && viewParent)\n viewParent.addView(rootView);\n return rootView;\n }\n }\n view_1.LayoutInflater = LayoutInflater;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var LayoutInflater = android.view.LayoutInflater;\n class Context {\n constructor(androidUI) {\n this.androidUI = androidUI;\n this.mLayoutInflater = new LayoutInflater(this);\n this.mResources = new android.content.res.Resources(this);\n }\n getApplicationContext() {\n return this.androidUI.mApplication;\n }\n getResources() {\n return this.mResources;\n }\n getLayoutInflater() {\n return this.mLayoutInflater;\n }\n }\n content.Context = Context;\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n const _layout_data = {\n \"action_bar\": \"\\n \\n \\n \\n \\n \\n \\n\",\n \"alert_dialog\": \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n\",\n \"alert_dialog_progress\": \"\\n \\n \\n \\n\",\n \"popup_menu_item_layout\": \"\\n\\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n\",\n \"select_dialog\": \"\",\n \"select_dialog_item\": \"\",\n \"select_dialog_multichoice\": \"\",\n \"select_dialog_singlechoice\": \"\",\n \"simple_spinner_dropdown_item\": \"\",\n \"simple_spinner_item\": \"\",\n \"transient_notification\": \"\\n\\n \\n\\n\"\n };\n const _tempDiv = document.createElement('div');\n class layout {\n static getLayoutData(layoutName) {\n if (!layoutName)\n return null;\n if (!_layout_data[layoutName])\n return null;\n _tempDiv.innerHTML = _layout_data[layoutName];\n let data = _tempDiv.firstElementChild;\n _tempDiv.removeChild(data);\n return data;\n }\n }\n layout.action_bar = '@android:layout/action_bar';\n layout.alert_dialog = '@android:layout/alert_dialog';\n layout.alert_dialog_progress = '@android:layout/alert_dialog_progress';\n layout.popup_menu_item_layout = '@android:layout/popup_menu_item_layout';\n layout.select_dialog = '@android:layout/select_dialog';\n layout.select_dialog_item = '@android:layout/select_dialog_item';\n layout.select_dialog_multichoice = '@android:layout/select_dialog_multichoice';\n layout.select_dialog_singlechoice = '@android:layout/select_dialog_singlechoice';\n layout.simple_spinner_dropdown_item = '@android:layout/simple_spinner_dropdown_item';\n layout.simple_spinner_item = '@android:layout/simple_spinner_item';\n layout.transient_notification = '@android:layout/transient_notification';\n R.layout = layout;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n class AttrValueParser {\n static parseString(r, value, defValue = value) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getString(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n return defValue;\n }\n static parseBoolean(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getBoolean(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n if (value === 'false' || value === '0')\n return false;\n else if (value === 'true' || value === '1' || value === '')\n return true;\n return defValue;\n }\n static parseInt(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getInteger(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n let v = parseInt(value);\n if (isNaN(v))\n return defValue;\n return v;\n }\n static parseFloat(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getFloat(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n let v = parseFloat(value);\n if (isNaN(v))\n return defValue;\n if (value.endsWith('%'))\n v /= 100;\n return v;\n }\n static parseColor(r, value, defValue) {\n if (value == null)\n return defValue;\n try {\n if (value.startsWith('@')) {\n return r.getColor(value);\n }\n else {\n return android.graphics.Color.parseColor(value);\n }\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseColorStateList(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n return r.getColorStateList(value);\n }\n else {\n try {\n let color = android.graphics.Color.parseColor(value);\n return android.content.res.ColorStateList.valueOf(color);\n }\n catch (e) {\n console.warn(e);\n }\n }\n return null;\n }\n static parseDimension(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimension(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimension(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDimensionPixelOffset(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimensionPixelOffset(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimensionPixelOffset(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDimensionPixelSize(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimensionPixelSize(value);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimensionPixelSize(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDrawable(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n try {\n return r.getDrawable(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n else if (value.startsWith('url(')) {\n value = value.substring('url('.length);\n if (value.endsWith(')'))\n value = value.substring(0, value.length - 1);\n return new androidui.image.NetDrawable(value);\n }\n else {\n try {\n let color = android.graphics.Color.parseColor(value);\n return new android.graphics.drawable.ColorDrawable(color);\n }\n catch (e) {\n }\n }\n return null;\n }\n static parseTextArray(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n return r.getStringArray(value);\n }\n else {\n try {\n let json = JSON.parse(value);\n if (json instanceof Array)\n return json;\n }\n catch (e) {\n }\n }\n return null;\n }\n }\n attr.AttrValueParser = AttrValueParser;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res_1) {\n var AttrValueParser = androidui.attr.AttrValueParser;\n class TypedArray {\n constructor(res, xml) {\n this.mResources = res;\n this.mXml = xml;\n }\n static obtain(res, xml) {\n const attrs = res.mTypedArrayPool.acquire();\n if (attrs != null) {\n attrs.mRecycled = false;\n attrs.mXml = xml;\n return attrs;\n }\n return new TypedArray(res, xml);\n }\n checkRecycled() {\n if (this.mRecycled) {\n throw new Error(\"RuntimeException : Cannot make calls to a recycled instance!\");\n }\n }\n length() {\n this.checkRecycled();\n return this.mXml.attributes.length;\n }\n getResources() {\n return this.mResources;\n }\n getText(attrName) {\n return this.getString(attrName);\n }\n getString(attrName) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseString(this.mResources, value, null);\n }\n getBoolean(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseBoolean(this.mResources, value, defValue);\n }\n getInt(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseInt(this.mResources, value, defValue);\n }\n getFloat(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseFloat(this.mResources, value, defValue);\n }\n getColor(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseColor(this.mResources, value, defValue);\n }\n getColorStateList(attrName) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseColorStateList(this.mResources, value);\n }\n getInteger(attrName, defValue) {\n return this.getInt(attrName, defValue);\n }\n getDimension(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseDimension(this.mResources, value, defValue);\n }\n getDimensionPixelOffset(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseDimensionPixelOffset(this.mResources, value, defValue);\n }\n getDimensionPixelSize(attrName, defValue) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseDimensionPixelSize(this.mResources, value, defValue);\n }\n getDrawable(attrName) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseDrawable(this.mResources, value);\n }\n getTextArray(attrName) {\n this.checkRecycled();\n let value = this.mXml.getAttribute(attrName);\n return AttrValueParser.parseTextArray(this.mResources, value);\n }\n hasValue(attrName) {\n this.checkRecycled();\n return this.mXml.getAttribute(attrName) != null;\n }\n hasValueOrEmpty(attrName) {\n this.checkRecycled();\n return this.mXml.hasAttribute(attrName);\n }\n recycle() {\n this.mRecycled = true;\n this.mXml = null;\n this.mResources.mTypedArrayPool.release(this);\n }\n }\n res_1.TypedArray = TypedArray;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var DisplayMetrics = android.util.DisplayMetrics;\n var Drawable = android.graphics.drawable.Drawable;\n var Color = android.graphics.Color;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n class Resources {\n constructor(context) {\n this.mTypedArrayPool = new SynchronizedPool(5);\n this.context = context;\n window.addEventListener('resize', () => {\n if (this.displayMetrics) {\n this.fillDisplayMetrics(this.displayMetrics);\n }\n });\n }\n static getSystem() {\n return Resources.instance;\n }\n static from(context) {\n return context.getResources();\n }\n static getDisplayMetrics() {\n return Resources.instance.getDisplayMetrics();\n }\n getDisplayMetrics() {\n if (this.displayMetrics)\n return this.displayMetrics;\n this.displayMetrics = new DisplayMetrics();\n this.fillDisplayMetrics(this.displayMetrics);\n return this.displayMetrics;\n }\n fillDisplayMetrics(displayMetrics) {\n let density = window.devicePixelRatio;\n displayMetrics.xdpi = window.screen.deviceXDPI || DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.ydpi = window.screen.deviceYDPI || DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.density = density;\n displayMetrics.densityDpi = density * DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.scaledDensity = density;\n let contentEle = this.context ? this.context.androidUI.androidUIElement : document.documentElement;\n displayMetrics.widthPixels = contentEle.offsetWidth * density;\n displayMetrics.heightPixels = contentEle.offsetHeight * density;\n }\n getDefStyle(refString) {\n if (refString.startsWith('@android:attr/')) {\n refString = refString.substring('@android:attr/'.length);\n return android.R.attr[refString];\n }\n }\n getDrawable(refString) {\n if (refString.startsWith('@android:drawable/')) {\n refString = refString.substring('@android:drawable/'.length);\n return android.R.drawable[refString] || android.R.image[refString];\n }\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (color instanceof res.ColorStateList) {\n color = color.getDefaultColor();\n }\n return new ColorDrawable(color);\n }\n if (Resources._AppBuildImageFileFinder) {\n let drawable = Resources._AppBuildImageFileFinder(refString);\n if (drawable)\n return drawable;\n }\n if (!refString.startsWith('@')) {\n refString = '@drawable/' + refString;\n }\n let ele = this.getXml(refString);\n if (ele) {\n return Drawable.createFromXml(this, ele);\n }\n ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:drawable/') || text.startsWith('@drawable/')\n || text.startsWith('@android:color/') || text.startsWith('@color/')) {\n return this.getDrawable(text);\n }\n return Drawable.createFromXml(this, ele);\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getColor(refString) {\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (color instanceof res.ColorStateList) {\n color = color.getDefaultColor();\n }\n return color;\n }\n else {\n if (!refString.startsWith('@color/')) {\n refString = '@color/' + refString;\n }\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:color/') || text.startsWith('@color/')) {\n return this.getColor(text);\n }\n return Color.parseColor(text);\n }\n ele = this.getXml(refString);\n if (ele) {\n let colorList = res.ColorStateList.createFromXml(this, ele);\n if (colorList)\n return colorList.getDefaultColor();\n }\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getColorStateList(refString) {\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (typeof color === \"number\") {\n color = res.ColorStateList.valueOf(color);\n }\n return color;\n }\n else {\n if (!refString.startsWith('@color/')) {\n refString = '@color/' + refString;\n }\n let ele = this.getXml(refString);\n if (ele) {\n return res.ColorStateList.createFromXml(this, ele);\n }\n ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:color/') || text.startsWith('@color/')) {\n return this.getColorStateList(text);\n }\n return res.ColorStateList.valueOf(Color.parseColor(text));\n }\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimension(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimension(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimensionPixelOffset(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimensionPixelOffset(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimensionPixelSize(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimensionPixelSize(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getBoolean(refString) {\n if (!refString.startsWith('@bool/'))\n refString = '@bool/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return text == 'true';\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getInteger(refString) {\n if (!refString.startsWith('@integer/'))\n refString = '@integer/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n return parseInt(ele.innerText);\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getIntArray(refString) {\n if (!refString.startsWith('@array/'))\n refString = '@array/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let intArray = [];\n for (let child of Array.from(ele.children)) {\n intArray.push(parseInt(child.innerText));\n }\n return intArray;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getFloat(refString) {\n return this.getDimension(refString);\n }\n getString(refString) {\n if (refString.startsWith('@android:string/')) {\n refString = refString.substring('@android:string/'.length);\n return android.R.string_[refString];\n }\n if (!refString.startsWith('@string/'))\n refString = '@string/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n return ele.innerText;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getStringArray(refString) {\n if (!refString.startsWith('@array/'))\n refString = '@array/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let stringArray = [];\n for (let child of Array.from(ele.children)) {\n stringArray.push(child.innerText);\n }\n return stringArray;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getLayout(refString) {\n if (!refString || !refString.trim().startsWith('@'))\n return null;\n if (refString.startsWith('@android:layout/')) {\n refString = refString.substring('@android:layout/'.length);\n return android.R.layout.getLayoutData(refString);\n }\n if (!refString.startsWith('@layout/'))\n refString = '@layout/' + refString;\n let ele = this.getXml(refString);\n if (ele)\n return ele;\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getStyleAsMap(refString) {\n if (!refString.startsWith('@style/')) {\n refString = '@style/' + refString;\n }\n let styleMap = new Map();\n const parseStyle = (refString) => {\n let styleXml = this.getValue(refString);\n if (!styleXml)\n return;\n let parent = styleXml.getAttribute('parent');\n if (parent) {\n if (!parent.startsWith('@style/')) {\n parent = '@style/' + parent;\n }\n parseStyle(parent);\n }\n let styleName = refString.substring('@style/'.length);\n if (styleName.includes('.')) {\n let parts = styleName.split('.');\n parts.shift();\n let nameParent = parts.join('.');\n parseStyle('@style/' + nameParent);\n }\n for (let item of Array.from(styleXml.children)) {\n let name = item.getAttribute('name');\n if (name) {\n styleMap.set(name, item.innerText);\n }\n }\n };\n parseStyle(refString);\n return styleMap;\n }\n getXml(refString) {\n if (Resources._AppBuildXmlFinder)\n return Resources._AppBuildXmlFinder(refString);\n }\n getValue(refString, resolveRefs = true) {\n if (Resources._AppBuildValueFinder) {\n let ele = Resources._AppBuildValueFinder(refString);\n if (!ele)\n return null;\n if (resolveRefs && ele.children.length == 0) {\n let str = ele.innerText;\n if (str.startsWith('@')) {\n return this.getValue(refString, true) || ele;\n }\n }\n return ele;\n }\n }\n obtainAttributes(attrs) {\n return res.TypedArray.obtain(this, attrs);\n }\n static set buildDrawableFinder(value) {\n throw Error('Error: old build tool not support. Please update your build_res.js file.');\n }\n static set buildLayoutFinder(value) {\n throw Error('Error: old build tool not support. Please update your build_res.js file.');\n }\n static get buildResourcesElement() {\n throw Error('Error: old build tool not support. Please update your build_res.js file.');\n }\n }\n Resources.instance = new Resources();\n Resources._AppBuildImageFileFinder = null;\n Resources._AppBuildXmlFinder = null;\n Resources._AppBuildValueFinder = null;\n res.Resources = Resources;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class ViewConfiguration {\n constructor() {\n this.density = android.content.res.Resources.getDisplayMetrics().density;\n this.sizeAndDensity = this.density;\n this.mEdgeSlop = this.sizeAndDensity * ViewConfiguration.EDGE_SLOP;\n this.mFadingEdgeLength = this.sizeAndDensity * ViewConfiguration.FADING_EDGE_LENGTH;\n this.mMinimumFlingVelocity = this.density * ViewConfiguration.MINIMUM_FLING_VELOCITY;\n this.mMaximumFlingVelocity = this.density * ViewConfiguration.MAXIMUM_FLING_VELOCITY;\n this.mScrollbarSize = this.density * ViewConfiguration.SCROLL_BAR_SIZE;\n this.mTouchSlop = this.density * ViewConfiguration.TOUCH_SLOP;\n this.mDoubleTapTouchSlop = this.sizeAndDensity * ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP;\n this.mPagingTouchSlop = this.density * ViewConfiguration.PAGING_TOUCH_SLOP;\n this.mDoubleTapSlop = this.density * ViewConfiguration.DOUBLE_TAP_SLOP;\n this.mWindowTouchSlop = this.sizeAndDensity * ViewConfiguration.WINDOW_TOUCH_SLOP;\n this.mOverscrollDistance = this.sizeAndDensity * ViewConfiguration.OVERSCROLL_DISTANCE;\n this.mOverflingDistance = this.sizeAndDensity * ViewConfiguration.OVERFLING_DISTANCE;\n this.mMaximumDrawingCacheSize = android.content.res.Resources.getDisplayMetrics().widthPixels\n * android.content.res.Resources.getDisplayMetrics().heightPixels * 4 * 2;\n }\n static get(arg) {\n if (!ViewConfiguration.instance) {\n ViewConfiguration.instance = new ViewConfiguration();\n }\n return ViewConfiguration.instance;\n }\n getScaledScrollBarSize() {\n return this.mScrollbarSize;\n }\n static getScrollBarFadeDuration() {\n return ViewConfiguration.SCROLL_BAR_FADE_DURATION;\n }\n static getScrollDefaultDelay() {\n return ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY;\n }\n getScaledFadingEdgeLength() {\n return this.mFadingEdgeLength;\n }\n static getPressedStateDuration() {\n return ViewConfiguration.PRESSED_STATE_DURATION;\n }\n static getLongPressTimeout() {\n return ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;\n }\n static getKeyRepeatDelay() {\n return ViewConfiguration.KEY_REPEAT_DELAY;\n }\n static getTapTimeout() {\n return ViewConfiguration.TAP_TIMEOUT;\n }\n static getJumpTapTimeout() {\n return ViewConfiguration.JUMP_TAP_TIMEOUT;\n }\n static getDoubleTapTimeout() {\n return ViewConfiguration.DOUBLE_TAP_TIMEOUT;\n }\n static getDoubleTapMinTime() {\n return ViewConfiguration.DOUBLE_TAP_MIN_TIME;\n }\n getScaledEdgeSlop() {\n return this.mEdgeSlop;\n }\n getScaledTouchSlop() {\n return this.mTouchSlop;\n }\n getScaledDoubleTapTouchSlop() {\n return this.mDoubleTapTouchSlop;\n }\n getScaledPagingTouchSlop() {\n return this.mPagingTouchSlop;\n }\n getScaledDoubleTapSlop() {\n return this.mDoubleTapSlop;\n }\n getScaledWindowTouchSlop() {\n return this.mWindowTouchSlop;\n }\n getScaledMinimumFlingVelocity() {\n return this.mMinimumFlingVelocity;\n }\n getScaledMaximumFlingVelocity() {\n return this.mMaximumFlingVelocity;\n }\n getScaledMaximumDrawingCacheSize() {\n return this.mMaximumDrawingCacheSize;\n }\n getScaledOverscrollDistance() {\n return this.mOverscrollDistance;\n }\n getScaledOverflingDistance() {\n return this.mOverflingDistance;\n }\n static getScrollFriction() {\n return ViewConfiguration.SCROLL_FRICTION;\n }\n }\n ViewConfiguration.SCROLL_BAR_SIZE = 8;\n ViewConfiguration.SCROLL_BAR_FADE_DURATION = 250;\n ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY = 300;\n ViewConfiguration.FADING_EDGE_LENGTH = 12;\n ViewConfiguration.PRESSED_STATE_DURATION = 64;\n ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT = 500;\n ViewConfiguration.KEY_REPEAT_DELAY = 50;\n ViewConfiguration.GLOBAL_ACTIONS_KEY_TIMEOUT = 500;\n ViewConfiguration.TAP_TIMEOUT = 180;\n ViewConfiguration.JUMP_TAP_TIMEOUT = 500;\n ViewConfiguration.DOUBLE_TAP_TIMEOUT = 300;\n ViewConfiguration.DOUBLE_TAP_MIN_TIME = 40;\n ViewConfiguration.HOVER_TAP_TIMEOUT = 150;\n ViewConfiguration.HOVER_TAP_SLOP = 20;\n ViewConfiguration.ZOOM_CONTROLS_TIMEOUT = 3000;\n ViewConfiguration.EDGE_SLOP = 12;\n ViewConfiguration.TOUCH_SLOP = 8;\n ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP = ViewConfiguration.TOUCH_SLOP;\n ViewConfiguration.PAGING_TOUCH_SLOP = ViewConfiguration.TOUCH_SLOP * 2;\n ViewConfiguration.DOUBLE_TAP_SLOP = 100;\n ViewConfiguration.WINDOW_TOUCH_SLOP = 16;\n ViewConfiguration.MINIMUM_FLING_VELOCITY = 50;\n ViewConfiguration.MAXIMUM_FLING_VELOCITY = 8000;\n ViewConfiguration.SCROLL_FRICTION = 0.015;\n ViewConfiguration.OVERSCROLL_DISTANCE = 800;\n ViewConfiguration.OVERFLING_DISTANCE = 100;\n view.ViewConfiguration = ViewConfiguration;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class SystemClock {\n static uptimeMillis() {\n return new Date().getTime();\n }\n }\n os.SystemClock = SystemClock;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n var ViewConfiguration = android.view.ViewConfiguration;\n const tempBound = new Rect();\n const ID_FixID_Cache = [];\n function fixEventId(e) {\n for (let i = 0, length = e.changedTouches.length; i < length; i++) {\n fixTouchId(e.changedTouches[i]);\n }\n for (let i = 0, length = e.touches.length; i < length; i++) {\n fixTouchId(e.touches[i]);\n }\n if (e.type == 'touchend' || e.type == 'touchcancel') {\n ID_FixID_Cache[e.changedTouches[0].id_fix] = null;\n }\n }\n function fixTouchId(touch) {\n let originID = touch['identifier'];\n if (originID <= 10) {\n touch.id_fix = originID;\n ID_FixID_Cache[originID] = originID;\n return;\n }\n touch.id_fix = ID_FixID_Cache.indexOf(originID);\n if (touch.id_fix >= 0)\n return;\n for (let i = 0, length = ID_FixID_Cache.length + 1; i < length; i++) {\n if (ID_FixID_Cache[i] == null) {\n ID_FixID_Cache[i] = originID;\n touch.id_fix = i;\n return;\n }\n }\n }\n class MotionEvent {\n constructor() {\n this.mAction = 0;\n this.mEdgeFlags = 0;\n this.mDownTime = 0;\n this.mEventTime = 0;\n this.mActivePointerId = 0;\n this.mXOffset = 0;\n this.mYOffset = 0;\n this._axisValues = new Map();\n }\n static obtainWithTouchEvent(e, action) {\n let event = new MotionEvent();\n event.initWithTouch(e, action);\n return event;\n }\n static obtain(event) {\n let newEv = new MotionEvent();\n Object.assign(newEv, event);\n return newEv;\n }\n static obtainWithAction(downTime, eventTime, action, x, y, metaState = 0) {\n let newEv = new MotionEvent();\n newEv.mAction = action;\n newEv.mDownTime = downTime;\n newEv.mEventTime = eventTime;\n let touch = {\n id_fix: 0,\n target: null,\n screenX: x,\n screenY: y,\n clientX: x,\n clientY: y,\n pageX: x,\n pageY: y\n };\n newEv.mTouchingPointers = [touch];\n return newEv;\n }\n initWithTouch(event, baseAction, windowBound = new Rect()) {\n let e = event;\n fixEventId(e);\n let now = android.os.SystemClock.uptimeMillis();\n let action = baseAction;\n let actionIndex = -1;\n let activeTouch = e.changedTouches[0];\n this._activeTouch = activeTouch;\n let activePointerId = activeTouch.id_fix;\n for (let i = 0, length = e.touches.length; i < length; i++) {\n if (e.touches[i].id_fix === activePointerId) {\n actionIndex = i;\n MotionEvent.IdIndexCache.set(activePointerId, i);\n break;\n }\n }\n if (actionIndex < 0 && (baseAction === MotionEvent.ACTION_UP || baseAction === MotionEvent.ACTION_CANCEL)) {\n actionIndex = MotionEvent.IdIndexCache.get(activePointerId);\n }\n if (actionIndex < 0)\n throw Error('not find action index');\n switch (baseAction) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_UP:\n MotionEvent.TouchMoveRecord.set(activePointerId, []);\n break;\n case MotionEvent.ACTION_MOVE:\n let moveHistory = MotionEvent.TouchMoveRecord.get(activePointerId);\n if (moveHistory) {\n activeTouch.mEventTime = now;\n moveHistory.push(activeTouch);\n if (moveHistory.length > MotionEvent.HistoryMaxSize)\n moveHistory.shift();\n }\n break;\n }\n this.mTouchingPointers = Array.from(e.touches);\n if (baseAction === MotionEvent.ACTION_UP || baseAction === MotionEvent.ACTION_CANCEL) {\n this.mTouchingPointers.splice(actionIndex, 0, activeTouch);\n }\n if (this.mTouchingPointers.length > 1) {\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n action = MotionEvent.ACTION_POINTER_DOWN;\n action = actionIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT | action;\n break;\n case MotionEvent.ACTION_UP:\n action = MotionEvent.ACTION_POINTER_UP;\n action = actionIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT | action;\n break;\n }\n }\n this.mAction = action;\n this.mActivePointerId = activePointerId;\n if (action == MotionEvent.ACTION_DOWN) {\n this.mDownTime = now;\n }\n this.mEventTime = now;\n const density = android.content.res.Resources.getSystem().getDisplayMetrics().density;\n this.mXOffset = this.mYOffset = 0;\n let edgeFlag = 0;\n let unScaledX = activeTouch.pageX;\n let unScaledY = activeTouch.pageY;\n let edgeSlop = ViewConfiguration.EDGE_SLOP;\n tempBound.set(windowBound);\n tempBound.right = tempBound.left + edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_LEFT;\n }\n tempBound.set(windowBound);\n tempBound.bottom = tempBound.top + edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_TOP;\n }\n tempBound.set(windowBound);\n tempBound.left = tempBound.right - edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_RIGHT;\n }\n tempBound.set(windowBound);\n tempBound.top = tempBound.bottom - edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_BOTTOM;\n }\n this.mEdgeFlags = edgeFlag;\n }\n initWithMouseWheel(e) {\n this.mAction = MotionEvent.ACTION_SCROLL;\n this.mActivePointerId = 0;\n let touch = {\n id_fix: 0,\n target: null,\n screenX: e.screenX,\n screenY: e.screenY,\n clientX: e.clientX,\n clientY: e.clientY,\n pageX: e.pageX,\n pageY: e.pageY\n };\n this.mTouchingPointers = [touch];\n this.mDownTime = this.mEventTime = android.os.SystemClock.uptimeMillis();\n this.mXOffset = this.mYOffset = 0;\n this._axisValues.clear();\n this._axisValues.set(MotionEvent.AXIS_VSCROLL, -e.deltaY);\n this._axisValues.set(MotionEvent.AXIS_HSCROLL, -e.deltaX);\n }\n recycle() {\n }\n getAction() {\n return this.mAction;\n }\n getActionMasked() {\n return this.mAction & MotionEvent.ACTION_MASK;\n }\n getActionIndex() {\n return (this.mAction & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n }\n getDownTime() {\n return this.mDownTime;\n }\n getEventTime() {\n return this.mEventTime;\n }\n getX(pointerIndex = 0) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[pointerIndex].pageX) * density + this.mXOffset;\n }\n getY(pointerIndex = 0) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[pointerIndex].pageY) * density + this.mYOffset;\n }\n getPointerCount() {\n return this.mTouchingPointers.length;\n }\n getPointerId(pointerIndex) {\n return this.mTouchingPointers[pointerIndex].id_fix;\n }\n findPointerIndex(pointerId) {\n for (let i = 0, length = this.mTouchingPointers.length; i < length; i++) {\n if (this.mTouchingPointers[i].id_fix === pointerId) {\n return i;\n }\n }\n return -1;\n }\n getRawX() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[0].pageX) * density;\n }\n getRawY() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[0].pageY) * density;\n }\n getHistorySize(id = this.mActivePointerId) {\n let moveHistory = MotionEvent.TouchMoveRecord.get(id);\n return moveHistory ? moveHistory.length : 0;\n }\n getHistoricalX(pointerIndex, pos) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let moveHistory = MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);\n return (moveHistory[pos].pageX) * density + this.mXOffset;\n }\n getHistoricalY(pointerIndex, pos) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let moveHistory = MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);\n return (moveHistory[pos].pageY) * density + this.mYOffset;\n }\n getHistoricalEventTime(...args) {\n let pos, activePointerId;\n if (args.length === 1) {\n pos = args[0];\n activePointerId = this.mActivePointerId;\n }\n else {\n pos = args[1];\n activePointerId = this.getPointerId(args[0]);\n }\n let moveHistory = MotionEvent.TouchMoveRecord.get(activePointerId);\n return moveHistory[pos].mEventTime;\n }\n getTouchMajor(pointerIndex) {\n return Math.floor(android.content.res.Resources.getDisplayMetrics().density);\n }\n getHistoricalTouchMajor(pointerIndex, pos) {\n return Math.floor(android.content.res.Resources.getDisplayMetrics().density);\n }\n getEdgeFlags() {\n return this.mEdgeFlags;\n }\n setEdgeFlags(flags) {\n this.mEdgeFlags = flags;\n }\n setAction(action) {\n this.mAction = action;\n }\n isTouchEvent() {\n let action = this.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_MOVE:\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_OUTSIDE:\n case MotionEvent.ACTION_POINTER_DOWN:\n case MotionEvent.ACTION_POINTER_UP:\n return true;\n }\n return false;\n }\n isPointerEvent() {\n return true;\n }\n offsetLocation(deltaX, deltaY) {\n this.mXOffset += deltaX;\n this.mYOffset += deltaY;\n }\n setLocation(x, y) {\n this.mXOffset = x - this.getRawX();\n this.mYOffset = y - this.getRawY();\n }\n getPointerIdBits() {\n let idBits = 0;\n let pointerCount = this.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n idBits |= 1 << this.getPointerId(i);\n }\n return idBits;\n }\n split(idBits) {\n let ev = MotionEvent.obtain(this);\n let oldPointerCount = this.getPointerCount();\n const oldAction = this.getAction();\n const oldActionMasked = oldAction & MotionEvent.ACTION_MASK;\n let newPointerIds = [];\n for (let i = 0; i < oldPointerCount; i++) {\n let pointerId = this.getPointerId(i);\n let idBit = 1 << pointerId;\n if ((idBit & idBits) != 0) {\n newPointerIds.push(pointerId);\n }\n }\n let newActionPointerIndex = newPointerIds.indexOf(this.mActivePointerId);\n let newPointerCount = newPointerIds.length;\n let newAction;\n if (oldActionMasked == MotionEvent.ACTION_POINTER_DOWN || oldActionMasked == MotionEvent.ACTION_POINTER_UP) {\n if (newActionPointerIndex < 0) {\n newAction = MotionEvent.ACTION_MOVE;\n }\n else if (newPointerCount == 1) {\n newAction = oldActionMasked == MotionEvent.ACTION_POINTER_DOWN\n ? MotionEvent.ACTION_DOWN : MotionEvent.ACTION_UP;\n }\n else {\n newAction = oldActionMasked | (newActionPointerIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT);\n }\n }\n else {\n newAction = oldAction;\n }\n ev.mAction = newAction;\n ev.mTouchingPointers = this.mTouchingPointers.filter((item) => {\n return newPointerIds.indexOf(item.id_fix) >= 0;\n });\n return ev;\n }\n getAxisValue(axis) {\n let value = this._axisValues.get(axis);\n return value ? value : 0;\n }\n toString() {\n return \"MotionEvent{action=\" + this.getAction() + \" x=\" + this.getX()\n + \" y=\" + this.getY() + \"}\";\n }\n }\n MotionEvent.INVALID_POINTER_ID = -1;\n MotionEvent.ACTION_MASK = 0xff;\n MotionEvent.ACTION_DOWN = 0;\n MotionEvent.ACTION_UP = 1;\n MotionEvent.ACTION_MOVE = 2;\n MotionEvent.ACTION_CANCEL = 3;\n MotionEvent.ACTION_OUTSIDE = 4;\n MotionEvent.ACTION_POINTER_DOWN = 5;\n MotionEvent.ACTION_POINTER_UP = 6;\n MotionEvent.ACTION_HOVER_MOVE = 7;\n MotionEvent.ACTION_SCROLL = 8;\n MotionEvent.ACTION_HOVER_ENTER = 9;\n MotionEvent.ACTION_HOVER_EXIT = 10;\n MotionEvent.EDGE_TOP = 0x00000001;\n MotionEvent.EDGE_BOTTOM = 0x00000002;\n MotionEvent.EDGE_LEFT = 0x00000004;\n MotionEvent.EDGE_RIGHT = 0x00000008;\n MotionEvent.ACTION_POINTER_INDEX_MASK = 0xff00;\n MotionEvent.ACTION_POINTER_INDEX_SHIFT = 8;\n MotionEvent.AXIS_VSCROLL = 9;\n MotionEvent.AXIS_HSCROLL = 10;\n MotionEvent.HistoryMaxSize = 10;\n MotionEvent.TouchMoveRecord = new Map();\n MotionEvent.IdIndexCache = new Map();\n view.MotionEvent = MotionEvent;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n class TouchDelegate {\n constructor(bounds, delegateView) {\n this.mDelegateTargeted = false;\n this.mSlop = 0;\n this.mBounds = bounds;\n this.mSlop = view.ViewConfiguration.get().getScaledTouchSlop();\n this.mSlopBounds = new Rect(bounds);\n this.mSlopBounds.inset(-this.mSlop, -this.mSlop);\n this.mDelegateView = delegateView;\n }\n onTouchEvent(event) {\n let x = event.getX();\n let y = event.getY();\n let sendToDelegate = false;\n let hit = true;\n let handled = false;\n switch (event.getAction()) {\n case view.MotionEvent.ACTION_DOWN:\n let bounds = this.mBounds;\n if (bounds.contains(x, y)) {\n this.mDelegateTargeted = true;\n sendToDelegate = true;\n }\n break;\n case view.MotionEvent.ACTION_UP:\n case view.MotionEvent.ACTION_MOVE:\n sendToDelegate = this.mDelegateTargeted;\n if (sendToDelegate) {\n let slopBounds = this.mSlopBounds;\n if (!slopBounds.contains(x, y)) {\n hit = false;\n }\n }\n break;\n case view.MotionEvent.ACTION_CANCEL:\n sendToDelegate = this.mDelegateTargeted;\n this.mDelegateTargeted = false;\n break;\n }\n if (sendToDelegate) {\n let delegateView = this.mDelegateView;\n if (hit) {\n event.setLocation(delegateView.getWidth() / 2, delegateView.getHeight() / 2);\n }\n else {\n let slop = this.mSlop;\n event.setLocation(-(slop * 2), -(slop * 2));\n }\n handled = delegateView.dispatchTouchEvent(event);\n }\n return handled;\n }\n }\n view.TouchDelegate = TouchDelegate;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n var StringBuilder = java.lang.StringBuilder;\n var Pools = android.util.Pools;\n class Message {\n constructor() {\n this.mType = Message.Type_Normal;\n this.what = 0;\n this.arg1 = 0;\n this.arg2 = 0;\n this.when = 0;\n }\n static obtain(...args) {\n let m = Message.sPool.acquire();\n m = m || new Message();\n if (args.length === 1) {\n if (args[0] instanceof Message) {\n let orig = args[0];\n [m.target, m.what, m.arg1, m.arg2, m.obj, m.callback] =\n [orig.target, orig.what, orig.arg1, orig.arg2, orig.obj, orig.callback];\n }\n else if (args[0] instanceof os.Handler) {\n m.target = args[0];\n }\n else {\n throw new Error('unknown args');\n }\n }\n else if (args.length === 2) {\n m.target = args[0];\n if (typeof args[1] === 'number')\n m.what = args[1];\n else\n m.callback = args[1];\n }\n else if (args.length === 3) {\n [m.target, m.what, m.obj] = args;\n }\n else if (args.length === 4) {\n [m.target, m.what, m.arg1, m.arg2] = args;\n }\n else {\n [m.target, m.what, m.arg1 = 0, m.arg2, m.obj, m.callback] = args;\n }\n return m;\n }\n recycle() {\n this.clearForRecycle();\n Message.sPool.release(this);\n }\n copyFrom(o) {\n this.mType = o.mType;\n this.what = o.what;\n this.arg1 = o.arg1;\n this.arg2 = o.arg2;\n this.obj = o.obj;\n }\n setTarget(target) {\n this.target = target;\n }\n getTarget() {\n return this.target;\n }\n sendToTarget() {\n this.target.sendMessage(this);\n }\n clearForRecycle() {\n this.mType = Message.Type_Normal;\n this.what = 0;\n this.arg1 = 0;\n this.arg2 = 0;\n this.obj = null;\n this.when = 0;\n this.target = null;\n this.callback = null;\n }\n toString(now = os.SystemClock.uptimeMillis()) {\n let b = new StringBuilder();\n b.append(\"{ what=\");\n b.append(this.what);\n b.append(\" when=\");\n b.append(this.when - now).append(\"ms\");\n if (this.arg1 != 0) {\n b.append(\" arg1=\");\n b.append(this.arg1);\n }\n if (this.arg2 != 0) {\n b.append(\" arg2=\");\n b.append(this.arg2);\n }\n if (this.obj != null) {\n b.append(\" obj=\");\n b.append(this.obj);\n }\n b.append(\" }\");\n return b.toString();\n }\n }\n Message.Type_Normal = 0;\n Message.Type_Traversal = 1;\n Message.sPool = new Pools.SynchronizedPool(10);\n os.Message = Message;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n var requestAnimationFrame = window[\"requestAnimationFrame\"] ||\n window[\"webkitRequestAnimationFrame\"] ||\n window[\"mozRequestAnimationFrame\"] ||\n window[\"oRequestAnimationFrame\"] ||\n window[\"msRequestAnimationFrame\"];\n if (!requestAnimationFrame) {\n requestAnimationFrame = function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n };\n }\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = requestAnimationFrame;\n class MessageQueue {\n static getMessages(h, args, object) {\n let msgs = [];\n if (h == null) {\n return msgs;\n }\n if (typeof args === \"number\") {\n let what = args;\n for (let p of MessageQueue.messages) {\n if (p.target == h && p.what == what && (object == null || p.obj == object)) {\n msgs.push(p);\n }\n }\n }\n else {\n let r = args;\n for (let p of MessageQueue.messages) {\n if (p.target == h && p.callback == r && (object == null || p.obj == object)) {\n msgs.push(p);\n }\n }\n }\n return msgs;\n }\n static hasMessages(h, args, object) {\n return MessageQueue.getMessages(h, args, object).length > 0;\n }\n static enqueueMessage(msg, when) {\n if (msg.target == null) {\n throw new Error(\"Message must have a target.\");\n }\n msg.when = when;\n MessageQueue.messages.add(msg);\n MessageQueue.checkLoop();\n return true;\n }\n static recycleMessage(handler, message) {\n message.recycle();\n MessageQueue.messages.delete(message);\n }\n static removeMessages(h, args, object) {\n let p = MessageQueue.getMessages(h, args, object);\n if (p && p.length > 0) {\n for (let item of p) {\n MessageQueue.recycleMessage(h, item);\n }\n }\n }\n static removeCallbacksAndMessages(h, object) {\n if (h == null) {\n return;\n }\n for (let p of MessageQueue.messages) {\n if (p != null && p.target == h && (object == null || p.obj == object)) {\n MessageQueue.recycleMessage(h, p);\n }\n }\n }\n static checkLoop() {\n if (!MessageQueue._loopActive) {\n MessageQueue._loopActive = true;\n MessageQueue.requestNextLoop();\n }\n }\n static requestNextLoop() {\n requestAnimationFrame(MessageQueue.loop);\n }\n static loop() {\n let normalMessages = [];\n let traversalMessages = [];\n const now = os.SystemClock.uptimeMillis();\n for (let msg of MessageQueue.messages) {\n if (msg.when <= now) {\n if (msg.mType === os.Message.Type_Traversal)\n traversalMessages.push(msg);\n else\n normalMessages.push(msg);\n }\n }\n for (let i = 0, length = normalMessages.length; i < length; i++) {\n MessageQueue.dispatchMessage(normalMessages[i]);\n }\n for (let i = 0, length = traversalMessages.length; i < length; i++) {\n MessageQueue.dispatchMessage(traversalMessages[i]);\n }\n if (MessageQueue.messages.size > 0)\n MessageQueue.requestNextLoop();\n else\n MessageQueue._loopActive = false;\n }\n static dispatchMessage(msg) {\n if (MessageQueue.messages.has(msg)) {\n MessageQueue.messages.delete(msg);\n msg.target.dispatchMessage(msg);\n MessageQueue.recycleMessage(msg.target, msg);\n }\n }\n }\n MessageQueue.messages = new Set();\n MessageQueue._loopActive = false;\n os.MessageQueue = MessageQueue;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Handler {\n constructor(callback) {\n this.mCallback = callback;\n }\n handleMessage(msg) {\n }\n dispatchMessage(msg) {\n if (msg.callback != null) {\n msg.callback.run();\n }\n else {\n if (this.mCallback != null) {\n if (this.mCallback.handleMessage(msg)) {\n return;\n }\n }\n this.handleMessage(msg);\n }\n }\n obtainMessage(...args) {\n if (args.length === 2) {\n let [what, obj] = args;\n return os.Message.obtain(this, what, obj);\n }\n else {\n let [what, arg1, arg2, obj] = args;\n return os.Message.obtain(this, what, arg1, arg2, obj);\n }\n }\n post(r) {\n return this.sendMessageDelayed(Handler.getPostMessage(r), 0);\n }\n postAsTraversal(r) {\n let msg = Handler.getPostMessage(r);\n msg.mType = os.Message.Type_Traversal;\n return this.sendMessageDelayed(msg, 0);\n }\n postAtTime(...args) {\n if (args.length === 2) {\n let [r, uptimeMillis] = args;\n return this.sendMessageAtTime(Handler.getPostMessage(r), uptimeMillis);\n }\n else {\n let [r, token, uptimeMillis] = args;\n return this.sendMessageAtTime(Handler.getPostMessage(r, token), uptimeMillis);\n }\n }\n postDelayed(r, delayMillis) {\n return this.sendMessageDelayed(Handler.getPostMessage(r), delayMillis);\n }\n postAtFrontOfQueue(r) {\n return this.post(r);\n }\n removeCallbacks(r, token) {\n os.MessageQueue.removeMessages(this, r, token);\n }\n sendMessage(msg) {\n return this.sendMessageDelayed(msg, 0);\n }\n sendEmptyMessage(what) {\n return this.sendEmptyMessageDelayed(what, 0);\n }\n sendEmptyMessageDelayed(what, delayMillis) {\n let msg = os.Message.obtain();\n msg.what = what;\n return this.sendMessageDelayed(msg, delayMillis);\n }\n sendEmptyMessageAtTime(what, uptimeMillis) {\n let msg = os.Message.obtain();\n msg.what = what;\n return this.sendMessageAtTime(msg, uptimeMillis);\n }\n sendMessageDelayed(msg, delayMillis) {\n if (delayMillis < 0) {\n delayMillis = 0;\n }\n return this.sendMessageAtTime(msg, os.SystemClock.uptimeMillis() + delayMillis);\n }\n sendMessageAtTime(msg, uptimeMillis) {\n msg.target = this;\n return os.MessageQueue.enqueueMessage(msg, uptimeMillis);\n }\n sendMessageAtFrontOfQueue(msg) {\n return this.sendMessage(msg);\n }\n removeMessages(what, object) {\n os.MessageQueue.removeMessages(this, what, object);\n }\n removeCallbacksAndMessages(token) {\n os.MessageQueue.removeCallbacksAndMessages(this, token);\n }\n hasMessages(what, object) {\n return os.MessageQueue.hasMessages(this, what, object);\n }\n static getPostMessage(r, token) {\n let m = os.Message.obtain();\n m.obj = token;\n m.callback = r;\n return m;\n }\n }\n os.Handler = Handler;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var SparseArray = android.util.SparseArray;\n var StateSet = android.util.StateSet;\n var WeakReference = java.lang.ref.WeakReference;\n var Color = android.graphics.Color;\n class ColorStateList {\n constructor(states, colors) {\n this.mDefaultColor = 0xffff0000;\n this.mStateSpecs = states;\n this.mColors = colors;\n if (states && states.length > 0) {\n this.mDefaultColor = colors[0];\n for (let i = 0; i < states.length; i++) {\n if (states[i].length == 0) {\n this.mDefaultColor = colors[i];\n }\n }\n }\n }\n static valueOf(color) {\n let ref = ColorStateList.sCache.get(color);\n let csl = ref != null ? ref.get() : null;\n if (csl != null) {\n return csl;\n }\n csl = new ColorStateList(ColorStateList.EMPTY, [color]);\n ColorStateList.sCache.put(color, new WeakReference(csl));\n return csl;\n }\n static createFromXml(r, parser) {\n let colorStateList;\n let name = parser.tagName.toLowerCase();\n if (name == \"selector\") {\n const stateSpecList = [];\n const colorList = [];\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n let alpha = 1.0;\n let color = 0xffff0000;\n let haveColor = false;\n let stateSpec = [];\n let typedArray = r.obtainAttributes(item);\n for (let attr of Array.from(item.attributes)) {\n let attrName = attr.name;\n if (attrName === 'android:alpha') {\n alpha = typedArray.getFloat(attrName, alpha);\n }\n else if (attrName === 'android:color') {\n color = typedArray.getColor(attrName, color);\n haveColor = true;\n }\n else if (attrName.startsWith('android:state_')) {\n let state = attrName.substring('android:state_'.length);\n let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()];\n if (typeof stateValue === \"number\") {\n stateSpec.push(typedArray.getBoolean(attrName, true) ? stateValue : -stateValue);\n }\n }\n }\n if (!haveColor) {\n throw new Error(` tag requires a 'android:color' attribute.`);\n }\n let alphaMod = Math.floor(Color.alpha(color) * alpha);\n alphaMod = Math.min(alphaMod, 255);\n alphaMod = Math.max(alphaMod, 0);\n color = (color & 0xFFFFFF) | (alphaMod << 24);\n colorList.push(color);\n stateSpecList.push(stateSpec);\n }\n colorStateList = new ColorStateList(stateSpecList, colorList);\n }\n else {\n throw new Error(`XmlPullParserException(invalid drawable tag: ${name}`);\n }\n return colorStateList;\n }\n withAlpha(alpha) {\n let colors = androidui.util.ArrayCreator.newNumberArray(this.mColors.length);\n let len = colors.length;\n for (let i = 0; i < len; i++) {\n colors[i] = (this.mColors[i] & 0xFFFFFF) | (alpha << 24);\n }\n return new ColorStateList(this.mStateSpecs, colors);\n }\n isStateful() {\n return this.mStateSpecs.length > 1;\n }\n getColorForState(stateSet, defaultColor) {\n const setLength = this.mStateSpecs.length;\n for (let i = 0; i < setLength; i++) {\n let stateSpec = this.mStateSpecs[i];\n if (StateSet.stateSetMatches(stateSpec, stateSet)) {\n return this.mColors[i];\n }\n }\n return defaultColor;\n }\n getDefaultColor() {\n return this.mDefaultColor;\n }\n toString() {\n return \"ColorStateList{\" +\n \"mStateSpecs=\" + JSON.stringify(this.mStateSpecs) +\n \"mColors=\" + JSON.stringify(this.mColors) +\n \"mDefaultColor=\" + this.mDefaultColor + '}';\n }\n }\n ColorStateList.EMPTY = [[]];\n ColorStateList.sCache = new SparseArray();\n res.ColorStateList = ColorStateList;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class TypedValue {\n static initUnit() {\n this.initUnit = null;\n let temp = document.createElement('div');\n document.body.appendChild(temp);\n temp.style.height = 100 + TypedValue.COMPLEX_UNIT_PT;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_PT, temp.offsetHeight / 100);\n temp.style.height = 1 + TypedValue.COMPLEX_UNIT_IN;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_IN, temp.offsetHeight);\n temp.style.height = 100 + TypedValue.COMPLEX_UNIT_MM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_MM, temp.offsetHeight / 100);\n temp.style.height = 10 + TypedValue.COMPLEX_UNIT_EM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_EM, temp.offsetHeight / 10);\n temp.style.height = 10 + TypedValue.COMPLEX_UNIT_REM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_REM, temp.offsetHeight / 10);\n document.body.removeChild(temp);\n }\n static applyDimension(unit, size, dm) {\n let scale = 1;\n if (unit === TypedValue.COMPLEX_UNIT_DP || unit === TypedValue.COMPLEX_UNIT_DIP || unit === TypedValue.COMPLEX_UNIT_SP) {\n scale = dm.density;\n }\n else {\n scale = TypedValue.UNIT_SCALE_MAP.get(unit) || 1;\n }\n return size * scale;\n }\n static isDynamicUnitValue(valueWithUnit) {\n if (typeof valueWithUnit != \"string\")\n return false;\n return valueWithUnit.match(`${TypedValue.COMPLEX_UNIT_VH}$|${TypedValue.COMPLEX_UNIT_VW}$|${TypedValue.COMPLEX_UNIT_FRACTION}$`) != null;\n }\n static complexToDimension(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n if (this.initUnit)\n this.initUnit();\n if (valueWithUnit === undefined || valueWithUnit === null) {\n throw Error('complexToDimensionPixelSize error: valueWithUnit is ' + valueWithUnit);\n }\n if (valueWithUnit === '' + (Number.parseFloat(valueWithUnit)))\n return Number.parseFloat(valueWithUnit);\n if (typeof valueWithUnit !== 'string')\n valueWithUnit = valueWithUnit + \"\";\n let scale = 1;\n if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PX)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PX, \"\");\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DP, \"\");\n scale = metrics.density;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DIP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DIP, \"\");\n scale = metrics.density;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_SP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_SP, \"\");\n scale = metrics.density * (TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_SP) || 1);\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PT)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PT, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_PT) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_IN)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_IN, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_IN) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_MM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_MM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_MM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_EM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_EM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_EM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_REM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_REM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_REM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VH)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VH, \"\");\n scale = metrics.heightPixels / 100;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VW)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VW, \"\");\n scale = metrics.widthPixels / 100;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_FRACTION)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_FRACTION, \"\");\n scale = Number.parseFloat(valueWithUnit) / 100;\n if (Number.isNaN(scale))\n return 0;\n valueWithUnit = baseValue;\n }\n let value = Number.parseFloat(valueWithUnit);\n if (Number.isNaN(value))\n throw Error('complexToDimensionPixelSize error: ' + valueWithUnit);\n return value * scale;\n }\n static complexToDimensionPixelOffset(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n let value = this.complexToDimension(valueWithUnit, baseValue, metrics);\n return Math.floor(value);\n }\n static complexToDimensionPixelSize(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n let value = this.complexToDimension(valueWithUnit, baseValue, metrics);\n let res = Math.ceil(value);\n if (res != 0)\n return res;\n if (value == 0)\n return 0;\n if (value > 0)\n return 1;\n return -1;\n }\n }\n TypedValue.COMPLEX_UNIT_PX = 'px';\n TypedValue.COMPLEX_UNIT_DP = 'dp';\n TypedValue.COMPLEX_UNIT_DIP = 'dip';\n TypedValue.COMPLEX_UNIT_SP = 'sp';\n TypedValue.COMPLEX_UNIT_PT = 'pt';\n TypedValue.COMPLEX_UNIT_IN = 'in';\n TypedValue.COMPLEX_UNIT_MM = 'mm';\n TypedValue.COMPLEX_UNIT_EM = 'em';\n TypedValue.COMPLEX_UNIT_REM = 'rem';\n TypedValue.COMPLEX_UNIT_VH = 'vh';\n TypedValue.COMPLEX_UNIT_VW = 'vw';\n TypedValue.COMPLEX_UNIT_FRACTION = '%';\n TypedValue.UNIT_SCALE_MAP = new Map();\n util.TypedValue = TypedValue;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class LinearInterpolator {\n getInterpolation(input) {\n return input;\n }\n }\n animation.LinearInterpolator = LinearInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var SystemClock = android.os.SystemClock;\n class AnimationUtils {\n static currentAnimationTimeMillis() {\n return SystemClock.uptimeMillis();\n }\n }\n animation.AnimationUtils = AnimationUtils;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class LayoutDirection {\n }\n LayoutDirection.LTR = 0;\n LayoutDirection.RTL = 1;\n LayoutDirection.INHERIT = 2;\n LayoutDirection.LOCALE = 3;\n util.LayoutDirection = LayoutDirection;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class Arrays {\n static sort(a, fromIndex, toIndex) {\n Arrays.rangeCheck(a.length, fromIndex, toIndex);\n var sort = androidui.util.ArrayCreator.newNumberArray(toIndex - fromIndex);\n for (let i = fromIndex; i < toIndex; i++) {\n sort[i - fromIndex] = a[i];\n }\n sort.sort((a, b) => {\n return a > b ? 1 : -1;\n });\n for (let i = fromIndex; i < toIndex; i++) {\n a[i] = sort[i - fromIndex];\n }\n }\n static rangeCheck(arrayLength, fromIndex, toIndex) {\n if (fromIndex > toIndex) {\n throw new Error(\"ArrayIndexOutOfBoundsException:fromIndex(\" + fromIndex + \") > toIndex(\" + toIndex + \")\");\n }\n if (fromIndex < 0) {\n throw new Error('ArrayIndexOutOfBoundsException:' + fromIndex);\n }\n if (toIndex > arrayLength) {\n throw new Error('ArrayIndexOutOfBoundsException:' + toIndex);\n }\n }\n static asList(array) {\n let list = new util.ArrayList();\n list.array.push(...array);\n return list;\n }\n static equals(a, a2) {\n if (a == a2)\n return true;\n if (a == null || a2 == null)\n return false;\n let length = a.length;\n if (a2.length != length)\n return false;\n for (let i = 0; i < length; i++) {\n if (a[i] != a2[i])\n return false;\n }\n return true;\n }\n }\n util.Arrays = Arrays;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n class StateAttr {\n constructor(state) {\n this.attributes = new Map();\n this.stateSpec = state.concat().sort();\n }\n clone() {\n let stateAttr = new StateAttr(this.stateSpec);\n stateAttr.attributes = new Map(this.attributes);\n return stateAttr;\n }\n setAttr(name, value) {\n this.attributes.set(name, value);\n }\n hasAttr(name) {\n return this.attributes.has(name);\n }\n getAttrMap() {\n return this.attributes;\n }\n putAll(stateAttr) {\n for (let [key, value] of stateAttr.attributes.entries()) {\n this.attributes.set(key, value);\n }\n }\n isDefaultState() {\n return this.stateSpec.length === 0;\n }\n isStateEquals(state) {\n if (!state)\n return false;\n return java.util.Arrays.equals(this.stateSpec, state.concat().sort());\n }\n isStateMatch(state) {\n return android.util.StateSet.stateSetMatches(this.stateSpec, state);\n }\n createDiffKeyAsNullValueAttrMap(another) {\n if (!another)\n return this.attributes;\n let removed = new Map(another.attributes);\n for (let key of this.attributes.keys())\n removed.delete(key);\n let merge = new Map(this.attributes);\n for (let key of removed.keys())\n merge.set(key, null);\n return merge;\n }\n }\n attr.StateAttr = StateAttr;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr_1) {\n class StateAttrList {\n constructor(view) {\n this.list = [];\n this.matchedAttrCache = [];\n this.mView = view;\n let attrMap = new Map();\n let attributes = Array.from(view.bindElement.attributes);\n for (let attr of attributes) {\n attrMap.set(attr.name, attr.value);\n }\n let attrMapJSON = JSON.stringify(attrMap);\n let cachedAttrArray = StateAttrList.CacheMap.get(attrMapJSON);\n if (cachedAttrArray) {\n for (let stateAttr of cachedAttrArray) {\n this.list.push(stateAttr.clone());\n }\n }\n else {\n this.optStateAttr([]);\n this._initStyleAttributes(attrMap, []);\n let cachedAttrArray = [];\n for (let stateAttr of this.list) {\n cachedAttrArray.push(stateAttr.clone());\n }\n StateAttrList.CacheMap.set(attrMapJSON, cachedAttrArray);\n }\n }\n _initStyleAttributes(attrMap, inParseState) {\n let refStyleValue = attrMap.get('android:style');\n if (refStyleValue) {\n attrMap.delete('android:style');\n this._initStyleAttr('android:style', refStyleValue, inParseState);\n }\n for (let [key, value] of attrMap.entries()) {\n if (key.startsWith('android:state_')) {\n continue;\n }\n this._initStyleAttr(key, value, inParseState);\n }\n for (let [key, value] of attrMap.entries()) {\n if (key.startsWith('android:state_')) {\n this._initStyleAttr(key, value, inParseState);\n }\n }\n }\n _initStyleAttr(attrName, attrValue, inParseState) {\n if (attrName.startsWith('android:')) {\n attrName = attrName.substring('android:'.length);\n }\n if (attrName.startsWith('state_')) {\n let state = attrName.substring('state_'.length);\n let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()];\n if (typeof stateValue === \"number\") {\n inParseState = inParseState.concat(stateValue).sort();\n }\n }\n let _stateAttr = this.optStateAttr(inParseState);\n if (attrName.startsWith('state_') || attrName === 'style') {\n if (attrValue.startsWith('@style/')) {\n let styleMap = this.mView.getResources().getStyleAsMap(attrValue);\n if (styleMap && styleMap.size > 0) {\n this._initStyleAttributes(styleMap, inParseState);\n }\n }\n else {\n for (let part of attrValue.split(';')) {\n let [name, value] = part.split(':');\n if (name)\n _stateAttr.setAttr(name.trim().toLowerCase(), value);\n }\n }\n }\n else {\n _stateAttr.setAttr(attrName, attrValue);\n }\n }\n getDefaultStateAttr() {\n for (let stateAttr of this.list) {\n if (stateAttr.isDefaultState())\n return stateAttr;\n }\n }\n getStateAttr(state) {\n for (let stateAttr of this.list) {\n if (stateAttr.isStateEquals(state))\n return stateAttr;\n }\n }\n optStateAttr(state) {\n let stateAttr = this.getStateAttr(state);\n if (!stateAttr) {\n stateAttr = new attr_1.StateAttr(state);\n this.list.push(stateAttr);\n }\n return stateAttr;\n }\n getMatchedStateAttr(state) {\n if (state == null)\n return null;\n for (let stateAttr of this.matchedAttrCache) {\n if (stateAttr.isStateEquals(state))\n return stateAttr;\n }\n let matchedAttr = new attr_1.StateAttr(state);\n for (let stateAttr of this.list) {\n if (stateAttr.isDefaultState())\n continue;\n if (stateAttr.isStateMatch(state)) {\n matchedAttr.putAll(stateAttr);\n }\n }\n this.matchedAttrCache.push(matchedAttr);\n return matchedAttr;\n }\n removeAttrAllState(attrName) {\n for (let stateAttr of this.list) {\n stateAttr.getAttrMap().delete(attrName);\n }\n for (let stateAttr of this.matchedAttrCache) {\n stateAttr.getAttrMap().delete(attrName);\n }\n }\n }\n StateAttrList.CacheMap = new Map();\n attr_1.StateAttrList = StateAttrList;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n var Color = android.graphics.Color;\n var ColorStateList = android.content.res.ColorStateList;\n var Resources = android.content.res.Resources;\n class AttrBinder {\n constructor(host) {\n this.classAttrBindList = [];\n this.objectRefs = [];\n this.host = host;\n }\n addClassAttrBind(classAttrBind) {\n if (classAttrBind) {\n this.classAttrBindList.push(classAttrBind);\n }\n }\n addAttr(attrName, onAttrChange, stashAttrValueWhenStateChange) {\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n if (onAttrChange) {\n if (!this.attrChangeMap) {\n this.attrChangeMap = new Map();\n }\n this.attrChangeMap.set(attrName, onAttrChange);\n }\n if (stashAttrValueWhenStateChange) {\n this.attrStashMap = new Map();\n this.attrStashMap.set(attrName, stashAttrValueWhenStateChange);\n }\n }\n onAttrChange(attrName, attrValue, context) {\n this.mContext = context;\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n let onAttrChangeCall = this.attrChangeMap && this.attrChangeMap.get(attrName);\n if (onAttrChangeCall) {\n onAttrChangeCall.call(this.host, attrValue, this.host);\n }\n for (let classAttrBind of this.classAttrBindList) {\n classAttrBind.callSetter(attrName, this.host, attrValue);\n }\n }\n getAttrValue(attrName) {\n if (!attrName)\n return undefined;\n attrName = attrName.toLowerCase();\n let getAttrCall = this.attrStashMap && this.attrStashMap.get(attrName);\n let value;\n if (getAttrCall) {\n value = getAttrCall.call(this.host);\n }\n else {\n for (let classAttrBind of this.classAttrBindList) {\n value = classAttrBind.callGetter(attrName, this.host);\n if (value)\n break;\n }\n }\n if (value == null)\n return null;\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"string\")\n return value + '';\n return this.setRefObject(value);\n }\n getRefObject(ref) {\n if (ref && ref.startsWith('@ref/')) {\n ref = ref.substring('@ref/'.length);\n let index = Number.parseInt(ref);\n if (Number.isInteger(index)) {\n return this.objectRefs[index];\n }\n }\n }\n setRefObject(obj) {\n let index = this.objectRefs.indexOf(obj);\n if (index >= 0)\n return '@ref/' + index;\n this.objectRefs.push(obj);\n return '@ref/' + (this.objectRefs.length - 1);\n }\n parsePaddingMarginLTRB(value) {\n value = (value + '');\n let parts = [];\n for (let part of value.split(' ')) {\n if (part)\n parts.push(part);\n }\n let ltrb;\n switch (parts.length) {\n case 1:\n ltrb = [parts[0], parts[0], parts[0], parts[0]];\n break;\n case 2:\n ltrb = [parts[1], parts[0], parts[1], parts[0]];\n break;\n case 3:\n ltrb = [parts[1], parts[0], parts[1], parts[2]];\n break;\n case 4:\n ltrb = [parts[3], parts[0], parts[1], parts[2]];\n break;\n }\n if (ltrb) {\n ltrb = ltrb.map((v) => this.parseDimension(v));\n return ltrb;\n }\n throw Error('not a padding or margin value : ' + value);\n }\n parseEnum(value, enumMap, defaultValue) {\n if (Number.isInteger(value)) {\n return value;\n }\n if (enumMap.has(value)) {\n return enumMap.get(value);\n }\n return defaultValue;\n }\n parseBoolean(value, defaultValue = true) {\n if (value === false)\n return false;\n else if (value === true)\n return true;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n if (typeof value === \"string\") {\n return attr.AttrValueParser.parseBoolean(res, value, defaultValue);\n }\n return defaultValue;\n }\n parseGravity(s, defaultValue = Gravity.NO_GRAVITY) {\n let gravity = Number.parseInt(s);\n if (Number.isInteger(gravity))\n return gravity;\n return Gravity.parseGravity(s, defaultValue);\n }\n parseDrawable(s) {\n if (!s)\n return null;\n if (s instanceof Drawable)\n return s;\n if (s.startsWith('@ref/')) {\n let refObj = this.getRefObject(s);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n s = (s + '').trim();\n return attr.AttrValueParser.parseDrawable(res, s);\n }\n parseColor(value, defaultValue) {\n let color = Number.parseInt(value);\n if (Number.isInteger(color))\n return color;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n color = attr.AttrValueParser.parseColor(res, value, defaultValue);\n if (isNaN(color)) {\n return Color.BLACK;\n }\n return color;\n }\n parseColorList(value) {\n if (!value)\n return null;\n if (value instanceof ColorStateList)\n return value;\n if (typeof value == 'number')\n return ColorStateList.valueOf(value);\n if (value.startsWith('@ref/')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseColorStateList(res, value);\n }\n parseInt(value, defaultValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseInt(res, value, defaultValue);\n }\n parseFloat(value, defaultValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseFloat(res, value, defaultValue);\n }\n parseDimension(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimension(res, value, defaultValue, baseValue);\n }\n parseNumberPixelOffset(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimensionPixelOffset(res, value, defaultValue, baseValue);\n }\n parseNumberPixelSize(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimensionPixelSize(res, value, defaultValue, baseValue);\n }\n parseString(value, defaultValue) {\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n if (typeof value === 'string') {\n return attr.AttrValueParser.parseString(res, value, defaultValue);\n }\n return defaultValue;\n }\n parseStringArray(value) {\n if (typeof value === 'string') {\n if (value.startsWith('@ref/')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseTextArray(res, value);\n }\n return null;\n }\n }\n attr.AttrBinder = AttrBinder;\n (function (AttrBinder) {\n class ClassBinderMap {\n constructor() {\n this.binderMap = new Map();\n }\n set(key, value) {\n this.binderMap.set(key.toLowerCase(), value);\n return this;\n }\n get(key) {\n return this.binderMap.get(key.toLowerCase());\n }\n callSetter(attrName, host, attrValue) {\n if (!attrName)\n return;\n let value = this.get(attrName);\n if (value) {\n value.setter(host, attrValue);\n }\n }\n callGetter(attrName, host) {\n if (!attrName)\n return;\n let value = this.get(attrName);\n if (value) {\n return value.getter(host);\n }\n }\n }\n AttrBinder.ClassBinderMap = ClassBinderMap;\n })(AttrBinder = attr.AttrBinder || (attr.AttrBinder = {}));\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\n class PerformanceAdjuster {\n static noCanvasMode() {\n android.graphics.Canvas.prototype = HackCanvas.prototype;\n android.view.View.prototype.onDrawVerticalScrollBar =\n function (canvas, scrollBar, l, t, r, b) {\n let scrollBarEl = this.bindElement['VerticalScrollBar'];\n if (!scrollBarEl) {\n scrollBarEl = document.createElement('div');\n this.bindElement['VerticalScrollBar'] = scrollBarEl;\n scrollBarEl.style.zIndex = '9';\n scrollBarEl.style.position = 'absolute';\n scrollBarEl.style.background = 'black';\n scrollBarEl.style.left = '0px';\n scrollBarEl.style.top = '0px';\n this.bindElement.appendChild(scrollBarEl);\n }\n let height = b - t;\n let width = r - l;\n let size = height;\n let thickness = width;\n let extent = this.mScrollCache.scrollBar.mExtent;\n let range = this.mScrollCache.scrollBar.mRange;\n let length = Math.round(size * extent / range);\n let offset = Math.round((size - length) * this.mScrollCache.scrollBar.mOffset / (range - extent));\n if (t < 0)\n t = 0;\n if (offset < 0)\n offset = 0;\n scrollBarEl.style.transform = scrollBarEl.style.webkitTransform = `translate(${l}px, ${t + offset}px)`;\n scrollBarEl.style.width = (r - l) / 2 + 'px';\n scrollBarEl.style.height = length + 'px';\n scrollBarEl.style.opacity = this.mScrollCache.scrollBar.mVerticalThumb.getAlpha() / 255 + '';\n };\n const oldSetBackground = android.view.View.prototype.setBackground;\n android.view.View.prototype.setBackground = function (drawable) {\n oldSetBackground.call(this, drawable);\n if (drawable instanceof ColorDrawable) {\n this.bindElement.style.background = Color.toRGBAFunc(this.mBackground.getColor());\n }\n };\n }\n }\n util.PerformanceAdjuster = PerformanceAdjuster;\n class HackCanvas extends android.graphics.Canvas {\n init() {\n }\n recycle() {\n }\n translate(dx, dy) {\n }\n scale(sx, sy, px, py) {\n }\n rotate(degrees, px, py) {\n }\n drawRGB(r, g, b) {\n }\n drawARGB(a, r, g, b) {\n }\n drawColor(color) {\n }\n clearColor() {\n }\n save() {\n return 1;\n }\n restore() {\n }\n restoreToCount(saveCount) {\n }\n getSaveCount() {\n return 1;\n }\n clipRect(...args) {\n return false;\n }\n getClipBounds(bounds) {\n return null;\n }\n quickReject(...args) {\n return false;\n }\n drawCanvas(canvas, offsetX, offsetY) {\n }\n drawRect(...args) {\n }\n drawText(text, x, y, paint) {\n }\n }\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image_1) {\n var Paint = android.graphics.Paint;\n var Rect = android.graphics.Rect;\n var Drawable = android.graphics.drawable.Drawable;\n class NetDrawable extends Drawable {\n constructor(src, paint, overrideImageRatio) {\n super();\n this.mImageWidth = 0;\n this.mImageHeight = 0;\n let image;\n if (src instanceof image_1.NetImage) {\n image = src;\n if (overrideImageRatio)\n image.mOverrideImageRatio = overrideImageRatio;\n }\n else {\n image = new image_1.NetImage(src, overrideImageRatio);\n }\n image.addLoadListener(() => this.onLoad(), () => this.onError());\n this.mState = new State(image, paint);\n if (image.isImageLoaded())\n this.initBoundWithLoadedImage(image);\n }\n initBoundWithLoadedImage(image) {\n let imageRatio = image.getImageRatio();\n this.mImageWidth = Math.floor(image.width / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.mImageHeight = Math.floor(image.height / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n }\n setURL(url, hiddenWhenLoading = true) {\n if (hiddenWhenLoading) {\n this.mImageWidth = this.mImageHeight = 0;\n }\n this.mState.mImage.src = url;\n }\n draw(canvas) {\n if (!this.isImageSizeEmpty()) {\n let emptyTileX = this.mTileModeX == null || this.mTileModeX == NetDrawable.TileMode.DEFAULT;\n let emptyTileY = this.mTileModeY == null || this.mTileModeY == NetDrawable.TileMode.DEFAULT;\n if (emptyTileX && emptyTileY) {\n canvas.drawImage(this.mState.mImage, null, this.getBounds(), this.mState.paint);\n }\n else {\n this.drawTile(canvas);\n }\n }\n }\n drawTile(canvas) {\n let imageWidth = this.mImageWidth;\n let imageHeight = this.mImageHeight;\n if (imageHeight <= 0 || imageWidth <= 0)\n return;\n let tileX = this.mTileModeX;\n let tileY = this.mTileModeY;\n let bound = this.getBounds();\n if (this.mTmpTileBound == null)\n this.mTmpTileBound = new Rect();\n let tmpBound = this.mTmpTileBound;\n tmpBound.setEmpty();\n function drawColumn() {\n if (tileY === NetDrawable.TileMode.REPEAT) {\n tmpBound.bottom = imageHeight;\n while (tmpBound.isEmpty() || tmpBound.intersects(bound)) {\n canvas.drawImage(this.mState.mImage, null, tmpBound, this.mState.paint);\n tmpBound.offset(0, imageHeight);\n }\n }\n else {\n tmpBound.bottom = bound.height();\n canvas.drawImage(this.mState.mImage, null, tmpBound, this.mState.paint);\n }\n }\n if (tileX === NetDrawable.TileMode.REPEAT) {\n tmpBound.right = imageWidth;\n while (tmpBound.isEmpty() || tmpBound.intersects(bound)) {\n drawColumn.call(this);\n tmpBound.offset(imageWidth, -tmpBound.top);\n }\n }\n else {\n tmpBound.right = bound.width();\n drawColumn.call(this);\n }\n }\n setAlpha(alpha) {\n this.mState.paint.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.paint.getAlpha();\n }\n getIntrinsicWidth() {\n return this.mImageWidth;\n }\n getIntrinsicHeight() {\n return this.mImageHeight;\n }\n onLoad() {\n this.initBoundWithLoadedImage(this.mState.mImage);\n if (this.mLoadListener)\n this.mLoadListener.onLoad(this);\n this.invalidateSelf();\n this.notifySizeChangeSelf();\n }\n onError() {\n this.mImageWidth = this.mImageHeight = 0;\n if (this.mLoadListener)\n this.mLoadListener.onError(this);\n this.invalidateSelf();\n this.notifySizeChangeSelf();\n }\n isImageSizeEmpty() {\n return this.mImageWidth <= 0 || this.mImageHeight <= 0;\n }\n getImage() {\n return this.mState.mImage;\n }\n setLoadListener(loadListener) {\n this.mLoadListener = loadListener;\n }\n setTileMode(tileX, tileY) {\n this.mTileModeX = tileX;\n this.mTileModeY = tileY;\n this.invalidateSelf();\n }\n getConstantState() {\n return this.mState;\n }\n }\n image_1.NetDrawable = NetDrawable;\n (function (NetDrawable) {\n (function (TileMode) {\n TileMode[TileMode[\"DEFAULT\"] = 0] = \"DEFAULT\";\n TileMode[TileMode[\"REPEAT\"] = 1] = \"REPEAT\";\n })(NetDrawable.TileMode || (NetDrawable.TileMode = {}));\n var TileMode = NetDrawable.TileMode;\n })(NetDrawable = image_1.NetDrawable || (image_1.NetDrawable = {}));\n class State {\n constructor(image, paint = new Paint()) {\n this.mImage = image;\n this.paint = new Paint();\n if (paint != null)\n this.paint.set(paint);\n }\n newDrawable() {\n return new NetDrawable(this.mImage.src, this.paint);\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class Platform {\n }\n Platform.isIOS = navigator.userAgent.match(/(iPhone|iPad|iPod|ios)/i) ? true : false;\n Platform.isAndroid = navigator.userAgent.match('Android') ? true : false;\n Platform.isWeChat = navigator.userAgent.match(/MicroMessenger/i) ? true : false;\n util.Platform = Platform;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var Platform = androidui.util.Platform;\n const DEBUG = false;\n const TAG = \"KeyEvent\";\n class KeyEvent {\n constructor() {\n this._downingKeyEventMap = new Map();\n }\n static obtain(action, code) {\n let ev = new KeyEvent();\n ev.mDownTime = SystemClock.uptimeMillis();\n ev.mEventTime = SystemClock.uptimeMillis();\n ev.mAction = action;\n ev.mKeyCode = code;\n return ev;\n }\n initKeyEvent(keyEvent, action) {\n this.mEventTime = SystemClock.uptimeMillis();\n this.mKeyCode = keyEvent.keyCode;\n this.mAltKey = keyEvent.altKey;\n this.mShiftKey = keyEvent.shiftKey;\n this.mCtrlKey = keyEvent.ctrlKey;\n this.mMetaKey = keyEvent.metaKey;\n let keyIdentifier = keyEvent['keyIdentifier'] + '';\n if (keyIdentifier) {\n this.mIsTypingKey = keyIdentifier.startsWith('U+');\n if (this.mIsTypingKey) {\n this.mKeyCode = Number.parseInt(keyIdentifier.substr(2), 16) || this.mKeyCode;\n }\n }\n if (this.mKeyCode >= KeyEvent.KEYCODE_Key_a && this.mKeyCode <= KeyEvent.KEYCODE_Key_z\n && this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode -= 32;\n }\n if (this.mKeyCode >= KeyEvent.KEYCODE_KeyA && this.mKeyCode <= KeyEvent.KEYCODE_KeyZ\n && !this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode += 32;\n }\n if (Platform.isAndroid) {\n if (!this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.noMeta[this.mKeyCode] || this.mKeyCode;\n }\n else if (this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.shift[this.mKeyCode] || this.mKeyCode;\n }\n else if (!this.mShiftKey && this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.ctrl[this.mKeyCode] || this.mKeyCode;\n }\n else if (!this.mShiftKey && !this.mCtrlKey && this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.alt[this.mKeyCode] || this.mKeyCode;\n }\n }\n this.mKeyCode = KeyEvent.FIX_MAP_KEYCODE[this.mKeyCode] || this.mKeyCode;\n if (action === KeyEvent.ACTION_DOWN) {\n this.mDownTime = SystemClock.uptimeMillis();\n let keyEvents = this._downingKeyEventMap.get(keyEvent.keyCode);\n if (keyEvents == null) {\n keyEvents = [];\n this._downingKeyEventMap.set(keyEvent.keyCode, keyEvents);\n }\n keyEvents.push(keyEvent);\n }\n else if (action === KeyEvent.ACTION_UP) {\n this._downingKeyEventMap.delete(keyEvent.keyCode);\n }\n this.mAction = action;\n }\n static isConfirmKey(keyCode) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n return true;\n default:\n return false;\n }\n }\n isAltPressed() {\n return this.mAltKey;\n }\n isShiftPressed() {\n return this.mShiftKey;\n }\n isCtrlPressed() {\n return this.mCtrlKey;\n }\n isMetaPressed() {\n return this.mMetaKey;\n }\n getAction() {\n return this.mAction;\n }\n startTracking() {\n this.mFlags |= KeyEvent.FLAG_START_TRACKING;\n }\n isTracking() {\n return (this.mFlags & KeyEvent.FLAG_TRACKING) != 0;\n }\n isLongPress() {\n return this.getRepeatCount() === 1;\n }\n getKeyCode() {\n return this.mKeyCode;\n }\n getRepeatCount() {\n let downArray = this._downingKeyEventMap.get(this.mKeyCode);\n return downArray ? downArray.length - 1 : 0;\n }\n getDownTime() {\n return this.mDownTime;\n }\n getEventTime() {\n return this.mEventTime;\n }\n dispatch(receiver, state, target) {\n switch (this.mAction) {\n case KeyEvent.ACTION_DOWN: {\n this.mFlags &= ~KeyEvent.FLAG_START_TRACKING;\n if (DEBUG)\n Log.v(TAG, \"Key down to \" + target + \" in \" + state\n + \": \" + this);\n let res = receiver.onKeyDown(this.getKeyCode(), this);\n if (state != null) {\n if (res && this.getRepeatCount() == 0 && (this.mFlags & KeyEvent.FLAG_START_TRACKING) != 0) {\n if (DEBUG)\n Log.v(TAG, \" Start tracking!\");\n state.startTracking(this, target);\n }\n else if (this.isLongPress() && state.isTracking(this)) {\n if (receiver.onKeyLongPress(this.getKeyCode(), this)) {\n if (DEBUG)\n Log.v(TAG, \" Clear from long press!\");\n state.performedLongPress(this);\n res = true;\n }\n }\n }\n return res;\n }\n case KeyEvent.ACTION_UP:\n if (DEBUG)\n Log.v(TAG, \"Key up to \" + target + \" in \" + state\n + \": \" + this);\n if (state != null) {\n state.handleUpEvent(this);\n }\n return receiver.onKeyUp(this.getKeyCode(), this);\n }\n return false;\n }\n hasNoModifiers() {\n if (this.isAltPressed())\n return false;\n if (this.isShiftPressed())\n return false;\n if (this.isCtrlPressed())\n return false;\n if (this.isMetaPressed())\n return false;\n return true;\n }\n hasModifiers(modifiers) {\n if ((modifiers & KeyEvent.META_ALT_ON) === KeyEvent.META_ALT_ON && this.isAltPressed())\n return true;\n if ((modifiers & KeyEvent.META_SHIFT_ON) === KeyEvent.META_SHIFT_ON && this.isShiftPressed())\n return true;\n if ((modifiers & KeyEvent.META_META_ON) === KeyEvent.META_META_ON && this.isMetaPressed())\n return true;\n if ((modifiers & KeyEvent.META_CTRL_ON) === KeyEvent.META_CTRL_ON && this.isCtrlPressed())\n return true;\n }\n getMetaState() {\n let meta = 0;\n if (this.isAltPressed())\n meta |= KeyEvent.META_ALT_ON;\n if (this.isShiftPressed())\n meta |= KeyEvent.META_SHIFT_ON;\n if (this.isCtrlPressed())\n meta |= KeyEvent.META_CTRL_ON;\n if (this.isMetaPressed())\n meta |= KeyEvent.META_META_ON;\n return meta;\n }\n toString() {\n return JSON.stringify(this);\n }\n isCanceled() {\n return false;\n }\n static actionToString(action) {\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return \"ACTION_DOWN\";\n case KeyEvent.ACTION_UP:\n return \"ACTION_UP\";\n default:\n return '' + (action);\n }\n }\n static keyCodeToString(keyCode) {\n return String.fromCharCode(keyCode);\n }\n }\n KeyEvent.KEYCODE_DPAD_UP = 38;\n KeyEvent.KEYCODE_DPAD_DOWN = 40;\n KeyEvent.KEYCODE_DPAD_LEFT = 37;\n KeyEvent.KEYCODE_DPAD_RIGHT = 39;\n KeyEvent.KEYCODE_DPAD_CENTER = 13;\n KeyEvent.KEYCODE_ENTER = 13;\n KeyEvent.KEYCODE_TAB = 9;\n KeyEvent.KEYCODE_SPACE = 32;\n KeyEvent.KEYCODE_ESCAPE = 27;\n KeyEvent.KEYCODE_Backspace = 8;\n KeyEvent.KEYCODE_PAGE_UP = 33;\n KeyEvent.KEYCODE_PAGE_DOWN = 34;\n KeyEvent.KEYCODE_MOVE_HOME = 36;\n KeyEvent.KEYCODE_MOVE_END = 35;\n KeyEvent.KEYCODE_Digit0 = 48;\n KeyEvent.KEYCODE_Digit1 = 49;\n KeyEvent.KEYCODE_Digit2 = 50;\n KeyEvent.KEYCODE_Digit3 = 51;\n KeyEvent.KEYCODE_Digit4 = 52;\n KeyEvent.KEYCODE_Digit5 = 53;\n KeyEvent.KEYCODE_Digit6 = 54;\n KeyEvent.KEYCODE_Digit7 = 55;\n KeyEvent.KEYCODE_Digit8 = 56;\n KeyEvent.KEYCODE_Digit9 = 57;\n KeyEvent.KEYCODE_Key_a = 65;\n KeyEvent.KEYCODE_Key_b = 66;\n KeyEvent.KEYCODE_Key_c = 67;\n KeyEvent.KEYCODE_Key_d = 68;\n KeyEvent.KEYCODE_Key_e = 69;\n KeyEvent.KEYCODE_Key_f = 70;\n KeyEvent.KEYCODE_Key_g = 71;\n KeyEvent.KEYCODE_Key_h = 72;\n KeyEvent.KEYCODE_Key_i = 73;\n KeyEvent.KEYCODE_Key_j = 74;\n KeyEvent.KEYCODE_Key_k = 75;\n KeyEvent.KEYCODE_Key_l = 76;\n KeyEvent.KEYCODE_Key_m = 77;\n KeyEvent.KEYCODE_Key_n = 78;\n KeyEvent.KEYCODE_Key_o = 79;\n KeyEvent.KEYCODE_Key_p = 80;\n KeyEvent.KEYCODE_Key_q = 81;\n KeyEvent.KEYCODE_Key_r = 82;\n KeyEvent.KEYCODE_Key_s = 83;\n KeyEvent.KEYCODE_Key_t = 84;\n KeyEvent.KEYCODE_Key_u = 85;\n KeyEvent.KEYCODE_Key_v = 86;\n KeyEvent.KEYCODE_Key_w = 87;\n KeyEvent.KEYCODE_Key_x = 88;\n KeyEvent.KEYCODE_Key_y = 89;\n KeyEvent.KEYCODE_Key_z = 90;\n KeyEvent.KEYCODE_KeyA = 0x41;\n KeyEvent.KEYCODE_KeyB = 0x42;\n KeyEvent.KEYCODE_KeyC = 0x43;\n KeyEvent.KEYCODE_KeyD = 0x44;\n KeyEvent.KEYCODE_KeyE = 0x45;\n KeyEvent.KEYCODE_KeyF = 0x46;\n KeyEvent.KEYCODE_KeyG = 0x47;\n KeyEvent.KEYCODE_KeyH = 0x48;\n KeyEvent.KEYCODE_KeyI = 0x49;\n KeyEvent.KEYCODE_KeyJ = 0x4a;\n KeyEvent.KEYCODE_KeyK = 0x4b;\n KeyEvent.KEYCODE_KeyL = 0x4c;\n KeyEvent.KEYCODE_KeyM = 0x4d;\n KeyEvent.KEYCODE_KeyN = 0x4e;\n KeyEvent.KEYCODE_KeyO = 0x4f;\n KeyEvent.KEYCODE_KeyP = 0x50;\n KeyEvent.KEYCODE_KeyQ = 0x51;\n KeyEvent.KEYCODE_KeyR = 0x52;\n KeyEvent.KEYCODE_KeyS = 0x53;\n KeyEvent.KEYCODE_KeyT = 0x54;\n KeyEvent.KEYCODE_KeyU = 0x55;\n KeyEvent.KEYCODE_KeyV = 0x56;\n KeyEvent.KEYCODE_KeyW = 0x57;\n KeyEvent.KEYCODE_KeyX = 0x58;\n KeyEvent.KEYCODE_KeyY = 0x59;\n KeyEvent.KEYCODE_KeyZ = 0x5a;\n KeyEvent.KEYCODE_Semicolon = 0x3b;\n KeyEvent.KEYCODE_LessThan = 0x3c;\n KeyEvent.KEYCODE_Equal = 0x3d;\n KeyEvent.KEYCODE_MoreThan = 0x3e;\n KeyEvent.KEYCODE_Question = 0x3f;\n KeyEvent.KEYCODE_Comma = 0x2c;\n KeyEvent.KEYCODE_Period = 0x2e;\n KeyEvent.KEYCODE_Slash = 0x2f;\n KeyEvent.KEYCODE_Quotation = 0x27;\n KeyEvent.KEYCODE_LeftBracket = 0x5b;\n KeyEvent.KEYCODE_Backslash = 0x5c;\n KeyEvent.KEYCODE_RightBracket = 0x5d;\n KeyEvent.KEYCODE_Minus = 0x2d;\n KeyEvent.KEYCODE_Colon = 0x3a;\n KeyEvent.KEYCODE_Double_Quotation = 0x22;\n KeyEvent.KEYCODE_Backquote = 0x60;\n KeyEvent.KEYCODE_Tilde = 0x7e;\n KeyEvent.KEYCODE_Left_Brace = 0x7b;\n KeyEvent.KEYCODE_Or = 0x7c;\n KeyEvent.KEYCODE_Right_Brace = 0x7d;\n KeyEvent.KEYCODE_Del = 0x7f;\n KeyEvent.KEYCODE_Exclamation = 0x21;\n KeyEvent.KEYCODE_Right_Parenthesis = 0x29;\n KeyEvent.KEYCODE_AT = 0x40;\n KeyEvent.KEYCODE_Sharp = 0x23;\n KeyEvent.KEYCODE_Dollar = 0x24;\n KeyEvent.KEYCODE_Percent = 0x25;\n KeyEvent.KEYCODE_Power = 0x5e;\n KeyEvent.KEYCODE_And = 0x26;\n KeyEvent.KEYCODE_Asterisk = 0x2a;\n KeyEvent.KEYCODE_Left_Parenthesis = 0x28;\n KeyEvent.KEYCODE_Underline = 0x5f;\n KeyEvent.KEYCODE_Add = 0x2b;\n KeyEvent.KEYCODE_BACK = -1;\n KeyEvent.KEYCODE_MENU = -2;\n KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME = {\n noMeta: {\n 186: KeyEvent.KEYCODE_Semicolon,\n 187: KeyEvent.KEYCODE_Equal,\n 188: KeyEvent.KEYCODE_Comma,\n 189: KeyEvent.KEYCODE_Minus,\n 190: KeyEvent.KEYCODE_Period,\n 191: KeyEvent.KEYCODE_Slash,\n 192: KeyEvent.KEYCODE_Quotation,\n 219: KeyEvent.KEYCODE_LeftBracket,\n 220: KeyEvent.KEYCODE_Backslash,\n 221: KeyEvent.KEYCODE_RightBracket,\n },\n shift: {\n 186: KeyEvent.KEYCODE_Colon,\n 187: KeyEvent.KEYCODE_Add,\n 188: KeyEvent.KEYCODE_LessThan,\n 189: KeyEvent.KEYCODE_Underline,\n 190: KeyEvent.KEYCODE_MoreThan,\n 191: KeyEvent.KEYCODE_Question,\n 192: KeyEvent.KEYCODE_Double_Quotation,\n 219: KeyEvent.KEYCODE_Left_Brace,\n 220: KeyEvent.KEYCODE_Or,\n 221: KeyEvent.KEYCODE_Right_Brace,\n },\n ctrl: {},\n alt: {}\n };\n KeyEvent.FIX_MAP_KEYCODE = {\n 186: KeyEvent.KEYCODE_Semicolon,\n 187: KeyEvent.KEYCODE_Equal,\n 188: KeyEvent.KEYCODE_Comma,\n 189: KeyEvent.KEYCODE_Minus,\n 190: KeyEvent.KEYCODE_Period,\n 191: KeyEvent.KEYCODE_Slash,\n 192: KeyEvent.KEYCODE_Backquote,\n 219: KeyEvent.KEYCODE_LeftBracket,\n 220: KeyEvent.KEYCODE_Backslash,\n 221: KeyEvent.KEYCODE_RightBracket,\n 222: KeyEvent.KEYCODE_Quotation,\n 96: KeyEvent.KEYCODE_Digit0,\n 97: KeyEvent.KEYCODE_Digit1,\n 98: KeyEvent.KEYCODE_Digit2,\n 99: KeyEvent.KEYCODE_Digit3,\n 100: KeyEvent.KEYCODE_Digit4,\n 101: KeyEvent.KEYCODE_Digit5,\n 102: KeyEvent.KEYCODE_Digit6,\n 103: KeyEvent.KEYCODE_Digit7,\n 104: KeyEvent.KEYCODE_Digit8,\n 105: KeyEvent.KEYCODE_Digit9\n };\n KeyEvent.ACTION_DOWN = 0;\n KeyEvent.ACTION_UP = 1;\n KeyEvent.META_MASK_SHIFT = 16;\n KeyEvent.META_ALT_ON = 0x02;\n KeyEvent.META_SHIFT_ON = 0x1;\n KeyEvent.META_CTRL_ON = 0x1000;\n KeyEvent.META_META_ON = 0x10000;\n KeyEvent.FLAG_CANCELED = 0x20;\n KeyEvent.FLAG_CANCELED_LONG_PRESS = 0x100;\n KeyEvent.FLAG_LONG_PRESS = 0x80;\n KeyEvent.FLAG_TRACKING = 0x200;\n KeyEvent.FLAG_START_TRACKING = 0x40000000;\n view.KeyEvent = KeyEvent;\n (function (KeyEvent) {\n class DispatcherState {\n constructor() {\n this.mActiveLongPresses = new android.util.SparseArray();\n }\n reset(target) {\n if (target == null) {\n if (DEBUG)\n Log.v(TAG, \"Reset: \" + this);\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n this.mActiveLongPresses.clear();\n }\n else {\n if (this.mDownTarget == target) {\n if (DEBUG)\n Log.v(TAG, \"Reset in \" + target + \": \" + this);\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n }\n }\n }\n startTracking(event, target) {\n if (event.getAction() != KeyEvent.ACTION_DOWN) {\n throw new Error(\"Can only start tracking on a down event\");\n }\n if (DEBUG)\n Log.v(TAG, \"Start trackingt in \" + target + \": \" + this);\n this.mDownKeyCode = event.getKeyCode();\n this.mDownTarget = target;\n }\n isTracking(event) {\n return this.mDownKeyCode == event.getKeyCode();\n }\n performedLongPress(event) {\n this.mActiveLongPresses.put(event.getKeyCode(), 1);\n }\n handleUpEvent(event) {\n const keyCode = event.getKeyCode();\n if (DEBUG)\n Log.v(TAG, \"Handle key up \" + event + \": \" + this);\n let index = this.mActiveLongPresses.indexOfKey(keyCode);\n if (index >= 0) {\n if (DEBUG)\n Log.v(TAG, \" Index: \" + index);\n event.mFlags |= KeyEvent.FLAG_CANCELED | KeyEvent.FLAG_CANCELED_LONG_PRESS;\n this.mActiveLongPresses.removeAt(index);\n }\n if (this.mDownKeyCode == keyCode) {\n if (DEBUG)\n Log.v(TAG, \" Tracking!\");\n event.mFlags |= KeyEvent.FLAG_TRACKING;\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n }\n }\n }\n KeyEvent.DispatcherState = DispatcherState;\n })(KeyEvent = view.KeyEvent || (view.KeyEvent = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_4) {\n var PixelFormat = android.graphics.PixelFormat;\n var Rect = android.graphics.Rect;\n var System = java.lang.System;\n var Drawable = android.graphics.drawable.Drawable;\n class LayerDrawable extends Drawable {\n constructor(layers, state = null) {\n super();\n this.mOpacityOverride = PixelFormat.UNKNOWN;\n this.mTmpRect = new Rect();\n let _as = this.createConstantState(state);\n this.mLayerState = _as;\n if (_as.mNum > 0) {\n this.ensurePadding();\n }\n if (layers != null) {\n let length = layers.length;\n let r = new Array(length);\n for (let i = 0; i < length; i++) {\n r[i] = new LayerDrawable.ChildDrawable();\n r[i].mDrawable = layers[i];\n layers[i].setCallback(this);\n }\n this.mLayerState.mNum = length;\n this.mLayerState.mChildren = r;\n this.ensurePadding();\n }\n }\n createConstantState(state) {\n return new LayerDrawable.LayerState(state, this);\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n this.mOpacityOverride = a.getInt(\"android:opacity\", PixelFormat.UNKNOWN);\n this.setAutoMirrored(a.getBoolean(\"android:autoMirrored\", false));\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n a = r.obtainAttributes(item);\n let left = a.getDimensionPixelOffset(\"android:left\", 0);\n let top = a.getDimensionPixelOffset(\"android:top\", 0);\n let right = a.getDimensionPixelOffset(\"android:right\", 0);\n let bottom = a.getDimensionPixelOffset(\"android:bottom\", 0);\n let dr = a.getDrawable(\"android:drawable\");\n let id = a.getString(\"android:id\");\n a.recycle();\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw Error(`new XmlPullParserException( tag requires a 'drawable' attribute or child tag defining a drawable)`);\n }\n this.addLayer(dr, id, left, top, right, bottom);\n }\n this.ensurePadding();\n this.onStateChange(this.getState());\n }\n addLayer(layer, id, left = 0, top = 0, right = 0, bottom = 0) {\n const st = this.mLayerState;\n let N = st.mChildren != null ? st.mChildren.length : 0;\n let i = st.mNum;\n if (i >= N) {\n let nu = new Array(N + 10);\n if (i > 0) {\n System.arraycopy(st.mChildren, 0, nu, 0, i);\n }\n st.mChildren = nu;\n }\n let childDrawable = new LayerDrawable.ChildDrawable();\n st.mChildren[i] = childDrawable;\n childDrawable.mId = id;\n childDrawable.mDrawable = layer;\n childDrawable.mDrawable.setAutoMirrored(this.isAutoMirrored());\n childDrawable.mInsetL = left;\n childDrawable.mInsetT = top;\n childDrawable.mInsetR = right;\n childDrawable.mInsetB = bottom;\n st.mNum++;\n layer.setCallback(this);\n }\n findDrawableByLayerId(id) {\n const layers = this.mLayerState.mChildren;\n for (let i = this.mLayerState.mNum - 1; i >= 0; i--) {\n if (layers[i].mId == id) {\n return layers[i].mDrawable;\n }\n }\n return null;\n }\n setId(index, id) {\n this.mLayerState.mChildren[index].mId = id;\n }\n getNumberOfLayers() {\n return this.mLayerState.mNum;\n }\n getDrawable(index) {\n return this.mLayerState.mChildren[index].mDrawable;\n }\n getId(index) {\n return this.mLayerState.mChildren[index].mId;\n }\n setDrawableByLayerId(id, drawable) {\n const layers = this.mLayerState.mChildren;\n for (let i = this.mLayerState.mNum - 1; i >= 0; i--) {\n if (layers[i].mId == id) {\n if (layers[i].mDrawable != null) {\n if (drawable != null) {\n let bounds = layers[i].mDrawable.getBounds();\n drawable.setBounds(bounds);\n }\n layers[i].mDrawable.setCallback(null);\n }\n if (drawable != null) {\n drawable.setCallback(this);\n }\n layers[i].mDrawable = drawable;\n return true;\n }\n }\n return false;\n }\n setLayerInset(index, l, t, r, b) {\n let childDrawable = this.mLayerState.mChildren[index];\n childDrawable.mInsetL = l;\n childDrawable.mInsetT = t;\n childDrawable.mInsetR = r;\n childDrawable.mInsetB = b;\n }\n drawableSizeChange(who) {\n let callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.draw(canvas);\n }\n }\n getPadding(padding) {\n padding.left = 0;\n padding.top = 0;\n padding.right = 0;\n padding.bottom = 0;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n this.reapplyPadding(i, array[i]);\n padding.left += this.mPaddingL[i];\n padding.top += this.mPaddingT[i];\n padding.right += this.mPaddingR[i];\n padding.bottom += this.mPaddingB[i];\n }\n return true;\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setVisible(visible, restart);\n }\n return changed;\n }\n setDither(dither) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setDither(dither);\n }\n }\n setAlpha(alpha) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setAlpha(alpha);\n }\n }\n getAlpha() {\n const array = this.mLayerState.mChildren;\n if (this.mLayerState.mNum > 0) {\n return array[0].mDrawable.getAlpha();\n }\n else {\n return super.getAlpha();\n }\n }\n setOpacity(opacity) {\n this.mOpacityOverride = opacity;\n }\n getOpacity() {\n if (this.mOpacityOverride != PixelFormat.UNKNOWN) {\n return this.mOpacityOverride;\n }\n return this.mLayerState.getOpacity();\n }\n setAutoMirrored(mirrored) {\n this.mLayerState.mAutoMirrored = mirrored;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setAutoMirrored(mirrored);\n }\n }\n isAutoMirrored() {\n return this.mLayerState.mAutoMirrored;\n }\n isStateful() {\n return this.mLayerState.isStateful();\n }\n onStateChange(state) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let paddingChanged = false;\n let changed = false;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n if (r.mDrawable.setState(state)) {\n changed = true;\n }\n if (this.reapplyPadding(i, r)) {\n paddingChanged = true;\n }\n }\n if (paddingChanged) {\n this.onBoundsChange(this.getBounds());\n }\n return changed;\n }\n onLevelChange(level) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let paddingChanged = false;\n let changed = false;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n if (r.mDrawable.setLevel(level)) {\n changed = true;\n }\n if (this.reapplyPadding(i, r)) {\n paddingChanged = true;\n }\n }\n if (paddingChanged) {\n this.onBoundsChange(this.getBounds());\n }\n return changed;\n }\n onBoundsChange(bounds) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padL = 0, padT = 0, padR = 0, padB = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n r.mDrawable.setBounds(bounds.left + r.mInsetL + padL, bounds.top + r.mInsetT + padT, bounds.right - r.mInsetR - padR, bounds.bottom - r.mInsetB - padB);\n padL += this.mPaddingL[i];\n padR += this.mPaddingR[i];\n padT += this.mPaddingT[i];\n padB += this.mPaddingB[i];\n }\n }\n getIntrinsicWidth() {\n let width = -1;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padL = 0, padR = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n let w = r.mDrawable.getIntrinsicWidth() + r.mInsetL + r.mInsetR + padL + padR;\n if (w > width) {\n width = w;\n }\n padL += this.mPaddingL[i];\n padR += this.mPaddingR[i];\n }\n return width;\n }\n getIntrinsicHeight() {\n let height = -1;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padT = 0, padB = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n let h = r.mDrawable.getIntrinsicHeight() + r.mInsetT + r.mInsetB + padT + padB;\n if (h > height) {\n height = h;\n }\n padT += this.mPaddingT[i];\n padB += this.mPaddingB[i];\n }\n return height;\n }\n reapplyPadding(i, r) {\n const rect = this.mTmpRect;\n r.mDrawable.getPadding(rect);\n if (rect.left != this.mPaddingL[i] || rect.top != this.mPaddingT[i] || rect.right != this.mPaddingR[i] || rect.bottom != this.mPaddingB[i]) {\n this.mPaddingL[i] = rect.left;\n this.mPaddingT[i] = rect.top;\n this.mPaddingR[i] = rect.right;\n this.mPaddingB[i] = rect.bottom;\n return true;\n }\n return false;\n }\n ensurePadding() {\n const N = this.mLayerState.mNum;\n if (this.mPaddingL != null && this.mPaddingL.length >= N) {\n return;\n }\n this.mPaddingL = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingT = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingR = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingB = androidui.util.ArrayCreator.newNumberArray(N);\n for (var i = 0; i < N; i++) {\n this.mPaddingL[i] = 0;\n this.mPaddingT[i] = 0;\n this.mPaddingR[i] = 0;\n this.mPaddingB[i] = 0;\n }\n }\n getConstantState() {\n if (this.mLayerState.canConstantState()) {\n return this.mLayerState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mLayerState = this.createConstantState(this.mLayerState);\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.mutate();\n }\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_4.LayerDrawable = LayerDrawable;\n (function (LayerDrawable) {\n class ChildDrawable {\n constructor() {\n this.mInsetL = 0;\n this.mInsetT = 0;\n this.mInsetR = 0;\n this.mInsetB = 0;\n }\n }\n LayerDrawable.ChildDrawable = ChildDrawable;\n class LayerState {\n constructor(orig, owner) {\n this.mNum = 0;\n this.mHaveOpacity = false;\n this.mOpacity = 0;\n this.mHaveStateful = false;\n if (orig != null) {\n const origChildDrawable = orig.mChildren;\n const N = orig.mNum;\n this.mNum = N;\n this.mChildren = new Array(N);\n for (let i = 0; i < N; i++) {\n const r = this.mChildren[i] = new LayerDrawable.ChildDrawable();\n const or = origChildDrawable[i];\n r.mDrawable = or.mDrawable.getConstantState().newDrawable();\n r.mDrawable.setCallback(owner);\n r.mInsetL = or.mInsetL;\n r.mInsetT = or.mInsetT;\n r.mInsetR = or.mInsetR;\n r.mInsetB = or.mInsetB;\n r.mId = or.mId;\n }\n this.mHaveOpacity = orig.mHaveOpacity;\n this.mOpacity = orig.mOpacity;\n this.mHaveStateful = orig.mHaveStateful;\n this.mStateful = orig.mStateful;\n this.mCheckedConstantState = this.mCanConstantState = true;\n this.mAutoMirrored = orig.mAutoMirrored;\n }\n else {\n this.mNum = 0;\n this.mChildren = null;\n }\n }\n newDrawable() {\n return new LayerDrawable(null, this);\n }\n getOpacity() {\n if (this.mHaveOpacity) {\n return this.mOpacity;\n }\n const N = this.mNum;\n let op = N > 0 ? this.mChildren[0].mDrawable.getOpacity() : PixelFormat.TRANSPARENT;\n for (let i = 1; i < N; i++) {\n op = Drawable.resolveOpacity(op, this.mChildren[i].mDrawable.getOpacity());\n }\n this.mOpacity = op;\n this.mHaveOpacity = true;\n return op;\n }\n isStateful() {\n if (this.mHaveStateful) {\n return this.mStateful;\n }\n let stateful = false;\n const N = this.mNum;\n for (let i = 0; i < N; i++) {\n if (this.mChildren[i].mDrawable.isStateful()) {\n stateful = true;\n break;\n }\n }\n this.mStateful = stateful;\n this.mHaveStateful = true;\n return stateful;\n }\n canConstantState() {\n if (!this.mCheckedConstantState && this.mChildren != null) {\n this.mCanConstantState = true;\n const N = this.mNum;\n for (let i = 0; i < N; i++) {\n if (this.mChildren[i].mDrawable.getConstantState() == null) {\n this.mCanConstantState = false;\n break;\n }\n }\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n LayerDrawable.LayerState = LayerState;\n })(LayerDrawable = drawable_4.LayerDrawable || (drawable_4.LayerDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_5) {\n var Log = android.util.Log;\n var Drawable = android.graphics.drawable.Drawable;\n class RotateDrawable extends Drawable {\n constructor(rotateState) {\n super();\n this.mState = new RotateDrawable.RotateState(rotateState, this);\n }\n draw(canvas) {\n let saveCount = canvas.save();\n let bounds = this.mState.mDrawable.getBounds();\n let w = bounds.right - bounds.left;\n let h = bounds.bottom - bounds.top;\n const st = this.mState;\n let px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;\n let py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY;\n canvas.rotate(st.mCurrentDegrees, px + bounds.left, py + bounds.top);\n st.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mState.mDrawable.getOpacity();\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onLevelChange(level) {\n this.mState.mDrawable.setLevel(level);\n this.onBoundsChange(this.getBounds());\n this.mState.mCurrentDegrees = this.mState.mFromDegrees + (this.mState.mToDegrees - this.mState.mFromDegrees) * (level / RotateDrawable.MAX_LEVEL);\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n this.mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let tv = a.getString(\"android:pivotX\");\n let pivotXRel;\n let pivotX;\n if (tv == null) {\n pivotXRel = true;\n pivotX = 0.5;\n }\n else {\n pivotXRel = tv.endsWith('%');\n pivotX = a.getFloat('android:pivotX', 0.5);\n }\n tv = a.getString(\"android:pivotY\");\n let pivotYRel;\n let pivotY;\n if (tv == null) {\n pivotYRel = true;\n pivotY = 0.5;\n }\n else {\n pivotYRel = tv.endsWith('%');\n pivotY = a.getFloat('android:pivotY', 0.5);\n }\n let fromDegrees = a.getFloat(\"android:fromDegrees\", 0.0);\n let toDegrees = a.getFloat(\"android:toDegrees\", 360.0);\n let drawable = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!drawable && parser.children[0] instanceof HTMLElement) {\n drawable = Drawable.createFromXml(r, parser.children[0]);\n }\n if (drawable == null) {\n Log.w(\"drawable\", \"No drawable specified for \");\n }\n this.mState.mDrawable = drawable;\n this.mState.mPivotXRel = pivotXRel;\n this.mState.mPivotX = pivotX;\n this.mState.mPivotYRel = pivotYRel;\n this.mState.mPivotY = pivotY;\n this.mState.mFromDegrees = this.mState.mCurrentDegrees = fromDegrees;\n this.mState.mToDegrees = toDegrees;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n }\n RotateDrawable.MAX_LEVEL = 10000.0;\n drawable_5.RotateDrawable = RotateDrawable;\n (function (RotateDrawable) {\n class RotateState {\n constructor(source, owner) {\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mFromDegrees = 0;\n this.mToDegrees = 0;\n this.mCurrentDegrees = 0;\n if (source != null) {\n this.mDrawable = source.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mPivotXRel = source.mPivotXRel;\n this.mPivotX = source.mPivotX;\n this.mPivotYRel = source.mPivotYRel;\n this.mPivotY = source.mPivotY;\n this.mFromDegrees = this.mCurrentDegrees = source.mFromDegrees;\n this.mToDegrees = source.mToDegrees;\n this.mCanConstantState = this.mCheckedConstantState = true;\n }\n }\n newDrawable() {\n return new RotateDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n RotateDrawable.RotateState = RotateState;\n })(RotateDrawable = drawable_5.RotateDrawable || (drawable_5.RotateDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Float {\n static parseFloat(value) {\n return Number.parseFloat(value);\n }\n }\n Float.MIN_VALUE = Number.MIN_VALUE;\n Float.MAX_VALUE = Number.MAX_VALUE;\n lang.Float = Float;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_6) {\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n class ScaleDrawable extends Drawable {\n constructor(...args) {\n super();\n this.mTmpRect = new Rect();\n if (args.length <= 1) {\n this.mScaleState = new ScaleDrawable.ScaleState(args[0], this);\n return;\n }\n let drawable = args[0];\n let gravity = args[1];\n let scaleWidth = args[2];\n let scaleHeight = args[3];\n this.mScaleState = new ScaleDrawable.ScaleState(null, this);\n this.mScaleState.mDrawable = drawable;\n this.mScaleState.mGravity = gravity;\n this.mScaleState.mScaleWidth = scaleWidth;\n this.mScaleState.mScaleHeight = scaleHeight;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n getDrawable() {\n return this.mScaleState.mDrawable;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let sw = a.getFloat(\"android:scaleWidth\", 1);\n let sh = a.getFloat(\"android:scaleHeight\", 1);\n let gStr = a.getString(\"android:scaleGravity\");\n let g = Gravity.parseGravity(gStr, Gravity.LEFT);\n let min = a.getBoolean(\"android:useIntrinsicSizeAsMinimum\", false);\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, parser.children[0]);\n }\n if (dr == null) {\n throw Error(`new IllegalArgumentException(\"No drawable specified for \")`);\n }\n this.mScaleState.mDrawable = dr;\n this.mScaleState.mScaleWidth = sw;\n this.mScaleState.mScaleHeight = sh;\n this.mScaleState.mGravity = g;\n this.mScaleState.mUseIntrinsicSizeAsMin = min;\n if (dr != null) {\n dr.setCallback(this);\n }\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n if (this.getCallback() != null) {\n this.getCallback().invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n if (this.getCallback() != null) {\n this.getCallback().scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n if (this.getCallback() != null) {\n this.getCallback().unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n if (this.mScaleState.mDrawable.getLevel() != 0)\n this.mScaleState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n return this.mScaleState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mScaleState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mScaleState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mScaleState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mScaleState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mScaleState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mScaleState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onLevelChange(level) {\n this.mScaleState.mDrawable.setLevel(level);\n this.onBoundsChange(this.getBounds());\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n const r = this.mTmpRect;\n const min = this.mScaleState.mUseIntrinsicSizeAsMin;\n let level = this.getLevel();\n let w = bounds.width();\n if (this.mScaleState.mScaleWidth > 0) {\n const iw = min ? this.mScaleState.mDrawable.getIntrinsicWidth() : 0;\n w -= Math.floor(((w - iw) * (10000 - level) * this.mScaleState.mScaleWidth / 10000));\n }\n let h = bounds.height();\n if (this.mScaleState.mScaleHeight > 0) {\n const ih = min ? this.mScaleState.mDrawable.getIntrinsicHeight() : 0;\n h -= Math.floor(((h - ih) * (10000 - level) * this.mScaleState.mScaleHeight / 10000));\n }\n Gravity.apply(this.mScaleState.mGravity, w, h, bounds, r);\n if (w > 0 && h > 0) {\n this.mScaleState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n }\n getIntrinsicWidth() {\n return this.mScaleState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mScaleState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mScaleState.canConstantState()) {\n return this.mScaleState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mScaleState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_6.ScaleDrawable = ScaleDrawable;\n (function (ScaleDrawable) {\n class ScaleState {\n constructor(orig, owner) {\n this.mScaleWidth = 0;\n this.mScaleHeight = 0;\n this.mGravity = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mScaleWidth = orig.mScaleWidth;\n this.mScaleHeight = orig.mScaleHeight;\n this.mGravity = orig.mGravity;\n this.mUseIntrinsicSizeAsMin = orig.mUseIntrinsicSizeAsMin;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n return new ScaleDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n ScaleDrawable.ScaleState = ScaleState;\n })(ScaleDrawable = drawable_6.ScaleDrawable || (drawable_6.ScaleDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Animatable;\n (function (Animatable) {\n function isImpl(obj) {\n return obj && obj['start'] && obj['stop'] && obj['isRunning'];\n }\n Animatable.isImpl = isImpl;\n })(Animatable = drawable.Animatable || (drawable.Animatable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Rect = android.graphics.Rect;\n var PixelFormat = android.graphics.PixelFormat;\n var Log = android.util.Log;\n var SparseArray = android.util.SparseArray;\n var SystemClock = android.os.SystemClock;\n class DrawableContainer extends drawable.Drawable {\n constructor(...args) {\n super(...args);\n this.mAlpha = 0xFF;\n this.mCurIndex = -1;\n this.mMutated = false;\n this.mEnterAnimationEnd = 0;\n this.mExitAnimationEnd = 0;\n }\n draw(canvas) {\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.draw(canvas);\n }\n if (this.mLastDrawable != null) {\n this.mLastDrawable.draw(canvas);\n }\n }\n needsMirroring() {\n return false && this.isAutoMirrored();\n }\n getPadding(padding) {\n const r = this.mDrawableContainerState.getConstantPadding();\n let result;\n if (r != null) {\n padding.set(r);\n result = (r.left | r.top | r.bottom | r.right) != 0;\n }\n else {\n if (this.mCurrDrawable != null) {\n result = this.mCurrDrawable.getPadding(padding);\n }\n else {\n result = super.getPadding(padding);\n }\n }\n if (this.needsMirroring()) {\n const left = padding.left;\n const right = padding.right;\n padding.left = right;\n padding.right = left;\n }\n return result;\n }\n setAlpha(alpha) {\n if (this.mAlpha != alpha) {\n this.mAlpha = alpha;\n if (this.mCurrDrawable != null) {\n if (this.mEnterAnimationEnd == 0) {\n this.mCurrDrawable.mutate().setAlpha(alpha);\n }\n else {\n this.animate(false);\n }\n }\n }\n }\n getAlpha() {\n return this.mAlpha;\n }\n setDither(dither) {\n if (this.mDrawableContainerState.mDither != dither) {\n this.mDrawableContainerState.mDither = dither;\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.mutate().setDither(this.mDrawableContainerState.mDither);\n }\n }\n }\n setEnterFadeDuration(ms) {\n this.mDrawableContainerState.mEnterFadeDuration = ms;\n }\n setExitFadeDuration(ms) {\n this.mDrawableContainerState.mExitFadeDuration = ms;\n }\n onBoundsChange(bounds) {\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setBounds(bounds);\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setBounds(bounds);\n }\n }\n isStateful() {\n return this.mDrawableContainerState.isStateful();\n }\n setAutoMirrored(mirrored) {\n this.mDrawableContainerState.mAutoMirrored = mirrored;\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.mutate().setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);\n }\n }\n isAutoMirrored() {\n return this.mDrawableContainerState.mAutoMirrored;\n }\n jumpToCurrentState() {\n let changed = false;\n if (this.mLastDrawable != null) {\n this.mLastDrawable.jumpToCurrentState();\n this.mLastDrawable = null;\n changed = true;\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.jumpToCurrentState();\n this.mCurrDrawable.mutate().setAlpha(this.mAlpha);\n }\n if (this.mExitAnimationEnd != 0) {\n this.mExitAnimationEnd = 0;\n changed = true;\n }\n if (this.mEnterAnimationEnd != 0) {\n this.mEnterAnimationEnd = 0;\n changed = true;\n }\n if (changed) {\n this.invalidateSelf();\n }\n }\n onStateChange(state) {\n if (this.mLastDrawable != null) {\n return this.mLastDrawable.setState(state);\n }\n if (this.mCurrDrawable != null) {\n return this.mCurrDrawable.setState(state);\n }\n return false;\n }\n onLevelChange(level) {\n if (this.mLastDrawable != null) {\n return this.mLastDrawable.setLevel(level);\n }\n if (this.mCurrDrawable != null) {\n return this.mCurrDrawable.setLevel(level);\n }\n return false;\n }\n getIntrinsicWidth() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantWidth();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getIntrinsicWidth() : -1;\n }\n getIntrinsicHeight() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantHeight();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getIntrinsicHeight() : -1;\n }\n getMinimumWidth() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantMinimumWidth();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getMinimumWidth() : 0;\n }\n getMinimumHeight() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantMinimumHeight();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getMinimumHeight() : 0;\n }\n drawableSizeChange(who) {\n let callback = this.getCallback();\n if (who == this.mCurrDrawable && callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().unscheduleDrawable(this, what);\n }\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setVisible(visible, restart);\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setVisible(visible, restart);\n }\n return changed;\n }\n getOpacity() {\n return this.mCurrDrawable == null || !this.mCurrDrawable.isVisible() ? PixelFormat.TRANSPARENT :\n this.mDrawableContainerState.getOpacity();\n }\n selectDrawable(idx) {\n if (idx == this.mCurIndex) {\n return false;\n }\n const now = SystemClock.uptimeMillis();\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" from \" + this.mCurIndex + \" to \" + idx\n + \": exit=\" + this.mDrawableContainerState.mExitFadeDuration\n + \" enter=\" + this.mDrawableContainerState.mEnterFadeDuration);\n if (this.mDrawableContainerState.mExitFadeDuration > 0) {\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setVisible(false, false);\n }\n if (this.mCurrDrawable != null) {\n this.mLastDrawable = this.mCurrDrawable;\n this.mExitAnimationEnd = now + this.mDrawableContainerState.mExitFadeDuration;\n }\n else {\n this.mLastDrawable = null;\n this.mExitAnimationEnd = 0;\n }\n }\n else if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setVisible(false, false);\n }\n if (idx >= 0 && idx < this.mDrawableContainerState.mNumChildren) {\n const d = this.mDrawableContainerState.getChild(idx);\n this.mCurrDrawable = d;\n this.mCurIndex = idx;\n if (d != null) {\n d.mutate();\n if (this.mDrawableContainerState.mEnterFadeDuration > 0) {\n this.mEnterAnimationEnd = now + this.mDrawableContainerState.mEnterFadeDuration;\n }\n else {\n d.setAlpha(this.mAlpha);\n }\n d.setVisible(this.isVisible(), true);\n d.setDither(this.mDrawableContainerState.mDither);\n d.setState(this.getState());\n d.setLevel(this.getLevel());\n d.setBounds(this.getBounds());\n d.setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);\n }\n else {\n }\n }\n else {\n this.mCurrDrawable = null;\n this.mCurIndex = -1;\n }\n if (this.mEnterAnimationEnd != 0 || this.mExitAnimationEnd != 0) {\n if (this.mAnimationRunnable == null) {\n let t = this;\n this.mAnimationRunnable = {\n run() {\n t.animate(true);\n t.invalidateSelf();\n }\n };\n }\n else {\n this.unscheduleSelf(this.mAnimationRunnable);\n }\n this.animate(true);\n }\n this.invalidateSelf();\n return true;\n }\n animate(schedule) {\n const now = SystemClock.uptimeMillis();\n let animating = false;\n if (this.mCurrDrawable != null) {\n if (this.mEnterAnimationEnd != 0) {\n if (this.mEnterAnimationEnd <= now) {\n this.mCurrDrawable.mutate().setAlpha(this.mAlpha);\n this.mEnterAnimationEnd = 0;\n }\n else {\n let animAlpha = ((this.mEnterAnimationEnd - now) * 255)\n / this.mDrawableContainerState.mEnterFadeDuration;\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" cur alpha \" + animAlpha);\n this.mCurrDrawable.mutate().setAlpha(((255 - animAlpha) * this.mAlpha) / 255);\n animating = true;\n }\n }\n }\n else {\n this.mEnterAnimationEnd = 0;\n }\n if (this.mLastDrawable != null) {\n if (this.mExitAnimationEnd != 0) {\n if (this.mExitAnimationEnd <= now) {\n this.mLastDrawable.setVisible(false, false);\n this.mLastDrawable = null;\n this.mExitAnimationEnd = 0;\n }\n else {\n let animAlpha = ((this.mExitAnimationEnd - now) * 255)\n / this.mDrawableContainerState.mExitFadeDuration;\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" last alpha \" + animAlpha);\n this.mLastDrawable.mutate().setAlpha((animAlpha * this.mAlpha) / 255);\n animating = true;\n }\n }\n }\n else {\n this.mExitAnimationEnd = 0;\n }\n if (schedule && animating) {\n this.scheduleSelf(this.mAnimationRunnable, now + 1000 / 60);\n }\n }\n getCurrent() {\n return this.mCurrDrawable;\n }\n getConstantState() {\n if (this.mDrawableContainerState.canConstantState()) {\n return this.mDrawableContainerState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mDrawableContainerState.mutate();\n this.mMutated = true;\n }\n return this;\n }\n setConstantState(state) {\n this.mDrawableContainerState = state;\n }\n }\n DrawableContainer.DEBUG = Log.DBG_DrawableContainer;\n DrawableContainer.TAG = \"DrawableContainer\";\n DrawableContainer.DEFAULT_DITHER = true;\n drawable.DrawableContainer = DrawableContainer;\n (function (DrawableContainer) {\n class DrawableContainerState {\n constructor(orig, owner) {\n this.mVariablePadding = false;\n this.mPaddingChecked = false;\n this.mConstantSize = false;\n this.mComputedConstantSize = false;\n this.mConstantWidth = 0;\n this.mConstantHeight = 0;\n this.mConstantMinimumWidth = 0;\n this.mConstantMinimumHeight = 0;\n this.mCheckedOpacity = false;\n this.mOpacity = 0;\n this.mCheckedStateful = false;\n this.mStateful = false;\n this.mCheckedConstantState = false;\n this.mCanConstantState = false;\n this.mDither = DrawableContainer.DEFAULT_DITHER;\n this.mMutated = false;\n this.mEnterFadeDuration = 0;\n this.mExitFadeDuration = 0;\n this.mAutoMirrored = false;\n this.mOwner = owner;\n if (orig != null) {\n this.mCheckedConstantState = true;\n this.mCanConstantState = true;\n this.mVariablePadding = orig.mVariablePadding;\n this.mConstantSize = orig.mConstantSize;\n this.mDither = orig.mDither;\n this.mMutated = orig.mMutated;\n this.mEnterFadeDuration = orig.mEnterFadeDuration;\n this.mExitFadeDuration = orig.mExitFadeDuration;\n this.mAutoMirrored = orig.mAutoMirrored;\n this.mConstantPadding = orig.getConstantPadding();\n this.mPaddingChecked = true;\n this.mConstantWidth = orig.getConstantWidth();\n this.mConstantHeight = orig.getConstantHeight();\n this.mConstantMinimumWidth = orig.getConstantMinimumWidth();\n this.mConstantMinimumHeight = orig.getConstantMinimumHeight();\n this.mComputedConstantSize = true;\n this.mOpacity = orig.getOpacity();\n this.mCheckedOpacity = true;\n this.mStateful = orig.isStateful();\n this.mCheckedStateful = true;\n const origDr = orig.mDrawables;\n this.mDrawables = new Array(0);\n const origDf = orig.mDrawableFutures;\n if (origDf != null) {\n this.mDrawableFutures = origDf.clone();\n }\n else {\n this.mDrawableFutures = new SparseArray(this.mNumChildren);\n }\n const N = this.mNumChildren;\n for (let i = 0; i < N; i++) {\n if (origDr[i] != null) {\n this.mDrawableFutures.put(i, new ConstantStateFuture(origDr[i]));\n }\n }\n }\n else {\n this.mDrawables = new Array(0);\n }\n }\n get mNumChildren() {\n return this.mDrawables.length;\n }\n addChild(dr) {\n const pos = this.mNumChildren;\n dr.setVisible(false, true);\n dr.setCallback(this.mOwner);\n this.mDrawables.push(dr);\n this.mCheckedStateful = false;\n this.mCheckedOpacity = false;\n this.mConstantPadding = null;\n this.mPaddingChecked = false;\n this.mComputedConstantSize = false;\n return pos;\n }\n getCapacity() {\n return this.mDrawables.length;\n }\n createAllFutures() {\n if (this.mDrawableFutures != null) {\n const futureCount = this.mDrawableFutures.size();\n for (let keyIndex = 0; keyIndex < futureCount; keyIndex++) {\n const index = this.mDrawableFutures.keyAt(keyIndex);\n this.mDrawables[index] = this.mDrawableFutures.valueAt(keyIndex).get(this);\n }\n this.mDrawableFutures = null;\n }\n }\n getChildCount() {\n return this.mNumChildren;\n }\n getChildren() {\n this.createAllFutures();\n return this.mDrawables;\n }\n getChild(index) {\n const result = this.mDrawables[index];\n if (result != null) {\n return result;\n }\n if (this.mDrawableFutures != null) {\n const keyIndex = this.mDrawableFutures.indexOfKey(index);\n if (keyIndex >= 0) {\n const prepared = this.mDrawableFutures.valueAt(keyIndex).get(this);\n this.mDrawables[index] = prepared;\n this.mDrawableFutures.removeAt(keyIndex);\n return prepared;\n }\n }\n return null;\n }\n mutate() {\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i] != null) {\n drawables[i].mutate();\n }\n }\n this.mMutated = true;\n }\n setVariablePadding(variable) {\n this.mVariablePadding = variable;\n }\n getConstantPadding() {\n if (this.mVariablePadding) {\n return null;\n }\n if ((this.mConstantPadding != null) || this.mPaddingChecked) {\n return this.mConstantPadding;\n }\n this.createAllFutures();\n let r = null;\n const t = new Rect();\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].getPadding(t)) {\n if (r == null)\n r = new Rect(0, 0, 0, 0);\n if (t.left > r.left)\n r.left = t.left;\n if (t.top > r.top)\n r.top = t.top;\n if (t.right > r.right)\n r.right = t.right;\n if (t.bottom > r.bottom)\n r.bottom = t.bottom;\n }\n }\n this.mPaddingChecked = true;\n return (this.mConstantPadding = r);\n }\n setConstantSize(constant) {\n this.mConstantSize = constant;\n }\n isConstantSize() {\n return this.mConstantSize;\n }\n getConstantWidth() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantWidth;\n }\n getConstantHeight() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantHeight;\n }\n getConstantMinimumWidth() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantMinimumWidth;\n }\n getConstantMinimumHeight() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantMinimumHeight;\n }\n computeConstantSize() {\n this.mComputedConstantSize = true;\n this.createAllFutures();\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n this.mConstantWidth = this.mConstantHeight = -1;\n this.mConstantMinimumWidth = this.mConstantMinimumHeight = 0;\n for (let i = 0; i < N; i++) {\n const dr = drawables[i];\n let s = dr.getIntrinsicWidth();\n if (s > this.mConstantWidth)\n this.mConstantWidth = s;\n s = dr.getIntrinsicHeight();\n if (s > this.mConstantHeight)\n this.mConstantHeight = s;\n s = dr.getMinimumWidth();\n if (s > this.mConstantMinimumWidth)\n this.mConstantMinimumWidth = s;\n s = dr.getMinimumHeight();\n if (s > this.mConstantMinimumHeight)\n this.mConstantMinimumHeight = s;\n }\n }\n setEnterFadeDuration(duration) {\n this.mEnterFadeDuration = duration;\n }\n getEnterFadeDuration() {\n return this.mEnterFadeDuration;\n }\n setExitFadeDuration(duration) {\n this.mExitFadeDuration = duration;\n }\n getExitFadeDuration() {\n return this.mExitFadeDuration;\n }\n getOpacity() {\n if (this.mCheckedOpacity) {\n return this.mOpacity;\n }\n this.createAllFutures();\n this.mCheckedOpacity = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n let op = (N > 0) ? drawables[0].getOpacity() : PixelFormat.TRANSPARENT;\n for (let i = 1; i < N; i++) {\n op = drawable.Drawable.resolveOpacity(op, drawables[i].getOpacity());\n }\n this.mOpacity = op;\n return op;\n }\n isStateful() {\n if (this.mCheckedStateful) {\n return this.mStateful;\n }\n this.createAllFutures();\n this.mCheckedStateful = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].isStateful()) {\n this.mStateful = true;\n return true;\n }\n }\n this.mStateful = false;\n return false;\n }\n canConstantState() {\n if (this.mCheckedConstantState) {\n return this.mCanConstantState;\n }\n this.createAllFutures();\n this.mCheckedConstantState = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].getConstantState() == null) {\n this.mCanConstantState = false;\n return false;\n }\n }\n this.mCanConstantState = true;\n return true;\n }\n newDrawable() {\n return undefined;\n }\n }\n DrawableContainer.DrawableContainerState = DrawableContainerState;\n class ConstantStateFuture {\n constructor(source) {\n this.mConstantState = source.getConstantState();\n }\n get(state) {\n const result = this.mConstantState.newDrawable();\n result.setCallback(state.mOwner);\n if (state.mMutated) {\n result.mutate();\n }\n return result;\n }\n }\n })(DrawableContainer = drawable.DrawableContainer || (drawable.DrawableContainer = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var SystemClock = android.os.SystemClock;\n var Drawable = android.graphics.drawable.Drawable;\n var DrawableContainer = android.graphics.drawable.DrawableContainer;\n class AnimationDrawable extends DrawableContainer {\n constructor(state) {\n super();\n this.mCurFrame = -1;\n let _as = new AnimationDrawable.AnimationState(state, this);\n this.mAnimationState = _as;\n this.setConstantState(_as);\n if (state != null) {\n this.setFrame(0, true, false);\n }\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n if (visible) {\n if (changed || restart) {\n this.setFrame(0, true, true);\n }\n }\n else {\n this.unscheduleSelf(this);\n }\n return changed;\n }\n start() {\n if (!this.isRunning()) {\n this.run();\n }\n }\n stop() {\n if (this.isRunning()) {\n this.unscheduleSelf(this);\n }\n }\n isRunning() {\n return this.mCurFrame > -1;\n }\n run() {\n this.nextFrame(false);\n }\n unscheduleSelf(what) {\n this.mCurFrame = -1;\n super.unscheduleSelf(what);\n }\n getNumberOfFrames() {\n return this.mAnimationState.getChildCount();\n }\n getFrame(index) {\n return this.mAnimationState.getChild(index);\n }\n getDuration(i) {\n return this.mAnimationState.mDurations[i];\n }\n isOneShot() {\n return this.mAnimationState.mOneShot;\n }\n setOneShot(oneShot) {\n this.mAnimationState.mOneShot = oneShot;\n }\n addFrame(frame, duration) {\n this.mAnimationState.addFrame(frame, duration);\n if (this.mCurFrame < 0) {\n this.setFrame(0, true, false);\n }\n }\n nextFrame(unschedule) {\n let next = this.mCurFrame + 1;\n const N = this.mAnimationState.getChildCount();\n if (next >= N) {\n next = 0;\n }\n this.setFrame(next, unschedule, !this.mAnimationState.mOneShot || next < (N - 1));\n }\n setFrame(frame, unschedule, animate) {\n if (frame >= this.mAnimationState.getChildCount()) {\n return;\n }\n this.mCurFrame = frame;\n this.selectDrawable(frame);\n if (unschedule) {\n this.unscheduleSelf(this);\n }\n if (animate) {\n this.mCurFrame = frame;\n this.scheduleSelf(this, SystemClock.uptimeMillis() + this.mAnimationState.mDurations[frame]);\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n this.mAnimationState.setVariablePadding(a.getBoolean(\"android:variablePadding\", false));\n this.mAnimationState.mOneShot = a.getBoolean(\"android:oneshot\", false);\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n a = r.obtainAttributes(item);\n let duration = a.getInt(\"android:duration\", -1);\n if (duration < 0) {\n throw Error(`new XmlPullParserException(parser.getPositionDescription() + \": tag requires a 'duration' attribute\")`);\n }\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw Error(`new XmlPullParserException( tag requires a 'drawable' attribute or child tag defining a drawable)`);\n }\n this.mAnimationState.addFrame(dr, duration);\n if (dr != null) {\n dr.setCallback(this);\n }\n }\n this.setFrame(0, true, false);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mAnimationState.mDurations = [...this.mAnimationState.mDurations];\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable.AnimationDrawable = AnimationDrawable;\n (function (AnimationDrawable) {\n class AnimationState extends DrawableContainer.DrawableContainerState {\n constructor(orig, owner) {\n super(orig, owner);\n if (orig != null) {\n this.mDurations = orig.mDurations;\n this.mOneShot = orig.mOneShot;\n }\n else {\n this.mDurations = androidui.util.ArrayCreator.newNumberArray(this.getCapacity());\n this.mOneShot = true;\n }\n }\n newDrawable() {\n return new AnimationDrawable(this);\n }\n addFrame(dr, dur) {\n let pos = super.addChild(dr);\n this.mDurations[pos] = dur;\n }\n }\n AnimationDrawable.AnimationState = AnimationState;\n })(AnimationDrawable = drawable.AnimationDrawable || (drawable.AnimationDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_7) {\n const DEBUG = android.util.Log.DBG_StateListDrawable;\n const TAG = \"StateListDrawable\";\n const DEFAULT_DITHER = true;\n class StateListDrawable extends drawable_7.DrawableContainer {\n constructor() {\n super();\n this.initWithState(null);\n }\n initWithState(state) {\n let _as = new StateListState(state, this);\n this.mStateListState = _as;\n this.setConstantState(_as);\n this.onStateChange(this.getState());\n }\n addState(stateSet, drawable) {\n if (drawable != null) {\n this.mStateListState.addStateSet(stateSet, drawable);\n this.onStateChange(this.getState());\n }\n }\n isStateful() {\n return true;\n }\n onStateChange(stateSet) {\n let idx = this.mStateListState.indexOfStateSet(stateSet);\n if (DEBUG)\n android.util.Log.i(TAG, \"onStateChange \" + this + \" states \"\n + stateSet + \" found \" + idx);\n if (idx < 0) {\n idx = this.mStateListState.indexOfStateSet(android.util.StateSet.WILD_CARD);\n }\n if (this.selectDrawable(idx)) {\n return true;\n }\n return super.onStateChange(stateSet);\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n const state = this.mStateListState;\n state.mVariablePadding = a.getBoolean(\"android:variablePadding\", state.mVariablePadding);\n state.mConstantSize = a.getBoolean(\"android:constantSize\", state.mConstantSize);\n state.mEnterFadeDuration = a.getInt(\"android:enterFadeDuration\", state.mEnterFadeDuration);\n state.mExitFadeDuration = a.getInt(\"android:exitFadeDuration\", state.mExitFadeDuration);\n state.mDither = a.getBoolean(\"android:dither\", state.mDither);\n state.mAutoMirrored = a.getBoolean(\"android:autoMirrored\", state.mAutoMirrored);\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n let dr;\n let stateSpec = [];\n let typedArray = r.obtainAttributes(item);\n for (let attr of Array.from(item.attributes)) {\n let attrName = attr.name;\n if (attrName === 'android:drawable') {\n dr = typedArray.getDrawable(attrName);\n }\n else if (attrName.startsWith('android:state_')) {\n let state = attrName.substring('android:state_'.length);\n let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()];\n if (typeof stateValue === \"number\") {\n stateSpec.push(typedArray.getBoolean(attrName, true) ? stateValue : -stateValue);\n }\n }\n }\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = drawable_7.Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw new Error(\": tag requires a 'drawable' attribute or child tag defining a drawable\");\n }\n state.addStateSet(stateSpec, dr);\n }\n this.onStateChange(this.getState());\n }\n getStateListState() {\n return this.mStateListState;\n }\n getStateCount() {\n return this.mStateListState.getChildCount();\n }\n getStateSet(index) {\n return this.mStateListState.mStateSets[index];\n }\n getStateDrawable(index) {\n return this.mStateListState.getChild(index);\n }\n getStateDrawableIndex(stateSet) {\n return this.mStateListState.indexOfStateSet(stateSet);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n const sets = this.mStateListState.mStateSets;\n const count = sets.length;\n this.mStateListState.mStateSets = new Array(count);\n for (let i = 0; i < count; i++) {\n const _set = sets[i];\n if (_set != null) {\n this.mStateListState.mStateSets[i] = _set.concat();\n }\n }\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_7.StateListDrawable = StateListDrawable;\n class StateListState extends drawable_7.DrawableContainer.DrawableContainerState {\n constructor(orig, owner) {\n super(orig, owner);\n if (orig != null) {\n this.mStateSets = orig.mStateSets.concat();\n }\n else {\n this.mStateSets = new Array(this.getCapacity());\n }\n }\n addStateSet(stateSet, drawable) {\n let pos = this.addChild(drawable);\n this.mStateSets[pos] = stateSet;\n return pos;\n }\n indexOfStateSet(stateSet) {\n const stateSets = this.mStateSets;\n const N = this.getChildCount();\n for (let i = 0; i < N; i++) {\n if (android.util.StateSet.stateSetMatches(stateSets[i], stateSet)) {\n return i;\n }\n }\n return -1;\n }\n newDrawable() {\n let drawable = new StateListDrawable();\n drawable.initWithState(this);\n return drawable;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n R.id = {\n \"content\": \"content\",\n \"background\": \"background\",\n \"secondaryProgress\": \"secondaryProgress\",\n \"progress\": \"progress\",\n \"contentPanel\": \"contentPanel\",\n \"topPanel\": \"topPanel\",\n \"buttonPanel\": \"buttonPanel\",\n \"customPanel\": \"customPanel\",\n \"custom\": \"custom\",\n \"titleDivider\": \"titleDivider\",\n \"titleDividerTop\": \"titleDividerTop\",\n \"title_template\": \"title_template\",\n \"icon\": \"icon\",\n \"alertTitle\": \"alertTitle\",\n \"scrollView\": \"scrollView\",\n \"message\": \"message\",\n \"button1\": \"button1\",\n \"button2\": \"button2\",\n \"button3\": \"button3\",\n \"leftSpacer\": \"leftSpacer\",\n \"rightSpacer\": \"rightSpacer\",\n \"text1\": \"text1\",\n \"action_bar_center_layout\": \"action_bar_center_layout\",\n \"action_bar_title\": \"action_bar_title\",\n \"action_bar_sub_title\": \"action_bar_sub_title\",\n \"action_bar_left\": \"action_bar_left\",\n \"action_bar_right\": \"action_bar_right\",\n \"parentPanel\": \"parentPanel\",\n \"progress_percent\": \"progress_percent\",\n \"progress_number\": \"progress_number\",\n \"title\": \"title\",\n \"shortcut\": \"shortcut\",\n \"select_dialog_listview\": \"select_dialog_listview\"\n };\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var View = android.view.View;\n var Resources = android.content.res.Resources;\n var Color = android.graphics.Color;\n var InsetDrawable = android.graphics.drawable.InsetDrawable;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var LayerDrawable = android.graphics.drawable.LayerDrawable;\n var RotateDrawable = android.graphics.drawable.RotateDrawable;\n var ScaleDrawable = android.graphics.drawable.ScaleDrawable;\n var AnimationDrawable = android.graphics.drawable.AnimationDrawable;\n var StateListDrawable = android.graphics.drawable.StateListDrawable;\n var RoundRectDrawable = android.graphics.drawable.RoundRectDrawable;\n var ShadowDrawable = android.graphics.drawable.ShadowDrawable;\n var Gravity = android.view.Gravity;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval('View = android.view.View;');\n });\n const density = Resources.getDisplayMetrics().density;\n class drawable {\n static get btn_default() {\n let stateList = new StateListDrawable();\n stateList.addState([-View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light);\n stateList.addState([-View.VIEW_STATE_WINDOW_FOCUSED, -View.VIEW_STATE_ENABLED], R.image.btn_default_disabled_holo_light);\n stateList.addState([View.VIEW_STATE_PRESSED], R.image.btn_default_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_default_focused_holo_light);\n stateList.addState([View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light);\n stateList.addState([View.VIEW_STATE_FOCUSED], R.image.btn_default_disabled_focused_holo_light);\n stateList.addState([], R.image.btn_default_disabled_holo_light);\n return stateList;\n }\n static get editbox_background() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_FOCUSED], R.image.editbox_background_focus_yellow);\n stateList.addState([], R.image.editbox_background_normal);\n return stateList;\n }\n static get btn_check() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_pressed_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_focused_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_on_disabled_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_off_disabled_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_check_on_disabled_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_check_off_disabled_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED], R.image.btn_check_off_disabled_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED], R.image.btn_check_on_disabled_holo_light);\n return stateList;\n }\n static get btn_radio() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_pressed_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_focused_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_on_disabled_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_off_disabled_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_radio_on_disabled_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_radio_off_disabled_focused_holo_light);\n stateList.addState([-View.VIEW_STATE_CHECKED], R.image.btn_radio_off_disabled_holo_light);\n stateList.addState([View.VIEW_STATE_CHECKED], R.image.btn_radio_on_disabled_holo_light);\n return stateList;\n }\n static get progress_small_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_16_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_16_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_medium_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_48_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_48_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_large_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_76_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_76_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_horizontal_holo() {\n let layerDrawable = new LayerDrawable(null);\n let returnHeight = () => 3 * density;\n let insetTopBottom = Math.floor(8 * density);\n let bg = new ColorDrawable(0x4c000000);\n bg.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(bg, R.id.background, 0, insetTopBottom, 0, insetTopBottom);\n let secondary = new ScaleDrawable(new ColorDrawable(0x4c33b5e5), Gravity.LEFT, 1, -1);\n secondary.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(secondary, R.id.secondaryProgress, 0, insetTopBottom, 0, insetTopBottom);\n let progress = new ScaleDrawable(new ColorDrawable(0xcc33b5e5), Gravity.LEFT, 1, -1);\n progress.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(progress, R.id.progress, 0, insetTopBottom, 0, insetTopBottom);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get progress_indeterminate_horizontal_holo() {\n let animDrawable = new AnimationDrawable();\n animDrawable.setOneShot(false);\n let frame = R.image.progressbar_indeterminate_holo1;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo2;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo3;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo4;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo5;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo6;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo7;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo8;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n return animDrawable;\n }\n static get ratingbar_full_empty_holo_light() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_PRESSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_SELECTED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([], R.image.btn_rating_star_off_normal_holo_light);\n return stateList;\n }\n static get ratingbar_full_filled_holo_light() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_PRESSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([View.VIEW_STATE_SELECTED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([], R.image.btn_rating_star_on_normal_holo_light);\n return stateList;\n }\n static get ratingbar_full_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.drawable.ratingbar_full_empty_holo_light, R.id.background);\n layerDrawable.addLayer(R.drawable.ratingbar_full_empty_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.drawable.ratingbar_full_filled_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get ratingbar_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.image.rate_star_big_off_holo_light, R.id.background);\n layerDrawable.addLayer(R.image.rate_star_big_half_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.image.rate_star_big_on_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get ratingbar_small_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.image.rate_star_small_off_holo_light, R.id.background);\n layerDrawable.addLayer(R.image.rate_star_small_half_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.image.rate_star_small_on_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get scrubber_control_selector_holo() {\n let stateList = new StateListDrawable();\n stateList.addState([-View.VIEW_STATE_ENABLED], R.image.scrubber_control_disabled_holo);\n stateList.addState([View.VIEW_STATE_PRESSED], R.image.scrubber_control_pressed_holo);\n stateList.addState([View.VIEW_STATE_SELECTED], R.image.scrubber_control_focused_holo);\n stateList.addState([], R.image.scrubber_control_normal_holo);\n return stateList;\n }\n static get scrubber_progress_horizontal_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.drawable.scrubber_track_holo_light, R.id.background);\n let secondary = new ScaleDrawable(R.drawable.scrubber_secondary_holo, Gravity.LEFT, 1, -1);\n layerDrawable.addLayer(secondary, R.id.secondaryProgress);\n let progress = new ScaleDrawable(R.drawable.scrubber_primary_holo, Gravity.LEFT, 1, -1);\n layerDrawable.addLayer(progress, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get scrubber_primary_holo() {\n let line = new ColorDrawable(0xff33b5e5);\n line.getIntrinsicHeight = () => 3 * density;\n return new InsetDrawable(line, 0, 5 * density, 0, 5 * density);\n }\n static get scrubber_secondary_holo() {\n let line = new ColorDrawable(0x4c33b5e5);\n line.getIntrinsicHeight = () => 3 * density;\n return new InsetDrawable(line, 0, 5 * density, 0, 5 * density);\n }\n static get scrubber_track_holo_light() {\n let line = new ColorDrawable(0x66666666);\n line.getIntrinsicHeight = () => 1 * density;\n return new InsetDrawable(line, 0, 6 * density, 0, 6 * density);\n }\n static get list_selector_background() {\n return this.item_background;\n }\n static get list_divider() {\n let divider = new ColorDrawable(0xffcccccc);\n return divider;\n }\n static get divider_vertical() {\n return this.divider_horizontal;\n }\n static get divider_horizontal() {\n let divider = new ColorDrawable(0xffdddddd);\n divider.getIntrinsicWidth = () => 1;\n divider.getIntrinsicHeight = () => 1;\n return divider;\n }\n static get item_background() {\n let stateList = new StateListDrawable();\n stateList.addState([View.VIEW_STATE_FOCUSED, -View.VIEW_STATE_ENABLED], new ColorDrawable(0xffebebeb));\n stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888));\n stateList.addState([-View.VIEW_STATE_FOCUSED, View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888));\n stateList.addState([View.VIEW_STATE_FOCUSED], new ColorDrawable(0xffaaaaaa));\n stateList.addState([], new ColorDrawable(Color.TRANSPARENT));\n return stateList;\n }\n static get toast_frame() {\n let bg = new RoundRectDrawable(0xff333333, 2 * density, 2 * density, 2 * density, 2 * density);\n bg.getIntrinsicHeight = () => 32 * density;\n bg.getPadding = (rect) => {\n rect.set(12 * density, 6 * density, 12 * density, 6 * density);\n return true;\n };\n let shadow = new ShadowDrawable(bg, 5 * density, 0, 2 * density, 0x44000000);\n return new InsetDrawable(shadow, 7 * density);\n }\n }\n R.drawable = drawable;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image_2) {\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n var Canvas = android.graphics.Canvas;\n class NinePatchDrawable extends image_2.NetDrawable {\n constructor(...args) {\n super(...args);\n this.mTmpRect = new Rect();\n this.mTmpRect2 = new Rect();\n }\n initBoundWithLoadedImage(image) {\n let imageRatio = image.getImageRatio();\n this.mImageWidth = Math.floor((image.width - 2) / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.mImageHeight = Math.floor((image.height - 2) / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.initNinePatchBorderInfo(image);\n }\n initNinePatchBorderInfo(image) {\n this.mNinePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(image.src);\n if (!this.mNinePatchBorderInfo) {\n image.getBorderPixels((leftBorder, topBorder, rightBorder, bottomBorder) => {\n this.mNinePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, this.mNinePatchBorderInfo);\n });\n }\n }\n onLoad() {\n let image = this.mState.mImage;\n let ninePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(image.src);\n if (ninePatchBorderInfo) {\n this.mNinePatchBorderInfo = ninePatchBorderInfo;\n super.onLoad();\n return;\n }\n image.getBorderPixels((leftBorder, topBorder, rightBorder, bottomBorder) => {\n ninePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, ninePatchBorderInfo);\n super.onLoad();\n });\n }\n draw(canvas) {\n if (!this.mNinePatchBorderInfo)\n return;\n if (!this.isImageSizeEmpty()) {\n let cache = this.getNinePatchCache();\n if (cache) {\n canvas.drawCanvas(cache);\n }\n else {\n this.drawNinePatch(canvas);\n }\n }\n }\n getNinePatchCache() {\n let bound = this.getBounds();\n let width = bound.width();\n let height = bound.height();\n let cache = this.mNinePatchDrawCache;\n if (cache) {\n if (cache.getWidth() === width && cache.getHeight() === height) {\n return cache;\n }\n cache.recycle();\n }\n const cachePixelSize = width * height * 4;\n const drawingCacheSize = android.view.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();\n if (cachePixelSize > drawingCacheSize)\n return null;\n cache = this.mNinePatchDrawCache = new Canvas(bound.width(), bound.height());\n this.drawNinePatch(cache);\n return cache;\n }\n drawNinePatch(canvas) {\n let smoothEnableBak = canvas.isImageSmoothingEnabled();\n canvas.setImageSmoothingEnabled(false);\n let imageWidth = this.mImageWidth;\n let imageHeight = this.mImageHeight;\n if (imageHeight <= 0 || imageWidth <= 0)\n return;\n let image = this.mState.mImage;\n let bound = this.getBounds();\n let staticWidthSum = this.mNinePatchBorderInfo.getHorizontalStaticLengthSum();\n let staticHeightSum = this.mNinePatchBorderInfo.getVerticalStaticLengthSum();\n let extraWidth = bound.width() - staticWidthSum;\n let extraHeight = bound.height() - staticHeightSum;\n let staticWidthPartScale = (extraWidth >= 0 || staticWidthSum == 0) ? 1 : bound.width() / staticWidthSum;\n let staticHeightPartScale = (extraHeight >= 0 || staticHeightSum == 0) ? 1 : bound.height() / staticHeightSum;\n const scaleHorizontalWeightSum = this.mNinePatchBorderInfo.getHorizontalScaleLengthSum();\n const scaleVerticalWeightSum = this.mNinePatchBorderInfo.getVerticalScaleLengthSum();\n const drawColumn = (srcFromX, srcToX, dstFromX, dstToX) => {\n const heightParts = this.mNinePatchBorderInfo.getVerticalTypedValues();\n let srcFromY = 1;\n let dstFromY = 0;\n for (let i = 0, size = heightParts.length; i < size; i++) {\n let typedValue = heightParts[i];\n let isScalePart = NinePatchBorderInfo.isScaleType(typedValue);\n let srcHeight = NinePatchBorderInfo.getValueUnpack(typedValue);\n if (srcHeight <= 0)\n continue;\n let dstHeight;\n if (isScalePart) {\n if (scaleVerticalWeightSum == 0)\n continue;\n dstHeight = extraHeight * srcHeight / scaleVerticalWeightSum;\n if (dstHeight <= 0)\n continue;\n }\n else {\n dstHeight = srcHeight * staticHeightPartScale;\n }\n let srcRect = this.mTmpRect;\n let dstRect = this.mTmpRect2;\n srcRect.set(srcFromX, srcFromY, srcToX, srcFromY + srcHeight);\n dstRect.set(dstFromX, dstFromY, dstToX, dstFromY + dstHeight);\n canvas.drawImage(image, srcRect, dstRect);\n srcFromY += srcHeight;\n dstFromY += dstHeight;\n }\n };\n const widthParts = this.mNinePatchBorderInfo.getHorizontalTypedValues();\n let srcFromX = 1;\n let dstFromX = 0;\n for (let i = 0, size = widthParts.length; i < size; i++) {\n let typedValue = widthParts[i];\n let isScalePart = NinePatchBorderInfo.isScaleType(typedValue);\n let srcWidth = NinePatchBorderInfo.getValueUnpack(typedValue);\n let dstWidth;\n if (isScalePart) {\n dstWidth = extraWidth * srcWidth / scaleHorizontalWeightSum;\n }\n else {\n dstWidth = srcWidth * staticWidthPartScale;\n }\n if (dstWidth <= 0)\n continue;\n drawColumn(srcFromX, srcFromX + srcWidth, dstFromX, dstFromX + dstWidth);\n srcFromX += srcWidth;\n dstFromX += dstWidth;\n }\n canvas.setImageSmoothingEnabled(smoothEnableBak);\n }\n getPadding(padding) {\n let info = this.mNinePatchBorderInfo;\n if (!info)\n return false;\n padding.set(info.getPaddingLeft(), info.getPaddingTop(), info.getPaddingRight(), info.getPaddingBottom());\n return true;\n }\n }\n NinePatchDrawable.GlobalBorderInfoCache = new Map();\n image_2.NinePatchDrawable = NinePatchDrawable;\n class NinePatchBorderInfo {\n constructor(leftBorder, topBorder, rightBorder, bottomBorder) {\n this.horizontalStaticLengthSum = 0;\n this.horizontalScaleLengthSum = 0;\n this.verticalStaticLengthSum = 0;\n this.verticalScaleLengthSum = 0;\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n this.horizontalTypedValues = [];\n this.verticalTypedValues = [];\n let tmpLength = 0;\n let currentStatic = true;\n for (let color of leftBorder) {\n let isScaleColor = NinePatchBorderInfo.isScaleColor(color);\n let typeChange = (isScaleColor && currentStatic) || (!isScaleColor && !currentStatic);\n if (typeChange) {\n let lengthValue = currentStatic ? tmpLength : -tmpLength;\n if (currentStatic)\n this.verticalStaticLengthSum += tmpLength;\n this.verticalTypedValues.push(lengthValue);\n tmpLength = 1;\n }\n else {\n tmpLength++;\n }\n currentStatic = !isScaleColor;\n }\n if (currentStatic)\n this.verticalStaticLengthSum += tmpLength;\n this.verticalScaleLengthSum = leftBorder.length - this.verticalStaticLengthSum;\n this.verticalTypedValues.push(currentStatic ? tmpLength : -tmpLength);\n tmpLength = 0;\n currentStatic = true;\n for (let color of topBorder) {\n let isScaleColor = NinePatchBorderInfo.isScaleColor(color);\n let typeChange = (isScaleColor && currentStatic) || (!isScaleColor && !currentStatic);\n if (typeChange) {\n let lengthValue = currentStatic ? tmpLength : -tmpLength;\n if (currentStatic)\n this.horizontalStaticLengthSum += tmpLength;\n this.horizontalTypedValues.push(lengthValue);\n tmpLength = 1;\n }\n else {\n tmpLength++;\n }\n currentStatic = !isScaleColor;\n }\n if (currentStatic)\n this.horizontalStaticLengthSum += tmpLength;\n this.horizontalScaleLengthSum = topBorder.length - this.horizontalStaticLengthSum;\n this.horizontalTypedValues.push(currentStatic ? tmpLength : -tmpLength);\n if (this.horizontalTypedValues.length >= 3) {\n this.paddingLeft = Math.max(0, this.horizontalTypedValues[0]);\n this.paddingRight = Math.max(0, this.horizontalTypedValues[this.horizontalTypedValues.length - 1]);\n }\n if (this.verticalTypedValues.length >= 3) {\n this.paddingTop = Math.max(0, this.verticalTypedValues[0]);\n this.paddingBottom = Math.max(0, this.verticalTypedValues[this.verticalTypedValues.length - 1]);\n }\n for (let i = 0, length = rightBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(rightBorder[i])) {\n this.paddingTop = i;\n break;\n }\n }\n for (let i = 0, length = rightBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(rightBorder[length - 1 - i])) {\n this.paddingBottom = i;\n break;\n }\n }\n for (let i = 0, length = bottomBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(bottomBorder[i])) {\n this.paddingLeft = i;\n break;\n }\n }\n for (let i = 0, length = bottomBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(bottomBorder[length - 1 - i])) {\n this.paddingRight = i;\n break;\n }\n }\n }\n static isScaleColor(color) {\n return Color.alpha(color) > 200 && Color.red(color) < 50 && Color.green(color) < 50 && Color.blue(color) < 50;\n }\n static isScaleType(typedValue) {\n return typedValue < 0;\n }\n static getValueUnpack(typedValue) {\n return Math.abs(typedValue);\n }\n getHorizontalTypedValues() {\n return this.horizontalTypedValues;\n }\n getHorizontalStaticLengthSum() {\n return this.horizontalStaticLengthSum;\n }\n getHorizontalScaleLengthSum() {\n return this.horizontalScaleLengthSum;\n }\n getVerticalTypedValues() {\n return this.verticalTypedValues;\n }\n getVerticalStaticLengthSum() {\n return this.verticalStaticLengthSum;\n }\n getVerticalScaleLengthSum() {\n return this.verticalScaleLengthSum;\n }\n getPaddingLeft() {\n return this.paddingLeft;\n }\n getPaddingTop() {\n return this.paddingTop;\n }\n getPaddingRight() {\n return this.paddingRight;\n }\n getPaddingBottom() {\n return this.paddingBottom;\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image) {\n var Drawable = android.graphics.drawable.Drawable;\n var Rect = android.graphics.Rect;\n class ChangeImageSizeDrawable extends Drawable {\n constructor(drawable, overrideWidth, overrideHeight = overrideWidth) {\n super();\n this.mTmpRect = new Rect();\n this.mMutated = false;\n this.mState = new State(null, this);\n this.mState.mDrawable = drawable;\n this.mState.mOverrideWidth = overrideWidth;\n this.mState.mOverrideHeight = overrideHeight;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n this.mState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(r) {\n this.mState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mOverrideWidth;\n }\n getIntrinsicHeight() {\n return this.mState.mOverrideHeight;\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n }\n image.ChangeImageSizeDrawable = ChangeImageSizeDrawable;\n class State {\n constructor(orig, owner) {\n this.mOverrideWidth = 0;\n this.mOverrideHeight = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mOverrideWidth = orig.mOverrideWidth;\n this.mOverrideHeight = orig.mOverrideHeight;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n let drawable = new ChangeImageSizeDrawable(null, 0);\n drawable.mState = new State(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var NetImage = androidui.image.NetImage;\n var data = {\n \"actionbar_ic_back_white\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAzCAMAAABR9YM8AAAAclBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9eWEHEAAAAJXRSTlMA+wjy9g/JaUDVsqZONr6IFePdmHhbJBzr6c4tVEm9o5OCcF0v6lgICQAAALZJREFUOMu11EcSgzAQRFEZRBbZJjtb97+iS1PFrpuV+Nu3UphRpFq3KSNr7cLJdpCu1pVweiNKhGpOL0S3i6Me0Sb0RGSECkR3oRxRqoUCShWiMqT0E4ojQOtEaRDKGkQtpVGoGxF1lJrMUTtQmhFFi6NpRRQ7ChGpQqhUKHkVo2DZfmh6+0t0gLFvTLVgcICVBwTf9oHRCOa+cdtHhQ9m4Ru/9gATwf4crBVfdlpxnBXpE87mD+wlJVcMMSJcAAAAAElFTkSuQmCC\"\n ],\n \"btn_check_off_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAFVBMVEUAAAAAmcwzMzMAmcwAmcwAmcwAmcySYuXAAAAAB3RSTlMAZk1gRhAMJ+/C7AAAAGhJREFUWMPt1rEJgFAMBuE02gedwA0EtRcXEFxAcP8dXCDvb14gzV3/9WdEVNJwebPtDsDnoiMApwJzAFYFpgC4WzP3JLA0SgQWBgAAAAAAANAJ8m+m5Mj0JGZs6KPAHoBRrfRrRFTRD3MwONmn2VynAAAAAElFTkSuQmCC\"\n ],\n \"btn_check_off_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMATX7+8BUAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII=\"\n ],\n \"btn_check_off_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcwAmcwAmcwxNTcAmcwAmcwAmcwAmcwAmcwAmcwvOT0AmcwAmcwAmcwAmczmhCwqAAAAEHRSTlMAmRIfzgUJGg4WJtCScyQtx2HoRgAAAORJREFUWMNjGAWjYEgC1lAcIACr8tDQNJwgNBSL8WEdSjhBR2oApgVN04uNcQDzSo1QDAsi9O8I4gRnP7ViaEj6I4gHnFcLQNfQeRGfBtkZ6BpC2w/i0yBTga6BTV1QcNVj7H62WyUoWJSApiFMWVBwcSX2QJ1uJSholIpFw/PdLljB7jocGiy3YNfgPRmHBiMX7GnMRXlUw6iGUQ2jGkY1jGoY1TCqgRINhBsnlDd/CDewKG3CsRJqJJLeDKW0ocsQpoWvKb0oFbOxnoSvsa4WSn53AKEDX4cjgNQuzSgYBUMRAABvBwmfTLNSCwAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMAzORBQ6MAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII=\"\n ],\n \"btn_check_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAGFBMVEVPT080NDQ0NDRHR0cAAABPT09PT09PT0+86ZyxAAAACHRSTlMm1MgyABYeBtShLDEAAAB4SURBVFjD7dixDYAwEATBSzAxLdACLbxzAkukLoGE/qEAXmIlZ9ym1uTvU8TV9bFyRCiqQO0BnYASqkI1nQzM2hmY1Bkocs4Nak1KwZKUg+21HCQvBgYGBgYGBv8A+HRI4uePc25M+IuPRwQ8U+AhhE4tfMzBc9ENzCYkZWqWtP8AAAAASUVORK5CYII=\"\n ],\n \"btn_check_on_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcw9PT09PT09PT09PT09PT0AmcwAmcwAmcw9PT09PT09PT09PT0Amcw9PT1vR1UqAAAAEHRSTlMAZoBNQTg7Xj8IR0pEMVYjBJa89wAAASlJREFUWMPt1rFJBEEYhuENVsE7DSbS+GfPyEC4BhYrGKxA7OBCQxsQM/MrQazgSrAKQ7ECXZnzRdmd7x84OIT50uWZN5mFaerq6vayo4cwuknwFArBfSlYlYLMp1lfCNbdBFiO7PIrYNYXgY1ZNwGasR2bkfCAzQAu/KC17727wZUNO/cVCNwIIAIAFdDgloALHBIQQAQAIqDANQEXOEgBBV5cAcDc+r+BEHLg2brfAQHm6fYTEGCdTiWQB7PtsSc/gWUWfGzPfbVhiyYLuJ4xBWIe8AMsCGQBiRRQgAQBCVpAlIAEAQlIRA1IEFCARHQAEgQEIBE9gEQKSEAiugAJAj7QRidgFfwjML4dgqntCKxCZqe+Zyg78z102Z3rKc3eHpu6urp97BNIunQiihmctwAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_on_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAG1BMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT1gyl+KAAAACXRSTlMAgE05QT1HMyNi/YIlAAAA6ElEQVRYw+3TwQ2CQBRFUaOo6x/AtRILGDvADrQESrAD7VwxQ+4G/I/EhSb/bcmZGzKwiMVise9v084EXTXxoBnZ/hUwa2eBzqyaAONvYEZCAV0Pdjoo7L27DM7Wr9YKBC4yuBKQwJqAAghIgECSAIFyoYIVAQ2cCLjADwCOUgCwtFYJAA5WCwHAcrjYbQ54oBtu9pYDDtgM3w6B5iN45HMJOKDIBxNwQP7DSgIeyIkc8AAJAi4oAMkFJAi4gETyAQkCLuAuBECCgANIJAWQyAEXkEgSIEFAA0USAQvwR2Bi80EsFov98J52GzL3vLeyTQAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_on_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_check_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_check_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAANlBMVEVPT08+Pj4+Pj5KSkpAQEAAAAA/Pz9PT08/Pz9PT09PT08/Pz9AQEBAQEBPT09PT09CQkI9PT36oQq5AAAAEXRSTlMm1MgyiACTFp4eAZeNggYHXQY8LIYAAAExSURBVGje7drBbsJAFENRtx0YJlAg//+zTaRWruQNU+NFxfMa3SOxSBZ5OGy79oGnb/Tb3t6ApSO0vuzAMhDbWDagI7h+wBXR3dARXcdAdAO1Wq1We6mdjojutK6Twtuj++lTCABbn8LDwNT/I4IPaH/bOQGc11+7PxXQfoMBGH0DOErfBPw+gVCfgNv3gYv2fcDvE7D6PtCk7wCns99XQN8mfl8Bvk3svgLsU3D7CvBpf8H3Pu0+AfYpaJ+/ngfuUpO+AejzRvomoIL0PUAF6dsABe3bgAra9wEK2vcBCtr3ARG07wMUpO8DIrCfACg0JAAKDQmAQkMCoNCQACg0ZACugAJeC/iY2F+Auc0D75NDrVar1Wqz+0/fxEf8aCB+9pA+3IifnuSPZ5LnP9e9/QXc5ydUPu9cjgAAAABJRU5ErkJggg==\"\n ],\n \"btn_default_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAM1BMVEUAAAAzteUAmcwAAAAAAAAAkMAAmcwAjbwAmMsAM0UAAAAAgq4AfqgAbpMAgawAAAD/AAA0FdE+AAAAD3RSTlMAHz4TD0I5PSkZCjIyDQj2gUbVAAAAn0lEQVRYw+3ZSw6DMAxFUZq2zodP2P9qKzGqGFjYqkoC9y7gjDLJ83CoujWc0QoICHgJcN+SJJiStGjeLMGczAqYgqOkgOIBRQGDq/+Dj8MBdgFWQEBAQEBAQD9YAW8Atv8OAQEBAQE3sPkPOGAvYMvrnPwaHD3eqIA52r2YFbDkKb5NxSkXbRh/OtKX9vIyVnq7BQAC+sD1K8/Beid8AI8uHiWs1BycAAAAAElFTkSuQmCC\"\n ],\n \"btn_default_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAbFBMVEUAAACZmZl5eXl0dHQAAAAAAACHh4dsbGyWlpZbW1uNjY1kZGQjIyOWlpZwcHAAAAAAAAB4eHhubm6Li4teXl5aWlqUlJSIiIhzc3NgYGBTU1N6enqMjIyXl5eIiIiXl5eMjIwAAAAAAAD/AADhocx4AAAAInRSTlMAJ4CAJh6AgICAgIAwJxUUAnp6eHh2dGNjX15cWjIxMDADER06CAAAAMlJREFUWMPt2TkOgzAQhWHALIltMPu+Be5/x0hUUYoRQxOjvP8An1y4mRnnVNuR84t2gAAB2gAmY/1gVY8J5SeFlCErKQtKHMJmcllNTTgQYOYtLrPFywhQeC47TwAEaBu4AQQIECBAgACvgxvAPwDt/4cAAQIECPAArR/AAd4BjLleTIK5WLngKnIC7KJ2jlnvm9uoI0BdKhWxUqrUBOjrvnqyqnrtE6DxL2SIxfgr4HtBSoBOagJmJr35cQEgwHPg/tGVg/WX8AZv3Su8QPHBAAAAAABJRU5ErkJggg==\"\n ],\n \"btn_default_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAS1BMVEUAAAAzteUAmcwAAAAAiLUAAAAAmcwAHigAmcwAAAAAgasAhLEAk8QAksIAa44AcpgAmcwAAAAAAAAAAAAAAAAAmcwAmcwAAAD/AAAMZPkMAAAAF3RSTlMAZsyA5mbAiYgH3NvUy8S8tm5fSz8gFpzXpUMAAACoSURBVFjD7dk5DsMwDABBR0l0+L7l/780gKsgBWGxiGV49wFTsSFZHCruFWe0AQIC5gCuvjdJ9X6V/MWa5OwigN4o8gJoNaAVQKPq/+DjcID3BCMgICAgICCgHoyANwDzn0NAQEBAwB3MfgEH1IGXvs41Gq8RwE4DdgLoqjqVqysngJNry1dSZesmAQzDM7khSIfxMI/vpMY5XPwXAAh4Erh9pXlY/wgfdZAio63fx68AAAAASUVORK5CYII=\"\n ],\n \"btn_default_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAflBMVEUAAACZmZkAAAB3d3eTk5MsLCzb29sAAABZWVnAwMAAAAAAAACYmJijo6OLi4sAAAAAAAA0NDRSUlLIyMhvb28WFhagoKAAAAAqKirY2NhISEjNzc0mJibDw8NfX1+5ubmzs7NBQUF+fn7R0dGRkZGioqIAAAAAAAAAAAD/AAAgdn43AAAAKHRSTlMAZhB2aLOnMIiEBAFnbWwOCqONino4FxOolZWTi4d+fXlzcW1kVSwjhumNDwAAAOlJREFUWMPt2ckOgjAUhWEFnFpoC4I4Mo/v/4ISVsakxIsaMJ5/3y9p0k3vXbxU07eYohYgQIAzAPkhP61JnfID19i9t7/sbztCt+7AgMjKOHGWpJwkLpkWVIXTeUTRKZQWlNlyRJnUgoZp0T3LNAACfA9sAAIECBAgQIDjwQbgH4Dzf4cAAQIECLAHZ/8BB/gF0P4s6AsyaAt/AIxMYVM9M9KDMvV8Qbm1bQnfS6UWVIHrnr0tIe/suoHSgiwMrscVqeM1CJkW5Cysqw2pqg4ZHxiMMyUNUlIx/tO7AIAApwLbh8YsrJ+EOyFWMqRTaWfwAAAAAElFTkSuQmCC\"\n ],\n \"btn_default_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAclBMVEUAAABmZmYAAABkZGRaWlo3NzcAAAC7u7tNTU2Xl5cAAAAAAABycnIAAAA8PDyioqJISEiJiYlXV1eGhoYAAABcXFy6urqnp6eamppPT08uLi6xsbE9PT0VFRUaGhoAAABiYmJiYmJ4eHh3d3cAAAD/AAABlB2hAAAAJHRSTlMAZg9nbowwmnd+BAFrCoSCe3ZwFxRskomAcXFoYzkyI2RjU1NCIACPAAAA10lEQVRYw+3ZyQ6DIBSF4Sp2AlFRtM520Pd/xRpXTROI1400Pf+eLyzYcO9hVePSYY8mgAABOgCKrCnOpIomE2ZeZPEtLq+EyvmAReQvpUKPVKjUkxtB+QhnjyiGd2kE/dzbUO5bQEb3WGABA4AAV4AjQIAAAQIECHA7OAL8A9D9dwgQIECAABfQ+Q84QPfBlDGyx1ILWAV0MKgsYJukjBHvl7RmUPZRlFxIJVHUSyPIdVcfidWd5kZQcD2ciA2aC8tgnEufmOTip3cBAAHuBU4fbVlYfwlvr34uoI6kYcYAAAAASUVORK5CYII=\"\n ],\n \"btn_radio_off_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAAzteU9PT0zteU9PT09PT0zteUzteUzteU9PT0zteUzteU9PT09PT0zteU9PT0zteUzteU9PT0zteU9PT0zteUzteU9PT09PT09PT09PT0zteUzteUzteU9PT0zteUzteUzteU9PT3dmb2uAAAAI3RSTlMAZkxgRwQ4EkgOBiARPFMuWyYXTTYyLEAgCioMFkMyGxg/J0SE03YAAAMlSURBVGje7VnXltsgEEUDqlbv1Wv7/z8yoS2J4zVgmc0+6D75mIEpd4YyQgcOHDhw4DuxVMGW557n4TzfumpBb8VpK707lNcTehPCK/YeAgch2o9L5D1BtO61Xi3fBH0Ysv/WPmiUij1sJIEMRlQld0NVJMe6183P+RL5KXmo/iTGmxedqDi3ZfVEpOROvJRQHZ/bI4FpLNoMAEjWFuMkvei4FT2yRsApFMGJZwJ/gcyxUMG56F5YXxlWU8uhHevYR8iP67GF38hqPtoLDfbxwR/c+gyAnGv/z3G/PhOAjHvxga2jdGLrh2ypAgBuanWlYwaAmQ2sTIMF0yH+XD8eAAr/sdhUAGTTpwa8GNcXy28Wn5TAEH8tmQ5A0k+XGyuCe8YuQOs/E/VboaG3IHqhshszEKDQCPtnAKYhMg9SQ8s3ofEndH0dzkAmGldKQ4QM8EEdqKhxA7SIQxOljIaxovNCEwckXQUMPjLRQODGJpq5cKGGrJyAFOnBJWPput6Fq3RggBkZooBMuhBoawCLEqiBqADpg5SKYsAaUUZVSX9kMCJj3Hg6YIMNYxNupswBCxdiUaFXjSgWFM+cAXMWbiJBSs02J8NIo2qBFAZJ4PNq7kUux0CQFQjQco60JARiyxrhjKzQwqimP4E0oaDyNrjBLBJ1eyqXi2LMoEZWqFmirtpTgd5zEhFSK8QwiJ0+12Yp58xHVphYViTaPPWEAgBkBx+ImI//rwJMOXATIkXyspNk52nqptBGVWgut4qOTne+2Zlu17GL7VodOIWjAwdFzo5M94e++2uLunhFOy5eDq+OF7Oro7rDFkAmwwDNaqLd9T3zLa/vq+0D5Gz+ACmFA3qETp9Q9o9A0D0C9z9jJXH5j3mIi3d1ucpWAtG0Ei68lWDfLKoQd0LTDKlkZ8a+nRPctXPYgnftHCnqrCHVqHbR7pZaNjDLM9VSQ71oqf3EpuCfbc0vck2OL7sbs2Vw+WdPDLAY7NAOhI0ngKOgEq3lsA8iLP+Pwr3N8cZRc1xh/bK9fw3Re5A8+kCxndBbEcpPLF6eb0G1oAMHDhw48I34BUmSKxG/3YRpAAAAAElFTkSuQmCC\"\n ],\n \"btn_radio_off_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1STLyxAAAAEHRSTlMATAUMRyoWMBA7P0MhNh49I5b3UAAAAXZJREFUWMNjGAWjYBSMAsoB8/NZgiJr6wyIVW/qKAgGIsHEqc8UFLyTwcDUdlZQcBox6u0F3ZMgLLUSwcmE1asKiirA2EyBggEE/btQXAHBYyqUIuTzFmkUFRwbPfCrZxO8hCqgK5iAV0OjOLpIoQReHzgWoAuxi+DzBZcsptjFBXg0BG7CFNMWxeMiwQZMQQ5B3G7iFMVq7QScGhKdsImqiOHUMPEANlEeSZxeEFHAJszkiMsTrKI4wg5XCuSWwBH9G3BoMHTALs4ijEPDwwLs4uxyuOL5AHZxHlFcoZqAI83L4tCw0QBHcEvj0OCogF2cSQSHBkEGXBKUaiDsJAo9TThYJSmNOMJJg9LERzh5U5qBCGdRcgsByosZfuwF2QfKi0qEYU5YXCSKr7iXUsAIo4ULSKtQeEUMyKqyKK8UEdVuA1q1S1nFTrjpEMRAEHQhN05WENv8SWZgMIM3fyhvYGH6/PgsQcGVNQYMo2AUjIJRQDEAAKdsRGG19ZMWAAAAAElFTkSuQmCC\"\n ],\n \"btn_radio_off_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAwFBMVEUAAAAzteU9PT0zteUzteUzteU9PT0zteUzteUzteUzteUzteUzteU9PT0zteUzteUzteUzteU9PT09PT09PT0zteUzteU9PT09PT09PT0zteU9PT0zteU9PT09PT0zteU9PT09PT0zteUzteU9PT09PT09PT09PT09PT09PT0zteUzteU9PT09PT09PT09PT09PT0zteU9PT09PT09PT0zteUzteU9PT0zteUzteU9PT09PT0zteU9PT09PT09PT2npJ6rAAAAQHRSTlMAmcwElCDAN48ValInxnBLPVclpJCHMQy1nnorizK6dGo6CYB9VhkKhHBkQz8eBwV5X6yYdR0PXSwaKRR3TCKGCl/ORQAAA8lJREFUaN7tWNl6qjAQxmErIIq74r4r7kvtqT3tef+3OkwCtLYWEii94r9Rv0xmnCWTyS9kyJAhQ4bfhKYajm1LuZxk205R1X5UuVh3arlPqB3q4g+plw8Pubt4KD0LyZEv5EKgy0kj/66+YFiyLLrxkmWr1H83oSWJvSFRLZKuXm6XLpburxVj50KzqQr7fjpH6piu/43phCrRclG/F7FqNNv1OPpXdO/K//eb6f5UMQGUymn/OvODuKIVZvHrL9EUjuiv8rIJN2gOyl4ydCJYjKVfWtEfwxYAmNXp8LoThO11OK2aANAaeq5KMSwUif48+X6tACiL9fbj+ny9UFwT1Is/EneUVNzRIYdoewYwB42vMo2lCbDckbNOEvGHoz4lTO8jSW0FYPJyX2w2AajMiAWygblaxXEQn64Cx/L3ku0m9NpBlPqsJ84IQjo0oToPE21UQekGRV3kCJBD/r8Jkwjh3QJM4oOOXl+YDGAjq40w/grqj8ICepiHESZaZ+rP6KyK9VOBKoP87gStnV95LN27gK0Zv5yh2RAY0GjCwPdcZ3RAxgoBaAtM6IJZ9ndG33EH34EKLAVG7OHku1CKPAOSdybX0JuzGmgogLVax+MvMjSJmkgceBKYMSAuiB13c9TV4LgyBsmAgg6wu7DBFhwdI/HBS/EZzgIHJjDw0lwLF3zEpoUR6vklxFpIRz+B4S3P8mq5DIrABQVm3hlSI/ocbVlT+MdnoAqvwfYw6F4d7LGGePAES68GD6FyeBPgRdOCIZ+BNelbMk5JoXJYyReS4w2fgTLJ8sXdPg6VwzIQSc7mfAZeoIk9O7JOcy7wE0DgQwMUb/9DmgZENBAZolHCEKWT5DeSZA2TnHqZMh20CUxjHzTGVrGI0yqKuD31Zsfarq987boZtGvWC2eZyoUj6EmvzEMql/5T+KWffGzp3YwtzIPXgH3wagWDF/vo2GUeHdsAHKOj0P8w/L5wD79c4/sRWluG8b3KOb6/P0DeFFiwP0A6xAEWPMd/QmlpPAJNrkcg/zNWaZPEode2yPcQJxW3OQLsOR/i/FSCMpjfic4goBLylErgJ0PUgAzpTW7JkO1HMsSiZEgcusigUV37dA5RWL6lc0RPNB4hVYgkpEYFfkKKoviVUmtVwIVLqU1DKDVuUnCshojEJQUptLFPa37DaPu0pxafmM1RdEr5z0v5UicZMUvxGHDIElLLhASTZcsoSAHjnJQgz/dzISjI6dL7VH1yiKrT+ay95tRF4SehWYZuk7KybcdQNSFDhgwZMvwi/gPvHkn+qOIQ7AAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1Pag0XAAAAI3RSTlMAzL8LJcV8OyqQpLpwhGsbtp0zFwcFsZd3VFovqkEfoWEPTH3CfAwAAAGvSURBVGje7ZjpboMwEIR3bHxwhisQyJ33f8hKVSo1akS8hkRU8veXEWgZH7tDgUAgEAgEAh9mM+g+UYBIen3b0MJEWYkHyiKi5TAVABUPxm6JWmvGWAGoDC2DTQCRm5Z+IY+5AKolqmh3gCok/UFmCsi2NJNTAuiGntJoIJlp916giyYed0jtLHcVYjklkDFETd7UCvqFZJtDeddwEtCvVTlSTx/aA2IH2bbH2W8t7dBJF921ROG1gADrqlQR8UmQudfaE5sjUumqvQrUHgWM7uILvwQLId3VUuBEPDJkHLlmL6QUlrXn0RGLCIJYCDQs/YCcWMS4sfQaI7G4IGPpKxhiYRAzPd5wTTswPZPEokHJ0gPEQ0Ks6wM+v2hdJvss03VttNHjqFjXYff245p27AtnbVcm+9J/b9uSovZpvAp3wyq/1nHv6hciv+a3bHjNL799P7cO7Xvs275TJJC7DSBrHaHchkBV0wzq6THWdhB25iB+4A/i/ChBPI0SiokogR2GpNq0D591CEMYHM/3OOf7hZEZ7nHO/wmkfiK1KgGApNfDhgKBQCAQCAQ+yxdkJhHOkHWlWgAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAb1BMVEVPT08AAAA+Pj5PT09PT09PT09PT09PT09PT09KSkpPT09PT08+Pj5EREQ+Pj5GRkY+Pj5PT08+Pj5AQEBAQEBBQUE+Pj4+Pj4/Pz9FRUVMTExAQEBAQEA/Pz9DQ0M/Pz9HR0dDQ0NEREQ+Pj5DQ0Mt5iyXAAAAJXRSTlMmANQNAyQiHxswCRfIS8NBvhHMhYxtsayTRiuJdp9XpDxaULhc1kjPGwAAAu5JREFUaN7M1cmS4jAQRdFHavY8gDHGjF3//41NrWiilLJU9qLPmuDaSmUYuygya3NrtFaA0trYvM3kLkpEQIrcwMPkQq4PyNYiwAq5KiCswgJlxa8DrUYUE0og4e95WiQHhEYSkyUFpEUyK+MDQoGRfk7gHz9dHhWQBr9m5HIg01hBZ0sBobCKEuGAwFpKhAICGxB8QGALKuMCmcJGBX9AKmxES2/AYDPWF8ixofZnQGBT4h1gBrDNGN4BiyX1YX9rOqKuue0PNZbkn4EMYae+og9Nf0JY9hEwCHkciai4zNfaAa5+zON37nhFiPk30CKgHIiKvsSH8ly8EqfwnN8BDdZ0Jqpmhx/cXBH1E1j6HWjBqgei3sHLvdrDfeEVEH6BZ0FNCVbZUFGGp4Dgjl07ujgEuBt11+BFQmgHnh2NCJtG6srQLiCwxHVBeywaqeLmoOQrwI94GuiCCBcaJn7M4JdsT41DBNdQDz/7HZDwKz2Hy/2STuwZgb1DA/WItKcje0bgPjRfVDlEcgU9uHsEbssGOiDaTEdu1yC5cy0mRHMFN4UdMu5Yz0gwcgPL0MKrohIJntTASyCHT00VkhRUw6eFhc+BRiS5MHfCwjAjOCDJTGcmoOFzpCuSfNENPgYKPg3dkaSmP/DR7MwcktyZW6HgR4Q0jrr/K/C3WTNKQRgGgmg1oQlN8KPgRxUEzf3vqCD+yXR182gv0EDa7s7Mm35XhL9k/DPFfzR8VODDDh/X+MKhVya+9HHZ0kd4XYXwktJx8UtHWvxq+d46yfc4cAbEb6EGZaHyqgm8O03guo291WNbtI19CBtrMeLNYcTtUcL54ogS4DDEHuecPHEOH0gdii1Sq/Nc/4jU+FCQjzXFwHDClkGgFQdq+R6Oj0Q4zsf7AuA4ns8iFhoS0ZiLBnXbo8bXCQWFpZpWa9zLAusSf0PuqSty997TGPZYe7AWN8rkq56ErGshce/lmc8hUyg5pXf9J+VcgrX+8wRytCpX/RrehwAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_on_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAAzMzP///////89PT3///////89PT09PT09PT0+Pj49PT09PT1aWlo6OjoaGhogICA9PT09PT09PT04ODhFRUU9PT09PT1NTU09PT0uLi4dHR09PT1jY2NYWFg9PT08PDy6urpDQ0MxMTEmJiZoaGgUFBQYGBgjIyMlJSV3d3eYmJjr6+tfX19CQkJpaWlhYWEoKCgvLy8hISEWFhYrKysuLi5WVlZBQUEnJydHR0eJLZnuAAAAO3RSTlMAgAIFTQkMSSoDLw4WJDVSSCALPoAsOxGAf3hiQwV/RjIRgH1iH1lURUIcFQ54CICAbWdnVz48eHdubc5A5usAAAMCSURBVGje7VjZcuIwEIRkEskHMsY2+MQO933m/v8PWxGfIng3ltlUUqV+g3J1qzUjaWYaAgICAgICAgLfjI4udw0EgAwi651rsys4BAYhVq5Ir3YBABFdVaRGQ1JUnQBFV73W6g3KHqmU+yYBVVEjRCWu4ULClB4HN58QYCqBpdqhNQDkzc1FbGQAo2a4ewh8JWO8TZD9ofiAerWii4AELDurERBAaq31ywX2uwwFDbmGh07GH7PfZ6A/MoUIQs44SAaQnJ/SL8eWRYhljZcnicwEAYMvlzD4QU6/GsvPbU2bTDSt/SyPV/eZicAHzHW+AHoJP139wppNR+/r9Xa7Xr+PpjNrQV0kCj0AnhPXBRzvD+V/aM21w3q76/dtu9/fbdcHbd56yBQwdDkyFEIp52+PXnZ9e+CYzabpDOz+7mXUPinEAlIIKocBvchP1+40MzjUR1FBr25BASSlATjx2wOzWYA5sE8K6SZJqHIUMODUwGI+svPl5ybs0XyRWsCVE8mHXsx/t7K015SfVXjVrNVdrNADv+IhBtRIDIxnh0G6P+wuDQ6zcWKhgaDacdYhSgXkqZPzswrOVE4FItCrhSDOIcq/fPIcp3kRjuM9LalCnEe4YpKqiYFWe2+alwVMc99uJRZUIBVj3EkELM0tF3A1KxHoVIwyAikRiB6HDD+jMHyMEgEJUCUBgDTGZNL8CyYkjTLA/xWQAPi3qJw/36IAEH+QywWYIHOn6Vu5wFshTbv8B61cID5ot/FB478q3NIdYq4K/svuWCZwzC+7EDo1rmu3xEB+XSvg13lwvOHFHPWYB6fWk+ldjDD7ZNZ79D97GHrso1+3bPHO4uB6dcuWhnFWeB0LJobHs8LLuErp6O1d6sN19x5/6cgmUrj5SvG7CQHzlu9GwJTvLUsmRLZaTPke0M8k7gYk+ncDQgB1fmoLxTSBt2coNIE/uY39SiP+00cJ6TBEPh+GyJTeUK4+zvkQVHWCPsY5v2cglY/UgMLonkZqAgICAgICAgLfiz+OHkqDTzvSAwAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_on_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAkFBMVEVPT08AAAA+Pj5OTk5PT09PT09PT09PT09PT09PT09PT09GRkY+Pj5PT09KSkpPT08+Pj5FRUVAQEBAQEBDQ0M+Pj4+Pj5EREREREQ9PT0+Pj5PT08+Pj4+Pj4/Pz8+Pj4/Pz8/Pz9AQEBBQUFMTEw9PT1DQ0NBQUE9PT0/Pz9KSko+Pj5AQEBCQkJCQkI9PT27eu1wAAAAL3RSTlMmANQnDQMiHwkPGT/RATAVykWLhlrHvkpO9sMcsayQzp+ZeGor7Fdx4aQyuHxeYgwIBCAAAANrSURBVGjezJTJkuIwEESTkiUveGOxjcHsO9M9/v+/G0dMRMt0q4QBH/rdOKCnUmYZg05Iz08CVyk0KOUGie/JQSc6CKSTuDDgJo58XyD9BSwsfPmWwAnwkMB5VRD5Cp1w/cgq4I/vjOIUvMBReArXe0ogAzxNILsLHLyCchjBu9fXJFEXgXTxMq58LPAU3kB5jwQO3sSxC3ygZwOY+/dmQO/nAx4n8NATnlkg0RdKmgSRi95YRAZBgh5JtIAJuLcqgQmgpxi0IMAjhvvxNU+J0vw63g87PxK6NXQ0mdMd+WTUravo0CAxXRJRtj2fhjchbsPpeZsR0fIEG25b4MNCURFlk0LcOWfjtFFYp3C0IFJgOYxDmu9i/CDeZRRODmBR0ZfAt0RbNafEMBI37mr4YATYB5hllBdgmeWUFfYUYN2x05o2MSzcrrQ+WYsE2w7M1rQSsCJWtGZnCP4LJPv+qT7fZsjYHGQj4CM+VLQReIjYUHXgY24E3JKNKY/RgVtOE5hZNAL2hYowLL4t9DY9luUx3U7FfVRhOGLfCFyHRHV/L7G71F9cPsT9rEv2jcB1aErzGJpRWN9BI2jijKbcNxUDBSMV7aH5W9bfOH5Cs6Mlt2uQzApQdmiNU9Y/KPetEVJiUojgcRUatxbiWBsoWx1YcUXy4JsjnlOhf4S1ERKtgXMY8ZHAxIjmrReuGT70HVIamlPGAibOtNV/vnCCix5hQ3uYCODCxIrOOuGa5VNPyYSwgIKJJemP8JYXbFprc4UJF2by1pOmvGDdCu0PTCiYSUmv8ZEXHHWTaY5noFYFy5pHrxqlv0vwr1lzWUEYhoKoSmoUKihYtO1CwdciiP//dwpdBCEhtzecNtl1VUib3JkzA2wR9ZHx3xQ/aPhVgV929HVtRAPn0OoHjmxkvkNvkI1M9dBvb6Khr5ctJ6ls4YVX5R/jgtBLx8/jch0lHXnxG5fvLlu+b6cxIMses1BJE3jMNIFpG/vcr1zCxp7jNlZkxF2GEZejhNc9hBK6FEqgYYgK5ywGnNMJcA4OpFRIranrRoHUWCjIY02/SQyYjUcr+mV3QTi+BuA4hPfpgIKOWOiQiI656KBu/qgRDUt9Wq2Le8sJrH/LWEXkDpYGTIG1B3lxY4NWT0xVennmr/5jh/qP7UfUf77mb6LnjEYeBwAAAABJRU5ErkJggg==\"\n ],\n \"btn_rating_star_off_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_rating_star_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_rating_star_on_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_rating_star_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"dropdown_background_dark\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAA2CAMAAACiEHRJAAAAflBMVEVAQEAAAABBQUEAAAAAAAATExMlJSU+Pj5BQUEAAAAAAAA4ODggICAvLy8WFhYAAAAAAAAAAAAAAAAfHx8NDQ0AAAAvLy8kJCQgICAQEBAAAAA3NzcWFhYkJCQXFxcAAAASEhIAAAAjIyMAAAAwMDAjIyMAAAAAAAAAAAAAAACu+DqjAAAAKXRSTlPmCekADkqr4e4qFcCA2KhEYwUShjwb1K5/Nge9pZ2YXUxALSTIrGZVSewvjJ0AAAC8SURBVEjH7da3EsIwEEVRr5AjJig4Z5uk//9BJNFBw+zQMLO339Ns84Lde+abPq6cs6q6rnN0avWOAD10e3zdoEFYB/hcsQQfq2YO3gmjmAXYWByFHAw55JBDDjk/dgw5f/UvcsghhxyUEyQMm3f8nofweinL8oCtCsE5LTS5Gsf+iKxXDbTWETzb9OM+nXHdpjTjwjkgi7TRywnZUkhwjoeKLUXnGOs4iEuZoQPhHQeJFvBZxTk+g+8FPAE5Rz/0d6kkJAAAAABJRU5ErkJggg==\"\n ],\n \"editbox_background_focus_yellow\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAA3CAMAAADT7y+MAAACBFBMVEUAAAD/rgD/rgD/sAD/tgB1TABzSgD/rgD/rgD/rgD/rwCGWAB7TwD/tgD/sAD/rgD/rwD/rgD/rgD/rgD/rgD/rgD/rgD/rgD/rgD/sQD/rwD/rgD/rgD/sQD/sgD/rgD/rgD/sAD/sQD/sAD/rgBxSQD/tQD/rgClbwOvdQD/twD/tQD/sgD/rgBzTQF6TwDRjgDBgwD/rwD/twD/twD/twD5qgD/uAD/vQD/rwCDVQB9UQCLXADJigDblwD/uAD2pwD/ugD/rgCVZg+GWgN0TACtdAKOXgCSYQC2ewDnnQD/uQD/uQD/sAD/rgBrSAB4UAGrdASRYACocQDLigDdlgDVkgDhmQD6qgD///8AAAD//Pj/6cx/Yjb88eR1WS/sx53/9Ob03sT/3q//8+T/+/b/58mDYi92WSv90qL/6s3/2qr/+vT/8uH//v3/+O7/+fH+797/5ML+0Jr5zJX//fr/4Lv/2KjuxJOPZB7/6cqEXBv/7tr+6tP03sP03L7/3q381qn/1qLhrW3XpGapfEB0WCyFYCj/8uP+8OD/5L3sxpn3x47twY3OnWGAYDFzVCWBWRiRYw3/7dj87Nf75cr/47v727f51Kfnu4bIml+zhEZ3VydxUBx8Vhp4VBeJXhSaaA3/3rjz1rTz1bLuzKPty6HPomrAlFu9kFe7ikmjdz0LoYhyAAAAWXRSTlMAETRqtO3tMQ4CNu3rrmZsuQcJFgUPDR4LYkQlIl9ZLwNlW04r6qwc69Gld1RJ/ObMwrawnIqKfXg55+TevaugkIEU/vzm49/ezaaQjT8d+/rr2c/CsLCtkDTYHfEAAAMuSURBVFjD7ZhXW9pQAIYxtk1CK20ISdgoQ1DBUfceVevuHirdiK2CTJGhDFnuvbfd408WRPtg27seqBe8+QHvc3Jxzvd9tL/R96/QLgpoJgtjshGCINLAQBAIm4mxMtHfRSwmgvfwpDAMAQOGpTwKJ5jnZShG4jyIKxFzGOnAYHDESi7Ew0kMjTelUbCKk9dVn118CRjF2fWd5RwVTKVhaJyJXylsfJJT0yK7DBBZS03Oo0ZhZZyLhVCVgqdFihXXXij0Ahih0J5rRVHUIKikSNbpoZg4JGwozN//sbBtn519CYpZ+/aX4EF+YYMQxpmxY2USPFXjwzuub/OfP3o8bvdrILjdHs+HT/M7jvyichUPialYOJ3zWHH41b65vmaafg6MadPa+qZ950BRx4Hw2B9k8rnlD4527baJKYNuoB8YAzqDZsJmD97KyeP2YDEVT9JZc+jfUk/pRntBMjKq06i3Ake3SyV8ZvRqpZEiQW7VknVj3BAxgWXUMG6bD1eXiKVsWl/kI2BOdtWSxWwyjoBWjRhNZutgQa5ARJ6o0qD0m1ffTmr1ul7g6PRmy+C17CwYiano1yOqMWciVAMa7bvBaxlxqhsRlVozkCzVUAJVjHOq4ZQqpUqpUqqUKqVKqf7TKzymnkpGjElPWmKCGAnMgdr4HIgkL92SUnF99b7FtmoYjbnAZva5cEGJMJrZY02k6/6y3+fUG/uBukb6jXq1z+84bSJRFcWtyFn5bp2Z0BiMOnD16qRfzVh2o/1Kjp22RkhQd8+1YN1Qr5r0mldg0Gj00+NDM5bAsqJOADexYl0Y4anKa/MdC1bfe7PWqQaEU2u2+awBx92iCi6fRM8aPqwsK2xeDgbmJoe93jdA8HqHJ+f8QVdzYZlShJ8NFyySoovLaluPHeHFxWfgWAw7jltry4R0OTvz1xpDUHRlRUd7W7VMdgUYMllBW3tHhRKikPjlB5GLuOK80pLcjGJgE1NGbklpnpgrkkdM8RsdG+fD3RKhIIsBcDkTSrphPs7G0PPDI8ZukvOlIpB7oEjKlzeR2J/jIxpdOUkE3MqJkNGVE0VpF4TELNI/AVOh3l08hzvaAAAAAElFTkSuQmCC\"\n ],\n \"editbox_background_normal\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAA3CAMAAADT7y+MAAAA0lBMVEUAAAAAAACzs7Oenp7+/v6xsbGmpqYAAAAAAAAAAAAAAAAAAAD9/f36+vqvr6/+/v6Xl5fw8PBUVFTs7OypqampqamEhIQdHR3c3Nzz8/Pd3d3x8fHu7u7S0tLHx8fa2tqenp6+vr6ampqioqKgoKCBgYGSkpIAAAA3NzdSUlIAAAD39/fr6+v39/f09PTo6Ojb29vX19fk5OTf39+srKycnJympqaSkpKMjIyUlJSPj48sLCxoaGhqamoAAAD///8AAAD8/Pzz8/Pm5ub39/fl5eUurhQ7AAAAP3RSTlMAEX19/nZzGAIGCQ34/nT7avwk+GpiTCvn2tfTy7i1qX53cXBjRkMlJB8V+Ozi39/MzLezgXl4aV5ZSSgjIhntDpQOAAABGklEQVRYw+3Yx27CQBCAYTtskm3ujd5DgPTeszGB93+lHIwi2cvFYofT/C/waS4jzVi7+tk3C8PqR7mwDSc43QWxMPWfhg2DDRt+GjKqj/Tx0m9ufo22afbHmTYYO3++i4KV4YKo/ZixihT6t9HayQ3nrIP2OCyPxc96QU6U8Ui+6qW8RInXS0eB5NxMxRYpVqPtA0mKXLh2AW2p5SRXQDkV6vSEKKDy4yqloCJIIYUUUkghhRRSSNWkvg9HLScKKs8tU8JXUMl/qki8XREFknediMp9dS8VTA/vvETRr7gLYslO/Emrt/CoKz3TkCc7o4xpF/58OmhJw1JrEM851f8Wi1niHhnNTWaLYiYNM/+NYdTCsBpBfqT/AK7giup/9WGpAAAAAElFTkSuQmCC\"\n ],\n \"ic_menu_moreoverflow_normal_holo_dark\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlMAgJsrThgAAAAdSURBVDjLYxhhoP7/kOcgwGjoEB06o0EF44wsAABBWUMn9krmtgAAAABJRU5ErkJggg==\"\n ],\n \"menu_panel_holo_dark\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAAw1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwVFRU0NDQgICA1NTUfHx9OTk5DQ0NEREQ8PDwwMDAAAAAsLCw4ODj/AAAqKiogICAiIiIkJCRKSkpMTExHR0dFRUVOTk46OjoxMTEiZHnYAAAAMXRSTlMABA0CJBAIChgTGyAqNlAWSWc8X3aJfI8eLidAMkU5TFtWPW9Ug3nti2Dt29rj4srKKLM+WwAAA8dJREFUaN7t2dlW2zAQBuAsTqLIK06gtmRbjhPC2oUlFFoovP9TdUZGh0SmoaeVwBf5H0D6jmacyOPOq7m0lE47s+p8eHaEHWFHeJPQX0vXQNbX+xvClp0NWbYT1ObDOiNjGdZREI3QBKjdewajHE3ESgfg7rj3ADI2GFwPJehQiCZBCRCA24fPIf8VtQoyEKEMDYICjOrtQ0IpTTCugSQYWJCENWOkEE2CrMEzQG7uGIuEPCNkNV4joEACnJMv9w9a7vX8eC0/G/ml5/OJgwhpeCZcvgi6KBiE4cm3x8drY3ncyMPD15MwHKABS6EIqgzyDEJKz66fni5s5enxjNIQz0GWokGAMyA0ObImQML1UUIJnMM6QSL60Ai9HpxB4rCrC6u5Yk4C59DrQTs0CNAHics82wSPuQn0g0aoyzAm1GVpZpuQpcylZFyXYp2AvUigDJlvm+BnUAqCHblJGI6wE1wv9WPbhNhPPRe7YTRsEhIgFJVtQlUAIWkSsBmJ66RZldsm5FWWOi7Bhnwh9GsCNqPP7RO4jw1ZE/oaAZqxyCPbhCgvoCEbhCEQCHU8IAjbBAEEz6EECEOdkDDPj6PANiGIYt9jySuEMUVC9R6ECgl0rBFGAySkBRcL24SF4EWKhMGoXYSuJLgeEma2CTMkeK4kdJuEmAf2CQGPd4TWEvqKULwPAduxfQ9lKwgt+IH+0L8piPZnbdnQ/LPuaFcWcXRzYTFXR6JxZcFsXNyOz+9utufqn3Nzc368cXHrrBN69fWV5+Xx6e33t3K7NXd/zOlxmfP6+tp7IWiXeC6CcrI3ny4PDvf39z8ZCSx0eLCczvcmZSC4dolfqemCIsBjKWblXm04BIWJwEJSsFfOBDySitDdJNQ/TvBMQDcEi3ICiPl0ulweGMhyOZ3OATApFwF0AjwP9Q+TIsio11qHpVnFo2BWThABCiOZS8CknAURr7KUOeq1Vs2aXl7uiSxFwXMhFrMSGWaC25ezhRA5L2QZiHq51whyxMGgFDHPIxEgAhgGUpYICESU8xjKwOSIo0Hoq1ETnAMgiorneRQJIQIDgWWiKM95VQAAzkANm/qKoM+aoB9S348rDgpwGEgO4byKfT+FPtBnTSt97Ij94DAvTbPM94uiiA0ElvH9LEtTjznYB5uDx1Vz7kjRwDypAIeBZJnc32MooNrcUR8A4zkAAhQ4/GUgMRJYSA6BEwqA+gzaOYNGg0SoWXxICDUYQkI1h1eD+BZ+j1CfZWoFngVKjEV9HML9JaDfsm9TKy2XlqPv1/kNylczeSvTmjMAAAAASUVORK5CYII=\"\n ],\n \"menu_panel_holo_light\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAA5FBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd3d0AAADJycnMzMy6urrs7Ozu7u51dXV8fHwkJCRjY2PQ0NDb29vt7e3s7Oz39/fy8vLv7+8AAADx8fHk5OT/AAD39/f19fXm5ubr6+vo6OjHx8fKysrNzc3Pz8/R0dHT09Pz8/P5+flMDi8tAAAAOnRSTlMAAwkNFwYkEBMgHDsqNlBJGnaJfF+PZycwLUEzPk1HW1ZEb1JkgWCGaP1qY+ff3c6KiVsm+vf09OvngRpQJAAAA7pJREFUaN7t2Wl3mkAUBmBsCJEdY1qWYVUkLtnTVY1ZuqQ1////9F6QAKOx51Qm8YNvPod5zp0ZmLlyKzNhFG47M+PePDvCjrAj/JPQYJi1BHr8/ZpTKNYSirHfMUghoQg0oBh+r8YUjBKCJhTj49gHkGaNweehpFC8SMgB8F98rUHGAkERaAAOj6MbhgQRa4oEMQx0ICNH0IS8BBkgG16oLRkjQ+SFoAkoyADXo2/zu7W5/c88Pd1+HV0jAg05YVIqAgoOeH50Pp8yynx+dz7i+QM0PJdhUhU0YQrOpmOGmZ7BdDTLhkl5GrAGkvh5zDLTL6KEdSimYgJ/GQH2AtZAML+PmebBFLAOsC8oAk5DWgNTYU1QTKxDNhUFoYEEXAiiaRPWBGKbIi4HJDTKBFyLOA2WypqgWjgVsCKrhH0gNGEaFFuVWRNk1VZgKppA2F9FsGSXNcGVrZUEXIyGKNjEjVgTIpfYgmjggiwIjZwAK8HxWRN8B1ZDTmhQBMEkaqSzJuiRSkxhNUESFCL7HmuC58tEEaRVBEMyFVXWNdYETZdVxZSMZUITCLbqvgbBVW0gNKsEfDciQXa9LmtC13NlJOD7kSaIQHBeg+AAQVxNUCwghKwJIRAsZQ1BY0/QdoQdoULY1k35Bq+m7XpBlz9T9+PlsP1McfTH+hNTw8Ng+WPNVY4scqSfDMYMc3OiRzJ1ZMFUDm4Xp4+Dmw1z/0JuBqeXlYMbVybs5cfXq4vTH6vzcym/qDyW8ruUP4t8PLm8yo+vewWBPsTrWpAMO61Wr3d8eHj4vobAY457vVarM0wCTacP8TOKANvS98Ig7nda7TYgQLF5jgHQbrc6/TgIPR+2JE0o7pQG7glYDVo3OAIEVAIcdaQFFQDAUdDVYCXgfjCKOyUQMBmBxzslcR1dC4Mk7g87oKgl8KBhP06CUNMdl+Cdks8IXInQyC/3eKt0It3rhkGQJHH8oYbEcZIEQdj19MjBG2V+uW/khGqLw1QsVXYj39MAATmqIUGAAM3zI1dWLcXMWxw0AQxphwHqQADhRL6v656n1RDP03XfjxwAEKhB2l0AQUGge02CaVsqIpwIGODYND4MHzkIUC3bFOhe04xuO/IGIhTbsogKkJoCjyKWZSsIyGqQC5BA9x0zAyBQQYhaQwjB8QGQCqi+I9V9RUTW/k2bvyZIagk8KG0CSwjIO8Db2INODYjIe/HgWETaKMYifNGHBwAKtvD3CDQ8I1IHSmpL8eMQAjBb9tvUjMqEcejxuL9XNZodPDUZeAAAAABJRU5ErkJggg==\"\n ],\n \"popup_bottom_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAjVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0BAQEAAAAAAAAAAAAAAABaWloAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAaGhpoaGhQUFAeHh5ZWVlaWlr///8AAABqampXV1fx8fGbm5tSUlJgYGBRUVH5+fljY2MLHkH2AAAAJHRSTlMAAwYME1IpDwpBITgvThvHSx0WJDP1RW48Oi0ZPUlm4pBe9LzqzGhUAAACDklEQVRYw+3S3VLbMBCG4YQkwrJsodjGjSwrP6X8lAD3f3nd3dkwTIMSK+aEQe+xNc98kifR3WPxx/jIdHo1u57rXBRKmsXi5vHh6U98Tw+PN4uFkaoQuZ5fz66mU1aSk5zkJCc5yUlOcpKTnOQkJznJ+ZlOBo77QseBkwX2uKXolPQjHS9VJ5YudG8ZO70vRzml79nJwk7dNeCUI5wSnKarTzizeUVOO9Jpyanms1OOaKw0ZoRjjLSNOOfQD+f9CMd7+t3+dyh2Dg/UtuC8XuC8gtO2h+dhhzt2rJR3b/u/l7R/u5PSnnI+Xlwvt5v988vLc1R4YL/Zyv7DtbFzPEjnMEj15XZz+/s2Mjix2Za9gjm5PswJODgIb87sduv1+ldM8P1uZ/DWaE7YQaiCFxJFY63tZeuNKYdmjG9lD+eaQsDrVMh87vAgTZBayQscuVLEaJ5DzvEghvJadCDBIrAGBgasAaUTdQ5MaA4Pel+EUqOUxVbnsphSDSrva3jOscODCMprogrABlYUhNQ5MTgn5DCEixxISMVECCgO1xCDTmAQQyQtwQJsYDkYS1KYCczBEKI3QqlyTgM2OK2dq0DBOyOGlfDV4SSkAIsICERwzIlLY4gloNBCbVAkoIEIKcyEIZaQii9jhZkBEJXFRWfOMwwhxVpMLDDCzDlrVEFjvDpJpVKp79R9fJNg/wAgGweRXaclSwAAAABJRU5ErkJggg==\"\n ],\n \"popup_center_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAAALCAMAAABVqWPqAAAAS1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVlEREQODg4AAAAAAAAAAAAAAAD///8AAABbW1vd3d2VlZVSUlKKX/cCAAAAE3RSTlMAUAcDQjkoIRoUDwvvsGdNSTEu3NAXBQAAAEtJREFUOMtjIBWIQAHJ+iAUMzMTNxcnBzubECuLACMjr6iomDAZQFyCh4+Rn4VVkI2dg5OLm4mJGWrLqD2j9ozaQ749+HIwyQCPaQAIoTUzantFuwAAAABJRU5ErkJggg==\"\n ],\n \"popup_full_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABnCAMAAAAqn6zLAAAAq1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSk8PDw2NjYuLi4AAAA+Pj44ODgqKio5OTlEREQwMDBhYWE0NDQTExNra2tqamppaWlFRUVqampqamr///9cXFwAAABTU1NWVlbBwcHHx8fLy8u9vb1jY2PT09OioqKZmZkZwWr6AAAALHRSTlMABgoOTSMTTxY9Kx0ZETMvHydIRkA2ODqBn5WJRJqQe3iFgf1qUOrf2pTl5E4lyI0AAAMkSURBVGje7drbctMwEAbghDhO5Pgoy1YBA06bHji0TYEA7/9k7Frd2jOtHEnN9DT6M8MNcr/5Vd9kt5OxXFlm8vIzhY/ZqanbD586xgYk5J1lzCWq0hMzw/SYkaQQAhKrKM5A6rugEYbh0irwAFokjYWUBI04jlcWgeNgAbWv0pSYBBAg8nxulTwHDCiSxtugAkXAKIoisggcBwukMEQIC2nqEIMKEFmWpRaB42ApaTZWiJhOAaOqaymZYaSs6ypFak4QFtLWUQwikgnRNE1pFDgoBJN1ilAeLxMFPRBi4nweZWnNRFNyHgTBwihwkPOyEQwkbBQmmkJYB2+tYyopJUFmIUZKBdHNaeus8NKkON20x8fHRx8tcgQPtBsOjaIip0IPBBysU0SpZKfr77tLh+wuWi7rLFKFdH1mSVenYnL97WR77ZDtycVGSlUIL+6+MumuLV7NoY5gX3fbvzcO+bfdtUzU8BuKl3RxmmuDOo34dLn988MhN9eXX0QjU+3FTTtniU4teAPOLxfnNzhNw+DiVvHQuYKPinLUtQXlY5ySiyorco2Dr0GonCbgj3E4F/U+B99qVgb8vbtzxINGwosw5qjXoFwEj3GC4PZFeCIHX+wxR/DX4pRP4yyMnPoADvOOd7zjHe94xzve8Y53vOOdV+BUB3De1vfGwffgl/C9/mDO889dDjlHeqa52B1z6xxozqd1Dj+31PS5N4f96RDNHFY/Vz5znSufbyTTzZXJGc7Jz9zm5OctZzQn3zv3r6Q4bdefIR8sgufXLRdy39x/uMdgbnsMCQ8O9xij658CIWRAWRgnCGgvE82xDl6bfjuX3EIpSqLbMnGDwDG1aKqgDTDaOlSo35ul3UpLRbCR0H/KukqhzJCZji/oYoAKWgNWRlGLwAgUtZ6jOppCg4UjUl0yg9BmE3eoPTMdX6Aqida08LDJB4NIbLCnpYUwrZ1XmNwoeBIRUEYZyv01emyUfpHer7dNFvbKgoSGwbMzRKjMvpBEmFmIIGUf1NV1+asNMowUsvAfx9w9byTRMUuBAKtgf4cnfHx8fF58ruwz0eY/HRQD4ERyIRoAAAAASUVORK5CYII=\"\n ],\n \"popup_top_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYAAAAAAAAAAAA5OTlpaWlYWFgjIyNWVlZFRUX///8AAABqampXV1fx8fFcXFxUVFTHx8e+vr5kZGQwQJg3AAAAIXRSTlMAA1IGChNMIRovKA9BOMcNF0g0JSw+HpUcOkWN9aVcv4I+EWOzAAAB1klEQVRYw+3YUU/CMBQFYJxattGpA1q3qqgIKPz/H+i5vUsmiYV2I8aHe567fDmnfdrkZNYpmSTnalzSmOshiYd64yY9vRWnsHGfGrYipE5hYzab3aYE59nqpBNMrzDxkBLGfkjnGChE5HneIDYmDYLzwFhi6AxDCgw7nU4X8cFpC4ukkxBN6stAAQKjLMtlfHB6QRRJvtIVEqrTMXa6AFEU85QUxXIJynZQqBDXIaYhBUZVta2JTdtWFSySGkAoFHT83TBTzKvWaO2cq+OCk1qbtpoXDM0YCtVhBmWggFBKZXHBSWCQUImhQCG6HVott2AwGEOQIlMzg/kA2ZyWu/6tUF+nRBu9entCHlNCH7ytNBqVXaGQQ3WwGkZbvTzvhuT5ZYXpsBwVIicwm69TGQPmc0gAGVNxIR4uMJulOlq/7g77r/TsD7tXramQDQwHhx517us4d7f5eB+Sj82dc75QjqcdcDCbd3Rdw9kOYLZw6lp7xw/XO+sjp6HZnFIjHKUcDdccOesjh6/HjHYMHHveqVU2wslUfdbpricb5WTdBQUdPDd7McfiwYWci/b5P44a6ShxxBFHHHHEEUccccQRRxxxxBFHHHHEEedv//OFs07PJJhvB2dQcPxwm8wAAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo1\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAKlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWZdn3rAAAADXRSTlMABRAKFywhOfYnMR3v8BlJngAAAUFJREFUaN7s0D1qAlEUxfE7hBRJNc9ZgZk0IU3GZAXGzsZG0A1o4QIEewsFQURBtLHyoxURXIS9he7F8jRPEN6c7vzaPxwu10RERERERESe4R5ACYExmtgi+oXolvx6ZXGEEgBjLM4c+0L0zEofXmkcoQTAGEtmCftC9NQ+K17lnxeUABhjSa3EvhC9bNWW1yFLUAJgjKTz7/6O5AvR93aqey2LBZQAGCNp7t33jHwh+tTaXa9dsbDo5gBjJL2J+9qQL0Rf2/nmdRm/jW45wBjLwObsC9GvD/9Ve8VAAIyx9K1BvBBd/8r1X6t3DATAGMvQtsQL0fUv/evenh3bAACDMBDcf2tW4CUapLsRKBKwzevNvLz3/seDedlX277qHmr3kHu73dvynJbnyAtbXiiPbnm0vqP1Hfq02KcBAADAwgBwBEHj/3RdFwAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo2\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAALVBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUW/iK7AAAADnRSTlMABQoQITkYLCcz9hTw7fhFXIgAAAF4SURBVGje7dmxSgNBEAbgOUE03e5aWm0C9l7ExtJDlDRpUtgmcgg+QCS1KGqTQkHyAmIjKEF8Ct8iRQrvGcRrdCN7e4ObsBf+rzpuYJYZuGN3lgAAAAAAAADKkAUERdKnmdUCyy0ockdJ1e0kybpHWkTGaoHlliSdUU2Npp0m1fQoFpGxWmC5NSlnNKbd1C4WjbfUn55W5mpec6/spQzcas9i+o72aJzYvcqtxKOWVifJL4HlLq62m0dbdNq3Ot+XO1d9fy62Nw6NF0Hlzqt1RS/pqGN1fCvf7zv+PLxsXhsvgsqdV+uK3tFHZjelm8ynYS2bm+H6c8bArvYxj34W9mtCg8r0q73G6Re/2icaLLxf7dWf56r1a4p+saqdlOrXqDr9qv2/X6PiKPrF6xe+R873iP9X8P/7Zd9PYL/6Z7+K8xDvPITzNvO8PXbMMDw6mJm5BJa7W2aeg3khb16IeTRvHo37Dt59B+7TmPdpAAAAAAAAACV8AcebDMLiSs2oAAAAAElFTkSuQmCC\"\n ],\n \"progressbar_indeterminate_holo3\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABQIKDyEsGDkm9TMU8fft+mrRFgAAAchJREFUeNrs0ttuwyAQBNBZLsYY4vL/X1sbq/CKKky16pyHJJZWuyNnQERERERERERERERERP+BaT/mQ2UUgarIA2nXH+t9uj9E7m9jZLq2WRFdiVem7cfGBw3EWrkfxb5ABBCxiogARk3ilWl7TcYHBda56/l6ctO1zYroSrwybT82PmjhQnbWGOtymO/ZHBT5eRc6LEzbajI2KHXQIXsfrIgN/gX52axItmL0JF6aNtRjo4O55kOI0TsR5+M2Xdushq7EK9P2Y+ODMcCnFLNIjmmfrm1WQ1filWn7sfHB5PEp5YhAPMobEpCKKqm+Cy1Wpj23sWO1T/5TLl+1XhuwsV6PHdj01Gtl2jONHat9ikvqtQN7UYX1mlKvjfX68z9MV9pz/2W9EpBYr5Y4qarXsrTn6LEjsV7f7dsxCoAwEATAMlb+/7m2WlgYONjFmRccKCRcdhM+WNe0H34vh2PCcdM17Xm4e1V9sK5pA6/2FhMP1dPuLCasVa1VB9eqHoWKJy54FPKk3TtxwZP2aCBn1QVyVlUgZ8UHcsQJb8QJ32zGCYWhmyfOD0OrcqhyzFU5FNGaJ84voqnRqtGO1WgBAAAAAAD4gwuJzBUuUw2jkAAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo4\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMAAwoGDyEsGDkmMxT39O9TQliZAAABzElEQVRo3u3ZP0sCcRgH8MehoCZ/6hvwDzSfNzZlRoOrIubiJAi1hHFEi6O01GJBEbgEBULQH6I3IOLSFjT5ElxFtOvH1XYafPGODvx+lpueh+89cMfvjxARERERES0tpVRYP0IK4dT5woniMecFF84hWliUaZqGEhU1EUrX+cOJ4jUjHFIL51C6iZJ0QjMkmgBgBQHonAyH0niOGU2SkspqSZXOArCCAHTOGNEUnmNGk4zsWpZ1klGpVwuhCyx/OFG8Vo9HchZg5kie49FcXV4K2qHaKEAegYIAdC7HI0dgiXskRd2kLMfVarWWVzsXVUAtbwIFWGfDh86t7Vhp4RytrVjpUvaazebptfl21wRgBf/f+f5p82rRHE6TWxna2qfc2JCxPNj+GOso3muvDWxM15Vjer4y/PqZ14ccBGVeIx3Fe41VdF59V45pZW3wO6+u7KNvdWb7YwREQeb1js7LlWNSWeW85ur9Na++dIIzr47tvcY6PC9Xjkmb88Lmxe9xvh7/Xx7877meANcTXK9i61Xuh7D9EPfb4H4bP89BCwLQuejZeQ7PC2eZf17I82jsPJr3Hdh9B+/TsPs03teC97VERERERERL6hv2rPU7MZ28hgAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo5\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAANlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteV6AHYNAAAAEXRSTlMABQoQFyw5ITIm9R889PfwHc7yYP0AAAGqSURBVHja7NLbbsQgDARQc12T7KbL//9scfqQSyshdYWFpTmPEbFHMAQAAAAAAAAAAAAAAAAA8An3y/5VwbHMIBu5Tyn1Z5Nw/ka+O+cVHMvMsZH7lFJ/9k+/fLjx8p8PCo5l5tjIfUqpPlsONCHeBC+dizpaCNeWmSOXN3/ucSn7NZEDTVwfF2uUF29fFRzLjLGR+5RSf7YcIKJ3SRdlDc6FtSQFxzJjbOQembK8O7NlORE9OF9wkf8KZw1conOxLTNmzx1mzz0wZb8mcoCIvurNqxCVV1XCRFwN4v2SZjcw5ZY6s6VHf9RrSURpqUoyUa4G5f2SZjcw5cad2UtCvWZ8OBsp/10vJmK1m3sSPatBLTfPX6+BKbfcmb0w6jXjw9lIiXp9t2/HNgDDMAzA/v+6szcDHSIZ5AUCkqGN5aHn4DpSul5Dz8F1pFxcL5/2iR/NHSn9OQ49B9eRcnO9PKsGPlh2pNw8qxoK5Y1bOlJuhkJG2qdzJ4y0FXLO5k4o5KgTphX1OlIu6oTK0LdzB5ShrXLczR2wymER7XDu94toAAAAAAAAAD98BS4GIUUirlsAAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo6\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABAoXECA5LAb1JjENTd7cUtpBCwAAAcdJREFUeNrt291ygyAQhuFdQCVgk9z/1ZbGtkfgTH/QVd+HQ2bYb8IeGEEBAAAAAAAAAAAAgL9Q1VgZqvXJ/uOrcjzcWIJbTt4h4LJmcyq6uo8sGl1P5iqfPfgSsMeazSkXqmanIurm0JG1ymcP3iHgsmZ0c3Uqisy+LjgRF/wOglMtlY+nBBfTwXsEDFHUhWYL+aHOO1Xnh57MVT578B4Bg1Odfauc+DTVpCGohiFNPRmrfPbgPQImP2ssazbKyTBW5RRiDCmPm8vJx+hL5aN5BQ+Gg/cImIegjd3KKajcnnW3JJLK5A6ySH4eUX79ZIZ1CPgIIm/NFmq31yQy7fNbjSLj84hK8Ml0e3UI+PDt9ppoL+O7Zz7g/ZftlUUy7fXT4Nl6e/13wPvQbq9MexnfPfMBaa82+7tnPiDt1WZ/98wHXG0vHu2NPzmbD3jnn2OT/d0zH3D9xQSvVW2/tTQfcP21KodCps9czAdcPxTiSPtCwXc40uZCzoWC9wjoVy/kcJ3Q9m098wHnteuEXIa+UPDtL0PzKceVgu/wKYe2SKE9Gax89uBSbLimvGhlfNPNxyc93LCffLHVkgAAAAAAAAAAALiGdyuD+5ssDOz3AAAAAElFTkSuQmCC\"\n ],\n \"progressbar_indeterminate_holo7\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQIKEBcsOSEm9jMd+vBmaXrxAAABc0lEQVRo3u2Zv0rDUBjFPzNEShZN4p7aJ4j6AkF9AFG3Dp0Et2wdfAFBBwe3OgtOydpdB1/A1UdwFy7xZvLDofY09HJpzm9qPw4/woGE+0cIIYQQQgghpLfsa9RgZTKRAIjjdnHq0in7c7iribPADmAAh0/21oWlMkkONXkW2EE38p0twIHbg8StS3cSy9GJ5jge2gEM4PDJ3rqwVC6nl5qLg5EdwAAOn+ytC0sVMr7VvOWJGuDgDtw+Gjt16dT9ubxfaZ6K1A5gAIdP9tYFpa5f5W6qmRfpbNqR+dke4MDt6cypS3dy8yhfjeb7YVA1HTF19AnEYfugcusyk9/Uy9++JmH3p6mjZo2UYeXWZepwvX2V2/rfRvX1zL7+xZQL+qoj7/uKKrcuo1If7Avri+/jEn3x++XV975P6wmuVxevV7kfwvZD3G9j+22e52DnOTwvhFIFz6OhVM77Duy+g/dpUCrjfS12X0sIIYQQQgghfeUH+E4C2CXdn30AAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo8\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQMQFwksOSEy9h4L8O0G0W7OAAABgElEQVRo3u3ZsU7CUBQG4GMHlc0WuzG0TdxcDJCY6GJgKwuSvoFhwIWtcXZpZWGT8ABGpg4Y4kr0PXgMw2Jd1Jv0NjbXHG5K+L/xkvzDP9B7zyEAAAAAAICd5WU5RGR4HBy1IPV00pTz2wiRa0o88kwWlmO4Zo5ypRfniEYssgOJRW7Aonu0ZwfsRLph68kRjXSpV5csvVqdxaXlvuWdlyu9OEc00qRGW9L0em0WreuTRt55udKLc0QjLfKjrFHHfH+NOLwsa37ETqSf+npyRh3ru5E5LfqSuXnRZ3F7Vl3knZcrvThHNHJDcZh1d2+eP4YcJlfHcchOpFdjPTmikQmtUskzPaQ8xpV0g8aHiaacp59GPmmV9+sg5TE8SDdouJ9oypnRAH0p5Kz/7GtG0+3oq5JoyvmgKfpCX+hrK/rC/33WGt/Hf94ncF9Vu6/iPaT2HsJ7W+29jXmO2jwH80K1eSHm0WrzaOw71PYd2Kep7dOwr1Xb1wIAAAAAAOyqL3DZCqyBVRiEAAAAAElFTkSuQmCC\"\n ],\n \"rate_star_big_half_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"rate_star_big_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAyVBMVEUAAAAAAAA8PDwAAAAAAAAAAAAAAABoaGhBQUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJiYkAAAAAAAAAAAA1NTUJCQkAAAAAAAAAAAChoaGPj48kJCQAAAAAAAAAAACmpqajo6Ofn5+WlpaUlJR1dXUVFRUAAACrq6uampqYmJhwcHBgYGAAAAAAAAAAAAC0tLSxsbF/f394eHgAAAAAAACMjIyFhYV9fX1tbW0sLCwAAAAAAACioqIAAACvr69YWFhUVFS3t7eP8DjqAAAAQnRSTlMAgJkyeRpOs5x+BQNzDmEWOsxaaAmVg29TLuTSjkQlHurn4tjXvIg18d3aua5kPhH7+MS+ZijPycK2klZJ5mz1qadtR87CAAAEB0lEQVRo3u2ZiVbaQBSG5wshhbCGTdZKVVQExIXW3bbz/g/VTMSGJUgWxp6ew/cA5Myd//73/oPYs2fPv2Ba/S4+g1wVcyo+gTOgKfRjm7ikhXbKUIei0E0uD8fAodBMCx7l4BNuqQqOPIdsQWjlEE6llBnoCa1U4Nb90BGYttBIIQvn0qUOKaGRS8hIRQdmQh9K20Pp0dDatF+Vtt8YgSW08QQ38o2+TjkoKfyUcwyNcigrKbzzQ6PhVeFE/gXQNJZKyhV8xnAptPAMD9JnCAdCB6qJ2nKBro5h4TeRz0BTKzXhXnrobaWaqfx0iTpoWLxSYMhl7qAidk4RfshlriFbE4od249cJQNnQqHHfnw6Gmxopuxnjd0vKVNoyHUyUE5kAmmPVmrOs1WEsVznGA4sq5yak/bYpg/3dy8tqzKbZQmkLQPoEsjrbGJZPffL9qq9NKts4U4GcdzlY/KVVG5BuyzTMDzGX+Y4zpHcRN9xRl/mZAzFKcu0ln0M93dvHWf48nIlE9N/aTvOjftl4GDxzuwiau/YNUNVu5IQq18ayd3SWf2Owq4Av+UuuVXfma73jgUY3+SuuPoFVAsb7IzTodwN7TrwZG9Ic1n8WZCMC/hoSTrMozad5NwB5kfTtzABMokvarQmt2BJNI5lEr6pNi1uHR+pLGrdic9JA7ByYivpg0TlU92TDTfga5X45Wsbyt1KoRcEVb7buGXzuydk+Yy2jMgAMKPFM/tJle8ketleSyIiZ2bE8p3g0rRj5K5o5RvNyxYDu4nLRbgm9csWh5QJXRkGZQaWnSC25lVWCQFkW0mDeF+GoAuFRBlCBfEwjKGcMEOMw2q7mCh9hVJd8lxRU+lrO8kz2Rlkwu9wlUQvqB0ZjuskbwG2CdcyJAZ8TfBWYsiw3CR4R3mOsvj3wczFf2Xqy9DUY79BHW5y1OAANYj9ut+DQVCaNDCCtHgE1diGup4ozx9QGAFZ8zSmsdaCDPX4FDCDw/M4pjm04NdqV3rHseyU6U/55ObQBGcli3SBAyWtaZH1hHMdT+C51YfAqwEL87ps+otzMoGnob6UsB+BvO8ypYl3qOQCLy+n9HtcmrXFI19mVw51FGv6VRZn3lFdHWce4VYO1VmafnacK7p+vx3vOE/+cVYO9eJPv+gOfug794kSm9kK3seqiz11A70YVzTwgyKVwqaT99ShHi/eL2kS44q8KOageuejgF0q4vKlr2oco5Py3n9SF0oE2Z69xUPyQKPzNmbTkTfHrjwf4VIsbbfFZ1zqQ/kQ2e6+w+97fBFsI+2JIuOAFVkLDVysWth2UJ6kKEZdFxSTdJRqW1mI/OeVBcyiNt+0qWotInGZt77GyVO914nYs2fPf88fm/2TZoiTETIAAAAASUVORK5CYII=\"\n ],\n \"rate_star_big_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAvVBMVEUAAAAAAAAAAAAAAAARPEwdZ4ISQFIAAAAAAAAtoMsAAAAAAAAAAAAAAAAmia0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqlLwONEICCQwupNAsncYnjbMjfZ4hdZMKJC0AAAAqlr4GFRoAAAAAAAAvqtcebYobX3kAAAAAAAAAAAAysuErmcIpkrklhakfcY8AAAAMLDgAAAAxr94xrtwieZkYVWwQOUkkgqQAAAAzteXrvX7WAAAAPnRSTlMAgBkzmbOcfAXmA2FzTc14Og9uVC1pWiUUfmXYlYPq4tLDvY5E24g1C/G3rlA+CPve18u6HZJJ+PbAqJjHIJaA4UwAAAP2SURBVGje7dkHduIwEAZg/YaAwdh0FkyvIfSEtE2Z+x9rPQ5ZAzbgpuzb9/gOgKPRzEijiKurq3+hXq2In5CtIl0XP+AWQFnIp+ZhUYR0BaAFaEK2bA5oAngUklWAJ9r+wC5VAYPugEZRSPUJTIgoBYyEVDVgQERdIK8KiYoN4I4sLSAhJFoCKWI9wBTycG5vyNaWWrS/OLe/zABdSFMG+vSlIzMdpg3glXbeJaZDgVPhmyGx4VWBe/oLgKTuoHBXcMyBpZDiGZiRYwOUhAxcRBnaM3QOCxlF5NhKKiWniOSW0irN/fRAC5Bw8UoASTr0AdRE7DTAoEOvQGMlWMwnER1LAbeCyWk/jp6ENmRy+3GJ/5JSB9rklgIKkZqAYqskdp51DZiTWxMo6XohsaPYpuI863eXul4zzTQ8ZcjDEJ6qpqnrI+vL6nF7KVdxwQN5aQ5xXq6WyO4dnTjUTtrmNzsPRpdO6RjG9mYnlWQT7DvsHgsA1u8ODGOTyawpsk4mYxh968sASvs1rWoAPihuY45dXYjjL20pXj3nOw61BuCN4vTb/R2WtfcpQ3FZv3GaF0+0M0w2FI9uC0BZPTHNcakacaXBuUvSZw5804nuAUC+cu7UMQGkIm/UjNNAOd9OdW4MTYoiw2WqTS/eDXij+hResw1Az4qLlFKk8HH1pP0d8Kta+PBlktzdFN8XBA7fbwruvu2qnkvhC9UmBhy2YOOZWrbDJy9sjlsO3yBI2OAKm5TwbV1hCxY+jP0dqXbY6iIkLt4h+cHNYKFGuDfmeFbxAWhUog7iHfJhGHFEL/Ig7sccKEScIeZ+c1uLNn15Z13cc8WUpy9PMc9kt0DK/x2uFukFtUf+vADp0HWkpoEX8ikJ/IrwVpIkv/oR3lGeg1we+B0lG/6VqUO+tUK/QT2e6qjrU8frSIQy8j74mu9498rFLlAN3VDdE+XdDOy9Sy6TkI116tVQmxMAee/heR6yOVTcg9mrvRxdTeSdUz56cyi7/urxEEDpk48PDe4J5yVcgmfzR4frevC1nL07ZioTQ4IrQIv2bJ4A5JwuUzftRUVP8AIwO7q7o7zaX/LyeFFdQAvVuccHEykv55BiL6p3cPqpgbdor3Ov+/ZyXKOVa1GpEB380enc98PTE6lSheXD6eCjEFs0cAZF1IqnVj7iRT2NvzfJDLFFze/5GqVzAalrsNx0OMZAOmgl5YBXojEnQXqkXughOQDt3tcxqwS+OQ7pbguLVr88jD7D0trQTeB29wt468MzCc4kRcoA9MC50IZlsfJbDoU8bFrQ6wLTggR8qjeAwP+8WgAwgxZffcGxFoEsc4swtzRlVNLE1dXVf+8PiLJs5G2Z9ooAAAAASUVORK5CYII=\"\n ],\n \"scrubber_control_disabled_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIg4st+Ci486sd5LqMtwlaJJqc0zteWzIZSAAAAAE3RSTlMATUg+Ihs3AywVCEUP4FHVmWCf15i9tgAAAYlJREFUaN7t2Itu6yAMBmD/NhBuabuT93/XI03TOm0qJXasdVK+B4iFTQyYTqfT6S/pIScRBlgk5dDpSDUkxjecQqVDLDHhgRQX++cDY4CDMURgPMGB9IpgghRtdjImZVWeqmCaVEV6GDvw7jRF7BQV33eMEAHXCAUq03WoDBWuNGURKMlCMzLUslMB7oo5QfYkBZiEpwtgmPBiWoB9CUuDUVssPcLeMRLMEg1UHKDqS2wvcwJ8c8Q4ANNDHYfoviUAgrpRX27XbbveLhjL2hq/rdu79U1bZcHIZd0+rOM1CD3SMHLbPv3DSFPu0us9wKrcpxjavsCQewD3FLkX2X2buv9ov9cqIg4R3du194HjfmS6H/ru1xbvi5f71dH98ut+ffd/gPg/ocYEBkLPdRj0V3iIG5IkLzIMIeqqCNydB0bllUZq96Gj39ixN+zQOu1WE6alShphvgEp9YQJ0kkvNjzRItlEwYBEsiuZH2zNXOgYS8ztR2pyXOhItYQsH3IolU6n0+kP+Q9bEx2UrsdzRwAAAABJRU5ErkJggg==\"\n ],\n \"scrubber_control_focused_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVtyu1yzO1ryuxexetjx+tTwelvy+1yzO1yzO1xzO1syuxqyuxwzO1wy+1nyOxZw+pNv+hxy+1wy+wzteU1tuVOv+k9ueY4t+ZixutDu+dJvehVwelYwupSwelryuxGvOiB2w4OAAAAJXRSTlMATQYKEQ0XGh02RUkgQSwmMjvw1flze2To3M/j3IyrpYRsX62hrNdO2wAAAttJREFUaN7tWWlz2jAQrZb4Ej6wjc0dIC2+OfL//1xllxl1Wq9AVjQhGV6+BD68xx7aXa1+PPHEE5KA7k8LoMXoCmjxseSM1TCMlyvYv+yLjxJp2Rm1aZqWZXewLPaBybQa6uzQsVt24IQepYSBUi90AtvqNABAmd5k5B75Dx4TMdUkOnrLnVCCgE5cq5MYTm+6zpgIMHbcP1YM4mfO4fS4BHPUAIXOOz4ld4D6nZ+k+U03JHcidE1UAXdPQMndoAHiJpzf8okUfEtCoeWfEElMWoX7+R0iDQdRwH+/sg14/vhkEPx7cgnAMAMyEIFpANx2kEuHClCXO0kQgJAMRngrDAA8AEPDACA2wKYqAtTmJiAGOEQJDjcBifBYTWAsjDM3QM0EXQZwE3ADhDVi9mu5jqbr5XYvrBjMBPwMeARFuqhO54bhfKoWO4LCQ88CE8CLxNuyOtdFWWZZWRZ1XsUzvGAwAekQJ/NjXWaHK7KyPkaJdJhHBuqh/TQvGD1HVuTTBPWRMcJO8Rjxz5zzc4XoDckj5DTDCC1D8ZHzc4VjjBakEUgl6aaqOT9XqKuNVKKCgRXqRV4eelDmK6xoIwJIjJPOgF4TEiTKvQJopX49FYdeFMdXtGbLJNGy9VC/j2KJNAJ4sUkv5k3WL5A1EelFv8AIE5iiAu9TGQHQJ8BjoNVFoCHIymn6U5ym6gctxQ4aUouQUrFSLxXifrNDi52o46iX6/NCslzjDWcW9TacmaDhSLbMtKdlXlLBWCHd9NPon6Z/jlJB0x8wtsziKq+LMmPoxpaFeGwZMnjtVtUpb5r3Jj9V882NwWvY6LjfxuvLZR1vE9nRUf/wy6uF+vhuGZ95AeGZqmIA6L4Ear/G6r6I614laF+G6F7nfP5CSm2lpnspCA+y1hy8mNW8WoaHWo7Lr/cf74FC6onlUR+JdD1z4Q919hV/PdR9hafGG4+lX+e994knvjF+A/DCfuTfcOFvAAAAAElFTkSuQmCC\"\n ],\n \"scrubber_control_normal_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAhFBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVKvugzteUzteUzteUzteUzteUzteU/uuczteUzteVJvehJvegzteUzteVKvug7uOZHvOhHvOhDu+dDu+czteU5t+Y8ueZAuudFvOclVTOqAAAAJ3RSTlOZAAQJDxgTITo2HSomlX0uijJC6IZuYVFMSbJmgf74kHjvp8/MvLsvv+3mAAADbElEQVRo3syU23aiQBBFz4w0NA2t3AXvmqxE8P//bxqMFip0G4W1Zr8keTmbOlUd/BmZ/0fw945hBJQ9mUwsy7Ib1C/qT7K8J2jCVTJjQjg/CMGY8jQSo8CYrr6bCcf3ZqHLf3DDmec7gqlZyPGC4PztzPFnLs+zdBcEgQSk+rFLs5y7M99h5zl0An08Eyq9WE63eGA7XRbKIZheAU28+njPjZYJekmWkeupMTRFoTffquPnUwktcjqvFVbvEOiLt0UdjyeoFcLuU6Dv8/2woHiTogj9viHQma8+n6cSTyNTroYgg1bQtB/mAX5FkIfNJsyCph43k/glMnP9LgM68j2+wwvsuNdhwEO+8KIVXmIVeeLBgI78BC+SdBjw0E8U4GWC6KEl3NxnnZ/gDRKuNn1zrbi5f+bzFd5ipQz0Hu4EE9txd3iTnevYkzsBLTjM8DZZeLNo3Cwgl3gbmXvtNaBVkM8DDEDA/VZJaBeUYhBSKqktYF4hMQiy8BgJWhc0xUBMW5cEGmCOwZjTCKABVsCAI1y2gBEGoBFIYAnawDAjCIsEzRuIJAZERvVbIIHFZksMynLGrLbAcRMYOXzG8Xodx58HGElchwR1QwVMfO1PVVUqquq0/4KJou7oKjA3dIhP1fH43XA8lqf4YO6IBOYbWmwqlU4cq83CfEdXge3wrT5/XZ7zyVCu9YYtd+yLQK0g1/ezoXwybPQt5WoJjaBZQQYdMfXTbimGjqxewlWQau/nRPltw0l7SykJLBFqd7wvvzsp99oth8K6CrTPbEED3I+w0D41EuiP6KPqE1Qf+jO6CNSVSt2Ky+8eSt2apbrT5wSbfsHmaQE0rPsFa2jQTDC8YPyKtuMsmc40GO1Mx39o4/+rMP+z+1etGeMACEIx1BuQqJPRwUQG739BHYzFEMNHfBE5AAwov+2rv3vsfOKx0wHYc80PHH5k8kPfLlvWfNmSJbx8KLy8VXhJOhr837B08zTN3TLYpaPEb7kBjP8CXL7DBoS3UKAJHOVjcRvLG3E+SuDDED7O4QMpPlLjQ0E+1lQwW3TRfasLAKNlOhyn430aUNCI5XtIdGAu9wxz1QHqAtQ4mj6eEzXWA0vzca/2Nx2gIwzAWtu/gdybfZmQe35pwF1LAy4oDdRce0gVN/5SPYlXTe2cDUmLl89GXuGIAAAAAElFTkSuQmCC\"\n ],\n \"scrubber_control_pressed_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA1VBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVsyu0zteVuy+0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVdxOszteVpyexuy+1tyuwzteUzteVZw+pNv+huy+1xy+1lx+xgxuszteUzteVryuwzteUzteVSweluy+1uy+0zteUzteUzteUzteU1tuVOv+k8uOZVwuo4t+ZJvehCu+dgxutjx+tEu+dGvOfyQddBAAAAO3RSTlNmAHzex6Jq682mwiLmgYUv7m3hTPX14fmJNNmeY1HSvbCMmI47/e21tI+IeufcnZRyHf4Gn4DVv2BIOFolky4AAARISURBVGje5Zr9e5owEMdvIKiooCKgnS9Tu9p29r3dW0Sttv3//6Stu0BkJQlIfLY9+/5qnnzkcsld7gLvDqz/B1AbaJNSpRIQElQq1qTl1hQCbvrVOnmjerV/owJQ03TCla7VCgL6FSJRpV8AYJZJBpXNPQH9JsmoJuwBcI+Sc1RODdu2TQDTtrvGaJikH7k5AbVJws5VDd5IqybWp+TkAbgeidU2TODINNpsnOdmB2gklmWDULbFxmoZAU6JTd8AqRpWwkxyQC9e3foZZNJZvM/1nhzwPfZ9AzLLiPfEsQxwHERDu5BD3ehvBcdiQC8aWGpBLplW9Md6IoAT2f8D5NaHaB0cASDynyrsoWr08TwA8//3sJfeR/uBB3AT/7/AN7jpAMfj2D/3OnhOKqBETQgFZNE50gDfqJu1igBa1M2/pQCG+NMYCqlL48NbgCk8H3KfGuYbAEaoOhRWHSPg3W+AFoLPigPOcKbWbwBcHAsUyEJnSQK+IrahAtDAub4mABi/dVAiHTOFXUANobYagI2z1XYA+FVtUKQ22nsH0M60B85nF/7trX8xe8i0F9oMcEM3B4h0OX9ahY8/Fa6e5lcgEt20NzGgL1/iT/42fF6uFz+1Xj6H24tP8mXux4CqNAxMO6vNekGoFuvNqnMuDQzVGIC7WxPM/zFc4vQRYhl+FBA0PHcQEDlpU2CfDpufEToCKzXRUSlggBsDuPJXbH5GWF0AV7hxBxSAH3TK95/ths3PCM9bvi+dotEpwJCkEifhmqRoHfqSBMOgAEscyqb4ASmf8MRd5zEezhRwJHaiL6slSdVyNRO70RECaCy45i4xWijNRp+Bo2uMCRTgYQgCjjqPi3TA4vEEOMIA6VEADgeePr4QHqADPOEICgjwqDscoIlrcDgT6ehFh1vkIQagw7npSJwSXRXYaAWPirnsqCh22G3kh93Bj+usAechd8ApY8DJHDKv0kLmVB4yk0HfyBf0p9LEiAV9kF/OHvxtuInSlk249YVpC173AAEsNQWhLk9eE6+Xl9fE6+QShGLJaSJ1nIBY05k/v72d+7NzEGtCU0cG6KpNfvFw6+4Aeuz+oe4G0tu9gAzVX0CGiRsOKPwEjboMA7Bb7EgFYIQHQ/o1dgyFNU6/xt55qi7i6PLeHaeUcA8Fdc8rJdDITLpKiiF6SrXFJQp2m0lrtK6gIGWpL0hROYGqklrgpBcFB0WLggZBDXhlzbGasmbjjxRmUY6uqLQsL45bZk7/HBGU18tY3q/nK+/XZeV9RigTqvv8y0uaxxlaLHreFsu4zVosOZtEIw2k0kZ5mkSoRvY2V8NiYxs5GnVBxkadzsYFgzytRqckbzUapWSrsViztIzN0l9W+dUsTXaCdXePdq/pkYzyWns2rLEbIFPz+q5Ay30om37YL/pooCF6NGDXlDx7MNOfPZg19Q83XmemDzf+tacnfy/gB/s76qMkz3F7AAAAAElFTkSuQmCC\"\n ],\n \"spinner_76_inner_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"spinner_76_outer_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOQAAADkCAMAAAC/iXi/AAAAsVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+3mHKcAAAAO3RSTlMABgoSH/3yGiQO7CkW9vouMkDkRTfJzjvf0+jESqBcV2Hbt66ldlLXv06yZWmBqZtxu49tl5OLfXqFiHO5Lf0AAAtLSURBVHja7NxrU9NAFMbxZzeRNk1qYmxLWyxQLhYsooKI+v0/mHshOXu8dDTNZXHyO4X3/zmbDcMwoNfr9Xq9Xq/X6/V6vV6v1+v1er2eH7bb7WmWZSn+Zy8KL6cXj8eZxPMnNJhxI6n05fzT4ys8X8KCsIXit5HGwbvLCZ4fYVCjQIEl6nmyPN8GeEaEFAqvLEOdRP1FxuPxu9Nn0imkIhgq/M0mqVFnjlaH8J2QmmCVsIOdmxzrz9hY3Hh945pEW+k2FscVPNImUqbZpbH8NoCnTCJtkkDs3iRVlg4eQniIEqmSNqnnj5ukNVLkwejOu20KGUleyTa5+3alTGpUn+VXr55NlagaI75IsnuTFFk0HujRZq/hDRkp1PhLJuzs2iQVUqW28uTMikj5tfLXh3LHJsdm3MhCfi/Qvaiw48BCwCGyLJtst9/PZ/znHdZImdMMHROBE0mZbiV2iK8/3uZ079BZpcbRwfIGnZJB4FTyREmFu4XHF8sxXyQzGt0G6IyIqJGfV9uIv3f4PWfXThloZzFBR2Sg8UyKxL96czHii3RCR6OP6ET0lEiVdF4FqohOP9kfBHif/X4RoX2BZit/PrCobnLOd2hDjaME7aJGXikV7Ce7OKBd6sCychaiVcJJ5JXYX/yhSKQDa2xStIEaEzeTEuuRHbG7tTQ/RGtEQonu3SNQm22uEmmPhfwaLZGJolfJlylRp+Dzbza5XC5P0AqZGAHvjARqNpkVbdQ4Wuav0QKRWO5jGQUS9ZMf2Fld2plnaBg18kyBRpzmJo8qtXWMJlEjP7AR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\"\n ]\n };\n var imageCache = {\n actionbar_ic_back_white: null,\n btn_check_off_disabled_focused_holo_light: null,\n btn_check_off_disabled_holo_light: null,\n btn_check_off_focused_holo_light: null,\n btn_check_off_holo_light: null,\n btn_check_off_pressed_holo_light: null,\n btn_check_on_disabled_focused_holo_light: null,\n btn_check_on_disabled_holo_light: null,\n btn_check_on_focused_holo_light: null,\n btn_check_on_holo_light: null,\n btn_check_on_pressed_holo_light: null,\n btn_default_disabled_focused_holo_light: null,\n btn_default_disabled_holo_light: null,\n btn_default_focused_holo_light: null,\n btn_default_normal_holo_light: null,\n btn_default_pressed_holo_light: null,\n btn_radio_off_disabled_focused_holo_light: null,\n btn_radio_off_disabled_holo_light: null,\n btn_radio_off_focused_holo_light: null,\n btn_radio_off_holo_light: null,\n btn_radio_off_pressed_holo_light: null,\n btn_radio_on_disabled_focused_holo_light: null,\n btn_radio_on_disabled_holo_light: null,\n btn_radio_on_focused_holo_light: null,\n btn_radio_on_holo_light: null,\n btn_radio_on_pressed_holo_light: null,\n btn_rating_star_off_normal_holo_light: null,\n btn_rating_star_off_pressed_holo_light: null,\n btn_rating_star_on_normal_holo_light: null,\n btn_rating_star_on_pressed_holo_light: null,\n dropdown_background_dark: null,\n editbox_background_focus_yellow: null,\n editbox_background_normal: null,\n ic_menu_moreoverflow_normal_holo_dark: null,\n menu_panel_holo_dark: null,\n menu_panel_holo_light: null,\n popup_bottom_bright: null,\n popup_center_bright: null,\n popup_full_bright: null,\n popup_top_bright: null,\n progressbar_indeterminate_holo1: null,\n progressbar_indeterminate_holo2: null,\n progressbar_indeterminate_holo3: null,\n progressbar_indeterminate_holo4: null,\n progressbar_indeterminate_holo5: null,\n progressbar_indeterminate_holo6: null,\n progressbar_indeterminate_holo7: null,\n progressbar_indeterminate_holo8: null,\n rate_star_big_half_holo_light: null,\n rate_star_big_off_holo_light: null,\n rate_star_big_on_holo_light: null,\n scrubber_control_disabled_holo: null,\n scrubber_control_focused_holo: null,\n scrubber_control_normal_holo: null,\n scrubber_control_pressed_holo: null,\n spinner_76_inner_holo: null,\n spinner_76_outer_holo: null\n };\n function findRatioImage(array) {\n if (array[window.devicePixelRatio])\n return new NetImage(array[window.devicePixelRatio], window.devicePixelRatio);\n for (let i = array.length; i >= 0; i--) {\n if (array[i]) {\n return new NetImage(array[i], i);\n }\n }\n throw Error('Not find radio image. May something error in build.');\n }\n class image_base64 {\n static get actionbar_ic_back_white() {\n return imageCache.actionbar_ic_back_white || (imageCache.actionbar_ic_back_white = findRatioImage(data.actionbar_ic_back_white));\n }\n static get btn_check_off_disabled_focused_holo_light() {\n return imageCache.btn_check_off_disabled_focused_holo_light || (imageCache.btn_check_off_disabled_focused_holo_light = findRatioImage(data.btn_check_off_disabled_focused_holo_light));\n }\n static get btn_check_off_disabled_holo_light() {\n return imageCache.btn_check_off_disabled_holo_light || (imageCache.btn_check_off_disabled_holo_light = findRatioImage(data.btn_check_off_disabled_holo_light));\n }\n static get btn_check_off_focused_holo_light() {\n return imageCache.btn_check_off_focused_holo_light || (imageCache.btn_check_off_focused_holo_light = findRatioImage(data.btn_check_off_focused_holo_light));\n }\n static get btn_check_off_holo_light() {\n return imageCache.btn_check_off_holo_light || (imageCache.btn_check_off_holo_light = findRatioImage(data.btn_check_off_holo_light));\n }\n static get btn_check_off_pressed_holo_light() {\n return imageCache.btn_check_off_pressed_holo_light || (imageCache.btn_check_off_pressed_holo_light = findRatioImage(data.btn_check_off_pressed_holo_light));\n }\n static get btn_check_on_disabled_focused_holo_light() {\n return imageCache.btn_check_on_disabled_focused_holo_light || (imageCache.btn_check_on_disabled_focused_holo_light = findRatioImage(data.btn_check_on_disabled_focused_holo_light));\n }\n static get btn_check_on_disabled_holo_light() {\n return imageCache.btn_check_on_disabled_holo_light || (imageCache.btn_check_on_disabled_holo_light = findRatioImage(data.btn_check_on_disabled_holo_light));\n }\n static get btn_check_on_focused_holo_light() {\n return imageCache.btn_check_on_focused_holo_light || (imageCache.btn_check_on_focused_holo_light = findRatioImage(data.btn_check_on_focused_holo_light));\n }\n static get btn_check_on_holo_light() {\n return imageCache.btn_check_on_holo_light || (imageCache.btn_check_on_holo_light = findRatioImage(data.btn_check_on_holo_light));\n }\n static get btn_check_on_pressed_holo_light() {\n return imageCache.btn_check_on_pressed_holo_light || (imageCache.btn_check_on_pressed_holo_light = findRatioImage(data.btn_check_on_pressed_holo_light));\n }\n static get btn_default_disabled_focused_holo_light() {\n return imageCache.btn_default_disabled_focused_holo_light || (imageCache.btn_default_disabled_focused_holo_light = findRatioImage(data.btn_default_disabled_focused_holo_light));\n }\n static get btn_default_disabled_holo_light() {\n return imageCache.btn_default_disabled_holo_light || (imageCache.btn_default_disabled_holo_light = findRatioImage(data.btn_default_disabled_holo_light));\n }\n static get btn_default_focused_holo_light() {\n return imageCache.btn_default_focused_holo_light || (imageCache.btn_default_focused_holo_light = findRatioImage(data.btn_default_focused_holo_light));\n }\n static get btn_default_normal_holo_light() {\n return imageCache.btn_default_normal_holo_light || (imageCache.btn_default_normal_holo_light = findRatioImage(data.btn_default_normal_holo_light));\n }\n static get btn_default_pressed_holo_light() {\n return imageCache.btn_default_pressed_holo_light || (imageCache.btn_default_pressed_holo_light = findRatioImage(data.btn_default_pressed_holo_light));\n }\n static get btn_radio_off_disabled_focused_holo_light() {\n return imageCache.btn_radio_off_disabled_focused_holo_light || (imageCache.btn_radio_off_disabled_focused_holo_light = findRatioImage(data.btn_radio_off_disabled_focused_holo_light));\n }\n static get btn_radio_off_disabled_holo_light() {\n return imageCache.btn_radio_off_disabled_holo_light || (imageCache.btn_radio_off_disabled_holo_light = findRatioImage(data.btn_radio_off_disabled_holo_light));\n }\n static get btn_radio_off_focused_holo_light() {\n return imageCache.btn_radio_off_focused_holo_light || (imageCache.btn_radio_off_focused_holo_light = findRatioImage(data.btn_radio_off_focused_holo_light));\n }\n static get btn_radio_off_holo_light() {\n return imageCache.btn_radio_off_holo_light || (imageCache.btn_radio_off_holo_light = findRatioImage(data.btn_radio_off_holo_light));\n }\n static get btn_radio_off_pressed_holo_light() {\n return imageCache.btn_radio_off_pressed_holo_light || (imageCache.btn_radio_off_pressed_holo_light = findRatioImage(data.btn_radio_off_pressed_holo_light));\n }\n static get btn_radio_on_disabled_focused_holo_light() {\n return imageCache.btn_radio_on_disabled_focused_holo_light || (imageCache.btn_radio_on_disabled_focused_holo_light = findRatioImage(data.btn_radio_on_disabled_focused_holo_light));\n }\n static get btn_radio_on_disabled_holo_light() {\n return imageCache.btn_radio_on_disabled_holo_light || (imageCache.btn_radio_on_disabled_holo_light = findRatioImage(data.btn_radio_on_disabled_holo_light));\n }\n static get btn_radio_on_focused_holo_light() {\n return imageCache.btn_radio_on_focused_holo_light || (imageCache.btn_radio_on_focused_holo_light = findRatioImage(data.btn_radio_on_focused_holo_light));\n }\n static get btn_radio_on_holo_light() {\n return imageCache.btn_radio_on_holo_light || (imageCache.btn_radio_on_holo_light = findRatioImage(data.btn_radio_on_holo_light));\n }\n static get btn_radio_on_pressed_holo_light() {\n return imageCache.btn_radio_on_pressed_holo_light || (imageCache.btn_radio_on_pressed_holo_light = findRatioImage(data.btn_radio_on_pressed_holo_light));\n }\n static get btn_rating_star_off_normal_holo_light() {\n return imageCache.btn_rating_star_off_normal_holo_light || (imageCache.btn_rating_star_off_normal_holo_light = findRatioImage(data.btn_rating_star_off_normal_holo_light));\n }\n static get btn_rating_star_off_pressed_holo_light() {\n return imageCache.btn_rating_star_off_pressed_holo_light || (imageCache.btn_rating_star_off_pressed_holo_light = findRatioImage(data.btn_rating_star_off_pressed_holo_light));\n }\n static get btn_rating_star_on_normal_holo_light() {\n return imageCache.btn_rating_star_on_normal_holo_light || (imageCache.btn_rating_star_on_normal_holo_light = findRatioImage(data.btn_rating_star_on_normal_holo_light));\n }\n static get btn_rating_star_on_pressed_holo_light() {\n return imageCache.btn_rating_star_on_pressed_holo_light || (imageCache.btn_rating_star_on_pressed_holo_light = findRatioImage(data.btn_rating_star_on_pressed_holo_light));\n }\n static get dropdown_background_dark() {\n return imageCache.dropdown_background_dark || (imageCache.dropdown_background_dark = findRatioImage(data.dropdown_background_dark));\n }\n static get editbox_background_focus_yellow() {\n return imageCache.editbox_background_focus_yellow || (imageCache.editbox_background_focus_yellow = findRatioImage(data.editbox_background_focus_yellow));\n }\n static get editbox_background_normal() {\n return imageCache.editbox_background_normal || (imageCache.editbox_background_normal = findRatioImage(data.editbox_background_normal));\n }\n static get ic_menu_moreoverflow_normal_holo_dark() {\n return imageCache.ic_menu_moreoverflow_normal_holo_dark || (imageCache.ic_menu_moreoverflow_normal_holo_dark = findRatioImage(data.ic_menu_moreoverflow_normal_holo_dark));\n }\n static get menu_panel_holo_dark() {\n return imageCache.menu_panel_holo_dark || (imageCache.menu_panel_holo_dark = findRatioImage(data.menu_panel_holo_dark));\n }\n static get menu_panel_holo_light() {\n return imageCache.menu_panel_holo_light || (imageCache.menu_panel_holo_light = findRatioImage(data.menu_panel_holo_light));\n }\n static get popup_bottom_bright() {\n return imageCache.popup_bottom_bright || (imageCache.popup_bottom_bright = findRatioImage(data.popup_bottom_bright));\n }\n static get popup_center_bright() {\n return imageCache.popup_center_bright || (imageCache.popup_center_bright = findRatioImage(data.popup_center_bright));\n }\n static get popup_full_bright() {\n return imageCache.popup_full_bright || (imageCache.popup_full_bright = findRatioImage(data.popup_full_bright));\n }\n static get popup_top_bright() {\n return imageCache.popup_top_bright || (imageCache.popup_top_bright = findRatioImage(data.popup_top_bright));\n }\n static get progressbar_indeterminate_holo1() {\n return imageCache.progressbar_indeterminate_holo1 || (imageCache.progressbar_indeterminate_holo1 = findRatioImage(data.progressbar_indeterminate_holo1));\n }\n static get progressbar_indeterminate_holo2() {\n return imageCache.progressbar_indeterminate_holo2 || (imageCache.progressbar_indeterminate_holo2 = findRatioImage(data.progressbar_indeterminate_holo2));\n }\n static get progressbar_indeterminate_holo3() {\n return imageCache.progressbar_indeterminate_holo3 || (imageCache.progressbar_indeterminate_holo3 = findRatioImage(data.progressbar_indeterminate_holo3));\n }\n static get progressbar_indeterminate_holo4() {\n return imageCache.progressbar_indeterminate_holo4 || (imageCache.progressbar_indeterminate_holo4 = findRatioImage(data.progressbar_indeterminate_holo4));\n }\n static get progressbar_indeterminate_holo5() {\n return imageCache.progressbar_indeterminate_holo5 || (imageCache.progressbar_indeterminate_holo5 = findRatioImage(data.progressbar_indeterminate_holo5));\n }\n static get progressbar_indeterminate_holo6() {\n return imageCache.progressbar_indeterminate_holo6 || (imageCache.progressbar_indeterminate_holo6 = findRatioImage(data.progressbar_indeterminate_holo6));\n }\n static get progressbar_indeterminate_holo7() {\n return imageCache.progressbar_indeterminate_holo7 || (imageCache.progressbar_indeterminate_holo7 = findRatioImage(data.progressbar_indeterminate_holo7));\n }\n static get progressbar_indeterminate_holo8() {\n return imageCache.progressbar_indeterminate_holo8 || (imageCache.progressbar_indeterminate_holo8 = findRatioImage(data.progressbar_indeterminate_holo8));\n }\n static get rate_star_big_half_holo_light() {\n return imageCache.rate_star_big_half_holo_light || (imageCache.rate_star_big_half_holo_light = findRatioImage(data.rate_star_big_half_holo_light));\n }\n static get rate_star_big_off_holo_light() {\n return imageCache.rate_star_big_off_holo_light || (imageCache.rate_star_big_off_holo_light = findRatioImage(data.rate_star_big_off_holo_light));\n }\n static get rate_star_big_on_holo_light() {\n return imageCache.rate_star_big_on_holo_light || (imageCache.rate_star_big_on_holo_light = findRatioImage(data.rate_star_big_on_holo_light));\n }\n static get scrubber_control_disabled_holo() {\n return imageCache.scrubber_control_disabled_holo || (imageCache.scrubber_control_disabled_holo = findRatioImage(data.scrubber_control_disabled_holo));\n }\n static get scrubber_control_focused_holo() {\n return imageCache.scrubber_control_focused_holo || (imageCache.scrubber_control_focused_holo = findRatioImage(data.scrubber_control_focused_holo));\n }\n static get scrubber_control_normal_holo() {\n return imageCache.scrubber_control_normal_holo || (imageCache.scrubber_control_normal_holo = findRatioImage(data.scrubber_control_normal_holo));\n }\n static get scrubber_control_pressed_holo() {\n return imageCache.scrubber_control_pressed_holo || (imageCache.scrubber_control_pressed_holo = findRatioImage(data.scrubber_control_pressed_holo));\n }\n static get spinner_76_inner_holo() {\n return imageCache.spinner_76_inner_holo || (imageCache.spinner_76_inner_holo = findRatioImage(data.spinner_76_inner_holo));\n }\n static get spinner_76_outer_holo() {\n return imageCache.spinner_76_outer_holo || (imageCache.spinner_76_outer_holo = findRatioImage(data.spinner_76_outer_holo));\n }\n }\n R.image_base64 = image_base64;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var NetDrawable = androidui.image.NetDrawable;\n var ChangeImageSizeDrawable = androidui.image.ChangeImageSizeDrawable;\n var NinePatchDrawable = androidui.image.NinePatchDrawable;\n const density = android.content.res.Resources.getDisplayMetrics().density;\n class image {\n static get actionbar_ic_back_white() { return new NetDrawable(R.image_base64.actionbar_ic_back_white); }\n static get btn_check_off_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_disabled_focused_holo_light); }\n static get btn_check_off_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_disabled_holo_light); }\n static get btn_check_off_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_focused_holo_light); }\n static get btn_check_off_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_holo_light); }\n static get btn_check_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_pressed_holo_light); }\n static get btn_check_on_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_disabled_focused_holo_light); }\n static get btn_check_on_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_disabled_holo_light); }\n static get btn_check_on_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_focused_holo_light); }\n static get btn_check_on_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_holo_light); }\n static get btn_check_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_pressed_holo_light); }\n static get btn_default_disabled_focused_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_disabled_focused_holo_light); }\n static get btn_default_disabled_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_disabled_holo_light); }\n static get btn_default_focused_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_focused_holo_light); }\n static get btn_default_normal_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_normal_holo_light); }\n static get btn_default_pressed_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_pressed_holo_light); }\n static get btn_radio_off_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_disabled_focused_holo_light); }\n static get btn_radio_off_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_disabled_holo_light); }\n static get btn_radio_off_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_focused_holo_light); }\n static get btn_radio_off_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_holo_light); }\n static get btn_radio_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_pressed_holo_light); }\n static get btn_radio_on_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_disabled_focused_holo_light); }\n static get btn_radio_on_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_disabled_holo_light); }\n static get btn_radio_on_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_focused_holo_light); }\n static get btn_radio_on_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_holo_light); }\n static get btn_radio_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_pressed_holo_light); }\n static get btn_rating_star_off_normal_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_off_normal_holo_light); }\n static get btn_rating_star_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_off_pressed_holo_light); }\n static get btn_rating_star_on_normal_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_on_normal_holo_light); }\n static get btn_rating_star_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_on_pressed_holo_light); }\n static get dropdown_background_dark() { return new NinePatchDrawable(R.image_base64.dropdown_background_dark); }\n static get editbox_background_focus_yellow() { return new NinePatchDrawable(R.image_base64.editbox_background_focus_yellow); }\n static get editbox_background_normal() { return new NinePatchDrawable(R.image_base64.editbox_background_normal); }\n static get ic_menu_moreoverflow_normal_holo_dark() { return new NetDrawable(R.image_base64.ic_menu_moreoverflow_normal_holo_dark); }\n static get menu_panel_holo_dark() { return new NinePatchDrawable(R.image_base64.menu_panel_holo_dark); }\n static get menu_panel_holo_light() { return new NinePatchDrawable(R.image_base64.menu_panel_holo_light); }\n static get popup_bottom_bright() { return new NinePatchDrawable(R.image_base64.popup_bottom_bright); }\n static get popup_center_bright() { return new NinePatchDrawable(R.image_base64.popup_center_bright); }\n static get popup_full_bright() { return new NinePatchDrawable(R.image_base64.popup_full_bright); }\n static get popup_top_bright() { return new NinePatchDrawable(R.image_base64.popup_top_bright); }\n static get progressbar_indeterminate_holo1() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo1); }\n static get progressbar_indeterminate_holo2() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo2); }\n static get progressbar_indeterminate_holo3() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo3); }\n static get progressbar_indeterminate_holo4() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo4); }\n static get progressbar_indeterminate_holo5() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo5); }\n static get progressbar_indeterminate_holo6() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo6); }\n static get progressbar_indeterminate_holo7() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo7); }\n static get progressbar_indeterminate_holo8() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo8); }\n static get rate_star_big_half_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_half_holo_light); }\n static get rate_star_big_off_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_off_holo_light); }\n static get rate_star_big_on_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_on_holo_light); }\n static get scrubber_control_disabled_holo() { return new NetDrawable(R.image_base64.scrubber_control_disabled_holo); }\n static get scrubber_control_focused_holo() { return new NetDrawable(R.image_base64.scrubber_control_focused_holo); }\n static get scrubber_control_normal_holo() { return new NetDrawable(R.image_base64.scrubber_control_normal_holo); }\n static get scrubber_control_pressed_holo() { return new NetDrawable(R.image_base64.scrubber_control_pressed_holo); }\n static get spinner_76_inner_holo() { return new NetDrawable(R.image_base64.spinner_76_inner_holo); }\n static get spinner_76_outer_holo() { return new NetDrawable(R.image_base64.spinner_76_outer_holo); }\n static get spinner_48_outer_holo() { return new ChangeImageSizeDrawable(image.spinner_76_outer_holo, 48 * density, 48 * density); }\n static get spinner_48_inner_holo() { return new ChangeImageSizeDrawable(image.spinner_76_inner_holo, 48 * density, 48 * density); }\n static get spinner_16_outer_holo() { return new ChangeImageSizeDrawable(image.spinner_76_outer_holo, 16 * density, 16 * density); }\n static get spinner_16_inner_holo() { return new ChangeImageSizeDrawable(image.spinner_76_inner_holo, 16 * density, 16 * density); }\n static get rate_star_small_off_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_half_holo_light, 16 * density, 16 * density); }\n static get rate_star_small_half_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_off_holo_light, 16 * density, 16 * density); }\n static get rate_star_small_on_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_on_holo_light, 16 * density, 16 * density); }\n }\n R.image = image;\n R.image_base64.actionbar_ic_back_white;\n R.image_base64.btn_default_normal_holo_light;\n R.image_base64.dropdown_background_dark;\n R.image_base64.editbox_background_normal;\n R.image_base64.ic_menu_moreoverflow_normal_holo_dark;\n R.image_base64.menu_panel_holo_dark;\n R.image_base64.menu_panel_holo_light;\n R.image_base64.popup_bottom_bright;\n R.image_base64.popup_center_bright;\n R.image_base64.popup_full_bright;\n R.image_base64.popup_top_bright;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var ColorStateList = android.content.res.ColorStateList;\n var Color = android.graphics.Color;\n class color {\n static get textView_textColor() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0xffc0c0c0, 0xff333333];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n static get primary_text_light_disable_only() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0x80000000, 0xff000000];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n static get primary_text_dark_disable_only() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0x80000000, 0xffffffff];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n }\n color.white = Color.WHITE;\n color.black = Color.BLACK;\n color.transparent = Color.TRANSPARENT;\n R.color = color;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar goog;\n(function (goog) {\n var math;\n (function (math) {\n class Long {\n constructor(low, high) {\n this.low_ = low | 0;\n this.high_ = high | 0;\n }\n toInt() {\n return this.low_;\n }\n toNumber() {\n return this.high_ * Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned();\n }\n toString(opt_radix) {\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n if (this.isZero()) {\n return '0';\n }\n if (this.isNegative()) {\n if (this.equals(Long.MIN_VALUE)) {\n var radixLong = Long.fromNumber(radix);\n var div = this.div(radixLong);\n let rem = div.multiply(radixLong).subtract(this);\n return div.toString(radix) + rem.toInt().toString(radix);\n }\n else {\n return '-' + this.negate().toString(radix);\n }\n }\n var radixToPower = Long.fromNumber(Math.pow(radix, 6));\n let rem = this;\n var result = '';\n while (true) {\n var remDiv = rem.div(radixToPower);\n var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();\n var digits = intval.toString(radix);\n rem = remDiv;\n if (rem.isZero()) {\n return digits + result;\n }\n else {\n while (digits.length < 6) {\n digits = '0' + digits;\n }\n result = '' + digits + result;\n }\n }\n }\n getHighBits() {\n return this.high_;\n }\n getLowBits() {\n return this.low_;\n }\n getLowBitsUnsigned() {\n return (this.low_ >= 0) ? this.low_ : Long.TWO_PWR_32_DBL_ + this.low_;\n }\n getNumBitsAbs() {\n if (this.isNegative()) {\n if (this.equals(Long.MIN_VALUE)) {\n return 64;\n }\n else {\n return this.negate().getNumBitsAbs();\n }\n }\n else {\n var val = this.high_ != 0 ? this.high_ : this.low_;\n for (var bit = 31; bit > 0; bit--) {\n if ((val & (1 << bit)) != 0) {\n break;\n }\n }\n return this.high_ != 0 ? bit + 33 : bit + 1;\n }\n }\n isZero() {\n return this.high_ == 0 && this.low_ == 0;\n }\n isNegative() {\n return this.high_ < 0;\n }\n isOdd() {\n return (this.low_ & 1) == 1;\n }\n equals(other) {\n return (this.high_ == other.high_) && (this.low_ == other.low_);\n }\n notEquals(other) {\n return (this.high_ != other.high_) || (this.low_ != other.low_);\n }\n lessThan(other) {\n return this.compare(other) < 0;\n }\n lessThanOrEqual(other) {\n return this.compare(other) <= 0;\n }\n greaterThan(other) {\n return this.compare(other) > 0;\n }\n greaterThanOrEqual(other) {\n return this.compare(other) >= 0;\n }\n compare(other) {\n if (this.equals(other)) {\n return 0;\n }\n var thisNeg = this.isNegative();\n var otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) {\n return -1;\n }\n if (!thisNeg && otherNeg) {\n return 1;\n }\n if (this.subtract(other).isNegative()) {\n return -1;\n }\n else {\n return 1;\n }\n }\n negate() {\n if (this.equals(Long.MIN_VALUE)) {\n return Long.MIN_VALUE;\n }\n else {\n return this.not().add(Long.ONE);\n }\n }\n add(other) {\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(other) {\n if (this.isZero()) {\n return Long.ZERO;\n }\n else if (other.isZero()) {\n return Long.ZERO;\n }\n if (this.equals(Long.MIN_VALUE)) {\n return other.isOdd() ? Long.MIN_VALUE : Long.ZERO;\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;\n }\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().multiply(other.negate());\n }\n else {\n return this.negate().multiply(other).negate();\n }\n }\n else if (other.isNegative()) {\n return this.multiply(other.negate()).negate();\n }\n if (this.lessThan(Long.TWO_PWR_24_) &&\n other.lessThan(Long.TWO_PWR_24_)) {\n return Long.fromNumber(this.toNumber() * other.toNumber());\n }\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n }\n div(other) {\n if (other.isZero()) {\n throw Error('division by zero');\n }\n else if (this.isZero()) {\n return Long.ZERO;\n }\n if (this.equals(Long.MIN_VALUE)) {\n if (other.equals(Long.ONE) ||\n other.equals(Long.NEG_ONE)) {\n return Long.MIN_VALUE;\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return Long.ONE;\n }\n else {\n var halfThis = this.shiftRight(1);\n let approx = halfThis.div(other).shiftLeft(1);\n if (approx.equals(Long.ZERO)) {\n return other.isNegative() ? Long.ONE : Long.NEG_ONE;\n }\n else {\n let rem = this.subtract(other.multiply(approx));\n var result = approx.add(rem.div(other));\n return result;\n }\n }\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return Long.ZERO;\n }\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().div(other.negate());\n }\n else {\n return this.negate().div(other).negate();\n }\n }\n else if (other.isNegative()) {\n return this.div(other.negate()).negate();\n }\n var res = Long.ZERO;\n let rem = this;\n while (rem.greaterThanOrEqual(other)) {\n let approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));\n var log2 = Math.ceil(Math.log(approx) / Math.LN2);\n var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);\n var approxRes = Long.fromNumber(approx);\n var approxRem = approxRes.multiply(other);\n while (approxRem.isNegative() || approxRem.greaterThan(rem)) {\n approx -= delta;\n approxRes = Long.fromNumber(approx);\n approxRem = approxRes.multiply(other);\n }\n if (approxRes.isZero()) {\n approxRes = Long.ONE;\n }\n res = res.add(approxRes);\n rem = rem.subtract(approxRem);\n }\n return res;\n }\n modulo(other) {\n return this.subtract(this.div(other).multiply(other));\n }\n not() {\n return Long.fromBits(~this.low_, ~this.high_);\n }\n and(other) {\n return Long.fromBits(this.low_ & other.low_, this.high_ & other.high_);\n }\n or(other) {\n return Long.fromBits(this.low_ | other.low_, this.high_ | other.high_);\n }\n xor(other) {\n return Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_);\n }\n shiftLeft(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var low = this.low_;\n if (numBits < 32) {\n var high = this.high_;\n return Long.fromBits(low << numBits, (high << numBits) | (low >>> (32 - numBits)));\n }\n else {\n return Long.fromBits(0, low << (numBits - 32));\n }\n }\n }\n shiftRight(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >> numBits);\n }\n else {\n return Long.fromBits(high >> (numBits - 32), high >= 0 ? 0 : -1);\n }\n }\n }\n shiftRightUnsigned(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits);\n }\n else if (numBits == 32) {\n return Long.fromBits(high, 0);\n }\n else {\n return Long.fromBits(high >>> (numBits - 32), 0);\n }\n }\n }\n static fromInt(value) {\n if (-128 <= value && value < 128) {\n var cachedObj = Long.IntCache_[value];\n if (cachedObj) {\n return cachedObj;\n }\n }\n var obj = new Long(value | 0, value < 0 ? -1 : 0);\n if (-128 <= value && value < 128) {\n Long.IntCache_[value] = obj;\n }\n return obj;\n }\n static fromNumber(value) {\n if (isNaN(value) || !isFinite(value)) {\n return Long.ZERO;\n }\n else if (value <= -Long.TWO_PWR_63_DBL_) {\n return Long.MIN_VALUE;\n }\n else if (value + 1 >= Long.TWO_PWR_63_DBL_) {\n return Long.MAX_VALUE;\n }\n else if (value < 0) {\n return Long.fromNumber(-value).negate();\n }\n else {\n return new Long((value % Long.TWO_PWR_32_DBL_) | 0, (value / Long.TWO_PWR_32_DBL_) | 0);\n }\n }\n static fromBits(lowBits, highBits) {\n return new Long(lowBits, highBits);\n }\n static fromString(str, opt_radix) {\n if (str.length == 0) {\n throw Error('number format error: empty string');\n }\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n if (str.charAt(0) == '-') {\n return Long.fromString(str.substring(1), radix).negate();\n }\n else if (str.indexOf('-') >= 0) {\n throw Error('number format error: interior \"-\" character: ' + str);\n }\n var radixToPower = Long.fromNumber(Math.pow(radix, 8));\n var result = Long.ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i);\n var value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = Long.fromNumber(Math.pow(radix, size));\n result = result.multiply(power).add(Long.fromNumber(value));\n }\n else {\n result = result.multiply(radixToPower);\n result = result.add(Long.fromNumber(value));\n }\n }\n return result;\n }\n }\n Long.IntCache_ = {};\n Long.TWO_PWR_16_DBL_ = 1 << 16;\n Long.TWO_PWR_24_DBL_ = 1 << 24;\n Long.TWO_PWR_32_DBL_ = Long.TWO_PWR_16_DBL_ * Long.TWO_PWR_16_DBL_;\n Long.TWO_PWR_31_DBL_ = Long.TWO_PWR_32_DBL_ / 2;\n Long.TWO_PWR_48_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_16_DBL_;\n Long.TWO_PWR_64_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_32_DBL_;\n Long.TWO_PWR_63_DBL_ = Long.TWO_PWR_64_DBL_ / 2;\n Long.TWO_PWR_24_ = Long.fromInt(1 << 24);\n Long.ZERO = Long.fromInt(0);\n Long.ONE = Long.fromInt(1);\n Long.NEG_ONE = Long.fromInt(-1);\n Long.MAX_VALUE = Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);\n Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0);\n math.Long = Long;\n })(math = goog.math || (goog.math = {}));\n})(goog || (goog = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Long {\n }\n Long.MIN_VALUE = goog.math.Long.MIN_VALUE.toNumber();\n Long.MAX_VALUE = goog.math.Long.MAX_VALUE.toNumber();\n lang.Long = Long;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AccelerateDecelerateInterpolator {\n getInterpolation(input) {\n return (Math.cos((input + 1) * Math.PI) / 2) + 0.5;\n }\n }\n animation.AccelerateDecelerateInterpolator = AccelerateDecelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class DecelerateInterpolator {\n constructor(factor = 1) {\n this.mFactor = factor;\n }\n getInterpolation(input) {\n let result;\n if (this.mFactor == 1.0) {\n result = (1.0 - (1.0 - input) * (1.0 - input));\n }\n else {\n result = (1.0 - Math.pow((1.0 - input), 2 * this.mFactor));\n }\n return result;\n }\n }\n animation.DecelerateInterpolator = DecelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Matrix = android.graphics.Matrix;\n var StringBuilder = java.lang.StringBuilder;\n class Transformation {\n constructor() {\n this.mAlpha = 0;\n this.mTransformationType = 0;\n this.clear();\n }\n clear() {\n if (this.mMatrix == null) {\n this.mMatrix = new Matrix();\n }\n else {\n this.mMatrix.reset();\n }\n this.mAlpha = 1.0;\n this.mTransformationType = Transformation.TYPE_BOTH;\n }\n getTransformationType() {\n return this.mTransformationType;\n }\n setTransformationType(transformationType) {\n this.mTransformationType = transformationType;\n }\n set(t) {\n this.mAlpha = t.getAlpha();\n this.mMatrix.set(t.getMatrix());\n this.mTransformationType = t.getTransformationType();\n }\n compose(t) {\n this.mAlpha *= t.getAlpha();\n this.mMatrix.preConcat(t.getMatrix());\n }\n postCompose(t) {\n this.mAlpha *= t.getAlpha();\n this.mMatrix.postConcat(t.getMatrix());\n }\n getMatrix() {\n return this.mMatrix;\n }\n setAlpha(alpha) {\n this.mAlpha = alpha;\n }\n getAlpha() {\n return this.mAlpha;\n }\n toString() {\n let sb = new StringBuilder(64);\n sb.append(\"Transformation\");\n this.toShortString(sb);\n return sb.toString();\n }\n toShortString(sb) {\n sb = sb || new StringBuilder(64);\n sb.append(\"{alpha=\");\n sb.append(this.mAlpha);\n sb.append(\" matrix=\");\n this.mMatrix.toShortString(sb);\n sb.append('}');\n }\n }\n Transformation.TYPE_IDENTITY = 0x0;\n Transformation.TYPE_ALPHA = 0x1;\n Transformation.TYPE_MATRIX = 0x2;\n Transformation.TYPE_BOTH = Transformation.TYPE_ALPHA | Transformation.TYPE_MATRIX;\n animation.Transformation = Transformation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation_1) {\n var RectF = android.graphics.RectF;\n var TypedValue = android.util.TypedValue;\n var Long = java.lang.Long;\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var Transformation = android.view.animation.Transformation;\n class Animation {\n constructor() {\n this.mEnded = false;\n this.mStarted = false;\n this.mCycleFlip = false;\n this.mInitialized = false;\n this.mFillBefore = true;\n this.mFillAfter = false;\n this.mFillEnabled = false;\n this.mStartTime = -1;\n this.mStartOffset = 0;\n this.mDuration = 0;\n this.mRepeatCount = 0;\n this.mRepeated = 0;\n this.mRepeatMode = Animation.RESTART;\n this.mZAdjustment = 0;\n this.mBackgroundColor = 0;\n this.mScaleFactor = 1;\n this.mDetachWallpaper = false;\n this.mMore = true;\n this.mOneMoreTime = true;\n this.mPreviousRegion = new RectF();\n this.mRegion = new RectF();\n this.mTransformation = new Transformation();\n this.mPreviousTransformation = new Transformation();\n this.ensureInterpolator();\n }\n reset() {\n this.mPreviousRegion.setEmpty();\n this.mPreviousTransformation.clear();\n this.mInitialized = false;\n this.mCycleFlip = false;\n this.mRepeated = 0;\n this.mMore = true;\n this.mOneMoreTime = true;\n this.mListenerHandler = null;\n }\n cancel() {\n if (this.mStarted && !this.mEnded) {\n this.fireAnimationEnd();\n this.mEnded = true;\n }\n this.mStartTime = Long.MIN_VALUE;\n this.mMore = this.mOneMoreTime = false;\n }\n detach() {\n if (this.mStarted && !this.mEnded) {\n this.mEnded = true;\n this.fireAnimationEnd();\n }\n }\n isInitialized() {\n return this.mInitialized;\n }\n initialize(width, height, parentWidth, parentHeight) {\n this.reset();\n this.mInitialized = true;\n }\n setListenerHandler(handler) {\n if (this.mListenerHandler == null) {\n const _this = this;\n this.mOnStart = {\n run() {\n if (_this.mListener != null) {\n _this.mListener.onAnimationStart(_this);\n }\n }\n };\n this.mOnRepeat = {\n run() {\n if (_this.mListener != null) {\n _this.mListener.onAnimationRepeat(_this);\n }\n }\n };\n this.mOnEnd = {\n run() {\n if (_this.mListener != null) {\n _this.mListener.onAnimationEnd(_this);\n }\n }\n };\n }\n this.mListenerHandler = handler;\n }\n setInterpolator(i) {\n this.mInterpolator = i;\n }\n setStartOffset(startOffset) {\n this.mStartOffset = startOffset;\n }\n setDuration(durationMillis) {\n if (durationMillis < 0) {\n throw Error(`new IllegalArgumentException(\"Animation duration cannot be negative\")`);\n }\n this.mDuration = durationMillis;\n }\n restrictDuration(durationMillis) {\n if (this.mStartOffset > durationMillis) {\n this.mStartOffset = durationMillis;\n this.mDuration = 0;\n this.mRepeatCount = 0;\n return;\n }\n let dur = this.mDuration + this.mStartOffset;\n if (dur > durationMillis) {\n this.mDuration = durationMillis - this.mStartOffset;\n dur = durationMillis;\n }\n if (this.mDuration <= 0) {\n this.mDuration = 0;\n this.mRepeatCount = 0;\n return;\n }\n if (this.mRepeatCount < 0 || this.mRepeatCount > durationMillis || (dur * this.mRepeatCount) > durationMillis) {\n this.mRepeatCount = Math.floor((durationMillis / dur)) - 1;\n if (this.mRepeatCount < 0) {\n this.mRepeatCount = 0;\n }\n }\n }\n scaleCurrentDuration(scale) {\n this.mDuration = Math.floor((this.mDuration * scale));\n this.mStartOffset = Math.floor((this.mStartOffset * scale));\n }\n setStartTime(startTimeMillis) {\n this.mStartTime = startTimeMillis;\n this.mStarted = this.mEnded = false;\n this.mCycleFlip = false;\n this.mRepeated = 0;\n this.mMore = true;\n }\n start() {\n this.setStartTime(-1);\n }\n startNow() {\n this.setStartTime(AnimationUtils.currentAnimationTimeMillis());\n }\n setRepeatMode(repeatMode) {\n this.mRepeatMode = repeatMode;\n }\n setRepeatCount(repeatCount) {\n if (repeatCount < 0) {\n repeatCount = Animation.INFINITE;\n }\n this.mRepeatCount = repeatCount;\n }\n isFillEnabled() {\n return this.mFillEnabled;\n }\n setFillEnabled(fillEnabled) {\n this.mFillEnabled = fillEnabled;\n }\n setFillBefore(fillBefore) {\n this.mFillBefore = fillBefore;\n }\n setFillAfter(fillAfter) {\n this.mFillAfter = fillAfter;\n }\n setZAdjustment(zAdjustment) {\n this.mZAdjustment = zAdjustment;\n }\n setBackgroundColor(bg) {\n this.mBackgroundColor = bg;\n }\n getScaleFactor() {\n return this.mScaleFactor;\n }\n setDetachWallpaper(detachWallpaper) {\n this.mDetachWallpaper = detachWallpaper;\n }\n getInterpolator() {\n return this.mInterpolator;\n }\n getStartTime() {\n return this.mStartTime;\n }\n getDuration() {\n return this.mDuration;\n }\n getStartOffset() {\n return this.mStartOffset;\n }\n getRepeatMode() {\n return this.mRepeatMode;\n }\n getRepeatCount() {\n return this.mRepeatCount;\n }\n getFillBefore() {\n return this.mFillBefore;\n }\n getFillAfter() {\n return this.mFillAfter;\n }\n getZAdjustment() {\n return this.mZAdjustment;\n }\n getBackgroundColor() {\n return this.mBackgroundColor;\n }\n getDetachWallpaper() {\n return this.mDetachWallpaper;\n }\n willChangeTransformationMatrix() {\n return true;\n }\n willChangeBounds() {\n return true;\n }\n setAnimationListener(listener) {\n this.mListener = listener;\n }\n ensureInterpolator() {\n if (this.mInterpolator == null) {\n this.mInterpolator = new AccelerateDecelerateInterpolator();\n }\n }\n computeDurationHint() {\n return (this.getStartOffset() + this.getDuration()) * (this.getRepeatCount() + 1);\n }\n getTransformation(currentTime, outTransformation, scale) {\n if (scale != null)\n this.mScaleFactor = scale;\n if (this.mStartTime == -1) {\n this.mStartTime = currentTime;\n }\n const startOffset = this.getStartOffset();\n const duration = this.mDuration;\n let normalizedTime;\n if (duration != 0) {\n normalizedTime = (currentTime - (this.mStartTime + startOffset)) / duration;\n }\n else {\n normalizedTime = currentTime < this.mStartTime ? 0.0 : 1.0;\n }\n const expired = normalizedTime >= 1.0;\n this.mMore = !expired;\n if (!this.mFillEnabled)\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n if ((normalizedTime >= 0.0 || this.mFillBefore) && (normalizedTime <= 1.0 || this.mFillAfter)) {\n if (!this.mStarted) {\n this.fireAnimationStart();\n this.mStarted = true;\n }\n if (this.mFillEnabled)\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n if (this.mCycleFlip) {\n normalizedTime = 1.0 - normalizedTime;\n }\n const interpolatedTime = this.mInterpolator.getInterpolation(normalizedTime);\n this.applyTransformation(interpolatedTime, outTransformation);\n }\n if (expired) {\n if (this.mRepeatCount == this.mRepeated) {\n if (!this.mEnded) {\n this.mEnded = true;\n this.fireAnimationEnd();\n }\n }\n else {\n if (this.mRepeatCount > 0) {\n this.mRepeated++;\n }\n if (this.mRepeatMode == Animation.REVERSE) {\n this.mCycleFlip = !this.mCycleFlip;\n }\n this.mStartTime = -1;\n this.mMore = true;\n this.fireAnimationRepeat();\n }\n }\n if (!this.mMore && this.mOneMoreTime) {\n this.mOneMoreTime = false;\n return true;\n }\n return this.mMore;\n }\n fireAnimationStart() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationStart(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnStart);\n }\n }\n fireAnimationRepeat() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationRepeat(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnRepeat);\n }\n }\n fireAnimationEnd() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationEnd(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnEnd);\n }\n }\n hasStarted() {\n return this.mStarted;\n }\n hasEnded() {\n return this.mEnded;\n }\n applyTransformation(interpolatedTime, t) {\n }\n resolveSize(type, value, size, parentSize) {\n switch (type) {\n case Animation.ABSOLUTE:\n return value;\n case Animation.RELATIVE_TO_SELF:\n return size * value;\n case Animation.RELATIVE_TO_PARENT:\n return parentSize * value;\n default:\n return value;\n }\n }\n getInvalidateRegion(left, top, right, bottom, invalidate, transformation) {\n const tempRegion = this.mRegion;\n const previousRegion = this.mPreviousRegion;\n invalidate.set(left, top, right, bottom);\n transformation.getMatrix().mapRect(invalidate);\n invalidate.inset(-1.0, -1.0);\n tempRegion.set(invalidate);\n invalidate.union(previousRegion);\n previousRegion.set(tempRegion);\n const tempTransformation = this.mTransformation;\n const previousTransformation = this.mPreviousTransformation;\n tempTransformation.set(transformation);\n transformation.set(previousTransformation);\n previousTransformation.set(tempTransformation);\n }\n initializeInvalidateRegion(left, top, right, bottom) {\n const region = this.mPreviousRegion;\n region.set(left, top, right, bottom);\n region.inset(-1.0, -1.0);\n if (this.mFillBefore) {\n const previousTransformation = this.mPreviousTransformation;\n this.applyTransformation(this.mInterpolator.getInterpolation(0.0), previousTransformation);\n }\n }\n hasAlpha() {\n return false;\n }\n }\n Animation.INFINITE = -1;\n Animation.RESTART = 1;\n Animation.REVERSE = 2;\n Animation.START_ON_FIRST_FRAME = -1;\n Animation.ABSOLUTE = 0;\n Animation.RELATIVE_TO_SELF = 1;\n Animation.RELATIVE_TO_PARENT = 2;\n Animation.ZORDER_NORMAL = 0;\n Animation.ZORDER_TOP = 1;\n Animation.ZORDER_BOTTOM = -1;\n Animation.USE_CLOSEGUARD = false;\n animation_1.Animation = Animation;\n (function (Animation) {\n class Description {\n constructor() {\n this.type = 0;\n this.value = 0;\n }\n static parseValue(value) {\n let d = new Description();\n if (value == null) {\n d.type = Animation.ABSOLUTE;\n d.value = 0;\n }\n else {\n if (value.endsWith('%p')) {\n d.type = Animation.RELATIVE_TO_PARENT;\n d.value = Number.parseFloat(value.substring(0, value.length - 2));\n }\n else if (value.endsWith('%')) {\n d.type = Animation.RELATIVE_TO_SELF;\n d.value = Number.parseFloat(value.substring(0, value.length - 1));\n }\n else {\n d.type = Animation.ABSOLUTE;\n d.value = TypedValue.complexToDimensionPixelSize(value);\n }\n }\n d.type = Animation.ABSOLUTE;\n d.value = 0.0;\n return d;\n }\n }\n Animation.Description = Description;\n })(Animation = animation_1.Animation || (animation_1.Animation = {}));\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var Gravity = android.view.Gravity;\n var Color = android.graphics.Color;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var StateListDrawable = android.graphics.drawable.StateListDrawable;\n class attr {\n static get viewStyle() {\n return attr._viewStyle;\n }\n static get textViewStyle() {\n return {\n textSize: '14sp',\n layerType: 'software',\n textColor: R.color.textView_textColor,\n textColorHint: 0xff808080\n };\n }\n static get buttonStyle() {\n return Object.assign(attr.textViewStyle, {\n background: R.drawable.btn_default,\n focusable: true,\n clickable: true,\n minHeight: '48dp',\n minWidth: '64dp',\n textSize: '18sp',\n gravity: Gravity.CENTER\n });\n }\n static get editTextStyle() {\n return Object.assign(attr.textViewStyle, {\n background: R.drawable.editbox_background,\n focusable: true,\n focusableInTouchMode: true,\n clickable: true,\n textSize: '18sp',\n gravity: Gravity.CENTER_VERTICAL\n });\n }\n static get imageButtonStyle() {\n return {\n background: R.drawable.btn_default,\n focusable: true,\n clickable: true,\n gravity: Gravity.CENTER\n };\n }\n static get checkboxStyle() {\n return Object.assign(this.buttonStyle, {\n background: null,\n button: R.drawable.btn_check\n });\n }\n static get radiobuttonStyle() {\n return Object.assign(this.buttonStyle, {\n background: null,\n button: R.drawable.btn_radio\n });\n }\n static get checkedTextViewStyle() {\n return {\n textAlignment: 'viewStart'\n };\n }\n static get progressBarStyle() {\n return {\n indeterminateOnly: true,\n indeterminateDrawable: R.drawable.progress_medium_holo,\n indeterminateBehavior: 'repeat',\n indeterminateDuration: 3500,\n minWidth: '48dp',\n maxWidth: '48dp',\n minHeight: '48dp',\n maxHeight: '48dp',\n mirrorForRtl: false,\n };\n }\n static get progressBarStyleHorizontal() {\n return {\n indeterminateOnly: false,\n progressDrawable: R.drawable.progress_horizontal_holo,\n indeterminateDrawable: R.drawable.progress_indeterminate_horizontal_holo,\n indeterminateBehavior: 'repeat',\n indeterminateDuration: 3500,\n minHeight: '20dp',\n maxHeight: '20dp',\n mirrorForRtl: true,\n };\n }\n static get progressBarStyleSmall() {\n return Object.assign(this.progressBarStyle, {\n indeterminateDrawable: R.drawable.progress_small_holo,\n minWidth: '16dp',\n maxWidth: '16dp',\n minHeight: '16dp',\n maxHeight: '16dp'\n });\n }\n static get progressBarStyleLarge() {\n return Object.assign(this.progressBarStyle, {\n indeterminateDrawable: R.drawable.progress_large_holo,\n minWidth: '76dp',\n maxWidth: '76dp',\n minHeight: '76dp',\n maxHeight: '76dp'\n });\n }\n static get seekBarStyle() {\n return {\n indeterminateOnly: false,\n progressDrawable: R.drawable.scrubber_progress_horizontal_holo_light,\n indeterminateDrawable: R.drawable.scrubber_progress_horizontal_holo_light,\n minHeight: '13dp',\n maxHeight: '13dp',\n thumb: R.drawable.scrubber_control_selector_holo,\n thumbOffset: '16dp',\n focusable: true,\n paddingLeft: '16dp',\n paddingRight: '16dp',\n mirrorForRtl: true,\n };\n }\n static get ratingBarStyle() {\n return {\n indeterminateOnly: false,\n progressDrawable: R.drawable.ratingbar_full_holo_light,\n indeterminateDrawable: R.drawable.ratingbar_full_holo_light,\n minHeight: '48dip',\n maxHeight: '48dip',\n numStars: '5',\n stepSize: '0.5',\n thumb: null,\n mirrorForRtl: true,\n };\n }\n static get ratingBarStyleIndicator() {\n return Object.assign(this.ratingBarStyle, {\n indeterminateOnly: false,\n progressDrawable: R.drawable.ratingbar_holo_light,\n indeterminateDrawable: R.drawable.ratingbar_holo_light,\n minHeight: '35dip',\n maxHeight: '35dip',\n thumb: null,\n isIndicator: true,\n });\n }\n static get ratingBarStyleSmall() {\n return Object.assign(this.ratingBarStyle, {\n indeterminateOnly: false,\n progressDrawable: R.drawable.ratingbar_small_holo_light,\n indeterminateDrawable: R.drawable.ratingbar_small_holo_light,\n minHeight: '16dip',\n maxHeight: '16dip',\n thumb: null,\n isIndicator: true,\n });\n }\n static get gridViewStyle() {\n return {\n listSelector: android.R.drawable.list_selector_background,\n numColumns: 1\n };\n }\n static get listViewStyle() {\n return {\n divider: android.R.drawable.list_divider,\n listSelector: android.R.drawable.list_selector_background,\n dividerHeight: 1\n };\n }\n static get expandableListViewStyle() {\n return Object.assign(this.listViewStyle, {\n childDivider: android.R.drawable.list_divider,\n });\n }\n static get numberPickerStyle() {\n return {\n orientation: 'vertical',\n solidColor: 'transparent',\n selectionDivider: new ColorDrawable(0xcc33b5e5),\n selectionDividerHeight: '2dp',\n selectionDividersDistance: '48dp',\n internalMinWidth: '64dp',\n internalMaxHeight: '180dp',\n virtualButtonPressedDrawable: (() => {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x44888888));\n stateList.addState([android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x44888888));\n stateList.addState([], new ColorDrawable(Color.TRANSPARENT));\n return stateList;\n })(),\n };\n }\n static get popupWindowStyle() {\n return {\n popupBackground: R.image.dropdown_background_dark,\n popupEnterAnimation: R.anim.grow_fade_in_center,\n popupExitAnimation: R.anim.shrink_fade_out_center,\n };\n }\n static get listPopupWindowStyle() {\n return {\n popupBackground: R.image.menu_panel_holo_light,\n popupEnterAnimation: R.anim.grow_fade_in_center,\n popupExitAnimation: R.anim.shrink_fade_out_center,\n };\n }\n static get popupMenuStyle() {\n return {\n popupBackground: R.image.menu_panel_holo_dark\n };\n }\n static get dropDownListViewStyle() {\n return this.listViewStyle;\n }\n static get spinnerStyle() {\n return {\n clickable: true,\n spinnerMode: 'dropdown',\n gravity: Gravity.START | Gravity.CENTER_VERTICAL,\n disableChildrenWhenDisabled: true,\n background: R.drawable.btn_default,\n popupBackground: R.image.menu_panel_holo_light,\n dropDownVerticalOffset: '0dp',\n dropDownHorizontalOffset: '0dp',\n dropDownWidth: -2,\n };\n }\n static get actionBarStyle() {\n return {\n background: new ColorDrawable(0xff333333)\n };\n }\n }\n attr._viewStyle = {};\n R.attr = attr;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_2) {\n var LayoutDirection = android.util.LayoutDirection;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var ScrollBarDrawable = android.graphics.drawable.ScrollBarDrawable;\n var InsetDrawable = android.graphics.drawable.InsetDrawable;\n var ShadowDrawable = android.graphics.drawable.ShadowDrawable;\n var RoundRectDrawable = android.graphics.drawable.RoundRectDrawable;\n var PixelFormat = android.graphics.PixelFormat;\n var Matrix = android.graphics.Matrix;\n var Paint = android.graphics.Paint;\n var StringBuilder = java.lang.StringBuilder;\n var JavaObject = java.lang.JavaObject;\n var System = java.lang.System;\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var Rect = android.graphics.Rect;\n var RectF = android.graphics.RectF;\n var Point = android.graphics.Point;\n var Canvas = android.graphics.Canvas;\n var CopyOnWriteArrayList = java.lang.util.concurrent.CopyOnWriteArrayList;\n var ArrayList = java.util.ArrayList;\n var Resources = android.content.res.Resources;\n var Pools = android.util.Pools;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var StateAttrList = androidui.attr.StateAttrList;\n var AttrBinder = androidui.attr.AttrBinder;\n var KeyEvent = android.view.KeyEvent;\n var Animation = view_2.animation.Animation;\n var Transformation = view_2.animation.Transformation;\n class View extends JavaObject {\n constructor(context, bindElement, defStyle = android.R.attr.viewStyle) {\n super();\n this.mPrivateFlags = 0;\n this.mPrivateFlags2 = 0;\n this.mPrivateFlags3 = 0;\n this.mCurrentAnimation = null;\n this.mOldWidthMeasureSpec = Number.MIN_SAFE_INTEGER;\n this.mOldHeightMeasureSpec = Number.MIN_SAFE_INTEGER;\n this.mMeasuredWidth = 0;\n this.mMeasuredHeight = 0;\n this.mBackgroundSizeChanged = false;\n this.mBackgroundWidth = 0;\n this.mBackgroundHeight = 0;\n this.mHasPerformedLongPress = false;\n this.mMinWidth = 0;\n this.mMinHeight = 0;\n this.mDrawingCacheBackgroundColor = 0;\n this.mTouchSlop = 0;\n this.mVerticalScrollFactor = 0;\n this.mOverScrollMode = 0;\n this.mViewFlags = 0;\n this.mLayerType = View.LAYER_TYPE_NONE;\n this.mCachingFailed = false;\n this.mWindowAttachCount = 0;\n this.mTransientStateCount = 0;\n this.mLastIsOpaque = false;\n this._mLeft = 0;\n this._mRight = 0;\n this._mTop = 0;\n this._mBottom = 0;\n this._mScrollX = 0;\n this._mScrollY = 0;\n this.mPaddingLeft = 0;\n this.mPaddingRight = 0;\n this.mPaddingTop = 0;\n this.mPaddingBottom = 0;\n this.mCornerRadiusTopLeft = 0;\n this.mCornerRadiusTopRight = 0;\n this.mCornerRadiusBottomRight = 0;\n this.mCornerRadiusBottomLeft = 0;\n this._attrBinder = new AttrBinder(this);\n this.mContext = context;\n this.mTouchSlop = view_2.ViewConfiguration.get().getScaledTouchSlop();\n this.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);\n this.initBindAttr();\n this.initBindElement(bindElement);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n get mLeft() {\n return this._mLeft;\n }\n set mLeft(value) {\n this._mLeft = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mRight() {\n return this._mRight;\n }\n set mRight(value) {\n this._mRight = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mTop() {\n return this._mTop;\n }\n set mTop(value) {\n this._mTop = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mBottom() {\n return this._mBottom;\n }\n set mBottom(value) {\n this._mBottom = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollX() {\n return this._mScrollX;\n }\n set mScrollX(value) {\n this._mScrollX = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollY() {\n return this._mScrollY;\n }\n set mScrollY(value) {\n this._mScrollY = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n initBindAttr() {\n if (!View.ViewClassAttrBinder) {\n View.ViewClassAttrBinder = new AttrBinder.ClassBinderMap();\n View.ViewClassAttrBinder.set('background', {\n setter(v, value) { v.setBackground(v._attrBinder.parseDrawable(value)); },\n getter(v) { return v.mBackground; },\n }).set('padding', {\n setter(v, value) {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = v._attrBinder.parsePaddingMarginLTRB(value);\n v._setPaddingWithUnit(left, top, right, bottom);\n },\n getter(v) { return v.mPaddingTop + ' ' + v.mPaddingRight + ' ' + v.mPaddingBottom + ' ' + v.mPaddingLeft; },\n }).set('paddingLeft', {\n setter(v, value) {\n if (value == null)\n value = 0;\n v._setPaddingWithUnit(value, v.mPaddingTop, v.mPaddingRight, v.mPaddingBottom);\n },\n getter(v) { return v.mPaddingLeft; },\n }).set('paddingTop', {\n setter(v, value) {\n if (value == null)\n value = 0;\n v._setPaddingWithUnit(v.mPaddingLeft, value, v.mPaddingRight, v.mPaddingBottom);\n },\n getter(v) { return v.mPaddingTop; },\n }).set('paddingRight', {\n setter(v, value) {\n if (value == null)\n value = 0;\n v._setPaddingWithUnit(v.mPaddingLeft, v.mPaddingTop, value, v.mPaddingBottom);\n },\n getter(v) { return v.mPaddingRight; },\n }).set('paddingBottom', {\n setter(v, value) {\n if (value == null)\n value = 0;\n v._setPaddingWithUnit(v.mPaddingLeft, v.mPaddingTop, v.mPaddingRight, value);\n },\n getter(v) { return v.mPaddingBottom; },\n }).set('scrollX', {\n setter(v, value) {\n value = v._attrBinder.parseNumberPixelOffset(value);\n if (Number.isInteger(value))\n v.scrollTo(value, v.mScrollY);\n },\n getter(v) { v.getScrollX(); },\n }).set('scrollY', {\n setter(v, value) {\n value = v._attrBinder.parseNumberPixelOffset(value);\n if (Number.isInteger(value))\n v.scrollTo(v.mScrollX, value);\n },\n getter(v) { return v.getScrollY(); },\n }).set('alpha', {\n setter(v, value) {\n v.setAlpha(v._attrBinder.parseFloat(value, v.getAlpha()));\n },\n getter(v) { return v.getAlpha(); },\n }).set('transformPivotX', {\n setter(v, value) {\n v.setPivotX(v._attrBinder.parseNumberPixelOffset(value, v.getPivotX()));\n },\n getter(v) { return v.getPivotX(); },\n }).set('transformPivotY', {\n setter(v, value) {\n v.setPivotY(v._attrBinder.parseNumberPixelOffset(value, v.getPivotY()));\n },\n getter(v) { return v.getPivotY(); },\n }).set('translationX', {\n setter(v, value) {\n v.setTranslationX(v._attrBinder.parseNumberPixelOffset(value, v.getTranslationX()));\n },\n getter(v) {\n return v.getTranslationX();\n },\n }).set('translationY', {\n setter(v, value) {\n v.setTranslationY(v._attrBinder.parseNumberPixelOffset(value, v.getTranslationY()));\n },\n getter(v) {\n return v.getTranslationY();\n },\n }).set('rotation', {\n setter(v, value) {\n v.setRotation(v._attrBinder.parseFloat(value, v.getRotation()));\n },\n getter(v) {\n return v.getRotation();\n },\n }).set('scaleX', {\n setter(v, value) {\n v.setScaleX(v._attrBinder.parseFloat(value, v.getScaleX()));\n },\n getter(v) {\n return v.getScaleX();\n },\n }).set('scaleY', {\n setter(v, value) {\n v.setScaleY(v._attrBinder.parseFloat(value, v.getScaleY()));\n },\n getter(v) {\n return v.getScaleY();\n },\n }).set('tag', {\n setter(v, value) {\n v.setTag(value);\n },\n getter(v) {\n return v.getTag();\n },\n }).set('id', {\n setter(v, value) {\n v.setId(value);\n },\n getter(v) {\n return v.getId();\n },\n }).set('focusable', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n },\n getter(v) {\n return v.isFocusable();\n },\n }).set('focusableInTouchMode', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK);\n }\n },\n getter(v) {\n return v.isFocusableInTouchMode();\n },\n }).set('clickable', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.CLICKABLE, View.CLICKABLE);\n }\n },\n getter(v) {\n return v.isClickable();\n },\n }).set('longClickable', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE);\n }\n },\n getter(v) {\n return v.isLongClickable();\n },\n }).set('duplicateParentState', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE);\n }\n },\n getter(v) {\n return (v.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE;\n },\n }).set('visibility', {\n setter(v, value) {\n if (value === 'gone')\n v.setVisibility(View.GONE);\n else if (value === 'invisible')\n v.setVisibility(View.INVISIBLE);\n else if (value === 'visible')\n v.setVisibility(View.VISIBLE);\n },\n getter(v) {\n return v.getVisibility();\n },\n }).set('scrollbars', {\n setter(v, value) {\n if (value === 'none') {\n v.setHorizontalScrollBarEnabled(false);\n v.setVerticalScrollBarEnabled(false);\n }\n else if (value === 'horizontal') {\n v.setHorizontalScrollBarEnabled(true);\n v.setVerticalScrollBarEnabled(false);\n }\n else if (value === 'vertical') {\n v.setHorizontalScrollBarEnabled(false);\n v.setVerticalScrollBarEnabled(true);\n }\n },\n }).set('isScrollContainer', {\n setter(v, value) {\n if (v._attrBinder.parseBoolean(value, false)) {\n v.setScrollContainer(true);\n }\n },\n getter(v) {\n return v.isScrollContainer();\n },\n }).set('minWidth', {\n setter(v, value) {\n v.setMinimumWidth(v._attrBinder.parseNumberPixelSize(value, 0));\n },\n getter(v) {\n return v.mMinWidth;\n },\n }).set('minHeight', {\n setter(v, value) {\n v.setMinimumHeight(v._attrBinder.parseNumberPixelSize(value, 0));\n },\n getter(v) {\n return v.mMinHeight;\n },\n }).set('onClick', {\n setter(v, value) {\n if (value && typeof value === 'string') {\n v.setOnClickListener((view) => {\n try {\n let activityClickMethod = view.getContext()[value];\n if (typeof activityClickMethod === 'function') {\n activityClickMethod.call(view.getContext(), view);\n return;\n }\n }\n catch (e) {\n }\n try {\n new Function(value).call(view);\n }\n catch (e) {\n }\n });\n }\n v.bindElement.removeAttribute('onclick');\n },\n }).set('overScrollMode', {\n setter(v, value) {\n let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()];\n if (scrollMode === undefined)\n scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n v.setOverScrollMode(scrollMode);\n }\n }).set('layerType', {\n setter(v, value) {\n if ((value + '').toLowerCase() == 'software') {\n v.setLayerType(View.LAYER_TYPE_SOFTWARE);\n }\n else {\n v.setLayerType(View.LAYER_TYPE_NONE);\n }\n }\n }).set('cornerRadius', {\n setter(v, value) {\n let [leftTop, topRight, rightBottom, bottomLeft] = v._attrBinder.parsePaddingMarginLTRB(value);\n v.setCornerRadius(v._attrBinder.parseNumberPixelSize(leftTop, 0), v._attrBinder.parseNumberPixelSize(topRight, 0), v._attrBinder.parseNumberPixelSize(rightBottom, 0), v._attrBinder.parseNumberPixelSize(bottomLeft, 0));\n },\n getter(v) {\n return v.mCornerRadiusTopLeft + ' ' + v.mCornerRadiusTopRight + ' ' + v.mCornerRadiusBottomRight + ' ' + v.mCornerRadiusBottomLeft;\n },\n }).set('cornerRadiusTopLeft', {\n setter(v, value) {\n v.setCornerRadiusTopLeft(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopLeft));\n },\n getter(v) {\n return v.mCornerRadiusTopLeft;\n },\n }).set('cornerRadiusTopRight', {\n setter(v, value) {\n v.setCornerRadiusTopRight(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopRight));\n },\n getter(v) {\n return v.mCornerRadiusTopRight;\n },\n }).set('cornerRadiusBottomLeft', {\n setter(v, value) {\n v.setCornerRadiusBottomLeft(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomLeft));\n },\n getter(v) {\n return v.mCornerRadiusBottomLeft;\n },\n }).set('cornerRadiusBottomRight', {\n setter(v, value) {\n v.setCornerRadiusBottomRight(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomRight));\n },\n getter(v) {\n return v.mCornerRadiusBottomRight;\n },\n }).set('viewShadowColor', {\n setter(v, value) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v._attrBinder.parseColor(value, v.mShadowPaint.shadowColor));\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowColor;\n },\n }).set('viewShadowDx', {\n setter(v, value) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let dx = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDx);\n v.setShadowView(v.mShadowPaint.shadowRadius, dx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowDx;\n },\n }).set('viewShadowDy', {\n setter(v, value) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let dy = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDy);\n v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, dy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowDy;\n },\n }).set('viewShadowRadius', {\n setter(v, value) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let radius = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowRadius);\n v.setShadowView(radius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowRadius;\n },\n });\n View.ViewClassAttrBinder.set('paddingStart', View.ViewClassAttrBinder.get('paddingLeft'));\n View.ViewClassAttrBinder.set('paddingEnd', View.ViewClassAttrBinder.get('paddingRight'));\n }\n this._attrBinder.addClassAttrBind(View.ViewClassAttrBinder);\n }\n getContext() {\n if (this.mContext == null && this.mAttachInfo != null) {\n return this.mAttachInfo.mRootView.mContext;\n }\n return this.mContext;\n }\n getWidth() {\n return this.mRight - this.mLeft;\n }\n getHeight() {\n return this.mBottom - this.mTop;\n }\n getPaddingLeft() {\n return this.mPaddingLeft;\n }\n getPaddingTop() {\n return this.mPaddingTop;\n }\n getPaddingRight() {\n return this.mPaddingRight;\n }\n getPaddingBottom() {\n return this.mPaddingBottom;\n }\n setPaddingLeft(left) {\n if (this.mPaddingLeft != left) {\n this.mPaddingLeft = left;\n this.requestLayout();\n }\n }\n setPaddingTop(top) {\n if (this.mPaddingTop != top) {\n this.mPaddingTop = top;\n this.requestLayout();\n }\n }\n setPaddingRight(right) {\n if (this.mPaddingRight != right) {\n this.mPaddingRight = right;\n this.requestLayout();\n }\n }\n setPaddingBottom(bottom) {\n if (this.mPaddingBottom != bottom) {\n this.mPaddingBottom = bottom;\n this.requestLayout();\n }\n }\n setPadding(left, top, right, bottom) {\n let changed = false;\n if (this.mPaddingLeft != left) {\n changed = true;\n this.mPaddingLeft = left;\n }\n if (this.mPaddingTop != top) {\n changed = true;\n this.mPaddingTop = top;\n }\n if (this.mPaddingRight != right) {\n changed = true;\n this.mPaddingRight = right;\n }\n if (this.mPaddingBottom != bottom) {\n changed = true;\n this.mPaddingBottom = bottom;\n }\n if (changed) {\n this.requestLayout();\n }\n }\n _setPaddingWithUnit(left, top, right, bottom) {\n let view = this;\n let width = view.getWidth();\n let height = view.getHeight();\n let a = this._attrBinder;\n let padLeft = a.parseDimension(left, 0, width);\n let padTop = a.parseDimension(top, 0, height);\n let padRight = a.parseDimension(right, 0, width);\n let padBottom = a.parseDimension(bottom, 0, height);\n view.setPadding(padLeft, padTop, padRight, padBottom);\n let unit = android.util.TypedValue.COMPLEX_UNIT_FRACTION;\n if ((typeof left === 'string' && left.endsWith(unit)) || (typeof top === 'string' && top.endsWith(unit))\n || (typeof right === 'string' && right.endsWith(unit)) || (typeof bottom === 'string' && bottom.endsWith(unit))) {\n view.post({\n run: () => {\n let width = view.getWidth();\n let height = view.getHeight();\n let padLeftN = a.parseDimension(left, 0, width);\n let padTopN = a.parseDimension(top, 0, height);\n let padRightN = a.parseDimension(right, 0, width);\n let padBottomN = a.parseDimension(bottom, 0, height);\n view.setPadding(padLeftN, padTopN, padRightN, padBottomN);\n }\n });\n }\n }\n resolvePadding() {\n }\n setScrollX(value) {\n this.scrollTo(value, this.mScrollY);\n }\n setScrollY(value) {\n this.scrollTo(this.mScrollX, value);\n }\n getScrollX() {\n return this.mScrollX;\n }\n getScrollY() {\n return this.mScrollY;\n }\n offsetTopAndBottom(offset) {\n if (offset != 0) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n const p = this.mParent;\n if (p != null && this.mAttachInfo != null) {\n const r = this.mAttachInfo.mTmpInvalRect;\n let minTop;\n let maxBottom;\n let yLoc;\n if (offset < 0) {\n minTop = this.mTop + offset;\n maxBottom = this.mBottom;\n yLoc = offset;\n }\n else {\n minTop = this.mTop;\n maxBottom = this.mBottom + offset;\n yLoc = 0;\n }\n r.set(0, yLoc, this.mRight - this.mLeft, maxBottom - minTop);\n p.invalidateChild(this, r);\n }\n }\n else {\n this.invalidateViewProperty(false, false);\n }\n this.mTop += offset;\n this.mBottom += offset;\n if (!matrixIsIdentity) {\n this.invalidateViewProperty(false, true);\n }\n this.invalidateParentIfNeeded();\n }\n }\n offsetLeftAndRight(offset) {\n if (offset != 0) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n const p = this.mParent;\n if (p != null && this.mAttachInfo != null) {\n const r = this.mAttachInfo.mTmpInvalRect;\n let minLeft;\n let maxRight;\n if (offset < 0) {\n minLeft = this.mLeft + offset;\n maxRight = this.mRight;\n }\n else {\n minLeft = this.mLeft;\n maxRight = this.mRight + offset;\n }\n r.set(0, 0, maxRight - minLeft, this.mBottom - this.mTop);\n p.invalidateChild(this, r);\n }\n }\n else {\n this.invalidateViewProperty(false, false);\n }\n this.mLeft += offset;\n this.mRight += offset;\n if (!matrixIsIdentity) {\n this.invalidateViewProperty(false, true);\n }\n this.invalidateParentIfNeeded();\n }\n }\n getMatrix() {\n if (this.mTransformationInfo != null) {\n this.updateMatrix();\n return this.mTransformationInfo.mMatrix;\n }\n return Matrix.IDENTITY_MATRIX;\n }\n hasIdentityMatrix() {\n if (this.mTransformationInfo != null) {\n this.updateMatrix();\n return this.mTransformationInfo.mMatrixIsIdentity;\n }\n return true;\n }\n ensureTransformationInfo() {\n if (this.mTransformationInfo == null) {\n this.mTransformationInfo = new View.TransformationInfo();\n }\n }\n updateMatrix() {\n const info = this.mTransformationInfo;\n if (info == null) {\n this._syncMatrixToElement();\n return;\n }\n if (info.mMatrixDirty) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n if ((this.mRight - this.mLeft) != info.mPrevWidth || (this.mBottom - this.mTop) != info.mPrevHeight) {\n info.mPrevWidth = this.mRight - this.mLeft;\n info.mPrevHeight = this.mBottom - this.mTop;\n info.mPivotX = info.mPrevWidth / 2;\n info.mPivotY = info.mPrevHeight / 2;\n }\n }\n info.mMatrix.reset();\n info.mMatrix.setTranslate(info.mTranslationX, info.mTranslationY);\n info.mMatrix.preRotate(info.mRotation, info.mPivotX, info.mPivotY);\n info.mMatrix.preScale(info.mScaleX, info.mScaleY, info.mPivotX, info.mPivotY);\n info.mMatrixDirty = false;\n info.mMatrixIsIdentity = info.mMatrix.isIdentity();\n info.mInverseMatrixDirty = true;\n }\n this._syncMatrixToElement();\n }\n getRotation() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mRotation : 0;\n }\n setRotation(rotation) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mRotation != rotation) {\n this.invalidateViewProperty(true, false);\n info.mRotation = rotation;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getScaleX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mScaleX : 1;\n }\n setScaleX(scaleX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mScaleX != scaleX) {\n this.invalidateViewProperty(true, false);\n info.mScaleX = scaleX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getScaleY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mScaleY : 1;\n }\n setScaleY(scaleY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mScaleY != scaleY) {\n this.invalidateViewProperty(true, false);\n info.mScaleY = scaleY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getPivotX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mPivotX : 0;\n }\n setPivotX(pivotX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n let pivotSet = (this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == View.PFLAG_PIVOT_EXPLICITLY_SET;\n if (info.mPivotX != pivotX || !pivotSet) {\n this.mPrivateFlags |= View.PFLAG_PIVOT_EXPLICITLY_SET;\n this.invalidateViewProperty(true, false);\n info.mPivotX = pivotX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getPivotY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mPivotY : 0;\n }\n setPivotY(pivotY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n let pivotSet = (this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == View.PFLAG_PIVOT_EXPLICITLY_SET;\n if (info.mPivotY != pivotY || !pivotSet) {\n this.mPrivateFlags |= View.PFLAG_PIVOT_EXPLICITLY_SET;\n this.invalidateViewProperty(true, false);\n info.mPivotY = pivotY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getAlpha() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mAlpha : 1;\n }\n hasOverlappingRendering() {\n return true;\n }\n setAlpha(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mAlpha != alpha) {\n this.mTransformationInfo.mAlpha = alpha;\n if (this.onSetAlpha(Math.floor((alpha * 255)))) {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n this.invalidateViewProperty(true, false);\n }\n }\n }\n setAlphaNoInvalidation(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mAlpha != alpha) {\n this.mTransformationInfo.mAlpha = alpha;\n let subclassHandlesAlpha = this.onSetAlpha(Math.floor((alpha * 255)));\n if (subclassHandlesAlpha) {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n return true;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n }\n }\n return false;\n }\n setTransitionAlpha(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mTransitionAlpha != alpha) {\n this.mTransformationInfo.mTransitionAlpha = alpha;\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n this.invalidateViewProperty(true, false);\n }\n }\n getFinalAlpha() {\n if (this.mTransformationInfo != null) {\n return this.mTransformationInfo.mAlpha * this.mTransformationInfo.mTransitionAlpha;\n }\n return 1;\n }\n getTransitionAlpha() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTransitionAlpha : 1;\n }\n getTop() {\n return this.mTop;\n }\n setTop(top) {\n if (top != this.mTop) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let minTop;\n let yLoc;\n if (top < this.mTop) {\n minTop = top;\n yLoc = top - this.mTop;\n }\n else {\n minTop = this.mTop;\n yLoc = 0;\n }\n this.invalidate(0, yLoc, this.mRight - this.mLeft, this.mBottom - minTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let width = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n this.mTop = top;\n this.sizeChange(width, this.mBottom - this.mTop, width, oldHeight);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getBottom() {\n return this.mBottom;\n }\n isDirty() {\n return (this.mPrivateFlags & View.PFLAG_DIRTY_MASK) != 0;\n }\n setBottom(bottom) {\n if (bottom != this.mBottom) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let maxBottom;\n if (bottom < this.mBottom) {\n maxBottom = this.mBottom;\n }\n else {\n maxBottom = bottom;\n }\n this.invalidate(0, 0, this.mRight - this.mLeft, maxBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let width = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n this.mBottom = bottom;\n this.sizeChange(width, this.mBottom - this.mTop, width, oldHeight);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getLeft() {\n return this.mLeft;\n }\n setLeft(left) {\n if (left != this.mLeft) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let minLeft;\n let xLoc;\n if (left < this.mLeft) {\n minLeft = left;\n xLoc = left - this.mLeft;\n }\n else {\n minLeft = this.mLeft;\n xLoc = 0;\n }\n this.invalidate(xLoc, 0, this.mRight - minLeft, this.mBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let oldWidth = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n this.mLeft = left;\n this.sizeChange(this.mRight - this.mLeft, height, oldWidth, height);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getRight() {\n return this.mRight;\n }\n setRight(right) {\n if (right != this.mRight) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let maxRight;\n if (right < this.mRight) {\n maxRight = this.mRight;\n }\n else {\n maxRight = right;\n }\n this.invalidate(0, 0, maxRight - this.mLeft, this.mBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let oldWidth = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n this.mRight = right;\n this.sizeChange(this.mRight - this.mLeft, height, oldWidth, height);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getX() {\n return this.mLeft + (this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationX : 0);\n }\n setX(x) {\n this.setTranslationX(x - this.mLeft);\n }\n getY() {\n return this.mTop + (this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationY : 0);\n }\n setY(y) {\n this.setTranslationY(y - this.mTop);\n }\n getTranslationX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationX : 0;\n }\n setTranslationX(translationX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mTranslationX != translationX) {\n this.invalidateViewProperty(true, false);\n info.mTranslationX = translationX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getTranslationY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationY : 0;\n }\n setTranslationY(translationY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mTranslationY != translationY) {\n this.invalidateViewProperty(true, false);\n info.mTranslationY = translationY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n transformRect(rect) {\n if (!this.getMatrix().isIdentity()) {\n let boundingRect = this.mAttachInfo.mTmpTransformRect;\n boundingRect.set(rect);\n this.getMatrix().mapRect(boundingRect);\n rect.set(boundingRect);\n }\n }\n pointInView(localX, localY, slop = 0) {\n return localX >= -slop && localY >= -slop && localX < ((this.mRight - this.mLeft) + slop) &&\n localY < ((this.mBottom - this.mTop) + slop);\n }\n getHandler() {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler;\n }\n return null;\n }\n getViewRootImpl() {\n if (this.mAttachInfo != null) {\n return this.mAttachInfo.mViewRootImpl;\n }\n if (this.mContext != null) {\n return this.mContext.androidUI._viewRootImpl;\n }\n return null;\n }\n post(action) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler.post(action);\n }\n view_2.ViewRootImpl.getRunQueue().post(action);\n return true;\n }\n postDelayed(action, delayMillis) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler.postDelayed(action, delayMillis);\n }\n view_2.ViewRootImpl.getRunQueue().postDelayed(action, delayMillis);\n return true;\n }\n postOnAnimation(action) {\n return this.post(action);\n }\n postOnAnimationDelayed(action, delayMillis) {\n return this.postDelayed(action, delayMillis);\n }\n removeCallbacks(action) {\n if (action != null) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n attachInfo.mHandler.removeCallbacks(action);\n }\n else {\n view_2.ViewRootImpl.getRunQueue().removeCallbacks(action);\n }\n }\n return true;\n }\n getParent() {\n return this.mParent;\n }\n setFlags(flags, mask) {\n let old = this.mViewFlags;\n this.mViewFlags = (this.mViewFlags & ~mask) | (flags & mask);\n let changed = this.mViewFlags ^ old;\n if (changed == 0) {\n return;\n }\n let privateFlags = this.mPrivateFlags;\n if (((changed & View.FOCUSABLE_MASK) != 0) &&\n ((privateFlags & View.PFLAG_HAS_BOUNDS) != 0)) {\n if (((old & View.FOCUSABLE_MASK) == View.FOCUSABLE)\n && ((privateFlags & View.PFLAG_FOCUSED) != 0)) {\n this.clearFocus();\n }\n else if (((old & View.FOCUSABLE_MASK) == View.NOT_FOCUSABLE)\n && ((privateFlags & View.PFLAG_FOCUSED) == 0)) {\n if (this.mParent != null)\n this.mParent.focusableViewAvailable(this);\n }\n }\n const newVisibility = flags & View.VISIBILITY_MASK;\n if (newVisibility == View.VISIBLE) {\n if ((changed & View.VISIBILITY_MASK) != 0) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n if ((this.mParent != null) && (this.mBottom > this.mTop) && (this.mRight > this.mLeft)) {\n this.mParent.focusableViewAvailable(this);\n }\n }\n }\n if ((changed & View.GONE) != 0) {\n this.requestLayout();\n if (((this.mViewFlags & View.VISIBILITY_MASK) == View.GONE)) {\n if (this.hasFocus())\n this.clearFocus();\n this.destroyDrawingCache();\n if (this.mParent instanceof View) {\n this.mParent.invalidate(true);\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n }\n }\n if ((changed & View.INVISIBLE) != 0) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (((this.mViewFlags & View.VISIBILITY_MASK) == View.INVISIBLE)) {\n if (this.getRootView() != this) {\n if (this.hasFocus())\n this.clearFocus();\n }\n }\n }\n if ((changed & View.VISIBILITY_MASK) != 0) {\n if (newVisibility != View.VISIBLE) {\n this.cleanupDraw();\n }\n if (this.mParent instanceof view_2.ViewGroup) {\n this.mParent.onChildVisibilityChanged(this, (changed & View.VISIBILITY_MASK), newVisibility);\n this.mParent.invalidate(true);\n }\n else if (this.mParent != null) {\n this.mParent.invalidateChild(this, null);\n }\n this.dispatchVisibilityChanged(this, newVisibility);\n this.syncVisibleToElement();\n }\n if ((changed & View.WILL_NOT_CACHE_DRAWING) != 0) {\n this.destroyDrawingCache();\n }\n if ((changed & View.DRAWING_CACHE_ENABLED) != 0) {\n this.destroyDrawingCache();\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n this.invalidateParentCaches();\n }\n if ((changed & View.DRAW_MASK) != 0) {\n if ((this.mViewFlags & View.WILL_NOT_DRAW) != 0) {\n if (this.mBackground != null) {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n this.mPrivateFlags |= View.PFLAG_ONLY_DRAWS_BACKGROUND;\n }\n else {\n this.mPrivateFlags |= View.PFLAG_SKIP_DRAW;\n }\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n }\n this.requestLayout();\n this.invalidate(true);\n }\n }\n bringToFront() {\n if (this.mParent != null) {\n this.mParent.bringChildToFront(this);\n }\n }\n onScrollChanged(l, t, oldl, oldt) {\n this.mBackgroundSizeChanged = true;\n let rootImpl = this.getViewRootImpl();\n if (rootImpl != null) {\n rootImpl.mViewScrollChanged = true;\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n }\n getTouchables() {\n let result = new ArrayList();\n this.addTouchables(result);\n return result;\n }\n addTouchables(views) {\n const viewFlags = this.mViewFlags;\n if (((viewFlags & View.CLICKABLE) == View.CLICKABLE || (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE)\n && (viewFlags & View.ENABLED_MASK) == View.ENABLED) {\n views.add(this);\n }\n }\n requestRectangleOnScreen(rectangle, immediate = false) {\n if (this.mParent == null) {\n return false;\n }\n let child = this;\n let position = (this.mAttachInfo != null) ? this.mAttachInfo.mTmpTransformRect : new RectF();\n position.set(rectangle);\n let parent = this.mParent;\n let scrolled = false;\n while (parent != null) {\n rectangle.set(Math.floor(position.left), Math.floor(position.top), Math.floor(position.right), Math.floor(position.bottom));\n scrolled = parent.requestChildRectangleOnScreen(child, rectangle, immediate) || scrolled;\n if (!child.hasIdentityMatrix()) {\n child.getMatrix().mapRect(position);\n }\n position.offset(child.mLeft, child.mTop);\n if (!(parent instanceof View)) {\n break;\n }\n let parentView = parent;\n position.offset(-parentView.getScrollX(), -parentView.getScrollY());\n child = parentView;\n parent = child.getParent();\n }\n return scrolled;\n }\n onFocusLost() {\n this.resetPressedState();\n }\n resetPressedState() {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return;\n }\n if (this.isPressed()) {\n this.setPressed(false);\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n }\n }\n }\n isFocused() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0;\n }\n findFocus() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0 ? this : null;\n }\n getNextFocusLeftId() {\n return this.mNextFocusLeftId;\n }\n setNextFocusLeftId(nextFocusLeftId) {\n this.mNextFocusLeftId = nextFocusLeftId;\n }\n getNextFocusRightId() {\n return this.mNextFocusRightId;\n }\n setNextFocusRightId(nextFocusRightId) {\n this.mNextFocusRightId = nextFocusRightId;\n }\n getNextFocusUpId() {\n return this.mNextFocusUpId;\n }\n setNextFocusUpId(nextFocusUpId) {\n this.mNextFocusUpId = nextFocusUpId;\n }\n getNextFocusDownId() {\n return this.mNextFocusDownId;\n }\n setNextFocusDownId(nextFocusDownId) {\n this.mNextFocusDownId = nextFocusDownId;\n }\n getNextFocusForwardId() {\n return this.mNextFocusForwardId;\n }\n setNextFocusForwardId(nextFocusForwardId) {\n this.mNextFocusForwardId = nextFocusForwardId;\n }\n setFocusable(focusable) {\n if (!focusable) {\n this.setFlags(0, View.FOCUSABLE_IN_TOUCH_MODE);\n }\n this.setFlags(focusable ? View.FOCUSABLE : View.NOT_FOCUSABLE, View.FOCUSABLE_MASK);\n }\n isFocusable() {\n return View.FOCUSABLE == (this.mViewFlags & View.FOCUSABLE_MASK);\n }\n setFocusableInTouchMode(focusableInTouchMode) {\n this.setFlags(focusableInTouchMode ? View.FOCUSABLE_IN_TOUCH_MODE : 0, View.FOCUSABLE_IN_TOUCH_MODE);\n if (focusableInTouchMode) {\n this.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n }\n isFocusableInTouchMode() {\n return View.FOCUSABLE_IN_TOUCH_MODE == (this.mViewFlags & View.FOCUSABLE_IN_TOUCH_MODE);\n }\n hasFocusable() {\n return (this.mViewFlags & View.VISIBILITY_MASK) == View.VISIBLE && this.isFocusable();\n }\n clearFocus() {\n if (View.DBG) {\n System.out.println(this + \" clearFocus()\");\n }\n this.clearFocusInternal(true, true);\n }\n clearFocusInternal(propagate, refocus) {\n if ((this.mPrivateFlags & View.PFLAG_FOCUSED) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_FOCUSED;\n if (propagate && this.mParent != null) {\n this.mParent.clearChildFocus(this);\n }\n this.onFocusChanged(false, 0, null);\n this.refreshDrawableState();\n if (propagate && (!refocus || !this.rootViewRequestFocus())) {\n this.notifyGlobalFocusCleared(this);\n }\n }\n }\n notifyGlobalFocusCleared(oldFocus) {\n }\n rootViewRequestFocus() {\n const root = this.getRootView();\n return root != null && root.requestFocus();\n }\n unFocus() {\n if (View.DBG) {\n System.out.println(this + \" unFocus()\");\n }\n this.clearFocusInternal(false, false);\n }\n hasFocus() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n if (!gainFocus) {\n if (this.isPressed()) {\n this.setPressed(false);\n }\n this.onFocusLost();\n }\n this.invalidate(true);\n let li = this.mListenerInfo;\n if (li != null && li.mOnFocusChangeListener != null) {\n li.mOnFocusChangeListener.onFocusChange(this, gainFocus);\n }\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mKeyDispatchState.reset(this);\n }\n }\n focusSearch(direction) {\n if (this.mParent != null) {\n return this.mParent.focusSearch(this, direction);\n }\n else {\n return null;\n }\n }\n dispatchUnhandledMove(focused, direction) {\n return false;\n }\n findUserSetNextFocus(root, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n if (!this.mNextFocusLeftId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusLeftId);\n case View.FOCUS_RIGHT:\n if (!this.mNextFocusRightId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusRightId);\n case View.FOCUS_UP:\n if (!this.mNextFocusUpId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusUpId);\n case View.FOCUS_DOWN:\n if (!this.mNextFocusDownId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusDownId);\n case View.FOCUS_FORWARD:\n if (!this.mNextFocusForwardId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusForwardId);\n case View.FOCUS_BACKWARD: {\n if (!this.mID)\n return null;\n let id = this.mID;\n return root.findViewByPredicateInsideOut(this, {\n apply(t) {\n return t.mNextFocusForwardId == id;\n }\n });\n }\n }\n return null;\n }\n findViewInsideOutShouldExist(root, id) {\n if (this.mMatchIdPredicate == null) {\n this.mMatchIdPredicate = new MatchIdPredicate();\n }\n this.mMatchIdPredicate.mId = id;\n let result = root.findViewByPredicateInsideOut(this, this.mMatchIdPredicate);\n if (result == null) {\n Log.w(View.VIEW_LOG_TAG, \"couldn't find view with id \" + id);\n }\n return result;\n }\n getFocusables(direction) {\n let result = new ArrayList(24);\n this.addFocusables(result, direction);\n return result;\n }\n addFocusables(views, direction, focusableMode = View.FOCUSABLES_TOUCH_MODE) {\n if (views == null) {\n return;\n }\n if (!this.isFocusable()) {\n return;\n }\n if ((focusableMode & View.FOCUSABLES_TOUCH_MODE) == View.FOCUSABLES_TOUCH_MODE\n && this.isInTouchMode() && !this.isFocusableInTouchMode()) {\n return;\n }\n views.add(this);\n }\n setOnFocusChangeListener(l) {\n if (typeof l == \"function\") {\n l = View.OnFocusChangeListener.fromFunction(l);\n }\n this.getListenerInfo().mOnFocusChangeListener = l;\n }\n getOnFocusChangeListener() {\n let li = this.mListenerInfo;\n return li != null ? li.mOnFocusChangeListener : null;\n }\n requestFocus(direction = View.FOCUS_DOWN, previouslyFocusedRect = null) {\n return this.requestFocusNoSearch(direction, previouslyFocusedRect);\n }\n requestFocusNoSearch(direction, previouslyFocusedRect) {\n if ((this.mViewFlags & View.FOCUSABLE_MASK) != View.FOCUSABLE ||\n (this.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE) {\n return false;\n }\n if (this.isInTouchMode() &&\n (View.FOCUSABLE_IN_TOUCH_MODE != (this.mViewFlags & View.FOCUSABLE_IN_TOUCH_MODE))) {\n return false;\n }\n if (this.hasAncestorThatBlocksDescendantFocus()) {\n return false;\n }\n this.handleFocusGainInternal(direction, previouslyFocusedRect);\n return true;\n }\n requestFocusFromTouch() {\n if (this.isInTouchMode()) {\n let viewRoot = this.getViewRootImpl();\n if (viewRoot != null) {\n viewRoot.ensureTouchMode(false);\n }\n }\n return this.requestFocus(View.FOCUS_DOWN);\n }\n hasAncestorThatBlocksDescendantFocus() {\n let ancestor = this.mParent;\n while (ancestor instanceof view_2.ViewGroup) {\n const vgAncestor = ancestor;\n if (vgAncestor.getDescendantFocusability() == view_2.ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n return true;\n }\n else {\n ancestor = vgAncestor.getParent();\n }\n }\n return false;\n }\n handleFocusGainInternal(direction, previouslyFocusedRect) {\n if (View.DBG) {\n System.out.println(this + \" requestFocus()\");\n }\n if ((this.mPrivateFlags & View.PFLAG_FOCUSED) == 0) {\n this.mPrivateFlags |= View.PFLAG_FOCUSED;\n let oldFocus = (this.mAttachInfo != null) ? this.getRootView().findFocus() : null;\n if (this.mParent != null) {\n this.mParent.requestChildFocus(this, this);\n }\n this.onFocusChanged(true, direction, previouslyFocusedRect);\n this.refreshDrawableState();\n }\n }\n hasTransientState() {\n return (this.mPrivateFlags2 & View.PFLAG2_HAS_TRANSIENT_STATE) == View.PFLAG2_HAS_TRANSIENT_STATE;\n }\n setHasTransientState(hasTransientState) {\n this.mTransientStateCount = hasTransientState ? this.mTransientStateCount + 1 :\n this.mTransientStateCount - 1;\n if (this.mTransientStateCount < 0) {\n this.mTransientStateCount = 0;\n Log.e(View.VIEW_LOG_TAG, \"hasTransientState decremented below 0: \" +\n \"unmatched pair of setHasTransientState calls\");\n }\n else if ((hasTransientState && this.mTransientStateCount == 1) ||\n (!hasTransientState && this.mTransientStateCount == 0)) {\n this.mPrivateFlags2 = (this.mPrivateFlags2 & ~View.PFLAG2_HAS_TRANSIENT_STATE) |\n (hasTransientState ? View.PFLAG2_HAS_TRANSIENT_STATE : 0);\n if (this.mParent != null) {\n this.mParent.childHasTransientStateChanged(this, hasTransientState);\n }\n }\n }\n isScrollContainer() {\n return (this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0;\n }\n setScrollContainer(isScrollContainer) {\n if (isScrollContainer) {\n if (this.mAttachInfo != null && (this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) == 0) {\n this.mAttachInfo.mScrollContainers.add(this);\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER;\n }\n else {\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0) {\n this.mAttachInfo.mScrollContainers.delete(this);\n }\n this.mPrivateFlags &= ~(View.PFLAG_SCROLL_CONTAINER | View.PFLAG_SCROLL_CONTAINER_ADDED);\n }\n }\n isInTouchMode() {\n if (this.getViewRootImpl() != null) {\n return this.getViewRootImpl().mInTouchMode;\n }\n else {\n return false;\n }\n }\n isShown() {\n let current = this;\n do {\n if ((current.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE) {\n return false;\n }\n let parent = current.mParent;\n if (parent == null) {\n return false;\n }\n if (!(parent instanceof View)) {\n return true;\n }\n current = parent;\n } while (current != null);\n return false;\n }\n getVisibility() {\n return this.mViewFlags & View.VISIBILITY_MASK;\n }\n setVisibility(visibility) {\n this.setFlags(visibility, View.VISIBILITY_MASK);\n if (this.mBackground != null)\n this.mBackground.setVisible(visibility == View.VISIBLE, false);\n }\n dispatchVisibilityChanged(changedView, visibility) {\n this.onVisibilityChanged(changedView, visibility);\n }\n onVisibilityChanged(changedView, visibility) {\n if (visibility == View.VISIBLE) {\n if (this.mAttachInfo != null) {\n this.initialAwakenScrollBars();\n }\n else {\n this.mPrivateFlags |= View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;\n }\n }\n }\n dispatchDisplayHint(hint) {\n this.onDisplayHint(hint);\n }\n onDisplayHint(hint) {\n }\n dispatchWindowVisibilityChanged(visibility) {\n this.onWindowVisibilityChanged(visibility);\n }\n onWindowVisibilityChanged(visibility) {\n if (visibility == View.VISIBLE) {\n this.initialAwakenScrollBars();\n }\n }\n getWindowVisibility() {\n return this.mAttachInfo != null ? this.mAttachInfo.mWindowVisibility : View.GONE;\n }\n isEnabled() {\n return (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED;\n }\n setEnabled(enabled) {\n if (enabled == this.isEnabled())\n return;\n this.setFlags(enabled ? View.ENABLED : View.DISABLED, View.ENABLED_MASK);\n this.refreshDrawableState();\n this.invalidate(true);\n }\n dispatchGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n const action = event.getAction();\n if (action == view_2.MotionEvent.ACTION_HOVER_ENTER\n || action == view_2.MotionEvent.ACTION_HOVER_MOVE\n || action == view_2.MotionEvent.ACTION_HOVER_EXIT) {\n }\n else if (this.dispatchGenericPointerEvent(event)) {\n return true;\n }\n }\n if (this.dispatchGenericMotionEventInternal(event)) {\n return true;\n }\n return false;\n }\n dispatchGenericMotionEventInternal(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnGenericMotionListener != null\n && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnGenericMotionListener.onGenericMotion(this, event)) {\n return true;\n }\n if (this.onGenericMotionEvent(event)) {\n return true;\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n dispatchGenericPointerEvent(event) {\n return false;\n }\n dispatchKeyEvent(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnKeyListener != null && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnKeyListener.onKey(this, event.getKeyCode(), event)) {\n return true;\n }\n if (event.dispatch(this, this.mAttachInfo != null\n ? this.mAttachInfo.mKeyDispatchState : null, this)) {\n return true;\n }\n return false;\n }\n setOnKeyListener(l) {\n if (typeof l == \"function\") {\n l = View.OnKeyListener.fromFunction(l);\n }\n this.getListenerInfo().mOnKeyListener = l;\n }\n getKeyDispatcherState() {\n return this.mAttachInfo != null ? this.mAttachInfo.mKeyDispatchState : null;\n }\n onKeyDown(keyCode, event) {\n let result = false;\n if (KeyEvent.isConfirmKey(keyCode)) {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return true;\n }\n if (((this.mViewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE) &&\n (event.getRepeatCount() == 0)) {\n this.setPressed(true);\n this.checkForLongClick(0);\n return true;\n }\n }\n return result;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (KeyEvent.isConfirmKey(keyCode)) {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return true;\n }\n if ((this.mViewFlags & View.CLICKABLE) == View.CLICKABLE && this.isPressed()) {\n this.setPressed(false);\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n return this.performClick();\n }\n }\n }\n return false;\n }\n dispatchTouchEvent(event) {\n if (this.onFilterTouchEventForSecurity(event)) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnTouchListener != null && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnTouchListener.onTouch(this, event)) {\n return true;\n }\n if (this.onTouchEvent(event)) {\n return true;\n }\n }\n return false;\n }\n onFilterTouchEventForSecurity(event) {\n return true;\n }\n onTouchEvent(event) {\n let viewFlags = this.mViewFlags;\n if ((viewFlags & View.ENABLED_MASK) == View.DISABLED) {\n if (event.getAction() == view_2.MotionEvent.ACTION_UP && (this.mPrivateFlags & View.PFLAG_PRESSED) != 0) {\n this.setPressed(false);\n }\n return (((viewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE));\n }\n if (this.mTouchDelegate != null) {\n if (this.mTouchDelegate.onTouchEvent(event)) {\n return true;\n }\n }\n if (((viewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE)) {\n switch (event.getAction()) {\n case view_2.MotionEvent.ACTION_UP:\n let prepressed = (this.mPrivateFlags & View.PFLAG_PREPRESSED) != 0;\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0 || prepressed) {\n let focusTaken = false;\n if (this.isFocusable() && this.isFocusableInTouchMode() && !this.isFocused()) {\n focusTaken = this.requestFocus();\n }\n if (prepressed) {\n this.setPressed(true);\n }\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n if (!focusTaken) {\n if (this.mPerformClick == null) {\n this.mPerformClick = new PerformClick(this);\n }\n if (prepressed) {\n if (this.mPerformClickAfterPressDraw == null) {\n this.mPerformClickAfterPressDraw = new PerformClickAfterPressDraw(this);\n }\n this.post(this.mPerformClickAfterPressDraw);\n }\n else if (!this.post(this.mPerformClick)) {\n this.performClick(event);\n }\n }\n }\n if (this.mUnsetPressedState == null) {\n this.mUnsetPressedState = new UnsetPressedState(this);\n }\n if (prepressed) {\n this.postDelayed(this.mUnsetPressedState, view_2.ViewConfiguration.getPressedStateDuration());\n }\n else if (!this.post(this.mUnsetPressedState)) {\n this.mUnsetPressedState.run();\n }\n this.removeTapCallback();\n }\n break;\n case view_2.MotionEvent.ACTION_DOWN:\n this.mHasPerformedLongPress = false;\n let isInScrollingContainer = this.isInScrollingContainer();\n if (isInScrollingContainer) {\n this.mPrivateFlags |= View.PFLAG_PREPRESSED;\n if (this.mPendingCheckForTap == null) {\n this.mPendingCheckForTap = new CheckForTap(this);\n }\n this.postDelayed(this.mPendingCheckForTap, view_2.ViewConfiguration.getTapTimeout());\n }\n else {\n this.setPressed(true);\n this.checkForLongClick(0);\n }\n break;\n case view_2.MotionEvent.ACTION_CANCEL:\n this.setPressed(false);\n this.removeTapCallback();\n this.removeLongPressCallback();\n break;\n case view_2.MotionEvent.ACTION_MOVE:\n const x = event.getX();\n const y = event.getY();\n if (!this.pointInView(x, y, this.mTouchSlop)) {\n this.removeTapCallback();\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0) {\n this.removeLongPressCallback();\n this.setPressed(false);\n }\n }\n break;\n }\n return true;\n }\n return false;\n }\n isInScrollingContainer() {\n let p = this.getParent();\n while (p != null && p instanceof view_2.ViewGroup) {\n if (p.shouldDelayChildPressedState()) {\n return true;\n }\n p = p.getParent();\n }\n return false;\n }\n cancelPendingInputEvents() {\n this.dispatchCancelPendingInputEvents();\n }\n dispatchCancelPendingInputEvents() {\n this.mPrivateFlags3 &= ~View.PFLAG3_CALLED_SUPER;\n this.onCancelPendingInputEvents();\n if ((this.mPrivateFlags3 & View.PFLAG3_CALLED_SUPER) != View.PFLAG3_CALLED_SUPER) {\n throw Error(`new SuperNotCalledException(\"View \" + this.getClass().getSimpleName() + \" did not call through to super.onCancelPendingInputEvents()\")`);\n }\n }\n onCancelPendingInputEvents() {\n this.removePerformClickCallback();\n this.cancelLongPress();\n this.mPrivateFlags3 |= View.PFLAG3_CALLED_SUPER;\n }\n removeLongPressCallback() {\n if (this.mPendingCheckForLongPress != null) {\n this.removeCallbacks(this.mPendingCheckForLongPress);\n }\n }\n removePerformClickCallback() {\n if (this.mPerformClick != null) {\n this.removeCallbacks(this.mPerformClick);\n }\n if (this.mPerformClickAfterPressDraw != null) {\n this.removeCallbacks(this.mPerformClickAfterPressDraw);\n }\n }\n removeUnsetPressCallback() {\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0 && this.mUnsetPressedState != null) {\n this.setPressed(false);\n this.removeCallbacks(this.mUnsetPressedState);\n }\n }\n removeTapCallback() {\n if (this.mPendingCheckForTap != null) {\n this.mPrivateFlags &= ~View.PFLAG_PREPRESSED;\n this.removeCallbacks(this.mPendingCheckForTap);\n }\n }\n cancelLongPress() {\n this.removeLongPressCallback();\n this.removeTapCallback();\n }\n setTouchDelegate(delegate) {\n this.mTouchDelegate = delegate;\n }\n getTouchDelegate() {\n return this.mTouchDelegate;\n }\n getListenerInfo() {\n if (this.mListenerInfo != null) {\n return this.mListenerInfo;\n }\n this.mListenerInfo = new View.ListenerInfo();\n return this.mListenerInfo;\n }\n addOnLayoutChangeListener(listener) {\n let li = this.getListenerInfo();\n if (li.mOnLayoutChangeListeners == null) {\n li.mOnLayoutChangeListeners = new ArrayList();\n }\n if (!li.mOnLayoutChangeListeners.contains(listener)) {\n li.mOnLayoutChangeListeners.add(listener);\n }\n }\n removeOnLayoutChangeListener(listener) {\n let li = this.mListenerInfo;\n if (li == null || li.mOnLayoutChangeListeners == null) {\n return;\n }\n li.mOnLayoutChangeListeners.remove(listener);\n }\n addOnAttachStateChangeListener(listener) {\n let li = this.getListenerInfo();\n if (li.mOnAttachStateChangeListeners == null) {\n li.mOnAttachStateChangeListeners\n = new CopyOnWriteArrayList();\n }\n li.mOnAttachStateChangeListeners.add(listener);\n }\n removeOnAttachStateChangeListener(listener) {\n let li = this.mListenerInfo;\n if (li == null || li.mOnAttachStateChangeListeners == null) {\n return;\n }\n li.mOnAttachStateChangeListeners.remove(listener);\n }\n setOnClickListener(l) {\n if (!this.isClickable()) {\n this.setClickable(true);\n }\n if (typeof l == \"function\") {\n l = View.OnClickListener.fromFunction(l);\n }\n this.getListenerInfo().mOnClickListener = l;\n }\n hasOnClickListeners() {\n let li = this.mListenerInfo;\n return (li != null && li.mOnClickListener != null);\n }\n setOnLongClickListener(l) {\n if (!this.isLongClickable()) {\n this.setLongClickable(true);\n }\n if (typeof l == \"function\") {\n l = View.OnLongClickListener.fromFunction(l);\n }\n this.getListenerInfo().mOnLongClickListener = l;\n }\n playSoundEffect(soundConstant) {\n }\n performHapticFeedback(feedbackConstant) {\n return false;\n }\n performClick(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n li.mOnClickListener.onClick(this);\n return true;\n }\n return false;\n }\n callOnClick() {\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n li.mOnClickListener.onClick(this);\n return true;\n }\n return false;\n }\n performLongClick() {\n let handled = false;\n let li = this.mListenerInfo;\n if (li != null && li.mOnLongClickListener != null) {\n handled = li.mOnLongClickListener.onLongClick(this);\n }\n return handled;\n }\n performButtonActionOnTouchDown(event) {\n return false;\n }\n checkForLongClick(delayOffset = 0) {\n if ((this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE) {\n this.mHasPerformedLongPress = false;\n if (this.mPendingCheckForLongPress == null) {\n this.mPendingCheckForLongPress = new CheckForLongPress(this);\n }\n this.mPendingCheckForLongPress.rememberWindowAttachCount();\n this.postDelayed(this.mPendingCheckForLongPress, view_2.ViewConfiguration.getLongPressTimeout() - delayOffset);\n }\n }\n setOnTouchListener(l) {\n if (typeof l == \"function\") {\n l = View.OnTouchListener.fromFunction(l);\n }\n this.getListenerInfo().mOnTouchListener = l;\n }\n isClickable() {\n return (this.mViewFlags & View.CLICKABLE) == View.CLICKABLE;\n }\n setClickable(clickable) {\n this.setFlags(clickable ? View.CLICKABLE : 0, View.CLICKABLE);\n }\n isLongClickable() {\n return (this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE;\n }\n setLongClickable(longClickable) {\n this.setFlags(longClickable ? View.LONG_CLICKABLE : 0, View.LONG_CLICKABLE);\n }\n setPressed(pressed) {\n const needsRefresh = pressed != ((this.mPrivateFlags & View.PFLAG_PRESSED) == View.PFLAG_PRESSED);\n if (pressed) {\n this.mPrivateFlags |= View.PFLAG_PRESSED;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_PRESSED;\n }\n if (needsRefresh) {\n this.refreshDrawableState();\n }\n this.dispatchSetPressed(pressed);\n }\n dispatchSetPressed(pressed) {\n }\n isPressed() {\n return (this.mPrivateFlags & View.PFLAG_PRESSED) == View.PFLAG_PRESSED;\n }\n setSelected(selected) {\n if (((this.mPrivateFlags & View.PFLAG_SELECTED) != 0) != selected) {\n this.mPrivateFlags = (this.mPrivateFlags & ~View.PFLAG_SELECTED) | (selected ? View.PFLAG_SELECTED : 0);\n if (!selected)\n this.resetPressedState();\n this.invalidate(true);\n this.refreshDrawableState();\n this.dispatchSetSelected(selected);\n }\n }\n dispatchSetSelected(selected) {\n }\n isSelected() {\n return (this.mPrivateFlags & View.PFLAG_SELECTED) != 0;\n }\n setActivated(activated) {\n if (((this.mPrivateFlags & View.PFLAG_ACTIVATED) != 0) != activated) {\n this.mPrivateFlags = (this.mPrivateFlags & ~View.PFLAG_ACTIVATED) | (activated ? View.PFLAG_ACTIVATED : 0);\n this.invalidate(true);\n this.refreshDrawableState();\n this.dispatchSetActivated(activated);\n }\n }\n dispatchSetActivated(activated) {\n }\n isActivated() {\n return (this.mPrivateFlags & View.PFLAG_ACTIVATED) != 0;\n }\n getViewTreeObserver() {\n if (this.mAttachInfo != null) {\n return this.mAttachInfo.mViewRootImpl.mTreeObserver;\n }\n if (this.mFloatingTreeObserver == null) {\n this.mFloatingTreeObserver = new view_2.ViewTreeObserver();\n }\n return this.mFloatingTreeObserver;\n }\n setLayoutDirection(layoutDirection) {\n }\n getLayoutDirection() {\n return View.LAYOUT_DIRECTION_LTR;\n }\n isLayoutRtl() {\n return (this.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);\n }\n getTextDirection() {\n return View.TEXT_DIRECTION_LTR;\n }\n setTextDirection(textDirection) {\n }\n getTextAlignment() {\n return View.TEXT_ALIGNMENT_DEFAULT;\n }\n setTextAlignment(textAlignment) {\n }\n getBaseline() {\n return -1;\n }\n isLayoutRequested() {\n return (this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT;\n }\n getLayoutParams() {\n return this.mLayoutParams;\n }\n setLayoutParams(params) {\n if (params == null) {\n throw new Error(\"Layout parameters cannot be null\");\n }\n this.mLayoutParams = params;\n let p = this.mParent;\n if (p instanceof view_2.ViewGroup) {\n p.onSetLayoutParams(this, params);\n }\n this.requestLayout();\n }\n isInLayout() {\n let viewRoot = this.getViewRootImpl();\n return (viewRoot != null && viewRoot.isInLayout());\n }\n requestLayout() {\n if (this.mMeasureCache != null)\n this.mMeasureCache.clear();\n if (this.mAttachInfo != null && this.mAttachInfo.mViewRequestingLayout == null) {\n let viewRoot = this.getViewRootImpl();\n if (viewRoot != null && viewRoot.isInLayout()) {\n if (!viewRoot.requestLayoutDuringLayout(this)) {\n return;\n }\n }\n this.mAttachInfo.mViewRequestingLayout = this;\n }\n this.mPrivateFlags |= View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n if (this.mParent != null && !this.mParent.isLayoutRequested()) {\n this.mParent.requestLayout();\n }\n if (this.mAttachInfo != null && this.mAttachInfo.mViewRequestingLayout == this) {\n this.mAttachInfo.mViewRequestingLayout = null;\n }\n }\n forceLayout() {\n if (this.mMeasureCache != null)\n this.mMeasureCache.clear();\n this.mPrivateFlags |= View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n }\n isLaidOut() {\n return (this.mPrivateFlags3 & View.PFLAG3_IS_LAID_OUT) == View.PFLAG3_IS_LAID_OUT;\n }\n layout(l, t, r, b) {\n if ((this.mPrivateFlags3 & View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) {\n this.onMeasure(this.mOldWidthMeasureSpec, this.mOldHeightMeasureSpec);\n this.mPrivateFlags3 &= ~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n let oldL = this.mLeft;\n let oldT = this.mTop;\n let oldB = this.mBottom;\n let oldR = this.mRight;\n let changed = this.setFrame(l, t, r, b);\n if (changed || (this.mPrivateFlags & View.PFLAG_LAYOUT_REQUIRED) == View.PFLAG_LAYOUT_REQUIRED) {\n this.onLayout(changed, l, t, r, b);\n this.mPrivateFlags &= ~View.PFLAG_LAYOUT_REQUIRED;\n let li = this.mListenerInfo;\n if (li != null && li.mOnLayoutChangeListeners != null) {\n let listenersCopy = li.mOnLayoutChangeListeners.clone();\n let numListeners = listenersCopy.size();\n for (let i = 0; i < numListeners; ++i) {\n listenersCopy.get(i).onLayoutChange(this, l, t, r, b, oldL, oldT, oldR, oldB);\n }\n }\n }\n this.mPrivateFlags &= ~View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags3 |= View.PFLAG3_IS_LAID_OUT;\n }\n onLayout(changed, left, top, right, bottom) {\n }\n setFrame(left, top, right, bottom) {\n let changed = false;\n if (View.DBG) {\n Log.i(\"View\", this + \" View.setFrame(\" + left + \",\" + top + \",\"\n + right + \",\" + bottom + \")\");\n }\n if (this.mLeft != left || this.mRight != right || this.mTop != top || this.mBottom != bottom) {\n changed = true;\n let drawn = this.mPrivateFlags & View.PFLAG_DRAWN;\n let oldWidth = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n let newWidth = right - left;\n let newHeight = bottom - top;\n let sizeChanged = (newWidth != oldWidth) || (newHeight != oldHeight);\n this.invalidate(sizeChanged);\n this.mLeft = left;\n this.mTop = top;\n this.mRight = right;\n this.mBottom = bottom;\n this.mPrivateFlags |= View.PFLAG_HAS_BOUNDS;\n if (sizeChanged) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n if (this.mTransformationInfo != null) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n }\n this.sizeChange(newWidth, newHeight, oldWidth, oldHeight);\n }\n if ((this.mViewFlags & View.VISIBILITY_MASK) == View.VISIBLE) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(sizeChanged);\n }\n this.mPrivateFlags |= drawn;\n this.mBackgroundSizeChanged = true;\n }\n return changed;\n }\n sizeChange(newWidth, newHeight, oldWidth, oldHeight) {\n this.onSizeChanged(newWidth, newHeight, oldWidth, oldHeight);\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().setRight(newWidth);\n this.mOverlay.getOverlayView().setBottom(newHeight);\n }\n }\n getHitRect(outRect) {\n this.updateMatrix();\n const info = this.mTransformationInfo;\n if (info == null || info.mMatrixIsIdentity || this.mAttachInfo == null) {\n outRect.set(this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n else {\n const tmpRect = this.mAttachInfo.mTmpTransformRect;\n tmpRect.set(0, 0, this.getWidth(), this.getHeight());\n info.mMatrix.mapRect(tmpRect);\n outRect.set(Math.floor(tmpRect.left) + this.mLeft, Math.floor(tmpRect.top) + this.mTop, Math.floor(tmpRect.right) + this.mLeft, Math.floor(tmpRect.bottom) + this.mTop);\n }\n }\n getFocusedRect(r) {\n this.getDrawingRect(r);\n }\n getDrawingRect(outRect) {\n outRect.left = this.mScrollX;\n outRect.top = this.mScrollY;\n outRect.right = this.mScrollX + (this.mRight - this.mLeft);\n outRect.bottom = this.mScrollY + (this.mBottom - this.mTop);\n }\n getGlobalVisibleRect(r, globalOffset = null) {\n let width = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n if (width > 0 && height > 0) {\n r.set(0, 0, width, height);\n if (globalOffset != null) {\n globalOffset.set(-this.mScrollX, -this.mScrollY);\n }\n return this.mParent == null || this.mParent.getChildVisibleRect(this, r, globalOffset);\n }\n return false;\n }\n getLocationOnScreen(location) {\n this.getLocationInWindow(location);\n const info = this.mAttachInfo;\n }\n getLocationInWindow(location) {\n if (location == null || location.length < 2) {\n throw Error(`new IllegalArgumentException(\"location must be an array of two integers\")`);\n }\n if (this.mAttachInfo == null) {\n location[0] = location[1] = 0;\n return;\n }\n let position = this.mAttachInfo.mTmpTransformLocation;\n position[0] = position[1] = 0.0;\n if (!this.hasIdentityMatrix()) {\n this.getMatrix().mapPoints(position);\n }\n position[0] += this.mLeft;\n position[1] += this.mTop;\n let viewParent = this.mParent;\n while (viewParent instanceof View) {\n const view = viewParent;\n position[0] -= view.mScrollX;\n position[1] -= view.mScrollY;\n if (!view.hasIdentityMatrix()) {\n view.getMatrix().mapPoints(position);\n }\n position[0] += view.mLeft;\n position[1] += view.mTop;\n viewParent = view.mParent;\n }\n location[0] = Math.floor((position[0] + 0.5));\n location[1] = Math.floor((position[1] + 0.5));\n }\n getWindowVisibleDisplayFrame(outRect) {\n if (this.mAttachInfo != null) {\n let rootView = this.mAttachInfo.mRootView;\n let xy = [0, 0];\n rootView.getLocationOnScreen(xy);\n outRect.set(xy[0], xy[1], rootView.getWidth() + xy[0], rootView.getHeight() + xy[1]);\n return;\n }\n let dm = Resources.getSystem().getDisplayMetrics();\n outRect.set(0, 0, dm.widthPixels, dm.heightPixels);\n }\n isVisibleToUser(boundInView = null) {\n if (this.mAttachInfo != null) {\n if (this.mAttachInfo.mWindowVisibility != View.VISIBLE) {\n return false;\n }\n let current = this;\n while (current instanceof View) {\n let view = current;\n if (view.getAlpha() <= 0 || view.getTransitionAlpha() <= 0 || view.getVisibility() != View.VISIBLE) {\n return false;\n }\n current = view.mParent;\n }\n let visibleRect = this.mAttachInfo.mTmpInvalRect;\n let offset = this.mAttachInfo.mPoint;\n if (!this.getGlobalVisibleRect(visibleRect, offset)) {\n return false;\n }\n if (boundInView != null) {\n visibleRect.offset(-offset.x, -offset.y);\n return boundInView.intersect(visibleRect);\n }\n return true;\n }\n return false;\n }\n getMeasuredWidth() {\n return this.mMeasuredWidth & View.MEASURED_SIZE_MASK;\n }\n getMeasuredWidthAndState() {\n return this.mMeasuredWidth;\n }\n getMeasuredHeight() {\n return this.mMeasuredHeight & View.MEASURED_SIZE_MASK;\n }\n getMeasuredHeightAndState() {\n return this.mMeasuredHeight;\n }\n getMeasuredState() {\n return (this.mMeasuredWidth & View.MEASURED_STATE_MASK)\n | ((this.mMeasuredHeight >> View.MEASURED_HEIGHT_STATE_SHIFT)\n & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n }\n measure(widthMeasureSpec, heightMeasureSpec) {\n let key = widthMeasureSpec + ',' + heightMeasureSpec;\n if (this.mMeasureCache == null)\n this.mMeasureCache = new Map();\n if ((this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT ||\n widthMeasureSpec != this.mOldWidthMeasureSpec ||\n heightMeasureSpec != this.mOldHeightMeasureSpec) {\n this.mPrivateFlags &= ~View.PFLAG_MEASURED_DIMENSION_SET;\n let cacheValue = (this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT ? null : this.mMeasureCache.get(key);\n if (cacheValue == null) {\n this.onMeasure(widthMeasureSpec, heightMeasureSpec);\n this.mPrivateFlags3 &= ~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n else {\n this.setMeasuredDimension(cacheValue[0], cacheValue[1]);\n this.mPrivateFlags3 |= View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n if ((this.mPrivateFlags & View.PFLAG_MEASURED_DIMENSION_SET) != View.PFLAG_MEASURED_DIMENSION_SET) {\n throw new Error(\"onMeasure() did not set the\"\n + \" measured dimension by calling\"\n + \" setMeasuredDimension()\");\n }\n this.mPrivateFlags |= View.PFLAG_LAYOUT_REQUIRED;\n }\n this.mOldWidthMeasureSpec = widthMeasureSpec;\n this.mOldHeightMeasureSpec = heightMeasureSpec;\n this.mMeasureCache.set(key, [this.mMeasuredWidth, this.mMeasuredHeight]);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.setMeasuredDimension(View.getDefaultSize(this.getSuggestedMinimumWidth(), widthMeasureSpec), View.getDefaultSize(this.getSuggestedMinimumHeight(), heightMeasureSpec));\n }\n setMeasuredDimension(measuredWidth, measuredHeight) {\n this.mMeasuredWidth = measuredWidth;\n this.mMeasuredHeight = measuredHeight;\n this.mPrivateFlags |= View.PFLAG_MEASURED_DIMENSION_SET;\n }\n static combineMeasuredStates(curState, newState) {\n return curState | newState;\n }\n static resolveSize(size, measureSpec) {\n return View.resolveSizeAndState(size, measureSpec, 0) & View.MEASURED_SIZE_MASK;\n }\n static resolveSizeAndState(size, measureSpec, childMeasuredState) {\n let MeasureSpec = View.MeasureSpec;\n let result = size;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = size;\n break;\n case MeasureSpec.AT_MOST:\n if (specSize < size) {\n result = specSize | View.MEASURED_STATE_TOO_SMALL;\n }\n else {\n result = size;\n }\n break;\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result | (childMeasuredState & View.MEASURED_STATE_MASK);\n }\n static getDefaultSize(size, measureSpec) {\n let MeasureSpec = View.MeasureSpec;\n let result = size;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = size;\n break;\n case MeasureSpec.AT_MOST:\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n getSuggestedMinimumHeight() {\n return (this.mBackground == null) ? this.mMinHeight :\n Math.max(this.mMinHeight, this.mBackground.getMinimumHeight());\n }\n getSuggestedMinimumWidth() {\n return (this.mBackground == null) ? this.mMinWidth :\n Math.max(this.mMinWidth, this.mBackground.getMinimumWidth());\n }\n getMinimumHeight() {\n return this.mMinHeight;\n }\n setMinimumHeight(minHeight) {\n this.mMinHeight = minHeight;\n this.requestLayout();\n }\n getMinimumWidth() {\n return this.mMinWidth;\n }\n setMinimumWidth(minWidth) {\n this.mMinWidth = minWidth;\n this.requestLayout();\n }\n getAnimation() {\n return this.mCurrentAnimation;\n }\n startAnimation(animation) {\n animation.setStartTime(Animation.START_ON_FIRST_FRAME);\n this.setAnimation(animation);\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n clearAnimation() {\n if (this.mCurrentAnimation != null) {\n this.mCurrentAnimation.detach();\n }\n this.mCurrentAnimation = null;\n this.invalidateParentIfNeeded();\n }\n setAnimation(animation) {\n this.mCurrentAnimation = animation;\n if (animation != null) {\n animation.reset();\n }\n }\n onAnimationStart() {\n this.mPrivateFlags |= View.PFLAG_ANIMATION_STARTED;\n }\n onAnimationEnd() {\n this.mPrivateFlags &= ~View.PFLAG_ANIMATION_STARTED;\n }\n onSetAlpha(alpha) {\n return false;\n }\n _invalidateRect(l, t, r, b) {\n if (this.skipInvalidate()) {\n return;\n }\n if ((this.mPrivateFlags & (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS)) == (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS) ||\n (this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == View.PFLAG_DRAWING_CACHE_VALID ||\n (this.mPrivateFlags & View.PFLAG_INVALIDATED) != View.PFLAG_INVALIDATED) {\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n this.mPrivateFlags |= View.PFLAG_DIRTY;\n const p = this.mParent;\n const ai = this.mAttachInfo;\n if (p != null && ai != null && l < r && t < b) {\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const tmpr = ai.mTmpInvalRect;\n tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);\n p.invalidateChild(this, tmpr);\n }\n }\n }\n _invalidateCache(invalidateCache = true) {\n if (this.skipInvalidate()) {\n return;\n }\n if ((this.mPrivateFlags & (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS)) == (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS) ||\n (invalidateCache && (this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == View.PFLAG_DRAWING_CACHE_VALID) ||\n (this.mPrivateFlags & View.PFLAG_INVALIDATED) != View.PFLAG_INVALIDATED || this.isOpaque() != this.mLastIsOpaque) {\n this.mLastIsOpaque = this.isOpaque();\n this.mPrivateFlags &= ~View.PFLAG_DRAWN;\n this.mPrivateFlags |= View.PFLAG_DIRTY;\n if (invalidateCache) {\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n }\n const ai = this.mAttachInfo;\n const p = this.mParent;\n if (p != null && ai != null) {\n const r = ai.mTmpInvalRect;\n r.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n p.invalidateChild(this, r);\n }\n }\n }\n invalidate(...args) {\n if (args.length === 0) {\n this._invalidateCache(true);\n }\n else if (args.length === 1 && args[0] instanceof Rect) {\n let rect = args[0];\n this._invalidateRect(rect.left, rect.top, rect.right, rect.bottom);\n }\n else if (args.length === 1) {\n this._invalidateCache(args[0]);\n }\n else if (args.length === 4) {\n this._invalidateRect(...args);\n }\n }\n invalidateViewProperty(invalidateParent, forceRedraw) {\n if ((this.mPrivateFlags & View.PFLAG_DRAW_ANIMATION) == View.PFLAG_DRAW_ANIMATION) {\n if (invalidateParent) {\n this.invalidateParentCaches();\n }\n if (forceRedraw) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n }\n this.invalidate(false);\n }\n else {\n const ai = this.mAttachInfo;\n const p = this.mParent;\n if (p != null && ai != null) {\n const r = ai.mTmpInvalRect;\n r.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n if (this.mParent instanceof view_2.ViewGroup) {\n this.mParent.invalidateChildFast(this, r);\n }\n else {\n this.mParent.invalidateChild(this, r);\n }\n }\n }\n }\n invalidateParentCaches() {\n if (this.mParent instanceof View) {\n this.mParent.mPrivateFlags |= View.PFLAG_INVALIDATED;\n }\n }\n invalidateParentIfNeeded() {\n }\n postInvalidate(l, t, r, b) {\n this.postInvalidateDelayed(0, l, t, r, b);\n }\n postInvalidateDelayed(delayMilliseconds, left, top, right, bottom) {\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (!Number.isInteger(left) || !Number.isInteger(top) || !Number.isInteger(right) || !Number.isInteger(bottom)) {\n attachInfo.mViewRootImpl.dispatchInvalidateDelayed(this, delayMilliseconds);\n }\n else {\n const info = View.AttachInfo.InvalidateInfo.obtain();\n info.target = this;\n info.left = left;\n info.top = top;\n info.right = right;\n info.bottom = bottom;\n attachInfo.mViewRootImpl.dispatchInvalidateRectDelayed(info, delayMilliseconds);\n }\n }\n }\n postInvalidateOnAnimation(left, top, right, bottom) {\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (!Number.isInteger(left) || !Number.isInteger(top) || !Number.isInteger(right) || !Number.isInteger(bottom)) {\n attachInfo.mViewRootImpl.dispatchInvalidateOnAnimation(this);\n }\n else {\n const info = View.AttachInfo.InvalidateInfo.obtain();\n info.target = this;\n info.left = left;\n info.top = top;\n info.right = right;\n info.bottom = bottom;\n attachInfo.mViewRootImpl.dispatchInvalidateRectOnAnimation(info);\n }\n }\n }\n skipInvalidate() {\n return (this.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE\n && this.mCurrentAnimation == null;\n }\n isOpaque() {\n return (this.mPrivateFlags & View.PFLAG_OPAQUE_MASK) == View.PFLAG_OPAQUE_MASK &&\n this.getFinalAlpha() >= 1;\n }\n computeOpaqueFlags() {\n if (this.mBackground != null && this.mBackground.getOpacity() == PixelFormat.OPAQUE) {\n this.mPrivateFlags |= View.PFLAG_OPAQUE_BACKGROUND;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_OPAQUE_BACKGROUND;\n }\n const flags = this.mViewFlags;\n if (((flags & View.SCROLLBARS_VERTICAL) == 0 && (flags & View.SCROLLBARS_HORIZONTAL) == 0)) {\n this.mPrivateFlags |= View.PFLAG_OPAQUE_SCROLLBARS;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_OPAQUE_SCROLLBARS;\n }\n }\n setLayerType(layerType) {\n if (layerType < View.LAYER_TYPE_NONE || layerType > View.LAYER_TYPE_SOFTWARE) {\n throw Error(`new IllegalArgumentException(\"Layer type can only be one of: LAYER_TYPE_NONE, \" + \"LAYER_TYPE_SOFTWARE\")`);\n }\n if (layerType == this.mLayerType) {\n return;\n }\n switch (this.mLayerType) {\n case View.LAYER_TYPE_SOFTWARE:\n this.destroyDrawingCache();\n break;\n default:\n break;\n }\n this.mLayerType = layerType;\n const layerDisabled = this.mLayerType == View.LAYER_TYPE_NONE;\n this.mLocalDirtyRect = layerDisabled ? null : new Rect();\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n getLayerType() {\n return this.mLayerType;\n }\n setClipBounds(clipBounds) {\n if (clipBounds != null) {\n if (clipBounds.equals(this.mClipBounds)) {\n return;\n }\n if (this.mClipBounds == null) {\n this.invalidate();\n this.mClipBounds = new Rect(clipBounds);\n }\n else {\n this.invalidate(Math.min(this.mClipBounds.left, clipBounds.left), Math.min(this.mClipBounds.top, clipBounds.top), Math.max(this.mClipBounds.right, clipBounds.right), Math.max(this.mClipBounds.bottom, clipBounds.bottom));\n this.mClipBounds.set(clipBounds);\n }\n }\n else {\n if (this.mClipBounds != null) {\n this.invalidate();\n this.mClipBounds = null;\n }\n }\n }\n getClipBounds() {\n return (this.mClipBounds != null) ? new Rect(this.mClipBounds) : null;\n }\n setCornerRadius(radiusTopLeft, radiusTopRight = radiusTopLeft, radiusBottomRight = radiusTopRight, radiusBottomLeft = radiusBottomRight) {\n this.setCornerRadiusTopLeft(radiusTopLeft);\n this.setCornerRadiusTopRight(radiusTopRight);\n this.setCornerRadiusBottomRight(radiusBottomRight);\n this.setCornerRadiusBottomLeft(radiusBottomLeft);\n }\n setCornerRadiusTopLeft(value) {\n if (this.mCornerRadiusTopLeft != value) {\n this.mCornerRadiusTopLeft = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusTopLeft() {\n return this.mCornerRadiusTopLeft;\n }\n setCornerRadiusTopRight(value) {\n if (this.mCornerRadiusTopRight != value) {\n this.mCornerRadiusTopRight = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusTopRight() {\n return this.mCornerRadiusTopRight;\n }\n setCornerRadiusBottomRight(value) {\n if (this.mCornerRadiusBottomRight != value) {\n this.mCornerRadiusBottomRight = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusBottomRight() {\n return this.mCornerRadiusBottomRight;\n }\n setCornerRadiusBottomLeft(value) {\n if (this.mCornerRadiusBottomLeft != value) {\n this.mCornerRadiusBottomLeft = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusBottomLeft() {\n return this.mCornerRadiusBottomLeft;\n }\n setShadowView(radius, dx, dy, color) {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n this.mShadowPaint.setShadowLayer(radius, dx, dy, color);\n this.invalidate();\n }\n getDrawingTime() {\n return this.getViewRootImpl() != null ? this.getViewRootImpl().mDrawingTime : 0;\n }\n drawFromParent(canvas, parent, drawingTime) {\n let useDisplayListProperties = false;\n let more = false;\n let childHasIdentityMatrix = this.hasIdentityMatrix();\n let flags = parent.mGroupFlags;\n if ((flags & view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION) == view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION) {\n parent.getChildTransformation().clear();\n parent.mGroupFlags &= ~view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n let transformToApply = null;\n let concatMatrix = false;\n let scalingRequired = false;\n let caching = false;\n let layerType = this.getLayerType();\n const hardwareAccelerated = false;\n const nativeAccelerated = canvas.isNativeAccelerated();\n if ((flags & view_2.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) != 0 ||\n (flags & view_2.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) != 0) {\n caching = true;\n }\n else {\n caching = (layerType != View.LAYER_TYPE_NONE) || hardwareAccelerated || nativeAccelerated;\n }\n const a = this.getAnimation();\n if (a != null) {\n more = this.drawAnimation(parent, drawingTime, a, scalingRequired);\n concatMatrix = a.willChangeTransformationMatrix();\n if (concatMatrix) {\n this.mPrivateFlags3 |= View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM;\n }\n transformToApply = parent.getChildTransformation();\n }\n else {\n if (!useDisplayListProperties && (flags & view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n const t = parent.getChildTransformation();\n const hasTransform = parent.getChildStaticTransformation(this, t);\n if (hasTransform) {\n const transformType = t.getTransformationType();\n transformToApply = transformType != Transformation.TYPE_IDENTITY ? t : null;\n concatMatrix = (transformType & Transformation.TYPE_MATRIX) != 0;\n }\n }\n }\n concatMatrix = !childHasIdentityMatrix || concatMatrix;\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (!concatMatrix &&\n (flags & (view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS |\n view_2.ViewGroup.FLAG_CLIP_CHILDREN)) == view_2.ViewGroup.FLAG_CLIP_CHILDREN &&\n canvas.quickReject(this.mLeft, this.mTop, this.mRight, this.mBottom) &&\n (this.mPrivateFlags & View.PFLAG_DRAW_ANIMATION) == 0) {\n this.mPrivateFlags2 |= View.PFLAG2_VIEW_QUICK_REJECTED;\n return more;\n }\n this.mPrivateFlags2 &= ~View.PFLAG2_VIEW_QUICK_REJECTED;\n let cache = null;\n if (caching) {\n if (layerType != View.LAYER_TYPE_NONE) {\n layerType = View.LAYER_TYPE_SOFTWARE;\n this.buildDrawingCache(true);\n }\n cache = this.getDrawingCache(true);\n }\n this.computeScroll();\n let sx = this.mScrollX;\n let sy = this.mScrollY;\n this.requestSyncBoundToElement();\n let hasNoCache = cache == null;\n let offsetForScroll = cache == null;\n let restoreTo = canvas.save();\n if (offsetForScroll) {\n canvas.translate(this.mLeft - sx, this.mTop - sy);\n }\n else {\n canvas.translate(this.mLeft, this.mTop);\n }\n let alpha = this.getAlpha() * this.getTransitionAlpha();\n if (transformToApply != null || alpha < 1 || !this.hasIdentityMatrix() || (this.mPrivateFlags3 & View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) == View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) {\n if (transformToApply != null || !childHasIdentityMatrix) {\n let transX = 0;\n let transY = 0;\n if (offsetForScroll) {\n transX = -sx;\n transY = -sy;\n }\n if (transformToApply != null) {\n if (concatMatrix) {\n canvas.translate(-transX, -transY);\n canvas.concat(transformToApply.getMatrix());\n canvas.translate(transX, transY);\n parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n let transformAlpha = transformToApply.getAlpha();\n if (transformAlpha < 1) {\n alpha *= transformAlpha;\n parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n }\n if (!childHasIdentityMatrix && !useDisplayListProperties) {\n canvas.translate(-transX, -transY);\n canvas.concat(this.getMatrix());\n canvas.translate(transX, transY);\n }\n }\n if (alpha < 1 || (this.mPrivateFlags3 & View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) == View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) {\n if (alpha < 1) {\n this.mPrivateFlags3 |= View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;\n }\n else {\n this.mPrivateFlags3 &= ~View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;\n }\n parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n if (hasNoCache) {\n const multipliedAlpha = Math.floor((255 * alpha));\n if (!this.onSetAlpha(multipliedAlpha)) {\n canvas.multiplyGlobalAlpha(alpha);\n }\n else {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n }\n }\n }\n }\n else if ((this.mPrivateFlags & View.PFLAG_ALPHA_SET) == View.PFLAG_ALPHA_SET) {\n this.onSetAlpha(255);\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n }\n if (this.mShadowPaint != null)\n this.drawShadow(canvas);\n if ((flags & view_2.ViewGroup.FLAG_CLIP_CHILDREN) == view_2.ViewGroup.FLAG_CLIP_CHILDREN &&\n !useDisplayListProperties && cache == null) {\n if (offsetForScroll) {\n canvas.clipRect(sx, sy, sx + (this.mRight - this.mLeft), sy + (this.mBottom - this.mTop), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n else {\n if (!scalingRequired || cache == null) {\n canvas.clipRect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop, this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n else {\n canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight(), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n }\n }\n if (hasNoCache) {\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) == View.PFLAG_SKIP_DRAW) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n this.dispatchDraw(canvas);\n }\n else {\n this.draw(canvas);\n }\n }\n else if (cache != null) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n canvas.multiplyGlobalAlpha(alpha);\n if (layerType == View.LAYER_TYPE_NONE) {\n if (alpha < 1) {\n parent.mGroupFlags |= view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;\n }\n else if ((flags & view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE) != 0) {\n parent.mGroupFlags &= ~view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;\n }\n }\n canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight(), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n canvas.drawCanvas(cache, 0, 0);\n }\n if (restoreTo >= 0) {\n canvas.restoreToCount(restoreTo);\n }\n if (a != null && !more) {\n if (!hardwareAccelerated && !a.getFillAfter()) {\n this.onSetAlpha(255);\n }\n parent.finishAnimatingView(this, a);\n }\n return more;\n }\n drawShadow(canvas) {\n let shadowPaint = this.mShadowPaint;\n if (!shadowPaint || !shadowPaint.shadowRadius)\n return;\n let color = shadowPaint.shadowColor;\n if (!this.mShadowDrawable) {\n let drawable = new RoundRectDrawable(shadowPaint.shadowColor, this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomLeft, this.mCornerRadiusBottomRight);\n this.mShadowDrawable = new ShadowDrawable(drawable, shadowPaint.shadowRadius, shadowPaint.shadowDx, shadowPaint.shadowDy, shadowPaint.shadowColor);\n }\n this.mShadowDrawable.draw(canvas);\n }\n draw(canvas) {\n if (this.mClipBounds != null) {\n canvas.clipRect(this.mClipBounds);\n }\n let privateFlags = this.mPrivateFlags;\n const dirtyOpaque = (privateFlags & View.PFLAG_DIRTY_MASK) == View.PFLAG_DIRTY_OPAQUE &&\n (this.getViewRootImpl() == null || !this.getViewRootImpl().mIgnoreDirtyState);\n this.mPrivateFlags = (privateFlags & ~View.PFLAG_DIRTY_MASK) | View.PFLAG_DRAWN;\n if (!dirtyOpaque) {\n let background = this.mBackground;\n if (background != null) {\n let scrollX = this.mScrollX;\n let scrollY = this.mScrollY;\n if (this.mBackgroundSizeChanged) {\n background.setBounds(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n this.mBackgroundSizeChanged = false;\n }\n if ((scrollX | scrollY) == 0) {\n background.draw(canvas);\n }\n else {\n canvas.translate(scrollX, scrollY);\n background.draw(canvas);\n canvas.translate(-scrollX, -scrollY);\n }\n }\n }\n if (!dirtyOpaque)\n this.onDraw(canvas);\n this.dispatchDraw(canvas);\n this.onDrawScrollBars(canvas);\n if (this.mOverlay != null && !this.mOverlay.isEmpty()) {\n this.mOverlay.getOverlayView().dispatchDraw(canvas);\n }\n }\n onDraw(canvas) {\n }\n dispatchDraw(canvas) {\n }\n drawAnimation(parent, drawingTime, a, scalingRequired) {\n let invalidationTransform;\n const flags = parent.mGroupFlags;\n const initialized = a.isInitialized();\n if (!initialized) {\n a.initialize(this.mRight - this.mLeft, this.mBottom - this.mTop, parent.getWidth(), parent.getHeight());\n a.initializeInvalidateRegion(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n if (this.mAttachInfo != null)\n a.setListenerHandler(this.mAttachInfo.mHandler);\n this.onAnimationStart();\n }\n const t = parent.getChildTransformation();\n let more = a.getTransformation(drawingTime, t, 1);\n invalidationTransform = t;\n if (more) {\n if (!a.willChangeBounds()) {\n if ((flags & (view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE | view_2.ViewGroup.FLAG_ANIMATION_DONE)) == view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE) {\n parent.mGroupFlags |= view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n else if ((flags & view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED) == 0) {\n parent.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION;\n parent.invalidate(this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n }\n else {\n if (parent.mInvalidateRegion == null) {\n parent.mInvalidateRegion = new RectF();\n }\n const region = parent.mInvalidateRegion;\n a.getInvalidateRegion(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop, region, invalidationTransform);\n parent.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION;\n const left = this.mLeft + Math.floor(region.left);\n const top = this.mTop + Math.floor(region.top);\n parent.invalidate(left, top, left + Math.floor((region.width() + .5)), top + Math.floor((region.height() + .5)));\n }\n }\n return more;\n }\n onDrawScrollBars(canvas) {\n const cache = this.mScrollCache;\n if (cache != null) {\n let state = cache.state;\n if (state == ScrollabilityCache.OFF) {\n return;\n }\n let invalidate = false;\n if (state == ScrollabilityCache.FADING) {\n cache._computeAlphaToScrollBar();\n invalidate = true;\n }\n else {\n cache.scrollBar.setAlpha(255);\n }\n const viewFlags = this.mViewFlags;\n const drawHorizontalScrollBar = (viewFlags & View.SCROLLBARS_HORIZONTAL) == View.SCROLLBARS_HORIZONTAL;\n const drawVerticalScrollBar = (viewFlags & View.SCROLLBARS_VERTICAL) == View.SCROLLBARS_VERTICAL\n && !this.isVerticalScrollBarHidden();\n if (drawVerticalScrollBar || drawHorizontalScrollBar) {\n const width = this.mRight - this.mLeft;\n const height = this.mBottom - this.mTop;\n const scrollBar = cache.scrollBar;\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const inside = true;\n let left;\n let top;\n let right;\n let bottom;\n if (drawHorizontalScrollBar) {\n let size = scrollBar.getSize(false);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n scrollBar.setParameters(this.computeHorizontalScrollRange(), this.computeHorizontalScrollOffset(), this.computeHorizontalScrollExtent(), false);\n const verticalScrollBarGap = drawVerticalScrollBar ?\n this.getVerticalScrollbarWidth() : 0;\n top = scrollY + height - size;\n left = scrollX + (this.mPaddingLeft);\n right = scrollX + width - -verticalScrollBarGap;\n bottom = top + size;\n this.onDrawHorizontalScrollBar(canvas, scrollBar, left, top, right, bottom);\n if (invalidate) {\n this.invalidate(left, top, right, bottom);\n }\n }\n if (drawVerticalScrollBar) {\n let size = scrollBar.getSize(true);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n scrollBar.setParameters(this.computeVerticalScrollRange(), this.computeVerticalScrollOffset(), this.computeVerticalScrollExtent(), true);\n left = scrollX + width - size;\n top = scrollY + (this.mPaddingTop);\n right = left + size;\n bottom = scrollY + height;\n this.onDrawVerticalScrollBar(canvas, scrollBar, left, top, right, bottom);\n if (invalidate) {\n this.invalidate(left, top, right, bottom);\n }\n }\n }\n }\n }\n isVerticalScrollBarHidden() {\n return false;\n }\n onDrawHorizontalScrollBar(canvas, scrollBar, l, t, r, b) {\n scrollBar.setBounds(l, t, r, b);\n scrollBar.draw(canvas);\n }\n onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b) {\n scrollBar.setBounds(l, t, r, b);\n scrollBar.draw(canvas);\n }\n isHardwareAccelerated() {\n return false;\n }\n setDrawingCacheEnabled(enabled) {\n this.mCachingFailed = false;\n this.setFlags(enabled ? View.DRAWING_CACHE_ENABLED : 0, View.DRAWING_CACHE_ENABLED);\n }\n isDrawingCacheEnabled() {\n return (this.mViewFlags & View.DRAWING_CACHE_ENABLED) == View.DRAWING_CACHE_ENABLED;\n }\n getDrawingCache(autoScale = false) {\n if ((this.mViewFlags & View.WILL_NOT_CACHE_DRAWING) == View.WILL_NOT_CACHE_DRAWING) {\n return null;\n }\n if ((this.mViewFlags & View.DRAWING_CACHE_ENABLED) == View.DRAWING_CACHE_ENABLED) {\n this.buildDrawingCache(autoScale);\n }\n return this.mUnscaledDrawingCache;\n }\n setDrawingCacheBackgroundColor(color) {\n if (color != this.mDrawingCacheBackgroundColor) {\n this.mDrawingCacheBackgroundColor = color;\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n }\n }\n getDrawingCacheBackgroundColor() {\n return this.mDrawingCacheBackgroundColor;\n }\n destroyDrawingCache() {\n if (this.mUnscaledDrawingCache != null) {\n this.mUnscaledDrawingCache.recycle();\n this.mUnscaledDrawingCache = null;\n }\n }\n buildDrawingCache(autoScale = false) {\n if ((this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == 0 || this.mUnscaledDrawingCache == null) {\n this.mCachingFailed = false;\n let width = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n const attachInfo = this.mAttachInfo;\n const drawingCacheBackgroundColor = this.mDrawingCacheBackgroundColor;\n const opaque = drawingCacheBackgroundColor != 0 || this.isOpaque();\n const projectedBitmapSize = width * height * 4;\n const drawingCacheSize = view_2.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();\n if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) {\n if (width > 0 && height > 0) {\n Log.w(View.VIEW_LOG_TAG, \"View too large to fit into drawing cache, needs \" + projectedBitmapSize + \" bytes, only \" + drawingCacheSize + \" available\");\n }\n this.destroyDrawingCache();\n this.mCachingFailed = true;\n return;\n }\n if (this.mUnscaledDrawingCache &&\n (this.mUnscaledDrawingCache.getWidth() !== width || this.mUnscaledDrawingCache.getHeight() !== height)) {\n this.mUnscaledDrawingCache.recycle();\n this.mUnscaledDrawingCache = null;\n }\n if (this.mUnscaledDrawingCache) {\n this.mUnscaledDrawingCache.clearColor();\n }\n else {\n this.mUnscaledDrawingCache = new Canvas(width, height);\n }\n const canvas = this.mUnscaledDrawingCache;\n this.computeScroll();\n const restoreCount = canvas.save();\n canvas.translate(-this.mScrollX, -this.mScrollY);\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (this.mAttachInfo == null || this.mLayerType != View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= View.PFLAG_DRAWING_CACHE_VALID;\n }\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) == View.PFLAG_SKIP_DRAW) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n this.dispatchDraw(canvas);\n if (this.mOverlay != null && !this.mOverlay.isEmpty()) {\n this.mOverlay.getOverlayView().draw(canvas);\n }\n }\n else {\n this.draw(canvas);\n }\n canvas.restoreToCount(restoreCount);\n }\n }\n setWillNotDraw(willNotDraw) {\n this.setFlags(willNotDraw ? View.WILL_NOT_DRAW : 0, View.DRAW_MASK);\n }\n willNotDraw() {\n return (this.mViewFlags & View.DRAW_MASK) == View.WILL_NOT_DRAW;\n }\n setWillNotCacheDrawing(willNotCacheDrawing) {\n this.setFlags(willNotCacheDrawing ? View.WILL_NOT_CACHE_DRAWING : 0, View.WILL_NOT_CACHE_DRAWING);\n }\n willNotCacheDrawing() {\n return (this.mViewFlags & View.WILL_NOT_CACHE_DRAWING) == View.WILL_NOT_CACHE_DRAWING;\n }\n drawableSizeChange(who) {\n if (who === this.mBackground) {\n let w = who.getIntrinsicWidth();\n if (w < 0)\n w = this.mBackgroundWidth;\n let h = who.getIntrinsicHeight();\n if (h < 0)\n h = this.mBackgroundHeight;\n if (w != this.mBackgroundWidth || h != this.mBackgroundHeight) {\n let padding = new Rect();\n if (who.getPadding(padding)) {\n this.setPadding(padding.left, padding.top, padding.right, padding.bottom);\n }\n this.mBackgroundWidth = w;\n this.mBackgroundHeight = h;\n this.requestLayout();\n }\n }\n else if (this.verifyDrawable(who)) {\n this.requestLayout();\n }\n }\n invalidateDrawable(drawable) {\n if (this.verifyDrawable(drawable)) {\n const dirty = drawable.getBounds();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n }\n scheduleDrawable(who, what, when) {\n if (this.verifyDrawable(who) && what != null) {\n const delay = when - SystemClock.uptimeMillis();\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.postAtTime(what, who, when);\n }\n else {\n view_2.ViewRootImpl.getRunQueue().postDelayed(what, delay);\n }\n }\n }\n unscheduleDrawable(who, what) {\n if (this.verifyDrawable(who) && what != null) {\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.removeCallbacks(what, who);\n }\n else {\n view_2.ViewRootImpl.getRunQueue().removeCallbacks(what);\n }\n }\n else if (what === null) {\n if (this.mAttachInfo != null && who != null) {\n this.mAttachInfo.mHandler.removeCallbacksAndMessages(who);\n }\n }\n }\n verifyDrawable(who) {\n return who == this.mBackground;\n }\n drawableStateChanged() {\n this.getDrawableState();\n let d = this.mBackground;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n resolveDrawables() {\n }\n refreshDrawableState() {\n this.mPrivateFlags |= View.PFLAG_DRAWABLE_STATE_DIRTY;\n this.drawableStateChanged();\n let parent = this.mParent;\n if (parent != null) {\n parent.childDrawableStateChanged(this);\n }\n }\n getDrawableState() {\n if ((this.mDrawableState != null) && ((this.mPrivateFlags & View.PFLAG_DRAWABLE_STATE_DIRTY) == 0)) {\n return this.mDrawableState;\n }\n else {\n let oldDrawableState = this.mDrawableState;\n this.mDrawableState = this.onCreateDrawableState(0);\n this.mPrivateFlags &= ~View.PFLAG_DRAWABLE_STATE_DIRTY;\n this._fireStateChangeToAttribute(oldDrawableState, this.mDrawableState);\n return this.mDrawableState;\n }\n }\n onCreateDrawableState(extraSpace) {\n if ((this.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE &&\n this.mParent instanceof View) {\n return this.mParent.onCreateDrawableState(extraSpace);\n }\n let drawableState;\n let privateFlags = this.mPrivateFlags;\n let viewStateIndex = 0;\n if ((privateFlags & View.PFLAG_PRESSED) != 0)\n viewStateIndex |= View.VIEW_STATE_PRESSED;\n if ((this.mViewFlags & View.ENABLED_MASK) == View.ENABLED)\n viewStateIndex |= View.VIEW_STATE_ENABLED;\n if (this.isFocused())\n viewStateIndex |= View.VIEW_STATE_FOCUSED;\n if ((privateFlags & View.PFLAG_SELECTED) != 0)\n viewStateIndex |= View.VIEW_STATE_SELECTED;\n if (this.hasWindowFocus())\n viewStateIndex |= View.VIEW_STATE_WINDOW_FOCUSED;\n if ((privateFlags & View.PFLAG_ACTIVATED) != 0)\n viewStateIndex |= View.VIEW_STATE_ACTIVATED;\n const privateFlags2 = this.mPrivateFlags2;\n drawableState = View.VIEW_STATE_SETS[viewStateIndex];\n if (extraSpace == 0) {\n return drawableState;\n }\n let fullState;\n if (drawableState != null) {\n fullState = androidui.util.ArrayCreator.newNumberArray(drawableState.length + extraSpace);\n System.arraycopy(drawableState, 0, fullState, 0, drawableState.length);\n }\n else {\n fullState = androidui.util.ArrayCreator.newNumberArray(extraSpace);\n }\n return fullState;\n }\n static mergeDrawableStates(baseState, additionalState) {\n const N = baseState.length;\n let i = N - 1;\n while (i >= 0 && !baseState[i]) {\n i--;\n }\n System.arraycopy(additionalState, 0, baseState, i + 1, additionalState.length);\n return baseState;\n }\n jumpDrawablesToCurrentState() {\n if (this.mBackground != null) {\n this.mBackground.jumpToCurrentState();\n }\n }\n setBackgroundColor(color) {\n if (this.mBackground instanceof ColorDrawable) {\n this.mBackground.mutate().setColor(color);\n this.computeOpaqueFlags();\n }\n else {\n this.setBackground(new ColorDrawable(color));\n }\n }\n setBackground(background) {\n this.setBackgroundDrawable(background);\n }\n getBackground() {\n return this.mBackground;\n }\n setBackgroundDrawable(background) {\n this.computeOpaqueFlags();\n if (background == this.mBackground) {\n return;\n }\n let requestLayout = false;\n if (this.mBackground != null) {\n this.mBackground.setCallback(null);\n this.unscheduleDrawable(this.mBackground);\n }\n if (background != null) {\n let padding = new Rect();\n if (background.getPadding(padding)) {\n this.setPadding(padding.left, padding.top, padding.right, padding.bottom);\n }\n if (this.mBackground == null || this.mBackground.getMinimumHeight() != background.getMinimumHeight() ||\n this.mBackground.getMinimumWidth() != background.getMinimumWidth()) {\n requestLayout = true;\n }\n background.setCallback(this);\n if (background.isStateful()) {\n background.setState(this.getDrawableState());\n }\n background.setVisible(this.getVisibility() == View.VISIBLE, false);\n this.mBackground = background;\n this.mBackgroundWidth = background.getIntrinsicWidth();\n this.mBackgroundHeight = background.getIntrinsicHeight();\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n this.mPrivateFlags |= View.PFLAG_ONLY_DRAWS_BACKGROUND;\n requestLayout = true;\n }\n }\n else {\n this.mBackground = null;\n this.mBackgroundWidth = this.mBackgroundHeight = -1;\n if ((this.mPrivateFlags & View.PFLAG_ONLY_DRAWS_BACKGROUND) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_ONLY_DRAWS_BACKGROUND;\n this.mPrivateFlags |= View.PFLAG_SKIP_DRAW;\n }\n requestLayout = true;\n }\n this.computeOpaqueFlags();\n if (requestLayout) {\n this.requestLayout();\n }\n this.mBackgroundSizeChanged = true;\n this.mShadowDrawable = null;\n this.invalidate(true);\n }\n computeHorizontalScrollRange() {\n return this.getWidth();\n }\n computeHorizontalScrollOffset() {\n return this.mScrollX;\n }\n computeHorizontalScrollExtent() {\n return this.getWidth();\n }\n computeVerticalScrollRange() {\n return this.getHeight();\n }\n computeVerticalScrollOffset() {\n return this.mScrollY;\n }\n computeVerticalScrollExtent() {\n return this.getHeight();\n }\n canScrollHorizontally(direction) {\n const offset = this.computeHorizontalScrollOffset();\n const range = this.computeHorizontalScrollRange() - this.computeHorizontalScrollExtent();\n if (range == 0)\n return false;\n if (direction < 0) {\n return offset > 0;\n }\n else {\n return offset < range - 1;\n }\n }\n canScrollVertically(direction) {\n const offset = this.computeVerticalScrollOffset();\n const range = this.computeVerticalScrollRange() - this.computeVerticalScrollExtent();\n if (range == 0)\n return false;\n if (direction < 0) {\n return offset > 0;\n }\n else {\n return offset < range - 1;\n }\n }\n overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent) {\n const overScrollMode = this.mOverScrollMode;\n const canScrollHorizontal = this.computeHorizontalScrollRange() > this.computeHorizontalScrollExtent();\n const canScrollVertical = this.computeVerticalScrollRange() > this.computeVerticalScrollExtent();\n const overScrollHorizontal = overScrollMode == View.OVER_SCROLL_ALWAYS ||\n (overScrollMode == View.OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollHorizontal);\n const overScrollVertical = overScrollMode == View.OVER_SCROLL_ALWAYS ||\n (overScrollMode == View.OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollVertical);\n if (isTouchEvent) {\n if ((deltaX < 0 && scrollX <= 0) || (deltaX > 0 && scrollX >= scrollRangeX)) {\n deltaX /= 2;\n }\n if ((deltaY < 0 && scrollY <= 0) || (deltaY > 0 && scrollY >= scrollRangeY)) {\n deltaY /= 2;\n }\n }\n let newScrollX = scrollX + deltaX;\n if (!overScrollHorizontal) {\n maxOverScrollX = 0;\n }\n let newScrollY = scrollY + deltaY;\n if (!overScrollVertical) {\n maxOverScrollY = 0;\n }\n const left = -maxOverScrollX;\n const right = maxOverScrollX + scrollRangeX;\n const top = -maxOverScrollY;\n const bottom = maxOverScrollY + scrollRangeY;\n let clampedX = false;\n if (newScrollX > right) {\n newScrollX = right;\n clampedX = true;\n }\n else if (newScrollX < left) {\n newScrollX = left;\n clampedX = true;\n }\n let clampedY = false;\n if (newScrollY > bottom) {\n newScrollY = bottom;\n clampedY = true;\n }\n else if (newScrollY < top) {\n newScrollY = top;\n clampedY = true;\n }\n this.onOverScrolled(newScrollX, newScrollY, clampedX, clampedY);\n return clampedX || clampedY;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n }\n getOverScrollMode() {\n return this.mOverScrollMode;\n }\n setOverScrollMode(overScrollMode) {\n if (overScrollMode != View.OVER_SCROLL_ALWAYS &&\n overScrollMode != View.OVER_SCROLL_IF_CONTENT_SCROLLS &&\n overScrollMode != View.OVER_SCROLL_NEVER) {\n throw new Error(\"Invalid overscroll mode \" + overScrollMode);\n }\n this.mOverScrollMode = overScrollMode;\n }\n getVerticalScrollFactor() {\n if (this.mVerticalScrollFactor == 0) {\n this.mVerticalScrollFactor = Resources.getDisplayMetrics().density * 1;\n }\n return this.mVerticalScrollFactor;\n }\n getHorizontalScrollFactor() {\n return this.getVerticalScrollFactor();\n }\n computeScroll() {\n }\n scrollTo(x, y) {\n if (this.mScrollX != x || this.mScrollY != y) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n this.mScrollX = x;\n this.mScrollY = y;\n this.invalidateParentCaches();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n scrollBy(x, y) {\n this.scrollTo(this.mScrollX + x, this.mScrollY + y);\n }\n initialAwakenScrollBars() {\n return this.mScrollCache != null &&\n this.awakenScrollBars(this.mScrollCache.scrollBarDefaultDelayBeforeFade * 4, true);\n }\n awakenScrollBars(startDelay, invalidate = true) {\n const scrollCache = this.mScrollCache;\n if (scrollCache == null)\n return false;\n startDelay = startDelay || scrollCache.scrollBarDefaultDelayBeforeFade;\n if (scrollCache == null || !scrollCache.fadeScrollBars) {\n return false;\n }\n if (scrollCache.scrollBar == null) {\n scrollCache.scrollBar = new ScrollBarDrawable();\n }\n if (this.isHorizontalScrollBarEnabled() || this.isVerticalScrollBarEnabled()) {\n if (invalidate) {\n this.postInvalidateOnAnimation();\n }\n if (scrollCache.state == ScrollabilityCache.OFF) {\n const KEY_REPEAT_FIRST_DELAY = 750;\n startDelay = Math.max(KEY_REPEAT_FIRST_DELAY, startDelay);\n }\n let fadeStartTime = AnimationUtils.currentAnimationTimeMillis() + startDelay;\n scrollCache.fadeStartTime = fadeStartTime;\n scrollCache.state = ScrollabilityCache.ON;\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.removeCallbacks(scrollCache);\n this.mAttachInfo.mHandler.postAtTime(scrollCache, fadeStartTime);\n }\n return true;\n }\n return false;\n }\n getVerticalFadingEdgeLength() {\n return 0;\n }\n setVerticalFadingEdgeEnabled(enable) {\n }\n setHorizontalFadingEdgeEnabled(enable) {\n }\n setFadingEdgeLength(length) {\n }\n getHorizontalFadingEdgeLength() {\n return 0;\n }\n getVerticalScrollbarWidth() {\n let cache = this.mScrollCache;\n if (cache != null) {\n let scrollBar = cache.scrollBar;\n if (scrollBar != null) {\n let size = scrollBar.getSize(true);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n return size;\n }\n return 0;\n }\n return 0;\n }\n getHorizontalScrollbarHeight() {\n let cache = this.mScrollCache;\n if (cache != null) {\n let scrollBar = cache.scrollBar;\n if (scrollBar != null) {\n let size = scrollBar.getSize(false);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n return size;\n }\n return 0;\n }\n return 0;\n }\n initializeScrollbars(a) {\n this.initScrollCache();\n }\n initScrollCache() {\n if (this.mScrollCache == null) {\n this.mScrollCache = new ScrollabilityCache(this);\n }\n }\n getScrollCache() {\n this.initScrollCache();\n return this.mScrollCache;\n }\n isHorizontalScrollBarEnabled() {\n return (this.mViewFlags & View.SCROLLBARS_HORIZONTAL) == View.SCROLLBARS_HORIZONTAL;\n }\n setHorizontalScrollBarEnabled(horizontalScrollBarEnabled) {\n if (this.isHorizontalScrollBarEnabled() != horizontalScrollBarEnabled) {\n this.mViewFlags ^= View.SCROLLBARS_HORIZONTAL;\n this.computeOpaqueFlags();\n }\n }\n isVerticalScrollBarEnabled() {\n return (this.mViewFlags & View.SCROLLBARS_VERTICAL) == View.SCROLLBARS_VERTICAL;\n }\n setVerticalScrollBarEnabled(verticalScrollBarEnabled) {\n if (this.isVerticalScrollBarEnabled() != verticalScrollBarEnabled) {\n this.mViewFlags ^= View.SCROLLBARS_VERTICAL;\n this.computeOpaqueFlags();\n }\n }\n setScrollbarFadingEnabled(fadeScrollbars) {\n this.initScrollCache();\n const scrollabilityCache = this.mScrollCache;\n scrollabilityCache.fadeScrollBars = fadeScrollbars;\n if (fadeScrollbars) {\n scrollabilityCache.state = ScrollabilityCache.OFF;\n }\n else {\n scrollabilityCache.state = ScrollabilityCache.ON;\n }\n }\n setVerticalScrollbarPosition(position) {\n }\n setHorizontalScrollbarPosition(position) {\n }\n setScrollBarStyle(position) {\n }\n getTopFadingEdgeStrength() {\n return 0;\n }\n getBottomFadingEdgeStrength() {\n return 0;\n }\n getLeftFadingEdgeStrength() {\n return 0;\n }\n getRightFadingEdgeStrength() {\n return 0;\n }\n isScrollbarFadingEnabled() {\n return this.mScrollCache != null && this.mScrollCache.fadeScrollBars;\n }\n getScrollBarDefaultDelayBeforeFade() {\n return this.mScrollCache == null ? view_2.ViewConfiguration.getScrollDefaultDelay() :\n this.mScrollCache.scrollBarDefaultDelayBeforeFade;\n }\n setScrollBarDefaultDelayBeforeFade(scrollBarDefaultDelayBeforeFade) {\n this.getScrollCache().scrollBarDefaultDelayBeforeFade = scrollBarDefaultDelayBeforeFade;\n }\n getScrollBarFadeDuration() {\n return this.mScrollCache == null ? view_2.ViewConfiguration.getScrollBarFadeDuration() :\n this.mScrollCache.scrollBarFadeDuration;\n }\n setScrollBarFadeDuration(scrollBarFadeDuration) {\n this.getScrollCache().scrollBarFadeDuration = scrollBarFadeDuration;\n }\n getScrollBarSize() {\n return this.mScrollCache == null ? view_2.ViewConfiguration.get().getScaledScrollBarSize() :\n this.mScrollCache.scrollBarSize;\n }\n setScrollBarSize(scrollBarSize) {\n this.getScrollCache().scrollBarSize = scrollBarSize;\n }\n hasOpaqueScrollbars() {\n return true;\n }\n assignParent(parent) {\n if (this.mParent == null) {\n this.mParent = parent;\n }\n else if (parent == null) {\n this.mParent = null;\n }\n else {\n throw new Error(\"view \" + this + \" being added, but\"\n + \" it already has a parent\");\n }\n }\n onFinishInflate() {\n }\n dispatchStartTemporaryDetach() {\n this.onStartTemporaryDetach();\n }\n onStartTemporaryDetach() {\n this.removeUnsetPressCallback();\n this.mPrivateFlags |= View.PFLAG_CANCEL_NEXT_UP_EVENT;\n }\n dispatchFinishTemporaryDetach() {\n this.onFinishTemporaryDetach();\n }\n onFinishTemporaryDetach() {\n }\n dispatchWindowFocusChanged(hasFocus) {\n this.onWindowFocusChanged(hasFocus);\n }\n onWindowFocusChanged(hasWindowFocus) {\n if (!hasWindowFocus) {\n if (this.isPressed()) {\n this.setPressed(false);\n }\n this.removeLongPressCallback();\n this.removeTapCallback();\n this.onFocusLost();\n }\n this.refreshDrawableState();\n }\n hasWindowFocus() {\n return this.mAttachInfo != null && this.mAttachInfo.mHasWindowFocus;\n }\n getWindowAttachCount() {\n return this.mWindowAttachCount;\n }\n isAttachedToWindow() {\n return this.mAttachInfo != null;\n }\n dispatchAttachedToWindow(info, visibility) {\n this.mAttachInfo = info;\n if (info.mRootView && info.mRootView.mContext)\n this.mContext = info.mRootView.mContext;\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().dispatchAttachedToWindow(info, visibility);\n }\n this.mWindowAttachCount++;\n this.mPrivateFlags |= View.PFLAG_DRAWABLE_STATE_DIRTY;\n if (this.mFloatingTreeObserver != null) {\n info.mViewRootImpl.mTreeObserver.merge(this.mFloatingTreeObserver);\n this.mFloatingTreeObserver = null;\n }\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER) != 0) {\n this.mAttachInfo.mScrollContainers.add(this);\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.onAttachedToWindow();\n if (this.dependOnDebugLayout()) {\n this.getContext().androidUI.viewAttachedDependOnDebugLayout(this);\n }\n let li = this.mListenerInfo;\n let listeners = li != null ? li.mOnAttachStateChangeListeners : null;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onViewAttachedToWindow(this);\n }\n }\n let vis = info.mWindowVisibility;\n if (vis != View.GONE) {\n this.onWindowVisibilityChanged(vis);\n }\n if ((this.mPrivateFlags & View.PFLAG_DRAWABLE_STATE_DIRTY) != 0) {\n this.refreshDrawableState();\n }\n }\n onAttachedToWindow() {\n if ((this.mPrivateFlags & View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH) != 0) {\n this.initialAwakenScrollBars();\n this.mPrivateFlags &= ~View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;\n }\n this.mPrivateFlags3 &= ~View.PFLAG3_IS_LAID_OUT;\n this.jumpDrawablesToCurrentState();\n }\n dispatchDetachedFromWindow() {\n let info = this.mAttachInfo;\n if (info != null) {\n let vis = info.mWindowVisibility;\n if (vis != View.GONE) {\n this.onWindowVisibilityChanged(View.GONE);\n }\n }\n this.onDetachedFromWindow();\n if (this.dependOnDebugLayout()) {\n this.getContext().androidUI.viewDetachedDependOnDebugLayout(this);\n }\n let li = this.mListenerInfo;\n let listeners = li != null ? li.mOnAttachStateChangeListeners : null;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onViewDetachedFromWindow(this);\n }\n }\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0) {\n this.mAttachInfo.mScrollContainers.delete(this);\n this.mPrivateFlags &= ~View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.mAttachInfo = null;\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().dispatchDetachedFromWindow();\n }\n }\n onDetachedFromWindow() {\n this.mPrivateFlags &= ~View.PFLAG_CANCEL_NEXT_UP_EVENT;\n this.mPrivateFlags3 &= ~View.PFLAG3_IS_LAID_OUT;\n this.removeUnsetPressCallback();\n this.removeLongPressCallback();\n this.removePerformClickCallback();\n this.destroyDrawingCache();\n this.cleanupDraw();\n this.mCurrentAnimation = null;\n }\n cleanupDraw() {\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mViewRootImpl.cancelInvalidate(this);\n }\n }\n isInEditMode() {\n return false;\n }\n debug(depth = 0) {\n console.dir(this.bindElement);\n }\n toString() {\n return this.tagName();\n }\n getRootView() {\n if (this.mAttachInfo != null) {\n let v = this.mAttachInfo.mRootView;\n if (v != null) {\n return v;\n }\n }\n let parent = this;\n while (parent.mParent != null && parent.mParent instanceof View) {\n parent = parent.mParent;\n }\n return parent;\n }\n findViewById(id) {\n if (!id)\n return null;\n return this.findViewTraversal(id);\n }\n findViewWithTag(tag) {\n if (!tag)\n return null;\n return this.findViewWithTagTraversal(tag);\n }\n findViewTraversal(id) {\n if (id == this.mID) {\n return this;\n }\n return null;\n }\n findViewWithTagTraversal(tag) {\n if (tag != null && tag === this.mTag) {\n return this;\n }\n return null;\n }\n findViewByPredicate(predicate) {\n return this.findViewByPredicateTraversal(predicate, null);\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n return null;\n }\n findViewByPredicateInsideOut(start, predicate) {\n let childToSkip = null;\n for (;;) {\n let view = start.findViewByPredicateTraversal(predicate, childToSkip);\n if (view != null || start == this) {\n return view;\n }\n let parent = start.getParent();\n if (parent == null || !(parent instanceof View)) {\n return null;\n }\n childToSkip = start;\n start = parent;\n }\n }\n setId(id) {\n this.mID = id;\n }\n getId() {\n return this.mID;\n }\n getTag() {\n return this.mTag;\n }\n setTag(tag) {\n this.mTag = tag;\n }\n setIsRootNamespace(isRoot) {\n if (isRoot) {\n this.mPrivateFlags |= View.PFLAG_IS_ROOT_NAMESPACE;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_IS_ROOT_NAMESPACE;\n }\n }\n isRootNamespace() {\n return (this.mPrivateFlags & View.PFLAG_IS_ROOT_NAMESPACE) != 0;\n }\n getResources() {\n let context = this.getContext();\n if (context != null) {\n return context.getResources();\n }\n return Resources.getSystem();\n }\n static inflate(context, xml, root) {\n return view_2.LayoutInflater.from(context).inflate(xml, root);\n }\n _AttrObserverCallBack(arr, observer) {\n arr.forEach((record) => {\n let target = record.target;\n let androidView = target[View.AndroidViewProperty];\n if (!androidView)\n return;\n let attrName = record.attributeName;\n let newValue = target.getAttribute(attrName);\n let oldValue = record.oldValue;\n if (newValue === oldValue)\n return;\n androidView.onBindElementAttributeChanged(attrName, record.oldValue, newValue);\n });\n }\n initBindElement(bindElement) {\n if (this.bindElement) {\n this.bindElement[View.AndroidViewProperty] = null;\n }\n this.bindElement = bindElement || document.createElement(this.tagName());\n this.bindElement.style.position = 'absolute';\n let oldBindView = this.bindElement[View.AndroidViewProperty];\n if (oldBindView) {\n if (oldBindView._AttrObserver)\n oldBindView._AttrObserver.disconnect();\n }\n this.bindElement[View.AndroidViewProperty] = this;\n this._stateAttrList = new StateAttrList(this);\n this._initAttrObserver();\n }\n requestSyncBoundToElement(immediately = this.dependOnDebugLayout()) {\n let rootView = this.getRootView();\n if (!rootView)\n return;\n if (!rootView._syncToElementRun) {\n rootView._syncToElementRun = {\n run: () => {\n rootView._syncToElementLock = false;\n rootView._syncToElementImmediatelyLock = false;\n rootView._syncBoundAndScrollToElement();\n }\n };\n }\n if (immediately) {\n if (rootView._syncToElementImmediatelyLock)\n return;\n rootView._syncToElementImmediatelyLock = true;\n rootView._syncToElementLock = true;\n rootView.removeCallbacks(rootView._syncToElementRun);\n rootView.post(rootView._syncToElementRun);\n return;\n }\n if (rootView._syncToElementLock)\n return;\n rootView._syncToElementLock = true;\n rootView.postDelayed(rootView._syncToElementRun, 1000);\n }\n _syncBoundAndScrollToElement() {\n if (!this.isAttachedToWindow()) {\n return;\n }\n const left = this.mLeft;\n const top = this.mTop;\n const width = this.getWidth();\n const height = this.getHeight();\n const parent = this.getParent();\n const pScrollX = parent instanceof View ? parent.mScrollX : 0;\n const pScrollY = parent instanceof View ? parent.mScrollY : 0;\n if (left !== this._lastSyncLeft || top !== this._lastSyncTop\n || width !== this._lastSyncWidth || height !== this._lastSyncHeight\n || pScrollX !== this._lastSyncScrollX || pScrollY !== this._lastSyncScrollY) {\n this._lastSyncLeft = left;\n this._lastSyncTop = top;\n this._lastSyncWidth = width;\n this._lastSyncHeight = height;\n this._lastSyncScrollX = pScrollX;\n this._lastSyncScrollY = pScrollY;\n const density = this.getResources().getDisplayMetrics().density;\n let bind = this.bindElement;\n bind.style.width = width / density + 'px';\n bind.style.height = height / density + 'px';\n bind.style.left = (left - pScrollX) / density + 'px';\n bind.style.top = (top - pScrollY) / density + 'px';\n if (bind.parentElement) {\n bind.parentElement.scrollTop = 0;\n }\n this.getMatrix();\n }\n if (this instanceof view_2.ViewGroup) {\n const group = this;\n for (var i = 0, count = group.getChildCount(); i < count; i++) {\n group.getChildAt(i)._syncBoundAndScrollToElement();\n }\n }\n }\n _syncMatrixToElement() {\n let matrix = this.mTransformationInfo == null ? Matrix.IDENTITY_MATRIX : this.mTransformationInfo.mMatrix;\n matrix = matrix || Matrix.IDENTITY_MATRIX;\n let v = View.TempMatrixValue;\n matrix.getValues(v);\n let transfrom = `matrix(${v[Matrix.MSCALE_X]}, ${-v[Matrix.MSKEW_X]}, ${-v[Matrix.MSKEW_Y]}, ${v[Matrix.MSCALE_Y]}, ${v[Matrix.MTRANS_X]}, ${v[Matrix.MTRANS_Y]})`;\n if (this._lastSyncTransform != transfrom) {\n this._lastSyncTransform = this.bindElement.style.transform = this.bindElement.style.webkitTransform = transfrom;\n }\n }\n syncVisibleToElement() {\n let visibility = this.getVisibility();\n if (visibility === View.VISIBLE) {\n this.bindElement.style.display = '';\n this.bindElement.style.visibility = '';\n }\n else if (visibility === View.INVISIBLE) {\n this.bindElement.style.display = '';\n this.bindElement.style.visibility = 'hidden';\n }\n else {\n this.bindElement.style.display = 'none';\n this.bindElement.style.visibility = '';\n }\n }\n dependOnDebugLayout() {\n return false;\n }\n _initAttrObserver() {\n if (!window['MutationObserver'])\n return;\n if (!this._AttrObserver)\n this._AttrObserver = new MutationObserver(this._AttrObserverCallBack);\n else\n this._AttrObserver.disconnect();\n this._AttrObserver.observe(this.bindElement, { attributes: true, attributeOldValue: true });\n }\n _fireInitedAttributeChange() {\n for (let [key, value] of this._stateAttrList.getDefaultStateAttr().getAttrMap().entries()) {\n this.onBindElementAttributeChanged(key, null, value);\n }\n }\n _fireStateChangeToAttribute(oldState, newState) {\n if (!this._stateAttrList)\n return;\n if (java.util.Arrays.equals(oldState, newState))\n return;\n let oldMatchedAttr = this._stateAttrList.getMatchedStateAttr(oldState);\n let matchedAttr = this._stateAttrList.getMatchedStateAttr(newState);\n for (let [key, value] of matchedAttr.getAttrMap().entries()) {\n let attrValue = this._getBinderAttrValue(key);\n if (oldMatchedAttr) {\n oldMatchedAttr.setAttr(key, attrValue);\n }\n if (value == attrValue)\n continue;\n this.onBindElementAttributeChanged(key, null, value);\n }\n }\n _getBinderAttrValue(key) {\n if (!key)\n return null;\n if (key.startsWith('layout_')) {\n let params = this.getLayoutParams();\n if (params) {\n let attrName = key.substring('layout_'.length);\n return params._attrBinder.getAttrValue(attrName);\n }\n }\n else {\n return this._attrBinder.getAttrValue(key);\n }\n }\n onBindElementAttributeChanged(attributeName, oldVal, newVal) {\n let parts = attributeName.split(\":\");\n let attrName = parts[parts.length - 1].toLowerCase();\n if (newVal === 'true')\n newVal = true;\n else if (newVal === 'false')\n newVal = false;\n if (attrName.startsWith('layout_')) {\n attrName = attrName.substring('layout_'.length);\n let params = this.getLayoutParams();\n if (params) {\n params._attrBinder.onAttrChange(attrName, newVal, this.getContext());\n this.requestLayout();\n }\n return;\n }\n this._attrBinder.onAttrChange(attrName, newVal, this.getContext());\n }\n applyDefaultAttributes(attrs) {\n let initAttrMap = this._stateAttrList.getDefaultStateAttr().getAttrMap();\n for (let key in attrs) {\n if (!initAttrMap.has(key.toLowerCase())) {\n this._attrBinder.onAttrChange(key, attrs[key], this.getContext());\n }\n }\n }\n tagName() {\n return this.constructor.name;\n }\n }\n View.DBG = Log.View_DBG;\n View.VIEW_LOG_TAG = \"View\";\n View.PFLAG_WANTS_FOCUS = 0x00000001;\n View.PFLAG_FOCUSED = 0x00000002;\n View.PFLAG_SELECTED = 0x00000004;\n View.PFLAG_IS_ROOT_NAMESPACE = 0x00000008;\n View.PFLAG_HAS_BOUNDS = 0x00000010;\n View.PFLAG_DRAWN = 0x00000020;\n View.PFLAG_DRAW_ANIMATION = 0x00000040;\n View.PFLAG_SKIP_DRAW = 0x00000080;\n View.PFLAG_ONLY_DRAWS_BACKGROUND = 0x00000100;\n View.PFLAG_REQUEST_TRANSPARENT_REGIONS = 0x00000200;\n View.PFLAG_DRAWABLE_STATE_DIRTY = 0x00000400;\n View.PFLAG_MEASURED_DIMENSION_SET = 0x00000800;\n View.PFLAG_FORCE_LAYOUT = 0x00001000;\n View.PFLAG_LAYOUT_REQUIRED = 0x00002000;\n View.PFLAG_PRESSED = 0x00004000;\n View.PFLAG_DRAWING_CACHE_VALID = 0x00008000;\n View.PFLAG_ANIMATION_STARTED = 0x00010000;\n View.PFLAG_ALPHA_SET = 0x00040000;\n View.PFLAG_SCROLL_CONTAINER = 0x00080000;\n View.PFLAG_SCROLL_CONTAINER_ADDED = 0x00100000;\n View.PFLAG_DIRTY = 0x00200000;\n View.PFLAG_DIRTY_OPAQUE = 0x00400000;\n View.PFLAG_DIRTY_MASK = 0x00600000;\n View.PFLAG_OPAQUE_BACKGROUND = 0x00800000;\n View.PFLAG_OPAQUE_SCROLLBARS = 0x01000000;\n View.PFLAG_OPAQUE_MASK = 0x01800000;\n View.PFLAG_PREPRESSED = 0x02000000;\n View.PFLAG_CANCEL_NEXT_UP_EVENT = 0x04000000;\n View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH = 0x08000000;\n View.PFLAG_HOVERED = 0x10000000;\n View.PFLAG_PIVOT_EXPLICITLY_SET = 0x20000000;\n View.PFLAG_ACTIVATED = 0x40000000;\n View.PFLAG_INVALIDATED = 0x80000000;\n View.PFLAG2_VIEW_QUICK_REJECTED = 0x10000000;\n View.PFLAG2_HAS_TRANSIENT_STATE = 0x80000000;\n View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM = 0x1;\n View.PFLAG3_VIEW_IS_ANIMATING_ALPHA = 0x2;\n View.PFLAG3_IS_LAID_OUT = 0x4;\n View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT = 0x8;\n View.PFLAG3_CALLED_SUPER = 0x10;\n View.NOT_FOCUSABLE = 0x00000000;\n View.FOCUSABLE = 0x00000001;\n View.FOCUSABLE_MASK = 0x00000001;\n View.OVER_SCROLL_ALWAYS = 0;\n View.OVER_SCROLL_IF_CONTENT_SCROLLS = 1;\n View.OVER_SCROLL_NEVER = 2;\n View.MEASURED_SIZE_MASK = 0x00ffffff;\n View.MEASURED_STATE_MASK = 0xff000000;\n View.MEASURED_HEIGHT_STATE_SHIFT = 16;\n View.MEASURED_STATE_TOO_SMALL = 0x01000000;\n View.VISIBILITY_MASK = 0x0000000C;\n View.VISIBLE = 0x00000000;\n View.INVISIBLE = 0x00000004;\n View.GONE = 0x00000008;\n View.ENABLED = 0x00000000;\n View.DISABLED = 0x00000020;\n View.ENABLED_MASK = 0x00000020;\n View.WILL_NOT_DRAW = 0x00000080;\n View.DRAW_MASK = 0x00000080;\n View.SCROLLBARS_NONE = 0x00000000;\n View.SCROLLBARS_HORIZONTAL = 0x00000100;\n View.SCROLLBARS_VERTICAL = 0x00000200;\n View.SCROLLBARS_MASK = 0x00000300;\n View.FOCUSABLES_ALL = 0x00000000;\n View.FOCUSABLES_TOUCH_MODE = 0x00000001;\n View.FOCUS_BACKWARD = 0x00000001;\n View.FOCUS_FORWARD = 0x00000002;\n View.FOCUS_LEFT = 0x00000011;\n View.FOCUS_UP = 0x00000021;\n View.FOCUS_RIGHT = 0x00000042;\n View.FOCUS_DOWN = 0x00000082;\n View.VIEW_STATE_WINDOW_FOCUSED = 1;\n View.VIEW_STATE_SELECTED = 1 << 1;\n View.VIEW_STATE_FOCUSED = 1 << 2;\n View.VIEW_STATE_ENABLED = 1 << 3;\n View.VIEW_STATE_DISABLE = -View.VIEW_STATE_ENABLED;\n View.VIEW_STATE_PRESSED = 1 << 4;\n View.VIEW_STATE_ACTIVATED = 1 << 5;\n View.VIEW_STATE_HOVERED = 1 << 7;\n View.VIEW_STATE_CHECKED = 1 << 10;\n View.VIEW_STATE_MULTILINE = 1 << 11;\n View.VIEW_STATE_EXPANDED = 1 << 12;\n View.VIEW_STATE_EMPTY = 1 << 13;\n View.VIEW_STATE_LAST = 1 << 14;\n View.VIEW_STATE_IDS = [\n View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED,\n View.VIEW_STATE_SELECTED, View.VIEW_STATE_SELECTED,\n View.VIEW_STATE_FOCUSED, View.VIEW_STATE_FOCUSED,\n View.VIEW_STATE_ENABLED, View.VIEW_STATE_ENABLED,\n View.VIEW_STATE_PRESSED, View.VIEW_STATE_PRESSED,\n View.VIEW_STATE_ACTIVATED, View.VIEW_STATE_ACTIVATED,\n View.VIEW_STATE_HOVERED, View.VIEW_STATE_HOVERED,\n ];\n View._static = (() => {\n function Integer_bitCount(i) {\n i = i - ((i >>> 1) & 0x55555555);\n i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n i = (i + (i >>> 4)) & 0x0f0f0f0f;\n i = i + (i >>> 8);\n i = i + (i >>> 16);\n return i & 0x3f;\n }\n let orderedIds = View.VIEW_STATE_IDS;\n const NUM_BITS = View.VIEW_STATE_IDS.length / 2;\n View.VIEW_STATE_SETS = new Array(1 << NUM_BITS);\n for (let i = 0; i < View.VIEW_STATE_SETS.length; i++) {\n let numBits = Integer_bitCount(i);\n const stataSet = androidui.util.ArrayCreator.newNumberArray(numBits);\n let pos = 0;\n for (let j = 0; j < orderedIds.length; j += 2) {\n if ((i & orderedIds[j + 1]) != 0) {\n stataSet[pos++] = orderedIds[j];\n }\n }\n View.VIEW_STATE_SETS[i] = stataSet;\n }\n View.EMPTY_STATE_SET = View.VIEW_STATE_SETS[0];\n View.WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED];\n View.SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED];\n View.SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED];\n View.FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED];\n View.FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED];\n View.FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED];\n View.FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED];\n View.ENABLED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_ENABLED];\n View.ENABLED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED];\n View.ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.PRESSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_PRESSED];\n View.PRESSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_PRESSED];\n View.PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n })();\n View.CLICKABLE = 0x00004000;\n View.DRAWING_CACHE_ENABLED = 0x00008000;\n View.WILL_NOT_CACHE_DRAWING = 0x000020000;\n View.FOCUSABLE_IN_TOUCH_MODE = 0x00040000;\n View.LONG_CLICKABLE = 0x00200000;\n View.DUPLICATE_PARENT_STATE = 0x00400000;\n View.LAYER_TYPE_NONE = 0;\n View.LAYER_TYPE_SOFTWARE = 1;\n View.LAYOUT_DIRECTION_LTR = LayoutDirection.LTR;\n View.LAYOUT_DIRECTION_RTL = LayoutDirection.RTL;\n View.LAYOUT_DIRECTION_INHERIT = LayoutDirection.INHERIT;\n View.LAYOUT_DIRECTION_LOCALE = LayoutDirection.LOCALE;\n View.TEXT_DIRECTION_INHERIT = 0;\n View.TEXT_DIRECTION_FIRST_STRONG = 1;\n View.TEXT_DIRECTION_ANY_RTL = 2;\n View.TEXT_DIRECTION_LTR = 3;\n View.TEXT_DIRECTION_RTL = 4;\n View.TEXT_DIRECTION_LOCALE = 5;\n View.TEXT_DIRECTION_DEFAULT = View.TEXT_DIRECTION_INHERIT;\n View.TEXT_DIRECTION_RESOLVED_DEFAULT = View.TEXT_DIRECTION_FIRST_STRONG;\n View.TEXT_ALIGNMENT_INHERIT = 0;\n View.TEXT_ALIGNMENT_GRAVITY = 1;\n View.TEXT_ALIGNMENT_TEXT_START = 2;\n View.TEXT_ALIGNMENT_TEXT_END = 3;\n View.TEXT_ALIGNMENT_CENTER = 4;\n View.TEXT_ALIGNMENT_VIEW_START = 5;\n View.TEXT_ALIGNMENT_VIEW_END = 6;\n View.TEXT_ALIGNMENT_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY;\n View.TEXT_ALIGNMENT_RESOLVED_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY;\n View.AndroidViewProperty = 'AndroidView';\n View.TempMatrixValue = androidui.util.ArrayCreator.newNumberArray(9);\n view_2.View = View;\n (function (View) {\n class TransformationInfo {\n constructor() {\n this.mMatrix = new Matrix();\n this.mMatrixDirty = false;\n this.mInverseMatrixDirty = true;\n this.mMatrixIsIdentity = true;\n this.mPrevWidth = -1;\n this.mPrevHeight = -1;\n this.mRotation = 0;\n this.mTranslationX = 0;\n this.mTranslationY = 0;\n this.mScaleX = 1;\n this.mScaleY = 1;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mAlpha = 1;\n this.mTransitionAlpha = 1;\n }\n }\n View.TransformationInfo = TransformationInfo;\n class MeasureSpec {\n static makeMeasureSpec(size, mode) {\n return (size & ~MeasureSpec.MODE_MASK) | (mode & MeasureSpec.MODE_MASK);\n }\n static getMode(measureSpec) {\n return (measureSpec & MeasureSpec.MODE_MASK);\n }\n static getSize(measureSpec) {\n return (measureSpec & ~MeasureSpec.MODE_MASK);\n }\n static adjust(measureSpec, delta) {\n return MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(measureSpec + delta), MeasureSpec.getMode(measureSpec));\n }\n static toString(measureSpec) {\n let mode = MeasureSpec.getMode(measureSpec);\n let size = MeasureSpec.getSize(measureSpec);\n let sb = new StringBuilder(\"MeasureSpec: \");\n if (mode == MeasureSpec.UNSPECIFIED)\n sb.append(\"UNSPECIFIED \");\n else if (mode == MeasureSpec.EXACTLY)\n sb.append(\"EXACTLY \");\n else if (mode == MeasureSpec.AT_MOST)\n sb.append(\"AT_MOST \");\n else\n sb.append(mode).append(\" \");\n sb.append(size);\n return sb.toString();\n }\n }\n MeasureSpec.MODE_SHIFT = 30;\n MeasureSpec.MODE_MASK = 0x3 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.UNSPECIFIED = 0 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.EXACTLY = 1 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.AT_MOST = 2 << MeasureSpec.MODE_SHIFT;\n View.MeasureSpec = MeasureSpec;\n class AttachInfo {\n constructor(mViewRootImpl, mHandler) {\n this.mKeyDispatchState = new KeyEvent.DispatcherState();\n this.mTmpInvalRect = new Rect();\n this.mTmpTransformRect = new Rect();\n this.mPoint = new Point();\n this.mTmpMatrix = new Matrix();\n this.mTmpTransformation = new Transformation();\n this.mTmpTransformLocation = androidui.util.ArrayCreator.newNumberArray(2);\n this.mScrollContainers = new Set();\n this.mInvalidateChildLocation = androidui.util.ArrayCreator.newNumberArray(2);\n this.mHasWindowFocus = false;\n this.mWindowVisibility = 0;\n this.mViewRootImpl = mViewRootImpl;\n this.mHandler = mHandler;\n }\n }\n View.AttachInfo = AttachInfo;\n class ListenerInfo {\n }\n View.ListenerInfo = ListenerInfo;\n var OnClickListener;\n (function (OnClickListener) {\n function fromFunction(func) {\n return {\n onClick: func\n };\n }\n OnClickListener.fromFunction = fromFunction;\n })(OnClickListener = View.OnClickListener || (View.OnClickListener = {}));\n var OnLongClickListener;\n (function (OnLongClickListener) {\n function fromFunction(func) {\n return {\n onLongClick: func\n };\n }\n OnLongClickListener.fromFunction = fromFunction;\n })(OnLongClickListener = View.OnLongClickListener || (View.OnLongClickListener = {}));\n var OnFocusChangeListener;\n (function (OnFocusChangeListener) {\n function fromFunction(func) {\n return {\n onFocusChange: func\n };\n }\n OnFocusChangeListener.fromFunction = fromFunction;\n })(OnFocusChangeListener = View.OnFocusChangeListener || (View.OnFocusChangeListener = {}));\n var OnTouchListener;\n (function (OnTouchListener) {\n function fromFunction(func) {\n return {\n onTouch: func\n };\n }\n OnTouchListener.fromFunction = fromFunction;\n })(OnTouchListener = View.OnTouchListener || (View.OnTouchListener = {}));\n var OnKeyListener;\n (function (OnKeyListener) {\n function fromFunction(func) {\n return {\n onKey: func\n };\n }\n OnKeyListener.fromFunction = fromFunction;\n })(OnKeyListener = View.OnKeyListener || (View.OnKeyListener = {}));\n var OnGenericMotionListener;\n (function (OnGenericMotionListener) {\n function fromFunction(func) {\n return {\n onGenericMotion: func\n };\n }\n OnGenericMotionListener.fromFunction = fromFunction;\n })(OnGenericMotionListener = View.OnGenericMotionListener || (View.OnGenericMotionListener = {}));\n })(View = view_2.View || (view_2.View = {}));\n (function (View) {\n var AttachInfo;\n (function (AttachInfo) {\n class InvalidateInfo {\n constructor() {\n this.left = 0;\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n }\n static obtain() {\n let instance = InvalidateInfo.sPool.acquire();\n return (instance != null) ? instance : new InvalidateInfo();\n }\n recycle() {\n this.target = null;\n InvalidateInfo.sPool.release(this);\n }\n }\n InvalidateInfo.POOL_LIMIT = 10;\n InvalidateInfo.sPool = new Pools.SynchronizedPool(InvalidateInfo.POOL_LIMIT);\n AttachInfo.InvalidateInfo = InvalidateInfo;\n })(AttachInfo = View.AttachInfo || (View.AttachInfo = {}));\n })(View = view_2.View || (view_2.View = {}));\n class CheckForLongPress {\n constructor(View_this) {\n this.mOriginalWindowAttachCount = 0;\n this.View_this = View_this;\n }\n run() {\n if (this.View_this.isPressed() && (this.View_this.mParent != null)\n && this.mOriginalWindowAttachCount == this.View_this.mWindowAttachCount) {\n if (this.View_this.performLongClick()) {\n this.View_this.mHasPerformedLongPress = true;\n }\n }\n }\n rememberWindowAttachCount() {\n this.mOriginalWindowAttachCount = this.View_this.mWindowAttachCount;\n }\n }\n class CheckForTap {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.mPrivateFlags &= ~View.PFLAG_PREPRESSED;\n this.View_this.setPressed(true);\n this.View_this.checkForLongClick(view_2.ViewConfiguration.getTapTimeout());\n }\n }\n class PerformClick {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.performClick();\n }\n }\n class PerformClickAfterPressDraw {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.post(this.View_this.mPerformClick);\n }\n }\n class UnsetPressedState {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.setPressed(false);\n }\n }\n class ScrollabilityCache {\n constructor(host) {\n this.fadeScrollBars = true;\n this.fadingEdgeLength = view_2.ViewConfiguration.get().getScaledFadingEdgeLength();\n this.scrollBarDefaultDelayBeforeFade = view_2.ViewConfiguration.getScrollDefaultDelay();\n this.scrollBarFadeDuration = view_2.ViewConfiguration.getScrollBarFadeDuration();\n this.scrollBarSize = view_2.ViewConfiguration.get().getScaledScrollBarSize();\n this.interpolator = new LinearInterpolator();\n this.state = ScrollabilityCache.OFF;\n this.host = host;\n this.scrollBar = new ScrollBarDrawable();\n let thumbColor = new ColorDrawable(0x44000000);\n let density = Resources.getDisplayMetrics().density;\n let thumb = new InsetDrawable(thumbColor, 0, 2 * density, view_2.ViewConfiguration.get().getScaledScrollBarSize() / 2, 2 * density);\n this.scrollBar.setHorizontalThumbDrawable(thumb);\n this.scrollBar.setVerticalThumbDrawable(thumb);\n }\n run() {\n let now = AnimationUtils.currentAnimationTimeMillis();\n if (now >= this.fadeStartTime) {\n this.state = ScrollabilityCache.FADING;\n this.host.invalidate(true);\n }\n }\n _computeAlphaToScrollBar() {\n let now = AnimationUtils.currentAnimationTimeMillis();\n let factor = (now - this.fadeStartTime) / this.scrollBarFadeDuration;\n if (factor >= 1) {\n this.state = ScrollabilityCache.OFF;\n factor = 1;\n }\n let alpha = 1 - this.interpolator.getInterpolation(factor);\n this.scrollBar.setAlpha(255 * alpha);\n }\n }\n ScrollabilityCache.OFF = 0;\n ScrollabilityCache.ON = 1;\n ScrollabilityCache.FADING = 2;\n class MatchIdPredicate {\n apply(view) {\n return view.mID === this.mId;\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n var Canvas = android.graphics.Canvas;\n class Surface {\n constructor(canvasElement, viewRoot) {\n this.mLockedRect = new Rect();\n this.mCanvasBound = new Rect();\n this.mSupportDirtyDraw = true;\n this.mLockSaveCount = 1;\n this.mCanvasElement = canvasElement;\n this.viewRoot = viewRoot;\n this.initImpl();\n }\n initImpl() {\n this.initCanvasBound();\n }\n isValid() {\n return true;\n }\n notifyBoundChange() {\n this.initCanvasBound();\n }\n initCanvasBound() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let clientRect = this.mCanvasElement.getBoundingClientRect();\n this.mCanvasBound.set(clientRect.left * density, clientRect.top * density, clientRect.right * density, clientRect.bottom * density);\n }\n lockCanvas(dirty) {\n let fullWidth = this.mCanvasBound.width();\n let fullHeight = this.mCanvasBound.height();\n if (!this.mSupportDirtyDraw)\n dirty.set(0, 0, fullWidth, fullHeight);\n let rect = this.mLockedRect;\n rect.set(Math.floor(dirty.left), Math.floor(dirty.top), Math.ceil(dirty.right), Math.ceil(dirty.bottom));\n if (dirty.isEmpty()) {\n rect.set(0, 0, fullWidth, fullHeight);\n }\n if (rect.isEmpty())\n return null;\n return this.lockCanvasImpl(rect.left, rect.top, rect.width(), rect.height());\n }\n lockCanvasImpl(left, top, width, height) {\n let canvas;\n if (Surface.DrawToCacheFirstMode) {\n canvas = new Canvas(width, height);\n if (left != 0 || top != 0)\n canvas.translate(-left, -top);\n }\n else {\n canvas = new SurfaceLockCanvas(this.mCanvasBound.width(), this.mCanvasBound.height(), this.mCanvasElement);\n this.mLockSaveCount = canvas.save();\n canvas.clipRect(left, top, left + width, top + height);\n }\n return canvas;\n }\n unlockCanvasAndPost(canvas) {\n if (Surface.DrawToCacheFirstMode) {\n let mCanvasContent = this.mCanvasElement.getContext('2d');\n if (canvas.mCanvasElement)\n mCanvasContent.drawImage(canvas.mCanvasElement, this.mLockedRect.left, this.mLockedRect.top);\n canvas.recycle();\n }\n else {\n canvas.restoreToCount(this.mLockSaveCount);\n }\n }\n showFps(fps) {\n if (!this._showFPSNode) {\n this._showFPSNode = document.createElement('div');\n this._showFPSNode.style.position = 'absolute';\n this._showFPSNode.style.top = '0';\n this._showFPSNode.style.left = '0';\n this._showFPSNode.style.width = '60px';\n this._showFPSNode.style.fontSize = '14px';\n this._showFPSNode.style.background = 'black';\n this._showFPSNode.style.color = 'white';\n this._showFPSNode.style.opacity = '0.7';\n this._showFPSNode.style.zIndex = '1';\n this.mCanvasElement.parentNode.appendChild(this._showFPSNode);\n }\n this._showFPSNode.innerText = 'FPS:' + fps.toFixed(1);\n }\n }\n Surface.DrawToCacheFirstMode = false;\n view.Surface = Surface;\n class SurfaceLockCanvas extends Canvas {\n constructor(width, height, canvasElement) {\n super(width, height);\n this.mCanvasElement = canvasElement;\n this._mCanvasContent = this.mCanvasElement.getContext(\"2d\");\n }\n initCanvasImpl() {\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_3) {\n var View = android.view.View;\n var Rect = android.graphics.Rect;\n var Handler = android.os.Handler;\n var SystemClock = android.os.SystemClock;\n var System = java.lang.System;\n var Log = android.util.Log;\n var Surface = android.view.Surface;\n class ViewRootImpl {\n constructor() {\n this.mViewVisibility = View.GONE;\n this.mStopped = false;\n this.mWidth = -1;\n this.mHeight = -1;\n this.mDirty = new Rect();\n this.mIsAnimating = false;\n this.mTempRect = new Rect();\n this.mVisRect = new Rect();\n this.mTraversalScheduled = false;\n this.mWillDrawSoon = false;\n this.mIsInTraversal = false;\n this.mLayoutRequested = false;\n this.mFirst = true;\n this.mFullRedrawNeeded = false;\n this.mIsDrawing = false;\n this.mAdded = false;\n this.mAddedTouchMode = false;\n this.mInTouchMode = false;\n this.mWinFrame = new Rect();\n this.mLayoutRequesters = [];\n this.mHandler = new ViewRootHandler();\n this.mViewScrollChanged = false;\n this.mTreeObserver = new view_3.ViewTreeObserver();\n this.mIgnoreDirtyState = false;\n this.mSetIgnoreDirtyState = false;\n this.mDrawingTime = 0;\n this.mFpsStartTime = -1;\n this.mFpsPrevTime = -1;\n this.mFpsNumFrames = 0;\n this.mTraversalRunnable = new TraversalRunnable(this);\n this._continueTraversalesCount = 0;\n this.mInvalidateOnAnimationRunnable = new InvalidateOnAnimationRunnable(this.mHandler);\n }\n initSurface(canvasElement) {\n this.mSurface = new Surface(canvasElement, this);\n }\n notifyResized(frame) {\n this.mWinFrame.set(frame.left, frame.top, frame.right, frame.bottom);\n this.requestLayout();\n if (this.mSurface)\n this.mSurface.notifyBoundChange();\n }\n setView(view) {\n if (this.mView == null) {\n this.mView = view;\n this.mAdded = true;\n this.requestLayout();\n view.assignParent(this);\n this.mAddedTouchMode = true;\n let syntheticInputStage = new SyntheticInputStage(this);\n let viewPostImeStage = new ViewPostImeInputStage(this, syntheticInputStage);\n let earlyPostImeStage = new EarlyPostImeInputStage(this, viewPostImeStage);\n this.mFirstInputStage = earlyPostImeStage;\n }\n }\n getView() {\n return this.mView;\n }\n getHostVisibility() {\n return this.mView.getVisibility();\n }\n scheduleTraversals() {\n if (!this.mTraversalScheduled) {\n this.mTraversalScheduled = true;\n this.mHandler.postAsTraversal(this.mTraversalRunnable);\n }\n }\n unscheduleTraversals() {\n if (this.mTraversalScheduled) {\n this.mTraversalScheduled = false;\n this.mHandler.removeCallbacks(this.mTraversalRunnable);\n }\n }\n doTraversal() {\n if (this.mTraversalScheduled) {\n this.mTraversalScheduled = false;\n this.performTraversals();\n }\n }\n measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight) {\n let windowSizeMayChange = false;\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_LAYOUT)\n Log.v(ViewRootImpl.TAG, \"Measuring \" + host + \" in display \" + desiredWindowWidth\n + \"x\" + desiredWindowHeight + \"...\");\n let childWidthMeasureSpec = ViewRootImpl.getRootMeasureSpec(desiredWindowWidth, lp.width);\n let childHeightMeasureSpec = ViewRootImpl.getRootMeasureSpec(desiredWindowHeight, lp.height);\n this.performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);\n if (this.mWidth != host.getMeasuredWidth() || this.mHeight != host.getMeasuredHeight()) {\n windowSizeMayChange = true;\n }\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals -- after measure\");\n host.debug();\n }\n return windowSizeMayChange;\n }\n static getRootMeasureSpec(windowSize, rootDimension) {\n let MeasureSpec = View.MeasureSpec;\n let measureSpec;\n switch (rootDimension) {\n case view_3.ViewGroup.LayoutParams.MATCH_PARENT:\n measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.EXACTLY);\n break;\n case view_3.ViewGroup.LayoutParams.WRAP_CONTENT:\n measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.AT_MOST);\n break;\n default:\n measureSpec = MeasureSpec.makeMeasureSpec(rootDimension, MeasureSpec.EXACTLY);\n break;\n }\n return measureSpec;\n }\n performTraversals() {\n let host = this.mView;\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals\");\n host.debug();\n }\n if (host == null || !this.mAdded)\n return;\n this.mIsInTraversal = true;\n this.mWillDrawSoon = true;\n let windowSizeMayChange = false;\n let newSurface = false;\n let surfaceChanged = false;\n let lp = new view_3.ViewGroup.LayoutParams(view_3.ViewGroup.LayoutParams.MATCH_PARENT, view_3.ViewGroup.LayoutParams.MATCH_PARENT);\n let desiredWindowWidth;\n let desiredWindowHeight;\n let viewVisibility = this.getHostVisibility();\n let viewVisibilityChanged = this.mViewVisibility != viewVisibility;\n let params = null;\n let frame = this.mWinFrame;\n desiredWindowWidth = frame.width();\n desiredWindowHeight = frame.height();\n if (this.mFirst) {\n this.mFullRedrawNeeded = true;\n this.mLayoutRequested = true;\n viewVisibilityChanged = false;\n }\n else {\n if (desiredWindowWidth != this.mWidth || desiredWindowHeight != this.mHeight) {\n if (ViewRootImpl.DEBUG_ORIENTATION) {\n Log.v(ViewRootImpl.TAG, \"View \" + host + \" resized to: \" + frame);\n }\n this.mFullRedrawNeeded = true;\n this.mLayoutRequested = true;\n windowSizeMayChange = true;\n }\n }\n if (viewVisibilityChanged) {\n }\n ViewRootImpl.getRunQueue(this).executeActions(this.mHandler);\n let layoutRequested = this.mLayoutRequested;\n if (layoutRequested) {\n if (this.mFirst) {\n this.mInTouchMode = !this.mAddedTouchMode;\n this.ensureTouchModeLocally(this.mAddedTouchMode);\n }\n else {\n if (lp.width < 0 || lp.height < 0) {\n windowSizeMayChange = true;\n }\n }\n windowSizeMayChange = this.measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight) || windowSizeMayChange;\n }\n if (layoutRequested) {\n this.mLayoutRequested = false;\n }\n let windowShouldResize = layoutRequested && windowSizeMayChange\n && ((this.mWidth != host.getMeasuredWidth() || this.mHeight != host.getMeasuredHeight())\n || (lp.width < 0 && frame.width() !== desiredWindowWidth && frame.width() !== this.mWidth)\n || (lp.height < 0 && frame.height() !== desiredWindowHeight && frame.height() !== this.mHeight));\n if (this.mFirst || windowShouldResize || viewVisibilityChanged) {\n if (ViewRootImpl.DEBUG_LAYOUT) {\n Log.i(ViewRootImpl.TAG, \"host=w:\" + host.getMeasuredWidth() + \", h:\" +\n host.getMeasuredHeight() + \", params=\" + params);\n }\n if (ViewRootImpl.DEBUG_ORIENTATION)\n Log.v(ViewRootImpl.TAG, \"Relayout returned: frame=\" + frame);\n if (this.mWidth != frame.width() || this.mHeight != frame.height()) {\n this.mWidth = frame.width();\n this.mHeight = frame.height();\n }\n if (this.mWidth != host.getMeasuredWidth()\n || this.mHeight != host.getMeasuredHeight()) {\n let childWidthMeasureSpec = ViewRootImpl.getRootMeasureSpec(this.mWidth, lp.width);\n let childHeightMeasureSpec = ViewRootImpl.getRootMeasureSpec(this.mHeight, lp.height);\n if (ViewRootImpl.DEBUG_LAYOUT)\n Log.v(ViewRootImpl.TAG, \"Ooops, something changed! mWidth=\"\n + this.mWidth + \" measuredWidth=\" + host.getMeasuredWidth()\n + \" mHeight=\" + this.mHeight\n + \" measuredHeight=\" + host.getMeasuredHeight());\n this.performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);\n layoutRequested = true;\n }\n }\n else {\n }\n const didLayout = layoutRequested;\n let triggerGlobalLayoutListener = didLayout;\n if (didLayout) {\n this.performLayout(lp, desiredWindowWidth, desiredWindowHeight);\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals -- after setFrame\");\n host.debug();\n }\n }\n if (triggerGlobalLayoutListener) {\n this.mTreeObserver.dispatchOnGlobalLayout();\n }\n let skipDraw = false;\n if (this.mFirst) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: mView.hasFocus()=\"\n + this.mView.hasFocus());\n if (this.mView != null) {\n if (!this.mView.hasFocus()) {\n this.mView.requestFocus(View.FOCUS_FORWARD);\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: requested focused view=\"\n + this.mView.findFocus());\n }\n else {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: existing focused view=\"\n + this.mView.findFocus());\n }\n }\n }\n this.mFirst = false;\n this.mWillDrawSoon = false;\n this.mViewVisibility = viewVisibility;\n let cancelDraw = this.mTreeObserver.dispatchOnPreDraw() ||\n viewVisibility != View.VISIBLE;\n if (!cancelDraw) {\n if (!skipDraw) {\n this.performDraw();\n }\n }\n else {\n if (viewVisibility == View.VISIBLE) {\n this.scheduleTraversals();\n }\n }\n this.mIsInTraversal = false;\n this.checkContinueTraversalsNextFrame();\n }\n performLayout(lp, desiredWindowWidth, desiredWindowHeight) {\n this.mLayoutRequested = false;\n this.mInLayout = true;\n let host = this.mView;\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_LAYOUT) {\n Log.v(ViewRootImpl.TAG, \"Laying out \" + host + \" to (\" +\n host.getMeasuredWidth() + \", \" + host.getMeasuredHeight() + \")\");\n }\n host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());\n this.mInLayout = false;\n let numViewsRequestingLayout = this.mLayoutRequesters.length;\n if (numViewsRequestingLayout > 0) {\n let validLayoutRequesters = this.getValidLayoutRequesters(this.mLayoutRequesters, false);\n if (validLayoutRequesters != null) {\n this.mHandlingLayoutInLayoutRequest = true;\n let numValidRequests = validLayoutRequesters.length;\n for (let i = 0; i < numValidRequests; ++i) {\n let view = validLayoutRequesters[i];\n Log.w(\"View\", \"requestLayout() improperly called by \" + view +\n \" during layout: running second layout pass\");\n view.requestLayout();\n }\n this.measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight);\n this.mInLayout = true;\n host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());\n this.mHandlingLayoutInLayoutRequest = false;\n validLayoutRequesters = this.getValidLayoutRequesters(this.mLayoutRequesters, true);\n if (validLayoutRequesters != null) {\n let finalRequesters = validLayoutRequesters;\n ViewRootImpl.getRunQueue(this).post({\n run() {\n let numValidRequests = finalRequesters.length;\n for (let i = 0; i < numValidRequests; ++i) {\n const view = finalRequesters[i];\n Log.w(\"View\", \"requestLayout() improperly called by \" + view +\n \" during second layout pass: posting in next frame\");\n view.requestLayout();\n }\n }\n });\n }\n }\n }\n this.mInLayout = false;\n }\n getValidLayoutRequesters(layoutRequesters, secondLayoutRequests) {\n let numViewsRequestingLayout = layoutRequesters.length;\n let validLayoutRequesters = null;\n for (let i = 0; i < numViewsRequestingLayout; ++i) {\n let view = layoutRequesters[i];\n if (view != null && view.mAttachInfo != null && view.mParent != null &&\n (secondLayoutRequests || (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) ==\n View.PFLAG_FORCE_LAYOUT)) {\n let gone = false;\n let parent = view;\n while (parent != null) {\n if ((parent.mViewFlags & View.VISIBILITY_MASK) == View.GONE) {\n gone = true;\n break;\n }\n if (parent.mParent instanceof View) {\n parent = parent.mParent;\n }\n else {\n parent = null;\n }\n }\n if (!gone) {\n if (validLayoutRequesters == null) {\n validLayoutRequesters = [];\n }\n validLayoutRequesters.push(view);\n }\n }\n }\n if (!secondLayoutRequests) {\n for (let i = 0; i < numViewsRequestingLayout; ++i) {\n let view = layoutRequesters[i];\n while (view != null &&\n (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) != 0) {\n view.mPrivateFlags &= ~View.PFLAG_FORCE_LAYOUT;\n if (view.mParent instanceof View) {\n view = view.mParent;\n }\n else {\n view = null;\n }\n }\n }\n }\n layoutRequesters.splice(0, layoutRequesters.length);\n return validLayoutRequesters;\n }\n performMeasure(childWidthMeasureSpec, childHeightMeasureSpec) {\n this.mView.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n isInLayout() {\n return this.mInLayout;\n }\n requestLayoutDuringLayout(view) {\n if (view.mParent == null || view.mAttachInfo == null) {\n return true;\n }\n if (this.mLayoutRequesters.indexOf(view) === -1) {\n this.mLayoutRequesters.push(view);\n }\n if (!this.mHandlingLayoutInLayoutRequest) {\n return true;\n }\n else {\n return false;\n }\n }\n trackFPS() {\n let nowTime = System.currentTimeMillis();\n if (this.mFpsStartTime < 0) {\n this.mFpsStartTime = this.mFpsPrevTime = nowTime;\n this.mFpsNumFrames = 0;\n }\n else {\n this.mFpsNumFrames++;\n let frameTime = nowTime - this.mFpsPrevTime;\n let totalTime = nowTime - this.mFpsStartTime;\n this.mFpsPrevTime = nowTime;\n if (totalTime > 1000) {\n let fps = this.mFpsNumFrames * 1000 / totalTime;\n Log.v(ViewRootImpl.TAG, \"FPS:\\t\" + fps);\n this.mSurface.showFps(fps);\n this.mFpsStartTime = nowTime;\n this.mFpsNumFrames = 0;\n }\n }\n }\n performDraw() {\n let fullRedrawNeeded = this.mFullRedrawNeeded;\n this.mFullRedrawNeeded = false;\n this.mIsDrawing = true;\n try {\n this.draw(fullRedrawNeeded);\n }\n finally {\n this.mIsDrawing = false;\n }\n }\n draw(fullRedrawNeeded) {\n let surface = this.mSurface;\n if (!surface.isValid()) {\n return;\n }\n if (ViewRootImpl.DEBUG_FPS) {\n this.trackFPS();\n }\n if (this.mViewScrollChanged) {\n this.mViewScrollChanged = false;\n this.mTreeObserver.dispatchOnScrollChanged();\n }\n if (fullRedrawNeeded) {\n this.mIgnoreDirtyState = true;\n this.mDirty.set(0, 0, this.mWidth, this.mHeight);\n }\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_DRAW) {\n Log.v(ViewRootImpl.TAG, \"Draw \" + this.mView + \", width=\" + this.mWidth + \", height=\" + this.mHeight + \", dirty=\" + this.mDirty);\n }\n this.mTreeObserver.dispatchOnDraw();\n this.drawSoftware();\n }\n drawSoftware() {\n let canvas;\n try {\n canvas = this.mSurface.lockCanvas(this.mDirty);\n if (!canvas)\n return;\n }\n catch (e) {\n return;\n }\n this.mDirty.setEmpty();\n this.mIsAnimating = false;\n this.mDrawingTime = SystemClock.uptimeMillis();\n this.mView.mPrivateFlags |= View.PFLAG_DRAWN;\n this.mSetIgnoreDirtyState = false;\n if (!this.mSurface['lastRenderCanvas'])\n this.mView.draw(canvas);\n if (!this.mSetIgnoreDirtyState) {\n this.mIgnoreDirtyState = false;\n }\n this.mSurface.unlockCanvasAndPost(this.mSurface['lastRenderCanvas'] || canvas);\n if (ViewRootImpl.LOCAL_LOGV) {\n Log.v(ViewRootImpl.TAG, \"Surface unlockCanvasAndPost\");\n }\n }\n checkContinueTraversalsNextFrame() {\n const continueFrame = ViewRootImpl.DEBUG_FPS ? 60 : 5;\n if (!this.mTraversalScheduled && this._continueTraversalesCount < continueFrame) {\n this._continueTraversalesCount++;\n this.scheduleTraversals();\n }\n else {\n this._continueTraversalesCount = 0;\n }\n }\n isLayoutRequested() {\n return this.mLayoutRequested;\n }\n dispatchInvalidateDelayed(view, delayMilliseconds) {\n let msg = this.mHandler.obtainMessage(ViewRootHandler.MSG_INVALIDATE, view);\n this.mHandler.sendMessageDelayed(msg, delayMilliseconds);\n }\n dispatchInvalidateRectDelayed(info, delayMilliseconds) {\n let msg = this.mHandler.obtainMessage(ViewRootHandler.MSG_INVALIDATE_RECT, info);\n this.mHandler.sendMessageDelayed(msg, delayMilliseconds);\n }\n dispatchInvalidateOnAnimation(view) {\n this.mInvalidateOnAnimationRunnable.addView(view);\n }\n dispatchInvalidateRectOnAnimation(info) {\n this.mInvalidateOnAnimationRunnable.addViewRect(info);\n }\n cancelInvalidate(view) {\n this.mHandler.removeMessages(ViewRootHandler.MSG_INVALIDATE, view);\n this.mHandler.removeMessages(ViewRootHandler.MSG_INVALIDATE_RECT, view);\n this.mInvalidateOnAnimationRunnable.removeView(view);\n }\n getParent() {\n return null;\n }\n requestLayout() {\n if (!this.mHandlingLayoutInLayoutRequest) {\n this.mLayoutRequested = true;\n this.scheduleTraversals();\n }\n }\n invalidate() {\n this.mDirty.set(0, 0, this.mWidth, this.mHeight);\n this.scheduleTraversals();\n }\n invalidateWorld(view) {\n view.invalidate();\n if (view instanceof view_3.ViewGroup) {\n let parent = view;\n for (let i = 0; i < parent.getChildCount(); i++) {\n this.invalidateWorld(parent.getChildAt(i));\n }\n }\n }\n invalidateChild(child, dirty) {\n this.invalidateChildInParent(null, dirty);\n }\n invalidateChildInParent(location, dirty) {\n if (ViewRootImpl.DEBUG_DRAW)\n Log.v(ViewRootImpl.TAG, \"Invalidate child: \" + dirty);\n if (dirty == null) {\n this.invalidate();\n return null;\n }\n else if (dirty.isEmpty() && !this.mIsAnimating) {\n return null;\n }\n const localDirty = this.mDirty;\n if (!localDirty.isEmpty() && !localDirty.contains(dirty)) {\n this.mSetIgnoreDirtyState = true;\n this.mIgnoreDirtyState = true;\n }\n localDirty.union(dirty.left, dirty.top, dirty.right, dirty.bottom);\n const intersected = localDirty.intersect(0, 0, this.mWidth, this.mHeight);\n if (!intersected) {\n localDirty.setEmpty();\n }\n if (!this.mWillDrawSoon && (intersected || this.mIsAnimating)) {\n this.scheduleTraversals();\n }\n return null;\n }\n requestChildFocus(child, focused) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE) {\n Log.v(ViewRootImpl.TAG, \"Request child focus: focus now \" + focused);\n }\n this.scheduleTraversals();\n }\n clearChildFocus(focused) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE) {\n Log.v(ViewRootImpl.TAG, \"Request child focus: focus now \" + focused);\n }\n this.scheduleTraversals();\n }\n getChildVisibleRect(child, r, offset) {\n if (child != this.mView) {\n throw new Error(\"child is not mine, honest!\");\n }\n return r.intersect(0, 0, this.mWidth, this.mHeight);\n }\n focusSearch(focused, direction) {\n if (!(this.mView instanceof view_3.ViewGroup)) {\n return null;\n }\n if (this.mView instanceof view_3.WindowManager.Layout) {\n let topWindow = this.mView.getTopFocusableWindowView();\n if (topWindow)\n return view_3.FocusFinder.getInstance().findNextFocus(topWindow, focused, direction);\n }\n return view_3.FocusFinder.getInstance().findNextFocus(this.mView, focused, direction);\n }\n bringChildToFront(child) {\n }\n focusableViewAvailable(v) {\n if (this.mView != null) {\n if (!this.mView.hasFocus()) {\n v.requestFocus();\n }\n else {\n let focused = this.mView.findFocus();\n if (focused instanceof view_3.ViewGroup) {\n let group = focused;\n if (group.getDescendantFocusability() == view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS\n && ViewRootImpl.isViewDescendantOf(v, focused)) {\n v.requestFocus();\n }\n }\n }\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof view_3.ViewGroup) && ViewRootImpl.isViewDescendantOf(theParent, parent);\n }\n childDrawableStateChanged(child) {\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n return false;\n }\n childHasTransientStateChanged(child, hasTransientState) {\n }\n dispatchInputEvent(event) {\n this.deliverInputEvent(event);\n let result = event[InputStage.FLAG_FINISHED_HANDLED];\n event[InputStage.FLAG_FINISHED] = false;\n event[InputStage.FLAG_FINISHED_HANDLED] = false;\n let continueToDom = event[ViewRootImpl.ContinueEventToDom];\n event[ViewRootImpl.ContinueEventToDom] = null;\n return result && !continueToDom;\n }\n deliverInputEvent(event) {\n this.mFirstInputStage.deliver(event);\n }\n finishInputEvent(event) {\n }\n checkForLeavingTouchModeAndConsume(event) {\n if (!this.mInTouchMode) {\n return false;\n }\n const action = event.getAction();\n if (action != view_3.KeyEvent.ACTION_DOWN) {\n return false;\n }\n if (ViewRootImpl.isNavigationKey(event)) {\n return this.ensureTouchMode(false);\n }\n if (ViewRootImpl.isTypingKey(event)) {\n this.ensureTouchMode(false);\n return false;\n }\n return false;\n }\n static isNavigationKey(keyEvent) {\n switch (keyEvent.getKeyCode()) {\n case view_3.KeyEvent.KEYCODE_DPAD_LEFT:\n case view_3.KeyEvent.KEYCODE_DPAD_RIGHT:\n case view_3.KeyEvent.KEYCODE_DPAD_UP:\n case view_3.KeyEvent.KEYCODE_DPAD_DOWN:\n case view_3.KeyEvent.KEYCODE_DPAD_CENTER:\n case view_3.KeyEvent.KEYCODE_PAGE_UP:\n case view_3.KeyEvent.KEYCODE_PAGE_DOWN:\n case view_3.KeyEvent.KEYCODE_MOVE_HOME:\n case view_3.KeyEvent.KEYCODE_MOVE_END:\n case view_3.KeyEvent.KEYCODE_TAB:\n case view_3.KeyEvent.KEYCODE_SPACE:\n case view_3.KeyEvent.KEYCODE_ENTER:\n return true;\n }\n return false;\n }\n static isTypingKey(keyEvent) {\n try {\n return keyEvent.mIsTypingKey;\n }\n catch (e) {\n console.warn(e);\n }\n return true;\n }\n ensureTouchMode(inTouchMode) {\n if (ViewRootImpl.DBG)\n Log.d(\"touchmode\", \"ensureTouchMode(\" + inTouchMode + \"), current \"\n + \"touch mode is \" + this.mInTouchMode);\n if (this.mInTouchMode == inTouchMode)\n return false;\n return this.ensureTouchModeLocally(inTouchMode);\n }\n ensureTouchModeLocally(inTouchMode) {\n if (ViewRootImpl.DBG)\n Log.d(\"touchmode\", \"ensureTouchModeLocally(\" + inTouchMode + \"), current \"\n + \"touch mode is \" + this.mInTouchMode);\n if (this.mInTouchMode == inTouchMode)\n return false;\n this.mInTouchMode = inTouchMode;\n this.mTreeObserver.dispatchOnTouchModeChanged(inTouchMode);\n return (inTouchMode) ? this.enterTouchMode() : this.leaveTouchMode();\n }\n enterTouchMode() {\n if (this.mView != null && this.mView.hasFocus()) {\n const focused = this.mView.findFocus();\n if (focused != null && !focused.isFocusableInTouchMode()) {\n const ancestorToTakeFocus = ViewRootImpl.findAncestorToTakeFocusInTouchMode(focused);\n if (ancestorToTakeFocus != null) {\n return ancestorToTakeFocus.requestFocus();\n }\n else {\n focused.clearFocusInternal(true, false);\n return true;\n }\n }\n }\n return false;\n }\n static findAncestorToTakeFocusInTouchMode(focused) {\n let parent = focused.getParent();\n while (parent instanceof view_3.ViewGroup) {\n const vgParent = parent;\n if (vgParent.getDescendantFocusability() == view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS\n && vgParent.isFocusableInTouchMode()) {\n return vgParent;\n }\n if (vgParent.isRootNamespace()) {\n return null;\n }\n else {\n parent = vgParent.getParent();\n }\n }\n return null;\n }\n leaveTouchMode() {\n if (this.mView != null) {\n if (this.mView.hasFocus()) {\n let focusedView = this.mView.findFocus();\n if (!(focusedView instanceof view_3.ViewGroup)) {\n return false;\n }\n else if (focusedView.getDescendantFocusability() !=\n view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS) {\n return false;\n }\n }\n const focused = this.focusSearch(null, View.FOCUS_DOWN);\n if (focused != null) {\n return focused.requestFocus(View.FOCUS_DOWN);\n }\n }\n return false;\n }\n static getRunQueue(viewRoot) {\n if (viewRoot) {\n if (!viewRoot.mRunQueue)\n viewRoot.mRunQueue = new ViewRootImpl.RunQueue();\n return viewRoot.mRunQueue;\n }\n else {\n if (!this.RunQueueInstance) {\n this.RunQueueInstance = new RunQueueForNoViewRoot();\n }\n return this.RunQueueInstance;\n }\n }\n }\n ViewRootImpl.TAG = \"ViewRootImpl\";\n ViewRootImpl.DBG = Log.View_DBG;\n ViewRootImpl.LOCAL_LOGV = ViewRootImpl.DBG;\n ViewRootImpl.DEBUG_DRAW = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_LAYOUT = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_INPUT_RESIZE = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_ORIENTATION = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_CONFIGURATION = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_FPS = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.ContinueEventToDom = Symbol();\n view_3.ViewRootImpl = ViewRootImpl;\n (function (ViewRootImpl) {\n class RunQueue {\n constructor() {\n this.mActions = [];\n }\n post(action) {\n this.postDelayed(action, 0);\n }\n postDelayed(action, delayMillis) {\n let handlerAction = {\n action: action,\n delay: delayMillis\n };\n this.mActions.push(handlerAction);\n }\n removeCallbacks(action) {\n this.mActions = this.mActions.filter((item) => {\n return item.action == action;\n });\n }\n executeActions(handler) {\n for (let handlerAction of this.mActions) {\n handler.postDelayed(handlerAction.action, handlerAction.delay);\n }\n this.mActions = [];\n }\n }\n ViewRootImpl.RunQueue = RunQueue;\n })(ViewRootImpl = view_3.ViewRootImpl || (view_3.ViewRootImpl = {}));\n class RunQueueForNoViewRoot extends ViewRootImpl.RunQueue {\n postDelayed(action, delayMillis) {\n RunQueueForNoViewRoot.Handler.postDelayed(action, delayMillis);\n }\n removeCallbacks(action) {\n RunQueueForNoViewRoot.Handler.removeCallbacks(action);\n }\n }\n RunQueueForNoViewRoot.Handler = new Handler();\n class TraversalRunnable {\n constructor(impl) {\n this.ViewRootImpl_this = impl;\n }\n run() {\n this.ViewRootImpl_this.doTraversal();\n }\n }\n class InvalidateOnAnimationRunnable {\n constructor(handler) {\n this.mPosted = false;\n this.mViews = new Set();\n this.mViewRects = new Map();\n this.mHandler = handler;\n }\n addView(view) {\n this.mViews.add(view);\n this.postIfNeededLocked();\n }\n addViewRect(info) {\n this.mViewRects.set(info.target, info);\n this.postIfNeededLocked();\n }\n removeView(view) {\n this.mViews.delete(view);\n this.mViewRects.delete(view);\n if (this.mPosted && this.mViews.size === 0 && this.mViewRects.size === 0) {\n this.mHandler.removeCallbacks(this);\n this.mPosted = false;\n }\n }\n run() {\n this.mPosted = false;\n for (let view of this.mViews) {\n view.invalidate();\n }\n this.mViews.clear();\n for (let info of this.mViewRects.values()) {\n info.target.invalidate(info.left, info.top, info.right, info.bottom);\n info.recycle();\n }\n this.mViewRects.clear();\n }\n postIfNeededLocked() {\n if (!this.mPosted) {\n this.mHandler.post(this);\n this.mPosted = true;\n }\n }\n }\n class ViewRootHandler extends Handler {\n handleMessage(msg) {\n switch (msg.what) {\n case ViewRootHandler.MSG_INVALIDATE:\n msg.obj.invalidate();\n break;\n case ViewRootHandler.MSG_INVALIDATE_RECT:\n const info = msg.obj;\n info.target.invalidate(info.left, info.top, info.right, info.bottom);\n info.recycle();\n break;\n }\n }\n }\n ViewRootHandler.MSG_INVALIDATE = 1;\n ViewRootHandler.MSG_INVALIDATE_RECT = 2;\n class InputStage {\n constructor(impl, next) {\n this.ViewRootImpl_this = impl;\n this.mNext = next;\n }\n deliver(event) {\n if (event[InputStage.FLAG_FINISHED]) {\n this.forward(event);\n }\n else if (this.shouldDropInputEvent(event)) {\n this.finish(event, false);\n }\n else {\n this.apply(event, this.onProcess(event));\n }\n }\n finish(event, handled) {\n event[InputStage.FLAG_FINISHED] = true;\n if (handled) {\n event[InputStage.FLAG_FINISHED_HANDLED] = true;\n }\n this.forward(event);\n }\n forward(event) {\n this.onDeliverToNext(event);\n }\n apply(event, result) {\n if (result == InputStage.FORWARD) {\n this.forward(event);\n }\n else if (result == InputStage.FINISH_HANDLED) {\n this.finish(event, true);\n }\n else if (result == InputStage.FINISH_NOT_HANDLED) {\n this.finish(event, false);\n }\n else {\n throw new Error(\"Invalid result: \" + result);\n }\n }\n onDeliverToNext(event) {\n if (this.mNext != null) {\n this.mNext.deliver(event);\n }\n else {\n this.ViewRootImpl_this.finishInputEvent(event);\n }\n }\n onProcess(event) {\n return InputStage.FORWARD;\n }\n shouldDropInputEvent(event) {\n if (this.ViewRootImpl_this.mView == null || !this.ViewRootImpl_this.mAdded) {\n Log.w(ViewRootImpl.TAG, \"Dropping event due to root view being removed: \" + event);\n return true;\n }\n return false;\n }\n }\n InputStage.FLAG_FINISHED = Symbol();\n InputStage.FLAG_FINISHED_HANDLED = Symbol();\n InputStage.FORWARD = 0;\n InputStage.FINISH_HANDLED = 1;\n InputStage.FINISH_NOT_HANDLED = 2;\n class EarlyPostImeInputStage extends InputStage {\n onProcess(event) {\n if (event instanceof view_3.MotionEvent) {\n return this.processMotionEvent(event);\n }\n else if (event instanceof view_3.KeyEvent) {\n return this.processKeyEvent(event);\n }\n return InputStage.FORWARD;\n }\n processKeyEvent(event) {\n if (this.ViewRootImpl_this.checkForLeavingTouchModeAndConsume(event)) {\n return InputStage.FINISH_HANDLED;\n }\n return InputStage.FORWARD;\n }\n processMotionEvent(event) {\n const action = event.getAction();\n if (action == view_3.MotionEvent.ACTION_DOWN || action == view_3.MotionEvent.ACTION_SCROLL) {\n this.ViewRootImpl_this.ensureTouchMode(true);\n }\n event.offsetLocation(-this.ViewRootImpl_this.mWinFrame.left, -this.ViewRootImpl_this.mWinFrame.top);\n return InputStage.FORWARD;\n }\n }\n class ViewPostImeInputStage extends InputStage {\n onProcess(event) {\n if (event instanceof view_3.KeyEvent) {\n return this.processKeyEvent(event);\n }\n else if (event instanceof view_3.MotionEvent) {\n if (event.isTouchEvent()) {\n return this.processTouchEvent(event);\n }\n else {\n return this.processGenericMotionEvent(event);\n }\n }\n return InputStage.FORWARD;\n }\n processKeyEvent(event) {\n let mView = this.ViewRootImpl_this.mView;\n if (this.ViewRootImpl_this.mView.dispatchKeyEvent(event)) {\n return InputStage.FINISH_HANDLED;\n }\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n if (event.getAction() == view_3.KeyEvent.ACTION_DOWN\n && event.isCtrlPressed()\n && event.getRepeatCount() == 0) {\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n }\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n if (event.getAction() == view_3.KeyEvent.ACTION_DOWN) {\n let direction = 0;\n switch (event.getKeyCode()) {\n case view_3.KeyEvent.KEYCODE_DPAD_LEFT:\n direction = View.FOCUS_LEFT;\n break;\n case view_3.KeyEvent.KEYCODE_DPAD_RIGHT:\n direction = View.FOCUS_RIGHT;\n break;\n case view_3.KeyEvent.KEYCODE_DPAD_UP:\n direction = View.FOCUS_UP;\n break;\n case view_3.KeyEvent.KEYCODE_DPAD_DOWN:\n direction = View.FOCUS_DOWN;\n break;\n case view_3.KeyEvent.KEYCODE_TAB:\n if (event.isShiftPressed()) {\n direction = View.FOCUS_BACKWARD;\n }\n else {\n direction = View.FOCUS_FORWARD;\n }\n break;\n }\n if (direction != 0) {\n let focused = mView.findFocus();\n if (focused != null) {\n let v = focused.focusSearch(direction);\n if (v != null && v != focused) {\n focused.getFocusedRect(this.ViewRootImpl_this.mTempRect);\n if (mView instanceof view_3.ViewGroup) {\n mView.offsetDescendantRectToMyCoords(focused, this.ViewRootImpl_this.mTempRect);\n mView.offsetRectIntoDescendantCoords(v, this.ViewRootImpl_this.mTempRect);\n }\n if (v.requestFocus(direction, this.ViewRootImpl_this.mTempRect)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n if (mView.dispatchUnhandledMove(focused, direction)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n else {\n let v = this.ViewRootImpl_this.focusSearch(null, direction);\n if (v != null && v.requestFocus(direction)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n }\n }\n return InputStage.FORWARD;\n }\n processGenericMotionEvent(event) {\n if (this.ViewRootImpl_this.mView.dispatchGenericMotionEvent(event)) {\n return InputStage.FINISH_HANDLED;\n }\n return InputStage.FORWARD;\n }\n processTouchEvent(event) {\n let handled = this.ViewRootImpl_this.mView.dispatchTouchEvent(event);\n return handled ? InputStage.FINISH_HANDLED : InputStage.FORWARD;\n }\n }\n class SyntheticInputStage extends InputStage {\n onProcess(event) {\n return super.onProcess(event);\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_4) {\n var View = android.view.View;\n var Rect = android.graphics.Rect;\n var ArrayList = java.util.ArrayList;\n class FocusFinder {\n constructor() {\n this.mFocusedRect = new Rect();\n this.mOtherRect = new Rect();\n this.mBestCandidateRect = new Rect();\n this.mSequentialFocusComparator = new SequentialFocusComparator();\n this.mTempList = new ArrayList();\n }\n static getInstance() {\n if (!FocusFinder.sFocusFinder) {\n FocusFinder.sFocusFinder = new FocusFinder();\n }\n return FocusFinder.sFocusFinder;\n }\n findNextFocus(root, focused, direction) {\n return this._findNextFocus(root, focused, null, direction);\n }\n findNextFocusFromRect(root, focusedRect, direction) {\n this.mFocusedRect.set(focusedRect);\n return this._findNextFocus(root, null, this.mFocusedRect, direction);\n }\n _findNextFocus(root, focused, focusedRect, direction) {\n let next = null;\n if (focused != null) {\n next = this.findNextUserSpecifiedFocus(root, focused, direction);\n }\n if (next != null) {\n return next;\n }\n let focusables = this.mTempList;\n try {\n focusables.clear();\n root.addFocusables(focusables, direction);\n if (!focusables.isEmpty()) {\n next = this.__findNextFocus(root, focused, focusedRect, direction, focusables);\n }\n }\n finally {\n focusables.clear();\n }\n return next;\n }\n findNextUserSpecifiedFocus(root, focused, direction) {\n let userSetNextFocus = focused.findUserSetNextFocus(root, direction);\n if (userSetNextFocus != null && userSetNextFocus.isFocusable()\n && (!userSetNextFocus.isInTouchMode()\n || userSetNextFocus.isFocusableInTouchMode())) {\n return userSetNextFocus;\n }\n return null;\n }\n __findNextFocus(root, focused, focusedRect, direction, focusables) {\n if (focused != null) {\n if (focusedRect == null) {\n focusedRect = this.mFocusedRect;\n }\n focused.getFocusedRect(focusedRect);\n root.offsetDescendantRectToMyCoords(focused, focusedRect);\n }\n else {\n if (focusedRect == null) {\n focusedRect = this.mFocusedRect;\n switch (direction) {\n case View.FOCUS_RIGHT:\n case View.FOCUS_DOWN:\n this.setFocusTopLeft(root, focusedRect);\n break;\n case View.FOCUS_FORWARD:\n this.setFocusTopLeft(root, focusedRect);\n break;\n case View.FOCUS_LEFT:\n case View.FOCUS_UP:\n this.setFocusBottomRight(root, focusedRect);\n break;\n case View.FOCUS_BACKWARD:\n this.setFocusBottomRight(root, focusedRect);\n }\n }\n }\n switch (direction) {\n case View.FOCUS_FORWARD:\n case View.FOCUS_BACKWARD:\n return this.findNextFocusInRelativeDirection(focusables, root, focused, focusedRect, direction);\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return this.findNextFocusInAbsoluteDirection(focusables, root, focused, focusedRect, direction);\n default:\n throw new Error(\"Unknown direction: \" + direction);\n }\n }\n findNextFocusInRelativeDirection(focusables, root, focused, focusedRect, direction) {\n try {\n this.mSequentialFocusComparator.setRoot(root);\n this.mSequentialFocusComparator.sort(focusables);\n }\n finally {\n this.mSequentialFocusComparator.recycle();\n }\n const count = focusables.size();\n switch (direction) {\n case View.FOCUS_FORWARD:\n return FocusFinder.getNextFocusable(focused, focusables, count);\n case View.FOCUS_BACKWARD:\n return FocusFinder.getPreviousFocusable(focused, focusables, count);\n }\n return focusables.get(count - 1);\n }\n setFocusBottomRight(root, focusedRect) {\n const rootBottom = root.getScrollY() + root.getHeight();\n const rootRight = root.getScrollX() + root.getWidth();\n focusedRect.set(rootRight, rootBottom, rootRight, rootBottom);\n }\n setFocusTopLeft(root, focusedRect) {\n const rootTop = root.getScrollY();\n const rootLeft = root.getScrollX();\n focusedRect.set(rootLeft, rootTop, rootLeft, rootTop);\n }\n findNextFocusInAbsoluteDirection(focusables, root, focused, focusedRect, direction) {\n this.mBestCandidateRect.set(focusedRect);\n switch (direction) {\n case View.FOCUS_LEFT:\n this.mBestCandidateRect.offset(focusedRect.width() + 1, 0);\n break;\n case View.FOCUS_RIGHT:\n this.mBestCandidateRect.offset(-(focusedRect.width() + 1), 0);\n break;\n case View.FOCUS_UP:\n this.mBestCandidateRect.offset(0, focusedRect.height() + 1);\n break;\n case View.FOCUS_DOWN:\n this.mBestCandidateRect.offset(0, -(focusedRect.height() + 1));\n }\n let closest = null;\n let numFocusables = focusables.size();\n for (let i = 0; i < numFocusables; i++) {\n let focusable = focusables.get(i);\n if (focusable == focused || focusable == root)\n continue;\n focusable.getFocusedRect(this.mOtherRect);\n root.offsetDescendantRectToMyCoords(focusable, this.mOtherRect);\n if (this.isBetterCandidate(direction, focusedRect, this.mOtherRect, this.mBestCandidateRect)) {\n this.mBestCandidateRect.set(this.mOtherRect);\n closest = focusable;\n }\n }\n return closest;\n }\n static getNextFocusable(focused, focusables, count) {\n if (focused != null) {\n let position = focusables.lastIndexOf(focused);\n if (position >= 0 && position + 1 < count) {\n return focusables.get(position + 1);\n }\n }\n if (!focusables.isEmpty()) {\n return focusables.get(0);\n }\n return null;\n }\n static getPreviousFocusable(focused, focusables, count) {\n if (focused != null) {\n let position = focusables.indexOf(focused);\n if (position > 0) {\n return focusables.get(position - 1);\n }\n }\n if (!focusables.isEmpty()) {\n return focusables.get(count - 1);\n }\n return null;\n }\n isBetterCandidate(direction, source, rect1, rect2) {\n if (!this.isCandidate(source, rect1, direction)) {\n return false;\n }\n if (!this.isCandidate(source, rect2, direction)) {\n return true;\n }\n if (this.beamBeats(direction, source, rect1, rect2)) {\n return true;\n }\n if (this.beamBeats(direction, source, rect2, rect1)) {\n return false;\n }\n return (this.getWeightedDistanceFor(FocusFinder.majorAxisDistance(direction, source, rect1), FocusFinder.minorAxisDistance(direction, source, rect1))\n < this.getWeightedDistanceFor(FocusFinder.majorAxisDistance(direction, source, rect2), FocusFinder.minorAxisDistance(direction, source, rect2)));\n }\n beamBeats(direction, source, rect1, rect2) {\n const rect1InSrcBeam = this.beamsOverlap(direction, source, rect1);\n const rect2InSrcBeam = this.beamsOverlap(direction, source, rect2);\n if (rect2InSrcBeam || !rect1InSrcBeam) {\n return false;\n }\n if (!this.isToDirectionOf(direction, source, rect2)) {\n return true;\n }\n if ((direction == View.FOCUS_LEFT || direction == View.FOCUS_RIGHT)) {\n return true;\n }\n return (FocusFinder.majorAxisDistance(direction, source, rect1)\n < FocusFinder.majorAxisDistanceToFarEdge(direction, source, rect2));\n }\n getWeightedDistanceFor(majorAxisDistance, minorAxisDistance) {\n return 13 * majorAxisDistance * majorAxisDistance\n + minorAxisDistance * minorAxisDistance;\n }\n isCandidate(srcRect, destRect, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return (srcRect.right > destRect.right || srcRect.left >= destRect.right)\n && srcRect.left > destRect.left;\n case View.FOCUS_RIGHT:\n return (srcRect.left < destRect.left || srcRect.right <= destRect.left)\n && srcRect.right < destRect.right;\n case View.FOCUS_UP:\n return (srcRect.bottom > destRect.bottom || srcRect.top >= destRect.bottom)\n && srcRect.top > destRect.top;\n case View.FOCUS_DOWN:\n return (srcRect.top < destRect.top || srcRect.bottom <= destRect.top)\n && srcRect.bottom < destRect.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n beamsOverlap(direction, rect1, rect2) {\n switch (direction) {\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return (rect2.bottom >= rect1.top) && (rect2.top <= rect1.bottom);\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n return (rect2.right >= rect1.left) && (rect2.left <= rect1.right);\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n isToDirectionOf(direction, src, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return src.left >= dest.right;\n case View.FOCUS_RIGHT:\n return src.right <= dest.left;\n case View.FOCUS_UP:\n return src.top >= dest.bottom;\n case View.FOCUS_DOWN:\n return src.bottom <= dest.top;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static majorAxisDistance(direction, source, dest) {\n return Math.max(0, FocusFinder.majorAxisDistanceRaw(direction, source, dest));\n }\n static majorAxisDistanceRaw(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return source.left - dest.right;\n case View.FOCUS_RIGHT:\n return dest.left - source.right;\n case View.FOCUS_UP:\n return source.top - dest.bottom;\n case View.FOCUS_DOWN:\n return dest.top - source.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static majorAxisDistanceToFarEdge(direction, source, dest) {\n return Math.max(1, FocusFinder.majorAxisDistanceToFarEdgeRaw(direction, source, dest));\n }\n static majorAxisDistanceToFarEdgeRaw(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return source.left - dest.left;\n case View.FOCUS_RIGHT:\n return dest.right - source.right;\n case View.FOCUS_UP:\n return source.top - dest.top;\n case View.FOCUS_DOWN:\n return dest.bottom - source.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static minorAxisDistance(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return Math.abs(((source.top + source.height() / 2) -\n ((dest.top + dest.height() / 2))));\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n return Math.abs(((source.left + source.width() / 2) -\n ((dest.left + dest.width() / 2))));\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n findNearestTouchable(root, x, y, direction, deltas) {\n let touchables = root.getTouchables();\n let minDistance = Number.MAX_SAFE_INTEGER;\n let closest = null;\n let numTouchables = touchables.size();\n let edgeSlop = view_4.ViewConfiguration.get().getScaledEdgeSlop();\n let closestBounds = new Rect();\n let touchableBounds = this.mOtherRect;\n for (let i = 0; i < numTouchables; i++) {\n let touchable = touchables.get(i);\n touchable.getDrawingRect(touchableBounds);\n root.offsetRectBetweenParentAndChild(touchable, touchableBounds, true, true);\n if (!this.isTouchCandidate(x, y, touchableBounds, direction)) {\n continue;\n }\n let distance = Number.MAX_SAFE_INTEGER;\n switch (direction) {\n case View.FOCUS_LEFT:\n distance = x - touchableBounds.right + 1;\n break;\n case View.FOCUS_RIGHT:\n distance = touchableBounds.left;\n break;\n case View.FOCUS_UP:\n distance = y - touchableBounds.bottom + 1;\n break;\n case View.FOCUS_DOWN:\n distance = touchableBounds.top;\n break;\n }\n if (distance < edgeSlop) {\n if (closest == null ||\n closestBounds.contains(touchableBounds) ||\n (!touchableBounds.contains(closestBounds) && distance < minDistance)) {\n minDistance = distance;\n closest = touchable;\n closestBounds.set(touchableBounds);\n switch (direction) {\n case View.FOCUS_LEFT:\n deltas[0] = -distance;\n break;\n case View.FOCUS_RIGHT:\n deltas[0] = distance;\n break;\n case View.FOCUS_UP:\n deltas[1] = -distance;\n break;\n case View.FOCUS_DOWN:\n deltas[1] = distance;\n break;\n }\n }\n }\n }\n return closest;\n }\n isTouchCandidate(x, y, destRect, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return destRect.left <= x && destRect.top <= y && y <= destRect.bottom;\n case View.FOCUS_RIGHT:\n return destRect.left >= x && destRect.top <= y && y <= destRect.bottom;\n case View.FOCUS_UP:\n return destRect.top <= y && destRect.left <= x && x <= destRect.right;\n case View.FOCUS_DOWN:\n return destRect.top >= y && destRect.left <= x && x <= destRect.right;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n }\n view_4.FocusFinder = FocusFinder;\n class SequentialFocusComparator {\n constructor() {\n this.mFirstRect = new Rect();\n this.mSecondRect = new Rect();\n this.mIsLayoutRtl = false;\n this.compareFn = (first, second) => {\n if (first == second) {\n return 0;\n }\n this.getRect(first, this.mFirstRect);\n this.getRect(second, this.mSecondRect);\n if (this.mFirstRect.top < this.mSecondRect.top) {\n return -1;\n }\n else if (this.mFirstRect.top > this.mSecondRect.top) {\n return 1;\n }\n else if (this.mFirstRect.left < this.mSecondRect.left) {\n return this.mIsLayoutRtl ? 1 : -1;\n }\n else if (this.mFirstRect.left > this.mSecondRect.left) {\n return this.mIsLayoutRtl ? -1 : 1;\n }\n else if (this.mFirstRect.bottom < this.mSecondRect.bottom) {\n return -1;\n }\n else if (this.mFirstRect.bottom > this.mSecondRect.bottom) {\n return 1;\n }\n else if (this.mFirstRect.right < this.mSecondRect.right) {\n return this.mIsLayoutRtl ? 1 : -1;\n }\n else if (this.mFirstRect.right > this.mSecondRect.right) {\n return this.mIsLayoutRtl ? -1 : 1;\n }\n else {\n return 0;\n }\n };\n }\n recycle() {\n this.mRoot = null;\n }\n setRoot(root) {\n this.mRoot = root;\n }\n getRect(view, rect) {\n view.getDrawingRect(rect);\n this.mRoot.offsetDescendantRectToMyCoords(view, rect);\n }\n sort(array) {\n array.sort(this.compareFn);\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Integer {\n static parseInt(value) {\n return Number.parseInt(value);\n }\n static toHexString(n) {\n if (!n)\n return n + '';\n return n.toString(16);\n }\n }\n Integer.MIN_VALUE = -0x80000000;\n Integer.MAX_VALUE = 0x7fffffff;\n lang.Integer = Integer;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_5) {\n var Rect = android.graphics.Rect;\n var SystemClock = android.os.SystemClock;\n var System = java.lang.System;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var Transformation = view_5.animation.Transformation;\n var AttrBinder = androidui.attr.AttrBinder;\n class ViewGroup extends view_5.View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mLastTouchDownTime = 0;\n this.mLastTouchDownIndex = -1;\n this.mLastTouchDownX = 0;\n this.mLastTouchDownY = 0;\n this.mGroupFlags = 0;\n this.mLayoutMode = ViewGroup.LAYOUT_MODE_UNDEFINED;\n this.mChildren = [];\n this.mSuppressLayout = false;\n this.mLayoutCalledWhileSuppressed = false;\n this.mChildCountWithTransientState = 0;\n this.initViewGroup();\n }\n get mChildrenCount() {\n return this.mChildren.length;\n }\n initBindAttr() {\n super.initBindAttr();\n if (!ViewGroup.ViewGroupClassAttrBind) {\n ViewGroup.ViewGroupClassAttrBind = new AttrBinder.ClassBinderMap();\n ViewGroup.ViewGroupClassAttrBind.set('clipChildren', {\n setter(v, value) {\n v.setClipChildren(v._attrBinder.parseBoolean(value));\n },\n getter(v) {\n return v.getClipChildren();\n }\n }).set('clipToPadding', {\n setter(v, value) {\n v.setClipToPadding(v._attrBinder.parseBoolean(value));\n },\n getter(v) {\n return v.isClipToPadding();\n }\n }).set('animationCache', {\n setter(v, value) {\n v.setAnimationCacheEnabled(v._attrBinder.parseBoolean(value, true));\n }\n }).set('persistentDrawingCache', {\n setter(v, value) {\n if (value === 'none')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);\n else if (value === 'animation')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);\n else if (value === 'scrolling')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);\n else if (value === 'all')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);\n }\n }).set('addStatesFromChildren', {\n setter(v, value) {\n v.setAddStatesFromChildren(v._attrBinder.parseBoolean(value, false));\n }\n }).set('alwaysDrawnWithCache', {\n setter(v, value) {\n v.setAlwaysDrawnWithCacheEnabled(v._attrBinder.parseBoolean(value, true));\n }\n }).set('descendantFocusability', {\n setter(v, value) {\n if (value == 'beforeDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n else if (value == 'afterDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n else if (value == 'blocksDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);\n }\n }).set('splitMotionEvents', {\n setter(v, value) {\n v.setMotionEventSplittingEnabled(v._attrBinder.parseBoolean(value, false));\n }\n });\n }\n this._attrBinder.addClassAttrBind(ViewGroup.ViewGroupClassAttrBind);\n }\n initViewGroup() {\n this.setFlags(view_5.View.WILL_NOT_DRAW, view_5.View.DRAW_MASK);\n this.mGroupFlags |= ViewGroup.FLAG_CLIP_CHILDREN;\n this.mGroupFlags |= ViewGroup.FLAG_CLIP_TO_PADDING;\n this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_DONE;\n this.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.mPersistentDrawingCache = ViewGroup.PERSISTENT_SCROLLING_CACHE;\n }\n getDescendantFocusability() {\n return this.mGroupFlags & ViewGroup.FLAG_MASK_FOCUSABILITY;\n }\n setDescendantFocusability(focusability) {\n switch (focusability) {\n case ViewGroup.FOCUS_BEFORE_DESCENDANTS:\n case ViewGroup.FOCUS_AFTER_DESCENDANTS:\n case ViewGroup.FOCUS_BLOCK_DESCENDANTS:\n break;\n default:\n throw new Error(\"must be one of FOCUS_BEFORE_DESCENDANTS, \"\n + \"FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS\");\n }\n this.mGroupFlags &= ~ViewGroup.FLAG_MASK_FOCUSABILITY;\n this.mGroupFlags |= (focusability & ViewGroup.FLAG_MASK_FOCUSABILITY);\n }\n handleFocusGainInternal(direction, previouslyFocusedRect) {\n if (this.mFocused != null) {\n this.mFocused.unFocus();\n this.mFocused = null;\n }\n super.handleFocusGainInternal(direction, previouslyFocusedRect);\n }\n requestChildFocus(child, focused) {\n if (view_5.View.DBG) {\n System.out.println(this + \" requestChildFocus()\");\n }\n if (this.getDescendantFocusability() == ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n return;\n }\n super.unFocus();\n if (this.mFocused != child) {\n if (this.mFocused != null) {\n this.mFocused.unFocus();\n }\n this.mFocused = child;\n }\n if (this.mParent != null) {\n this.mParent.requestChildFocus(this, focused);\n }\n }\n focusableViewAvailable(v) {\n if (this.mParent != null\n && (this.getDescendantFocusability() != ViewGroup.FOCUS_BLOCK_DESCENDANTS)\n && !(this.isFocused() && this.getDescendantFocusability() != ViewGroup.FOCUS_AFTER_DESCENDANTS)) {\n this.mParent.focusableViewAvailable(v);\n }\n }\n focusSearch(...args) {\n if (arguments.length === 1) {\n return super.focusSearch(args[0]);\n }\n let [focused, direction] = args;\n if (this.isRootNamespace()) {\n return view_5.FocusFinder.getInstance().findNextFocus(this, focused, direction);\n }\n else if (this.mParent != null) {\n return this.mParent.focusSearch(focused, direction);\n }\n return null;\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n return false;\n }\n childHasTransientStateChanged(child, childHasTransientState) {\n const oldHasTransientState = this.hasTransientState();\n if (childHasTransientState) {\n this.mChildCountWithTransientState++;\n }\n else {\n this.mChildCountWithTransientState--;\n }\n const newHasTransientState = this.hasTransientState();\n if (this.mParent != null && oldHasTransientState != newHasTransientState) {\n this.mParent.childHasTransientStateChanged(this, newHasTransientState);\n }\n }\n hasTransientState() {\n return this.mChildCountWithTransientState > 0 || super.hasTransientState();\n }\n dispatchUnhandledMove(focused, direction) {\n return this.mFocused != null && this.mFocused.dispatchUnhandledMove(focused, direction);\n }\n clearChildFocus(child) {\n if (view_5.View.DBG) {\n System.out.println(this + \" clearChildFocus()\");\n }\n this.mFocused = null;\n if (this.mParent != null) {\n this.mParent.clearChildFocus(this);\n }\n }\n clearFocus() {\n if (view_5.View.DBG) {\n System.out.println(this + \" clearFocus()\");\n }\n if (this.mFocused == null) {\n super.clearFocus();\n }\n else {\n let focused = this.mFocused;\n this.mFocused = null;\n focused.clearFocus();\n }\n }\n unFocus() {\n if (view_5.View.DBG) {\n System.out.println(this + \" unFocus()\");\n }\n if (this.mFocused == null) {\n super.unFocus();\n }\n else {\n this.mFocused.unFocus();\n this.mFocused = null;\n }\n }\n getFocusedChild() {\n return this.mFocused;\n }\n hasFocus() {\n return (this.mPrivateFlags & view_5.View.PFLAG_FOCUSED) != 0 || this.mFocused != null;\n }\n findFocus() {\n if (ViewGroup.DBG) {\n System.out.println(\"Find focus in \" + this + \": flags=\" + this.isFocused() + \", child=\" + this.mFocused);\n }\n if (this.isFocused()) {\n return this;\n }\n if (this.mFocused != null) {\n return this.mFocused.findFocus();\n }\n return null;\n }\n hasFocusable() {\n if ((this.mViewFlags & view_5.View.VISIBILITY_MASK) != view_5.View.VISIBLE) {\n return false;\n }\n if (this.isFocusable()) {\n return true;\n }\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (child.hasFocusable()) {\n return true;\n }\n }\n }\n return false;\n }\n addFocusables(views, direction, focusableMode = view_5.View.FOCUSABLES_TOUCH_MODE) {\n const focusableCount = views.size();\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) {\n child.addFocusables(views, direction, focusableMode);\n }\n }\n }\n if (descendantFocusability != ViewGroup.FOCUS_AFTER_DESCENDANTS\n || (focusableCount == views.size())) {\n super.addFocusables(views, direction, focusableMode);\n }\n }\n requestFocus(direction = view_5.View.FOCUS_DOWN, previouslyFocusedRect = null) {\n if (view_5.View.DBG) {\n System.out.println(this + \" ViewGroup.requestFocus direction=\"\n + direction);\n }\n let descendantFocusability = this.getDescendantFocusability();\n switch (descendantFocusability) {\n case ViewGroup.FOCUS_BLOCK_DESCENDANTS:\n return super.requestFocus(direction, previouslyFocusedRect);\n case ViewGroup.FOCUS_BEFORE_DESCENDANTS: {\n const took = super.requestFocus(direction, previouslyFocusedRect);\n return took ? took : this.onRequestFocusInDescendants(direction, previouslyFocusedRect);\n }\n case ViewGroup.FOCUS_AFTER_DESCENDANTS: {\n const took = this.onRequestFocusInDescendants(direction, previouslyFocusedRect);\n return took ? took : super.requestFocus(direction, previouslyFocusedRect);\n }\n default:\n throw new Error(\"descendant focusability must be \"\n + \"one of FOCUS_BEFORE_DESCENDANTS, FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS \"\n + \"but is \" + descendantFocusability);\n }\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n let index;\n let increment;\n let end;\n let count = this.mChildrenCount;\n if ((direction & view_5.View.FOCUS_FORWARD) != 0) {\n index = 0;\n increment = 1;\n end = count;\n }\n else {\n index = count - 1;\n increment = -1;\n end = -1;\n }\n const children = this.mChildren;\n for (let i = index; i != end; i += increment) {\n let child = children[i];\n if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) {\n if (child.requestFocus(direction, previouslyFocusedRect)) {\n return true;\n }\n }\n }\n return false;\n }\n addView(...args) {\n let child = args[0];\n let params = child.getLayoutParams();\n let index = -1;\n if (args.length == 2) {\n if (args[1] instanceof ViewGroup.LayoutParams)\n params = args[1];\n else if (typeof args[1] === 'number')\n index = args[1];\n }\n else if (args.length == 3) {\n if (args[2] instanceof ViewGroup.LayoutParams) {\n index = args[1];\n params = args[2];\n }\n else {\n params = this.generateDefaultLayoutParams();\n params.width = args[1];\n params.height = args[2];\n }\n }\n if (params == null) {\n params = this.generateDefaultLayoutParams();\n if (params == null) {\n throw new Error(\"generateDefaultLayoutParams() cannot return null\");\n }\n }\n this.requestLayout();\n this.invalidate(true);\n this.addViewInner(child, index, params, false);\n }\n checkLayoutParams(p) {\n return p != null;\n }\n setOnHierarchyChangeListener(listener) {\n this.mOnHierarchyChangeListener = listener;\n }\n onViewAdded(child) {\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewAdded(this, child);\n }\n }\n onViewRemoved(child) {\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewRemoved(this, child);\n }\n }\n clearCachedLayoutMode() {\n if (!this.hasBooleanFlag(ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET)) {\n this.mLayoutMode = ViewGroup.LAYOUT_MODE_UNDEFINED;\n }\n }\n addViewInLayout(child, index, params, preventRequestLayout = false) {\n child.mParent = null;\n this.addViewInner(child, index, params, preventRequestLayout);\n child.mPrivateFlags = (child.mPrivateFlags & ~ViewGroup.PFLAG_DIRTY_MASK) | ViewGroup.PFLAG_DRAWN;\n return true;\n }\n cleanupLayoutState(child) {\n child.mPrivateFlags &= ~view_5.View.PFLAG_FORCE_LAYOUT;\n }\n addViewInner(child, index, params, preventRequestLayout) {\n if (child.getParent() != null) {\n throw new Error(\"The specified child already has a parent. \" +\n \"You must call removeView() on the child's parent first.\");\n }\n if (!this.checkLayoutParams(params)) {\n params = this.generateLayoutParams(params);\n }\n if (preventRequestLayout) {\n child.mLayoutParams = params;\n }\n else {\n child.setLayoutParams(params);\n }\n if (index < 0) {\n index = this.mChildrenCount;\n }\n if (this.mDisappearingChildren)\n this.mDisappearingChildren.remove(child);\n this.addInArray(child, index);\n if (preventRequestLayout) {\n child.assignParent(this);\n }\n else {\n child.mParent = this;\n }\n if (child.hasFocus()) {\n this.requestChildFocus(child, child.findFocus());\n }\n let ai = this.mAttachInfo;\n if (ai != null && (this.mGroupFlags & ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW) == 0) {\n child.dispatchAttachedToWindow(this.mAttachInfo, (this.mViewFlags & ViewGroup.VISIBILITY_MASK));\n }\n this.onViewAdded(child);\n if ((child.mViewFlags & ViewGroup.DUPLICATE_PARENT_STATE) == ViewGroup.DUPLICATE_PARENT_STATE) {\n this.mGroupFlags |= ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE;\n }\n }\n addInArray(child, index) {\n let count = this.mChildrenCount;\n if (index == count) {\n this.mChildren.push(child);\n this.addToBindElement(child.bindElement, null);\n }\n else if (index < count) {\n let refChild = this.getChildAt(index);\n this.mChildren.splice(index, 0, child);\n this.addToBindElement(child.bindElement, refChild.bindElement);\n }\n else {\n throw new Error(\"index=\" + index + \" count=\" + count);\n }\n }\n addToBindElement(childElement, insertBeforeElement) {\n if (childElement.parentElement) {\n if (childElement.parentElement == this.bindElement)\n return;\n childElement.parentElement.removeChild(childElement);\n }\n if (insertBeforeElement) {\n this.bindElement.insertBefore(childElement, insertBeforeElement);\n }\n else {\n this.bindElement.appendChild(childElement);\n }\n }\n removeChildElement(childElement) {\n try {\n this.bindElement.removeChild(childElement);\n }\n catch (e) {\n }\n }\n removeFromArray(index, count = 1) {\n let start = Math.max(0, index);\n let end = Math.min(this.mChildrenCount, start + count);\n if (start == end) {\n return;\n }\n for (let i = start; i < end; i++) {\n this.mChildren[i].mParent = null;\n this.removeChildElement(this.mChildren[i].bindElement);\n }\n this.mChildren.splice(index, end - start);\n }\n removeView(view) {\n this.removeViewInternal(view);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViewInLayout(view) {\n this.removeViewInternal(view);\n }\n removeViewsInLayout(start, count) {\n this.removeViewsInternal(start, count);\n }\n removeViewAt(index) {\n this.removeViewsInternal(index, 1);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViews(start, count) {\n this.removeViewsInternal(start, count);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViewInternal(view) {\n let index = this.indexOfChild(view);\n if (index >= 0) {\n this.removeViewsInternal(index, 1);\n }\n }\n removeViewsInternal(start, count) {\n let focused = this.mFocused;\n let clearChildFocus = false;\n const detach = this.mAttachInfo != null;\n const children = this.mChildren;\n const end = start + count;\n for (let i = start; i < end; i++) {\n const view = children[i];\n if (view == focused) {\n view.unFocus();\n clearChildFocus = true;\n }\n this.cancelTouchTarget(view);\n if (view.getAnimation() != null) {\n this.addDisappearingView(view);\n }\n else if (detach) {\n view.dispatchDetachedFromWindow();\n }\n this.onViewRemoved(view);\n }\n this.removeFromArray(start, count);\n if (clearChildFocus) {\n this.clearChildFocus(focused);\n if (!this.rootViewRequestFocus()) {\n this.notifyGlobalFocusCleared(focused);\n }\n }\n }\n removeAllViews() {\n this.removeAllViewsInLayout();\n this.requestLayout();\n this.invalidate(true);\n }\n removeAllViewsInLayout() {\n const count = this.mChildrenCount;\n if (count <= 0) {\n return;\n }\n this.removeViewsInternal(0, count);\n }\n detachViewFromParent(child) {\n if (child instanceof view_5.View)\n child = this.indexOfChild(child);\n this.removeFromArray(child);\n }\n removeDetachedView(child, animate) {\n if (child == this.mFocused) {\n child.clearFocus();\n }\n this.cancelTouchTarget(child);\n if ((animate && child.getAnimation() != null)) {\n this.addDisappearingView(child);\n }\n else if (child.mAttachInfo != null) {\n child.dispatchDetachedFromWindow();\n }\n if (child.hasTransientState()) {\n this.childHasTransientStateChanged(child, false);\n }\n this.onViewRemoved(child);\n }\n attachViewToParent(child, index, params) {\n child.mLayoutParams = params;\n if (index < 0) {\n index = this.mChildrenCount;\n }\n this.addInArray(child, index);\n child.mParent = this;\n child.mPrivateFlags = (child.mPrivateFlags & ~ViewGroup.PFLAG_DIRTY_MASK & ~ViewGroup.PFLAG_DRAWING_CACHE_VALID) | ViewGroup.PFLAG_DRAWN | ViewGroup.PFLAG_INVALIDATED;\n this.mPrivateFlags |= ViewGroup.PFLAG_INVALIDATED;\n if (child.hasFocus()) {\n this.requestChildFocus(child, child.findFocus());\n }\n }\n detachViewsFromParent(start, count = 1) {\n this.removeFromArray(start, count);\n }\n detachAllViewsFromParent() {\n const count = this.mChildrenCount;\n if (count <= 0) {\n return;\n }\n const children = this.mChildren;\n this.mChildren = [];\n for (let i = count - 1; i >= 0; i--) {\n children[i].mParent = null;\n this.removeChildElement(children[i].bindElement);\n }\n }\n indexOfChild(child) {\n return this.mChildren.indexOf(child);\n }\n getChildCount() {\n return this.mChildrenCount;\n }\n getChildAt(index) {\n if (index < 0 || index >= this.mChildrenCount) {\n return null;\n }\n return this.mChildren[index];\n }\n bringChildToFront(child) {\n let index = this.indexOfChild(child);\n if (index >= 0) {\n this.removeFromArray(index);\n this.addInArray(child, this.mChildrenCount);\n child.mParent = this;\n this.requestLayout();\n this.invalidate();\n }\n }\n hasBooleanFlag(flag) {\n return (this.mGroupFlags & flag) == flag;\n }\n setBooleanFlag(flag, value) {\n if (value) {\n this.mGroupFlags |= flag;\n }\n else {\n this.mGroupFlags &= ~flag;\n }\n }\n dispatchGenericPointerEvent(event) {\n const childrenCount = this.mChildrenCount;\n if (childrenCount != 0) {\n const children = this.mChildren;\n const x = event.getX();\n const y = event.getY();\n const customOrder = this.isChildrenDrawingOrderEnabled();\n for (let i = childrenCount - 1; i >= 0; i--) {\n const childIndex = customOrder ? this.getChildDrawingOrder(childrenCount, i) : i;\n const child = children[childIndex];\n if (!ViewGroup.canViewReceivePointerEvents(child)\n || !this.isTransformedTouchPointInView(x, y, child, null)) {\n continue;\n }\n if (this.dispatchTransformedGenericPointerEvent(event, child)) {\n return true;\n }\n }\n }\n return super.dispatchGenericPointerEvent(event);\n }\n dispatchTransformedGenericPointerEvent(event, child) {\n const offsetX = this.mScrollX - child.mLeft;\n const offsetY = this.mScrollY - child.mTop;\n let handled;\n if (!child.hasIdentityMatrix()) {\n }\n else {\n event.offsetLocation(offsetX, offsetY);\n handled = child.dispatchGenericMotionEvent(event);\n event.offsetLocation(-offsetX, -offsetY);\n }\n return handled;\n }\n dispatchKeyEvent(event) {\n if ((this.mPrivateFlags & (view_5.View.PFLAG_FOCUSED | view_5.View.PFLAG_HAS_BOUNDS))\n == (view_5.View.PFLAG_FOCUSED | view_5.View.PFLAG_HAS_BOUNDS)) {\n if (super.dispatchKeyEvent(event)) {\n return true;\n }\n }\n else if (this.mFocused != null && (this.mFocused.mPrivateFlags & view_5.View.PFLAG_HAS_BOUNDS)\n == view_5.View.PFLAG_HAS_BOUNDS) {\n if (this.mFocused.dispatchKeyEvent(event)) {\n return true;\n }\n }\n return false;\n }\n dispatchWindowFocusChanged(hasFocus) {\n super.dispatchWindowFocusChanged(hasFocus);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchWindowFocusChanged(hasFocus);\n }\n }\n addTouchables(views) {\n super.addTouchables(views);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) {\n child.addTouchables(views);\n }\n }\n }\n onInterceptTouchEvent(ev) {\n return false;\n }\n dispatchTouchEvent(ev) {\n let handled = false;\n if (this.onFilterTouchEventForSecurity(ev)) {\n let action = ev.getAction();\n let actionMasked = action & view_5.MotionEvent.ACTION_MASK;\n if (actionMasked == view_5.MotionEvent.ACTION_DOWN) {\n this.cancelAndClearTouchTargets(ev);\n this.resetTouchState();\n }\n let intercepted;\n if (actionMasked == view_5.MotionEvent.ACTION_DOWN\n || this.mFirstTouchTarget != null) {\n let disallowIntercept = (this.mGroupFlags & ViewGroup.FLAG_DISALLOW_INTERCEPT) != 0;\n if (!disallowIntercept) {\n intercepted = this.onInterceptTouchEvent(ev);\n ev.setAction(action);\n }\n else {\n intercepted = false;\n }\n }\n else {\n intercepted = true;\n }\n let canceled = ViewGroup.resetCancelNextUpFlag(this)\n || actionMasked == view_5.MotionEvent.ACTION_CANCEL;\n let split = (this.mGroupFlags & ViewGroup.FLAG_SPLIT_MOTION_EVENTS) != 0;\n let newTouchTarget = null;\n let alreadyDispatchedToNewTouchTarget = false;\n if (!canceled && !intercepted) {\n if (actionMasked == view_5.MotionEvent.ACTION_DOWN\n || (split && actionMasked == view_5.MotionEvent.ACTION_POINTER_DOWN)\n || actionMasked == view_5.MotionEvent.ACTION_HOVER_MOVE) {\n let actionIndex = ev.getActionIndex();\n let idBitsToAssign = split ? 1 << ev.getPointerId(actionIndex)\n : TouchTarget.ALL_POINTER_IDS;\n this.removePointersFromTouchTargets(idBitsToAssign);\n let childrenCount = this.mChildrenCount;\n if (newTouchTarget == null && childrenCount != 0) {\n let x = ev.getX(actionIndex);\n let y = ev.getY(actionIndex);\n let children = this.mChildren;\n let customOrder = this.isChildrenDrawingOrderEnabled();\n for (let i = childrenCount - 1; i >= 0; i--) {\n let childIndex = customOrder ? this.getChildDrawingOrder(childrenCount, i) : i;\n let child = children[childIndex];\n if (!ViewGroup.canViewReceivePointerEvents(child)\n || !this.isTransformedTouchPointInView(x, y, child, null)) {\n continue;\n }\n newTouchTarget = this.getTouchTarget(child);\n if (newTouchTarget != null) {\n newTouchTarget.pointerIdBits |= idBitsToAssign;\n break;\n }\n ViewGroup.resetCancelNextUpFlag(child);\n if (this.dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign)) {\n this.mLastTouchDownTime = ev.getDownTime();\n this.mLastTouchDownIndex = childIndex;\n this.mLastTouchDownX = ev.getX();\n this.mLastTouchDownY = ev.getY();\n newTouchTarget = this.addTouchTarget(child, idBitsToAssign);\n alreadyDispatchedToNewTouchTarget = true;\n break;\n }\n }\n }\n if (newTouchTarget == null && this.mFirstTouchTarget != null) {\n newTouchTarget = this.mFirstTouchTarget;\n while (newTouchTarget.next != null) {\n newTouchTarget = newTouchTarget.next;\n }\n newTouchTarget.pointerIdBits |= idBitsToAssign;\n }\n }\n }\n if (this.mFirstTouchTarget == null) {\n handled = this.dispatchTransformedTouchEvent(ev, canceled, null, TouchTarget.ALL_POINTER_IDS);\n }\n else {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n const next = target.next;\n if (alreadyDispatchedToNewTouchTarget && target == newTouchTarget) {\n handled = true;\n }\n else {\n let cancelChild = ViewGroup.resetCancelNextUpFlag(target.child)\n || intercepted;\n if (this.dispatchTransformedTouchEvent(ev, cancelChild, target.child, target.pointerIdBits)) {\n handled = true;\n }\n if (cancelChild) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n target = next;\n continue;\n }\n }\n predecessor = target;\n target = next;\n }\n }\n if (canceled\n || actionMasked == view_5.MotionEvent.ACTION_UP\n || actionMasked == view_5.MotionEvent.ACTION_HOVER_MOVE) {\n this.resetTouchState();\n }\n else if (split && actionMasked == view_5.MotionEvent.ACTION_POINTER_UP) {\n let actionIndex = ev.getActionIndex();\n let idBitsToRemove = 1 << ev.getPointerId(actionIndex);\n this.removePointersFromTouchTargets(idBitsToRemove);\n }\n }\n return handled;\n }\n resetTouchState() {\n this.clearTouchTargets();\n ViewGroup.resetCancelNextUpFlag(this);\n this.mGroupFlags &= ~ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n static resetCancelNextUpFlag(view) {\n if ((view.mPrivateFlags & view_5.View.PFLAG_CANCEL_NEXT_UP_EVENT) != 0) {\n view.mPrivateFlags &= ~view_5.View.PFLAG_CANCEL_NEXT_UP_EVENT;\n return true;\n }\n return false;\n }\n clearTouchTargets() {\n let target = this.mFirstTouchTarget;\n if (target != null) {\n do {\n let next = target.next;\n target.recycle();\n target = next;\n } while (target != null);\n this.mFirstTouchTarget = null;\n }\n }\n cancelAndClearTouchTargets(event) {\n if (this.mFirstTouchTarget != null) {\n let syntheticEvent = false;\n if (event == null) {\n let now = SystemClock.uptimeMillis();\n event = view_5.MotionEvent.obtainWithAction(now, now, view_5.MotionEvent.ACTION_CANCEL, 0, 0);\n syntheticEvent = true;\n }\n for (let target = this.mFirstTouchTarget; target != null; target = target.next) {\n ViewGroup.resetCancelNextUpFlag(target.child);\n this.dispatchTransformedTouchEvent(event, true, target.child, target.pointerIdBits);\n }\n this.clearTouchTargets();\n if (syntheticEvent) {\n event.recycle();\n }\n }\n }\n getTouchTarget(child) {\n for (let target = this.mFirstTouchTarget; target != null; target = target.next) {\n if (target.child == child) {\n return target;\n }\n }\n return null;\n }\n addTouchTarget(child, pointerIdBits) {\n let target = TouchTarget.obtain(child, pointerIdBits);\n target.next = this.mFirstTouchTarget;\n this.mFirstTouchTarget = target;\n return target;\n }\n removePointersFromTouchTargets(pointerIdBits) {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n let next = target.next;\n if ((target.pointerIdBits & pointerIdBits) != 0) {\n target.pointerIdBits &= ~pointerIdBits;\n if (target.pointerIdBits == 0) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n target = next;\n continue;\n }\n }\n predecessor = target;\n target = next;\n }\n }\n cancelTouchTarget(view) {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n let next = target.next;\n if (target.child == view) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n let now = SystemClock.uptimeMillis();\n let event = view_5.MotionEvent.obtainWithAction(now, now, view_5.MotionEvent.ACTION_CANCEL, 0, 0);\n view.dispatchTouchEvent(event);\n event.recycle();\n return;\n }\n predecessor = target;\n target = next;\n }\n }\n static canViewReceivePointerEvents(child) {\n return (child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE\n || child.getAnimation() != null;\n }\n isTransformedTouchPointInView(x, y, child, outLocalPoint) {\n let localX = x + this.mScrollX - child.mLeft;\n let localY = y + this.mScrollY - child.mTop;\n let isInView = child.pointInView(localX, localY);\n if (isInView && outLocalPoint != null) {\n outLocalPoint.set(localX, localY);\n }\n return isInView;\n }\n dispatchTransformedTouchEvent(event, cancel, child, desiredPointerIdBits) {\n let handled;\n const oldAction = event.getAction();\n if (cancel || oldAction == view_5.MotionEvent.ACTION_CANCEL) {\n event.setAction(view_5.MotionEvent.ACTION_CANCEL);\n if (child == null) {\n handled = super.dispatchTouchEvent(event);\n }\n else {\n handled = child.dispatchTouchEvent(event);\n }\n event.setAction(oldAction);\n return handled;\n }\n const oldPointerIdBits = event.getPointerIdBits();\n const newPointerIdBits = oldPointerIdBits & desiredPointerIdBits;\n if (newPointerIdBits == 0) {\n return false;\n }\n let transformedEvent;\n if (newPointerIdBits == oldPointerIdBits) {\n if (child == null || child.hasIdentityMatrix()) {\n if (child == null) {\n handled = super.dispatchTouchEvent(event);\n }\n else {\n let offsetX = this.mScrollX - child.mLeft;\n let offsetY = this.mScrollY - child.mTop;\n event.offsetLocation(offsetX, offsetY);\n handled = child.dispatchTouchEvent(event);\n event.offsetLocation(-offsetX, -offsetY);\n }\n return handled;\n }\n transformedEvent = view_5.MotionEvent.obtain(event);\n }\n else {\n transformedEvent = event.split(newPointerIdBits);\n }\n if (child == null) {\n handled = super.dispatchTouchEvent(transformedEvent);\n }\n else {\n let offsetX = this.mScrollX - child.mLeft;\n let offsetY = this.mScrollY - child.mTop;\n transformedEvent.offsetLocation(offsetX, offsetY);\n handled = child.dispatchTouchEvent(transformedEvent);\n }\n transformedEvent.recycle();\n return handled;\n }\n setMotionEventSplittingEnabled(split) {\n if (split) {\n this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n }\n isMotionEventSplittingEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_SPLIT_MOTION_EVENTS) == ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n isAnimationCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE;\n }\n setAnimationCacheEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_ANIMATION_CACHE, enabled);\n }\n isAlwaysDrawnWithCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) == ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n }\n setAlwaysDrawnWithCacheEnabled(always) {\n this.setBooleanFlag(ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE, always);\n }\n isChildrenDrawnWithCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) == ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n }\n setChildrenDrawnWithCacheEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE, enabled);\n }\n setChildrenDrawingCacheEnabled(enabled) {\n if (enabled || (this.mPersistentDrawingCache & ViewGroup.PERSISTENT_ALL_CACHES) != ViewGroup.PERSISTENT_ALL_CACHES) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setDrawingCacheEnabled(enabled);\n }\n }\n }\n onAnimationStart() {\n super.onAnimationStart();\n if ((this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n const buildCache = !this.isHardwareAccelerated();\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE) {\n child.setDrawingCacheEnabled(true);\n if (buildCache) {\n child.buildDrawingCache(true);\n }\n }\n }\n this.mGroupFlags |= ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n }\n }\n onAnimationEnd() {\n super.onAnimationEnd();\n if ((this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE) {\n this.mGroupFlags &= ~ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n if ((this.mPersistentDrawingCache & ViewGroup.PERSISTENT_ANIMATION_CACHE) == 0) {\n this.setChildrenDrawingCacheEnabled(false);\n }\n }\n }\n getPersistentDrawingCache() {\n return this.mPersistentDrawingCache;\n }\n setPersistentDrawingCache(drawingCacheToKeep) {\n this.mPersistentDrawingCache = drawingCacheToKeep & ViewGroup.PERSISTENT_ALL_CACHES;\n }\n isChildrenDrawingOrderEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER) == ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER;\n }\n setChildrenDrawingOrderEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER, enabled);\n }\n getChildDrawingOrder(childCount, i) {\n return i;\n }\n generateLayoutParams(p) {\n return p;\n }\n generateDefaultLayoutParams() {\n return new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n measureChildren(widthMeasureSpec, heightMeasureSpec) {\n const size = this.mChildren.length;\n for (let i = 0; i < size; ++i) {\n const child = this.mChildren[i];\n if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) != view_5.View.GONE) {\n this.measureChild(child, widthMeasureSpec, heightMeasureSpec);\n }\n }\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec;\n lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec;\n const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width);\n const childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n lp._measuringParentWidthMeasureSpec = null;\n lp._measuringParentHeightMeasureSpec = null;\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n let lp = child.getLayoutParams();\n lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec;\n lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec;\n if (lp instanceof ViewGroup.MarginLayoutParams) {\n const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin\n + widthUsed, lp.width);\n const childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin\n + heightUsed, lp.height);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n lp._measuringParentWidthMeasureSpec = null;\n lp._measuringParentHeightMeasureSpec = null;\n }\n static getChildMeasureSpec(spec, padding, childDimension) {\n let MeasureSpec = view_5.View.MeasureSpec;\n let specMode = MeasureSpec.getMode(spec);\n let specSize = MeasureSpec.getSize(spec);\n let size = Math.max(0, specSize - padding);\n let resultSize = 0;\n let resultMode = 0;\n switch (specMode) {\n case MeasureSpec.EXACTLY:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = size;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n break;\n case MeasureSpec.AT_MOST:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n break;\n case MeasureSpec.UNSPECIFIED:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = 0;\n resultMode = MeasureSpec.UNSPECIFIED;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = 0;\n resultMode = MeasureSpec.UNSPECIFIED;\n }\n break;\n }\n return MeasureSpec.makeMeasureSpec(resultSize, resultMode);\n }\n clearDisappearingChildren() {\n if (this.mDisappearingChildren != null) {\n this.mDisappearingChildren.clear();\n this.invalidate();\n }\n }\n addDisappearingView(v) {\n let disappearingChildren = this.mDisappearingChildren;\n if (disappearingChildren == null) {\n disappearingChildren = this.mDisappearingChildren = new ArrayList();\n }\n disappearingChildren.add(v);\n }\n finishAnimatingView(view, animation) {\n const disappearingChildren = this.mDisappearingChildren;\n if (disappearingChildren != null) {\n if (disappearingChildren.contains(view)) {\n disappearingChildren.remove(view);\n if (view.mAttachInfo != null) {\n view.dispatchDetachedFromWindow();\n }\n view.clearAnimation();\n this.mGroupFlags |= ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n }\n if (animation != null && !animation.getFillAfter()) {\n view.clearAnimation();\n }\n if ((view.mPrivateFlags & ViewGroup.PFLAG_ANIMATION_STARTED) == ViewGroup.PFLAG_ANIMATION_STARTED) {\n view.onAnimationEnd();\n view.mPrivateFlags &= ~ViewGroup.PFLAG_ANIMATION_STARTED;\n this.mGroupFlags |= ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n }\n dispatchAttachedToWindow(info, visibility) {\n this.mGroupFlags |= ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n super.dispatchAttachedToWindow(info, visibility);\n this.mGroupFlags &= ~ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n child.dispatchAttachedToWindow(info, visibility | (child.mViewFlags & view_5.View.VISIBILITY_MASK));\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.clearCachedLayoutMode();\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.clearCachedLayoutMode();\n }\n dispatchDetachedFromWindow() {\n this.cancelAndClearTouchTargets(null);\n this.mLayoutCalledWhileSuppressed = false;\n this.mChildren.forEach((child) => child.dispatchDetachedFromWindow());\n super.dispatchDetachedFromWindow();\n }\n dispatchDisplayHint(hint) {\n super.dispatchDisplayHint(hint);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchDisplayHint(hint);\n }\n }\n onChildVisibilityChanged(child, oldVisibility, newVisibility) {\n }\n dispatchVisibilityChanged(changedView, visibility) {\n super.dispatchVisibilityChanged(changedView, visibility);\n const count = this.mChildrenCount;\n let children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchVisibilityChanged(changedView, visibility);\n }\n }\n dispatchSetSelected(selected) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setSelected(selected);\n }\n }\n dispatchSetActivated(activated) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setActivated(activated);\n }\n }\n dispatchSetPressed(pressed) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (!pressed || (!child.isClickable() && !child.isLongClickable())) {\n child.setPressed(pressed);\n }\n }\n }\n dispatchCancelPendingInputEvents() {\n super.dispatchCancelPendingInputEvents();\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].dispatchCancelPendingInputEvents();\n }\n }\n offsetDescendantRectToMyCoords(descendant, rect) {\n this.offsetRectBetweenParentAndChild(descendant, rect, true, false);\n }\n offsetRectIntoDescendantCoords(descendant, rect) {\n this.offsetRectBetweenParentAndChild(descendant, rect, false, false);\n }\n offsetRectBetweenParentAndChild(descendant, rect, offsetFromChildToParent, clipToBounds) {\n if (descendant == this) {\n return;\n }\n let theParent = descendant.mParent;\n while ((theParent != null)\n && (theParent instanceof view_5.View)\n && (theParent != this)) {\n if (offsetFromChildToParent) {\n rect.offset(descendant.mLeft - descendant.mScrollX, descendant.mTop - descendant.mScrollY);\n if (clipToBounds) {\n let p = theParent;\n rect.intersect(0, 0, p.mRight - p.mLeft, p.mBottom - p.mTop);\n }\n }\n else {\n if (clipToBounds) {\n let p = theParent;\n rect.intersect(0, 0, p.mRight - p.mLeft, p.mBottom - p.mTop);\n }\n rect.offset(descendant.mScrollX - descendant.mLeft, descendant.mScrollY - descendant.mTop);\n }\n descendant = theParent;\n theParent = descendant.mParent;\n }\n if (theParent == this) {\n if (offsetFromChildToParent) {\n rect.offset(descendant.mLeft - descendant.mScrollX, descendant.mTop - descendant.mScrollY);\n }\n else {\n rect.offset(descendant.mScrollX - descendant.mLeft, descendant.mScrollY - descendant.mTop);\n }\n }\n else {\n throw new Error(\"parameter must be a descendant of this view\");\n }\n }\n offsetChildrenTopAndBottom(offset) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const v = children[i];\n v.mTop += offset;\n v.mBottom += offset;\n }\n this.invalidateViewProperty(false, false);\n }\n suppressLayout(suppress) {\n this.mSuppressLayout = suppress;\n if (!suppress) {\n if (this.mLayoutCalledWhileSuppressed) {\n this.requestLayout();\n this.mLayoutCalledWhileSuppressed = false;\n }\n }\n }\n isLayoutSuppressed() {\n return this.mSuppressLayout;\n }\n layout(l, t, r, b) {\n if (!this.mSuppressLayout) {\n super.layout(l, t, r, b);\n }\n else {\n this.mLayoutCalledWhileSuppressed = true;\n }\n }\n canAnimate() {\n return false;\n }\n getChildVisibleRect(child, r, offset) {\n const rect = this.mAttachInfo != null ? this.mAttachInfo.mTmpTransformRect : new Rect();\n rect.set(r);\n if (!child.hasIdentityMatrix()) {\n child.getMatrix().mapRect(rect);\n }\n let dx = child.mLeft - this.mScrollX;\n let dy = child.mTop - this.mScrollY;\n rect.offset(dx, dy);\n if (offset != null) {\n if (!child.hasIdentityMatrix()) {\n let position = this.mAttachInfo != null ? this.mAttachInfo.mTmpTransformLocation : androidui.util.ArrayCreator.newNumberArray(2);\n position[0] = offset.x;\n position[1] = offset.y;\n child.getMatrix().mapPoints(position);\n offset.x = Math.floor(position[0] + 0.5);\n offset.y = Math.floor(position[1] + 0.5);\n }\n offset.x += dx;\n offset.y += dy;\n }\n if (rect.intersect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop)) {\n if (this.mParent == null)\n return true;\n r.set(rect);\n return this.mParent.getChildVisibleRect(this, r, offset);\n }\n return false;\n }\n dispatchDraw(canvas) {\n let count = this.mChildrenCount;\n let children = this.mChildren;\n let flags = this.mGroupFlags;\n let saveCount = 0;\n let clipToPadding = (flags & ViewGroup.CLIP_TO_PADDING_MASK) == ViewGroup.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n canvas.clipRect(this.mScrollX + this.mPaddingLeft, this.mScrollY + this.mPaddingTop, this.mScrollX + this.mRight - this.mLeft - this.mPaddingRight, this.mScrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n this.mPrivateFlags &= ~ViewGroup.PFLAG_DRAW_ANIMATION;\n this.mGroupFlags &= ~ViewGroup.FLAG_INVALIDATE_REQUIRED;\n let more = false;\n const drawingTime = this.getDrawingTime();\n if ((flags & ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER) == 0) {\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE || child.getAnimation() != null) {\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n }\n else {\n for (let i = 0; i < count; i++) {\n const child = children[this.getChildDrawingOrder(count, i)];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE || child.getAnimation() != null) {\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n }\n if (this.mDisappearingChildren != null) {\n const disappearingChildren = this.mDisappearingChildren;\n const disappearingCount = disappearingChildren.size() - 1;\n for (let i = disappearingCount; i >= 0; i--) {\n const child = disappearingChildren.get(i);\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n }\n flags = this.mGroupFlags;\n if ((flags & ViewGroup.FLAG_INVALIDATE_REQUIRED) == ViewGroup.FLAG_INVALIDATE_REQUIRED) {\n this.invalidate(true);\n }\n }\n drawChild(canvas, child, drawingTime) {\n return child.drawFromParent(canvas, this, drawingTime);\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if ((this.mGroupFlags & ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE) != 0) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0) {\n throw new Error(\"addStateFromChildren cannot be enabled if a\"\n + \" child has duplicateParentState set to true\");\n }\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_5.View.DUPLICATE_PARENT_STATE) != 0) {\n child.refreshDrawableState();\n }\n }\n }\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].jumpDrawablesToCurrentState();\n }\n }\n onCreateDrawableState(extraSpace) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) == 0) {\n return super.onCreateDrawableState(extraSpace);\n }\n let need = 0;\n let n = this.getChildCount();\n for (let i = 0; i < n; i++) {\n let childState = this.getChildAt(i).getDrawableState();\n if (childState != null) {\n need += childState.length;\n }\n }\n let state = super.onCreateDrawableState(extraSpace + need);\n for (let i = 0; i < n; i++) {\n let childState = this.getChildAt(i).getDrawableState();\n if (childState != null) {\n state = view_5.View.mergeDrawableStates(state, childState);\n }\n }\n return state;\n }\n setAddStatesFromChildren(addsStates) {\n if (addsStates) {\n this.mGroupFlags |= ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN;\n }\n this.refreshDrawableState();\n }\n addStatesFromChildren() {\n return (this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0;\n }\n childDrawableStateChanged(child) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0) {\n this.refreshDrawableState();\n }\n }\n getClipChildren() {\n return ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0);\n }\n setClipChildren(clipChildren) {\n let previousValue = (this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN;\n if (clipChildren != previousValue) {\n this.setBooleanFlag(ViewGroup.FLAG_CLIP_CHILDREN, clipChildren);\n }\n }\n setClipToPadding(clipToPadding) {\n this.setBooleanFlag(ViewGroup.FLAG_CLIP_TO_PADDING, clipToPadding);\n }\n isClipToPadding() {\n return (this.mGroupFlags & ViewGroup.FLAG_CLIP_TO_PADDING) == ViewGroup.FLAG_CLIP_TO_PADDING;\n }\n invalidateChild(child, dirty) {\n let parent = this;\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n const drawAnimation = (child.mPrivateFlags & view_5.View.PFLAG_DRAW_ANIMATION)\n == view_5.View.PFLAG_DRAW_ANIMATION;\n let childMatrix = child.getMatrix();\n const isOpaque = child.isOpaque() && !drawAnimation && child.getAnimation() == null && childMatrix.isIdentity();\n let opaqueFlag = isOpaque ? view_5.View.PFLAG_DIRTY_OPAQUE : view_5.View.PFLAG_DIRTY;\n if (child.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED;\n this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWING_CACHE_VALID;\n child.mLocalDirtyRect.union(dirty);\n }\n const location = attachInfo.mInvalidateChildLocation;\n location[0] = child.mLeft;\n location[1] = child.mTop;\n if (!childMatrix.isIdentity() ||\n (this.mGroupFlags & ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n let boundingRect = attachInfo.mTmpTransformRect;\n boundingRect.set(dirty);\n let transformMatrix;\n if ((this.mGroupFlags & ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n let t = attachInfo.mTmpTransformation;\n let transformed = this.getChildStaticTransformation(child, t);\n if (transformed) {\n transformMatrix = attachInfo.mTmpMatrix;\n transformMatrix.set(t.getMatrix());\n if (!childMatrix.isIdentity()) {\n transformMatrix.preConcat(childMatrix);\n }\n }\n else {\n transformMatrix = childMatrix;\n }\n }\n else {\n transformMatrix = childMatrix;\n }\n transformMatrix.mapRect(boundingRect);\n dirty.set(boundingRect);\n }\n do {\n let view = null;\n if (parent instanceof view_5.View) {\n view = parent;\n }\n if (drawAnimation) {\n if (view != null) {\n view.mPrivateFlags |= ViewGroup.PFLAG_DRAW_ANIMATION;\n }\n else if (parent instanceof view_5.ViewRootImpl) {\n parent.mIsAnimating = true;\n }\n }\n if (view != null) {\n opaqueFlag = view_5.View.PFLAG_DIRTY;\n if ((view.mPrivateFlags & view_5.View.PFLAG_DIRTY_MASK) != view_5.View.PFLAG_DIRTY) {\n view.mPrivateFlags = (view.mPrivateFlags & ~view_5.View.PFLAG_DIRTY_MASK) | opaqueFlag;\n }\n }\n parent = parent.invalidateChildInParent(location, dirty);\n if (view != null) {\n let m = view.getMatrix();\n if (!m.isIdentity()) {\n let boundingRect = attachInfo.mTmpTransformRect;\n boundingRect.set(dirty);\n m.mapRect(boundingRect);\n dirty.set(boundingRect);\n }\n }\n } while (parent != null);\n }\n }\n invalidateChildInParent(location, dirty) {\n if ((this.mPrivateFlags & view_5.View.PFLAG_DRAWN) == view_5.View.PFLAG_DRAWN ||\n (this.mPrivateFlags & view_5.View.PFLAG_DRAWING_CACHE_VALID) == view_5.View.PFLAG_DRAWING_CACHE_VALID) {\n if ((this.mGroupFlags & (ViewGroup.FLAG_OPTIMIZE_INVALIDATE | ViewGroup.FLAG_ANIMATION_DONE)) !=\n ViewGroup.FLAG_OPTIMIZE_INVALIDATE) {\n dirty.offset(location[0] - this.mScrollX, location[1] - this.mScrollY);\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0) {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n const left = this.mLeft;\n const top = this.mTop;\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN) {\n if (!dirty.intersect(0, 0, this.mRight - left, this.mBottom - top)) {\n dirty.setEmpty();\n }\n }\n this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWING_CACHE_VALID;\n location[0] = left;\n location[1] = top;\n if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED;\n this.mLocalDirtyRect.union(dirty);\n }\n return this.mParent;\n }\n else {\n this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWN & ~view_5.View.PFLAG_DRAWING_CACHE_VALID;\n location[0] = this.mLeft;\n location[1] = this.mTop;\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN) {\n dirty.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n else {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED;\n this.mLocalDirtyRect.union(dirty);\n }\n return this.mParent;\n }\n }\n return null;\n }\n invalidateChildFast(child, dirty) {\n let parent = this;\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (child.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n child.mLocalDirtyRect.union(dirty);\n }\n let left = child.mLeft;\n let top = child.mTop;\n if (!child.getMatrix().isIdentity()) {\n child.transformRect(dirty);\n }\n do {\n if (parent instanceof ViewGroup) {\n let parentVG = parent;\n if (parentVG.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n parentVG.invalidate();\n parent = null;\n }\n else {\n parent = parentVG.invalidateChildInParentFast(left, top, dirty);\n left = parentVG.mLeft;\n top = parentVG.mTop;\n }\n }\n else {\n const location = attachInfo.mInvalidateChildLocation;\n location[0] = left;\n location[1] = top;\n parent = parent.invalidateChildInParent(location, dirty);\n }\n } while (parent != null);\n }\n }\n invalidateChildInParentFast(left, top, dirty) {\n if ((this.mPrivateFlags & view_5.View.PFLAG_DRAWN) == view_5.View.PFLAG_DRAWN ||\n (this.mPrivateFlags & view_5.View.PFLAG_DRAWING_CACHE_VALID) == view_5.View.PFLAG_DRAWING_CACHE_VALID) {\n dirty.offset(left - this.mScrollX, top - this.mScrollY);\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0) {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0 ||\n dirty.intersect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop)) {\n if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) {\n this.mLocalDirtyRect.union(dirty);\n }\n if (!this.getMatrix().isIdentity()) {\n this.transformRect(dirty);\n }\n return this.mParent;\n }\n }\n return null;\n }\n getChildStaticTransformation(child, t) {\n return false;\n }\n getChildTransformation() {\n if (this.mChildTransformation == null) {\n this.mChildTransformation = new Transformation();\n }\n return this.mChildTransformation;\n }\n findViewTraversal(id) {\n if (id == this.mID) {\n return this;\n }\n let where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if ((v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewById(id);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n findViewWithTagTraversal(tag) {\n if (tag != null && tag === this.mTag) {\n return this;\n }\n let where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if ((v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewWithTag(tag);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n const where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if (v != childToSkip && (v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewByPredicate(predicate);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept == ((this.mGroupFlags & ViewGroup.FLAG_DISALLOW_INTERCEPT) != 0)) {\n return;\n }\n if (disallowIntercept) {\n this.mGroupFlags |= ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n if (this.mParent != null) {\n this.mParent.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n }\n shouldDelayChildPressedState() {\n return true;\n }\n onSetLayoutParams(child, layoutParams) {\n }\n }\n ViewGroup.FLAG_CLIP_CHILDREN = 0x1;\n ViewGroup.FLAG_CLIP_TO_PADDING = 0x2;\n ViewGroup.FLAG_INVALIDATE_REQUIRED = 0x4;\n ViewGroup.FLAG_RUN_ANIMATION = 0x8;\n ViewGroup.FLAG_ANIMATION_DONE = 0x10;\n ViewGroup.FLAG_PADDING_NOT_NULL = 0x20;\n ViewGroup.FLAG_ANIMATION_CACHE = 0x40;\n ViewGroup.FLAG_OPTIMIZE_INVALIDATE = 0x80;\n ViewGroup.FLAG_CLEAR_TRANSFORMATION = 0x100;\n ViewGroup.FLAG_NOTIFY_ANIMATION_LISTENER = 0x200;\n ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER = 0x400;\n ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800;\n ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE = 0x1000;\n ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN = 0x2000;\n ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE = 0x4000;\n ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE = 0x8000;\n ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE = 0x10000;\n ViewGroup.FLAG_MASK_FOCUSABILITY = 0x60000;\n ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;\n ViewGroup.FOCUS_AFTER_DESCENDANTS = 0x40000;\n ViewGroup.FOCUS_BLOCK_DESCENDANTS = 0x60000;\n ViewGroup.FLAG_DISALLOW_INTERCEPT = 0x80000;\n ViewGroup.FLAG_SPLIT_MOTION_EVENTS = 0x200000;\n ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW = 0x400000;\n ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET = 0x800000;\n ViewGroup.PERSISTENT_NO_CACHE = 0x0;\n ViewGroup.PERSISTENT_ANIMATION_CACHE = 0x1;\n ViewGroup.PERSISTENT_SCROLLING_CACHE = 0x2;\n ViewGroup.PERSISTENT_ALL_CACHES = 0x3;\n ViewGroup.LAYOUT_MODE_UNDEFINED = -1;\n ViewGroup.LAYOUT_MODE_CLIP_BOUNDS = 0;\n ViewGroup.LAYOUT_MODE_DEFAULT = ViewGroup.LAYOUT_MODE_CLIP_BOUNDS;\n ViewGroup.CLIP_TO_PADDING_MASK = ViewGroup.FLAG_CLIP_TO_PADDING | ViewGroup.FLAG_PADDING_NOT_NULL;\n view_5.ViewGroup = ViewGroup;\n (function (ViewGroup) {\n var AttrBinder = androidui.attr.AttrBinder;\n class LayoutParams {\n constructor(...args) {\n this._width = 0;\n this._height = 0;\n this._measuringParentWidthMeasureSpec = 0;\n this._measuringParentHeightMeasureSpec = 0;\n if (args.length === 1) {\n let src = args[0];\n this.width = src._width;\n this.height = src._height;\n }\n else if (args.length === 2) {\n let [width = 0, height = 0] = args;\n this.width = width;\n this.height = height;\n }\n if (!this._attrBinder) {\n this._attrBinder = new androidui.attr.AttrBinder(this);\n if (!LayoutParams.ViewGroupParamClassAttrBind) {\n LayoutParams.ViewGroupParamClassAttrBind = new AttrBinder.ClassBinderMap();\n LayoutParams.ViewGroupParamClassAttrBind.set('width', {\n setter(host, value) {\n if (value == null)\n value = -2;\n host.width = value;\n },\n getter(host) {\n return host._widthOrig;\n }\n }).set('height', {\n setter(host, value) {\n if (value == null)\n value = -2;\n host.height = value;\n },\n getter(host) {\n return host._heightOrig;\n }\n });\n }\n this._attrBinder.addClassAttrBind(LayoutParams.ViewGroupParamClassAttrBind);\n }\n }\n get width() {\n if (typeof this._width === 'number')\n return this._width;\n let up = (this._width + \"\").toUpperCase();\n if (up === 'FILL_PARENT' || up === 'MATCH_PARENT')\n this._width = -1;\n else if (up === 'WRAP_CONTENT')\n this._width = -2;\n else {\n let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._width, 0, parentWidth);\n if (android.util.TypedValue.isDynamicUnitValue(this._width)) {\n return parsedValue;\n }\n this._width = parsedValue;\n }\n catch (e) {\n console.error(e);\n return -2;\n }\n }\n return this._width;\n }\n set width(value) {\n this._width = this._widthOrig = value;\n }\n get height() {\n if (typeof this._height === 'number')\n return this._height;\n let up = (this._height + \"\").toUpperCase();\n if (up === 'FILL_PARENT' || up === 'MATCH_PARENT')\n this._height = -1;\n else if (up === 'WRAP_CONTENT')\n this._height = -2;\n else {\n let parentHeight = view_5.View.MeasureSpec.getSize(this._measuringParentHeightMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._height, 0, parentHeight);\n if (android.util.TypedValue.isDynamicUnitValue(this._height)) {\n return parsedValue;\n }\n this._height = parsedValue;\n }\n catch (e) {\n console.error(e);\n return -2;\n }\n }\n return this._height;\n }\n set height(value) {\n this._height = this._heightOrig = value;\n }\n parseAttributeFrom(node, context) {\n Array.from(node.attributes).forEach((attr) => {\n let layoutParamFiled = attr.name.startsWith('layout_') && attr.name.substring('layout_'.length);\n if (layoutParamFiled) {\n this._attrBinder.onAttrChange(layoutParamFiled, attr.value, context);\n }\n });\n }\n }\n LayoutParams.FILL_PARENT = -1;\n LayoutParams.MATCH_PARENT = -1;\n LayoutParams.WRAP_CONTENT = -2;\n ViewGroup.LayoutParams = LayoutParams;\n class MarginLayoutParams extends LayoutParams {\n constructor(...args) {\n super(...args);\n this._leftMargin = 0;\n this._topMargin = 0;\n this._rightMargin = 0;\n this._bottomMargin = 0;\n this._leftMarginOrig = 0;\n this._topMarginOrig = 0;\n this._rightMarginOrig = 0;\n this._bottomMarginOrig = 0;\n if (args.length === 1) {\n let src = args[0];\n if (src instanceof MarginLayoutParams) {\n this.leftMargin = src._leftMargin;\n this.topMargin = src._topMargin;\n this.rightMargin = src._rightMargin;\n this.bottomMargin = src._bottomMargin;\n }\n }\n if (!MarginLayoutParams.MarginLayoutParamsClassAttrBind) {\n MarginLayoutParams.MarginLayoutParamsClassAttrBind = new AttrBinder.ClassBinderMap();\n MarginLayoutParams.MarginLayoutParamsClassAttrBind.set('marginLeft', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.leftMargin = value;\n },\n getter(host) {\n return host._leftMarginOrig;\n }\n }).set('marginStart', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.leftMargin = value;\n },\n getter(host) {\n return host._leftMarginOrig;\n }\n }).set('marginTop', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.topMargin = value;\n },\n getter(host) {\n return host._topMarginOrig;\n }\n }).set('marginRight', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.rightMargin = value;\n },\n getter(host) {\n return host._rightMarginOrig;\n }\n }).set('marginEnd', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.rightMargin = value;\n },\n getter(host) {\n return host._rightMarginOrig;\n }\n }).set('marginBottom', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.bottomMargin = value;\n },\n getter(host) {\n return host._bottomMargin;\n }\n }).set('margin', {\n setter(host, value) {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = host._attrBinder.parsePaddingMarginLTRB(value);\n host.leftMargin = left;\n host.topMargin = top;\n host.rightMargin = right;\n host.bottomMargin = bottom;\n }\n });\n }\n this._attrBinder.addClassAttrBind(MarginLayoutParams.MarginLayoutParamsClassAttrBind);\n }\n get leftMargin() {\n if (typeof this._leftMargin === 'number')\n return this._leftMargin;\n let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._leftMargin, 0, parentWidth);\n if (android.util.TypedValue.isDynamicUnitValue(this._leftMargin)) {\n return parsedValue;\n }\n this._leftMargin = parsedValue;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n return this._leftMargin;\n }\n get topMargin() {\n if (typeof this._topMargin === 'number')\n return this._topMargin;\n let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._topMargin, 0, parentWidth);\n if (android.util.TypedValue.isDynamicUnitValue(this._topMargin)) {\n return parsedValue;\n }\n this._topMargin = parsedValue;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n return this._topMargin;\n }\n get rightMargin() {\n if (typeof this._rightMargin === 'number')\n return this._rightMargin;\n let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._rightMargin, 0, parentWidth);\n if (android.util.TypedValue.isDynamicUnitValue(this._rightMargin)) {\n return parsedValue;\n }\n this._rightMargin = parsedValue;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n return this._rightMargin;\n }\n get bottomMargin() {\n if (typeof this._bottomMargin === 'number')\n return this._bottomMargin;\n let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec);\n try {\n let parsedValue = this._attrBinder.parseNumberPixelSize(this._bottomMargin, 0, parentWidth);\n if (android.util.TypedValue.isDynamicUnitValue(this._bottomMargin)) {\n return parsedValue;\n }\n this._bottomMargin = parsedValue;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n return this._bottomMargin;\n }\n set leftMargin(value) {\n this._leftMargin = this._leftMarginOrig = value;\n }\n set topMargin(value) {\n this._topMargin = this._topMarginOrig = value;\n }\n set rightMargin(value) {\n this._rightMargin = this._rightMarginOrig = value;\n }\n set bottomMargin(value) {\n this._bottomMargin = this._bottomMarginOrig = value;\n }\n setMargins(left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n }\n setLayoutDirection(layoutDirection) {\n }\n getLayoutDirection() {\n return view_5.View.LAYOUT_DIRECTION_LTR;\n }\n isLayoutRtl() {\n return this.getLayoutDirection() == view_5.View.LAYOUT_DIRECTION_RTL;\n }\n resolveLayoutDirection(layoutDirection) {\n }\n }\n MarginLayoutParams.DEFAULT_MARGIN_RELATIVE = Integer.MIN_VALUE;\n ViewGroup.MarginLayoutParams = MarginLayoutParams;\n })(ViewGroup = view_5.ViewGroup || (view_5.ViewGroup = {}));\n class TouchTarget {\n static obtain(child, pointerIdBits) {\n let target;\n if (TouchTarget.sRecycleBin == null) {\n target = new TouchTarget();\n }\n else {\n target = TouchTarget.sRecycleBin;\n TouchTarget.sRecycleBin = target.next;\n TouchTarget.sRecycledCount--;\n target.next = null;\n }\n target.child = child;\n target.pointerIdBits = pointerIdBits;\n return target;\n }\n recycle() {\n if (TouchTarget.sRecycledCount < TouchTarget.MAX_RECYCLED) {\n this.next = TouchTarget.sRecycleBin;\n TouchTarget.sRecycleBin = this;\n TouchTarget.sRecycledCount += 1;\n }\n else {\n this.next = null;\n }\n this.child = null;\n }\n }\n TouchTarget.MAX_RECYCLED = 32;\n TouchTarget.sRecycledCount = 0;\n TouchTarget.ALL_POINTER_IDS = -1;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Drawable = android.graphics.drawable.Drawable;\n class ViewOverlay {\n constructor(hostView) {\n this.mOverlayViewGroup = new ViewOverlay.OverlayViewGroup(hostView);\n }\n getOverlayView() {\n return this.mOverlayViewGroup;\n }\n add(drawable) {\n this.mOverlayViewGroup.add(drawable);\n }\n remove(drawable) {\n }\n clear() {\n this.mOverlayViewGroup.clear();\n }\n isEmpty() {\n return this.mOverlayViewGroup.isEmpty();\n }\n }\n view.ViewOverlay = ViewOverlay;\n (function (ViewOverlay) {\n class OverlayViewGroup extends view.ViewGroup {\n constructor(hostView) {\n super();\n this.mHostView = hostView;\n this.mAttachInfo = hostView.mAttachInfo;\n this.mRight = hostView.getWidth();\n this.mBottom = hostView.getHeight();\n }\n addDrawable(drawable) {\n }\n addView(child) {\n }\n add(arg) {\n if (arg instanceof Drawable)\n this.addDrawable(arg);\n else if (arg instanceof view.View)\n this.addView(arg);\n }\n clear() {\n }\n isEmpty() {\n return true;\n }\n onLayout(changed, l, t, r, b) {\n }\n }\n ViewOverlay.OverlayViewGroup = OverlayViewGroup;\n })(ViewOverlay = view.ViewOverlay || (view.ViewOverlay = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Rect = android.graphics.Rect;\n class FrameLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mMeasureAllChildren = false;\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n this.mSelfBounds = new Rect();\n this.mOverlayBounds = new Rect();\n this.mForegroundGravity = Gravity.FILL;\n this.mForegroundInPadding = true;\n this.mForegroundBoundsChanged = false;\n this.mMatchParentChildren = new Array(1);\n this._attrBinder.addAttr('foregroundGravity', (value) => {\n this.mForegroundGravity = this._attrBinder.parseGravity(value, this.mForegroundGravity);\n }, () => {\n return this.mForegroundGravity;\n });\n }\n getForegroundGravity() {\n return this.mForegroundGravity;\n }\n setForegroundGravity(foregroundGravity) {\n if (this.mForegroundGravity != foregroundGravity) {\n if ((foregroundGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n foregroundGravity |= Gravity.LEFT;\n }\n if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n foregroundGravity |= Gravity.TOP;\n }\n this.mForegroundGravity = foregroundGravity;\n if (this.mForegroundGravity == Gravity.FILL && this.mForeground != null) {\n let padding = new Rect();\n if (this.mForeground.getPadding(padding)) {\n this.mForegroundPaddingLeft = padding.left;\n this.mForegroundPaddingTop = padding.top;\n this.mForegroundPaddingRight = padding.right;\n this.mForegroundPaddingBottom = padding.bottom;\n }\n }\n else {\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n }\n this.requestLayout();\n }\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || (who == this.mForeground);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mForeground != null)\n this.mForeground.jumpToCurrentState();\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mForeground != null && this.mForeground.isStateful()) {\n this.mForeground.setState(this.getDrawableState());\n }\n }\n generateDefaultLayoutParams() {\n return new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);\n }\n setForeground(drawable) {\n if (this.mForeground != drawable) {\n if (this.mForeground != null) {\n this.mForeground.setCallback(null);\n this.unscheduleDrawable(this.mForeground);\n }\n this.mForeground = drawable;\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n if (drawable != null) {\n this.setWillNotDraw(false);\n drawable.setCallback(this);\n if (drawable.isStateful()) {\n drawable.setState(this.getDrawableState());\n }\n if (this.mForegroundGravity == Gravity.FILL) {\n let padding = new Rect();\n if (drawable.getPadding(padding)) {\n this.mForegroundPaddingLeft = padding.left;\n this.mForegroundPaddingTop = padding.top;\n this.mForegroundPaddingRight = padding.right;\n this.mForegroundPaddingBottom = padding.bottom;\n }\n }\n }\n else {\n this.setWillNotDraw(true);\n }\n this.requestLayout();\n this.invalidate();\n }\n }\n getForeground() {\n return this.mForeground;\n }\n getPaddingLeftWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingLeft, this.mForegroundPaddingLeft) :\n this.mPaddingLeft + this.mForegroundPaddingLeft;\n }\n getPaddingRightWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingRight, this.mForegroundPaddingRight) :\n this.mPaddingRight + this.mForegroundPaddingRight;\n }\n getPaddingTopWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingTop, this.mForegroundPaddingTop) :\n this.mPaddingTop + this.mForegroundPaddingTop;\n }\n getPaddingBottomWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingBottom, this.mForegroundPaddingBottom) :\n this.mPaddingBottom + this.mForegroundPaddingBottom;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let count = this.getChildCount();\n let measureMatchParentChildren = View.MeasureSpec.getMode(widthMeasureSpec) != View.MeasureSpec.EXACTLY ||\n View.MeasureSpec.getMode(heightMeasureSpec) != View.MeasureSpec.EXACTLY;\n this.mMatchParentChildren = [];\n let maxHeight = 0;\n let maxWidth = 0;\n let childState = 0;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (this.mMeasureAllChildren || child.getVisibility() != View.GONE) {\n this.measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);\n let lp = child.getLayoutParams();\n maxWidth = Math.max(maxWidth, child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin);\n maxHeight = Math.max(maxHeight, child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin);\n childState = View.combineMeasuredStates(childState, child.getMeasuredState());\n if (measureMatchParentChildren) {\n if (lp.width == FrameLayout.LayoutParams.MATCH_PARENT ||\n lp.height == FrameLayout.LayoutParams.MATCH_PARENT) {\n this.mMatchParentChildren.push(child);\n }\n }\n }\n }\n maxWidth += this.getPaddingLeftWithForeground() + this.getPaddingRightWithForeground();\n maxHeight += this.getPaddingTopWithForeground() + this.getPaddingBottomWithForeground();\n maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight());\n maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth());\n let drawable = this.getForeground();\n if (drawable != null) {\n maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());\n maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());\n }\n this.setMeasuredDimension(View.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), View.resolveSizeAndState(maxHeight, heightMeasureSpec, childState << View.MEASURED_HEIGHT_STATE_SHIFT));\n count = this.mMatchParentChildren.length;\n if (count > 1) {\n for (let i = 0; i < count; i++) {\n let child = this.mMatchParentChildren[i];\n let lp = child.getLayoutParams();\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n if (lp.width == FrameLayout.LayoutParams.MATCH_PARENT) {\n childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(this.getMeasuredWidth() -\n this.getPaddingLeftWithForeground() - this.getPaddingRightWithForeground() -\n lp.leftMargin - lp.rightMargin, View.MeasureSpec.EXACTLY);\n }\n else {\n childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.getPaddingLeftWithForeground() + this.getPaddingRightWithForeground() +\n lp.leftMargin + lp.rightMargin, lp.width);\n }\n if (lp.height == FrameLayout.LayoutParams.MATCH_PARENT) {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(this.getMeasuredHeight() -\n this.getPaddingTopWithForeground() - this.getPaddingBottomWithForeground() -\n lp.topMargin - lp.bottomMargin, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(heightMeasureSpec, this.getPaddingTopWithForeground() + this.getPaddingBottomWithForeground() +\n lp.topMargin + lp.bottomMargin, lp.height);\n }\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n onLayout(changed, left, top, right, bottom) {\n this.layoutChildren(left, top, right, bottom, false);\n }\n layoutChildren(left, top, right, bottom, forceLeftGravity) {\n const count = this.getChildCount();\n const parentLeft = this.getPaddingLeftWithForeground();\n const parentRight = right - left - this.getPaddingRightWithForeground();\n const parentTop = this.getPaddingTopWithForeground();\n const parentBottom = bottom - top - this.getPaddingBottomWithForeground();\n this.mForegroundBoundsChanged = true;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n const width = child.getMeasuredWidth();\n const height = child.getMeasuredHeight();\n let childLeft;\n let childTop;\n let gravity = lp.gravity;\n if (gravity == -1) {\n gravity = FrameLayout.DEFAULT_CHILD_GRAVITY;\n }\n const absoluteGravity = gravity;\n const verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n childLeft = parentLeft + (parentRight - parentLeft - width) / 2 +\n lp.leftMargin - lp.rightMargin;\n break;\n case Gravity.RIGHT:\n if (!forceLeftGravity) {\n childLeft = parentRight - width - lp.rightMargin;\n break;\n }\n case Gravity.LEFT:\n default:\n childLeft = parentLeft + lp.leftMargin;\n }\n switch (verticalGravity) {\n case Gravity.TOP:\n childTop = parentTop + lp.topMargin;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = parentTop + (parentBottom - parentTop - height) / 2 +\n lp.topMargin - lp.bottomMargin;\n break;\n case Gravity.BOTTOM:\n childTop = parentBottom - height - lp.bottomMargin;\n break;\n default:\n childTop = parentTop + lp.topMargin;\n }\n child.layout(childLeft, childTop, childLeft + width, childTop + height);\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n this.mForegroundBoundsChanged = true;\n }\n draw(canvas) {\n super.draw(canvas);\n if (this.mForeground != null) {\n const foreground = this.mForeground;\n if (this.mForegroundBoundsChanged) {\n this.mForegroundBoundsChanged = false;\n const selfBounds = this.mSelfBounds;\n const overlayBounds = this.mOverlayBounds;\n const w = this.mRight - this.mLeft;\n const h = this.mBottom - this.mTop;\n if (this.mForegroundInPadding) {\n selfBounds.set(0, 0, w, h);\n }\n else {\n selfBounds.set(this.mPaddingLeft, this.mPaddingTop, w - this.mPaddingRight, h - this.mPaddingBottom);\n }\n Gravity.apply(this.mForegroundGravity, foreground.getIntrinsicWidth(), foreground.getIntrinsicHeight(), selfBounds, overlayBounds);\n foreground.setBounds(overlayBounds);\n }\n foreground.draw(canvas);\n }\n }\n setMeasureAllChildren(measureAll) {\n this.mMeasureAllChildren = measureAll;\n }\n getMeasureAllChildren() {\n return this.mMeasureAllChildren;\n }\n shouldDelayChildPressedState() {\n return false;\n }\n checkLayoutParams(p) {\n return p instanceof FrameLayout.LayoutParams;\n }\n generateLayoutParams(p) {\n return new FrameLayout.LayoutParams(p);\n }\n }\n FrameLayout.DEFAULT_CHILD_GRAVITY = Gravity.TOP | Gravity.LEFT;\n widget.FrameLayout = FrameLayout;\n (function (FrameLayout) {\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(args.length == 3 ? [args[0], args[1]] : args));\n this.gravity = -1;\n if (args.length === 1 && args[0] instanceof LayoutParams) {\n this.gravity = args[0].gravity;\n }\n else if (args.length === 3) {\n this.gravity = args[2] || -1;\n }\n this._attrBinder.addAttr('gravity', (value) => {\n this.gravity = this._attrBinder.parseGravity(value, this.gravity);\n }, () => {\n return this.gravity;\n });\n }\n }\n FrameLayout.LayoutParams = LayoutParams;\n })(FrameLayout = widget.FrameLayout || (widget.FrameLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var Spanned;\n (function (Spanned) {\n function isImplements(obj) {\n return obj && obj['getSpans'] && obj['getSpanStart'] && obj['getSpanEnd']\n && obj['getSpanFlags'] && obj['nextSpanTransition'];\n }\n Spanned.isImplements = isImplements;\n Spanned.SPAN_POINT_MARK_MASK = 0x33;\n Spanned.SPAN_MARK_MARK = 0x11;\n Spanned.SPAN_MARK_POINT = 0x12;\n Spanned.SPAN_POINT_MARK = 0x21;\n Spanned.SPAN_POINT_POINT = 0x22;\n Spanned.SPAN_PARAGRAPH = 0x33;\n Spanned.SPAN_INCLUSIVE_EXCLUSIVE = Spanned.SPAN_MARK_MARK;\n Spanned.SPAN_INCLUSIVE_INCLUSIVE = Spanned.SPAN_MARK_POINT;\n Spanned.SPAN_EXCLUSIVE_EXCLUSIVE = Spanned.SPAN_POINT_MARK;\n Spanned.SPAN_EXCLUSIVE_INCLUSIVE = Spanned.SPAN_POINT_POINT;\n Spanned.SPAN_COMPOSING = 0x100;\n Spanned.SPAN_INTERMEDIATE = 0x200;\n Spanned.SPAN_USER_SHIFT = 24;\n Spanned.SPAN_USER = 0xFFFFFFFF << Spanned.SPAN_USER_SHIFT;\n Spanned.SPAN_PRIORITY_SHIFT = 16;\n Spanned.SPAN_PRIORITY = 0xFF << Spanned.SPAN_PRIORITY_SHIFT;\n })(Spanned = text.Spanned || (text.Spanned = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class TextPaint extends android.graphics.Paint {\n constructor(...args) {\n super(...args);\n this.baselineShift = 0;\n this.bgColor = 0;\n this.linkColor = 0;\n this.underlineColor = 0;\n this.underlineThickness = 0;\n }\n set(tp) {\n super.set(tp);\n this.bgColor = tp.bgColor;\n this.baselineShift = tp.baselineShift;\n this.linkColor = tp.linkColor;\n this.underlineColor = tp.underlineColor;\n this.underlineThickness = tp.underlineThickness;\n }\n setUnderlineText(color, thickness) {\n this.underlineColor = color;\n this.underlineThickness = thickness;\n }\n }\n text.TextPaint = TextPaint;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n class CharacterStyle {\n constructor() {\n this.mType = CharacterStyle.type;\n }\n static wrap(cs) {\n if (cs instanceof MetricAffectingSpan) {\n return new MetricAffectingSpan.Passthrough_MetricAffectingSpan(cs);\n }\n else {\n return new CharacterStyle.Passthrough_CharacterStyle(cs);\n }\n }\n getUnderlying() {\n return this;\n }\n }\n CharacterStyle.type = Symbol();\n style.CharacterStyle = CharacterStyle;\n (function (CharacterStyle) {\n class Passthrough_CharacterStyle extends CharacterStyle {\n constructor(cs) {\n super();\n this.mStyle = cs;\n }\n updateDrawState(tp) {\n this.mStyle.updateDrawState(tp);\n }\n getUnderlying() {\n return this.mStyle.getUnderlying();\n }\n }\n CharacterStyle.Passthrough_CharacterStyle = Passthrough_CharacterStyle;\n })(CharacterStyle = style.CharacterStyle || (style.CharacterStyle = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var CharacterStyle = android.text.style.CharacterStyle;\n class MetricAffectingSpan extends CharacterStyle {\n constructor(...args) {\n super(...args);\n this.mType = MetricAffectingSpan.type;\n }\n getUnderlying() {\n return this;\n }\n }\n MetricAffectingSpan.type = Symbol();\n style.MetricAffectingSpan = MetricAffectingSpan;\n (function (MetricAffectingSpan) {\n class Passthrough_MetricAffectingSpan extends MetricAffectingSpan {\n constructor(cs) {\n super();\n this.mStyle = cs;\n }\n updateDrawState(tp) {\n this.mStyle.updateDrawState(tp);\n }\n updateMeasureState(tp) {\n this.mStyle.updateMeasureState(tp);\n }\n getUnderlying() {\n return this.mStyle.getUnderlying();\n }\n }\n MetricAffectingSpan.Passthrough_MetricAffectingSpan = Passthrough_MetricAffectingSpan;\n })(MetricAffectingSpan = style.MetricAffectingSpan || (style.MetricAffectingSpan = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_1) {\n var style;\n (function (style) {\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n class ReplacementSpan extends MetricAffectingSpan {\n constructor(...args) {\n super(...args);\n this.mType = ReplacementSpan.type;\n }\n updateMeasureState(p) {\n }\n updateDrawState(ds) {\n }\n }\n ReplacementSpan.type = Symbol();\n style.ReplacementSpan = ReplacementSpan;\n })(style = text_1.style || (text_1.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var ParagraphStyle;\n (function (ParagraphStyle) {\n ParagraphStyle.type = Symbol();\n })(ParagraphStyle = style.ParagraphStyle || (style.ParagraphStyle = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_2) {\n var style;\n (function (style) {\n var TextUtils = android.text.TextUtils;\n var LeadingMarginSpan;\n (function (LeadingMarginSpan) {\n function isImpl(obj) {\n return obj && obj['getLeadingMargin'] && obj['drawLeadingMargin'];\n }\n LeadingMarginSpan.isImpl = isImpl;\n LeadingMarginSpan.type = Symbol();\n var LeadingMarginSpan2;\n (function (LeadingMarginSpan2) {\n function isImpl(obj) {\n return obj['getLeadingMarginLineCount'];\n }\n LeadingMarginSpan2.isImpl = isImpl;\n })(LeadingMarginSpan2 = LeadingMarginSpan.LeadingMarginSpan2 || (LeadingMarginSpan.LeadingMarginSpan2 = {}));\n class Standard {\n constructor(first, rest = first) {\n this.mFirst = 0;\n this.mRest = 0;\n this.mFirst = first;\n this.mRest = rest;\n }\n getSpanTypeId() {\n return TextUtils.LEADING_MARGIN_SPAN;\n }\n describeContents() {\n return 0;\n }\n getLeadingMargin(first) {\n return first ? this.mFirst : this.mRest;\n }\n drawLeadingMargin(c, p, x, dir, top, baseline, bottom, text, start, end, first, layout) {\n ;\n }\n }\n LeadingMarginSpan.Standard = Standard;\n })(LeadingMarginSpan = style.LeadingMarginSpan || (style.LeadingMarginSpan = {}));\n })(style = text_2.style || (text_2.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_3) {\n var style;\n (function (style) {\n var LineBackgroundSpan;\n (function (LineBackgroundSpan) {\n LineBackgroundSpan.type = Symbol();\n })(LineBackgroundSpan = style.LineBackgroundSpan || (style.LineBackgroundSpan = {}));\n })(style = text_3.style || (text_3.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var TabStopSpan;\n (function (TabStopSpan) {\n TabStopSpan.type = Symbol();\n function isImpl(obj) {\n return obj && obj['getTabStop'];\n }\n TabStopSpan.isImpl = isImpl;\n class Standard {\n constructor(where) {\n this.mTab = 0;\n this.mTab = where;\n }\n getTabStop() {\n return this.mTab;\n }\n }\n TabStopSpan.Standard = Standard;\n })(TabStopSpan = style.TabStopSpan || (style.TabStopSpan = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class SpanSet {\n constructor(type) {\n this.numberOfSpans = 0;\n this.classType = type;\n this.numberOfSpans = 0;\n }\n init(spanned, start, limit) {\n const allSpans = spanned.getSpans(start, limit, this.classType);\n const length = allSpans.length;\n if (length > 0 && (this.spans == null || this.spans.length < length)) {\n this.spans = new Array(length);\n this.spanStarts = androidui.util.ArrayCreator.newNumberArray(length);\n this.spanEnds = androidui.util.ArrayCreator.newNumberArray(length);\n this.spanFlags = androidui.util.ArrayCreator.newNumberArray(length);\n }\n this.numberOfSpans = 0;\n for (let i = 0; i < length; i++) {\n const span = allSpans[i];\n const spanStart = spanned.getSpanStart(span);\n const spanEnd = spanned.getSpanEnd(span);\n if (spanStart == spanEnd)\n continue;\n const spanFlag = spanned.getSpanFlags(span);\n this.spans[this.numberOfSpans] = span;\n this.spanStarts[this.numberOfSpans] = spanStart;\n this.spanEnds[this.numberOfSpans] = spanEnd;\n this.spanFlags[this.numberOfSpans] = spanFlag;\n this.numberOfSpans++;\n }\n }\n hasSpansIntersecting(start, end) {\n for (let i = 0; i < this.numberOfSpans; i++) {\n if (this.spanStarts[i] >= end || this.spanEnds[i] <= start)\n continue;\n return true;\n }\n return false;\n }\n getNextTransition(start, limit) {\n for (let i = 0; i < this.numberOfSpans; i++) {\n const spanStart = this.spanStarts[i];\n const spanEnd = this.spanEnds[i];\n if (spanStart > start && spanStart < limit)\n limit = spanStart;\n if (spanEnd > start && spanEnd < limit)\n limit = spanEnd;\n }\n return limit;\n }\n recycle() {\n for (let i = 0; i < this.numberOfSpans; i++) {\n this.spans[i] = null;\n }\n }\n }\n text.SpanSet = SpanSet;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class TextDirectionHeuristics {\n static isRtlText(directionality) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n static isRtlTextOrFormat(directionality) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n }\n TextDirectionHeuristics.STATE_TRUE = 0;\n TextDirectionHeuristics.STATE_FALSE = 1;\n TextDirectionHeuristics.STATE_UNKNOWN = 2;\n text.TextDirectionHeuristics = TextDirectionHeuristics;\n (function (TextDirectionHeuristics) {\n class TextDirectionHeuristicImpl {\n constructor(algorithm) {\n this.mAlgorithm = algorithm;\n }\n isRtl(cs, start, count) {\n if (cs == null || start < 0 || count < 0 || cs.length - count < start) {\n throw Error(`new IllegalArgumentException()`);\n }\n if (this.mAlgorithm == null) {\n return this.defaultIsRtl();\n }\n return this.doCheck(cs, start, count);\n }\n doCheck(cs, start, count) {\n switch (this.mAlgorithm.checkRtl(cs, start, count)) {\n case TextDirectionHeuristics.STATE_TRUE:\n return true;\n case TextDirectionHeuristics.STATE_FALSE:\n return false;\n default:\n return this.defaultIsRtl();\n }\n }\n }\n TextDirectionHeuristics.TextDirectionHeuristicImpl = TextDirectionHeuristicImpl;\n class TextDirectionHeuristicInternal extends TextDirectionHeuristics.TextDirectionHeuristicImpl {\n constructor(algorithm, defaultIsRtl) {\n super(algorithm);\n this.mDefaultIsRtl = defaultIsRtl;\n }\n defaultIsRtl() {\n return this.mDefaultIsRtl;\n }\n }\n TextDirectionHeuristics.TextDirectionHeuristicInternal = TextDirectionHeuristicInternal;\n class FirstStrong {\n constructor() {\n }\n checkRtl(cs, start, count) {\n let result = TextDirectionHeuristics.STATE_UNKNOWN;\n for (let i = start, e = start + count; i < e && result == TextDirectionHeuristics.STATE_UNKNOWN; ++i) {\n result = TextDirectionHeuristics.STATE_FALSE;\n }\n return result;\n }\n }\n FirstStrong.INSTANCE = new FirstStrong();\n TextDirectionHeuristics.FirstStrong = FirstStrong;\n class AnyStrong {\n constructor(lookForRtl) {\n this.mLookForRtl = lookForRtl;\n }\n checkRtl(cs, start, count) {\n let haveUnlookedFor = false;\n for (let i = start, e = start + count; i < e; ++i) {\n switch (TextDirectionHeuristics.isRtlText(0)) {\n case TextDirectionHeuristics.STATE_TRUE:\n if (this.mLookForRtl) {\n return TextDirectionHeuristics.STATE_TRUE;\n }\n haveUnlookedFor = true;\n break;\n case TextDirectionHeuristics.STATE_FALSE:\n if (!this.mLookForRtl) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n haveUnlookedFor = true;\n break;\n default:\n break;\n }\n }\n if (haveUnlookedFor) {\n return this.mLookForRtl ? TextDirectionHeuristics.STATE_FALSE : TextDirectionHeuristics.STATE_TRUE;\n }\n return TextDirectionHeuristics.STATE_UNKNOWN;\n }\n }\n AnyStrong.INSTANCE_RTL = new AnyStrong(true);\n AnyStrong.INSTANCE_LTR = new AnyStrong(false);\n TextDirectionHeuristics.AnyStrong = AnyStrong;\n class TextDirectionHeuristicLocale extends TextDirectionHeuristics.TextDirectionHeuristicImpl {\n constructor() {\n super(null);\n }\n defaultIsRtl() {\n return false;\n }\n }\n TextDirectionHeuristicLocale.INSTANCE = new TextDirectionHeuristicLocale();\n TextDirectionHeuristics.TextDirectionHeuristicLocale = TextDirectionHeuristicLocale;\n })(TextDirectionHeuristics = text.TextDirectionHeuristics || (text.TextDirectionHeuristics = {}));\n TextDirectionHeuristics.LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(null, false);\n TextDirectionHeuristics.RTL = new TextDirectionHeuristics.TextDirectionHeuristicInternal(null, true);\n TextDirectionHeuristics.FIRSTSTRONG_LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.FirstStrong.INSTANCE, false);\n TextDirectionHeuristics.FIRSTSTRONG_RTL = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.FirstStrong.INSTANCE, true);\n TextDirectionHeuristics.ANYRTL_LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.AnyStrong.INSTANCE_RTL, false);\n TextDirectionHeuristics.LOCALE = TextDirectionHeuristics.TextDirectionHeuristicLocale.INSTANCE;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_4) {\n var Canvas = android.graphics.Canvas;\n var Paint = android.graphics.Paint;\n var CharacterStyle = android.text.style.CharacterStyle;\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var Log = android.util.Log;\n var Spanned = android.text.Spanned;\n var SpanSet = android.text.SpanSet;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n var Layout = android.text.Layout;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval('Layout = android.text.Layout;');\n });\n class TextLine {\n constructor() {\n this.mStart = 0;\n this.mLen = 0;\n this.mDir = 0;\n this.mWorkPaint = new TextPaint();\n this.mMetricAffectingSpanSpanSet = new SpanSet(MetricAffectingSpan.type);\n this.mCharacterStyleSpanSet = new SpanSet(CharacterStyle.type);\n this.mReplacementSpanSpanSet = new SpanSet(ReplacementSpan.type);\n }\n static obtain() {\n let tl;\n {\n for (let i = TextLine.sCached.length; --i >= 0;) {\n if (TextLine.sCached[i] != null) {\n tl = TextLine.sCached[i];\n TextLine.sCached[i] = null;\n return tl;\n }\n }\n }\n tl = new TextLine();\n if (TextLine.DEBUG) {\n Log.v(\"TLINE\", \"new: \" + tl);\n }\n return tl;\n }\n static recycle(tl) {\n tl.mText = null;\n tl.mPaint = null;\n tl.mDirections = null;\n tl.mMetricAffectingSpanSpanSet.recycle();\n tl.mCharacterStyleSpanSet.recycle();\n tl.mReplacementSpanSpanSet.recycle();\n {\n for (let i = 0; i < TextLine.sCached.length; ++i) {\n if (TextLine.sCached[i] == null) {\n TextLine.sCached[i] = tl;\n break;\n }\n }\n }\n return null;\n }\n set(paint, text, start, limit, dir, directions, hasTabs, tabStops) {\n this.mPaint = paint;\n this.mText = text;\n this.mStart = start;\n this.mLen = limit - start;\n this.mDir = dir;\n this.mDirections = directions;\n if (this.mDirections == null) {\n throw Error(`new IllegalArgumentException(\"Directions cannot be null\")`);\n }\n this.mHasTabs = hasTabs;\n this.mSpanned = null;\n let hasReplacement = false;\n if (Spanned.isImplements(text)) {\n this.mSpanned = text;\n this.mReplacementSpanSpanSet.init(this.mSpanned, start, limit);\n hasReplacement = this.mReplacementSpanSpanSet.numberOfSpans > 0;\n }\n this.mCharsValid = hasReplacement || hasTabs || directions != Layout.DIRS_ALL_LEFT_TO_RIGHT;\n if (this.mCharsValid) {\n this.mChars = text;\n if (hasReplacement) {\n let chars = this.mChars;\n for (let i = start, inext; i < limit; i = inext) {\n inext = this.mReplacementSpanSpanSet.getNextTransition(i, limit);\n if (this.mReplacementSpanSpanSet.hasSpansIntersecting(i, inext)) {\n chars[i - start] = '';\n for (let j = i - start + 1, e = inext - start; j < e; ++j) {\n chars[j] = '';\n }\n }\n }\n }\n }\n this.mTabs = tabStops;\n }\n draw(c, x, top, y, bottom) {\n if (!this.mHasTabs) {\n if (this.mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n this.drawRun(c, 0, this.mLen, false, x, top, y, bottom, false);\n return;\n }\n if (this.mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n this.drawRun(c, 0, this.mLen, true, x, top, y, bottom, false);\n return;\n }\n }\n let h = 0;\n let runs = this.mDirections.mDirections;\n let emojiRect = null;\n let lastRunIndex = runs.length - 2;\n for (let i = 0; i < runs.length; i += 2) {\n let runStart = runs[i];\n let runLimit = runStart + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > this.mLen) {\n runLimit = this.mLen;\n }\n let runIsRtl = (runs[i + 1] & Layout.RUN_RTL_FLAG) != 0;\n let segstart = runStart;\n for (let j = this.mHasTabs ? runStart : runLimit; j <= runLimit; j++) {\n let codept = 0;\n if (this.mHasTabs && j < runLimit) {\n codept = this.mChars.codePointAt(j);\n if (codept >= 0xd800 && codept < 0xdc00 && j + 1 < runLimit) {\n codept = this.mChars.codePointAt(j);\n if (codept > 0xffff) {\n ++j;\n continue;\n }\n }\n }\n if (j == runLimit || codept == '\\t'.codePointAt(0)) {\n h += this.drawRun(c, segstart, j, runIsRtl, x + h, top, y, bottom, i != lastRunIndex || j != this.mLen);\n if (codept == '\\t'.codePointAt(0)) {\n h = this.mDir * this.nextTab(h * this.mDir);\n }\n segstart = j + 1;\n }\n }\n }\n }\n metrics(fmi) {\n return this.measure(this.mLen, false, fmi);\n }\n measure(offset, trailing, fmi) {\n let target = trailing ? offset - 1 : offset;\n if (target < 0) {\n return 0;\n }\n let h = 0;\n if (!this.mHasTabs) {\n if (this.mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n return this.measureRun(0, offset, this.mLen, false, fmi);\n }\n if (this.mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return this.measureRun(0, offset, this.mLen, true, fmi);\n }\n }\n let chars = this.mChars;\n let runs = this.mDirections.mDirections;\n for (let i = 0; i < runs.length; i += 2) {\n let runStart = runs[i];\n let runLimit = runStart + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > this.mLen) {\n runLimit = this.mLen;\n }\n let runIsRtl = (runs[i + 1] & Layout.RUN_RTL_FLAG) != 0;\n let segstart = runStart;\n for (let j = this.mHasTabs ? runStart : runLimit; j <= runLimit; j++) {\n let codept = 0;\n if (this.mHasTabs && j < runLimit) {\n codept = chars.codePointAt(j);\n if (codept >= 0xd800 && codept < 0xdc00 && j + 1 < runLimit) {\n codept = chars.codePointAt(j);\n if (codept > 0xffff) {\n ++j;\n continue;\n }\n }\n }\n if (j == runLimit || codept == '\\t'.codePointAt(0)) {\n let inSegment = target >= segstart && target < j;\n let advance = (this.mDir == Layout.DIR_RIGHT_TO_LEFT) == runIsRtl;\n if (inSegment && advance) {\n return h += this.measureRun(segstart, offset, j, runIsRtl, fmi);\n }\n let w = this.measureRun(segstart, j, j, runIsRtl, fmi);\n h += advance ? w : -w;\n if (inSegment) {\n return h += this.measureRun(segstart, offset, j, runIsRtl, null);\n }\n if (codept == '\\t'.codePointAt(0)) {\n if (offset == j) {\n return h;\n }\n h = this.mDir * this.nextTab(h * this.mDir);\n if (target == j) {\n return h;\n }\n }\n segstart = j + 1;\n }\n }\n }\n return h;\n }\n drawRun(c, start, limit, runIsRtl, x, top, y, bottom, needWidth) {\n if ((this.mDir == Layout.DIR_LEFT_TO_RIGHT) == runIsRtl) {\n let w = -this.measureRun(start, limit, limit, runIsRtl, null);\n this.handleRun(start, limit, limit, runIsRtl, c, x + w, top, y, bottom, null, false);\n return w;\n }\n return this.handleRun(start, limit, limit, runIsRtl, c, x, top, y, bottom, null, needWidth);\n }\n measureRun(start, offset, limit, runIsRtl, fmi) {\n return this.handleRun(start, offset, limit, runIsRtl, null, 0, 0, 0, 0, fmi, true);\n }\n getOffsetToLeftRightOf(cursor, toLeft) {\n let lineStart = 0;\n let lineEnd = this.mLen;\n let paraIsRtl = this.mDir == -1;\n let runs = this.mDirections.mDirections;\n let runIndex, runLevel = 0, runStart = lineStart, runLimit = lineEnd, newCaret = -1;\n let trailing = false;\n if (cursor == lineStart) {\n runIndex = -2;\n }\n else if (cursor == lineEnd) {\n runIndex = runs.length;\n }\n else {\n for (runIndex = 0; runIndex < runs.length; runIndex += 2) {\n runStart = lineStart + runs[runIndex];\n if (cursor >= runStart) {\n runLimit = runStart + (runs[runIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > lineEnd) {\n runLimit = lineEnd;\n }\n if (cursor < runLimit) {\n runLevel = (runs[runIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n if (cursor == runStart) {\n let prevRunIndex, prevRunLevel, prevRunStart, prevRunLimit;\n let pos = cursor - 1;\n for (prevRunIndex = 0; prevRunIndex < runs.length; prevRunIndex += 2) {\n prevRunStart = lineStart + runs[prevRunIndex];\n if (pos >= prevRunStart) {\n prevRunLimit = prevRunStart + (runs[prevRunIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (prevRunLimit > lineEnd) {\n prevRunLimit = lineEnd;\n }\n if (pos < prevRunLimit) {\n prevRunLevel = (runs[prevRunIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n if (prevRunLevel < runLevel) {\n runIndex = prevRunIndex;\n runLevel = prevRunLevel;\n runStart = prevRunStart;\n runLimit = prevRunLimit;\n trailing = true;\n break;\n }\n }\n }\n }\n }\n break;\n }\n }\n }\n if (runIndex != runs.length) {\n let runIsRtl = (runLevel & 0x1) != 0;\n let advance = toLeft == runIsRtl;\n if (cursor != (advance ? runLimit : runStart) || advance != trailing) {\n newCaret = this.getOffsetBeforeAfter(runIndex, runStart, runLimit, runIsRtl, cursor, advance);\n if (newCaret != (advance ? runLimit : runStart)) {\n return newCaret;\n }\n }\n }\n }\n while (true) {\n let advance = toLeft == paraIsRtl;\n let otherRunIndex = runIndex + (advance ? 2 : -2);\n if (otherRunIndex >= 0 && otherRunIndex < runs.length) {\n let otherRunStart = lineStart + runs[otherRunIndex];\n let otherRunLimit = otherRunStart + (runs[otherRunIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (otherRunLimit > lineEnd) {\n otherRunLimit = lineEnd;\n }\n let otherRunLevel = (runs[otherRunIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n let otherRunIsRtl = (otherRunLevel & 1) != 0;\n advance = toLeft == otherRunIsRtl;\n if (newCaret == -1) {\n newCaret = this.getOffsetBeforeAfter(otherRunIndex, otherRunStart, otherRunLimit, otherRunIsRtl, advance ? otherRunStart : otherRunLimit, advance);\n if (newCaret == (advance ? otherRunLimit : otherRunStart)) {\n runIndex = otherRunIndex;\n runLevel = otherRunLevel;\n continue;\n }\n break;\n }\n if (otherRunLevel < runLevel) {\n newCaret = advance ? otherRunStart : otherRunLimit;\n }\n break;\n }\n if (newCaret == -1) {\n newCaret = advance ? this.mLen + 1 : -1;\n break;\n }\n if (newCaret <= lineEnd) {\n newCaret = advance ? lineEnd : lineStart;\n }\n break;\n }\n return newCaret;\n }\n getOffsetBeforeAfter(runIndex, runStart, runLimit, runIsRtl, offset, after) {\n if (runIndex < 0 || offset == (after ? this.mLen : 0)) {\n if (after) {\n return TextUtils.getOffsetAfter(this.mText, offset + this.mStart) - this.mStart;\n }\n return TextUtils.getOffsetBefore(this.mText, offset + this.mStart) - this.mStart;\n }\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n let spanStart = runStart;\n let spanLimit;\n if (this.mSpanned == null) {\n spanLimit = runLimit;\n }\n else {\n let target = after ? offset + 1 : offset;\n let limit = this.mStart + runLimit;\n while (true) {\n spanLimit = this.mSpanned.nextSpanTransition(this.mStart + spanStart, limit, MetricAffectingSpan.type) - this.mStart;\n if (spanLimit >= target) {\n break;\n }\n spanStart = spanLimit;\n }\n let spans = this.mSpanned.getSpans(this.mStart + spanStart, this.mStart + spanLimit, MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, this.mSpanned, MetricAffectingSpan.type);\n if (spans.length > 0) {\n let replacement = null;\n for (let j = 0; j < spans.length; j++) {\n let span = spans[j];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateMeasureState(wp);\n }\n }\n if (replacement != null) {\n return after ? spanLimit : spanStart;\n }\n }\n }\n let flags = runIsRtl ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR;\n let cursorOpt = after ? Paint.CURSOR_AFTER : Paint.CURSOR_BEFORE;\n if (this.mCharsValid) {\n return wp.getTextRunCursor_len(this.mChars.toString(), spanStart, spanLimit - spanStart, flags, offset, cursorOpt);\n }\n else {\n return wp.getTextRunCursor_end(this.mText.toString(), this.mStart + spanStart, this.mStart + spanLimit, flags, this.mStart + offset, cursorOpt) - this.mStart;\n }\n }\n static expandMetricsFromPaint(fmi, wp) {\n const previousTop = fmi.top;\n const previousAscent = fmi.ascent;\n const previousDescent = fmi.descent;\n const previousBottom = fmi.bottom;\n const previousLeading = fmi.leading;\n wp.getFontMetricsInt(fmi);\n TextLine.updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading);\n }\n static updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading) {\n fmi.top = Math.min(fmi.top, previousTop);\n fmi.ascent = Math.min(fmi.ascent, previousAscent);\n fmi.descent = Math.max(fmi.descent, previousDescent);\n fmi.bottom = Math.max(fmi.bottom, previousBottom);\n fmi.leading = Math.max(fmi.leading, previousLeading);\n }\n handleText(wp, start, end, contextStart, contextEnd, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n if (fmi != null) {\n TextLine.expandMetricsFromPaint(fmi, wp);\n }\n let runLen = end - start;\n if (runLen == 0) {\n return 0;\n }\n let ret = 0;\n let contextLen = contextEnd - contextStart;\n if (needWidth || (c != null && (wp.bgColor != 0 || wp.underlineColor != 0 || runIsRtl))) {\n let flags = runIsRtl ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR;\n if (this.mCharsValid) {\n ret = wp.getTextRunAdvances_count(this.mChars.toString(), start, runLen, contextStart, contextLen, flags, null, 0);\n }\n else {\n let delta = this.mStart;\n ret = wp.getTextRunAdvances_end(this.mText.toString(), delta + start, delta + end, delta + contextStart, delta + contextEnd, flags, null, 0);\n }\n }\n if (c != null) {\n if (runIsRtl) {\n x -= ret;\n }\n if (wp.bgColor != 0) {\n let previousColor = wp.getColor();\n let previousStyle = wp.getStyle();\n wp.setColor(wp.bgColor);\n wp.setStyle(Paint.Style.FILL);\n c.drawRect(x, top, x + ret, bottom, wp);\n wp.setStyle(previousStyle);\n wp.setColor(previousColor);\n }\n if (wp.underlineColor != 0) {\n let underlineTop = y + wp.baselineShift + (1.0 / 9.0) * wp.getTextSize();\n let previousColor = wp.getColor();\n let previousStyle = wp.getStyle();\n let previousAntiAlias = wp.isAntiAlias();\n wp.setStyle(Paint.Style.FILL);\n wp.setAntiAlias(true);\n wp.setColor(wp.underlineColor);\n c.drawRect(x, underlineTop, x + ret, underlineTop + wp.underlineThickness, wp);\n wp.setStyle(previousStyle);\n wp.setColor(previousColor);\n wp.setAntiAlias(previousAntiAlias);\n }\n this.drawTextRun(c, wp, start, end, contextStart, contextEnd, runIsRtl, x, y + wp.baselineShift);\n }\n return runIsRtl ? -ret : ret;\n }\n handleReplacement(replacement, wp, start, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n let ret = 0;\n let textStart = this.mStart + start;\n let textLimit = this.mStart + limit;\n if (needWidth || (c != null && runIsRtl)) {\n let previousTop = 0;\n let previousAscent = 0;\n let previousDescent = 0;\n let previousBottom = 0;\n let previousLeading = 0;\n let needUpdateMetrics = (fmi != null);\n if (needUpdateMetrics) {\n previousTop = fmi.top;\n previousAscent = fmi.ascent;\n previousDescent = fmi.descent;\n previousBottom = fmi.bottom;\n previousLeading = fmi.leading;\n }\n ret = replacement.getSize(wp, this.mText, textStart, textLimit, fmi);\n if (needUpdateMetrics) {\n TextLine.updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading);\n }\n }\n if (c != null) {\n if (runIsRtl) {\n x -= ret;\n }\n replacement.draw(c, this.mText, textStart, textLimit, x, top, y, bottom, wp);\n }\n return runIsRtl ? -ret : ret;\n }\n handleRun(start, measureLimit, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n if (start == measureLimit) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n if (fmi != null) {\n TextLine.expandMetricsFromPaint(fmi, wp);\n }\n return 0;\n }\n if (this.mSpanned == null) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n const mlimit = measureLimit;\n return this.handleText(wp, start, mlimit, start, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth || mlimit < measureLimit);\n }\n this.mMetricAffectingSpanSpanSet.init(this.mSpanned, this.mStart + start, this.mStart + limit);\n this.mCharacterStyleSpanSet.init(this.mSpanned, this.mStart + start, this.mStart + limit);\n const originalX = x;\n for (let i = start, inext; i < measureLimit; i = inext) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n inext = this.mMetricAffectingSpanSpanSet.getNextTransition(this.mStart + i, this.mStart + limit) - this.mStart;\n let mlimit = Math.min(inext, measureLimit);\n let replacement = null;\n for (let j = 0; j < this.mMetricAffectingSpanSpanSet.numberOfSpans; j++) {\n if ((this.mMetricAffectingSpanSpanSet.spanStarts[j] >= this.mStart + mlimit) || (this.mMetricAffectingSpanSpanSet.spanEnds[j] <= this.mStart + i))\n continue;\n let span = this.mMetricAffectingSpanSpanSet.spans[j];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateDrawState(wp);\n }\n }\n if (replacement != null) {\n x += this.handleReplacement(replacement, wp, i, mlimit, runIsRtl, c, x, top, y, bottom, fmi, needWidth || mlimit < measureLimit);\n continue;\n }\n for (let j = i, jnext; j < mlimit; j = jnext) {\n jnext = this.mCharacterStyleSpanSet.getNextTransition(this.mStart + j, this.mStart + mlimit) - this.mStart;\n wp.set(this.mPaint);\n for (let k = 0; k < this.mCharacterStyleSpanSet.numberOfSpans; k++) {\n if ((this.mCharacterStyleSpanSet.spanStarts[k] >= this.mStart + jnext) || (this.mCharacterStyleSpanSet.spanEnds[k] <= this.mStart + j))\n continue;\n let span = this.mCharacterStyleSpanSet.spans[k];\n span.updateDrawState(wp);\n }\n x += this.handleText(wp, j, jnext, i, inext, runIsRtl, c, x, top, y, bottom, fmi, needWidth || jnext < measureLimit);\n }\n }\n return x - originalX;\n }\n drawTextRun(c, wp, start, end, contextStart, contextEnd, runIsRtl, x, y) {\n let flags = runIsRtl ? Canvas.DIRECTION_RTL : Canvas.DIRECTION_LTR;\n if (this.mCharsValid) {\n let count = end - start;\n let contextCount = contextEnd - contextStart;\n c.drawTextRun_count(this.mChars.toString(), start, count, contextStart, contextCount, x, y, flags, wp);\n }\n else {\n let delta = this.mStart;\n c.drawTextRun_end(this.mText.toString(), delta + start, delta + end, delta + contextStart, delta + contextEnd, x, y, flags, wp);\n }\n }\n ascent(pos) {\n if (this.mSpanned == null) {\n return this.mPaint.ascent();\n }\n pos += this.mStart;\n let spans = this.mSpanned.getSpans(pos, pos + 1, MetricAffectingSpan.type);\n if (spans.length == 0) {\n return this.mPaint.ascent();\n }\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n for (let span of spans) {\n span.updateMeasureState(wp);\n }\n return wp.ascent();\n }\n nextTab(h) {\n if (this.mTabs != null) {\n return this.mTabs.nextTab(h);\n }\n return Layout.TabStops.nextDefaultStop(h, TextLine.TAB_INCREMENT);\n }\n }\n TextLine.DEBUG = false;\n TextLine.sCached = new Array(3);\n TextLine.TAB_INCREMENT = 20;\n text_4.TextLine = TextLine;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_5) {\n var Rect = android.graphics.Rect;\n var LeadingMarginSpan = android.text.style.LeadingMarginSpan;\n var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2;\n var LineBackgroundSpan = android.text.style.LineBackgroundSpan;\n var ParagraphStyle = android.text.style.ParagraphStyle;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var TabStopSpan = android.text.style.TabStopSpan;\n var Arrays = java.util.Arrays;\n var Float = java.lang.Float;\n var System = java.lang.System;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var SpanSet = android.text.SpanSet;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextLine = android.text.TextLine;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval(`TextUtils = android.text.TextUtils;\n MeasuredText = android.text.MeasuredText;\n `);\n });\n class Layout {\n constructor(text, paint, width, align, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingMult = 1, spacingAdd = 0) {\n this.mWidth = 0;\n this.mAlignment = Layout.Alignment.ALIGN_NORMAL;\n this.mSpacingMult = 0;\n this.mSpacingAdd = 0;\n if (width < 0)\n throw Error(`new IllegalArgumentException(\"Layout: \" + width + \" < 0\")`);\n if (paint != null) {\n paint.bgColor = 0;\n paint.baselineShift = 0;\n }\n this.mText = text;\n this.mPaint = paint;\n this.mWorkPaint = new TextPaint();\n this.mWidth = width;\n this.mAlignment = align;\n this.mSpacingMult = spacingMult;\n this.mSpacingAdd = spacingAdd;\n this.mSpannedText = Spanned.isImplements(text);\n this.mTextDir = textDir;\n }\n static getDesiredWidth(...args) {\n if (args.length == 2)\n return Layout.getDesiredWidth_2(...args);\n if (args.length == 4)\n return Layout.getDesiredWidth_4(...args);\n }\n static getDesiredWidth_2(source, paint) {\n return Layout.getDesiredWidth(source, 0, source.length, paint);\n }\n static getDesiredWidth_4(source, start, end, paint) {\n let need = 0;\n let next;\n for (let i = start; i <= end; i = next) {\n next = source.substring(0, end).indexOf('\\n', i);\n if (next < 0)\n next = end;\n let w = Layout.measurePara(paint, source, i, next);\n if (w > need)\n need = w;\n next++;\n }\n return need;\n }\n replaceWith(text, paint, width, align, spacingmult, spacingadd) {\n if (width < 0) {\n throw Error(`new IllegalArgumentException(\"Layout: \" + width + \" < 0\")`);\n }\n this.mText = text;\n this.mPaint = paint;\n this.mWidth = width;\n this.mAlignment = align;\n this.mSpacingMult = spacingmult;\n this.mSpacingAdd = spacingadd;\n this.mSpannedText = Spanned.isImplements(text);\n }\n draw(canvas, highlight = null, highlightPaint = null, cursorOffsetVertical = 0) {\n const lineRange = this.getLineRangeForDraw(canvas);\n let firstLine = TextUtils.unpackRangeStartFromLong(lineRange);\n let lastLine = TextUtils.unpackRangeEndFromLong(lineRange);\n if (lastLine < 0)\n return;\n this.drawBackground(canvas, highlight, highlightPaint, cursorOffsetVertical, firstLine, lastLine);\n this.drawText(canvas, firstLine, lastLine);\n }\n drawText(canvas, firstLine, lastLine) {\n let previousLineBottom = this.getLineTop(firstLine);\n let previousLineEnd = this.getLineStart(firstLine);\n let spans = Layout.NO_PARA_SPANS;\n let spanEnd = 0;\n let paint = this.mPaint;\n let buf = this.mText;\n let paraAlign = this.mAlignment;\n let tabStops = null;\n let tabStopsIsInitialized = false;\n let tl = TextLine.obtain();\n for (let i = firstLine; i <= lastLine; i++) {\n let start = previousLineEnd;\n previousLineEnd = this.getLineStart(i + 1);\n let end = this.getLineVisibleEnd(i, start, previousLineEnd);\n let ltop = previousLineBottom;\n let lbottom = this.getLineTop(i + 1);\n previousLineBottom = lbottom;\n let lbaseline = lbottom - this.getLineDescent(i);\n let dir = this.getParagraphDirection(i);\n let left = 0;\n let right = this.mWidth;\n if (this.mSpannedText) {\n let sp = buf;\n let textLength = buf.length;\n let isFirstParaLine = (start == 0 || buf.charAt(start - 1) == '\\n');\n if (start >= spanEnd && (i == firstLine || isFirstParaLine)) {\n spanEnd = sp.nextSpanTransition(start, textLength, ParagraphStyle.type);\n spans = Layout.getParagraphSpans(sp, start, spanEnd, ParagraphStyle.type);\n paraAlign = this.mAlignment;\n tabStopsIsInitialized = false;\n }\n const length = spans.length;\n for (let n = 0; n < length; n++) {\n if (LeadingMarginSpan.isImpl(spans[n])) {\n let margin = spans[n];\n let useFirstLineMargin = isFirstParaLine;\n if (LeadingMarginSpan2.isImpl(margin)) {\n let count = margin.getLeadingMarginLineCount();\n let startLine = this.getLineForOffset(sp.getSpanStart(margin));\n useFirstLineMargin = i < startLine + count;\n }\n if (dir == Layout.DIR_RIGHT_TO_LEFT) {\n margin.drawLeadingMargin(canvas, paint, right, dir, ltop, lbaseline, lbottom, buf, start, end, isFirstParaLine, this);\n right -= margin.getLeadingMargin(useFirstLineMargin);\n }\n else {\n margin.drawLeadingMargin(canvas, paint, left, dir, ltop, lbaseline, lbottom, buf, start, end, isFirstParaLine, this);\n left += margin.getLeadingMargin(useFirstLineMargin);\n }\n }\n }\n }\n let hasTabOrEmoji = this.getLineContainsTab(i);\n if (hasTabOrEmoji && !tabStopsIsInitialized) {\n if (tabStops == null) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, spans);\n }\n else {\n tabStops.reset(Layout.TAB_INCREMENT, spans);\n }\n tabStopsIsInitialized = true;\n }\n let align = paraAlign;\n if (align == Layout.Alignment.ALIGN_LEFT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL;\n }\n let x;\n if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = left;\n }\n else {\n x = right;\n }\n }\n else {\n let max = Math.floor(this.getLineExtent(i, tabStops, false));\n if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = right - max;\n }\n else {\n x = left - max;\n }\n }\n else {\n max = max & ~1;\n x = (right + left - max) >> 1;\n }\n }\n let directions = this.getLineDirections(i);\n if (directions == Layout.DIRS_ALL_LEFT_TO_RIGHT && !this.mSpannedText && !hasTabOrEmoji) {\n canvas.drawText_end(buf.toString(), start, end, x, lbaseline, paint);\n }\n else {\n tl.set(paint, buf, start, end, dir, directions, hasTabOrEmoji, tabStops);\n tl.draw(canvas, x, ltop, lbaseline, lbottom);\n }\n }\n TextLine.recycle(tl);\n }\n drawBackground(canvas, highlight, highlightPaint, cursorOffsetVertical, firstLine, lastLine) {\n if (this.mSpannedText) {\n if (this.mLineBackgroundSpans == null) {\n this.mLineBackgroundSpans = new SpanSet(LineBackgroundSpan.type);\n }\n let buffer = this.mText;\n let textLength = buffer.length;\n this.mLineBackgroundSpans.init(buffer, 0, textLength);\n if (this.mLineBackgroundSpans.numberOfSpans > 0) {\n let previousLineBottom = this.getLineTop(firstLine);\n let previousLineEnd = this.getLineStart(firstLine);\n let spans = Layout.NO_PARA_SPANS;\n let spansLength = 0;\n let paint = this.mPaint;\n let spanEnd = 0;\n const width = this.mWidth;\n for (let i = firstLine; i <= lastLine; i++) {\n let start = previousLineEnd;\n let end = this.getLineStart(i + 1);\n previousLineEnd = end;\n let ltop = previousLineBottom;\n let lbottom = this.getLineTop(i + 1);\n previousLineBottom = lbottom;\n let lbaseline = lbottom - this.getLineDescent(i);\n if (start >= spanEnd) {\n spanEnd = this.mLineBackgroundSpans.getNextTransition(start, textLength);\n spansLength = 0;\n if (start != end || start == 0) {\n for (let j = 0; j < this.mLineBackgroundSpans.numberOfSpans; j++) {\n if (this.mLineBackgroundSpans.spanStarts[j] >= end || this.mLineBackgroundSpans.spanEnds[j] <= start)\n continue;\n if (spansLength == spans.length) {\n let newSize = (2 * spansLength);\n let newSpans = new Array(newSize);\n System.arraycopy(spans, 0, newSpans, 0, spansLength);\n spans = newSpans;\n }\n spans[spansLength++] = this.mLineBackgroundSpans.spans[j];\n }\n }\n }\n for (let n = 0; n < spansLength; n++) {\n let lineBackgroundSpan = spans[n];\n lineBackgroundSpan.drawBackground(canvas, paint, 0, width, ltop, lbaseline, lbottom, buffer, start, end, i);\n }\n }\n }\n this.mLineBackgroundSpans.recycle();\n }\n if (highlight != null) {\n if (cursorOffsetVertical != 0)\n canvas.translate(0, cursorOffsetVertical);\n canvas.drawPath(highlight, highlightPaint);\n if (cursorOffsetVertical != 0)\n canvas.translate(0, -cursorOffsetVertical);\n }\n }\n getLineRangeForDraw(canvas) {\n let dtop, dbottom;\n {\n if (!canvas.getClipBounds(Layout.sTempRect)) {\n return TextUtils.packRangeInLong(0, -1);\n }\n dtop = Layout.sTempRect.top;\n dbottom = Layout.sTempRect.bottom;\n }\n const top = Math.max(dtop, 0);\n const bottom = Math.min(this.getLineTop(this.getLineCount()), dbottom);\n if (top >= bottom)\n return TextUtils.packRangeInLong(0, -1);\n return TextUtils.packRangeInLong(this.getLineForVertical(top), this.getLineForVertical(bottom));\n }\n getLineStartPos(line, left, right) {\n let align = this.getParagraphAlignment(line);\n let dir = this.getParagraphDirection(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL;\n }\n let x;\n if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = left;\n }\n else {\n x = right;\n }\n }\n else {\n let tabStops = null;\n if (this.mSpannedText && this.getLineContainsTab(line)) {\n let spanned = this.mText;\n let start = this.getLineStart(line);\n let spanEnd = spanned.nextSpanTransition(start, spanned.length, TabStopSpan.type);\n let tabSpans = Layout.getParagraphSpans(spanned, start, spanEnd, TabStopSpan.type);\n if (tabSpans.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabSpans);\n }\n }\n let max = Math.floor(this.getLineExtent(line, tabStops, false));\n if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = right - max;\n }\n else {\n x = left - max;\n }\n }\n else {\n max = max & ~1;\n x = (left + right - max) >> 1;\n }\n }\n return x;\n }\n getText() {\n return this.mText;\n }\n getPaint() {\n return this.mPaint;\n }\n getWidth() {\n return this.mWidth;\n }\n getEllipsizedWidth() {\n return this.mWidth;\n }\n increaseWidthTo(wid) {\n if (wid < this.mWidth) {\n throw Error(`new RuntimeException(\"attempted to reduce Layout width\")`);\n }\n this.mWidth = wid;\n }\n getHeight() {\n return this.getLineTop(this.getLineCount());\n }\n getAlignment() {\n return this.mAlignment;\n }\n getSpacingMultiplier() {\n return this.mSpacingMult;\n }\n getSpacingAdd() {\n return this.mSpacingAdd;\n }\n getTextDirectionHeuristic() {\n return this.mTextDir;\n }\n getLineBounds(line, bounds) {\n if (bounds != null) {\n bounds.left = 0;\n bounds.top = this.getLineTop(line);\n bounds.right = this.mWidth;\n bounds.bottom = this.getLineTop(line + 1);\n }\n return this.getLineBaseline(line);\n }\n isLevelBoundary(offset) {\n let line = this.getLineForOffset(offset);\n let dirs = this.getLineDirections(line);\n if (dirs == Layout.DIRS_ALL_LEFT_TO_RIGHT || dirs == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return false;\n }\n let runs = dirs.mDirections;\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n if (offset == lineStart || offset == lineEnd) {\n let paraLevel = this.getParagraphDirection(line) == 1 ? 0 : 1;\n let runIndex = offset == lineStart ? 0 : runs.length - 2;\n return ((runs[runIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK) != paraLevel;\n }\n offset -= lineStart;\n for (let i = 0; i < runs.length; i += 2) {\n if (offset == runs[i]) {\n return true;\n }\n }\n return false;\n }\n isRtlCharAt(offset) {\n let line = this.getLineForOffset(offset);\n let dirs = this.getLineDirections(line);\n if (dirs == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n return false;\n }\n if (dirs == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return true;\n }\n let runs = dirs.mDirections;\n let lineStart = this.getLineStart(line);\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + (runs[i] & Layout.RUN_LENGTH_MASK);\n if (offset >= start) {\n let level = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n return ((level & 1) != 0);\n }\n }\n return false;\n }\n primaryIsTrailingPrevious(offset) {\n let line = this.getLineForOffset(offset);\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let runs = this.getLineDirections(line).mDirections;\n let levelAt = -1;\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + runs[i];\n let limit = start + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (limit > lineEnd) {\n limit = lineEnd;\n }\n if (offset >= start && offset < limit) {\n if (offset > start) {\n return false;\n }\n levelAt = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n break;\n }\n }\n if (levelAt == -1) {\n levelAt = this.getParagraphDirection(line) == 1 ? 0 : 1;\n }\n let levelBefore = -1;\n if (offset == lineStart) {\n levelBefore = this.getParagraphDirection(line) == 1 ? 0 : 1;\n }\n else {\n offset -= 1;\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + runs[i];\n let limit = start + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (limit > lineEnd) {\n limit = lineEnd;\n }\n if (offset >= start && offset < limit) {\n levelBefore = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n break;\n }\n }\n }\n return levelBefore < levelAt;\n }\n getPrimaryHorizontal(offset, clamped = false) {\n let trailing = this.primaryIsTrailingPrevious(offset);\n return this.getHorizontal(offset, trailing, clamped);\n }\n getSecondaryHorizontal(offset, clamped = false) {\n let trailing = this.primaryIsTrailingPrevious(offset);\n return this.getHorizontal(offset, !trailing, clamped);\n }\n getHorizontal(offset, trailing, clamped) {\n let line = this.getLineForOffset(offset);\n return this.getHorizontal_4(offset, trailing, line, clamped);\n }\n getHorizontal_4(offset, trailing, line, clamped) {\n let start = this.getLineStart(line);\n let end = this.getLineEnd(line);\n let dir = this.getParagraphDirection(line);\n let hasTabOrEmoji = this.getLineContainsTab(line);\n let directions = this.getLineDirections(line);\n let tabStops = null;\n if (hasTabOrEmoji && Spanned.isImplements(this.mText)) {\n let tabs = Layout.getParagraphSpans(this.mText, start, end, TabStopSpan.type);\n if (tabs.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabs);\n }\n }\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabOrEmoji, tabStops);\n let wid = tl.measure(offset - start, trailing, null);\n TextLine.recycle(tl);\n if (clamped && wid > this.mWidth) {\n wid = this.mWidth;\n }\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n return this.getLineStartPos(line, left, right) + wid;\n }\n getLineLeft(line) {\n let dir = this.getParagraphDirection(line);\n let align = this.getParagraphAlignment(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n return 0;\n }\n else if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.getParagraphRight(line) - this.getLineMax(line);\n else\n return 0;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n return this.mWidth - this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return 0;\n else\n return this.mWidth - this.getLineMax(line);\n }\n else {\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n let max = (Math.floor(this.getLineMax(line))) & ~1;\n return left + ((right - left) - max) / 2;\n }\n }\n getLineRight(line) {\n let dir = this.getParagraphDirection(line);\n let align = this.getParagraphAlignment(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n return this.getParagraphLeft(line) + this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.mWidth;\n else\n return this.getParagraphLeft(line) + this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n return this.mWidth;\n }\n else if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.getLineMax(line);\n else\n return this.mWidth;\n }\n else {\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n let max = (Math.floor(this.getLineMax(line))) & ~1;\n return right - ((right - left) - max) / 2;\n }\n }\n getLineMax(line) {\n let margin = this.getParagraphLeadingMargin(line);\n let signedExtent = this.getLineExtent(line, false);\n return margin + signedExtent >= 0 ? signedExtent : -signedExtent;\n }\n getLineWidth(line) {\n let margin = this.getParagraphLeadingMargin(line);\n let signedExtent = this.getLineExtent(line, true);\n return margin + signedExtent >= 0 ? signedExtent : -signedExtent;\n }\n getLineExtent(...args) {\n if (args.length === 2)\n return this.getLineExtent_2(...args);\n if (args.length === 3)\n return this.getLineExtent_3(...args);\n }\n getLineExtent_2(line, full) {\n let start = this.getLineStart(line);\n let end = full ? this.getLineEnd(line) : this.getLineVisibleEnd(line);\n let hasTabsOrEmoji = this.getLineContainsTab(line);\n let tabStops = null;\n if (hasTabsOrEmoji && Spanned.isImplements(this.mText)) {\n let tabs = Layout.getParagraphSpans(this.mText, start, end, TabStopSpan.type);\n if (tabs.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabs);\n }\n }\n let directions = this.getLineDirections(line);\n if (directions == null) {\n return 0;\n }\n let dir = this.getParagraphDirection(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabsOrEmoji, tabStops);\n let width = tl.metrics(null);\n TextLine.recycle(tl);\n return width;\n }\n getLineExtent_3(line, tabStops, full) {\n let start = this.getLineStart(line);\n let end = full ? this.getLineEnd(line) : this.getLineVisibleEnd(line);\n let hasTabsOrEmoji = this.getLineContainsTab(line);\n let directions = this.getLineDirections(line);\n let dir = this.getParagraphDirection(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabsOrEmoji, tabStops);\n let width = tl.metrics(null);\n TextLine.recycle(tl);\n return width;\n }\n getLineForVertical(vertical) {\n let high = this.getLineCount(), low = -1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n if (this.getLineTop(guess) > vertical)\n high = guess;\n else\n low = guess;\n }\n if (low < 0)\n return 0;\n else\n return low;\n }\n getLineForOffset(offset) {\n let high = this.getLineCount(), low = -1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n if (this.getLineStart(guess) > offset)\n high = guess;\n else\n low = guess;\n }\n if (low < 0)\n return 0;\n else\n return low;\n }\n getOffsetForHorizontal(line, horiz) {\n let max = this.getLineEnd(line) - 1;\n let min = this.getLineStart(line);\n let dirs = this.getLineDirections(line);\n if (line == this.getLineCount() - 1)\n max++;\n let best = min;\n let bestdist = Math.abs(this.getPrimaryHorizontal(best) - horiz);\n for (let i = 0; i < dirs.mDirections.length; i += 2) {\n let here = min + dirs.mDirections[i];\n let there = here + (dirs.mDirections[i + 1] & Layout.RUN_LENGTH_MASK);\n let swap = (dirs.mDirections[i + 1] & Layout.RUN_RTL_FLAG) != 0 ? -1 : 1;\n if (there > max)\n there = max;\n let high = there - 1 + 1, low = here + 1 - 1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n let adguess = this.getOffsetAtStartOf(guess);\n if (this.getPrimaryHorizontal(adguess) * swap >= horiz * swap)\n high = guess;\n else\n low = guess;\n }\n if (low < here + 1)\n low = here + 1;\n if (low < there) {\n low = this.getOffsetAtStartOf(low);\n let dist = Math.abs(this.getPrimaryHorizontal(low) - horiz);\n let aft = TextUtils.getOffsetAfter(this.mText, low);\n if (aft < there) {\n let other = Math.abs(this.getPrimaryHorizontal(aft) - horiz);\n if (other < dist) {\n dist = other;\n low = aft;\n }\n }\n if (dist < bestdist) {\n bestdist = dist;\n best = low;\n }\n }\n let dist = Math.abs(this.getPrimaryHorizontal(here) - horiz);\n if (dist < bestdist) {\n bestdist = dist;\n best = here;\n }\n }\n let dist = Math.abs(this.getPrimaryHorizontal(max) - horiz);\n if (dist <= bestdist) {\n bestdist = dist;\n best = max;\n }\n return best;\n }\n getLineEnd(line) {\n return this.getLineStart(line + 1);\n }\n getLineVisibleEnd(line, start = this.getLineStart(line), end = this.getLineStart(line + 1)) {\n let text = this.mText;\n let ch;\n if (line == this.getLineCount() - 1) {\n return end;\n }\n for (; end > start; end--) {\n ch = text.charAt(end - 1);\n if (ch == '\\n') {\n return end - 1;\n }\n if (ch != ' ' && ch != '\\t') {\n break;\n }\n }\n return end;\n }\n getLineBottom(line) {\n return this.getLineTop(line + 1);\n }\n getLineBaseline(line) {\n return this.getLineTop(line + 1) - this.getLineDescent(line);\n }\n getLineAscent(line) {\n return this.getLineTop(line) - (this.getLineTop(line + 1) - this.getLineDescent(line));\n }\n getOffsetToLeftOf(offset) {\n return this.getOffsetToLeftRightOf(offset, true);\n }\n getOffsetToRightOf(offset) {\n return this.getOffsetToLeftRightOf(offset, false);\n }\n getOffsetToLeftRightOf(caret, toLeft) {\n let line = this.getLineForOffset(caret);\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let lineDir = this.getParagraphDirection(line);\n let lineChanged = false;\n let advance = toLeft == (lineDir == Layout.DIR_RIGHT_TO_LEFT);\n if (advance) {\n if (caret == lineEnd) {\n if (line < this.getLineCount() - 1) {\n lineChanged = true;\n ++line;\n }\n else {\n return caret;\n }\n }\n }\n else {\n if (caret == lineStart) {\n if (line > 0) {\n lineChanged = true;\n --line;\n }\n else {\n return caret;\n }\n }\n }\n if (lineChanged) {\n lineStart = this.getLineStart(line);\n lineEnd = this.getLineEnd(line);\n let newDir = this.getParagraphDirection(line);\n if (newDir != lineDir) {\n toLeft = !toLeft;\n lineDir = newDir;\n }\n }\n let directions = this.getLineDirections(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, lineStart, lineEnd, lineDir, directions, false, null);\n caret = lineStart + tl.getOffsetToLeftRightOf(caret - lineStart, toLeft);\n tl = TextLine.recycle(tl);\n return caret;\n }\n getOffsetAtStartOf(offset) {\n if (offset == 0)\n return 0;\n let text = this.mText;\n let c = text.codePointAt(offset);\n let questionMark = '?'.codePointAt(0);\n if (c >= questionMark && c <= questionMark) {\n let c1 = text.codePointAt(offset - 1);\n if (c1 >= questionMark && c1 <= questionMark)\n offset -= 1;\n }\n if (this.mSpannedText) {\n let spans = text.getSpans(offset, offset, ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = start;\n }\n }\n return offset;\n }\n shouldClampCursor(line) {\n switch (this.getParagraphAlignment(line)) {\n case Layout.Alignment.ALIGN_LEFT:\n return true;\n case Layout.Alignment.ALIGN_NORMAL:\n return this.getParagraphDirection(line) > 0;\n default:\n return false;\n }\n }\n getCursorPath(point, dest, editingBuffer) {\n dest.reset();\n }\n addSelection(line, start, end, top, bottom, dest) {\n }\n getSelectionPath(start, end, dest) {\n dest.reset();\n }\n getParagraphAlignment(line) {\n let align = this.mAlignment;\n return align;\n }\n getParagraphLeft(line) {\n let left = 0;\n let dir = this.getParagraphDirection(line);\n if (dir == Layout.DIR_RIGHT_TO_LEFT || !this.mSpannedText) {\n return left;\n }\n return this.getParagraphLeadingMargin(line);\n }\n getParagraphRight(line) {\n let right = this.mWidth;\n let dir = this.getParagraphDirection(line);\n if (dir == Layout.DIR_LEFT_TO_RIGHT || !this.mSpannedText) {\n return right;\n }\n return right - this.getParagraphLeadingMargin(line);\n }\n getParagraphLeadingMargin(line) {\n if (!this.mSpannedText) {\n return 0;\n }\n let spanned = this.mText;\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let spanEnd = spanned.nextSpanTransition(lineStart, lineEnd, LeadingMarginSpan.type);\n let spans = Layout.getParagraphSpans(spanned, lineStart, spanEnd, LeadingMarginSpan.type);\n if (spans.length == 0) {\n return 0;\n }\n let margin = 0;\n let isFirstParaLine = lineStart == 0 || spanned.charAt(lineStart - 1) == '\\n';\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n let useFirstLineMargin = isFirstParaLine;\n if (LeadingMarginSpan2.isImpl(span)) {\n let spStart = spanned.getSpanStart(span);\n let spanLine = this.getLineForOffset(spStart);\n let count = span.getLeadingMarginLineCount();\n useFirstLineMargin = line < spanLine + count;\n }\n margin += span.getLeadingMargin(useFirstLineMargin);\n }\n return margin;\n }\n static measurePara(paint, text, start, end) {\n let mt = MeasuredText.obtain();\n let tl = TextLine.obtain();\n try {\n mt.setPara(text, start, end, TextDirectionHeuristics.LTR);\n let directions;\n let dir;\n directions = Layout.DIRS_ALL_LEFT_TO_RIGHT;\n dir = Layout.DIR_LEFT_TO_RIGHT;\n let chars = mt.mChars;\n let len = mt.mLen;\n let hasTabs = false;\n let tabStops = null;\n for (let i = 0; i < len; ++i) {\n if (chars[i] == '\\t') {\n hasTabs = true;\n if (Spanned.isImplements(text)) {\n let spanned = text;\n let spanEnd = spanned.nextSpanTransition(start, end, TabStopSpan.type);\n let spans = Layout.getParagraphSpans(spanned, start, spanEnd, TabStopSpan.type);\n if (spans.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, spans);\n }\n }\n break;\n }\n }\n tl.set(paint, text, start, end, dir, directions, hasTabs, tabStops);\n return tl.metrics(null);\n }\n finally {\n TextLine.recycle(tl);\n MeasuredText.recycle(mt);\n }\n }\n static nextTab(text, start, end, h, tabs) {\n let nh = Float.MAX_VALUE;\n let alltabs = false;\n if (Spanned.isImplements(text)) {\n if (tabs == null) {\n tabs = Layout.getParagraphSpans(text, start, end, TabStopSpan.type);\n alltabs = true;\n }\n for (let i = 0; i < tabs.length; i++) {\n if (!alltabs) {\n if (!(TabStopSpan.isImpl(tabs[i])))\n continue;\n }\n let where = tabs[i].getTabStop();\n if (where < nh && where > h)\n nh = where;\n }\n if (nh != Float.MAX_VALUE)\n return nh;\n }\n return (Math.floor(((h + Layout.TAB_INCREMENT) / Layout.TAB_INCREMENT))) * Layout.TAB_INCREMENT;\n }\n isSpanned() {\n return this.mSpannedText;\n }\n static getParagraphSpans(text, start, end, type) {\n if (start == end && start > 0) {\n return [];\n }\n return text.getSpans(start, end, type);\n }\n getEllipsisChar(method) {\n return (method == TextUtils.TruncateAt.END_SMALL) ? Layout.ELLIPSIS_TWO_DOTS[0] : Layout.ELLIPSIS_NORMAL[0];\n }\n ellipsize(start, end, line, dest, destoff, method) {\n let ellipsisCount = this.getEllipsisCount(line);\n if (ellipsisCount == 0) {\n return;\n }\n let ellipsisStart = this.getEllipsisStart(line);\n let linestart = this.getLineStart(line);\n for (let i = ellipsisStart; i < ellipsisStart + ellipsisCount; i++) {\n let c;\n if (i == ellipsisStart) {\n c = this.getEllipsisChar(method);\n }\n else {\n c = String.fromCharCode(20);\n }\n let a = i + linestart;\n if (a >= start && a < end) {\n dest[destoff + a - start] = c;\n }\n }\n }\n }\n Layout.NO_PARA_SPANS = [];\n Layout.sTempRect = new Rect();\n Layout.DIR_LEFT_TO_RIGHT = 1;\n Layout.DIR_RIGHT_TO_LEFT = -1;\n Layout.DIR_REQUEST_LTR = 1;\n Layout.DIR_REQUEST_RTL = -1;\n Layout.DIR_REQUEST_DEFAULT_LTR = 2;\n Layout.DIR_REQUEST_DEFAULT_RTL = -2;\n Layout.RUN_LENGTH_MASK = 0x03ffffff;\n Layout.RUN_LEVEL_SHIFT = 26;\n Layout.RUN_LEVEL_MASK = 0x3f;\n Layout.RUN_RTL_FLAG = 1 << Layout.RUN_LEVEL_SHIFT;\n Layout.TAB_INCREMENT = 20;\n Layout.ELLIPSIS_NORMAL = ['…'];\n Layout.ELLIPSIS_TWO_DOTS = ['‥'];\n text_5.Layout = Layout;\n (function (Layout) {\n class TabStops {\n constructor(increment, spans) {\n this.mNumStops = 0;\n this.mIncrement = 0;\n this.reset(increment, spans);\n }\n reset(increment, spans) {\n this.mIncrement = increment;\n let ns = 0;\n if (spans != null) {\n let stops = this.mStops;\n for (let o of spans) {\n if (TabStopSpan.isImpl(o)) {\n if (stops == null) {\n stops = androidui.util.ArrayCreator.newNumberArray(10);\n }\n else if (ns == stops.length) {\n let nstops = androidui.util.ArrayCreator.newNumberArray(ns * 2);\n for (let i = 0; i < ns; ++i) {\n nstops[i] = stops[i];\n }\n stops = nstops;\n }\n stops[ns++] = o.getTabStop();\n }\n }\n if (ns > 1) {\n Arrays.sort(stops, 0, ns);\n }\n if (stops != this.mStops) {\n this.mStops = stops;\n }\n }\n this.mNumStops = ns;\n }\n nextTab(h) {\n let ns = this.mNumStops;\n if (ns > 0) {\n let stops = this.mStops;\n for (let i = 0; i < ns; ++i) {\n let stop = stops[i];\n if (stop > h) {\n return stop;\n }\n }\n }\n return TabStops.nextDefaultStop(h, this.mIncrement);\n }\n static nextDefaultStop(h, inc) {\n return (Math.floor(((h + inc) / inc))) * inc;\n }\n }\n Layout.TabStops = TabStops;\n class Directions {\n constructor(dirs) {\n this.mDirections = dirs;\n }\n }\n Layout.Directions = Directions;\n class Ellipsizer extends String {\n constructor(s) {\n super(s);\n this.mWidth = 0;\n this.mText = s;\n }\n toString() {\n let line1 = this.mLayout.getLineForOffset(0);\n let line2 = this.mLayout.getLineForOffset(this.mText.length);\n let dest = this.mText.split('');\n for (let i = line1; i <= line2; i++) {\n this.mLayout.ellipsize(0, this.mText.length, i, dest, 0, this.mMethod);\n }\n return dest.join('');\n }\n }\n Layout.Ellipsizer = Ellipsizer;\n class SpannedEllipsizer extends Layout.Ellipsizer {\n constructor(display) {\n super(display);\n this.mSpanned = display;\n }\n getSpans(start, end, type) {\n return this.mSpanned.getSpans(start, end, type);\n }\n getSpanStart(tag) {\n return this.mSpanned.getSpanStart(tag);\n }\n getSpanEnd(tag) {\n return this.mSpanned.getSpanEnd(tag);\n }\n getSpanFlags(tag) {\n return this.mSpanned.getSpanFlags(tag);\n }\n nextSpanTransition(start, limit, type) {\n return this.mSpanned.nextSpanTransition(start, limit, type);\n }\n }\n Layout.SpannedEllipsizer = SpannedEllipsizer;\n (function (Alignment) {\n Alignment[Alignment[\"ALIGN_NORMAL\"] = 0] = \"ALIGN_NORMAL\";\n Alignment[Alignment[\"ALIGN_OPPOSITE\"] = 1] = \"ALIGN_OPPOSITE\";\n Alignment[Alignment[\"ALIGN_CENTER\"] = 2] = \"ALIGN_CENTER\";\n Alignment[Alignment[\"ALIGN_LEFT\"] = 3] = \"ALIGN_LEFT\";\n Alignment[Alignment[\"ALIGN_RIGHT\"] = 4] = \"ALIGN_RIGHT\";\n })(Layout.Alignment || (Layout.Alignment = {}));\n var Alignment = Layout.Alignment;\n })(Layout = text_5.Layout || (text_5.Layout = {}));\n Layout.DIRS_ALL_LEFT_TO_RIGHT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK]);\n Layout.DIRS_ALL_RIGHT_TO_LEFT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK | Layout.RUN_RTL_FLAG]);\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_6) {\n var Canvas = android.graphics.Canvas;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var Log = android.util.Log;\n var Spanned = android.text.Spanned;\n var TextPaint = android.text.TextPaint;\n class MeasuredText {\n constructor() {\n this.mTextStart = 0;\n this.mDir = 0;\n this.mLen = 0;\n this.mPos = 0;\n this.mWorkPaint = new TextPaint();\n }\n static obtain() {\n let mt;\n {\n for (let i = MeasuredText.sCached.length; --i >= 0;) {\n if (MeasuredText.sCached[i] != null) {\n mt = MeasuredText.sCached[i];\n MeasuredText.sCached[i] = null;\n return mt;\n }\n }\n }\n mt = new MeasuredText();\n if (MeasuredText.localLOGV) {\n Log.v(\"MEAS\", \"new: \" + mt);\n }\n return mt;\n }\n static recycle(mt) {\n mt.mText = null;\n if (mt.mLen < 1000) {\n {\n for (let i = 0; i < MeasuredText.sCached.length; ++i) {\n if (MeasuredText.sCached[i] == null) {\n MeasuredText.sCached[i] = mt;\n mt.mText = null;\n break;\n }\n }\n }\n }\n return null;\n }\n setPos(pos) {\n this.mPos = pos - this.mTextStart;\n }\n setPara(text, start, end, textDir) {\n this.mText = text;\n this.mTextStart = start;\n let len = end - start;\n this.mLen = len;\n this.mPos = 0;\n if (this.mWidths == null || this.mWidths.length < len) {\n this.mWidths = androidui.util.ArrayCreator.newNumberArray(len);\n }\n this.mChars = text.toString().substring(start, end);\n if (Spanned.isImplements(text)) {\n let spanned = text;\n let spans = spanned.getSpans(start, end, ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let startInPara = spanned.getSpanStart(spans[i]) - start;\n let endInPara = spanned.getSpanEnd(spans[i]) - start;\n if (startInPara < 0)\n startInPara = 0;\n if (endInPara > len)\n endInPara = len;\n for (let j = startInPara; j < endInPara; j++) {\n this.mChars[j] = '';\n }\n }\n }\n this.mDir = android.text.Layout.DIR_LEFT_TO_RIGHT;\n this.mEasy = true;\n }\n addStyleRun(...args) {\n if (args.length === 3)\n return this.addStyleRun_3(...args);\n if (args.length === 4)\n return this.addStyleRun_4(...args);\n }\n addStyleRun_3(paint, len, fm) {\n if (fm != null) {\n paint.getFontMetricsInt(fm);\n }\n let p = this.mPos;\n this.mPos = p + len;\n if (this.mEasy) {\n let flags = this.mDir == android.text.Layout.DIR_LEFT_TO_RIGHT ? Canvas.DIRECTION_LTR : Canvas.DIRECTION_RTL;\n return paint.getTextRunAdvances_count(this.mChars, p, len, p, len, flags, this.mWidths, p);\n }\n let totalAdvance = 0;\n let level = this.mLevels[p];\n for (let q = p, i = p + 1, e = p + len;; ++i) {\n if (i == e || this.mLevels[i] != level) {\n let flags = (level & 0x1) == 0 ? Canvas.DIRECTION_LTR : Canvas.DIRECTION_RTL;\n totalAdvance += paint.getTextRunAdvances_count(this.mChars, q, i - q, q, i - q, flags, this.mWidths, q);\n if (i == e) {\n break;\n }\n q = i;\n level = this.mLevels[i];\n }\n }\n return totalAdvance;\n }\n addStyleRun_4(paint, spans, len, fm) {\n let workPaint = this.mWorkPaint;\n workPaint.set(paint);\n workPaint.baselineShift = 0;\n let replacement = null;\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateMeasureState(workPaint);\n }\n }\n let wid;\n if (replacement == null) {\n wid = this.addStyleRun(workPaint, len, fm);\n }\n else {\n wid = replacement.getSize(workPaint, this.mText, this.mTextStart + this.mPos, this.mTextStart + this.mPos + len, fm);\n let w = this.mWidths;\n w[this.mPos] = wid;\n for (let i = this.mPos + 1, e = this.mPos + len; i < e; i++)\n w[i] = 0;\n this.mPos += len;\n }\n if (fm != null) {\n if (workPaint.baselineShift < 0) {\n fm.ascent += workPaint.baselineShift;\n fm.top += workPaint.baselineShift;\n }\n else {\n fm.descent += workPaint.baselineShift;\n fm.bottom += workPaint.baselineShift;\n }\n }\n return wid;\n }\n breakText(limit, forwards, width) {\n let w = this.mWidths;\n if (forwards) {\n let i = 0;\n while (i < limit) {\n width -= w[i];\n if (width < 0.0)\n break;\n i++;\n }\n while (i > 0 && this.mChars[i - 1] == ' ')\n i--;\n return i;\n }\n else {\n let i = limit - 1;\n while (i >= 0) {\n width -= w[i];\n if (width < 0.0)\n break;\n i--;\n }\n while (i < limit - 1 && this.mChars[i + 1] == ' ')\n i++;\n return limit - i - 1;\n }\n }\n measure(start, limit) {\n let width = 0;\n let w = this.mWidths;\n for (let i = start; i < limit; ++i) {\n width += w[i];\n }\n return width;\n }\n }\n MeasuredText.localLOGV = false;\n MeasuredText.sLock = new Array(0);\n MeasuredText.sCached = new Array(3);\n text_6.MeasuredText = MeasuredText;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_7) {\n var System = java.lang.System;\n var StringBuilder = java.lang.StringBuilder;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n class TextUtils {\n static isEmpty(str) {\n if (str == null || str.length == 0)\n return true;\n else\n return false;\n }\n static getOffsetBefore(text, offset) {\n if (offset == 0)\n return 0;\n if (offset == 1)\n return 0;\n let c = text.codePointAt(offset - 1);\n if (c >= '?'.codePointAt(0) && c <= '?'.codePointAt(0)) {\n let c1 = text.codePointAt(offset - 2);\n if (c1 >= '?'.codePointAt(0) && c1 <= '?'.codePointAt(0))\n offset -= 2;\n else\n offset -= 1;\n }\n else {\n offset -= 1;\n }\n if (Spanned.isImplements(text)) {\n let spans = text.getSpans(offset, offset, android.text.style.ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = start;\n }\n }\n return offset;\n }\n static getOffsetAfter(text, offset) {\n let len = text.length;\n if (offset == len)\n return len;\n if (offset == len - 1)\n return len;\n let c = text.codePointAt(offset);\n if (c >= '?'.codePointAt(0) && c <= '?'.codePointAt(0)) {\n let c1 = text.codePointAt(offset + 1);\n if (c1 >= '?'.codePointAt(0) && c1 <= '?'.codePointAt(0))\n offset += 2;\n else\n offset += 1;\n }\n else {\n offset += 1;\n }\n if (Spanned.isImplements(text)) {\n let spans = text.getSpans(offset, offset, android.text.style.ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = end;\n }\n }\n return offset;\n }\n static ellipsize(text, paint, avail, where, preserveLength = false, callback = null, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, ellipsis = undefined) {\n ellipsis = ellipsis || (where == TextUtils.TruncateAt.END_SMALL ? android.text.Layout.ELLIPSIS_TWO_DOTS[0] : android.text.Layout.ELLIPSIS_NORMAL[0]);\n let len = text.length;\n let mt = MeasuredText.obtain();\n try {\n let width = TextUtils.setPara(mt, paint, text, 0, text.length, textDir);\n if (width <= avail) {\n if (callback != null) {\n callback.ellipsized(0, 0);\n }\n return text;\n }\n let ellipsiswid = paint.measureText(ellipsis);\n avail -= ellipsiswid;\n let left = 0;\n let right = len;\n if (avail < 0) {\n }\n else if (where == TextUtils.TruncateAt.START) {\n right = len - mt.breakText(len, false, avail);\n }\n else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.END_SMALL) {\n left = mt.breakText(len, true, avail);\n }\n else {\n right = len - mt.breakText(len, false, avail / 2);\n avail -= mt.measure(right, len);\n left = mt.breakText(right, true, avail);\n }\n if (callback != null) {\n callback.ellipsized(left, right);\n }\n let buf = mt.mChars.split('');\n let sp = Spanned.isImplements(text) ? text : null;\n let remaining = len - (right - left);\n if (preserveLength) {\n if (remaining > 0) {\n buf[left++] = ellipsis.charAt(0);\n }\n for (let i = left; i < right; i++) {\n buf[i] = TextUtils.ZWNBS_CHAR;\n }\n let s = buf.join('');\n return s;\n }\n if (remaining == 0) {\n return \"\";\n }\n let sb = new StringBuilder(remaining + ellipsis.length());\n sb.append(buf.join('').substr(0, left));\n sb.append(ellipsis);\n sb.append(buf.join('').substr(right, len - right));\n return sb.toString();\n }\n finally {\n MeasuredText.recycle(mt);\n }\n }\n static setPara(mt, paint, text, start, end, textDir) {\n mt.setPara(text, start, end, textDir);\n let width;\n let sp = Spanned.isImplements(text) ? text : null;\n let len = end - start;\n if (sp == null) {\n width = mt.addStyleRun(paint, len, null);\n }\n else {\n width = 0;\n let spanEnd;\n for (let spanStart = 0; spanStart < len; spanStart = spanEnd) {\n spanEnd = sp.nextSpanTransition(spanStart, len, android.text.style.MetricAffectingSpan.type);\n let spans = sp.getSpans(spanStart, spanEnd, android.text.style.MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, sp, android.text.style.MetricAffectingSpan.type);\n width += mt.addStyleRun(paint, spans, spanEnd - spanStart, null);\n }\n }\n return width;\n }\n static removeEmptySpans(spans, spanned, klass) {\n let copy = null;\n let count = 0;\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n const start = spanned.getSpanStart(span);\n const end = spanned.getSpanEnd(span);\n if (start == end) {\n if (copy == null) {\n copy = new Array(spans.length - 1);\n System.arraycopy(spans, 0, copy, 0, i);\n count = i;\n }\n }\n else {\n if (copy != null) {\n copy[count] = span;\n count++;\n }\n }\n }\n if (copy != null) {\n let result = new Array(count);\n System.arraycopy(copy, 0, result, 0, count);\n return result;\n }\n else {\n return spans;\n }\n }\n static packRangeInLong(start, end) {\n return [start, end];\n }\n static unpackRangeStartFromLong(range) {\n return range[0] || 0;\n }\n static unpackRangeEndFromLong(range) {\n return range[1] || 0;\n }\n }\n TextUtils.ALIGNMENT_SPAN = 1;\n TextUtils.FIRST_SPAN = TextUtils.ALIGNMENT_SPAN;\n TextUtils.FOREGROUND_COLOR_SPAN = 2;\n TextUtils.RELATIVE_SIZE_SPAN = 3;\n TextUtils.SCALE_X_SPAN = 4;\n TextUtils.STRIKETHROUGH_SPAN = 5;\n TextUtils.UNDERLINE_SPAN = 6;\n TextUtils.STYLE_SPAN = 7;\n TextUtils.BULLET_SPAN = 8;\n TextUtils.QUOTE_SPAN = 9;\n TextUtils.LEADING_MARGIN_SPAN = 10;\n TextUtils.URL_SPAN = 11;\n TextUtils.BACKGROUND_COLOR_SPAN = 12;\n TextUtils.TYPEFACE_SPAN = 13;\n TextUtils.SUPERSCRIPT_SPAN = 14;\n TextUtils.SUBSCRIPT_SPAN = 15;\n TextUtils.ABSOLUTE_SIZE_SPAN = 16;\n TextUtils.TEXT_APPEARANCE_SPAN = 17;\n TextUtils.ANNOTATION = 18;\n TextUtils.SUGGESTION_SPAN = 19;\n TextUtils.SPELL_CHECK_SPAN = 20;\n TextUtils.SUGGESTION_RANGE_SPAN = 21;\n TextUtils.EASY_EDIT_SPAN = 22;\n TextUtils.LOCALE_SPAN = 23;\n TextUtils.LAST_SPAN = TextUtils.LOCALE_SPAN;\n TextUtils.EMPTY_STRING_ARRAY = [];\n TextUtils.ZWNBS_CHAR = String.fromCodePoint(20);\n TextUtils.ARAB_SCRIPT_SUBTAG = \"Arab\";\n TextUtils.HEBR_SCRIPT_SUBTAG = \"Hebr\";\n text_7.TextUtils = TextUtils;\n (function (TextUtils) {\n (function (TruncateAt) {\n TruncateAt[TruncateAt[\"START\"] = 0] = \"START\";\n TruncateAt[TruncateAt[\"MIDDLE\"] = 1] = \"MIDDLE\";\n TruncateAt[TruncateAt[\"END\"] = 2] = \"END\";\n TruncateAt[TruncateAt[\"MARQUEE\"] = 3] = \"MARQUEE\";\n TruncateAt[TruncateAt[\"END_SMALL\"] = 4] = \"END_SMALL\";\n })(TextUtils.TruncateAt || (TextUtils.TruncateAt = {}));\n var TruncateAt = TextUtils.TruncateAt;\n })(TextUtils = text_7.TextUtils || (text_7.TextUtils = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n class WindowManager {\n constructor(context) {\n this.mWindowsLayout = new WindowManager.Layout(context, this);\n let viewRootImpl = context.androidUI._viewRootImpl;\n let fakeAttachInfo = new View.AttachInfo(viewRootImpl, viewRootImpl.mHandler);\n fakeAttachInfo.mRootView = this.mWindowsLayout;\n this.mWindowsLayout.dispatchAttachedToWindow(fakeAttachInfo, 0);\n this.mWindowsLayout.mGroupFlags |= ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n this.mWindowsLayout.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n }\n getWindowsLayout() {\n return this.mWindowsLayout;\n }\n addWindow(window) {\n let wparams = window.getAttributes();\n if (!wparams) {\n wparams = new WindowManager.LayoutParams();\n }\n if (!(wparams instanceof WindowManager.LayoutParams)) {\n throw Error('can\\'t addWindow, params must be WindowManager.LayoutParams : ' + wparams);\n }\n window.setContainer(this);\n let decorView = window.getDecorView();\n let type = wparams.type;\n let lastFocusWindowView = this.mWindowsLayout.getTopFocusableWindowView();\n this.mWindowsLayout.addView(decorView, wparams);\n decorView.dispatchAttachedToWindow(window.mAttachInfo, 0);\n if (wparams.isFocusable()) {\n decorView.dispatchWindowFocusChanged(true);\n if (lastFocusWindowView && lastFocusWindowView.hasFocus()) {\n const focused = lastFocusWindowView.findFocus();\n lastFocusWindowView[WindowManager.FocusViewRemember] = focused;\n if (focused != null) {\n focused.clearFocusInternal(true, false);\n }\n lastFocusWindowView.dispatchWindowFocusChanged(false);\n decorView.addOnLayoutChangeListener({\n onLayoutChange(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) {\n decorView.removeOnLayoutChangeListener(this);\n const newWindowFocused = view.FocusFinder.getInstance().findNextFocus(decorView, null, View.FOCUS_DOWN);\n if (newWindowFocused != null) {\n newWindowFocused.requestFocus(View.FOCUS_DOWN);\n }\n }\n });\n }\n }\n if (decorView instanceof ViewGroup) {\n decorView.setMotionEventSplittingEnabled(wparams.isSplitTouch());\n }\n let enterAnimation = window.getContext().androidUI.mActivityThread.getOverrideEnterAnimation();\n if (enterAnimation === undefined)\n enterAnimation = wparams.enterAnimation;\n if (enterAnimation) {\n decorView.startAnimation(enterAnimation);\n }\n }\n updateWindowLayout(window, params) {\n if (!(params instanceof WindowManager.LayoutParams)) {\n throw Error('can\\'t updateWindowLayout, params must be WindowManager.LayoutParams');\n }\n window.getDecorView().setLayoutParams(params);\n }\n removeWindow(window) {\n let decor = window.getDecorView();\n if (decor.getParent() == null)\n return;\n if (decor.getParent() !== this.mWindowsLayout) {\n console.error('removeWindow fail, don\\'t has the window, decor belong to ', decor.getParent());\n return;\n }\n let wparams = decor.getLayoutParams();\n let exitAnimation = window.getContext().androidUI.mActivityThread.getOverrideExitAnimation();\n if (exitAnimation === undefined)\n exitAnimation = wparams.exitAnimation;\n if (exitAnimation) {\n let t = this;\n decor.startAnimation(exitAnimation);\n decor.drawAnimation(this.mWindowsLayout, android.os.SystemClock.uptimeMillis(), exitAnimation);\n this.mWindowsLayout.removeView(decor);\n }\n else {\n this.mWindowsLayout.removeView(decor);\n }\n if (wparams.isFocusable()) {\n let resumeWindowView = this.mWindowsLayout.getTopFocusableWindowView();\n if (resumeWindowView) {\n resumeWindowView.dispatchWindowFocusChanged(true);\n let resumeFocus = resumeWindowView[WindowManager.FocusViewRemember];\n if (resumeFocus) {\n resumeFocus.requestFocus(View.FOCUS_DOWN);\n }\n }\n }\n }\n }\n WindowManager.FocusViewRemember = Symbol();\n view.WindowManager = WindowManager;\n (function (WindowManager) {\n class Layout extends android.widget.FrameLayout {\n constructor(context, windowManager) {\n super(context);\n this.mWindowManager = windowManager;\n }\n getTopFocusableWindowView(findParent = true) {\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n let wparams = child.getLayoutParams();\n if (wparams.isFocusable()) {\n return child;\n }\n }\n if (findParent) {\n let decor = this.getParent();\n if (decor != null) {\n let windowLayout = decor.getParent();\n if (windowLayout instanceof Layout) {\n return windowLayout.getTopFocusableWindowView();\n }\n }\n }\n }\n dispatchKeyEvent(event) {\n let topFocusView = this.getTopFocusableWindowView(false);\n if (topFocusView && topFocusView.dispatchKeyEvent(event)) {\n return true;\n }\n return super.dispatchKeyEvent(event);\n }\n isTransformedTouchPointInView(x, y, child, outLocalPoint) {\n let wparams = child.getLayoutParams();\n if (wparams.isFocusable() && wparams.isTouchable()) {\n return true;\n }\n return false;\n }\n onChildVisibilityChanged(child, oldVisibility, newVisibility) {\n super.onChildVisibilityChanged(child, oldVisibility, newVisibility);\n let wparams = child.getLayoutParams();\n if (newVisibility === View.VISIBLE) {\n let resumeAnimation = child.getContext().androidUI.mActivityThread.getOverrideResumeAnimation();\n if (resumeAnimation === undefined)\n resumeAnimation = wparams.resumeAnimation;\n if (resumeAnimation) {\n child.startAnimation(resumeAnimation);\n }\n }\n else {\n let hideAnimation = child.getContext().androidUI.mActivityThread.getOverrideHideAnimation();\n if (hideAnimation === undefined)\n hideAnimation = wparams.hideAnimation;\n if (hideAnimation) {\n child.startAnimation(hideAnimation);\n child.drawAnimation(this, android.os.SystemClock.uptimeMillis(), hideAnimation);\n }\n }\n }\n tagName() {\n return 'windowsGroup';\n }\n }\n WindowManager.Layout = Layout;\n class LayoutParams extends android.widget.FrameLayout.LayoutParams {\n constructor(_type = LayoutParams.TYPE_APPLICATION) {\n super(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);\n this.x = 0;\n this.y = 0;\n this.type = 0;\n this.flags = 0;\n this.exitAnimation = android.R.anim.activity_close_exit;\n this.enterAnimation = android.R.anim.activity_open_enter;\n this.resumeAnimation = android.R.anim.activity_close_enter;\n this.hideAnimation = android.R.anim.activity_open_exit;\n this.dimAmount = 0;\n this.mTitle = \"\";\n this.type = _type;\n }\n setTitle(title) {\n if (null == title)\n title = \"\";\n this.mTitle = title;\n }\n getTitle() {\n return this.mTitle;\n }\n copyFrom(o) {\n let changes = 0;\n if (this.width != o.width) {\n this.width = o.width;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.height != o.height) {\n this.height = o.height;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.x != o.x) {\n this.x = o.x;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.y != o.y) {\n this.y = o.y;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.type != o.type) {\n this.type = o.type;\n changes |= LayoutParams.TYPE_CHANGED;\n }\n if (this.flags != o.flags) {\n const diff = this.flags ^ o.flags;\n this.flags = o.flags;\n changes |= LayoutParams.FLAGS_CHANGED;\n }\n if (this.gravity != o.gravity) {\n this.gravity = o.gravity;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.mTitle != (o.mTitle)) {\n this.mTitle = o.mTitle;\n changes |= LayoutParams.TITLE_CHANGED;\n }\n if (this.dimAmount != o.dimAmount) {\n this.dimAmount = o.dimAmount;\n changes |= LayoutParams.DIM_AMOUNT_CHANGED;\n }\n return changes;\n }\n get leftMargin() {\n if ((this.gravity & Gravity.LEFT) != 0)\n return super.leftMargin + this.x;\n return super.leftMargin;\n }\n get topMargin() {\n if ((this.gravity & Gravity.TOP) != 0)\n return super.topMargin + this.y;\n return super.topMargin;\n }\n get rightMargin() {\n if ((this.gravity & Gravity.RIGHT) != 0)\n return super.rightMargin + this.x;\n return super.rightMargin;\n }\n get bottomMargin() {\n if ((this.gravity & Gravity.BOTTOM) != 0)\n return super.bottomMargin + this.y;\n return super.bottomMargin;\n }\n set leftMargin(value) {\n super.leftMargin = value;\n }\n set topMargin(value) {\n super.topMargin = value;\n }\n set rightMargin(value) {\n super.rightMargin = value;\n }\n set bottomMargin(value) {\n super.bottomMargin = value;\n }\n isFocusable() {\n return (this.flags & LayoutParams.FLAG_NOT_FOCUSABLE) == 0;\n }\n isTouchable() {\n return (this.flags & LayoutParams.FLAG_NOT_TOUCHABLE) == 0;\n }\n isTouchModal() {\n return (this.flags & LayoutParams.FLAG_NOT_TOUCH_MODAL) == 0;\n }\n isFloating() {\n return (this.flags & LayoutParams.FLAG_FLOATING) != 0;\n }\n isSplitTouch() {\n return (this.flags & LayoutParams.FLAG_SPLIT_TOUCH) != 0;\n }\n isWatchTouchOutside() {\n return (this.flags & LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH) != 0;\n }\n }\n LayoutParams.FIRST_APPLICATION_WINDOW = 1;\n LayoutParams.TYPE_BASE_APPLICATION = 1;\n LayoutParams.TYPE_APPLICATION = 2;\n LayoutParams.TYPE_APPLICATION_STARTING = 3;\n LayoutParams.LAST_APPLICATION_WINDOW = 99;\n LayoutParams.FIRST_SUB_WINDOW = 1000;\n LayoutParams.TYPE_APPLICATION_PANEL = LayoutParams.FIRST_SUB_WINDOW;\n LayoutParams.TYPE_APPLICATION_MEDIA = LayoutParams.FIRST_SUB_WINDOW + 1;\n LayoutParams.TYPE_APPLICATION_SUB_PANEL = LayoutParams.FIRST_SUB_WINDOW + 2;\n LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG = LayoutParams.FIRST_SUB_WINDOW + 3;\n LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY = LayoutParams.FIRST_SUB_WINDOW + 4;\n LayoutParams.LAST_SUB_WINDOW = 1999;\n LayoutParams.FIRST_SYSTEM_WINDOW = 2000;\n LayoutParams.TYPE_STATUS_BAR = LayoutParams.FIRST_SYSTEM_WINDOW;\n LayoutParams.TYPE_SEARCH_BAR = LayoutParams.FIRST_SYSTEM_WINDOW + 1;\n LayoutParams.TYPE_PHONE = LayoutParams.FIRST_SYSTEM_WINDOW + 2;\n LayoutParams.TYPE_SYSTEM_ALERT = LayoutParams.FIRST_SYSTEM_WINDOW + 3;\n LayoutParams.TYPE_KEYGUARD = LayoutParams.FIRST_SYSTEM_WINDOW + 4;\n LayoutParams.TYPE_TOAST = LayoutParams.FIRST_SYSTEM_WINDOW + 5;\n LayoutParams.TYPE_SYSTEM_OVERLAY = LayoutParams.FIRST_SYSTEM_WINDOW + 6;\n LayoutParams.TYPE_PRIORITY_PHONE = LayoutParams.FIRST_SYSTEM_WINDOW + 7;\n LayoutParams.TYPE_SYSTEM_DIALOG = LayoutParams.FIRST_SYSTEM_WINDOW + 8;\n LayoutParams.LAST_SYSTEM_WINDOW = 2999;\n LayoutParams.FLAG_NOT_FOCUSABLE = 0x00000008;\n LayoutParams.FLAG_NOT_TOUCHABLE = 0x00000010;\n LayoutParams.FLAG_NOT_TOUCH_MODAL = 0x00000020;\n LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000;\n LayoutParams.FLAG_SPLIT_TOUCH = 0x00800000;\n LayoutParams.FLAG_FLOATING = 0x40000000;\n LayoutParams.LAYOUT_CHANGED = 1 << 0;\n LayoutParams.TYPE_CHANGED = 1 << 1;\n LayoutParams.FLAGS_CHANGED = 1 << 2;\n LayoutParams.FORMAT_CHANGED = 1 << 3;\n LayoutParams.ANIMATION_CHANGED = 1 << 4;\n LayoutParams.DIM_AMOUNT_CHANGED = 1 << 5;\n LayoutParams.TITLE_CHANGED = 1 << 6;\n LayoutParams.ALPHA_CHANGED = 1 << 7;\n WindowManager.LayoutParams = LayoutParams;\n })(WindowManager = view.WindowManager || (view.WindowManager = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class TranslateAnimation extends Animation {\n constructor(...args) {\n super();\n this.mFromXType = TranslateAnimation.ABSOLUTE;\n this.mToXType = TranslateAnimation.ABSOLUTE;\n this.mFromYType = TranslateAnimation.ABSOLUTE;\n this.mToYType = TranslateAnimation.ABSOLUTE;\n this.mFromXValue = 0.0;\n this.mToXValue = 0.0;\n this.mFromYValue = 0.0;\n this.mToYValue = 0.0;\n this.mFromXDelta = 0;\n this.mToXDelta = 0;\n this.mFromYDelta = 0;\n this.mToYDelta = 0;\n if (args.length === 4) {\n this.mFromXValue = args[0];\n this.mToXValue = args[1];\n this.mFromYValue = args[2];\n this.mToYValue = args[3];\n this.mFromXType = TranslateAnimation.ABSOLUTE;\n this.mToXType = TranslateAnimation.ABSOLUTE;\n this.mFromYType = TranslateAnimation.ABSOLUTE;\n this.mToYType = TranslateAnimation.ABSOLUTE;\n }\n else {\n this.mFromXType = args[0];\n this.mFromXValue = args[1];\n this.mToXType = args[2];\n this.mToXValue = args[3];\n this.mFromYType = args[4];\n this.mFromYValue = args[5];\n this.mToYType = args[6];\n this.mToYValue = args[7];\n }\n }\n applyTransformation(interpolatedTime, t) {\n let dx = this.mFromXDelta;\n let dy = this.mFromYDelta;\n if (this.mFromXDelta != this.mToXDelta) {\n dx = this.mFromXDelta + ((this.mToXDelta - this.mFromXDelta) * interpolatedTime);\n }\n if (this.mFromYDelta != this.mToYDelta) {\n dy = this.mFromYDelta + ((this.mToYDelta - this.mFromYDelta) * interpolatedTime);\n }\n t.getMatrix().setTranslate(dx, dy);\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mFromXDelta = this.resolveSize(this.mFromXType, this.mFromXValue, width, parentWidth);\n this.mToXDelta = this.resolveSize(this.mToXType, this.mToXValue, width, parentWidth);\n this.mFromYDelta = this.resolveSize(this.mFromYType, this.mFromYValue, height, parentHeight);\n this.mToYDelta = this.resolveSize(this.mToYType, this.mToYValue, height, parentHeight);\n }\n }\n animation.TranslateAnimation = TranslateAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class AlphaAnimation extends Animation {\n constructor(fromAlpha, toAlpha) {\n super();\n this.mFromAlpha = 0;\n this.mToAlpha = 0;\n this.mFromAlpha = fromAlpha;\n this.mToAlpha = toAlpha;\n }\n applyTransformation(interpolatedTime, t) {\n const alpha = this.mFromAlpha;\n t.setAlpha(alpha + ((this.mToAlpha - alpha) * interpolatedTime));\n }\n willChangeTransformationMatrix() {\n return false;\n }\n willChangeBounds() {\n return false;\n }\n hasAlpha() {\n return true;\n }\n }\n animation.AlphaAnimation = AlphaAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class ScaleAnimation extends Animation {\n constructor(fromX, toX, fromY, toY, pivotXType = ScaleAnimation.ABSOLUTE, pivotXValue = 0, pivotYType = ScaleAnimation.ABSOLUTE, pivotYValue = 0) {\n super();\n this.mFromX = 0;\n this.mToX = 0;\n this.mFromY = 0;\n this.mToY = 0;\n this.mFromXData = 0;\n this.mToXData = 0;\n this.mFromYData = 0;\n this.mToYData = 0;\n this.mPivotXType = ScaleAnimation.ABSOLUTE;\n this.mPivotYType = ScaleAnimation.ABSOLUTE;\n this.mPivotXValue = 0.0;\n this.mPivotYValue = 0.0;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mResources = null;\n this.mFromX = fromX;\n this.mToX = toX;\n this.mFromY = fromY;\n this.mToY = toY;\n this.mPivotXValue = pivotXValue;\n this.mPivotXType = pivotXType;\n this.mPivotYValue = pivotYValue;\n this.mPivotYType = pivotYType;\n this.initializePivotPoint();\n }\n initializePivotPoint() {\n if (this.mPivotXType == ScaleAnimation.ABSOLUTE) {\n this.mPivotX = this.mPivotXValue;\n }\n if (this.mPivotYType == ScaleAnimation.ABSOLUTE) {\n this.mPivotY = this.mPivotYValue;\n }\n }\n applyTransformation(interpolatedTime, t) {\n let sx = 1.0;\n let sy = 1.0;\n let scale = this.getScaleFactor();\n if (this.mFromX != 1.0 || this.mToX != 1.0) {\n sx = this.mFromX + ((this.mToX - this.mFromX) * interpolatedTime);\n }\n if (this.mFromY != 1.0 || this.mToY != 1.0) {\n sy = this.mFromY + ((this.mToY - this.mFromY) * interpolatedTime);\n }\n if (this.mPivotX == 0 && this.mPivotY == 0) {\n t.getMatrix().setScale(sx, sy);\n }\n else {\n t.getMatrix().setScale(sx, sy, scale * this.mPivotX, scale * this.mPivotY);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mPivotX = this.resolveSize(this.mPivotXType, this.mPivotXValue, width, parentWidth);\n this.mPivotY = this.resolveSize(this.mPivotYType, this.mPivotYValue, height, parentHeight);\n }\n }\n animation.ScaleAnimation = ScaleAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var ArrayList = java.util.ArrayList;\n var Long = java.lang.Long;\n var Animation = android.view.animation.Animation;\n var Transformation = android.view.animation.Transformation;\n class AnimationSet extends Animation {\n constructor(shareInterpolator = false) {\n super();\n this.mFlags = 0;\n this.mAnimations = new ArrayList();\n this.mTempTransformation = new Transformation();\n this.mLastEnd = 0;\n this.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator);\n this.init();\n }\n setFlag(mask, value) {\n if (value) {\n this.mFlags |= mask;\n }\n else {\n this.mFlags &= ~mask;\n }\n }\n init() {\n this.mStartTime = 0;\n }\n setFillAfter(fillAfter) {\n this.mFlags |= AnimationSet.PROPERTY_FILL_AFTER_MASK;\n super.setFillAfter(fillAfter);\n }\n setFillBefore(fillBefore) {\n this.mFlags |= AnimationSet.PROPERTY_FILL_BEFORE_MASK;\n super.setFillBefore(fillBefore);\n }\n setRepeatMode(repeatMode) {\n this.mFlags |= AnimationSet.PROPERTY_REPEAT_MODE_MASK;\n super.setRepeatMode(repeatMode);\n }\n setStartOffset(startOffset) {\n this.mFlags |= AnimationSet.PROPERTY_START_OFFSET_MASK;\n super.setStartOffset(startOffset);\n }\n hasAlpha() {\n if (this.mDirty) {\n this.mDirty = this.mHasAlpha = false;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n if (animations.get(i).hasAlpha()) {\n this.mHasAlpha = true;\n break;\n }\n }\n }\n return this.mHasAlpha;\n }\n setDuration(durationMillis) {\n this.mFlags |= AnimationSet.PROPERTY_DURATION_MASK;\n super.setDuration(durationMillis);\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n addAnimation(a) {\n this.mAnimations.add(a);\n let noMatrix = (this.mFlags & AnimationSet.PROPERTY_MORPH_MATRIX_MASK) == 0;\n if (noMatrix && a.willChangeTransformationMatrix()) {\n this.mFlags |= AnimationSet.PROPERTY_MORPH_MATRIX_MASK;\n }\n let changeBounds = (this.mFlags & AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK) == 0;\n if (changeBounds && a.willChangeBounds()) {\n this.mFlags |= AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK;\n }\n if ((this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK) {\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n else {\n if (this.mAnimations.size() == 1) {\n this.mDuration = a.getStartOffset() + a.getDuration();\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n else {\n this.mLastEnd = Math.max(this.mLastEnd, a.getStartOffset() + a.getDuration());\n this.mDuration = this.mLastEnd - this.mStartOffset;\n }\n }\n this.mDirty = true;\n }\n setStartTime(startTimeMillis) {\n super.setStartTime(startTimeMillis);\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n let a = animations.get(i);\n a.setStartTime(startTimeMillis);\n }\n }\n getStartTime() {\n let startTime = Long.MAX_VALUE;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n let a = animations.get(i);\n startTime = Math.min(startTime, a.getStartTime());\n }\n return startTime;\n }\n restrictDuration(durationMillis) {\n super.restrictDuration(durationMillis);\n const animations = this.mAnimations;\n let count = animations.size();\n for (let i = 0; i < count; i++) {\n animations.get(i).restrictDuration(durationMillis);\n }\n }\n getDuration() {\n const animations = this.mAnimations;\n const count = animations.size();\n let duration = 0;\n let durationSet = (this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK;\n if (durationSet) {\n duration = this.mDuration;\n }\n else {\n for (let i = 0; i < count; i++) {\n duration = Math.max(duration, animations.get(i).getDuration());\n }\n }\n return duration;\n }\n computeDurationHint() {\n let duration = 0;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = count - 1; i >= 0; --i) {\n const d = animations.get(i).computeDurationHint();\n if (d > duration)\n duration = d;\n }\n return duration;\n }\n initializeInvalidateRegion(left, top, right, bottom) {\n const region = this.mPreviousRegion;\n region.set(left, top, right, bottom);\n region.inset(-1.0, -1.0);\n if (this.mFillBefore) {\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n const temp = this.mTempTransformation;\n const previousTransformation = this.mPreviousTransformation;\n for (let i = count - 1; i >= 0; --i) {\n const a = animations.get(i);\n if (!a.isFillEnabled() || a.getFillBefore() || a.getStartOffset() == 0) {\n temp.clear();\n const interpolator = a.mInterpolator;\n a.applyTransformation(interpolator != null ? interpolator.getInterpolation(0.0) : 0.0, temp);\n previousTransformation.compose(temp);\n }\n }\n }\n }\n getTransformation(currentTime, t) {\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n const temp = this.mTempTransformation;\n let more = false;\n let started = false;\n let ended = true;\n t.clear();\n for (let i = count - 1; i >= 0; --i) {\n const a = animations.get(i);\n temp.clear();\n more = a.getTransformation(currentTime, temp, this.getScaleFactor()) || more;\n t.compose(temp);\n started = started || a.hasStarted();\n ended = a.hasEnded() && ended;\n }\n if (started && !this.mStarted) {\n if (this.mListener != null) {\n this.mListener.onAnimationStart(this);\n }\n this.mStarted = true;\n }\n if (ended != this.mEnded) {\n if (this.mListener != null) {\n this.mListener.onAnimationEnd(this);\n }\n this.mEnded = ended;\n }\n return more;\n }\n scaleCurrentDuration(scale) {\n const animations = this.mAnimations;\n let count = animations.size();\n for (let i = 0; i < count; i++) {\n animations.get(i).scaleCurrentDuration(scale);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n let durationSet = (this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK;\n let fillAfterSet = (this.mFlags & AnimationSet.PROPERTY_FILL_AFTER_MASK) == AnimationSet.PROPERTY_FILL_AFTER_MASK;\n let fillBeforeSet = (this.mFlags & AnimationSet.PROPERTY_FILL_BEFORE_MASK) == AnimationSet.PROPERTY_FILL_BEFORE_MASK;\n let repeatModeSet = (this.mFlags & AnimationSet.PROPERTY_REPEAT_MODE_MASK) == AnimationSet.PROPERTY_REPEAT_MODE_MASK;\n let shareInterpolator = (this.mFlags & AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK) == AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK;\n let startOffsetSet = (this.mFlags & AnimationSet.PROPERTY_START_OFFSET_MASK) == AnimationSet.PROPERTY_START_OFFSET_MASK;\n if (shareInterpolator) {\n this.ensureInterpolator();\n }\n const children = this.mAnimations;\n const count = children.size();\n const duration = this.mDuration;\n const fillAfter = this.mFillAfter;\n const fillBefore = this.mFillBefore;\n const repeatMode = this.mRepeatMode;\n const interpolator = this.mInterpolator;\n const startOffset = this.mStartOffset;\n let storedOffsets = this.mStoredOffsets;\n if (startOffsetSet) {\n if (storedOffsets == null || storedOffsets.length != count) {\n storedOffsets = this.mStoredOffsets = androidui.util.ArrayCreator.newNumberArray(count);\n }\n }\n else if (storedOffsets != null) {\n storedOffsets = this.mStoredOffsets = null;\n }\n for (let i = 0; i < count; i++) {\n let a = children.get(i);\n if (durationSet) {\n a.setDuration(duration);\n }\n if (fillAfterSet) {\n a.setFillAfter(fillAfter);\n }\n if (fillBeforeSet) {\n a.setFillBefore(fillBefore);\n }\n if (repeatModeSet) {\n a.setRepeatMode(repeatMode);\n }\n if (shareInterpolator) {\n a.setInterpolator(interpolator);\n }\n if (startOffsetSet) {\n let offset = a.getStartOffset();\n a.setStartOffset(offset + startOffset);\n storedOffsets[i] = offset;\n }\n a.initialize(width, height, parentWidth, parentHeight);\n }\n }\n reset() {\n super.reset();\n this.restoreChildrenStartOffset();\n }\n restoreChildrenStartOffset() {\n const offsets = this.mStoredOffsets;\n if (offsets == null)\n return;\n const children = this.mAnimations;\n const count = children.size();\n for (let i = 0; i < count; i++) {\n children.get(i).setStartOffset(offsets[i]);\n }\n }\n getAnimations() {\n return this.mAnimations;\n }\n willChangeTransformationMatrix() {\n return (this.mFlags & AnimationSet.PROPERTY_MORPH_MATRIX_MASK) == AnimationSet.PROPERTY_MORPH_MATRIX_MASK;\n }\n willChangeBounds() {\n return (this.mFlags & AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK) == AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK;\n }\n }\n AnimationSet.PROPERTY_FILL_AFTER_MASK = 0x1;\n AnimationSet.PROPERTY_FILL_BEFORE_MASK = 0x2;\n AnimationSet.PROPERTY_REPEAT_MODE_MASK = 0x4;\n AnimationSet.PROPERTY_START_OFFSET_MASK = 0x8;\n AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK = 0x10;\n AnimationSet.PROPERTY_DURATION_MASK = 0x20;\n AnimationSet.PROPERTY_MORPH_MATRIX_MASK = 0x40;\n AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK = 0x80;\n animation.AnimationSet = AnimationSet;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AccelerateInterpolator {\n constructor(factor = 1) {\n this.mFactor = factor;\n this.mDoubleFactor = factor * 2;\n }\n getInterpolation(input) {\n if (this.mFactor == 1.0) {\n return input * input;\n }\n else {\n return Math.pow(input, this.mDoubleFactor);\n }\n }\n }\n animation.AccelerateInterpolator = AccelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AnticipateInterpolator {\n constructor(tension = 2) {\n this.mTension = tension;\n }\n getInterpolation(t) {\n return t * t * ((this.mTension + 1) * t - this.mTension);\n }\n }\n animation.AnticipateInterpolator = AnticipateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AnticipateOvershootInterpolator {\n constructor(tension = 2, extraTension = 1.5) {\n this.mTension = tension * extraTension;\n }\n static a(t, s) {\n return t * t * ((s + 1) * t - s);\n }\n static o(t, s) {\n return t * t * ((s + 1) * t + s);\n }\n getInterpolation(t) {\n if (t < 0.5)\n return 0.5 * AnticipateOvershootInterpolator.a(t * 2.0, this.mTension);\n else\n return 0.5 * (AnticipateOvershootInterpolator.o(t * 2.0 - 2.0, this.mTension) + 2.0);\n }\n }\n animation.AnticipateOvershootInterpolator = AnticipateOvershootInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class BounceInterpolator {\n static bounce(t) {\n return t * t * 8.0;\n }\n getInterpolation(t) {\n t *= 1.1226;\n if (t < 0.3535)\n return BounceInterpolator.bounce(t);\n else if (t < 0.7408)\n return BounceInterpolator.bounce(t - 0.54719) + 0.7;\n else if (t < 0.9644)\n return BounceInterpolator.bounce(t - 0.8526) + 0.9;\n else\n return BounceInterpolator.bounce(t - 1.0435) + 0.95;\n }\n }\n animation.BounceInterpolator = BounceInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class CycleInterpolator {\n constructor(mCycles) {\n this.mCycles = mCycles;\n }\n getInterpolation(input) {\n return (Math.sin(2 * this.mCycles * Math.PI * input));\n }\n }\n animation.CycleInterpolator = CycleInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class OvershootInterpolator {\n constructor(tension = 2) {\n this.mTension = tension;\n }\n getInterpolation(t) {\n t -= 1.0;\n return t * t * ((this.mTension + 1) * t + this.mTension) + 1.0;\n }\n }\n animation.OvershootInterpolator = OvershootInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var AccelerateInterpolator = android.view.animation.AccelerateInterpolator;\n var AnticipateInterpolator = android.view.animation.AnticipateInterpolator;\n var AnticipateOvershootInterpolator = android.view.animation.AnticipateOvershootInterpolator;\n var BounceInterpolator = android.view.animation.BounceInterpolator;\n var CycleInterpolator = android.view.animation.CycleInterpolator;\n var DecelerateInterpolator = android.view.animation.DecelerateInterpolator;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var OvershootInterpolator = android.view.animation.OvershootInterpolator;\n class interpolator {\n }\n interpolator.accelerate_cubic = new AccelerateInterpolator(1.5);\n interpolator.accelerate_decelerate = new AccelerateDecelerateInterpolator();\n interpolator.accelerate_quad = new AccelerateInterpolator();\n interpolator.accelerate_quint = new AccelerateInterpolator(2.5);\n interpolator.anticipate_overshoot = new AnticipateOvershootInterpolator();\n interpolator.anticipate = new AnticipateInterpolator();\n interpolator.bounce = new BounceInterpolator();\n interpolator.cycle = new CycleInterpolator(1);\n interpolator.decelerate_cubic = new DecelerateInterpolator(1.5);\n interpolator.decelerate_quad = new DecelerateInterpolator();\n interpolator.decelerate_quint = new DecelerateInterpolator(2.5);\n interpolator.linear = new LinearInterpolator();\n interpolator.overshoot = new OvershootInterpolator();\n R.interpolator = interpolator;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var Animation = android.view.animation.Animation;\n var AlphaAnimation = android.view.animation.AlphaAnimation;\n var TranslateAnimation = android.view.animation.TranslateAnimation;\n var ScaleAnimation = android.view.animation.ScaleAnimation;\n var AnimationSet = android.view.animation.AnimationSet;\n class anim {\n static get activity_close_enter() {\n let alpha = new AlphaAnimation(1, 1);\n alpha.setDuration(300);\n alpha.setFillBefore(true);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n return alpha;\n }\n static get activity_close_exit() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(300);\n alpha.setFillBefore(true);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.8, 1, 0.8, Animation.RELATIVE_TO_PARENT, 0.5, Animation.RELATIVE_TO_PARENT, 0.5);\n scale.setDuration(300);\n scale.setFillBefore(true);\n scale.setFillEnabled(true);\n scale.setFillAfter(true);\n scale.setInterpolator(R.interpolator.decelerate_cubic);\n animSet.addAnimation(alpha);\n animSet.addAnimation(scale);\n return animSet;\n }\n static get activity_open_enter() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(300);\n alpha.setFillBefore(false);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.8, 1, 0.8, 1, Animation.RELATIVE_TO_PARENT, 0.5, Animation.RELATIVE_TO_PARENT, 0.5);\n scale.setDuration(300);\n scale.setFillBefore(false);\n scale.setFillEnabled(true);\n scale.setFillAfter(true);\n scale.setInterpolator(R.interpolator.decelerate_cubic);\n animSet.addAnimation(alpha);\n animSet.addAnimation(scale);\n return animSet;\n }\n static get activity_open_exit() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(300);\n alpha.setFillBefore(false);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_quint);\n return alpha;\n }\n static get activity_close_enter_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.25, Animation.RELATIVE_TO_PARENT, 0, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_close_exit_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_open_enter_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1, Animation.RELATIVE_TO_PARENT, 0, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_open_exit_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, -0.25, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get dialog_enter() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get dialog_exit() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get fade_in() {\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.decelerate_quad);\n return alpha;\n }\n static get fade_out() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(400);\n alpha.setInterpolator(R.interpolator.accelerate_quad);\n return alpha;\n }\n static get toast_enter() {\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.decelerate_quad);\n return alpha;\n }\n static get toast_exit() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.accelerate_quad);\n return alpha;\n }\n static get grow_fade_in() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get grow_fade_in_center() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get grow_fade_in_from_bottom() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 1);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out_center() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out_from_bottom() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 1);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n }\n R.anim = anim;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_6) {\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var WindowManager = android.view.WindowManager;\n var FrameLayout = android.widget.FrameLayout;\n class Window {\n constructor(context) {\n this.mIsActive = false;\n this.mCloseOnTouchOutside = false;\n this.mSetCloseOnTouchOutside = false;\n this.mWindowAttributes = new WindowManager.LayoutParams();\n this.mContext = context;\n this.initDecorView();\n this.initAttachInfo();\n this.getAttributes().setTitle(context.androidUI.appName);\n }\n initDecorView() {\n this.mDecor = new DecorView(this);\n this.mContentParent = new FrameLayout(this.mContext);\n this.mContentParent.setId(android.R.id.content);\n this.mDecor.addView(this.mContentParent, -1, -1);\n }\n initAttachInfo() {\n let viewRootImpl = this.mContext.androidUI._viewRootImpl;\n this.mAttachInfo = new View.AttachInfo(viewRootImpl, viewRootImpl.mHandler);\n this.mAttachInfo.mRootView = this.mDecor;\n this.mAttachInfo.mHasWindowFocus = true;\n }\n getContext() {\n return this.mContext;\n }\n setContainer(container) {\n this.mContainer = container;\n }\n getContainer() {\n return this.mContainer;\n }\n destroy() {\n this.mDestroyed = true;\n }\n isDestroyed() {\n return this.mDestroyed;\n }\n setChildWindowManager(wm) {\n if (this.mChildWindowManager) {\n this.mDecor.removeView(this.mChildWindowManager.getWindowsLayout());\n }\n this.mChildWindowManager = wm;\n }\n getChildWindowManager() {\n if (!this.mChildWindowManager) {\n this.mChildWindowManager = new WindowManager(this.mContext);\n this.mDecor.addView(this.mChildWindowManager.getWindowsLayout(), -1, -1);\n }\n return this.mChildWindowManager;\n }\n setCallback(callback) {\n this.mCallback = callback;\n }\n getCallback() {\n return this.mCallback;\n }\n setFloating(isFloating) {\n const attrs = this.getAttributes();\n if (isFloating === attrs.isFloating())\n return;\n if (isFloating)\n attrs.flags |= WindowManager.LayoutParams.FLAG_FLOATING;\n else\n attrs.flags &= ~WindowManager.LayoutParams.FLAG_FLOATING;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n isFloating() {\n return this.mWindowAttributes.isFloating();\n }\n setLayout(width, height) {\n const attrs = this.getAttributes();\n attrs.width = width;\n attrs.height = height;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setGravity(gravity) {\n const attrs = this.getAttributes();\n attrs.gravity = gravity;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setType(type) {\n const attrs = this.getAttributes();\n attrs.type = type;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setWindowAnimations(enterAnimation, exitAnimation, resumeAnimation = this.mWindowAttributes.resumeAnimation, hideAnimation = this.mWindowAttributes.hideAnimation) {\n const attrs = this.getAttributes();\n attrs.enterAnimation = enterAnimation;\n attrs.exitAnimation = exitAnimation;\n attrs.resumeAnimation = resumeAnimation;\n attrs.hideAnimation = hideAnimation;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n addFlags(flags) {\n this.setFlags(flags, flags);\n }\n clearFlags(flags) {\n this.setFlags(0, flags);\n }\n setFlags(flags, mask) {\n const attrs = this.getAttributes();\n attrs.flags = (attrs.flags & ~mask) | (flags & mask);\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setDimAmount(amount) {\n const attrs = this.getAttributes();\n attrs.dimAmount = amount;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setAttributes(a) {\n this.mWindowAttributes.copyFrom(a);\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(this.mWindowAttributes);\n }\n }\n getAttributes() {\n return this.mWindowAttributes;\n }\n setCloseOnTouchOutside(close) {\n this.mCloseOnTouchOutside = close;\n this.mSetCloseOnTouchOutside = true;\n }\n setCloseOnTouchOutsideIfNotSet(close) {\n if (!this.mSetCloseOnTouchOutside) {\n this.mCloseOnTouchOutside = close;\n this.mSetCloseOnTouchOutside = true;\n }\n }\n shouldCloseOnTouch(context, event) {\n if (this.mCloseOnTouchOutside && event.getAction() == MotionEvent.ACTION_DOWN && this.isOutOfBounds(context, event) && this.peekDecorView() != null) {\n return true;\n }\n return false;\n }\n isOutOfBounds(context, event) {\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n const slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();\n const decorView = this.getDecorView();\n return (x < -slop) || (y < -slop) || (x > (decorView.getWidth() + slop)) || (y > (decorView.getHeight() + slop));\n }\n makeActive() {\n if (this.mContainer != null) {\n if (this.mContainer.mActiveWindow != null) {\n this.mContainer.mActiveWindow.mIsActive = false;\n }\n this.mContainer.mActiveWindow = this;\n }\n this.mIsActive = true;\n this.onActive();\n }\n isActive() {\n return this.mIsActive;\n }\n findViewById(id) {\n return this.getDecorView().findViewById(id);\n }\n setContentView(view, params) {\n this.mContentParent.removeAllViews();\n this.addContentView(view, params);\n }\n addContentView(view, params) {\n if (params) {\n this.mContentParent.addView(view, params);\n }\n else {\n this.mContentParent.addView(view);\n }\n let cb = this.getCallback();\n if (cb != null && !this.isDestroyed()) {\n cb.onContentChanged();\n }\n }\n getContentParent() {\n return this.mContentParent;\n }\n getCurrentFocus() {\n return this.mDecor != null ? this.mDecor.findFocus() : null;\n }\n getLayoutInflater() {\n return this.mContext.getLayoutInflater();\n }\n setTitle(title) {\n this.mDecor.bindElement.setAttribute('title', title);\n this.getAttributes().setTitle(title);\n }\n setBackgroundDrawable(drawable) {\n if (this.mDecor != null) {\n this.mDecor.setBackground(drawable);\n }\n }\n setBackgroundColor(color) {\n if (this.mDecor != null) {\n this.mDecor.setBackgroundColor(color);\n }\n }\n takeKeyEvents(_get) {\n this.mDecor.setFocusable(_get);\n }\n superDispatchKeyEvent(event) {\n return this.mDecor.superDispatchKeyEvent(event);\n }\n superDispatchTouchEvent(event) {\n return this.mDecor.superDispatchTouchEvent(event);\n }\n superDispatchGenericMotionEvent(event) {\n return this.mDecor.superDispatchGenericMotionEvent(event);\n }\n getDecorView() {\n return this.mDecor;\n }\n peekDecorView() {\n return this.mDecor;\n }\n onActive() {\n }\n }\n view_6.Window = Window;\n class DecorView extends FrameLayout {\n constructor(window) {\n super(window.mContext);\n this._ignoreRequestLayoutInAnimation = true;\n this._pendingRequestLayoutOnAnimationEnd = false;\n this._ignoreInvalidateInAnimation = true;\n this._pendingInvalidateOnAnimationEnd = false;\n this.Window_this = window;\n this.bindElement.classList.add(window.mContext.constructor.name);\n this.setBackgroundColor(android.graphics.Color.WHITE);\n this.setIsRootNamespace(true);\n }\n invalidate(...args) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidate.call(this, ...args);\n }\n invalidateChild(child, dirty) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidateChild(child, dirty);\n }\n invalidateChildFast(child, dirty) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidateChildFast(child, dirty);\n }\n requestLayout() {\n if (this._ignoreRequestLayoutInAnimation && this.getAnimation()) {\n this._pendingRequestLayoutOnAnimationEnd = true;\n return null;\n }\n super.requestLayout();\n }\n onAnimationStart() {\n super.onAnimationStart();\n this.setDrawingCacheEnabled(true);\n this.buildDrawingCache(true);\n }\n onAnimationEnd() {\n super.onAnimationEnd();\n this.setDrawingCacheEnabled(false);\n if (this._pendingInvalidateOnAnimationEnd) {\n this._pendingInvalidateOnAnimationEnd = false;\n this.invalidate();\n }\n if (this._pendingRequestLayoutOnAnimationEnd) {\n this._pendingRequestLayoutOnAnimationEnd = false;\n this.requestLayout();\n }\n }\n buildDrawingCache(autoScale = false) {\n if (this.getAnimation() && this.mUnscaledDrawingCache)\n return;\n super.buildDrawingCache(autoScale);\n }\n drawFromParent(canvas, parent, drawingTime) {\n let windowAnimation = this.getAnimation();\n let wparams = this.getLayoutParams();\n let shadowAlpha = wparams.dimAmount * 255;\n if (windowAnimation != null && shadowAlpha) {\n const duration = windowAnimation.getDuration();\n let startTime = windowAnimation.getStartTime();\n if (startTime < 0)\n startTime = drawingTime;\n let startOffset = windowAnimation.getStartOffset();\n let normalizedTime;\n if (duration != 0) {\n normalizedTime = (drawingTime - (startTime + startOffset)) / duration;\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n }\n else {\n normalizedTime = drawingTime < startTime ? 0.0 : 1.0;\n }\n const interpolatedTime = windowAnimation.getInterpolator().getInterpolation(normalizedTime);\n if (windowAnimation === wparams.exitAnimation) {\n shadowAlpha = shadowAlpha * (1 - interpolatedTime);\n if (!windowAnimation.hasEnded())\n parent.invalidate();\n }\n else if (windowAnimation === wparams.enterAnimation) {\n shadowAlpha = shadowAlpha * interpolatedTime;\n if (!windowAnimation.hasEnded())\n parent.invalidate();\n }\n }\n if ((windowAnimation != null || wparams.isFloating()) && shadowAlpha) {\n canvas.drawColor(android.graphics.Color.argb(shadowAlpha, 0, 0, 0));\n }\n return super.drawFromParent(canvas, parent, drawingTime);\n }\n tagName() {\n return 'Window';\n }\n dispatchKeyEvent(event) {\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n if (child instanceof WindowManager.Layout && child.dispatchKeyEvent(event)) {\n return true;\n }\n }\n const action = event.getAction();\n if (!this.Window_this.isDestroyed()) {\n const cb = this.Window_this.getCallback();\n const handled = cb != null ? cb.dispatchKeyEvent(event) : super.dispatchKeyEvent(event);\n if (handled) {\n return true;\n }\n }\n return super.dispatchKeyEvent(event);\n }\n dispatchTouchEvent(ev) {\n let wparams = this.getLayoutParams();\n const cb = this.Window_this.getCallback();\n let outside = this.Window_this.isOutOfBounds(this.getContext(), ev);\n if (outside && !wparams.isTouchModal()) {\n if (wparams.isWatchTouchOutside() && ev.getAction() == android.view.MotionEvent.ACTION_DOWN) {\n let action = ev.getAction();\n ev.setAction(android.view.MotionEvent.ACTION_OUTSIDE);\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.dispatchTouchEvent(ev);\n }\n else {\n super.dispatchTouchEvent(ev);\n }\n ev.setAction(action);\n }\n return false;\n }\n cb != null && !this.Window_this.isDestroyed() ? cb.dispatchTouchEvent(ev) : super.dispatchTouchEvent(ev);\n return true;\n }\n dispatchGenericMotionEvent(ev) {\n const cb = this.Window_this.getCallback();\n return cb != null && !this.Window_this.isDestroyed() ? cb.dispatchGenericMotionEvent(ev) : super.dispatchGenericMotionEvent(ev);\n }\n superDispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event);\n }\n superDispatchTouchEvent(event) {\n return super.dispatchTouchEvent(event);\n }\n superDispatchGenericMotionEvent(event) {\n return super.dispatchGenericMotionEvent(event);\n }\n onTouchEvent(event) {\n return this.onInterceptTouchEvent(event);\n }\n onVisibilityChanged(changedView, visibility) {\n this.Window_this.mAttachInfo.mWindowVisibility = visibility;\n this.dispatchWindowVisibilityChanged(visibility);\n super.onVisibilityChanged(changedView, visibility);\n }\n onWindowFocusChanged(hasWindowFocus) {\n this.Window_this.mAttachInfo.mHasWindowFocus = hasWindowFocus;\n super.onWindowFocusChanged(hasWindowFocus);\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onWindowFocusChanged(hasWindowFocus);\n }\n }\n onAttachedToWindow() {\n this.Window_this.mAttachInfo.mWindowVisibility = this.getVisibility();\n super.onAttachedToWindow();\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onAttachedToWindow();\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onDetachedFromWindow();\n }\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar PageStack;\n(function (PageStack) {\n PageStack.DEBUG = false;\n const history_go = history.go;\n var iFrameHistoryLengthAsFake = 0;\n let historyLocking = false;\n let windowLoadLocking = true;\n let pendingFuncLock = [];\n let initCalled = false;\n function init() {\n initCalled = true;\n _init();\n history.go = function (delta) {\n PageStack.go(delta);\n };\n history.back = function (delta = -1) {\n PageStack.go(delta);\n };\n history.forward = function (delta = 1) {\n PageStack.go(delta);\n };\n }\n PageStack.init = init;\n function checkInitCalled() {\n if (!initCalled)\n throw Error(\"PageStack.init() must be call first\");\n }\n function _init() {\n PageStack.currentStack = history.state;\n if (PageStack.currentStack && !PageStack.currentStack.isRoot) {\n console.log('already has history.state when _init PageState, restore page');\n restorePageFromStackIfNeed();\n }\n else {\n PageStack.currentStack = PageStack.currentStack || {\n pageId: '',\n isRoot: true,\n stack: [{ pageId: null }]\n };\n let initOpenUrl = location.hash;\n if (initOpenUrl && initOpenUrl.indexOf('#') === 0)\n initOpenUrl = initOpenUrl.substring(1);\n removeLastHistoryIfFaked();\n ensureLockDo(() => {\n history.replaceState(PageStack.currentStack, null, '#');\n });\n if (initOpenUrl && initOpenUrl.length > 0) {\n if (firePagePush(initOpenUrl, null)) {\n notifyNewPageOpened(initOpenUrl);\n }\n }\n }\n ensureLastHistoryFaked();\n if (document.readyState === 'complete') {\n windowLoadLocking = false;\n setTimeout(initOnpopstate, 0);\n }\n else {\n window.addEventListener('load', () => {\n windowLoadLocking = false;\n window.removeEventListener('popstate', onpopstateListener);\n setTimeout(initOnpopstate, 0);\n });\n }\n }\n let onpopstateListener = function (ev) {\n let stack = ev.state;\n if (historyLocking) {\n PageStack.currentStack = stack;\n return;\n }\n if (PageStack.DEBUG)\n console.log('onpopstate', stack);\n if (!stack) {\n let pageId = location.hash;\n if (pageId[0] === '#')\n pageId = pageId.substring(1);\n historyGo(-2, false);\n if (firePagePush(pageId, null)) {\n notifyNewPageOpened(pageId);\n }\n else {\n ensureLastHistoryFaked();\n }\n }\n else if (PageStack.currentStack.stack.length != stack.stack.length) {\n let delta = stack.stack.length - PageStack.currentStack.stack.length;\n if (delta >= 0) {\n console.warn('something error! stack: ', stack, 'last stack: ', PageStack.currentStack);\n return;\n }\n var stackList = PageStack.currentStack.stack;\n PageStack.currentStack = stack;\n tryClosePageAfterHistoryChanged(stackList, delta);\n }\n else {\n PageStack.currentStack = stack;\n if (fireBackPressed()) {\n ensureLastHistoryFaked();\n }\n else {\n var stackList = PageStack.currentStack.stack;\n var pageId = stackList[stackList.length - 1].pageId;\n if (firePageClose(pageId, stackList[stackList.length - 1].extra)) {\n historyGo(-1);\n }\n else {\n ensureLastHistoryFaked();\n }\n }\n }\n };\n function initOnpopstate() {\n window.removeEventListener('popstate', onpopstateListener);\n window.addEventListener('popstate', onpopstateListener);\n }\n function go(delta, pageAlreadyClose = false) {\n checkInitCalled();\n if (historyLocking) {\n ensureLockDo(() => {\n go(delta);\n });\n return;\n }\n var stackList = PageStack.currentStack.stack;\n if (delta === -1 && !pageAlreadyClose) {\n if (!firePageClose(stackList[stackList.length - 1].pageId, stackList[stackList.length - 1].extra)) {\n return;\n }\n }\n removeLastHistoryIfFaked();\n historyGo(delta);\n if (delta < -1 && !pageAlreadyClose) {\n ensureLockDo(() => {\n tryClosePageAfterHistoryChanged(stackList, delta);\n });\n }\n }\n PageStack.go = go;\n function tryClosePageAfterHistoryChanged(stateListBeforeHistoryChange, delta) {\n let historyLength = stateListBeforeHistoryChange.length;\n for (let i = historyLength + delta; i < historyLength; i++) {\n let state = stateListBeforeHistoryChange[i];\n if (!firePageClose(state.pageId, state.extra)) {\n notifyNewPageOpened(state.pageId, state.extra);\n }\n }\n }\n function back(pageAlreadyClose = false) {\n checkInitCalled();\n go(-1, pageAlreadyClose);\n }\n PageStack.back = back;\n function openPage(pageId, extra) {\n checkInitCalled();\n pageId += '';\n var openResult = firePageOpen(pageId, extra);\n if (openResult) {\n notifyNewPageOpened(pageId, extra);\n }\n return openResult;\n }\n PageStack.openPage = openPage;\n function backToPage(pageId) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('backToPage', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n backToPage(pageId);\n });\n }\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n let delta = i - historyLength;\n removeLastHistoryIfFaked();\n historyGo(delta);\n return;\n }\n }\n }\n PageStack.backToPage = backToPage;\n let releaseLockingTimeout;\n let requestHistoryGoWhenLocking = 0;\n let ensureFakeAfterHistoryChange = false;\n function historyGo(delta, ensureFaked = true) {\n if (delta >= 0)\n return;\n if (history.length === 1)\n return;\n ensureFakeAfterHistoryChange = ensureFakeAfterHistoryChange || ensureFaked;\n if (historyLocking) {\n requestHistoryGoWhenLocking += delta;\n return;\n }\n if (PageStack.DEBUG)\n console.log('historyGo', delta);\n historyLocking = true;\n const state = history.state;\n if (releaseLockingTimeout)\n clearTimeout(releaseLockingTimeout);\n function checkRelease() {\n clearTimeout(releaseLockingTimeout);\n if (history.state === state) {\n releaseLockingTimeout = setTimeout(checkRelease, 0);\n }\n else {\n let continueGo = requestHistoryGoWhenLocking;\n if (continueGo != 0) {\n requestHistoryGoWhenLocking = 0;\n historyLocking = false;\n historyGo(continueGo, false);\n }\n else {\n if (ensureFakeAfterHistoryChange)\n ensureLastHistoryFakedImpl();\n ensureFakeAfterHistoryChange = false;\n releaseLockingTimeout = setTimeout(() => {\n historyLocking = false;\n }, 10);\n }\n }\n }\n releaseLockingTimeout = setTimeout(checkRelease, 0);\n history_go.call(history, delta);\n }\n PageStack.historyGo = historyGo;\n function restorePageFromStackIfNeed() {\n if (PageStack.currentStack) {\n let copy = PageStack.currentStack.stack.concat();\n copy.shift();\n for (let saveState of copy) {\n firePageOpen(saveState.pageId, saveState.extra, true);\n }\n }\n }\n function fireBackPressed() {\n if (PageStack.backListener) {\n try {\n return PageStack.backListener();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePageOpen(pageId, pageExtra, isRestore = false) {\n if (PageStack.pageOpenHandler) {\n try {\n return PageStack.pageOpenHandler(pageId, pageExtra, isRestore);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePagePush(pageId, pageExtra) {\n if (PageStack.pagePushHandler) {\n try {\n return PageStack.pagePushHandler(pageId, pageExtra);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePageClose(pageId, pageExtra) {\n if (PageStack.pageCloseHandler) {\n try {\n return PageStack.pageCloseHandler(pageId, pageExtra);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function notifyPageClosed(pageId) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('notifyPageClosed', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n notifyPageClosed(pageId);\n });\n return;\n }\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n if (i === historyLength - 1) {\n removeLastHistoryIfFaked();\n historyGo(-1);\n }\n else {\n let delta = i - historyLength;\n (function (delta) {\n removeLastHistoryIfFaked();\n historyGo(delta);\n ensureLockDoAtFront(() => {\n let historyLength = stackList.length;\n let pageStartAddIndex = historyLength + delta + 1;\n for (let j = pageStartAddIndex; j < historyLength; j++) {\n notifyNewPageOpened(stackList[j].pageId, stackList[j].extra);\n }\n });\n })(delta);\n }\n return;\n }\n }\n }\n PageStack.notifyPageClosed = notifyPageClosed;\n function notifyNewPageOpened(pageId, extra) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('notifyNewPageOpened', pageId);\n let state = {\n pageId: pageId,\n extra: extra\n };\n ensureLockDo(function () {\n PageStack.currentStack.stack.push(state);\n PageStack.currentStack.pageId = pageId;\n PageStack.currentStack.isRoot = false;\n if (history.state.isFake) {\n history.replaceState(PageStack.currentStack, null, '#' + pageId);\n }\n else {\n history.pushState(PageStack.currentStack, null, '#' + pageId);\n }\n ensureLastHistoryFakedImpl();\n });\n }\n PageStack.notifyNewPageOpened = notifyNewPageOpened;\n function getPageExtra(pageId) {\n checkInitCalled();\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n if (!pageId) {\n return stackList[historyLength - 1].extra;\n }\n else {\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n return state.extra;\n }\n }\n }\n }\n PageStack.getPageExtra = getPageExtra;\n function setPageExtra(extra, pageId) {\n checkInitCalled();\n removeLastHistoryIfFaked();\n ensureLockDo(function () {\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n if (!pageId) {\n stackList[historyLength - 1].extra = extra;\n history.replaceState(PageStack.currentStack, null, '');\n }\n else {\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n state.extra = extra;\n history.replaceState(PageStack.currentStack, null, '');\n break;\n }\n }\n }\n ensureLastHistoryFakedImpl();\n });\n }\n PageStack.setPageExtra = setPageExtra;\n function ensureLockDo(func) {\n checkInitCalled();\n if (!historyLocking && !windowLoadLocking) {\n func();\n return;\n }\n pendingFuncLock.push(func);\n _queryLockDo();\n }\n function ensureLockDoAtFront(func, runNowIfNotLock = false) {\n checkInitCalled();\n if (!historyLocking && !windowLoadLocking && runNowIfNotLock) {\n func();\n return;\n }\n pendingFuncLock.splice(0, 0, func);\n _queryLockDo();\n }\n let execLockedTimeoutId;\n function _queryLockDo() {\n if (execLockedTimeoutId)\n clearTimeout(execLockedTimeoutId);\n function execLockedFunctions() {\n if (historyLocking || windowLoadLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n else {\n let f;\n while (f = pendingFuncLock.shift()) {\n f();\n if (historyLocking || windowLoadLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n break;\n }\n }\n }\n }\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n function preClosePageHasIFrame(historyLengthWhenInitIFrame) {\n history.pushState({ isFake: true }, null, null);\n iFrameHistoryLengthAsFake = history.length - historyLengthWhenInitIFrame;\n }\n PageStack.preClosePageHasIFrame = preClosePageHasIFrame;\n function removeLastHistoryIfFaked() {\n ensureLockDo(removeLastHistoryIfFakedImpl);\n }\n function removeLastHistoryIfFakedImpl() {\n if (history.state && history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('remove Fake History');\n history.replaceState(null, null, '');\n historyGo(-1 - iFrameHistoryLengthAsFake, false);\n iFrameHistoryLengthAsFake = 0;\n }\n }\n function ensureLastHistoryFaked() {\n ensureLockDo(ensureLastHistoryFakedImpl);\n }\n function ensureLastHistoryFakedImpl() {\n if (!history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('append Fake History');\n history.pushState({\n isFake: true,\n isRoot: PageStack.currentStack.isRoot,\n stack: PageStack.currentStack.stack,\n }, null, '');\n }\n }\n})(PageStack || (PageStack = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Bundle = android.os.Bundle;\n var Intent = android.content.Intent;\n var View = android.view.View;\n class ActivityThread {\n constructor(androidUI) {\n this.mLaunchedActivities = new Set();\n this.androidUI = androidUI;\n }\n initWithPageStack() {\n let backKeyDownEvent = android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_DOWN, android.view.KeyEvent.KEYCODE_BACK);\n let backKeyUpEvent = android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_UP, android.view.KeyEvent.KEYCODE_BACK);\n PageStack.backListener = () => {\n let handleDown = this.androidUI._viewRootImpl.dispatchInputEvent(backKeyDownEvent);\n let handleUp = this.androidUI._viewRootImpl.dispatchInputEvent(backKeyUpEvent);\n return handleDown || handleUp;\n };\n PageStack.pageOpenHandler = (pageId, pageExtra, isRestore) => {\n let intent = new Intent(pageId);\n if (pageExtra)\n intent.mExtras = new Bundle(pageExtra.mExtras);\n if (isRestore)\n this.overrideNextWindowAnimation(null, null, null, null);\n let activity = this.handleLaunchActivity(intent);\n return activity && !activity.mFinished;\n };\n PageStack.pageCloseHandler = (pageId, pageExtra) => {\n if (this.mLaunchedActivities.size === 1) {\n let rootActivity = Array.from(this.mLaunchedActivities)[0];\n if (pageId == null || rootActivity.getIntent().activityName == pageId) {\n this.handleDestroyActivity(rootActivity, true);\n return true;\n }\n return false;\n }\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n let intent = activity.getIntent();\n if (intent.activityName == pageId) {\n this.handleDestroyActivity(activity, true);\n return true;\n }\n }\n };\n PageStack.init();\n }\n overrideNextWindowAnimation(enterAnimation, exitAnimation, resumeAnimation, hideAnimation) {\n this.overrideEnterAnimation = enterAnimation;\n this.overrideExitAnimation = exitAnimation;\n this.overrideResumeAnimation = resumeAnimation;\n this.overrideHideAnimation = hideAnimation;\n }\n getOverrideEnterAnimation() {\n return this.overrideEnterAnimation;\n }\n getOverrideExitAnimation() {\n return this.overrideExitAnimation;\n }\n getOverrideResumeAnimation() {\n return this.overrideResumeAnimation;\n }\n getOverrideHideAnimation() {\n return this.overrideHideAnimation;\n }\n scheduleApplicationHide() {\n if (this.scheduleApplicationHideTimeout)\n clearTimeout(this.scheduleApplicationHideTimeout);\n this.scheduleApplicationHideTimeout = setTimeout(() => {\n let visibleActivities = this.getVisibleToUserActivities();\n if (visibleActivities.length == 0)\n return;\n this.handlePauseActivity(visibleActivities[visibleActivities.length - 1]);\n for (let visibleActivity of visibleActivities) {\n this.handleStopActivity(visibleActivity, true);\n }\n }, 0);\n }\n scheduleApplicationShow() {\n this.scheduleActivityResume();\n }\n execStartActivity(callActivity, intent, options) {\n if ((intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {\n if (this.scheduleBackTo(intent))\n return;\n }\n this.scheduleLaunchActivity(callActivity, intent, options);\n }\n scheduleActivityResume() {\n if (this.activityResumeTimeout)\n clearTimeout(this.activityResumeTimeout);\n this.activityResumeTimeout = setTimeout(() => {\n let visibleActivities = this.getVisibleToUserActivities();\n if (visibleActivities.length == 0)\n return;\n for (let visibleActivity of visibleActivities) {\n visibleActivity.performRestart();\n }\n let activity = visibleActivities.pop();\n this.handleResumeActivity(activity, false);\n if (activity.getWindow().isFloating()) {\n for (let visibleActivity of visibleActivities.reverse()) {\n if (visibleActivity.mVisibleFromClient) {\n visibleActivity.makeVisible();\n if (!visibleActivity.getWindow().isFloating()) {\n break;\n }\n }\n }\n }\n }, 0);\n }\n scheduleLaunchActivity(callActivity, intent, options) {\n let activity = this.handleLaunchActivity(intent);\n activity.mCallActivity = callActivity;\n if (activity && !activity.mFinished) {\n PageStack.notifyNewPageOpened(intent.activityName, intent);\n }\n }\n scheduleDestroyActivityByRequestCode(requestCode) {\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n if (activity.getIntent() && requestCode == activity.getIntent().mRequestCode) {\n this.scheduleDestroyActivity(activity);\n }\n }\n }\n scheduleDestroyActivity(activity, finishing = true) {\n setTimeout(() => {\n let isCreateSuc = this.mLaunchedActivities.has(activity);\n if (activity.mCallActivity && activity.getIntent() && activity.getIntent().mRequestCode >= 0) {\n activity.mCallActivity.dispatchActivityResult(null, activity.getIntent().mRequestCode, activity.mResultCode, activity.mResultData);\n }\n this.handleDestroyActivity(activity, finishing);\n if (!isCreateSuc)\n return;\n if (this.mLaunchedActivities.size == 0) {\n if (history.length <= 2) {\n this.androidUI.showAppClosed();\n }\n else {\n PageStack.back(true);\n }\n }\n else if (activity.getIntent()) {\n PageStack.notifyPageClosed(activity.getIntent().activityName);\n }\n }, 0);\n }\n scheduleBackTo(intent) {\n let destroyList = [];\n let findActivity = false;\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n if (activity.getIntent() && activity.getIntent().activityName == intent.activityName) {\n findActivity = true;\n break;\n }\n destroyList.push(activity);\n }\n if (findActivity) {\n for (let activity of destroyList) {\n this.scheduleDestroyActivity(activity);\n }\n return true;\n }\n return false;\n }\n canBackTo(intent) {\n for (let activity of this.mLaunchedActivities) {\n if (activity.getIntent().activityName == intent.activityName) {\n return true;\n }\n }\n return false;\n }\n scheduleBackToRoot() {\n let destroyList = Array.from(this.mLaunchedActivities).reverse();\n destroyList.shift();\n for (let activity of destroyList) {\n this.scheduleDestroyActivity(activity);\n }\n }\n handlePauseActivity(activity) {\n this.performPauseActivity(activity);\n }\n performPauseActivity(activity) {\n activity.performPause();\n }\n handleStopActivity(activity, show = false) {\n this.performStopActivity(activity, true);\n this.updateVisibility(activity, show);\n }\n performStopActivity(activity, saveState) {\n if (!activity.mFinished && saveState) {\n let state = new Bundle();\n activity.performSaveInstanceState(state);\n }\n activity.performStop();\n }\n handleResumeActivity(a, launching) {\n this.performResumeActivity(a, launching);\n let willBeVisible = !a.mStartedActivity && !a.mFinished;\n if (willBeVisible && a.mVisibleFromClient) {\n a.makeVisible();\n this.overrideEnterAnimation = undefined;\n this.overrideExitAnimation = undefined;\n this.overrideResumeAnimation = undefined;\n this.overrideHideAnimation = undefined;\n }\n }\n performResumeActivity(a, launching) {\n if (!launching) {\n a.mStartedActivity = false;\n }\n a.performResume();\n }\n handleLaunchActivity(intent) {\n let visibleActivities = this.getVisibleToUserActivities();\n let a = this.performLaunchActivity(intent);\n if (a) {\n this.handleResumeActivity(a, true);\n if (!a.mFinished && visibleActivities.length > 0) {\n this.handlePauseActivity(visibleActivities[visibleActivities.length - 1]);\n if (!a.getWindow().getAttributes().isFloating()) {\n for (let visibleActivity of visibleActivities) {\n this.handleStopActivity(visibleActivity);\n }\n }\n }\n }\n return a;\n }\n performLaunchActivity(intent) {\n let activity;\n let clazz = intent.activityName;\n try {\n if (typeof clazz === 'string')\n clazz = eval(clazz);\n }\n catch (e) { }\n if (typeof clazz === 'function')\n activity = new clazz(this.androidUI);\n if (activity instanceof app.Activity) {\n try {\n let savedInstanceState = null;\n activity.mIntent = intent;\n activity.mStartedActivity = false;\n activity.mCalled = false;\n activity.performCreate(savedInstanceState);\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + intent.activityName + \" did not call through to super.onCreate()\");\n }\n if (!activity.mFinished) {\n activity.performStart();\n activity.performRestoreInstanceState(savedInstanceState);\n activity.mCalled = false;\n activity.onPostCreate(savedInstanceState);\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + intent.activityName + \" did not call through to super.onPostCreate()\");\n }\n }\n }\n catch (e) {\n console.error(e);\n return null;\n }\n if (!activity.mFinished) {\n this.mLaunchedActivities.add(activity);\n }\n return activity;\n }\n return null;\n }\n handleDestroyActivity(activity, finishing) {\n let visibleActivities = this.getVisibleToUserActivities();\n let isTopVisibleActivity = activity == visibleActivities[visibleActivities.length - 1];\n let isRootActivity = this.isRootActivity(activity);\n this.performDestroyActivity(activity, finishing);\n if (isRootActivity)\n activity.getWindow().setWindowAnimations(null, null);\n this.androidUI.windowManager.removeWindow(activity.getWindow());\n if (isTopVisibleActivity && !isRootActivity) {\n this.scheduleActivityResume();\n }\n }\n performDestroyActivity(activity, finishing) {\n if (finishing) {\n activity.mFinished = true;\n }\n activity.performPause();\n activity.performStop();\n activity.mCalled = false;\n activity.performDestroy();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onDestroy()\");\n }\n this.mLaunchedActivities.delete(activity);\n }\n updateVisibility(activity, show) {\n if (show) {\n if (activity.mVisibleFromClient) {\n activity.makeVisible();\n }\n }\n else {\n activity.getWindow().getDecorView().setVisibility(View.INVISIBLE);\n }\n }\n getVisibleToUserActivities() {\n let list = [];\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n list.push(activity);\n if (!activity.getWindow().getAttributes().isFloating())\n break;\n }\n list.reverse();\n return list;\n }\n isRootActivity(activity) {\n return this.mLaunchedActivities.values().next().value == activity;\n }\n static getActivityName(activity) {\n if (activity.getIntent())\n return activity.getIntent().activityName;\n return activity.constructor.name;\n }\n }\n app.ActivityThread = ActivityThread;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n class string_ {\n static zh() {\n this.ok = '确定';\n this.cancel = '取消';\n this.close = '关闭';\n this.back = '返回';\n this.crash_catch_alert = '程序发生错误, 即将重载网页:';\n this.prll_header_state_normal = '下拉以刷新';\n this.prll_header_state_ready = '松开马上刷新';\n this.prll_header_state_loading = '正在刷新...';\n this.prll_header_state_fail = '刷新失败';\n this.prll_footer_state_normal = '点击加载更多';\n this.prll_footer_state_loading = '正在加载...';\n this.prll_footer_state_ready = '松开加载更多';\n this.prll_footer_state_no_more = '加载完毕';\n this.prll_footer_state_fail = '加载失败,点击重试';\n }\n }\n string_.ok = 'OK';\n string_.cancel = 'Cancel';\n string_.close = 'Close';\n string_.back = 'Back';\n string_.crash_catch_alert = 'Some error happen, will refresh page:';\n string_.prll_header_state_normal = 'Pull to refresh';\n string_.prll_header_state_ready = 'Release to refresh';\n string_.prll_header_state_loading = 'Loading';\n string_.prll_header_state_fail = 'Refresh fail';\n string_.prll_footer_state_normal = 'Load more';\n string_.prll_footer_state_loading = 'Loading';\n string_.prll_footer_state_ready = 'Pull to load more';\n string_.prll_footer_state_fail = 'Click to reload';\n string_.prll_footer_state_no_more = 'Load Finish';\n R.string_ = string_;\n const lang = navigator.language.split('-')[0].toLowerCase();\n if (typeof string_[lang] === 'function')\n string_[lang].call(string_);\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n if (typeof HTMLDivElement !== 'function') {\n var _HTMLDivElement = function () { };\n _HTMLDivElement.prototype = HTMLDivElement.prototype;\n HTMLDivElement = _HTMLDivElement;\n }\n class AndroidUIElement extends HTMLDivElement {\n createdCallback() {\n $domReady(() => initElement(this));\n }\n attachedCallback() {\n }\n detachedCallback() {\n }\n attributeChangedCallback(attributeName, oldVal, newVal) {\n if (attributeName === 'debug' && newVal != null && newVal != 'false' && newVal != '0') {\n this.AndroidUI.setDebugEnable();\n }\n }\n }\n androidui.AndroidUIElement = AndroidUIElement;\n function runFunction(func) {\n if (typeof window[func] === \"function\") {\n window[func]();\n }\n else {\n try {\n eval(func);\n }\n catch (e) {\n console.warn(e);\n }\n }\n }\n function $domReady(func) {\n if (/^loaded|^complete|^interactive/.test(document.readyState)) {\n setTimeout(func, 0);\n }\n else {\n document.addEventListener('DOMContentLoaded', func);\n }\n }\n function initElement(ele) {\n ele.AndroidUI = new androidui.AndroidUI(ele);\n let debugAttr = ele.getAttribute('debug');\n if (debugAttr != null && debugAttr != '0' && debugAttr != 'false')\n ele.AndroidUI.setDebugEnable();\n let onClose = ele.getAttribute('onclose');\n if (onClose) {\n ele.AndroidUI.setUIClient({\n shouldShowAppClosed(androidUI) {\n if (!onClose)\n return;\n runFunction(onClose);\n }\n });\n }\n let onLoad = ele.getAttribute('onload');\n if (onLoad) {\n runFunction(onLoad);\n }\n }\n if (typeof document['registerElement'] === \"function\") {\n document.registerElement(\"android-ui\", AndroidUIElement);\n }\n else {\n $domReady(() => {\n let eles = document.getElementsByTagName('android-ui');\n for (let ele of Array.from(eles)) {\n initElement(ele);\n }\n });\n }\n let styleElement = document.createElement('style');\n styleElement.innerHTML += `\n android-ui {\n position : relative;\n overflow : hidden;\n display : block;\n outline: none;\n }\n android-ui * {\n overflow : hidden;\n border : none;\n outline: none;\n pointer-events: auto;\n }\n android-ui resources {\n display: none;\n }\n android-ui Button {\n border: none;\n background: none;\n }\n android-ui windowsgroup {\n pointer-events: none;\n }\n android-ui > canvas {\n position: absolute;\n left: 0;\n top: 0;\n }\n `;\n document.head.appendChild(styleElement);\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n var Intent = android.content.Intent;\n var ActivityThread = android.app.ActivityThread;\n var ViewRootImpl = android.view.ViewRootImpl;\n class AndroidUI {\n constructor(androidUIElement) {\n this._canvas = document.createElement(\"canvas\");\n this.viewsDependOnDebugLayout = new Set();\n this.showDebugLayoutDefault = false;\n this._windowBound = new android.graphics.Rect();\n this.tempRect = new android.graphics.Rect();\n this.touchEvent = new MotionEvent();\n this.ketEvent = new KeyEvent();\n this.androidUIElement = androidUIElement;\n if (androidUIElement[AndroidUI.BindToElementName]) {\n throw Error('already init a AndroidUI with this element');\n }\n androidUIElement[AndroidUI.BindToElementName] = this;\n this.init();\n }\n get windowManager() {\n return this.mApplication.getWindowManager();\n }\n get windowBound() {\n return this._windowBound;\n }\n init() {\n this.appName = document.title;\n this._viewRootImpl = new android.view.ViewRootImpl();\n this.initAndroidUIElement();\n this.initApplication();\n this.androidUIElement.appendChild(this._canvas);\n this.initEvent();\n this.initRootSizeChange();\n this._viewRootImpl.setView(this.windowManager.getWindowsLayout());\n this._viewRootImpl.initSurface(this._canvas);\n this.initBrowserVisibleChange();\n this.initLaunchActivity();\n this.initGlobalCrashHandle();\n }\n initApplication() {\n const appName = this.androidUIElement.getAttribute('appName');\n let appClazz;\n if (appName) {\n try {\n appClazz = eval(appName);\n }\n catch (e) {\n }\n }\n appClazz = appClazz || android.app.Application;\n this.mApplication = new appClazz(this);\n this.mApplication.onCreate();\n }\n initLaunchActivity() {\n this.mActivityThread = new ActivityThread(this);\n for (let ele of Array.from(this.androidUIElement.children)) {\n let tagName = ele.tagName;\n if (tagName != 'ACTIVITY')\n continue;\n let activityName = ele.getAttribute('name') || ele.getAttribute('android:name') || 'android.app.Activity';\n let intent = new Intent(activityName);\n this.mActivityThread.overrideNextWindowAnimation(null, null, null, null);\n let activity = this.mActivityThread.handleLaunchActivity(intent);\n if (activity) {\n this.androidUIElement.removeChild(ele);\n for (let element of Array.from(ele.children)) {\n android.view.LayoutInflater.from(activity).inflate(element, activity.getWindow().mContentParent, true);\n }\n let onCreateFunc = ele.getAttribute('oncreate');\n if (onCreateFunc && typeof window[onCreateFunc] === \"function\") {\n window[onCreateFunc].call(this, activity);\n }\n }\n }\n this.mActivityThread.initWithPageStack();\n }\n initGlobalCrashHandle() {\n window.onerror = (sMsg, sUrl, sLine) => {\n if (window.confirm(android.R.string_.crash_catch_alert + '\\n' + sMsg)) {\n window.location.reload();\n }\n };\n }\n refreshWindowBound() {\n let boundLeft = this.androidUIElement.offsetLeft;\n let boundTop = this.androidUIElement.offsetTop;\n let parent = this.androidUIElement.parentElement;\n if (parent) {\n boundLeft += parent.offsetLeft;\n boundTop += parent.offsetTop;\n parent = parent.parentElement;\n }\n let boundRight = boundLeft + this.androidUIElement.offsetWidth;\n let boundBottom = boundTop + this.androidUIElement.offsetHeight;\n if (this._windowBound && this._windowBound.left == boundLeft && this._windowBound.top == boundTop\n && this._windowBound.right == boundRight && this._windowBound.bottom == boundBottom) {\n return false;\n }\n this._windowBound.set(boundLeft, boundTop, boundRight, boundBottom);\n return true;\n }\n initAndroidUIElement() {\n if (this.androidUIElement.style.display === 'none') {\n this.androidUIElement.style.display = '';\n }\n this.androidUIElement.setAttribute('tabindex', '0');\n this.androidUIElement.focus();\n this.androidUIElement.onblur = (e) => {\n this._viewRootImpl.ensureTouchMode(true);\n };\n }\n initEvent() {\n this.initTouchEvent();\n this.initMouseEvent();\n this.initKeyEvent();\n this.initGenericEvent();\n }\n initTouchEvent() {\n this.androidUIElement.addEventListener('touchstart', (e) => {\n this.refreshWindowBound();\n if (e.target != document.activeElement || !this.androidUIElement.contains(document.activeElement)) {\n this.androidUIElement.focus();\n }\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_DOWN, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchmove', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_MOVE, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchend', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_UP, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchcancel', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_CANCEL, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initMouseEvent() {\n function mouseToTouchEvent(e) {\n let touch = {\n identifier: 0,\n target: null,\n screenX: e.screenX,\n screenY: e.screenY,\n clientX: e.clientX,\n clientY: e.clientY,\n pageX: e.pageX,\n pageY: e.pageY\n };\n return {\n changedTouches: [touch],\n targetTouches: [touch],\n touches: e.type === 'mouseup' ? [] : [touch],\n timeStamp: e.timeStamp\n };\n }\n let isMouseDown = false;\n this.androidUIElement.addEventListener('mousedown', (e) => {\n isMouseDown = true;\n this.refreshWindowBound();\n if (e.target != document.activeElement || !this.androidUIElement.contains(document.activeElement)) {\n this.androidUIElement.focus();\n }\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_DOWN, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mousemove', (e) => {\n if (!isMouseDown)\n return;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_MOVE, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mouseup', (e) => {\n isMouseDown = false;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_UP, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mouseleave', (e) => {\n if (e.fromElement === this.androidUIElement) {\n isMouseDown = false;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_CANCEL, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }\n }, true);\n let scrollEvent = new MotionEvent();\n this.androidUIElement.addEventListener('mousewheel', (e) => {\n scrollEvent.initWithMouseWheel(e);\n if (this._viewRootImpl.dispatchInputEvent(scrollEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initKeyEvent() {\n this.androidUIElement.addEventListener('keydown', (e) => {\n this.ketEvent.initKeyEvent(e, KeyEvent.ACTION_DOWN);\n if (this._viewRootImpl.dispatchInputEvent(this.ketEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('keyup', (e) => {\n this.ketEvent.initKeyEvent(e, KeyEvent.ACTION_UP);\n if (this._viewRootImpl.dispatchInputEvent(this.ketEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initGenericEvent() {\n }\n initRootSizeChange() {\n const _this = this;\n window.addEventListener('resize', () => {\n _this.notifyRootSizeChange();\n });\n let lastWidth = this.androidUIElement.offsetWidth;\n let lastHeight = this.androidUIElement.offsetHeight;\n if (lastWidth > 0 && lastHeight > 0)\n this.notifyRootSizeChange();\n setInterval(() => {\n let width = _this.androidUIElement.offsetWidth;\n let height = _this.androidUIElement.offsetHeight;\n if (lastHeight !== height || lastWidth !== width) {\n lastWidth = width;\n lastHeight = height;\n _this.notifyRootSizeChange();\n }\n }, 500);\n }\n initBrowserVisibleChange() {\n var eventName = 'visibilitychange';\n if (document['webkitHidden'] != undefined) {\n eventName = 'webkitvisibilitychange';\n }\n document.addEventListener(eventName, () => {\n if (document['hidden'] || document['webkitHidden']) {\n this.mActivityThread.scheduleApplicationHide();\n }\n else {\n this.mActivityThread.scheduleApplicationShow();\n this._viewRootImpl.invalidate();\n }\n }, false);\n }\n notifyRootSizeChange() {\n if (this.refreshWindowBound()) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n this.tempRect.set(this._windowBound.left * density, this._windowBound.top * density, this._windowBound.right * density, this._windowBound.bottom * density);\n let width = this._windowBound.width();\n let height = this._windowBound.height();\n this._canvas.width = width * density;\n this._canvas.height = height * density;\n this._canvas.style.width = width + \"px\";\n this._canvas.style.height = height + \"px\";\n this._viewRootImpl.notifyResized(this.tempRect);\n }\n }\n viewAttachedDependOnDebugLayout(view) {\n this.viewsDependOnDebugLayout.add(view);\n this.showDebugLayout();\n }\n viewDetachedDependOnDebugLayout(view) {\n this.viewsDependOnDebugLayout.delete(view);\n if (this.viewsDependOnDebugLayout.size == 0 && !this.showDebugLayoutDefault) {\n this.hideDebugLayout();\n }\n }\n setDebugEnable(enable = true) {\n ViewRootImpl.DEBUG_FPS = enable;\n this.setShowDebugLayout(enable);\n }\n setShowDebugLayout(showDebugLayoutDefault = true) {\n this.showDebugLayoutDefault = showDebugLayoutDefault;\n if (showDebugLayoutDefault) {\n this.showDebugLayout();\n }\n else {\n this.hideDebugLayout();\n }\n }\n showDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === null) {\n this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n hideDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === this.androidUIElement) {\n this.androidUIElement.removeChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n setUIClient(uiClient) {\n this.uiClient = uiClient;\n }\n showAppClosed() {\n AndroidUI.showAppClosed(this);\n }\n static showAppClosed(androidUI) {\n androidUI.androidUIElement.parentNode.removeChild(androidUI.androidUIElement);\n if (androidUI.uiClient && androidUI.uiClient.shouldShowAppClosed) {\n androidUI.uiClient.shouldShowAppClosed(androidUI);\n }\n }\n }\n AndroidUI.BindToElementName = 'AndroidUI';\n androidui.AndroidUI = AndroidUI;\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var View = android.view.View;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var Window = android.view.Window;\n var WindowManager = android.view.WindowManager;\n var Log = android.util.Log;\n var Context = android.content.Context;\n var Intent = android.content.Intent;\n class Activity extends Context {\n constructor(androidUI) {\n super(androidUI);\n this.mWindowAdded = false;\n this.mVisibleFromClient = true;\n this.mResultCode = Activity.RESULT_CANCELED;\n this.mResultData = null;\n this.mWindow = new Window(this);\n this.mWindow.setWindowAnimations(android.R.anim.activity_open_enter_ios, android.R.anim.activity_close_exit_ios, android.R.anim.activity_close_enter_ios, android.R.anim.activity_open_exit_ios);\n this.mWindow.setDimAmount(0.7);\n this.mWindow.getAttributes().flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n this.mWindow.setCallback(this);\n }\n getIntent() {\n return this.mIntent;\n }\n setIntent(newIntent) {\n this.mIntent = newIntent;\n }\n getApplication() {\n return this.getApplicationContext();\n }\n getWindowManager() {\n return this.mWindow.getChildWindowManager();\n }\n getGlobalWindowManager() {\n return this.getApplicationContext().getWindowManager();\n }\n getWindow() {\n return this.mWindow;\n }\n getCurrentFocus() {\n return this.mWindow != null ? this.mWindow.getCurrentFocus() : null;\n }\n onCreate(savedInstanceState) {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onCreate \" + this + \": \" + savedInstanceState);\n this.getApplication().dispatchActivityCreated(this, savedInstanceState);\n this.mCalled = true;\n }\n performRestoreInstanceState(savedInstanceState) {\n this.onRestoreInstanceState(savedInstanceState);\n }\n onRestoreInstanceState(savedInstanceState) {\n }\n onPostCreate(savedInstanceState) {\n this.onTitleChanged(this.getTitle());\n this.mCalled = true;\n }\n onStart() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onStart \" + this);\n this.mCalled = true;\n this.getApplication().dispatchActivityStarted(this);\n }\n onRestart() {\n this.mCalled = true;\n }\n onResume() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onResume \" + this);\n this.getApplication().dispatchActivityResumed(this);\n this.mCalled = true;\n }\n onPostResume() {\n const win = this.getWindow();\n if (win != null)\n win.makeActive();\n this.mCalled = true;\n }\n onNewIntent(intent) {\n }\n performSaveInstanceState(outState) {\n this.onSaveInstanceState(outState);\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onSaveInstanceState \" + this + \": \" + outState);\n }\n onSaveInstanceState(outState) {\n this.getApplication().dispatchActivitySaveInstanceState(this, outState);\n }\n onPause() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onPause \" + this);\n this.getApplication().dispatchActivityPaused(this);\n this.mCalled = true;\n }\n onUserLeaveHint() {\n }\n onStop() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onStop \" + this);\n this.getApplication().dispatchActivityStopped(this);\n this.mCalled = true;\n }\n onDestroy() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onDestroy \" + this);\n this.mCalled = true;\n this.getApplication().dispatchActivityDestroyed(this);\n }\n findViewById(id) {\n return this.getWindow().findViewById(id);\n }\n setContentView(view, params) {\n if (!(view instanceof View)) {\n view = this.getLayoutInflater().inflate(view);\n }\n this.getWindow().setContentView(view, params);\n }\n addContentView(view, params) {\n this.mWindow.addContentView(view, params);\n }\n setFinishOnTouchOutside(finish) {\n this.mWindow.setCloseOnTouchOutside(finish);\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n event.startTracking();\n return true;\n }\n return false;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) {\n this.onBackPressed();\n return true;\n }\n return false;\n }\n onBackPressed() {\n this.finish();\n }\n onTouchEvent(event) {\n if (this.mWindow.shouldCloseOnTouch(this, event)) {\n this.finish();\n return true;\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onUserInteraction() {\n }\n onWindowAttributesChanged(params) {\n let decor = this.getWindow().getDecorView();\n if (decor != null && decor.getParent() != null) {\n this.getWindowManager().updateWindowLayout(this.getWindow(), params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n hasWindowFocus() {\n let w = this.getWindow();\n if (w != null) {\n let d = w.getDecorView();\n if (d != null) {\n return d.hasWindowFocus();\n }\n }\n return false;\n }\n dispatchKeyEvent(event) {\n this.onUserInteraction();\n let win = this.getWindow();\n if (win.superDispatchKeyEvent(event)) {\n return true;\n }\n let decor = win.getDecorView();\n return event.dispatch(this, decor != null ? decor.getKeyDispatcherState() : null, this);\n }\n dispatchTouchEvent(ev) {\n if (ev.getAction() == MotionEvent.ACTION_DOWN) {\n this.onUserInteraction();\n }\n if (this.getWindow().superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n this.onUserInteraction();\n if (this.getWindow().superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n takeKeyEvents(_get) {\n this.getWindow().takeKeyEvents(_get);\n }\n invalidateOptionsMenu() {\n let menu = new android.view.Menu(this);\n if (this.onCreateOptionsMenu(menu)) {\n menu.setCallback({\n onMenuItemSelected: (menu, item) => {\n let handle = this.onOptionsItemSelected(item);\n this.onOptionsMenuClosed(menu);\n return handle;\n }\n });\n this.mMenu = menu;\n this.mMenuPopuoHelper = this.invalidateOptionsMenuPopupHelper(menu);\n }\n }\n invalidateOptionsMenuPopupHelper(menu) {\n return null;\n }\n onCreateOptionsMenu(menu) {\n return true;\n }\n onPrepareOptionsMenu(menu) {\n return true;\n }\n onOptionsItemSelected(item) {\n return false;\n }\n onOptionsMenuClosed(menu) {\n }\n openOptionsMenu() {\n if (this.mMenuPopuoHelper)\n this.mMenuPopuoHelper.show();\n }\n closeOptionsMenu() {\n if (this.mMenuPopuoHelper)\n this.mMenuPopuoHelper.dismiss();\n }\n startActivityForResult(intent, requestCode, options) {\n if (typeof intent === 'string')\n intent = new Intent(intent);\n if (requestCode >= 0)\n intent.mRequestCode = requestCode;\n this.androidUI.mActivityThread.execStartActivity(this, intent, options);\n if (requestCode >= 0) {\n this.mStartedActivity = true;\n }\n const decor = this.mWindow != null ? this.mWindow.peekDecorView() : null;\n if (decor != null) {\n decor.cancelPendingInputEvents();\n }\n }\n startActivities(intents, options) {\n for (let intent of intents) {\n this.startActivity(intent, options);\n }\n }\n startActivity(intent, options) {\n if (options != null) {\n this.startActivityForResult(intent, -1, options);\n }\n else {\n this.startActivityForResult(intent, -1);\n }\n }\n startActivityIfNeeded(intent, requestCode, options) {\n if (this.androidUI.mActivityThread.canBackTo(intent)) {\n return false;\n }\n this.startActivityForResult(intent, requestCode, options);\n return true;\n }\n overrideNextTransition(enterAnimation, exitAnimation, resumeAnimation, hideAnimation) {\n this.androidUI.mActivityThread.overrideNextWindowAnimation(enterAnimation, exitAnimation, resumeAnimation, hideAnimation);\n }\n setResult(resultCode, data) {\n {\n this.mResultCode = resultCode;\n this.mResultData = data;\n }\n }\n getCallingActivity() {\n return null;\n }\n setVisible(visible) {\n if (this.mVisibleFromClient != visible) {\n this.mVisibleFromClient = visible;\n }\n }\n makeVisible() {\n if (!this.mWindowAdded) {\n let wm = this.getGlobalWindowManager();\n wm.addWindow(this.getWindow());\n this.mWindowAdded = true;\n }\n this.getWindow().getDecorView().setVisibility(View.VISIBLE);\n }\n isFinishing() {\n return this.mFinished;\n }\n isDestroyed() {\n return this.mDestroyed;\n }\n finish() {\n let resultCode = this.mResultCode;\n let resultData = this.mResultData;\n try {\n this.androidUI.mActivityThread.scheduleDestroyActivity(this);\n }\n catch (e) {\n }\n }\n finishActivity(requestCode) {\n this.androidUI.mActivityThread.scheduleDestroyActivityByRequestCode(requestCode);\n }\n onActivityResult(requestCode, resultCode, data) {\n }\n setTitle(title) {\n this.getWindow().setTitle(title);\n this.onTitleChanged(title);\n }\n getTitle() {\n return this.getWindow().getAttributes().getTitle();\n }\n onTitleChanged(title, color) {\n const win = this.getWindow();\n if (win != null) {\n win.setTitle(title);\n }\n }\n runOnUiThread(action) {\n action.run();\n }\n navigateUpTo(upIntent, upToRootIfNotFound = true) {\n if (this.androidUI.mActivityThread.scheduleBackTo(upIntent)) {\n return true;\n }\n if (upToRootIfNotFound)\n this.androidUI.mActivityThread.scheduleBackToRoot();\n return false;\n }\n performCreate(icicle) {\n this.onCreate(icicle);\n this.invalidateOptionsMenu();\n }\n performStart() {\n this.mCalled = false;\n this.onStart();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onStart()\")`);\n }\n }\n performRestart() {\n if (this.mStopped) {\n this.mStopped = false;\n this.mCalled = false;\n this.onRestart();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onRestart()\")`);\n }\n this.performStart();\n }\n }\n performResume() {\n this.performRestart();\n this.mCalled = false;\n this.mResumed = true;\n this.onResume();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onResume()\")`);\n }\n this.mCalled = false;\n this.onPostResume();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onPostResume()\")`);\n }\n }\n performPause() {\n if (this.mResumed) {\n this.mCalled = false;\n this.onPause();\n this.mResumed = false;\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity ${this.constructor.name} did not call through to super.onPause()\")`);\n }\n this.mResumed = false;\n }\n }\n performUserLeaving() {\n this.onUserInteraction();\n this.onUserLeaveHint();\n }\n performStop() {\n if (!this.mStopped) {\n this.mCalled = false;\n this.onStop();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onStop()\")`);\n }\n this.mStopped = true;\n }\n this.mResumed = false;\n }\n performDestroy() {\n this.mDestroyed = true;\n this.mWindow.destroy();\n this.onDestroy();\n }\n isResumed() {\n return this.mResumed;\n }\n dispatchActivityResult(who, requestCode, resultCode, data) {\n if (false)\n Log.v(Activity.TAG, \"Dispatching result: who=\" + who + \", reqCode=\" + requestCode + \", resCode=\" + resultCode + \", data=\" + data);\n this.onActivityResult(requestCode, resultCode, data);\n }\n }\n Activity.TAG = \"Activity\";\n Activity.DEBUG_LIFECYCLE = false;\n Activity.RESULT_CANCELED = 0;\n Activity.RESULT_OK = -1;\n Activity.RESULT_FIRST_USER = 1;\n app.Activity = Activity;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var ArrayList = java.util.ArrayList;\n var Context = android.content.Context;\n class Application extends Context {\n constructor(...args) {\n super(...args);\n this.mActivityLifecycleCallbacks = new ArrayList();\n }\n onCreate() {\n }\n getWindowManager() {\n if (!this.mWindowManager)\n this.mWindowManager = new android.view.WindowManager(this);\n return this.mWindowManager;\n }\n registerActivityLifecycleCallbacks(callback) {\n {\n this.mActivityLifecycleCallbacks.add(callback);\n }\n }\n unregisterActivityLifecycleCallbacks(callback) {\n {\n this.mActivityLifecycleCallbacks.remove(callback);\n }\n }\n dispatchActivityCreated(activity, savedInstanceState) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityCreated(activity, savedInstanceState);\n }\n }\n }\n dispatchActivityStarted(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityStarted(activity);\n }\n }\n }\n dispatchActivityResumed(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityResumed(activity);\n }\n }\n }\n dispatchActivityPaused(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityPaused(activity);\n }\n }\n }\n dispatchActivityStopped(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityStopped(activity);\n }\n }\n }\n dispatchActivitySaveInstanceState(activity, outState) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivitySaveInstanceState(activity, outState);\n }\n }\n }\n dispatchActivityDestroyed(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityDestroyed(activity);\n }\n }\n }\n collectActivityLifecycleCallbacks() {\n let callbacks = null;\n {\n if (this.mActivityLifecycleCallbacks.size() > 0) {\n callbacks = this.mActivityLifecycleCallbacks.toArray();\n }\n }\n return callbacks;\n }\n }\n app.Application = Application;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Log = android.util.Log;\n var Pools = android.util.Pools;\n class VelocityTracker {\n constructor() {\n this.mLastTouchIndex = 0;\n this.mGeneration = 0;\n this.clear();\n }\n static obtain() {\n let instance = VelocityTracker.sPool.acquire();\n return (instance != null) ? instance : new VelocityTracker();\n }\n recycle() {\n this.clear();\n VelocityTracker.sPool.release(this);\n }\n setNextPoolable(element) {\n this.mNext = element;\n }\n getNextPoolable() {\n return this.mNext;\n }\n clear() {\n VelocityTracker.releasePointerList(this.mPointerListHead);\n this.mPointerListHead = null;\n this.mLastTouchIndex = 0;\n }\n addMovement(ev) {\n let historySize = ev.getHistorySize();\n const pointerCount = ev.getPointerCount();\n const lastTouchIndex = this.mLastTouchIndex;\n const nextTouchIndex = (lastTouchIndex + 1) % VelocityTracker.NUM_PAST;\n const finalTouchIndex = (nextTouchIndex + historySize) % VelocityTracker.NUM_PAST;\n const generation = this.mGeneration++;\n this.mLastTouchIndex = finalTouchIndex;\n let previousPointer = null;\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n let nextPointer;\n if (previousPointer == null || pointerId < previousPointer.id) {\n previousPointer = null;\n nextPointer = this.mPointerListHead;\n }\n else {\n nextPointer = previousPointer.next;\n }\n let pointer;\n for (;;) {\n if (nextPointer != null) {\n const nextPointerId = nextPointer.id;\n if (nextPointerId == pointerId) {\n pointer = nextPointer;\n break;\n }\n if (nextPointerId < pointerId) {\n nextPointer = nextPointer.next;\n continue;\n }\n }\n pointer = VelocityTracker.obtainPointer();\n pointer.id = pointerId;\n pointer.pastTime[lastTouchIndex] = Number.MIN_VALUE;\n pointer.next = nextPointer;\n if (previousPointer == null) {\n this.mPointerListHead = pointer;\n }\n else {\n previousPointer.next = pointer;\n }\n break;\n }\n pointer.generation = generation;\n previousPointer = pointer;\n const pastX = pointer.pastX;\n const pastY = pointer.pastY;\n const pastTime = pointer.pastTime;\n historySize = ev.getHistorySize(pointerId);\n for (let j = 0; j < historySize; j++) {\n const touchIndex = (nextTouchIndex + j) % VelocityTracker.NUM_PAST;\n pastX[touchIndex] = ev.getHistoricalX(i, j);\n pastY[touchIndex] = ev.getHistoricalY(i, j);\n pastTime[touchIndex] = ev.getHistoricalEventTime(i, j);\n }\n pastX[finalTouchIndex] = ev.getX(i);\n pastY[finalTouchIndex] = ev.getY(i);\n pastTime[finalTouchIndex] = ev.getEventTime();\n }\n previousPointer = null;\n for (let pointer = this.mPointerListHead; pointer != null;) {\n const nextPointer = pointer.next;\n if (pointer.generation != generation) {\n if (previousPointer == null) {\n this.mPointerListHead = nextPointer;\n }\n else {\n previousPointer.next = nextPointer;\n }\n VelocityTracker.releasePointer(pointer);\n }\n else {\n previousPointer = pointer;\n }\n pointer = nextPointer;\n }\n }\n computeCurrentVelocity(units, maxVelocity = Number.MAX_SAFE_INTEGER) {\n const lastTouchIndex = this.mLastTouchIndex;\n for (let pointer = this.mPointerListHead; pointer != null; pointer = pointer.next) {\n const pastTime = pointer.pastTime;\n let oldestTouchIndex = lastTouchIndex;\n let numTouches = 1;\n const minTime = pastTime[lastTouchIndex] - VelocityTracker.MAX_AGE_MILLISECONDS;\n while (numTouches < VelocityTracker.NUM_PAST) {\n const nextOldestTouchIndex = (oldestTouchIndex + VelocityTracker.NUM_PAST - 1) % VelocityTracker.NUM_PAST;\n const nextOldestTime = pastTime[nextOldestTouchIndex];\n if (nextOldestTime < minTime) {\n break;\n }\n oldestTouchIndex = nextOldestTouchIndex;\n numTouches += 1;\n }\n if (numTouches > 3) {\n numTouches -= 1;\n }\n const pastX = pointer.pastX;\n const pastY = pointer.pastY;\n const oldestX = pastX[oldestTouchIndex];\n const oldestY = pastY[oldestTouchIndex];\n const oldestTime = pastTime[oldestTouchIndex];\n let accumX = 0;\n let accumY = 0;\n for (let i = 1; i < numTouches; i++) {\n const touchIndex = (oldestTouchIndex + i) % VelocityTracker.NUM_PAST;\n const duration = (pastTime[touchIndex] - oldestTime);\n if (duration == 0)\n continue;\n let delta = pastX[touchIndex] - oldestX;\n let velocity = (delta / duration) * units;\n accumX = (accumX == 0) ? velocity : (accumX + velocity) * .5;\n delta = pastY[touchIndex] - oldestY;\n velocity = (delta / duration) * units;\n accumY = (accumY == 0) ? velocity : (accumY + velocity) * .5;\n }\n if (accumX < -maxVelocity) {\n accumX = -maxVelocity;\n }\n else if (accumX > maxVelocity) {\n accumX = maxVelocity;\n }\n if (accumY < -maxVelocity) {\n accumY = -maxVelocity;\n }\n else if (accumY > maxVelocity) {\n accumY = maxVelocity;\n }\n pointer.xVelocity = accumX;\n pointer.yVelocity = accumY;\n if (VelocityTracker.localLOGV) {\n Log.v(VelocityTracker.TAG, \"Pointer \" + pointer.id\n + \": Y velocity=\" + accumX + \" X velocity=\" + accumY + \" N=\" + numTouches);\n }\n }\n }\n getXVelocity(id = 0) {\n let pointer = this.getPointer(id);\n return pointer != null ? pointer.xVelocity : 0;\n }\n getYVelocity(id = 0) {\n let pointer = this.getPointer(id);\n return pointer != null ? pointer.yVelocity : 0;\n }\n getPointer(id) {\n for (let pointer = this.mPointerListHead; pointer != null; pointer = pointer.next) {\n if (pointer.id == id) {\n return pointer;\n }\n }\n return null;\n }\n static obtainPointer() {\n if (VelocityTracker.sRecycledPointerCount != 0) {\n let element = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount -= 1;\n VelocityTracker.sRecycledPointerListHead = element.next;\n element.next = null;\n return element;\n }\n return new Pointer();\n }\n static releasePointer(pointer) {\n if (VelocityTracker.sRecycledPointerCount < VelocityTracker.POINTER_POOL_CAPACITY) {\n pointer.next = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount += 1;\n VelocityTracker.sRecycledPointerListHead = pointer;\n }\n }\n static releasePointerList(pointer) {\n if (pointer != null) {\n let count = VelocityTracker.sRecycledPointerCount;\n if (count >= VelocityTracker.POINTER_POOL_CAPACITY) {\n return;\n }\n let tail = pointer;\n for (;;) {\n count += 1;\n if (count >= VelocityTracker.POINTER_POOL_CAPACITY) {\n break;\n }\n let next = tail.next;\n if (next == null) {\n break;\n }\n tail = next;\n }\n tail.next = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount = count;\n VelocityTracker.sRecycledPointerListHead = pointer;\n }\n }\n }\n VelocityTracker.TAG = \"VelocityTracker\";\n VelocityTracker.DEBUG = Log.VelocityTracker_DBG;\n VelocityTracker.localLOGV = VelocityTracker.DEBUG;\n VelocityTracker.NUM_PAST = 10;\n VelocityTracker.MAX_AGE_MILLISECONDS = 200;\n VelocityTracker.POINTER_POOL_CAPACITY = 20;\n VelocityTracker.sPool = new Pools.SynchronizedPool(2);\n VelocityTracker.sRecycledPointerCount = 0;\n view.VelocityTracker = VelocityTracker;\n class Pointer {\n constructor() {\n this.id = 0;\n this.xVelocity = 0;\n this.yVelocity = 0;\n this.pastX = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.pastY = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.pastTime = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.generation = 0;\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var SystemClock = android.os.SystemClock;\n var MotionEvent = android.view.MotionEvent;\n var ViewConfiguration = android.view.ViewConfiguration;\n var TypedValue = android.util.TypedValue;\n class ScaleGestureDetector {\n constructor(listener, handler) {\n this.mFocusX = 0;\n this.mFocusY = 0;\n this.mCurrSpan = 0;\n this.mPrevSpan = 0;\n this.mInitialSpan = 0;\n this.mCurrSpanX = 0;\n this.mCurrSpanY = 0;\n this.mPrevSpanX = 0;\n this.mPrevSpanY = 0;\n this.mCurrTime = 0;\n this.mPrevTime = 0;\n this.mSpanSlop = 0;\n this.mMinSpan = 0;\n this.mTouchUpper = 0;\n this.mTouchLower = 0;\n this.mTouchHistoryLastAccepted = 0;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = 0;\n this.mTouchMinMajor = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n this.mListener = listener;\n this.mSpanSlop = ViewConfiguration.get().getScaledTouchSlop() * 2;\n this.mTouchMinMajor = TypedValue.complexToDimensionPixelSize('48dp');\n this.mMinSpan = TypedValue.complexToDimensionPixelSize('27mm');\n this.mHandler = handler;\n this.setQuickScaleEnabled(true);\n }\n addTouchHistory(ev) {\n const currentTime = SystemClock.uptimeMillis();\n const count = ev.getPointerCount();\n let accept = currentTime - this.mTouchHistoryLastAcceptedTime >= ScaleGestureDetector.TOUCH_STABILIZE_TIME;\n let total = 0;\n let sampleCount = 0;\n for (let i = 0; i < count; i++) {\n const hasLastAccepted = !Number.isNaN(this.mTouchHistoryLastAccepted);\n const historySize = ev.getHistorySize();\n const pointerSampleCount = historySize + 1;\n for (let h = 0; h < pointerSampleCount; h++) {\n let major;\n if (h < historySize) {\n major = ev.getHistoricalTouchMajor(i, h);\n }\n else {\n major = ev.getTouchMajor(i);\n }\n if (major < this.mTouchMinMajor)\n major = this.mTouchMinMajor;\n total += major;\n if (Number.isNaN(this.mTouchUpper) || major > this.mTouchUpper) {\n this.mTouchUpper = major;\n }\n if (Number.isNaN(this.mTouchLower) || major < this.mTouchLower) {\n this.mTouchLower = major;\n }\n if (hasLastAccepted) {\n function Math_signum(value) {\n if (value === 0 || Number.isNaN(value))\n return value;\n return Math.abs(value) === value ? 1 : -1;\n }\n const directionSig = Math.floor(Math_signum(major - this.mTouchHistoryLastAccepted));\n if (directionSig != this.mTouchHistoryDirection || (directionSig == 0 && this.mTouchHistoryDirection == 0)) {\n this.mTouchHistoryDirection = directionSig;\n const time = h < historySize ? ev.getHistoricalEventTime(h) : ev.getEventTime();\n this.mTouchHistoryLastAcceptedTime = time;\n accept = false;\n }\n }\n }\n sampleCount += pointerSampleCount;\n }\n const avg = total / sampleCount;\n if (accept) {\n let newAccepted = (this.mTouchUpper + this.mTouchLower + avg) / 3;\n this.mTouchUpper = (this.mTouchUpper + newAccepted) / 2;\n this.mTouchLower = (this.mTouchLower + newAccepted) / 2;\n this.mTouchHistoryLastAccepted = newAccepted;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = ev.getEventTime();\n }\n }\n clearTouchHistory() {\n this.mTouchUpper = Number.NaN;\n this.mTouchLower = Number.NaN;\n this.mTouchHistoryLastAccepted = Number.NaN;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = 0;\n }\n onTouchEvent(event) {\n this.mCurrTime = event.getEventTime();\n const action = event.getActionMasked();\n if (this.mQuickScaleEnabled) {\n this.mGestureDetector.onTouchEvent(event);\n }\n const streamComplete = action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL;\n if (action == MotionEvent.ACTION_DOWN || streamComplete) {\n if (this.mInProgress) {\n this.mListener.onScaleEnd(this);\n this.mInProgress = false;\n this.mInitialSpan = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n else if (this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS && streamComplete) {\n this.mInProgress = false;\n this.mInitialSpan = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n if (streamComplete) {\n this.clearTouchHistory();\n return true;\n }\n }\n const configChanged = action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN;\n const pointerUp = action == MotionEvent.ACTION_POINTER_UP;\n const skipIndex = pointerUp ? event.getActionIndex() : -1;\n let sumX = 0, sumY = 0;\n const count = event.getPointerCount();\n const div = pointerUp ? count - 1 : count;\n let focusX;\n let focusY;\n if (this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS) {\n focusX = this.mDoubleTapEvent.getX();\n focusY = this.mDoubleTapEvent.getY();\n if (event.getY() < focusY) {\n this.mEventBeforeOrAboveStartingGestureEvent = true;\n }\n else {\n this.mEventBeforeOrAboveStartingGestureEvent = false;\n }\n }\n else {\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n sumX += event.getX(i);\n sumY += event.getY(i);\n }\n focusX = sumX / div;\n focusY = sumY / div;\n }\n this.addTouchHistory(event);\n let devSumX = 0, devSumY = 0;\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n const touchSize = this.mTouchHistoryLastAccepted / 2;\n devSumX += Math.abs(event.getX(i) - focusX) + touchSize;\n devSumY += Math.abs(event.getY(i) - focusY) + touchSize;\n }\n const devX = devSumX / div;\n const devY = devSumY / div;\n const spanX = devX * 2;\n const spanY = devY * 2;\n let span;\n if (this.inDoubleTapMode()) {\n span = spanY;\n }\n else {\n span = Math.sqrt(spanX * spanX + spanY * spanY);\n }\n const wasInProgress = this.mInProgress;\n this.mFocusX = focusX;\n this.mFocusY = focusY;\n if (!this.inDoubleTapMode() && this.mInProgress && (span < this.mMinSpan || configChanged)) {\n this.mListener.onScaleEnd(this);\n this.mInProgress = false;\n this.mInitialSpan = span;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n if (configChanged) {\n this.mPrevSpanX = this.mCurrSpanX = spanX;\n this.mPrevSpanY = this.mCurrSpanY = spanY;\n this.mInitialSpan = this.mPrevSpan = this.mCurrSpan = span;\n }\n const minSpan = this.inDoubleTapMode() ? this.mSpanSlop : this.mMinSpan;\n if (!this.mInProgress && span >= minSpan && (wasInProgress || Math.abs(span - this.mInitialSpan) > this.mSpanSlop)) {\n this.mPrevSpanX = this.mCurrSpanX = spanX;\n this.mPrevSpanY = this.mCurrSpanY = spanY;\n this.mPrevSpan = this.mCurrSpan = span;\n this.mPrevTime = this.mCurrTime;\n this.mInProgress = this.mListener.onScaleBegin(this);\n }\n if (action == MotionEvent.ACTION_MOVE) {\n this.mCurrSpanX = spanX;\n this.mCurrSpanY = spanY;\n this.mCurrSpan = span;\n let updatePrev = true;\n if (this.mInProgress) {\n updatePrev = this.mListener.onScale(this);\n }\n if (updatePrev) {\n this.mPrevSpanX = this.mCurrSpanX;\n this.mPrevSpanY = this.mCurrSpanY;\n this.mPrevSpan = this.mCurrSpan;\n this.mPrevTime = this.mCurrTime;\n }\n }\n return true;\n }\n inDoubleTapMode() {\n return this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;\n }\n setQuickScaleEnabled(scales) {\n this.mQuickScaleEnabled = scales;\n if (this.mQuickScaleEnabled && this.mGestureDetector == null) {\n let gestureListener = (() => {\n const _this = this;\n class _Inner extends view.GestureDetector.SimpleOnGestureListener {\n onDoubleTap(e) {\n _this.mDoubleTapEvent = e;\n _this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;\n return true;\n }\n }\n return new _Inner();\n })();\n this.mGestureDetector = new view.GestureDetector(gestureListener, this.mHandler);\n }\n }\n isQuickScaleEnabled() {\n return this.mQuickScaleEnabled;\n }\n isInProgress() {\n return this.mInProgress;\n }\n getFocusX() {\n return this.mFocusX;\n }\n getFocusY() {\n return this.mFocusY;\n }\n getCurrentSpan() {\n return this.mCurrSpan;\n }\n getCurrentSpanX() {\n return this.mCurrSpanX;\n }\n getCurrentSpanY() {\n return this.mCurrSpanY;\n }\n getPreviousSpan() {\n return this.mPrevSpan;\n }\n getPreviousSpanX() {\n return this.mPrevSpanX;\n }\n getPreviousSpanY() {\n return this.mPrevSpanY;\n }\n getScaleFactor() {\n if (this.inDoubleTapMode()) {\n const scaleUp = (this.mEventBeforeOrAboveStartingGestureEvent && (this.mCurrSpan < this.mPrevSpan)) || (!this.mEventBeforeOrAboveStartingGestureEvent && (this.mCurrSpan > this.mPrevSpan));\n const spanDiff = (Math.abs(1 - (this.mCurrSpan / this.mPrevSpan)) * ScaleGestureDetector.SCALE_FACTOR);\n return this.mPrevSpan <= 0 ? 1 : scaleUp ? (1 + spanDiff) : (1 - spanDiff);\n }\n return this.mPrevSpan > 0 ? this.mCurrSpan / this.mPrevSpan : 1;\n }\n getTimeDelta() {\n return this.mCurrTime - this.mPrevTime;\n }\n getEventTime() {\n return this.mCurrTime;\n }\n }\n ScaleGestureDetector.TAG = \"ScaleGestureDetector\";\n ScaleGestureDetector.TOUCH_STABILIZE_TIME = 128;\n ScaleGestureDetector.DOUBLE_TAP_MODE_NONE = 0;\n ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS = 1;\n ScaleGestureDetector.SCALE_FACTOR = .5;\n view.ScaleGestureDetector = ScaleGestureDetector;\n (function (ScaleGestureDetector) {\n class SimpleOnScaleGestureListener {\n onScale(detector) {\n return false;\n }\n onScaleBegin(detector) {\n return true;\n }\n onScaleEnd(detector) {\n }\n }\n ScaleGestureDetector.SimpleOnScaleGestureListener = SimpleOnScaleGestureListener;\n })(ScaleGestureDetector = view.ScaleGestureDetector || (view.ScaleGestureDetector = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Handler = android.os.Handler;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n class GestureDetector {\n constructor(listener, handler) {\n this.mTouchSlopSquare = 0;\n this.mDoubleTapTouchSlopSquare = 0;\n this.mDoubleTapSlopSquare = 0;\n this.mMinimumFlingVelocity = 0;\n this.mMaximumFlingVelocity = 0;\n this.mLastFocusX = 0;\n this.mLastFocusY = 0;\n this.mDownFocusX = 0;\n this.mDownFocusY = 0;\n this.mHandler = new GestureDetector.GestureHandler(this);\n this.mListener = listener;\n if (listener['setOnDoubleTapListener']) {\n this.setOnDoubleTapListener(listener);\n }\n this.init();\n }\n init() {\n if (this.mListener == null) {\n throw Error(`new NullPointerException(\"OnGestureListener must not be null\")`);\n }\n this.mIsLongpressEnabled = true;\n let touchSlop, doubleTapSlop, doubleTapTouchSlop;\n const configuration = ViewConfiguration.get();\n touchSlop = configuration.getScaledTouchSlop();\n doubleTapTouchSlop = configuration.getScaledDoubleTapTouchSlop();\n doubleTapSlop = configuration.getScaledDoubleTapSlop();\n this.mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mTouchSlopSquare = touchSlop * touchSlop;\n this.mDoubleTapTouchSlopSquare = doubleTapTouchSlop * doubleTapTouchSlop;\n this.mDoubleTapSlopSquare = doubleTapSlop * doubleTapSlop;\n }\n setOnDoubleTapListener(onDoubleTapListener) {\n this.mDoubleTapListener = onDoubleTapListener;\n }\n setIsLongpressEnabled(isLongpressEnabled) {\n this.mIsLongpressEnabled = isLongpressEnabled;\n }\n isLongpressEnabled() {\n return this.mIsLongpressEnabled;\n }\n onTouchEvent(ev) {\n const action = ev.getAction();\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n const pointerUp = (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP;\n const skipIndex = pointerUp ? ev.getActionIndex() : -1;\n let sumX = 0, sumY = 0;\n const count = ev.getPointerCount();\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n sumX += ev.getX(i);\n sumY += ev.getY(i);\n }\n const div = pointerUp ? count - 1 : count;\n const focusX = sumX / div;\n const focusY = sumY / div;\n let handled = false;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_POINTER_DOWN:\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n this.cancelTaps();\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n const upIndex = ev.getActionIndex();\n const id1 = ev.getPointerId(upIndex);\n const x1 = this.mVelocityTracker.getXVelocity(id1);\n const y1 = this.mVelocityTracker.getYVelocity(id1);\n for (let i = 0; i < count; i++) {\n if (i == upIndex)\n continue;\n const id2 = ev.getPointerId(i);\n const x = x1 * this.mVelocityTracker.getXVelocity(id2);\n const y = y1 * this.mVelocityTracker.getYVelocity(id2);\n const dot = x + y;\n if (dot < 0) {\n this.mVelocityTracker.clear();\n break;\n }\n }\n break;\n case MotionEvent.ACTION_DOWN:\n if (this.mDoubleTapListener != null) {\n let hadTapMessage = this.mHandler.hasMessages(GestureDetector.TAP);\n if (hadTapMessage)\n this.mHandler.removeMessages(GestureDetector.TAP);\n if ((this.mCurrentDownEvent != null) && (this.mPreviousUpEvent != null) && hadTapMessage && this.isConsideredDoubleTap(this.mCurrentDownEvent, this.mPreviousUpEvent, ev)) {\n this.mIsDoubleTapping = true;\n handled = this.mDoubleTapListener.onDoubleTap(this.mCurrentDownEvent) || handled;\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else {\n this.mHandler.sendEmptyMessageDelayed(GestureDetector.TAP, GestureDetector.DOUBLE_TAP_TIMEOUT);\n }\n }\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n if (this.mCurrentDownEvent != null) {\n this.mCurrentDownEvent.recycle();\n }\n this.mCurrentDownEvent = MotionEvent.obtain(ev);\n this.mAlwaysInTapRegion = true;\n this.mAlwaysInBiggerTapRegion = true;\n this.mStillDown = true;\n this.mInLongPress = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mIsLongpressEnabled) {\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.sendEmptyMessageAtTime(GestureDetector.LONG_PRESS, this.mCurrentDownEvent.getDownTime() + GestureDetector.TAP_TIMEOUT + GestureDetector.LONGPRESS_TIMEOUT);\n }\n this.mHandler.sendEmptyMessageAtTime(GestureDetector.SHOW_PRESS, this.mCurrentDownEvent.getDownTime() + GestureDetector.TAP_TIMEOUT);\n handled = this.mListener.onDown(ev) || handled;\n break;\n case MotionEvent.ACTION_MOVE:\n if (this.mInLongPress) {\n break;\n }\n const scrollX = this.mLastFocusX - focusX;\n const scrollY = this.mLastFocusY - focusY;\n if (this.mIsDoubleTapping) {\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else if (this.mAlwaysInTapRegion) {\n const deltaX = Math.floor((focusX - this.mDownFocusX));\n const deltaY = Math.floor((focusY - this.mDownFocusY));\n let distance = (deltaX * deltaX) + (deltaY * deltaY);\n if (distance > this.mTouchSlopSquare) {\n handled = this.mListener.onScroll(this.mCurrentDownEvent, ev, scrollX, scrollY);\n this.mLastFocusX = focusX;\n this.mLastFocusY = focusY;\n this.mAlwaysInTapRegion = false;\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n }\n if (distance > this.mDoubleTapTouchSlopSquare) {\n this.mAlwaysInBiggerTapRegion = false;\n }\n }\n else if ((Math.abs(scrollX) >= 1) || (Math.abs(scrollY) >= 1)) {\n handled = this.mListener.onScroll(this.mCurrentDownEvent, ev, scrollX, scrollY);\n this.mLastFocusX = focusX;\n this.mLastFocusY = focusY;\n }\n break;\n case MotionEvent.ACTION_UP:\n this.mStillDown = false;\n let currentUpEvent = MotionEvent.obtain(ev);\n if (this.mIsDoubleTapping) {\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else if (this.mInLongPress) {\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mInLongPress = false;\n }\n else if (this.mAlwaysInTapRegion) {\n handled = this.mListener.onSingleTapUp(ev);\n if (this.mDeferConfirmSingleTap && this.mDoubleTapListener != null) {\n this.mDoubleTapListener.onSingleTapConfirmed(ev);\n }\n }\n else {\n const velocityTracker = this.mVelocityTracker;\n const pointerId = ev.getPointerId(0);\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n const velocityY = velocityTracker.getYVelocity(pointerId);\n const velocityX = velocityTracker.getXVelocity(pointerId);\n if ((Math.abs(velocityY) > this.mMinimumFlingVelocity) || (Math.abs(velocityX) > this.mMinimumFlingVelocity)) {\n handled = this.mListener.onFling(this.mCurrentDownEvent, ev, velocityX, velocityY);\n }\n }\n if (this.mPreviousUpEvent != null) {\n this.mPreviousUpEvent.recycle();\n }\n this.mPreviousUpEvent = currentUpEvent;\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n this.mIsDoubleTapping = false;\n this.mDeferConfirmSingleTap = false;\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n break;\n case MotionEvent.ACTION_CANCEL:\n this.cancel();\n break;\n }\n return handled;\n }\n cancel() {\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n this.mIsDoubleTapping = false;\n this.mStillDown = false;\n this.mAlwaysInTapRegion = false;\n this.mAlwaysInBiggerTapRegion = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mInLongPress) {\n this.mInLongPress = false;\n }\n }\n cancelTaps() {\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mIsDoubleTapping = false;\n this.mAlwaysInTapRegion = false;\n this.mAlwaysInBiggerTapRegion = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mInLongPress) {\n this.mInLongPress = false;\n }\n }\n isConsideredDoubleTap(firstDown, firstUp, secondDown) {\n if (!this.mAlwaysInBiggerTapRegion) {\n return false;\n }\n const deltaTime = secondDown.getEventTime() - firstUp.getEventTime();\n if (deltaTime > GestureDetector.DOUBLE_TAP_TIMEOUT || deltaTime < GestureDetector.DOUBLE_TAP_MIN_TIME) {\n return false;\n }\n let deltaX = Math.floor(firstDown.getX()) - Math.floor(secondDown.getX());\n let deltaY = Math.floor(firstDown.getY()) - Math.floor(secondDown.getY());\n return (deltaX * deltaX + deltaY * deltaY < this.mDoubleTapSlopSquare);\n }\n dispatchLongPress() {\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mDeferConfirmSingleTap = false;\n this.mInLongPress = true;\n this.mListener.onLongPress(this.mCurrentDownEvent);\n }\n }\n GestureDetector.LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();\n GestureDetector.TAP_TIMEOUT = ViewConfiguration.getTapTimeout();\n GestureDetector.DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();\n GestureDetector.DOUBLE_TAP_MIN_TIME = ViewConfiguration.getDoubleTapMinTime();\n GestureDetector.SHOW_PRESS = 1;\n GestureDetector.LONG_PRESS = 2;\n GestureDetector.TAP = 3;\n view.GestureDetector = GestureDetector;\n (function (GestureDetector) {\n class SimpleOnGestureListener {\n onSingleTapUp(e) {\n return false;\n }\n onLongPress(e) {\n }\n onScroll(e1, e2, distanceX, distanceY) {\n return false;\n }\n onFling(e1, e2, velocityX, velocityY) {\n return false;\n }\n onShowPress(e) {\n }\n onDown(e) {\n return false;\n }\n onDoubleTap(e) {\n return false;\n }\n onDoubleTapEvent(e) {\n return false;\n }\n onSingleTapConfirmed(e) {\n return false;\n }\n }\n GestureDetector.SimpleOnGestureListener = SimpleOnGestureListener;\n class GestureHandler extends Handler {\n constructor(arg) {\n super();\n this._GestureDetector_this = arg;\n }\n handleMessage(msg) {\n switch (msg.what) {\n case GestureDetector.SHOW_PRESS:\n this._GestureDetector_this.mListener.onShowPress(this._GestureDetector_this.mCurrentDownEvent);\n break;\n case GestureDetector.LONG_PRESS:\n this._GestureDetector_this.dispatchLongPress();\n break;\n case GestureDetector.TAP:\n if (this._GestureDetector_this.mDoubleTapListener != null) {\n if (!this._GestureDetector_this.mStillDown) {\n this._GestureDetector_this.mDoubleTapListener.onSingleTapConfirmed(this._GestureDetector_this.mCurrentDownEvent);\n }\n else {\n this._GestureDetector_this.mDeferConfirmSingleTap = true;\n }\n }\n break;\n default:\n throw Error(`new RuntimeException(\"Unknown message \" + msg)`);\n }\n }\n }\n GestureDetector.GestureHandler = GestureHandler;\n })(GestureDetector = view.GestureDetector || (view.GestureDetector = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class NumberChecker {\n static warnNotNumber(...n) {\n try {\n this.assetNotNumber(...n);\n }\n catch (e) {\n console.error(e);\n return true;\n }\n return false;\n }\n static assetNotNumber(...ns) {\n if (!this.checkIsNumber()) {\n throw Error('assetNotNumber : ' + ns);\n }\n }\n static checkIsNumber(...ns) {\n if (ns == null)\n return false;\n for (let n of ns) {\n if (n == null || Number.isNaN(n))\n return false;\n }\n return true;\n }\n }\n util.NumberChecker = NumberChecker;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ViewConfiguration = android.view.ViewConfiguration;\n var Resources = android.content.res.Resources;\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var NumberChecker = androidui.util.NumberChecker;\n class OverScroller {\n constructor(interpolator, flywheel = true) {\n this.mMode = 0;\n this.mFlywheel = true;\n this.mInterpolator = interpolator;\n this.mFlywheel = flywheel;\n this.mScrollerX = new SplineOverScroller();\n this.mScrollerY = new SplineOverScroller();\n }\n setInterpolator(interpolator) {\n this.mInterpolator = interpolator;\n }\n setFriction(friction) {\n NumberChecker.warnNotNumber(friction);\n this.mScrollerX.setFriction(friction);\n this.mScrollerY.setFriction(friction);\n }\n isFinished() {\n return this.mScrollerX.mFinished && this.mScrollerY.mFinished;\n }\n forceFinished(finished) {\n this.mScrollerX.mFinished = this.mScrollerY.mFinished = finished;\n }\n getCurrX() {\n return this.mScrollerX.mCurrentPosition;\n }\n getCurrY() {\n return this.mScrollerY.mCurrentPosition;\n }\n getCurrVelocity() {\n let squaredNorm = this.mScrollerX.mCurrVelocity * this.mScrollerX.mCurrVelocity;\n squaredNorm += this.mScrollerY.mCurrVelocity * this.mScrollerY.mCurrVelocity;\n return Math.sqrt(squaredNorm);\n }\n getStartX() {\n return this.mScrollerX.mStart;\n }\n getStartY() {\n return this.mScrollerY.mStart;\n }\n getFinalX() {\n return this.mScrollerX.mFinal;\n }\n getFinalY() {\n return this.mScrollerY.mFinal;\n }\n getDuration() {\n return Math.max(this.mScrollerX.mDuration, this.mScrollerY.mDuration);\n }\n computeScrollOffset() {\n if (this.isFinished()) {\n return false;\n }\n switch (this.mMode) {\n case OverScroller.SCROLL_MODE:\n let time = SystemClock.uptimeMillis();\n const elapsedTime = time - this.mScrollerX.mStartTime;\n const duration = this.mScrollerX.mDuration;\n if (elapsedTime < duration) {\n let q = (elapsedTime) / duration;\n if (this.mInterpolator == null) {\n q = Scroller_viscousFluid(q);\n }\n else {\n q = this.mInterpolator.getInterpolation(q);\n }\n this.mScrollerX.updateScroll(q);\n this.mScrollerY.updateScroll(q);\n }\n else {\n this.abortAnimation();\n }\n break;\n case OverScroller.FLING_MODE:\n if (!this.mScrollerX.mFinished) {\n if (!this.mScrollerX.update()) {\n if (!this.mScrollerX.continueWhenFinished()) {\n this.mScrollerX.finish();\n }\n }\n }\n if (!this.mScrollerY.mFinished) {\n if (!this.mScrollerY.update()) {\n if (!this.mScrollerY.continueWhenFinished()) {\n this.mScrollerY.finish();\n }\n }\n }\n break;\n }\n return true;\n }\n startScroll(startX, startY, dx, dy, duration = OverScroller.DEFAULT_DURATION) {\n NumberChecker.warnNotNumber(startX, startY, dx, dy, duration);\n this.mMode = OverScroller.SCROLL_MODE;\n this.mScrollerX.startScroll(startX, dx, duration);\n this.mScrollerY.startScroll(startY, dy, duration);\n }\n springBack(startX, startY, minX, maxX, minY, maxY) {\n NumberChecker.warnNotNumber(startX, startY, minX, maxX, minY, maxY);\n this.mMode = OverScroller.FLING_MODE;\n const spingbackX = this.mScrollerX.springback(startX, minX, maxX);\n const spingbackY = this.mScrollerY.springback(startY, minY, maxY);\n return spingbackX || spingbackY;\n }\n fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) {\n NumberChecker.warnNotNumber(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n if (this.mFlywheel && !this.isFinished()) {\n let oldVelocityX = this.mScrollerX.mCurrVelocity;\n let oldVelocityY = this.mScrollerY.mCurrVelocity;\n if (Math_signum(velocityX) == Math_signum(oldVelocityX) &&\n Math_signum(velocityY) == Math_signum(oldVelocityY)) {\n velocityX += oldVelocityX;\n velocityY += oldVelocityY;\n }\n }\n this.mMode = OverScroller.FLING_MODE;\n this.mScrollerX.fling(startX, velocityX, minX, maxX, overX);\n this.mScrollerY.fling(startY, velocityY, minY, maxY, overY);\n }\n notifyHorizontalEdgeReached(startX, finalX, overX) {\n NumberChecker.warnNotNumber(startX, finalX, overX);\n this.mScrollerX.notifyEdgeReached(startX, finalX, overX);\n }\n notifyVerticalEdgeReached(startY, finalY, overY) {\n NumberChecker.warnNotNumber(startY, finalY, overY);\n this.mScrollerY.notifyEdgeReached(startY, finalY, overY);\n }\n isOverScrolled() {\n return ((!this.mScrollerX.mFinished &&\n this.mScrollerX.mState != SplineOverScroller.SPLINE) ||\n (!this.mScrollerY.mFinished &&\n this.mScrollerY.mState != SplineOverScroller.SPLINE));\n }\n abortAnimation() {\n this.mScrollerX.finish();\n this.mScrollerY.finish();\n }\n timePassed() {\n const time = SystemClock.uptimeMillis();\n const startTime = Math.min(this.mScrollerX.mStartTime, this.mScrollerY.mStartTime);\n return (time - startTime);\n }\n isScrollingInDirection(xvel, yvel) {\n const dx = this.mScrollerX.mFinal - this.mScrollerX.mStart;\n const dy = this.mScrollerY.mFinal - this.mScrollerY.mStart;\n return !this.isFinished() && Math_signum(xvel) == Math_signum(dx) &&\n Math_signum(yvel) == Math_signum(dy);\n }\n }\n OverScroller.DEFAULT_DURATION = 250;\n OverScroller.SCROLL_MODE = 0;\n OverScroller.FLING_MODE = 1;\n widget.OverScroller = OverScroller;\n class SplineOverScroller {\n constructor() {\n this.mStart = 0;\n this.mCurrentPosition = 0;\n this.mFinal = 0;\n this.mVelocity = 0;\n this._mCurrVelocity = 0;\n this.mDeceleration = 0;\n this.mStartTime = 0;\n this.mDuration = 0;\n this.mSplineDuration = 0;\n this.mSplineDistance = 0;\n this.mFinished = false;\n this.mOver = 0;\n this.mFlingFriction = ViewConfiguration.getScrollFriction();\n this.mState = SplineOverScroller.SPLINE;\n this.mPhysicalCoeff = 0;\n this.mFinished = true;\n let ppi = Resources.getDisplayMetrics().density * 160;\n this.mPhysicalCoeff = 9.80665\n * 39.37\n * ppi\n * 0.84;\n }\n get mCurrVelocity() {\n return this._mCurrVelocity;\n }\n set mCurrVelocity(value) {\n if (!NumberChecker.checkIsNumber(value)) {\n value = 0;\n }\n this._mCurrVelocity = value;\n }\n setFriction(friction) {\n this.mFlingFriction = friction;\n }\n updateScroll(q) {\n this.mCurrentPosition = this.mStart + Math.round(q * (this.mFinal - this.mStart));\n }\n static getDeceleration(velocity) {\n return velocity > 0 ? -SplineOverScroller.GRAVITY : SplineOverScroller.GRAVITY;\n }\n adjustDuration(start, oldFinal, newFinal) {\n let oldDistance = oldFinal - start;\n let newDistance = newFinal - start;\n let x = Math.abs(newDistance / oldDistance);\n let index = Math.floor(SplineOverScroller.NB_SAMPLES * x);\n if (index < SplineOverScroller.NB_SAMPLES) {\n let x_inf = index / SplineOverScroller.NB_SAMPLES;\n let x_sup = (index + 1) / SplineOverScroller.NB_SAMPLES;\n let t_inf = SplineOverScroller.SPLINE_TIME[index];\n let t_sup = SplineOverScroller.SPLINE_TIME[index + 1];\n let timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf);\n this.mDuration *= timeCoef;\n }\n }\n startScroll(start, distance, duration) {\n this.mFinished = false;\n this.mStart = start;\n this.mFinal = start + distance;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mDuration = duration;\n this.mDeceleration = 0;\n this.mVelocity = 0;\n }\n finish() {\n this.mCurrentPosition = this.mFinal;\n this.mFinished = true;\n }\n setFinalPosition(position) {\n this.mFinal = position;\n this.mFinished = false;\n }\n extendDuration(extend) {\n let time = SystemClock.uptimeMillis();\n let elapsedTime = (time - this.mStartTime);\n this.mDuration = elapsedTime + extend;\n this.mFinished = false;\n }\n springback(start, min, max) {\n this.mFinished = true;\n this.mStart = this.mFinal = start;\n this.mVelocity = 0;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mDuration = 0;\n if (start < min) {\n this.startSpringback(start, min, 0);\n }\n else if (start > max) {\n this.startSpringback(start, max, 0);\n }\n return !this.mFinished;\n }\n startSpringback(start, end, velocity) {\n this.mFinished = false;\n this.mState = SplineOverScroller.CUBIC;\n this.mStart = start;\n this.mFinal = end;\n const delta = start - end;\n this.mDeceleration = SplineOverScroller.getDeceleration(delta);\n this.mVelocity = -delta;\n this.mOver = Math.abs(delta);\n const density = android.content.res.Resources.getDisplayMetrics().density;\n this.mDuration = Math.floor(1000.0 * Math.sqrt(-2.0 * (delta / density) / this.mDeceleration));\n }\n fling(start, velocity, min, max, over) {\n this.mOver = over;\n this.mFinished = false;\n this.mCurrVelocity = this.mVelocity = velocity;\n this.mDuration = this.mSplineDuration = 0;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mCurrentPosition = this.mStart = start;\n if (start > max || start < min) {\n this.startAfterEdge(start, min, max, velocity);\n return;\n }\n this.mState = SplineOverScroller.SPLINE;\n let totalDistance = 0.0;\n if (velocity != 0) {\n this.mDuration = this.mSplineDuration = this.getSplineFlingDuration(velocity);\n totalDistance = this.getSplineFlingDistance(velocity);\n }\n this.mSplineDistance = (totalDistance * Math_signum(velocity));\n this.mFinal = start + this.mSplineDistance;\n if (this.mFinal < min) {\n this.adjustDuration(this.mStart, this.mFinal, min);\n this.mFinal = min;\n }\n if (this.mFinal > max) {\n this.adjustDuration(this.mStart, this.mFinal, max);\n this.mFinal = max;\n }\n }\n getSplineDeceleration(velocity) {\n return Math.log(SplineOverScroller.INFLEXION * Math.abs(velocity) / (this.mFlingFriction * this.mPhysicalCoeff));\n }\n getSplineFlingDistance(velocity) {\n let l = this.getSplineDeceleration(velocity);\n let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0;\n return this.mFlingFriction * this.mPhysicalCoeff * Math.exp(SplineOverScroller.DECELERATION_RATE / decelMinusOne * l);\n }\n getSplineFlingDuration(velocity) {\n let l = this.getSplineDeceleration(velocity);\n let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0;\n return (1000.0 * Math.exp(l / decelMinusOne));\n }\n fitOnBounceCurve(start, end, velocity) {\n let durationToApex = -velocity / this.mDeceleration;\n let distanceToApex = velocity * velocity / 2.0 / Math.abs(this.mDeceleration);\n let distanceToEdge = Math.abs(end - start);\n let totalDuration = Math.sqrt(2.0 * (distanceToApex + distanceToEdge) / Math.abs(this.mDeceleration));\n this.mStartTime -= (1000 * (totalDuration - durationToApex));\n this.mStart = end;\n this.mVelocity = (-this.mDeceleration * totalDuration);\n }\n startBounceAfterEdge(start, end, velocity) {\n this.mDeceleration = SplineOverScroller.getDeceleration(velocity == 0 ? start - end : velocity);\n this.fitOnBounceCurve(start, end, velocity);\n this.onEdgeReached();\n }\n startAfterEdge(start, min, max, velocity) {\n if (start > min && start < max) {\n Log.e(\"OverScroller\", \"startAfterEdge called from a valid position\");\n this.mFinished = true;\n return;\n }\n const positive = start > max;\n const edge = positive ? max : min;\n const overDistance = start - edge;\n let keepIncreasing = overDistance * velocity >= 0;\n if (keepIncreasing) {\n this.startBounceAfterEdge(start, edge, velocity);\n }\n else {\n const totalDistance = this.getSplineFlingDistance(velocity);\n if (totalDistance > Math.abs(overDistance)) {\n this.fling(start, velocity, positive ? min : start, positive ? start : max, this.mOver);\n }\n else {\n this.startSpringback(start, edge, velocity);\n }\n }\n }\n notifyEdgeReached(start, end, over) {\n if (this.mState == SplineOverScroller.SPLINE) {\n this.mOver = over;\n this.mStartTime = SystemClock.uptimeMillis();\n this.startAfterEdge(start, end, end, this.mCurrVelocity);\n }\n }\n onEdgeReached() {\n let distance = this.mVelocity * this.mVelocity / (2 * Math.abs(this.mDeceleration));\n const sign = Math_signum(this.mVelocity);\n if (distance > this.mOver) {\n this.mDeceleration = -sign * this.mVelocity * this.mVelocity / (2.0 * this.mOver);\n distance = this.mOver;\n }\n this.mOver = distance;\n this.mState = SplineOverScroller.BALLISTIC;\n this.mFinal = this.mStart + (this.mVelocity > 0 ? distance : -distance);\n this.mDuration = -(1000 * this.mVelocity / this.mDeceleration);\n }\n continueWhenFinished() {\n switch (this.mState) {\n case SplineOverScroller.SPLINE:\n if (this.mDuration < this.mSplineDuration) {\n this.mStart = this.mFinal;\n this.mVelocity = this.mCurrVelocity;\n this.mDeceleration = SplineOverScroller.getDeceleration(this.mVelocity);\n this.mStartTime += this.mDuration;\n this.onEdgeReached();\n }\n else {\n return false;\n }\n break;\n case SplineOverScroller.BALLISTIC:\n this.mStartTime += this.mDuration;\n this.startSpringback(this.mFinal, this.mStart, 0);\n break;\n case SplineOverScroller.CUBIC:\n return false;\n }\n this.update();\n return true;\n }\n update() {\n const time = SystemClock.uptimeMillis();\n const currentTime = time - this.mStartTime;\n if (currentTime > this.mDuration) {\n return false;\n }\n let distance = 0;\n switch (this.mState) {\n case SplineOverScroller.SPLINE: {\n const t = currentTime / this.mSplineDuration;\n const index = Math.floor(SplineOverScroller.NB_SAMPLES * t);\n let distanceCoef = 1;\n let velocityCoef = 0;\n if (index < SplineOverScroller.NB_SAMPLES) {\n const t_inf = index / SplineOverScroller.NB_SAMPLES;\n const t_sup = (index + 1) / SplineOverScroller.NB_SAMPLES;\n const d_inf = SplineOverScroller.SPLINE_POSITION[index];\n const d_sup = SplineOverScroller.SPLINE_POSITION[index + 1];\n velocityCoef = (d_sup - d_inf) / (t_sup - t_inf);\n distanceCoef = d_inf + (t - t_inf) * velocityCoef;\n }\n distance = distanceCoef * this.mSplineDistance;\n this.mCurrVelocity = velocityCoef * this.mSplineDistance / this.mSplineDuration * 1000;\n break;\n }\n case SplineOverScroller.BALLISTIC: {\n const t = currentTime / 1000;\n this.mCurrVelocity = this.mVelocity + this.mDeceleration * t;\n distance = this.mVelocity * t + this.mDeceleration * t * t / 2;\n break;\n }\n case SplineOverScroller.CUBIC: {\n const t = (currentTime) / this.mDuration;\n const t2 = t * t;\n const sign = Math_signum(this.mVelocity);\n distance = sign * this.mOver * (3 * t2 - 2 * t * t2);\n this.mCurrVelocity = sign * this.mOver * 6 * (-t + t2);\n break;\n }\n }\n this.mCurrentPosition = this.mStart + Math.round(distance);\n return true;\n }\n }\n SplineOverScroller.DECELERATION_RATE = (Math.log(0.78) / Math.log(0.9));\n SplineOverScroller.INFLEXION = 0.35;\n SplineOverScroller.START_TENSION = 0.5;\n SplineOverScroller.END_TENSION = 1.0;\n SplineOverScroller.P1 = SplineOverScroller.START_TENSION * SplineOverScroller.INFLEXION;\n SplineOverScroller.P2 = 1.0 - SplineOverScroller.END_TENSION * (1 - SplineOverScroller.INFLEXION);\n SplineOverScroller.NB_SAMPLES = 100;\n SplineOverScroller.SPLINE_POSITION = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE_TIME = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE = 0;\n SplineOverScroller.CUBIC = 1;\n SplineOverScroller.BALLISTIC = 2;\n SplineOverScroller.GRAVITY = 2000;\n SplineOverScroller._staticFunc = function () {\n let x_min = 0.0;\n let y_min = 0.0;\n for (let i = 0; i < SplineOverScroller.NB_SAMPLES; i++) {\n const alpha = i / SplineOverScroller.NB_SAMPLES;\n let x_max = 1.0;\n let x, tx, coef;\n while (true) {\n x = x_min + (x_max - x_min) / 2.0;\n coef = 3.0 * x * (1.0 - x);\n tx = coef * ((1.0 - x) * SplineOverScroller.P1 + x * SplineOverScroller.P2) + x * x * x;\n if (Math.abs(tx - alpha) < 1E-5)\n break;\n if (tx > alpha)\n x_max = x;\n else\n x_min = x;\n }\n SplineOverScroller.SPLINE_POSITION[i] = coef * ((1.0 - x) * SplineOverScroller.START_TENSION + x) + x * x * x;\n let y_max = 1.0;\n let y, dy;\n while (true) {\n y = y_min + (y_max - y_min) / 2.0;\n coef = 3.0 * y * (1.0 - y);\n dy = coef * ((1.0 - y) * SplineOverScroller.START_TENSION + y) + y * y * y;\n if (Math.abs(dy - alpha) < 1E-5)\n break;\n if (dy > alpha)\n y_max = y;\n else\n y_min = y;\n }\n SplineOverScroller.SPLINE_TIME[i] = coef * ((1.0 - y) * SplineOverScroller.P1 + y * SplineOverScroller.P2) + y * y * y;\n }\n SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES] = SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES] = 1.0;\n }();\n function Math_signum(value) {\n if (value === 0 || Number.isNaN(value))\n return value;\n return Math.abs(value) === value ? 1 : -1;\n }\n let sViscousFluidScale = 8;\n let sViscousFluidNormalize = 1;\n function Scroller_viscousFluid(x) {\n x *= sViscousFluidScale;\n if (x < 1) {\n x -= (1 - Math.exp(-x));\n }\n else {\n let start = 0.36787944117;\n x = 1 - Math.exp(1 - x);\n x = start + x * (1 - start);\n }\n x *= sViscousFluidNormalize;\n return x;\n }\n sViscousFluidNormalize = 1 / Scroller_viscousFluid(1);\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var MeasureSpec = View.MeasureSpec;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var Rect = android.graphics.Rect;\n var OverScroller = android.widget.OverScroller;\n var Log = android.util.Log;\n var SystemClock = android.os.SystemClock;\n var KeyEvent = android.view.KeyEvent;\n var FocusFinder = android.view.FocusFinder;\n class ScrollView extends widget.FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mLastScroll = 0;\n this.mTempRect = new Rect();\n this.mLastMotionY = 0;\n this.mIsLayoutDirty = true;\n this.mIsBeingDragged = false;\n this.mFillViewport = false;\n this.mSmoothScrollingEnabled = true;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mOverscrollDistance = 0;\n this._mOverflingDistance = 0;\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.initScrollView();\n this._attrBinder.addAttr('fillViewport', (value) => {\n this.setFillViewport(this._attrBinder.parseBoolean(value));\n });\n }\n get mOverflingDistance() {\n let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n let bottom = this.getChildAt(0).getHeight();\n let minOverY = this.mScrollY < 0 ? -this.mScrollY : this.mScrollY - (bottom - height);\n return Math.max(this._mOverflingDistance, minOverY + this._mOverflingDistance);\n }\n set mOverflingDistance(value) {\n this._mOverflingDistance = value;\n }\n shouldDelayChildPressedState() {\n return true;\n }\n getMaxScrollAmount() {\n return (ScrollView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop));\n }\n initScrollView() {\n this.mScroller = new OverScroller();\n this.setFocusable(true);\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n this.setWillNotDraw(false);\n const configuration = ViewConfiguration.get();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this.mOverflingDistance = configuration.getScaledOverflingDistance();\n this.initScrollCache();\n this.setVerticalScrollBarEnabled(true);\n }\n addView(...args) {\n if (this.getChildCount() > 0) {\n throw new Error(\"ScrollView can host only one direct child\");\n }\n return super.addView(...args);\n }\n canScroll() {\n let child = this.getChildAt(0);\n if (child != null) {\n let childHeight = child.getHeight();\n return this.getHeight() < childHeight + this.mPaddingTop + this.mPaddingBottom;\n }\n return false;\n }\n isFillViewport() {\n return this.mFillViewport;\n }\n setFillViewport(fillViewport) {\n if (fillViewport != this.mFillViewport) {\n this.mFillViewport = fillViewport;\n this.requestLayout();\n }\n }\n isSmoothScrollingEnabled() {\n return this.mSmoothScrollingEnabled;\n }\n setSmoothScrollingEnabled(smoothScrollingEnabled) {\n this.mSmoothScrollingEnabled = smoothScrollingEnabled;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (!this.mFillViewport) {\n return;\n }\n const heightMode = MeasureSpec.getMode(heightMeasureSpec);\n if (heightMode == MeasureSpec.UNSPECIFIED) {\n return;\n }\n if (this.getChildCount() > 0) {\n const child = this.getChildAt(0);\n let height = this.getMeasuredHeight();\n if (child.getMeasuredHeight() < height) {\n const lp = child.getLayoutParams();\n let childWidthMeasureSpec = widget.FrameLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width);\n height -= this.mPaddingTop;\n height -= this.mPaddingBottom;\n let childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n this.mTempRect.setEmpty();\n if (!this.canScroll()) {\n if (this.isFocused() && event.getKeyCode() != KeyEvent.KEYCODE_BACK) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_DOWN);\n return nextFocused != null\n && nextFocused != this\n && nextFocused.requestFocus(View.FOCUS_DOWN);\n }\n return false;\n }\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_UP:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_UP);\n }\n else {\n handled = this.fullScroll(View.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_DOWN);\n }\n else {\n handled = this.fullScroll(View.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n this.pageScroll(event.isShiftPressed() ? View.FOCUS_UP : View.FOCUS_DOWN);\n break;\n }\n }\n return handled;\n }\n inChild(x, y) {\n if (this.getChildCount() > 0) {\n const scrollY = this.mScrollY;\n const child = this.getChildAt(0);\n return !(y < child.getTop() - scrollY\n || y >= child.getBottom() - scrollY\n || x < child.getLeft()\n || x >= child.getRight());\n }\n return false;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction();\n if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) {\n return true;\n }\n if (this.getScrollY() == 0 && !this.canScrollVertically(1)) {\n return false;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_MOVE:\n {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == ScrollView.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n if (pointerIndex == -1) {\n Log.e(ScrollView.TAG, \"Invalid pointerId=\" + activePointerId\n + \" in onInterceptTouchEvent\");\n break;\n }\n const y = ev.getY(pointerIndex);\n const yDiff = Math.abs(y - this.mLastMotionY);\n if (yDiff > this.mTouchSlop) {\n this.mIsBeingDragged = true;\n this.mLastMotionY = y;\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n break;\n }\n case MotionEvent.ACTION_DOWN:\n {\n const y = ev.getY();\n if (!this.inChild(ev.getX(), y)) {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n break;\n }\n this.mLastMotionY = y;\n this.mActivePointerId = ev.getPointerId(0);\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n this.mIsBeingDragged = !this.mScroller.isFinished();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mIsBeingDragged = false;\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.recycleVelocityTracker();\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n if (this.getChildCount() == 0) {\n return false;\n }\n if ((this.mIsBeingDragged = !this.mScroller.isFinished())) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.mLastMotionY = ev.getY();\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex == -1) {\n Log.e(ScrollView.TAG, \"Invalid pointerId=\" + this.mActivePointerId + \" in onTouchEvent\");\n break;\n }\n const y = ev.getY(activePointerIndex);\n let deltaY = this.mLastMotionY - y;\n if (!this.mIsBeingDragged && Math.abs(deltaY) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.mIsBeingDragged = true;\n if (deltaY > 0) {\n deltaY -= this.mTouchSlop;\n }\n else {\n deltaY += this.mTouchSlop;\n }\n }\n if (this.mIsBeingDragged) {\n this.mLastMotionY = y;\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS ||\n (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n if (this.overScrollBy(0, deltaY, 0, this.mScrollY, 0, range, 0, this.mOverscrollDistance, true)) {\n this.mVelocityTracker.clear();\n }\n if (canOverscroll) {\n const pulledToY = oldY + deltaY;\n if (pulledToY < 0) {\n }\n else if (pulledToY > range) {\n }\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n let velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = velocityTracker.getYVelocity(this.mActivePointerId);\n if (this.getChildCount() > 0) {\n let forceSpringBack = (this.mScrollY < -this._mOverflingDistance && initialVelocity > 0)\n || (this.mScrollY > (this.getScrollRange() + this._mOverflingDistance) && initialVelocity < 0);\n if (!forceSpringBack && (Math.abs(initialVelocity) > this.mMinimumVelocity)) {\n this.fling(-initialVelocity);\n }\n else {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.endDrag();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged && this.getChildCount() > 0) {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.endDrag();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const index = ev.getActionIndex();\n this.mLastMotionY = ev.getY(index);\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionY = ev.getY(ev.findPointerIndex(this.mActivePointerId));\n break;\n }\n return true;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>\n MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionY = ev.getY(newPointerIndex);\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n onGenericMotionEvent(event) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL: {\n if (!this.mIsBeingDragged) {\n const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (vscroll != 0) {\n const delta = Math.floor(vscroll * this.getVerticalScrollFactor());\n const range = this.getScrollRange();\n let oldScrollY = this.mScrollY;\n let newScrollY = oldScrollY - delta;\n if (newScrollY < 0) {\n newScrollY = 0;\n }\n else if (newScrollY > range) {\n newScrollY = range;\n }\n if (newScrollY != oldScrollY) {\n super.scrollTo(this.mScrollX, newScrollY);\n return true;\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (!this.mScroller.isFinished()) {\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n this.mScrollX = scrollX;\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n }\n else {\n super.scrollTo(scrollX, scrollY);\n }\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n getScrollRange() {\n let scrollRange = 0;\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n scrollRange = Math.max(0, child.getHeight() - (this.getHeight() - this.mPaddingBottom - this.mPaddingTop));\n }\n return scrollRange;\n }\n findFocusableViewInBounds(topFocus, top, bottom) {\n let focusables = this.getFocusables(View.FOCUS_FORWARD);\n let focusCandidate = null;\n let foundFullyContainedFocusable = false;\n let count = focusables.size();\n for (let i = 0; i < count; i++) {\n let view = focusables.get(i);\n let viewTop = view.getTop();\n let viewBottom = view.getBottom();\n if (top < viewBottom && viewTop < bottom) {\n const viewIsFullyContained = (top < viewTop) && (viewBottom < bottom);\n if (focusCandidate == null) {\n focusCandidate = view;\n foundFullyContainedFocusable = viewIsFullyContained;\n }\n else {\n const viewIsCloserToBoundary = (topFocus && viewTop < focusCandidate.getTop()) || (!topFocus && viewBottom > focusCandidate.getBottom());\n if (foundFullyContainedFocusable) {\n if (viewIsFullyContained && viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n else {\n if (viewIsFullyContained) {\n focusCandidate = view;\n foundFullyContainedFocusable = true;\n }\n else if (viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n }\n }\n }\n return focusCandidate;\n }\n pageScroll(direction) {\n let down = direction == View.FOCUS_DOWN;\n let height = this.getHeight();\n if (down) {\n this.mTempRect.top = this.getScrollY() + height;\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(count - 1);\n if (this.mTempRect.top + height > view.getBottom()) {\n this.mTempRect.top = view.getBottom() - height;\n }\n }\n }\n else {\n this.mTempRect.top = this.getScrollY() - height;\n if (this.mTempRect.top < 0) {\n this.mTempRect.top = 0;\n }\n }\n this.mTempRect.bottom = this.mTempRect.top + height;\n return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom);\n }\n fullScroll(direction) {\n let down = direction == View.FOCUS_DOWN;\n let height = this.getHeight();\n this.mTempRect.top = 0;\n this.mTempRect.bottom = height;\n if (down) {\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(count - 1);\n this.mTempRect.bottom = view.getBottom() + this.mPaddingBottom;\n this.mTempRect.top = this.mTempRect.bottom - height;\n }\n }\n return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom);\n }\n scrollAndFocus(direction, top, bottom) {\n let handled = true;\n let height = this.getHeight();\n let containerTop = this.getScrollY();\n let containerBottom = containerTop + height;\n let up = direction == View.FOCUS_UP;\n let newFocused = this.findFocusableViewInBounds(up, top, bottom);\n if (newFocused == null) {\n newFocused = this;\n }\n if (top >= containerTop && bottom <= containerBottom) {\n handled = false;\n }\n else {\n let delta = up ? (top - containerTop) : (bottom - containerBottom);\n this.doScrollY(delta);\n }\n if (newFocused != this.findFocus())\n newFocused.requestFocus(direction);\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n const maxJump = this.getMaxScrollAmount();\n if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump, this.getHeight())) {\n nextFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollY(scrollDelta);\n nextFocused.requestFocus(direction);\n }\n else {\n let scrollDelta = maxJump;\n if (direction == View.FOCUS_UP && this.getScrollY() < scrollDelta) {\n scrollDelta = this.getScrollY();\n }\n else if (direction == View.FOCUS_DOWN) {\n if (this.getChildCount() > 0) {\n let daBottom = this.getChildAt(0).getBottom();\n let screenBottom = this.getScrollY() + this.getHeight() - this.mPaddingBottom;\n if (daBottom - screenBottom < maxJump) {\n scrollDelta = daBottom - screenBottom;\n }\n }\n }\n if (scrollDelta == 0) {\n return false;\n }\n this.doScrollY(direction == View.FOCUS_DOWN ? scrollDelta : -scrollDelta);\n }\n if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) {\n const descendantFocusability = this.getDescendantFocusability();\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.requestFocus();\n this.setDescendantFocusability(descendantFocusability);\n }\n return true;\n }\n isOffScreen(descendant) {\n return !this.isWithinDeltaOfScreen(descendant, 0, this.getHeight());\n }\n isWithinDeltaOfScreen(descendant, delta, height) {\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n return (this.mTempRect.bottom + delta) >= this.getScrollY()\n && (this.mTempRect.top - delta) <= (this.getScrollY() + height);\n }\n doScrollY(delta) {\n if (delta != 0) {\n if (this.mSmoothScrollingEnabled) {\n this.smoothScrollBy(0, delta);\n }\n else {\n this.scrollBy(0, delta);\n }\n }\n }\n smoothScrollBy(dx, dy) {\n if (this.getChildCount() == 0) {\n return;\n }\n let duration = SystemClock.uptimeMillis() - this.mLastScroll;\n if (duration > ScrollView.ANIMATED_SCROLL_GAP) {\n const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n const bottom = this.getChildAt(0).getHeight();\n const maxY = Math.max(0, bottom - height);\n const scrollY = this.mScrollY;\n dy = Math.max(0, Math.min(scrollY + dy, maxY)) - scrollY;\n this.mScroller.startScroll(this.mScrollX, scrollY, 0, dy);\n this.postInvalidateOnAnimation();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = SystemClock.uptimeMillis();\n }\n smoothScrollTo(x, y) {\n this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY);\n }\n computeVerticalScrollRange() {\n const count = this.getChildCount();\n const contentHeight = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n if (count == 0) {\n return contentHeight;\n }\n let scrollRange = this.getChildAt(0).getBottom();\n const scrollY = this.mScrollY;\n const overscrollBottom = Math.max(0, scrollRange - contentHeight);\n if (scrollY < 0) {\n scrollRange -= scrollY;\n }\n else if (scrollY > overscrollBottom) {\n scrollRange += scrollY - overscrollBottom;\n }\n return scrollRange;\n }\n computeVerticalScrollOffset() {\n return Math.max(0, super.computeVerticalScrollOffset());\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec;\n lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec;\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft\n + this.mPaddingRight, lp.width);\n childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n lp._measuringParentWidthMeasureSpec = null;\n lp._measuringParentHeightMeasureSpec = null;\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n const lp = child.getLayoutParams();\n lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec;\n lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec;\n const childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin\n + widthUsed, lp.width);\n const childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.topMargin + lp.bottomMargin, MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n lp._measuringParentWidthMeasureSpec = null;\n lp._measuringParentHeightMeasureSpec = null;\n }\n computeScroll() {\n if (this.mScroller.computeScrollOffset()) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS ||\n (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n this.overScrollBy(x - oldX, y - oldY, oldX, oldY, 0, range, 0, this.mOverflingDistance, false);\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (canOverscroll) {\n if (y < 0 && oldY >= 0) {\n }\n else if (y > range && oldY <= range) {\n }\n }\n }\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n else {\n }\n }\n scrollToChild(child) {\n child.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(child, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n if (scrollDelta != 0) {\n this.scrollBy(0, scrollDelta);\n }\n }\n scrollToChildRect(rect, immediate) {\n const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect);\n const scroll = delta != 0;\n if (scroll) {\n if (immediate) {\n this.scrollBy(0, delta);\n }\n else {\n this.smoothScrollBy(0, delta);\n }\n }\n return scroll;\n }\n computeScrollDeltaToGetChildRectOnScreen(rect) {\n if (this.getChildCount() == 0)\n return 0;\n let height = this.getHeight();\n let screenTop = this.getScrollY();\n let screenBottom = screenTop + height;\n let fadingEdge = this.getVerticalFadingEdgeLength();\n if (rect.top > 0) {\n screenTop += fadingEdge;\n }\n if (rect.bottom < this.getChildAt(0).getHeight()) {\n screenBottom -= fadingEdge;\n }\n let scrollYDelta = 0;\n if (rect.bottom > screenBottom && rect.top > screenTop) {\n if (rect.height() > height) {\n scrollYDelta += (rect.top - screenTop);\n }\n else {\n scrollYDelta += (rect.bottom - screenBottom);\n }\n let bottom = this.getChildAt(0).getBottom();\n let distanceToBottom = bottom - screenBottom;\n scrollYDelta = Math.min(scrollYDelta, distanceToBottom);\n }\n else if (rect.top < screenTop && rect.bottom < screenBottom) {\n if (rect.height() > height) {\n scrollYDelta -= (screenBottom - rect.bottom);\n }\n else {\n scrollYDelta -= (screenTop - rect.top);\n }\n scrollYDelta = Math.max(scrollYDelta, -this.getScrollY());\n }\n return scrollYDelta;\n }\n requestChildFocus(child, focused) {\n if (!this.mIsLayoutDirty) {\n this.scrollToChild(focused);\n }\n else {\n this.mChildToScrollTo = focused;\n }\n super.requestChildFocus(child, focused);\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n if (direction == View.FOCUS_FORWARD) {\n direction = View.FOCUS_DOWN;\n }\n else if (direction == View.FOCUS_BACKWARD) {\n direction = View.FOCUS_UP;\n }\n const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction);\n if (nextFocus == null) {\n return false;\n }\n if (this.isOffScreen(nextFocus)) {\n return false;\n }\n return nextFocus.requestFocus(direction, previouslyFocusedRect);\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY());\n return this.scrollToChildRect(rectangle, immediate);\n }\n requestLayout() {\n this.mIsLayoutDirty = true;\n super.requestLayout();\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mIsLayoutDirty = false;\n if (this.mChildToScrollTo != null && ScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) {\n this.scrollToChild(this.mChildToScrollTo);\n }\n this.mChildToScrollTo = null;\n if (!this.isLaidOut()) {\n const childHeight = (this.getChildCount() > 0) ? this.getChildAt(0).getMeasuredHeight() : 0;\n const scrollRange = Math.max(0, childHeight - (b - t - this.mPaddingBottom - this.mPaddingTop));\n if (this.mScrollY > scrollRange) {\n this.mScrollY = scrollRange;\n }\n else if (this.mScrollY < 0) {\n this.mScrollY = 0;\n }\n }\n this.scrollTo(this.mScrollX, this.mScrollY);\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n let currentFocused = this.findFocus();\n if (null == currentFocused || this == currentFocused)\n return;\n if (this.isWithinDeltaOfScreen(currentFocused, 0, oldh)) {\n currentFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollY(scrollDelta);\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && ScrollView.isViewDescendantOf(theParent, parent);\n }\n fling(velocityY) {\n if (this.getChildCount() > 0) {\n let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n let bottom = this.getChildAt(0).getHeight();\n this.mScroller.fling(this.mScrollX, this.mScrollY, 0, velocityY, 0, 0, 0, Math.max(0, bottom - height), 0, this.mOverflingDistance);\n this.postInvalidateOnAnimation();\n }\n }\n endDrag() {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n scrollTo(x, y) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n x = ScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth());\n y = ScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight());\n if (x != this.mScrollX || y != this.mScrollY) {\n super.scrollTo(x, y);\n }\n }\n }\n static clamp(n, my, child) {\n if (my >= child || n < 0) {\n return 0;\n }\n if ((my + n) > child) {\n return child - my;\n }\n return n;\n }\n canScrollVertically(direction) {\n if (this.getOverScrollMode() === View.OVER_SCROLL_ALWAYS)\n return true;\n return super.canScrollVertically(direction);\n }\n }\n ScrollView.ANIMATED_SCROLL_GAP = 250;\n ScrollView.MAX_SCROLL_FACTOR = 0.5;\n ScrollView.TAG = \"ScrollView\";\n ScrollView.INVALID_POINTER = -1;\n widget.ScrollView = ScrollView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n var ViewGroup = android.view.ViewGroup;\n class LinearLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBaselineAligned = true;\n this.mBaselineAlignedChildIndex = -1;\n this.mBaselineChildTop = 0;\n this.mOrientation = 0;\n this.mGravity = Gravity.LEFT | Gravity.TOP;\n this.mTotalLength = 0;\n this.mWeightSum = -1;\n this.mUseLargestChild = false;\n this.mDividerWidth = 0;\n this.mDividerHeight = 0;\n this.mShowDividers = LinearLayout.SHOW_DIVIDER_NONE;\n this.mDividerPadding = 0;\n this._attrBinder.addAttr('orientation', (value) => {\n if ((value + \"\").toUpperCase() === 'VERTICAL' || LinearLayout.VERTICAL == value) {\n this.setOrientation(LinearLayout.VERTICAL);\n }\n else if ((value + \"\").toUpperCase() === 'HORIZONTAL' || LinearLayout.HORIZONTAL == value) {\n this.setOrientation(LinearLayout.HORIZONTAL);\n }\n }, () => {\n return this.mOrientation;\n });\n this._attrBinder.addAttr('gravity', (value) => {\n this.setGravity(this._attrBinder.parseGravity(value, this.mGravity));\n }, () => {\n return this.mGravity;\n });\n this._attrBinder.addAttr('baselineAligned', (value) => {\n if (!this._attrBinder.parseBoolean(value))\n this.setBaselineAligned(false);\n });\n this._attrBinder.addAttr('weightSum', (value) => {\n let weightSum = Number.parseFloat(value);\n if (!Number.isNaN(weightSum) && weightSum != null) {\n this.setWeightSum(weightSum);\n }\n }, () => {\n return this.mWeightSum;\n });\n this._attrBinder.addAttr('baselineAlignedChildIndex', (value) => {\n value = Number.parseInt(value);\n if (Number.isSafeInteger(value)) {\n this.mBaselineAlignedChildIndex = value;\n }\n });\n this._attrBinder.addAttr('measureWithLargestChild', (value) => {\n value = Number.parseInt(value);\n if (Number.isSafeInteger(value)) {\n this.mUseLargestChild = this._attrBinder.parseBoolean(value, this.mUseLargestChild);\n }\n });\n this._attrBinder.addAttr('divider', (value) => {\n this.setDividerDrawable(this._attrBinder.parseDrawable(value));\n });\n this._attrBinder.addAttr('showDividers', (value) => {\n let fieldName = ('SHOW_DIVIDER_' + value).toUpperCase();\n if (Number.isInteger(LinearLayout[fieldName])) {\n this.setShowDividers(LinearLayout[fieldName]);\n }\n });\n this._attrBinder.addAttr('dividerPadding', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value)) {\n this.setDividerPadding(value);\n }\n });\n }\n setShowDividers(showDividers) {\n if (showDividers != this.mShowDividers) {\n this.requestLayout();\n }\n this.mShowDividers = showDividers;\n }\n shouldDelayChildPressedState() {\n return false;\n }\n getShowDividers() {\n return this.mShowDividers;\n }\n getDividerDrawable() {\n return this.mDivider;\n }\n setDividerDrawable(divider) {\n if (divider == this.mDivider) {\n return;\n }\n this.mDivider = divider;\n if (divider != null) {\n this.mDividerWidth = divider.getIntrinsicWidth();\n this.mDividerHeight = divider.getIntrinsicHeight();\n }\n else {\n this.mDividerWidth = 0;\n this.mDividerHeight = 0;\n }\n this.setWillNotDraw(divider == null);\n this.requestLayout();\n }\n setDividerPadding(padding) {\n this.mDividerPadding = padding;\n }\n getDividerPadding() {\n return this.mDividerPadding;\n }\n getDividerWidth() {\n return this.mDividerWidth;\n }\n onDraw(canvas) {\n if (this.mDivider == null) {\n return;\n }\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.drawDividersVertical(canvas);\n }\n else {\n this.drawDividersHorizontal(canvas);\n }\n }\n drawDividersVertical(canvas) {\n const count = this.getVirtualChildCount();\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child != null && child.getVisibility() != View.GONE) {\n if (this.hasDividerBeforeChildAt(i)) {\n const lp = child.getLayoutParams();\n const top = child.getTop() - lp.topMargin - this.mDividerHeight;\n this.drawHorizontalDivider(canvas, top);\n }\n }\n }\n if (this.hasDividerBeforeChildAt(count)) {\n const child = this.getVirtualChildAt(count - 1);\n let bottom = 0;\n if (child == null) {\n bottom = this.getHeight() - this.getPaddingBottom() - this.mDividerHeight;\n }\n else {\n const lp = child.getLayoutParams();\n bottom = child.getBottom() + lp.bottomMargin;\n }\n this.drawHorizontalDivider(canvas, bottom);\n }\n }\n drawDividersHorizontal(canvas) {\n const count = this.getVirtualChildCount();\n const isLayoutRtl = this.isLayoutRtl();\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child != null && child.getVisibility() != View.GONE) {\n if (this.hasDividerBeforeChildAt(i)) {\n const lp = child.getLayoutParams();\n let position;\n if (isLayoutRtl) {\n position = child.getRight() + lp.rightMargin;\n }\n else {\n position = child.getLeft() - lp.leftMargin - this.mDividerWidth;\n }\n this.drawVerticalDivider(canvas, position);\n }\n }\n }\n if (this.hasDividerBeforeChildAt(count)) {\n const child = this.getVirtualChildAt(count - 1);\n let position;\n if (child == null) {\n if (isLayoutRtl) {\n position = this.getPaddingLeft();\n }\n else {\n position = this.getWidth() - this.getPaddingRight() - this.mDividerWidth;\n }\n }\n else {\n const lp = child.getLayoutParams();\n if (isLayoutRtl) {\n position = child.getLeft() - lp.leftMargin - this.mDividerWidth;\n }\n else {\n position = child.getRight() + lp.rightMargin;\n }\n }\n this.drawVerticalDivider(canvas, position);\n }\n }\n drawHorizontalDivider(canvas, top) {\n this.mDivider.setBounds(this.getPaddingLeft() + this.mDividerPadding, top, this.getWidth() - this.getPaddingRight() - this.mDividerPadding, top + this.mDividerHeight);\n this.mDivider.draw(canvas);\n }\n drawVerticalDivider(canvas, left) {\n this.mDivider.setBounds(left, this.getPaddingTop() + this.mDividerPadding, left + this.mDividerWidth, this.getHeight() - this.getPaddingBottom() - this.mDividerPadding);\n this.mDivider.draw(canvas);\n }\n isBaselineAligned() {\n return this.mBaselineAligned;\n }\n setBaselineAligned(baselineAligned) {\n this.mBaselineAligned = baselineAligned;\n }\n isMeasureWithLargestChildEnabled() {\n return this.mUseLargestChild;\n }\n setMeasureWithLargestChildEnabled(enabled) {\n this.mUseLargestChild = enabled;\n }\n getBaseline() {\n if (this.mBaselineAlignedChildIndex < 0) {\n return super.getBaseline();\n }\n if (this.getChildCount() <= this.mBaselineAlignedChildIndex) {\n throw new Error(\"mBaselineAlignedChildIndex of LinearLayout \"\n + \"set to an index that is out of bounds.\");\n }\n const child = this.getChildAt(this.mBaselineAlignedChildIndex);\n const childBaseline = child.getBaseline();\n if (childBaseline == -1) {\n if (this.mBaselineAlignedChildIndex == 0) {\n return -1;\n }\n throw new Error(\"mBaselineAlignedChildIndex of LinearLayout \"\n + \"points to a View that doesn't know how to get its baseline.\");\n }\n let childTop = this.mBaselineChildTop;\n if (this.mOrientation == LinearLayout.VERTICAL) {\n const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (majorGravity != Gravity.TOP) {\n switch (majorGravity) {\n case Gravity.BOTTOM:\n childTop = this.mBottom - this.mTop - this.mPaddingBottom - this.mTotalLength;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop += ((this.mBottom - this.mTop - this.mPaddingTop - this.mPaddingBottom) -\n this.mTotalLength) / 2;\n break;\n }\n }\n }\n let lp = child.getLayoutParams();\n return childTop + lp.topMargin + childBaseline;\n }\n getBaselineAlignedChildIndex() {\n return this.mBaselineAlignedChildIndex;\n }\n setBaselineAlignedChildIndex(i) {\n if ((i < 0) || (i >= this.getChildCount())) {\n throw new Error(\"base aligned child index out \"\n + \"of range (0, \" + this.getChildCount() + \")\");\n }\n this.mBaselineAlignedChildIndex = i;\n }\n getVirtualChildAt(index) {\n return this.getChildAt(index);\n }\n getVirtualChildCount() {\n return this.getChildCount();\n }\n getWeightSum() {\n return this.mWeightSum;\n }\n setWeightSum(weightSum) {\n this.mWeightSum = Math.max(0, weightSum);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.measureVertical(widthMeasureSpec, heightMeasureSpec);\n }\n else {\n this.measureHorizontal(widthMeasureSpec, heightMeasureSpec);\n }\n }\n hasDividerBeforeChildAt(childIndex) {\n if (childIndex == 0) {\n return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_BEGINNING) != 0;\n }\n else if (childIndex == this.getChildCount()) {\n return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_END) != 0;\n }\n else if ((this.mShowDividers & LinearLayout.SHOW_DIVIDER_MIDDLE) != 0) {\n let hasVisibleViewBefore = false;\n for (let i = childIndex - 1; i >= 0; i--) {\n if (this.getChildAt(i).getVisibility() != LinearLayout.GONE) {\n hasVisibleViewBefore = true;\n break;\n }\n }\n return hasVisibleViewBefore;\n }\n return false;\n }\n measureVertical(widthMeasureSpec, heightMeasureSpec) {\n this.mTotalLength = 0;\n let maxWidth = 0;\n let childState = 0;\n let alternativeMaxWidth = 0;\n let weightedMaxWidth = 0;\n let allFillParent = true;\n let totalWeight = 0;\n const count = this.getVirtualChildCount();\n const widthMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let matchWidth = false;\n const baselineChildIndex = this.mBaselineAlignedChildIndex;\n const useLargestChild = this.mUseLargestChild;\n let largestChildHeight = Number.MIN_SAFE_INTEGER;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n this.mTotalLength += this.mDividerHeight;\n }\n let lp = child.getLayoutParams();\n totalWeight += lp.weight;\n if (heightMode == MeasureSpec.EXACTLY && lp.height == 0 && lp.weight > 0) {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + lp.topMargin + lp.bottomMargin);\n }\n else {\n let oldHeight = Number.MIN_SAFE_INTEGER;\n if (lp.height == 0 && lp.weight > 0) {\n oldHeight = 0;\n lp.height = LinearLayout.LayoutParams.WRAP_CONTENT;\n }\n this.measureChildBeforeLayout(child, i, widthMeasureSpec, 0, heightMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0);\n if (oldHeight != Number.MIN_SAFE_INTEGER) {\n lp.height = oldHeight;\n }\n const childHeight = child.getMeasuredHeight();\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + childHeight + lp.topMargin +\n lp.bottomMargin + this.getNextLocationOffset(child));\n if (useLargestChild) {\n largestChildHeight = Math.max(childHeight, largestChildHeight);\n }\n }\n if ((baselineChildIndex >= 0) && (baselineChildIndex == i + 1)) {\n this.mBaselineChildTop = this.mTotalLength;\n }\n if (i < baselineChildIndex && lp.weight > 0) {\n throw new Error(\"A child of LinearLayout with index \"\n + \"less than mBaselineAlignedChildIndex has weight > 0, which \"\n + \"won't work. Either remove the weight, or don't set \"\n + \"mBaselineAlignedChildIndex.\");\n }\n let matchWidthLocally = false;\n if (widthMode != MeasureSpec.EXACTLY && lp.width == LinearLayout.LayoutParams.MATCH_PARENT) {\n matchWidth = true;\n matchWidthLocally = true;\n }\n const margin = lp.leftMargin + lp.rightMargin;\n const measuredWidth = child.getMeasuredWidth() + margin;\n maxWidth = Math.max(maxWidth, measuredWidth);\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState());\n allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n if (lp.weight > 0) {\n weightedMaxWidth = Math.max(weightedMaxWidth, matchWidthLocally ? margin : measuredWidth);\n }\n else {\n alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth);\n }\n i += this.getChildrenSkipCount(child, i);\n }\n if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) {\n this.mTotalLength += this.mDividerHeight;\n }\n if (useLargestChild &&\n (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED)) {\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n const lp = child.getLayoutParams();\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + largestChildHeight +\n lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child));\n }\n }\n this.mTotalLength += this.mPaddingTop + this.mPaddingBottom;\n let heightSize = this.mTotalLength;\n heightSize = Math.max(heightSize, this.getSuggestedMinimumHeight());\n let heightSizeAndState = LinearLayout.resolveSizeAndState(heightSize, heightMeasureSpec, 0);\n heightSize = heightSizeAndState & View.MEASURED_SIZE_MASK;\n let delta = heightSize - this.mTotalLength;\n if (delta != 0 && totalWeight > 0) {\n let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight;\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() == View.GONE) {\n continue;\n }\n let lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n let share = (childExtra * delta / weightSum);\n weightSum -= childExtra;\n delta -= share;\n const childWidthMeasureSpec = LinearLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight +\n lp.leftMargin + lp.rightMargin, lp.width);\n if ((lp.height != 0) || (heightMode != MeasureSpec.EXACTLY)) {\n let childHeight = child.getMeasuredHeight() + share;\n if (childHeight < 0) {\n childHeight = 0;\n }\n child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY));\n }\n else {\n child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY));\n }\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()\n & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n }\n const margin = lp.leftMargin + lp.rightMargin;\n const measuredWidth = child.getMeasuredWidth() + margin;\n maxWidth = Math.max(maxWidth, measuredWidth);\n let matchWidthLocally = widthMode != MeasureSpec.EXACTLY &&\n lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth);\n allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredHeight() +\n lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child));\n }\n this.mTotalLength += this.mPaddingTop + this.mPaddingBottom;\n }\n else {\n alternativeMaxWidth = Math.max(alternativeMaxWidth, weightedMaxWidth);\n if (useLargestChild && heightMode != MeasureSpec.EXACTLY) {\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n child.measure(MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(largestChildHeight, MeasureSpec.EXACTLY));\n }\n }\n }\n }\n if (!allFillParent && widthMode != MeasureSpec.EXACTLY) {\n maxWidth = alternativeMaxWidth;\n }\n maxWidth += this.mPaddingLeft + this.mPaddingRight;\n maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth());\n this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), heightSizeAndState);\n if (matchWidth) {\n this.forceUniformWidth(count, heightMeasureSpec);\n }\n }\n forceUniformWidth(count, heightMeasureSpec) {\n let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(), MeasureSpec.EXACTLY);\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() != View.GONE) {\n let lp = child.getLayoutParams();\n if (lp.width == LinearLayout.LayoutParams.MATCH_PARENT) {\n let oldHeight = lp.height;\n lp.height = child.getMeasuredHeight();\n this.measureChildWithMargins(child, uniformMeasureSpec, 0, heightMeasureSpec, 0);\n lp.height = oldHeight;\n }\n }\n }\n }\n measureHorizontal(widthMeasureSpec, heightMeasureSpec) {\n this.mTotalLength = 0;\n let maxHeight = 0;\n let childState = 0;\n let alternativeMaxHeight = 0;\n let weightedMaxHeight = 0;\n let allFillParent = true;\n let totalWeight = 0;\n const count = this.getVirtualChildCount();\n const widthMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let matchHeight = false;\n if (this.mMaxAscent == null || this.mMaxDescent == null) {\n this.mMaxAscent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT);\n this.mMaxDescent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT);\n }\n let maxAscent = this.mMaxAscent;\n let maxDescent = this.mMaxDescent;\n maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;\n maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1;\n const baselineAligned = this.mBaselineAligned;\n const useLargestChild = this.mUseLargestChild;\n const isExactly = widthMode == MeasureSpec.EXACTLY;\n let largestChildWidth = Number.MAX_SAFE_INTEGER;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n this.mTotalLength += this.mDividerWidth;\n }\n const lp = child.getLayoutParams();\n totalWeight += lp.weight;\n if (widthMode == MeasureSpec.EXACTLY && lp.width == 0 && lp.weight > 0) {\n if (isExactly) {\n this.mTotalLength += lp.leftMargin + lp.rightMargin;\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength +\n lp.leftMargin + lp.rightMargin);\n }\n if (baselineAligned) {\n const freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n child.measure(freeSpec, freeSpec);\n }\n }\n else {\n let oldWidth = Number.MIN_SAFE_INTEGER;\n if (lp.width == 0 && lp.weight > 0) {\n oldWidth = 0;\n lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;\n }\n this.measureChildBeforeLayout(child, i, widthMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0, heightMeasureSpec, 0);\n if (oldWidth != Number.MIN_SAFE_INTEGER) {\n lp.width = oldWidth;\n }\n const childWidth = child.getMeasuredWidth();\n if (isExactly) {\n this.mTotalLength += childWidth + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + childWidth + lp.leftMargin +\n lp.rightMargin + this.getNextLocationOffset(child));\n }\n if (useLargestChild) {\n largestChildWidth = Math.max(childWidth, largestChildWidth);\n }\n }\n let matchHeightLocally = false;\n if (heightMode != MeasureSpec.EXACTLY && lp.height == LinearLayout.LayoutParams.MATCH_PARENT) {\n matchHeight = true;\n matchHeightLocally = true;\n }\n const margin = lp.topMargin + lp.bottomMargin;\n const childHeight = child.getMeasuredHeight() + margin;\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState());\n if (baselineAligned) {\n const childBaseline = child.getBaseline();\n if (childBaseline != -1) {\n const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity)\n & Gravity.VERTICAL_GRAVITY_MASK;\n const index = ((gravity >> Gravity.AXIS_Y_SHIFT)\n & ~Gravity.AXIS_SPECIFIED) >> 1;\n maxAscent[index] = Math.max(maxAscent[index], childBaseline);\n maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline);\n }\n }\n maxHeight = Math.max(maxHeight, childHeight);\n allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n if (lp.weight > 0) {\n weightedMaxHeight = Math.max(weightedMaxHeight, matchHeightLocally ? margin : childHeight);\n }\n else {\n alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight);\n }\n i += this.getChildrenSkipCount(child, i);\n }\n if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) {\n this.mTotalLength += this.mDividerWidth;\n }\n if (maxAscent[LinearLayout.INDEX_TOP] != -1 ||\n maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 ||\n maxAscent[LinearLayout.INDEX_BOTTOM] != -1 ||\n maxAscent[LinearLayout.INDEX_FILL] != -1) {\n const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM])));\n const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM])));\n maxHeight = Math.max(maxHeight, ascent + descent);\n }\n if (useLargestChild &&\n (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED)) {\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n const lp = child.getLayoutParams();\n if (isExactly) {\n this.mTotalLength += largestChildWidth + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + largestChildWidth +\n lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child));\n }\n }\n }\n this.mTotalLength += this.mPaddingLeft + this.mPaddingRight;\n let widthSize = this.mTotalLength;\n widthSize = Math.max(widthSize, this.getSuggestedMinimumWidth());\n let widthSizeAndState = LinearLayout.resolveSizeAndState(widthSize, widthMeasureSpec, 0);\n widthSize = widthSizeAndState & View.MEASURED_SIZE_MASK;\n let delta = widthSize - this.mTotalLength;\n if (delta != 0 && totalWeight > 0) {\n let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight;\n maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;\n maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1;\n maxHeight = -1;\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n let share = (childExtra * delta / weightSum);\n weightSum -= childExtra;\n delta -= share;\n const childHeightMeasureSpec = LinearLayout.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin, lp.height);\n if ((lp.width != 0) || (widthMode != MeasureSpec.EXACTLY)) {\n let childWidth = child.getMeasuredWidth() + share;\n if (childWidth < 0) {\n childWidth = 0;\n }\n child.measure(MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY), childHeightMeasureSpec);\n }\n else {\n child.measure(MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY), childHeightMeasureSpec);\n }\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() & View.MEASURED_STATE_MASK);\n }\n if (isExactly) {\n this.mTotalLength += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredWidth() +\n lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child));\n }\n let matchHeightLocally = heightMode != MeasureSpec.EXACTLY &&\n lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n const margin = lp.topMargin + lp.bottomMargin;\n let childHeight = child.getMeasuredHeight() + margin;\n maxHeight = Math.max(maxHeight, childHeight);\n alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight);\n allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n if (baselineAligned) {\n const childBaseline = child.getBaseline();\n if (childBaseline != -1) {\n const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity)\n & Gravity.VERTICAL_GRAVITY_MASK;\n const index = ((gravity >> Gravity.AXIS_Y_SHIFT)\n & ~Gravity.AXIS_SPECIFIED) >> 1;\n maxAscent[index] = Math.max(maxAscent[index], childBaseline);\n maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline);\n }\n }\n }\n this.mTotalLength += this.mPaddingLeft + this.mPaddingRight;\n if (maxAscent[LinearLayout.INDEX_TOP] != -1 ||\n maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 ||\n maxAscent[LinearLayout.INDEX_BOTTOM] != -1 ||\n maxAscent[LinearLayout.INDEX_FILL] != -1) {\n const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM])));\n const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM])));\n maxHeight = Math.max(maxHeight, ascent + descent);\n }\n }\n else {\n alternativeMaxHeight = Math.max(alternativeMaxHeight, weightedMaxHeight);\n if (useLargestChild && widthMode != MeasureSpec.EXACTLY) {\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), MeasureSpec.EXACTLY));\n }\n }\n }\n }\n if (!allFillParent && heightMode != MeasureSpec.EXACTLY) {\n maxHeight = alternativeMaxHeight;\n }\n maxHeight += this.mPaddingTop + this.mPaddingBottom;\n maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight());\n this.setMeasuredDimension(widthSizeAndState | (childState & View.MEASURED_STATE_MASK), LinearLayout.resolveSizeAndState(maxHeight, heightMeasureSpec, (childState << View.MEASURED_HEIGHT_STATE_SHIFT)));\n if (matchHeight) {\n this.forceUniformHeight(count, widthMeasureSpec);\n }\n }\n forceUniformHeight(count, widthMeasureSpec) {\n let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredHeight(), MeasureSpec.EXACTLY);\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() != View.GONE) {\n let lp = child.getLayoutParams();\n if (lp.height == LinearLayout.LayoutParams.MATCH_PARENT) {\n let oldWidth = lp.width;\n lp.width = child.getMeasuredWidth();\n this.measureChildWithMargins(child, widthMeasureSpec, 0, uniformMeasureSpec, 0);\n lp.width = oldWidth;\n }\n }\n }\n }\n getChildrenSkipCount(child, index) {\n return 0;\n }\n measureNullChild(childIndex) {\n return 0;\n }\n measureChildBeforeLayout(child, childIndex, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight) {\n this.measureChildWithMargins(child, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight);\n }\n getLocationOffset(child) {\n return 0;\n }\n getNextLocationOffset(child) {\n return 0;\n }\n onLayout(changed, l, t, r, b) {\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.layoutVertical(l, t, r, b);\n }\n else {\n this.layoutHorizontal(l, t, r, b);\n }\n }\n layoutVertical(left, top, right, bottom) {\n const paddingLeft = this.mPaddingLeft;\n let childTop;\n let childLeft;\n const width = right - left;\n let childRight = width - this.mPaddingRight;\n let childSpace = width - paddingLeft - this.mPaddingRight;\n const count = this.getVirtualChildCount();\n const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const minorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n switch (majorGravity) {\n case Gravity.BOTTOM:\n childTop = this.mPaddingTop + bottom - top - this.mTotalLength;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = this.mPaddingTop + (bottom - top - this.mTotalLength) / 2;\n break;\n case Gravity.TOP:\n default:\n childTop = this.mPaddingTop;\n break;\n }\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n childTop += this.measureNullChild(i);\n }\n else if (child.getVisibility() != View.GONE) {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const lp = child.getLayoutParams();\n let gravity = lp.gravity;\n if (gravity < 0) {\n gravity = minorGravity;\n }\n const absoluteGravity = gravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n childLeft = paddingLeft + ((childSpace - childWidth) / 2)\n + lp.leftMargin - lp.rightMargin;\n break;\n case Gravity.RIGHT:\n childLeft = childRight - childWidth - lp.rightMargin;\n break;\n case Gravity.LEFT:\n default:\n childLeft = paddingLeft + lp.leftMargin;\n break;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n childTop += this.mDividerHeight;\n }\n childTop += lp.topMargin;\n this.setChildFrame(child, childLeft, childTop + this.getLocationOffset(child), childWidth, childHeight);\n childTop += childHeight + lp.bottomMargin + this.getNextLocationOffset(child);\n i += this.getChildrenSkipCount(child, i);\n }\n }\n }\n layoutHorizontal(left, top, right, bottom) {\n const isLayoutRtl = this.isLayoutRtl();\n const paddingTop = this.mPaddingTop;\n let childTop;\n let childLeft;\n const height = bottom - top;\n let childBottom = height - this.mPaddingBottom;\n let childSpace = height - paddingTop - this.mPaddingBottom;\n const count = this.getVirtualChildCount();\n const majorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const minorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const baselineAligned = this.mBaselineAligned;\n const maxAscent = this.mMaxAscent;\n const maxDescent = this.mMaxDescent;\n let absoluteGravity = majorGravity;\n switch (absoluteGravity) {\n case Gravity.RIGHT:\n childLeft = this.mPaddingLeft + right - left - this.mTotalLength;\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = this.mPaddingLeft + (right - left - this.mTotalLength) / 2;\n break;\n case Gravity.LEFT:\n default:\n childLeft = this.mPaddingLeft;\n break;\n }\n let start = 0;\n let dir = 1;\n if (isLayoutRtl) {\n start = count - 1;\n dir = -1;\n }\n for (let i = 0; i < count; i++) {\n let childIndex = start + dir * i;\n const child = this.getVirtualChildAt(childIndex);\n if (child == null) {\n childLeft += this.measureNullChild(childIndex);\n }\n else if (child.getVisibility() != View.GONE) {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n let childBaseline = -1;\n const lp = child.getLayoutParams();\n if (baselineAligned && lp.height != LinearLayout.LayoutParams.MATCH_PARENT) {\n childBaseline = child.getBaseline();\n }\n let gravity = lp.gravity;\n if (gravity < 0) {\n gravity = minorGravity;\n }\n switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {\n case Gravity.TOP:\n childTop = paddingTop + lp.topMargin;\n if (childBaseline != -1) {\n childTop += maxAscent[LinearLayout.INDEX_TOP] - childBaseline;\n }\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = paddingTop + ((childSpace - childHeight) / 2)\n + lp.topMargin - lp.bottomMargin;\n break;\n case Gravity.BOTTOM:\n childTop = childBottom - childHeight - lp.bottomMargin;\n if (childBaseline != -1) {\n let descent = child.getMeasuredHeight() - childBaseline;\n childTop -= (maxDescent[LinearLayout.INDEX_BOTTOM] - descent);\n }\n break;\n default:\n childTop = paddingTop;\n break;\n }\n if (this.hasDividerBeforeChildAt(childIndex)) {\n childLeft += this.mDividerWidth;\n }\n childLeft += lp.leftMargin;\n this.setChildFrame(child, childLeft + this.getLocationOffset(child), childTop, childWidth, childHeight);\n childLeft += childWidth + lp.rightMargin +\n this.getNextLocationOffset(child);\n i += this.getChildrenSkipCount(child, childIndex);\n }\n }\n }\n setChildFrame(child, left, top, width, height) {\n child.layout(left, top, left + width, top + height);\n }\n setOrientation(orientation) {\n if (typeof orientation === 'string') {\n if ('VERTICAL' === (orientation + '').toUpperCase())\n orientation = LinearLayout.VERTICAL;\n else if ('HORIZONTAL' === (orientation + '').toUpperCase())\n orientation = LinearLayout.HORIZONTAL;\n }\n if (this.mOrientation != orientation) {\n this.mOrientation = orientation;\n this.requestLayout();\n }\n }\n getOrientation() {\n return this.mOrientation;\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.LEFT;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n setHorizontalGravity(horizontalGravity) {\n const gravity = horizontalGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.HORIZONTAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n setVerticalGravity(verticalGravity) {\n const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n generateDefaultLayoutParams() {\n let LayoutParams = LinearLayout.LayoutParams;\n if (this.mOrientation == LinearLayout.HORIZONTAL) {\n return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n }\n else if (this.mOrientation == LinearLayout.VERTICAL) {\n return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n }\n return super.generateDefaultLayoutParams();\n }\n generateLayoutParams(p) {\n return new LinearLayout.LayoutParams(p);\n }\n checkLayoutParams(p) {\n return p instanceof LinearLayout.LayoutParams;\n }\n }\n LinearLayout.HORIZONTAL = 0;\n LinearLayout.VERTICAL = 1;\n LinearLayout.SHOW_DIVIDER_NONE = 0;\n LinearLayout.SHOW_DIVIDER_BEGINNING = 1;\n LinearLayout.SHOW_DIVIDER_MIDDLE = 2;\n LinearLayout.SHOW_DIVIDER_END = 4;\n LinearLayout.VERTICAL_GRAVITY_COUNT = 4;\n LinearLayout.INDEX_CENTER_VERTICAL = 0;\n LinearLayout.INDEX_TOP = 1;\n LinearLayout.INDEX_BOTTOM = 2;\n LinearLayout.INDEX_FILL = 3;\n widget.LinearLayout = LinearLayout;\n (function (LinearLayout) {\n class LayoutParams extends android.view.ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(args.length == 3 ? [args[0], args[1]] : args));\n this.weight = 0;\n this.gravity = -1;\n if (args.length === 1) {\n if (args[0] instanceof LayoutParams) {\n this.gravity = args[0].gravity;\n }\n }\n else if (args.length === 3) {\n this.weight = args[2] || 0;\n }\n let a = this._attrBinder;\n a.addAttr('gravity', (value) => {\n this.gravity = a.parseGravity(value, this.gravity);\n }, () => {\n return this.gravity;\n });\n a.addAttr('weight', (value) => {\n this.weight = a.parseFloat(value, this.weight);\n }, () => {\n return this.weight;\n });\n }\n }\n LinearLayout.LayoutParams = LayoutParams;\n })(LinearLayout = widget.LinearLayout || (widget.LinearLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class ArrayMap {\n constructor(capacity) {\n this.map = new Map();\n }\n clear() {\n this.map.clear();\n }\n erase() {\n this.map.clear();\n }\n ensureCapacity(minimumCapacity) {\n }\n containsKey(key) {\n return this.map.has(key);\n }\n indexOfValue(value) {\n return [...this.map.values()].indexOf(value);\n }\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n get(key) {\n return this.map.get(key);\n }\n keyAt(index) {\n return [...this.map.keys()][index];\n }\n valueAt(index) {\n return [...this.map.values()][index];\n }\n setValueAt(index, value) {\n let key = this.keyAt(index);\n if (key == null)\n throw Error('index error');\n let oldV = this.get(key);\n this.map.set(key, value);\n return oldV;\n }\n isEmpty() {\n return this.map.size <= 0;\n }\n put(key, value) {\n let oldV = this.get(key);\n this.map.set(key, value);\n return oldV;\n }\n append(key, value) {\n this.map.set(key, value);\n }\n remove(key) {\n let oldV = this.get(key);\n this.map.delete(key);\n return oldV;\n }\n removeAt(index) {\n let key = this.keyAt(index);\n if (key == null)\n throw Error('index error');\n let oldV = this.get(key);\n this.map.delete(key);\n return oldV;\n }\n keySet() {\n return new Set(this.map.keys());\n }\n size() {\n return this.map.size;\n }\n }\n util.ArrayMap = ArrayMap;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class ArrayDeque extends util.ArrayList {\n addFirst(e) {\n this.add(0, e);\n }\n addLast(e) {\n this.add(e);\n }\n offerFirst(e) {\n this.addFirst(e);\n return true;\n }\n offerLast(e) {\n this.addLast(e);\n return true;\n }\n removeFirst() {\n let x = this.pollFirst();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n removeLast() {\n let x = this.pollLast();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n pollFirst() {\n return this.array.shift();\n }\n pollLast() {\n return this.array.splice(this.array.length - 1)[0];\n }\n getFirst() {\n let x = this.peekFirst();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n getLast() {\n let x = this.peekLast();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n peekFirst() {\n return this.array[0];\n }\n peekLast() {\n return this.array[this.array.length - 1];\n }\n removeFirstOccurrence(o) {\n if (o == null)\n return false;\n for (let i = 0, count = this.size(); i < count; i++) {\n if (this.array[i] == o) {\n this.delete(i);\n return true;\n }\n }\n return false;\n }\n removeLastOccurrence(o) {\n if (o == null)\n return false;\n for (let i = this.size(); i >= 0; i--) {\n if (this.array[i] == o) {\n this.delete(i);\n return true;\n }\n }\n return false;\n }\n offer(e) {\n return this.offerLast(e);\n }\n remove() {\n return this.removeFirst();\n }\n poll() {\n return this.pollFirst();\n }\n element() {\n return this.getFirst();\n }\n peek() {\n return this.peekFirst();\n }\n push(e) {\n this.addFirst(e);\n }\n pop() {\n return this.removeFirst();\n }\n delete(i) {\n if (i >= this.array.length)\n return false;\n this.array.splice(i, 1);\n return true;\n }\n }\n util.ArrayDeque = ArrayDeque;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class MathUtils {\n constructor() {\n }\n static abs(v) {\n return v > 0 ? v : -v;\n }\n static constrain(amount, low, high) {\n return amount < low ? low : (amount > high ? high : amount);\n }\n static log(a) {\n return Math.log(a);\n }\n static exp(a) {\n return Math.exp(a);\n }\n static pow(a, b) {\n return Math.pow(a, b);\n }\n static max(a, b, c) {\n if (c == null)\n return a > b ? a : b;\n return a > b ? (a > c ? a : c) : (b > c ? b : c);\n }\n static min(a, b, c) {\n if (c == null)\n return a < b ? a : b;\n return a < b ? (a < c ? a : c) : (b < c ? b : c);\n }\n static dist(x1, y1, x2, y2) {\n const x = (x2 - x1);\n const y = (y2 - y1);\n return Math.sqrt(x * x + y * y);\n }\n static dist3(x1, y1, z1, x2, y2, z2) {\n const x = (x2 - x1);\n const y = (y2 - y1);\n const z = (z2 - z1);\n return Math.sqrt(x * x + y * y + z * z);\n }\n static mag(a, b, c) {\n if (c == null)\n return Math.sqrt(a * a + b * b);\n return Math.sqrt(a * a + b * b + c * c);\n }\n static sq(v) {\n return v * v;\n }\n static radians(degrees) {\n return degrees * MathUtils.DEG_TO_RAD;\n }\n static degrees(radians) {\n return radians * MathUtils.RAD_TO_DEG;\n }\n static acos(value) {\n return Math.acos(value);\n }\n static asin(value) {\n return Math.asin(value);\n }\n static atan(value) {\n return Math.atan(value);\n }\n static atan2(a, b) {\n return Math.atan2(a, b);\n }\n static tan(angle) {\n return Math.tan(angle);\n }\n static lerp(start, stop, amount) {\n return start + (stop - start) * amount;\n }\n static norm(start, stop, value) {\n return (value - start) / (stop - start);\n }\n static map(minStart, minStop, maxStart, maxStop, value) {\n return maxStart + (maxStart - maxStop) * ((value - minStart) / (minStop - minStart));\n }\n static random(...args) {\n if (args.length == 1)\n return Math.random() * args[0];\n let [howsmall, howbig] = args;\n if (howsmall >= howbig)\n return howsmall;\n return Math.random() * (howbig - howsmall) + howsmall;\n }\n }\n MathUtils.DEG_TO_RAD = 3.1415926 / 180.0;\n MathUtils.RAD_TO_DEG = 180.0 / 3.1415926;\n util.MathUtils = MathUtils;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseBooleanArray extends util.SparseArray {\n }\n util.SparseBooleanArray = SparseBooleanArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class SoundEffectConstants {\n static getContantForFocusDirection(direction) {\n switch (direction) {\n case view.View.FOCUS_RIGHT:\n return SoundEffectConstants.NAVIGATION_RIGHT;\n case view.View.FOCUS_FORWARD:\n case view.View.FOCUS_DOWN:\n return SoundEffectConstants.NAVIGATION_DOWN;\n case view.View.FOCUS_LEFT:\n return SoundEffectConstants.NAVIGATION_LEFT;\n case view.View.FOCUS_BACKWARD:\n case view.View.FOCUS_UP:\n return SoundEffectConstants.NAVIGATION_UP;\n }\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n }\n SoundEffectConstants.CLICK = 0;\n SoundEffectConstants.NAVIGATION_LEFT = 1;\n SoundEffectConstants.NAVIGATION_UP = 2;\n SoundEffectConstants.NAVIGATION_RIGHT = 3;\n SoundEffectConstants.NAVIGATION_DOWN = 4;\n view.SoundEffectConstants = SoundEffectConstants;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Trace {\n static nativeGetEnabledTags() {\n return Trace.TRACE_TAG_ALWAYS;\n }\n static nativeTraceCounter(tag, name, value) {\n }\n static nativeTraceBegin(tag, name) { }\n static nativeTraceEnd(tag) { }\n static nativeAsyncTraceBegin(tag, name, cookie) { }\n static nativeAsyncTraceEnd(tag, name, cookie) { }\n static nativeSetAppTracingAllowed(allowed) { }\n static nativeSetTracingEnabled(allowed) { }\n static cacheEnabledTags() {\n let tags = Trace.nativeGetEnabledTags();\n Trace.sEnabledTags = tags;\n return tags;\n }\n static isTagEnabled(traceTag) {\n let tags = Trace.sEnabledTags;\n if (tags == Trace.TRACE_TAG_NOT_READY) {\n tags = Trace.cacheEnabledTags();\n }\n return (tags & traceTag) != 0;\n }\n static traceCounter(traceTag, counterName, counterValue) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceCounter(traceTag, counterName, counterValue);\n }\n }\n static setAppTracingAllowed(allowed) {\n Trace.nativeSetAppTracingAllowed(allowed);\n Trace.cacheEnabledTags();\n }\n static setTracingEnabled(enabled) {\n Trace.nativeSetTracingEnabled(enabled);\n Trace.cacheEnabledTags();\n }\n static traceBegin(traceTag, methodName) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceBegin(traceTag, methodName);\n }\n }\n static traceEnd(traceTag) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceEnd(traceTag);\n }\n }\n static asyncTraceBegin(traceTag, methodName, cookie) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeAsyncTraceBegin(traceTag, methodName, cookie);\n }\n }\n static asyncTraceEnd(traceTag, methodName, cookie) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeAsyncTraceEnd(traceTag, methodName, cookie);\n }\n }\n static beginSection(sectionName) {\n if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {\n if (sectionName.length > Trace.MAX_SECTION_NAME_LEN) {\n throw Error(`new IllegalArgumentException(\"sectionName is too long\")`);\n }\n Trace.nativeTraceBegin(Trace.TRACE_TAG_APP, sectionName);\n }\n }\n static endSection() {\n if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {\n Trace.nativeTraceEnd(Trace.TRACE_TAG_APP);\n }\n }\n }\n Trace.TAG = \"Trace\";\n Trace.TRACE_TAG_NEVER = 0;\n Trace.TRACE_TAG_ALWAYS = 1 << 0;\n Trace.TRACE_TAG_GRAPHICS = 1 << 1;\n Trace.TRACE_TAG_INPUT = 1 << 2;\n Trace.TRACE_TAG_VIEW = 1 << 3;\n Trace.TRACE_TAG_WEBVIEW = 1 << 4;\n Trace.TRACE_TAG_WINDOW_MANAGER = 1 << 5;\n Trace.TRACE_TAG_ACTIVITY_MANAGER = 1 << 6;\n Trace.TRACE_TAG_SYNC_MANAGER = 1 << 7;\n Trace.TRACE_TAG_AUDIO = 1 << 8;\n Trace.TRACE_TAG_VIDEO = 1 << 9;\n Trace.TRACE_TAG_CAMERA = 1 << 10;\n Trace.TRACE_TAG_HAL = 1 << 11;\n Trace.TRACE_TAG_APP = 1 << 12;\n Trace.TRACE_TAG_RESOURCES = 1 << 13;\n Trace.TRACE_TAG_DALVIK = 1 << 14;\n Trace.TRACE_TAG_RS = 1 << 15;\n Trace.TRACE_TAG_NOT_READY = 1 << 63;\n Trace.MAX_SECTION_NAME_LEN = 127;\n Trace.sEnabledTags = Trace.TRACE_TAG_NOT_READY;\n os.Trace = Trace;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var KeyEvent = android.view.KeyEvent;\n class InputType {\n }\n InputType.TYPE_MASK_CLASS = 0x0000000f;\n InputType.TYPE_MASK_VARIATION = 0x00000ff0;\n InputType.TYPE_MASK_FLAGS = 0x00fff000;\n InputType.TYPE_NULL = 0x00000000;\n InputType.TYPE_CLASS_TEXT = 0x00000001;\n InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS = 0x00001000;\n InputType.TYPE_TEXT_FLAG_CAP_WORDS = 0x00002000;\n InputType.TYPE_TEXT_FLAG_CAP_SENTENCES = 0x00004000;\n InputType.TYPE_TEXT_FLAG_AUTO_CORRECT = 0x00008000;\n InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE = 0x00010000;\n InputType.TYPE_TEXT_FLAG_MULTI_LINE = 0x00020000;\n InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000;\n InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS = 0x00080000;\n InputType.TYPE_TEXT_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_TEXT_VARIATION_URI = 0x00000010;\n InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020;\n InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 0x00000030;\n InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE = 0x00000040;\n InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE = 0x00000050;\n InputType.TYPE_TEXT_VARIATION_PERSON_NAME = 0x00000060;\n InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 0x00000070;\n InputType.TYPE_TEXT_VARIATION_PASSWORD = 0x00000080;\n InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090;\n InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x000000a0;\n InputType.TYPE_TEXT_VARIATION_FILTER = 0x000000b0;\n InputType.TYPE_TEXT_VARIATION_PHONETIC = 0x000000c0;\n InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 0x000000d0;\n InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD = 0x000000e0;\n InputType.TYPE_CLASS_NUMBER = 0x00000002;\n InputType.TYPE_NUMBER_FLAG_SIGNED = 0x00001000;\n InputType.TYPE_NUMBER_FLAG_DECIMAL = 0x00002000;\n InputType.TYPE_NUMBER_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_NUMBER_VARIATION_PASSWORD = 0x00000010;\n InputType.TYPE_CLASS_PHONE = 0x00000003;\n InputType.TYPE_CLASS_DATETIME = 0x00000004;\n InputType.TYPE_DATETIME_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_DATETIME_VARIATION_DATE = 0x00000010;\n InputType.TYPE_DATETIME_VARIATION_TIME = 0x00000020;\n text.InputType = InputType;\n (function (InputType) {\n class LimitCode {\n }\n LimitCode.TYPE_CLASS_NUMBER = [\n KeyEvent.KEYCODE_Digit0,\n KeyEvent.KEYCODE_Digit1,\n KeyEvent.KEYCODE_Digit2,\n KeyEvent.KEYCODE_Digit3,\n KeyEvent.KEYCODE_Digit4,\n KeyEvent.KEYCODE_Digit5,\n KeyEvent.KEYCODE_Digit6,\n KeyEvent.KEYCODE_Digit7,\n KeyEvent.KEYCODE_Digit8,\n KeyEvent.KEYCODE_Digit9,\n ];\n LimitCode.TYPE_CLASS_PHONE = [\n KeyEvent.KEYCODE_Comma,\n KeyEvent.KEYCODE_Sharp,\n KeyEvent.KEYCODE_Semicolon,\n KeyEvent.KEYCODE_Asterisk,\n KeyEvent.KEYCODE_Left_Parenthesis,\n KeyEvent.KEYCODE_Right_Parenthesis,\n KeyEvent.KEYCODE_Slash,\n KeyEvent.KEYCODE_KeyN,\n KeyEvent.KEYCODE_Period,\n KeyEvent.KEYCODE_SPACE,\n KeyEvent.KEYCODE_Add,\n KeyEvent.KEYCODE_Minus,\n KeyEvent.KEYCODE_Period,\n KeyEvent.KEYCODE_Digit0,\n KeyEvent.KEYCODE_Digit1,\n KeyEvent.KEYCODE_Digit2,\n KeyEvent.KEYCODE_Digit3,\n KeyEvent.KEYCODE_Digit4,\n KeyEvent.KEYCODE_Digit5,\n KeyEvent.KEYCODE_Digit6,\n KeyEvent.KEYCODE_Digit7,\n KeyEvent.KEYCODE_Digit8,\n KeyEvent.KEYCODE_Digit9,\n ];\n InputType.LimitCode = LimitCode;\n })(InputType = text.InputType || (text.InputType = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class LongSparseArray extends util.SparseArray {\n }\n util.LongSparseArray = LongSparseArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class HapticFeedbackConstants {\n }\n HapticFeedbackConstants.LONG_PRESS = 0;\n HapticFeedbackConstants.VIRTUAL_KEY = 1;\n HapticFeedbackConstants.KEYBOARD_TAP = 3;\n HapticFeedbackConstants.SAFE_MODE_DISABLED = 10000;\n HapticFeedbackConstants.SAFE_MODE_ENABLED = 10001;\n HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING = 0x0001;\n HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING = 0x0002;\n view.HapticFeedbackConstants = HapticFeedbackConstants;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n class DataSetObserver {\n onChanged() {\n }\n onInvalidated() {\n }\n }\n database.DataSetObserver = DataSetObserver;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var SystemClock = android.os.SystemClock;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Long = java.lang.Long;\n class AdapterView extends ViewGroup {\n constructor(...args) {\n super(...args);\n this.mFirstPosition = 0;\n this.mSpecificTop = 0;\n this.mSyncPosition = 0;\n this.mSyncRowId = AdapterView.INVALID_ROW_ID;\n this.mSyncHeight = 0;\n this.mNeedSync = false;\n this.mSyncMode = 0;\n this.mLayoutHeight = 0;\n this.mInLayout = false;\n this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mItemCount = 0;\n this.mOldItemCount = 0;\n this.mOldSelectedPosition = AdapterView.INVALID_POSITION;\n this.mOldSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mBlockLayoutRequests = false;\n }\n setOnItemClickListener(listener) {\n this.mOnItemClickListener = listener;\n }\n getOnItemClickListener() {\n return this.mOnItemClickListener;\n }\n performItemClick(view, position, id) {\n if (this.mOnItemClickListener != null) {\n this.playSoundEffect(SoundEffectConstants.CLICK);\n this.mOnItemClickListener.onItemClick(this, view, position, id);\n return true;\n }\n return false;\n }\n setOnItemLongClickListener(listener) {\n if (!this.isLongClickable()) {\n this.setLongClickable(true);\n }\n this.mOnItemLongClickListener = listener;\n }\n getOnItemLongClickListener() {\n return this.mOnItemLongClickListener;\n }\n setOnItemSelectedListener(listener) {\n this.mOnItemSelectedListener = listener;\n }\n getOnItemSelectedListener() {\n return this.mOnItemSelectedListener;\n }\n addView(...args) {\n throw Error(`new UnsupportedOperationException(\"addView() is not supported in AdapterView\")`);\n }\n removeView(child) {\n throw Error(`new UnsupportedOperationException(\"removeView(View) is not supported in AdapterView\")`);\n }\n removeViewAt(index) {\n throw Error(`new UnsupportedOperationException(\"removeViewAt(int) is not supported in AdapterView\")`);\n }\n removeAllViews() {\n throw Error(`new UnsupportedOperationException(\"removeAllViews() is not supported in AdapterView\")`);\n }\n onLayout(changed, left, top, right, bottom) {\n this.mLayoutHeight = this.getHeight();\n }\n getSelectedItemPosition() {\n return this.mNextSelectedPosition;\n }\n getSelectedItemId() {\n return this.mNextSelectedRowId;\n }\n getSelectedItem() {\n let adapter = this.getAdapter();\n let selection = this.getSelectedItemPosition();\n if (adapter != null && adapter.getCount() > 0 && selection >= 0) {\n return adapter.getItem(selection);\n }\n else {\n return null;\n }\n }\n getCount() {\n return this.mItemCount;\n }\n getPositionForView(view) {\n let listItem = view;\n try {\n let v;\n while (!((v = listItem.getParent()) == (this))) {\n listItem = v;\n }\n }\n catch (e) {\n return AdapterView.INVALID_POSITION;\n }\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n if (this.getChildAt(i) == (listItem)) {\n return this.mFirstPosition + i;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n getFirstVisiblePosition() {\n return this.mFirstPosition;\n }\n getLastVisiblePosition() {\n return this.mFirstPosition + this.getChildCount() - 1;\n }\n setEmptyView(emptyView) {\n this.mEmptyView = emptyView;\n const adapter = this.getAdapter();\n const empty = ((adapter == null) || adapter.isEmpty());\n this.updateEmptyStatus(empty);\n }\n getEmptyView() {\n return this.mEmptyView;\n }\n isInFilterMode() {\n return false;\n }\n setFocusable(focusable) {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n this.mDesiredFocusableState = focusable;\n if (!focusable) {\n this.mDesiredFocusableInTouchModeState = false;\n }\n super.setFocusable(focusable && (!empty || this.isInFilterMode()));\n }\n setFocusableInTouchMode(focusable) {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n this.mDesiredFocusableInTouchModeState = focusable;\n if (focusable) {\n this.mDesiredFocusableState = true;\n }\n super.setFocusableInTouchMode(focusable && (!empty || this.isInFilterMode()));\n }\n checkFocus() {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n const focusable = !empty || this.isInFilterMode();\n super.setFocusableInTouchMode(focusable && this.mDesiredFocusableInTouchModeState);\n super.setFocusable(focusable && this.mDesiredFocusableState);\n if (this.mEmptyView != null) {\n this.updateEmptyStatus((adapter == null) || adapter.isEmpty());\n }\n }\n updateEmptyStatus(empty) {\n if (this.isInFilterMode()) {\n empty = false;\n }\n if (empty) {\n if (this.mEmptyView != null) {\n this.mEmptyView.setVisibility(View.VISIBLE);\n this.setVisibility(View.GONE);\n }\n else {\n this.setVisibility(View.VISIBLE);\n }\n if (this.mDataChanged) {\n this.onLayout(false, this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n }\n else {\n if (this.mEmptyView != null)\n this.mEmptyView.setVisibility(View.GONE);\n this.setVisibility(View.VISIBLE);\n }\n }\n getItemAtPosition(position) {\n let adapter = this.getAdapter();\n return (adapter == null || position < 0) ? null : adapter.getItem(position);\n }\n getItemIdAtPosition(position) {\n let adapter = this.getAdapter();\n return (adapter == null || position < 0) ? AdapterView.INVALID_ROW_ID : adapter.getItemId(position);\n }\n setOnClickListener(l) {\n throw Error(`new RuntimeException(\"Don't call setOnClickListener for an AdapterView. \" + \"You probably want setOnItemClickListener instead\")`);\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.removeCallbacks(this.mSelectionNotifier);\n }\n selectionChanged() {\n if (this.mOnItemSelectedListener != null) {\n if (this.mInLayout || this.mBlockLayoutRequests) {\n if (this.mSelectionNotifier == null) {\n this.mSelectionNotifier = new SelectionNotifier(this);\n }\n this.post(this.mSelectionNotifier);\n }\n else {\n this.fireOnSelected();\n this.performAccessibilityActionsOnSelected();\n }\n }\n }\n fireOnSelected() {\n if (this.mOnItemSelectedListener == null) {\n return;\n }\n const selection = this.getSelectedItemPosition();\n if (selection >= 0) {\n let v = this.getSelectedView();\n this.mOnItemSelectedListener.onItemSelected(this, v, selection, this.getAdapter().getItemId(selection));\n }\n else {\n this.mOnItemSelectedListener.onNothingSelected(this);\n }\n }\n performAccessibilityActionsOnSelected() {\n }\n isScrollableForAccessibility() {\n let adapter = this.getAdapter();\n if (adapter != null) {\n const itemCount = adapter.getCount();\n return itemCount > 0 && (this.getFirstVisiblePosition() > 0 || this.getLastVisiblePosition() < itemCount - 1);\n }\n return false;\n }\n canAnimate() {\n return super.canAnimate() && this.mItemCount > 0;\n }\n handleDataChanged() {\n const count = this.mItemCount;\n let found = false;\n if (count > 0) {\n let newPos;\n if (this.mNeedSync) {\n this.mNeedSync = false;\n newPos = this.findSyncPosition();\n if (newPos >= 0) {\n let selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos == newPos) {\n this.setNextSelectedPositionInt(newPos);\n found = true;\n }\n }\n }\n if (!found) {\n newPos = this.getSelectedItemPosition();\n if (newPos >= count) {\n newPos = count - 1;\n }\n if (newPos < 0) {\n newPos = 0;\n }\n let selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos < 0) {\n selectablePos = this.lookForSelectablePosition(newPos, false);\n }\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n this.checkSelectionChanged();\n found = true;\n }\n }\n }\n if (!found) {\n this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mNeedSync = false;\n this.checkSelectionChanged();\n }\n }\n checkSelectionChanged() {\n if ((this.mSelectedPosition != this.mOldSelectedPosition) || (this.mSelectedRowId != this.mOldSelectedRowId)) {\n this.selectionChanged();\n this.mOldSelectedPosition = this.mSelectedPosition;\n this.mOldSelectedRowId = this.mSelectedRowId;\n }\n }\n findSyncPosition() {\n let count = this.mItemCount;\n if (count == 0) {\n return AdapterView.INVALID_POSITION;\n }\n let idToMatch = this.mSyncRowId;\n let seed = this.mSyncPosition;\n if (idToMatch == AdapterView.INVALID_ROW_ID) {\n return AdapterView.INVALID_POSITION;\n }\n seed = Math.max(0, seed);\n seed = Math.min(count - 1, seed);\n let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS;\n let rowId;\n let first = seed;\n let last = seed;\n let next = false;\n let hitFirst;\n let hitLast;\n let adapter = this.getAdapter();\n if (adapter == null) {\n return AdapterView.INVALID_POSITION;\n }\n while (SystemClock.uptimeMillis() <= endTime) {\n rowId = adapter.getItemId(seed);\n if (rowId == idToMatch) {\n return seed;\n }\n hitLast = last == count - 1;\n hitFirst = first == 0;\n if (hitLast && hitFirst) {\n break;\n }\n if (hitFirst || (next && !hitLast)) {\n last++;\n seed = last;\n next = false;\n }\n else if (hitLast || (!next && !hitFirst)) {\n first--;\n seed = first;\n next = true;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n lookForSelectablePosition(position, lookDown) {\n return position;\n }\n setSelectedPositionInt(position) {\n this.mSelectedPosition = position;\n this.mSelectedRowId = this.getItemIdAtPosition(position);\n }\n setNextSelectedPositionInt(position) {\n this.mNextSelectedPosition = position;\n this.mNextSelectedRowId = this.getItemIdAtPosition(position);\n if (this.mNeedSync && this.mSyncMode == AdapterView.SYNC_SELECTED_POSITION && position >= 0) {\n this.mSyncPosition = position;\n this.mSyncRowId = this.mNextSelectedRowId;\n }\n }\n rememberSyncState() {\n if (this.getChildCount() > 0) {\n this.mNeedSync = true;\n this.mSyncHeight = this.mLayoutHeight;\n if (this.mSelectedPosition >= 0) {\n let v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n this.mSyncRowId = this.mNextSelectedRowId;\n this.mSyncPosition = this.mNextSelectedPosition;\n if (v != null) {\n this.mSpecificTop = v.getTop();\n }\n this.mSyncMode = AdapterView.SYNC_SELECTED_POSITION;\n }\n else {\n let v = this.getChildAt(0);\n let adapter = this.getAdapter();\n if (this.mFirstPosition >= 0 && this.mFirstPosition < adapter.getCount()) {\n this.mSyncRowId = adapter.getItemId(this.mFirstPosition);\n }\n else {\n this.mSyncRowId = AdapterView.NO_ID;\n }\n this.mSyncPosition = this.mFirstPosition;\n if (v != null) {\n this.mSpecificTop = v.getTop();\n }\n this.mSyncMode = AdapterView.SYNC_FIRST_POSITION;\n }\n }\n }\n }\n AdapterView.ITEM_VIEW_TYPE_IGNORE = -1;\n AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2;\n AdapterView.SYNC_SELECTED_POSITION = 0;\n AdapterView.SYNC_FIRST_POSITION = 1;\n AdapterView.SYNC_MAX_DURATION_MILLIS = 100;\n AdapterView.INVALID_POSITION = -1;\n AdapterView.INVALID_ROW_ID = Long.MIN_VALUE;\n widget.AdapterView = AdapterView;\n (function (AdapterView) {\n class AdapterDataSetObserver extends DataSetObserver {\n constructor(AdapterView_this) {\n super();\n this.AdapterView_this = AdapterView_this;\n }\n onChanged() {\n this.AdapterView_this.mDataChanged = true;\n this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount;\n this.AdapterView_this.mItemCount = this.AdapterView_this.getAdapter().getCount();\n this.AdapterView_this.rememberSyncState();\n this.AdapterView_this.checkFocus();\n this.AdapterView_this.requestLayout();\n }\n onInvalidated() {\n this.AdapterView_this.mDataChanged = true;\n this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount;\n this.AdapterView_this.mItemCount = 0;\n this.AdapterView_this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.AdapterView_this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.AdapterView_this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.AdapterView_this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.AdapterView_this.mNeedSync = false;\n this.AdapterView_this.checkFocus();\n this.AdapterView_this.requestLayout();\n }\n clearSavedState() {\n }\n }\n AdapterView.AdapterDataSetObserver = AdapterDataSetObserver;\n })(AdapterView = widget.AdapterView || (widget.AdapterView = {}));\n class SelectionNotifier {\n constructor(AdapterView_this) {\n this.AdapterView_this = AdapterView_this;\n }\n run() {\n if (this.AdapterView_this.mDataChanged) {\n if (this.AdapterView_this.getAdapter() != null) {\n this.AdapterView_this.post(this);\n }\n }\n else {\n this.AdapterView_this.fireOnSelected();\n this.AdapterView_this.performAccessibilityActionsOnSelected();\n }\n }\n }\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Integer = java.lang.Integer;\n var Adapter;\n (function (Adapter) {\n Adapter.IGNORE_ITEM_VIEW_TYPE = widget.AdapterView.ITEM_VIEW_TYPE_IGNORE;\n Adapter.NO_SELECTION = Integer.MIN_VALUE;\n })(Adapter = widget.Adapter || (widget.Adapter = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_8) {\n var Paint = android.graphics.Paint;\n var ParagraphStyle = android.text.style.ParagraphStyle;\n var Layout = android.text.Layout;\n var Spanned = android.text.Spanned;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextLine = android.text.TextLine;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n class BoringLayout extends Layout {\n constructor(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n super(source, paint, outerwidth, align, TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingmult, spacingadd);\n this.mBottom = 0;\n this.mDesc = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mMax = 0;\n this.mEllipsizedWidth = 0;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n let trust;\n if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) {\n this.mEllipsizedWidth = outerwidth;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n trust = true;\n }\n else {\n this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = ellipsizedWidth;\n trust = false;\n }\n this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust);\n }\n static make(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n return new BoringLayout(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize, ellipsizedWidth);\n }\n replaceOrMake(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n let trust;\n if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) {\n this.replaceWith(source, paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = outerwidth;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n trust = true;\n }\n else {\n this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = ellipsizedWidth;\n trust = false;\n }\n this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust);\n return this;\n }\n init(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trustWidth) {\n let spacing;\n if (Object.getPrototypeOf(source) === String.prototype && align == Layout.Alignment.ALIGN_NORMAL) {\n this.mDirect = source.toString();\n }\n else {\n this.mDirect = null;\n }\n this.mPaint = paint;\n if (includepad) {\n spacing = metrics.bottom - metrics.top;\n }\n else {\n spacing = metrics.descent - metrics.ascent;\n }\n if (spacingmult != 1 || spacingadd != 0) {\n spacing = Math.floor((spacing * spacingmult + spacingadd + 0.5));\n }\n this.mBottom = spacing;\n if (includepad) {\n this.mDesc = spacing + metrics.top;\n }\n else {\n this.mDesc = spacing + metrics.ascent;\n }\n if (trustWidth) {\n this.mMax = metrics.width;\n }\n else {\n let line = TextLine.obtain();\n line.set(paint, source, 0, source.length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null);\n this.mMax = Math.floor(Math.ceil(line.metrics(null)));\n TextLine.recycle(line);\n }\n if (includepad) {\n this.mTopPadding = metrics.top - metrics.ascent;\n this.mBottomPadding = metrics.bottom - metrics.descent;\n }\n }\n static isBoring(text, paint, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics = null) {\n let temp;\n let length = text.length;\n let boring = true;\n outer: for (let i = 0; i < length; i += 500) {\n let j = i + 500;\n if (j > length)\n j = length;\n temp = text.substring(i, j);\n let n = j - i;\n for (let a = 0; a < n; a++) {\n let c = temp[a];\n if (c == '\\n' || c == '\\t') {\n boring = false;\n break outer;\n }\n }\n if (textDir != null && textDir.isRtl(temp, 0, n)) {\n boring = false;\n break outer;\n }\n }\n if (boring && Spanned.isImplements(text)) {\n let sp = text;\n let styles = sp.getSpans(0, length, ParagraphStyle.type);\n if (styles.length > 0) {\n boring = false;\n }\n }\n if (boring) {\n let fm = metrics;\n if (fm == null) {\n fm = new BoringLayout.Metrics();\n }\n let line = TextLine.obtain();\n line.set(paint, text, 0, length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null);\n fm.width = Math.floor(Math.ceil(line.metrics(fm)));\n TextLine.recycle(line);\n return fm;\n }\n else {\n return null;\n }\n }\n getHeight() {\n return this.mBottom;\n }\n getLineCount() {\n return 1;\n }\n getLineTop(line) {\n if (line == 0)\n return 0;\n else\n return this.mBottom;\n }\n getLineDescent(line) {\n return this.mDesc;\n }\n getLineStart(line) {\n if (line == 0)\n return 0;\n else\n return this.getText().length;\n }\n getParagraphDirection(line) {\n return BoringLayout.DIR_LEFT_TO_RIGHT;\n }\n getLineContainsTab(line) {\n return false;\n }\n getLineMax(line) {\n return this.mMax;\n }\n getLineDirections(line) {\n return Layout.DIRS_ALL_LEFT_TO_RIGHT;\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsisCount(line) {\n return this.mEllipsizedCount;\n }\n getEllipsisStart(line) {\n return this.mEllipsizedStart;\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n draw(c, highlight, highlightpaint, cursorOffset) {\n if (this.mDirect != null && highlight == null) {\n c.drawText(this.mDirect, 0, this.mBottom - this.mDesc, this.mPaint);\n }\n else {\n super.draw(c, highlight, highlightpaint, cursorOffset);\n }\n }\n ellipsized(start, end) {\n this.mEllipsizedStart = start;\n this.mEllipsizedCount = end - start;\n }\n }\n BoringLayout.FIRST_RIGHT_TO_LEFT = '֐'.codePointAt(0);\n BoringLayout.sTemp = new TextPaint();\n text_8.BoringLayout = BoringLayout;\n (function (BoringLayout) {\n class Metrics extends Paint.FontMetricsInt {\n constructor(...args) {\n super(...args);\n this.width = 0;\n }\n toString() {\n return super.toString() + \" width=\" + this.width;\n }\n }\n BoringLayout.Metrics = Metrics;\n })(BoringLayout = text_8.BoringLayout || (text_8.BoringLayout = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var System = java.lang.System;\n class PackedIntVector {\n constructor(columns) {\n this.mColumns = 0;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = 0;\n this.mColumns = columns;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = this.mRows;\n this.mValues = null;\n this.mValueGap = androidui.util.ArrayCreator.newNumberArray(2 * columns);\n }\n getValue(row, column) {\n const columns = this.mColumns;\n if (((row | column) < 0) || (row >= this.size()) || (column >= columns)) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + column)`);\n }\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let value = this.mValues[row * columns + column];\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value += valuegap[column + columns];\n }\n return value;\n }\n setValue(row, column, value) {\n if (((row | column) < 0) || (row >= this.size()) || (column >= this.mColumns)) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + column)`);\n }\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value -= valuegap[column + this.mColumns];\n }\n this.mValues[row * this.mColumns + column] = value;\n }\n setValueInternal(row, column, value) {\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value -= valuegap[column + this.mColumns];\n }\n this.mValues[row * this.mColumns + column] = value;\n }\n adjustValuesBelow(startRow, column, delta) {\n if (((startRow | column) < 0) || (startRow > this.size()) || (column >= this.width())) {\n throw Error(`new IndexOutOfBoundsException(startRow + \", \" + column)`);\n }\n if (startRow >= this.mRowGapStart) {\n startRow += this.mRowGapLength;\n }\n this.moveValueGapTo(column, startRow);\n this.mValueGap[column + this.mColumns] += delta;\n }\n insertAt(row, values) {\n if ((row < 0) || (row > this.size())) {\n throw Error(`new IndexOutOfBoundsException(\"row \" + row)`);\n }\n if ((values != null) && (values.length < this.width())) {\n throw Error(`new IndexOutOfBoundsException(\"value count \" + values.length)`);\n }\n this.moveRowGapTo(row);\n if (this.mRowGapLength == 0) {\n this.growBuffer();\n }\n this.mRowGapStart++;\n this.mRowGapLength--;\n if (values == null) {\n for (let i = this.mColumns - 1; i >= 0; i--) {\n this.setValueInternal(row, i, 0);\n }\n }\n else {\n for (let i = this.mColumns - 1; i >= 0; i--) {\n this.setValueInternal(row, i, values[i]);\n }\n }\n }\n deleteAt(row, count) {\n if (((row | count) < 0) || (row + count > this.size())) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + count)`);\n }\n this.moveRowGapTo(row + count);\n this.mRowGapStart -= count;\n this.mRowGapLength += count;\n }\n size() {\n return this.mRows - this.mRowGapLength;\n }\n width() {\n return this.mColumns;\n }\n growBuffer() {\n const columns = this.mColumns;\n let newsize = this.size() + 1;\n newsize = (newsize * columns) / columns;\n let newvalues = androidui.util.ArrayCreator.newNumberArray(newsize * columns);\n const valuegap = this.mValueGap;\n const rowgapstart = this.mRowGapStart;\n let after = this.mRows - (rowgapstart + this.mRowGapLength);\n if (this.mValues != null) {\n System.arraycopy(this.mValues, 0, newvalues, 0, columns * rowgapstart);\n System.arraycopy(this.mValues, (this.mRows - after) * columns, newvalues, (newsize - after) * columns, after * columns);\n }\n for (let i = 0; i < columns; i++) {\n if (valuegap[i] >= rowgapstart) {\n valuegap[i] += newsize - this.mRows;\n if (valuegap[i] < rowgapstart) {\n valuegap[i] = rowgapstart;\n }\n }\n }\n this.mRowGapLength += newsize - this.mRows;\n this.mRows = newsize;\n this.mValues = newvalues;\n }\n moveValueGapTo(column, where) {\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const columns = this.mColumns;\n if (where == valuegap[column]) {\n return;\n }\n else if (where > valuegap[column]) {\n for (let i = valuegap[column]; i < where; i++) {\n values[i * columns + column] += valuegap[column + columns];\n }\n }\n else {\n for (let i = where; i < valuegap[column]; i++) {\n values[i * columns + column] -= valuegap[column + columns];\n }\n }\n valuegap[column] = where;\n }\n moveRowGapTo(where) {\n if (where == this.mRowGapStart) {\n return;\n }\n else if (where > this.mRowGapStart) {\n let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength);\n const columns = this.mColumns;\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const gapend = this.mRowGapStart + this.mRowGapLength;\n for (let i = gapend; i < gapend + moving; i++) {\n let destrow = i - gapend + this.mRowGapStart;\n for (let j = 0; j < columns; j++) {\n let val = values[i * columns + j];\n if (i >= valuegap[j]) {\n val += valuegap[j + columns];\n }\n if (destrow >= valuegap[j]) {\n val -= valuegap[j + columns];\n }\n values[destrow * columns + j] = val;\n }\n }\n }\n else {\n let moving = this.mRowGapStart - where;\n const columns = this.mColumns;\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const gapend = this.mRowGapStart + this.mRowGapLength;\n for (let i = where + moving - 1; i >= where; i--) {\n let destrow = i - where + gapend - moving;\n for (let j = 0; j < columns; j++) {\n let val = values[i * columns + j];\n if (i >= valuegap[j]) {\n val += valuegap[j + columns];\n }\n if (destrow >= valuegap[j]) {\n val -= valuegap[j + columns];\n }\n values[destrow * columns + j] = val;\n }\n }\n }\n this.mRowGapStart = where;\n }\n }\n text.PackedIntVector = PackedIntVector;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var System = java.lang.System;\n class PackedObjectVector {\n constructor(columns) {\n this.mColumns = 0;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = 0;\n this.mColumns = columns;\n this.mRows = 1;\n this.mRowGapStart = 0;\n this.mRowGapLength = this.mRows;\n this.mValues = new Array(this.mRows * this.mColumns);\n }\n getValue(row, column) {\n if (row >= this.mRowGapStart)\n row += this.mRowGapLength;\n let value = this.mValues[row * this.mColumns + column];\n return value;\n }\n setValue(row, column, value) {\n if (row >= this.mRowGapStart)\n row += this.mRowGapLength;\n this.mValues[row * this.mColumns + column] = value;\n }\n insertAt(row, values) {\n this.moveRowGapTo(row);\n if (this.mRowGapLength == 0)\n this.growBuffer();\n this.mRowGapStart++;\n this.mRowGapLength--;\n if (values == null)\n for (let i = 0; i < this.mColumns; i++)\n this.setValue(row, i, null);\n else\n for (let i = 0; i < this.mColumns; i++)\n this.setValue(row, i, values[i]);\n }\n deleteAt(row, count) {\n this.moveRowGapTo(row + count);\n this.mRowGapStart -= count;\n this.mRowGapLength += count;\n if (this.mRowGapLength > this.size() * 2) {\n }\n }\n size() {\n return this.mRows - this.mRowGapLength;\n }\n width() {\n return this.mColumns;\n }\n growBuffer() {\n let newsize = this.size() + 1;\n newsize = (newsize * this.mColumns) / this.mColumns;\n let newvalues = new Array(newsize * this.mColumns);\n let after = this.mRows - (this.mRowGapStart + this.mRowGapLength);\n System.arraycopy(this.mValues, 0, newvalues, 0, this.mColumns * this.mRowGapStart);\n System.arraycopy(this.mValues, (this.mRows - after) * this.mColumns, newvalues, (newsize - after) * this.mColumns, after * this.mColumns);\n this.mRowGapLength += newsize - this.mRows;\n this.mRows = newsize;\n this.mValues = newvalues;\n }\n moveRowGapTo(where) {\n if (where == this.mRowGapStart)\n return;\n if (where > this.mRowGapStart) {\n let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength);\n for (let i = this.mRowGapStart + this.mRowGapLength; i < this.mRowGapStart + this.mRowGapLength + moving; i++) {\n let destrow = i - (this.mRowGapStart + this.mRowGapLength) + this.mRowGapStart;\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n this.mValues[destrow * this.mColumns + j] = val;\n }\n }\n }\n else {\n let moving = this.mRowGapStart - where;\n for (let i = where + moving - 1; i >= where; i--) {\n let destrow = i - where + this.mRowGapStart + this.mRowGapLength - moving;\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n this.mValues[destrow * this.mColumns + j] = val;\n }\n }\n }\n this.mRowGapStart = where;\n }\n dump() {\n for (let i = 0; i < this.mRows; i++) {\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n if (i < this.mRowGapStart || i >= this.mRowGapStart + this.mRowGapLength)\n System.out.print(val + \" \");\n else\n System.out.print(\"(\" + val + \") \");\n }\n System.out.print(\" << \\n\");\n }\n System.out.print(\"-----\\n\\n\");\n }\n }\n text.PackedObjectVector = PackedObjectVector;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var Spannable;\n (function (Spannable) {\n function isImpl(obj) {\n return obj && obj['setSpan'] && obj['removeSpan'];\n }\n Spannable.isImpl = isImpl;\n class Factory {\n static getInstance() {\n return Factory.sInstance;\n }\n newSpannable(source) {\n return source;\n }\n }\n Factory.sInstance = new Factory();\n Spannable.Factory = Factory;\n })(Spannable = text.Spannable || (text.Spannable = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_9) {\n var style;\n (function (style) {\n var LineHeightSpan;\n (function (LineHeightSpan) {\n LineHeightSpan.type = Symbol();\n })(LineHeightSpan = style.LineHeightSpan || (style.LineHeightSpan = {}));\n })(style = text_9.style || (text_9.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_10) {\n var Paint = android.graphics.Paint;\n var LeadingMarginSpan = android.text.style.LeadingMarginSpan;\n var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2;\n var LineHeightSpan = android.text.style.LineHeightSpan;\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n var TabStopSpan = android.text.style.TabStopSpan;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var Layout = android.text.Layout;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var TextUtils = android.text.TextUtils;\n class StaticLayout extends Layout {\n constructor(source, bufstart, bufend, paint, outerwidth, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0, maxLines = Integer.MAX_VALUE) {\n super((ellipsize == null) ? source : (Spanned.isImplements(source)) ? new Layout.SpannedEllipsizer(source) : new Layout.Ellipsizer(source), paint, outerwidth, align, textDir, spacingmult, spacingadd);\n this.mLineCount = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mColumns = 0;\n this.mEllipsizedWidth = 0;\n this.mMaximumVisibleLineCount = Integer.MAX_VALUE;\n this.mFontMetricsInt = new Paint.FontMetricsInt();\n if (source == null) {\n this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE;\n this.mLines = androidui.util.ArrayCreator.newNumberArray((2 * this.mColumns));\n this.mLineDirections = new Array((2 * this.mColumns));\n this.mMeasured = MeasuredText.obtain();\n return;\n }\n if (ellipsize != null) {\n let e = this.getText();\n e.mLayout = this;\n e.mWidth = ellipsizedWidth;\n e.mMethod = ellipsize;\n this.mEllipsizedWidth = ellipsizedWidth;\n this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE;\n }\n else {\n this.mColumns = StaticLayout.COLUMNS_NORMAL;\n this.mEllipsizedWidth = outerwidth;\n }\n this.mLines = androidui.util.ArrayCreator.newNumberArray(2 * this.mColumns);\n this.mLineDirections = new Array(2 * this.mColumns);\n this.mMaximumVisibleLineCount = maxLines;\n this.mMeasured = MeasuredText.obtain();\n this.generate(source, bufstart, bufend, paint, outerwidth, textDir, spacingmult, spacingadd, includepad, includepad, ellipsizedWidth, ellipsize);\n this.mMeasured = MeasuredText.recycle(this.mMeasured);\n this.mFontMetricsInt = null;\n }\n generate(source, bufStart, bufEnd, paint, outerWidth, textDir, spacingmult, spacingadd, includepad, trackpad, ellipsizedWidth, ellipsize) {\n this.mLineCount = 0;\n let v = 0;\n let needMultiply = (spacingmult != 1 || spacingadd != 0);\n let fm = this.mFontMetricsInt;\n let chooseHtv = null;\n let measured = this.mMeasured;\n let spanned = null;\n if (Spanned.isImplements(source))\n spanned = source;\n let DEFAULT_DIR = StaticLayout.DIR_LEFT_TO_RIGHT;\n let paraEnd;\n for (let paraStart = bufStart; paraStart <= bufEnd; paraStart = paraEnd) {\n paraEnd = source.substring(0, bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE, paraStart);\n if (paraEnd < 0)\n paraEnd = bufEnd;\n else\n paraEnd++;\n let firstWidthLineLimit = this.mLineCount + 1;\n let firstWidth = outerWidth;\n let restWidth = outerWidth;\n let chooseHt = null;\n if (spanned != null) {\n let sp = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LeadingMarginSpan.type);\n for (let i = 0; i < sp.length; i++) {\n let lms = sp[i];\n firstWidth -= sp[i].getLeadingMargin(true);\n restWidth -= sp[i].getLeadingMargin(false);\n if (LeadingMarginSpan2.isImpl(lms)) {\n let lms2 = lms;\n let lmsFirstLine = this.getLineForOffset(spanned.getSpanStart(lms2));\n firstWidthLineLimit = lmsFirstLine + lms2.getLeadingMarginLineCount();\n }\n }\n chooseHt = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LineHeightSpan.type);\n if (chooseHt.length != 0) {\n if (chooseHtv == null || chooseHtv.length < chooseHt.length) {\n chooseHtv = androidui.util.ArrayCreator.newNumberArray(chooseHt.length);\n }\n for (let i = 0; i < chooseHt.length; i++) {\n let o = spanned.getSpanStart(chooseHt[i]);\n if (o < paraStart) {\n chooseHtv[i] = this.getLineTop(this.getLineForOffset(o));\n }\n else {\n chooseHtv[i] = v;\n }\n }\n }\n }\n measured.setPara(source, paraStart, paraEnd, textDir);\n let chs = measured.mChars;\n let widths = measured.mWidths;\n let chdirs = measured.mLevels;\n let dir = measured.mDir;\n let easy = measured.mEasy;\n let width = firstWidth;\n let w = 0;\n let here = paraStart;\n let ok = paraStart;\n let okWidth = w;\n let okAscent = 0, okDescent = 0, okTop = 0, okBottom = 0;\n let fit = paraStart;\n let fitWidth = w;\n let fitAscent = 0, fitDescent = 0, fitTop = 0, fitBottom = 0;\n let hasTabOrEmoji = false;\n let hasTab = false;\n let tabStops = null;\n for (let spanStart = paraStart, spanEnd; spanStart < paraEnd; spanStart = spanEnd) {\n if (spanned == null) {\n spanEnd = paraEnd;\n let spanLen = spanEnd - spanStart;\n measured.addStyleRun(paint, spanLen, fm);\n }\n else {\n spanEnd = spanned.nextSpanTransition(spanStart, paraEnd, MetricAffectingSpan.type);\n let spanLen = spanEnd - spanStart;\n let spans = spanned.getSpans(spanStart, spanEnd, MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, spanned, MetricAffectingSpan.type);\n measured.addStyleRun(paint, spans, spanLen, fm);\n }\n let fmTop = fm.top;\n let fmBottom = fm.bottom;\n let fmAscent = fm.ascent;\n let fmDescent = fm.descent;\n for (let j = spanStart; j < spanEnd; j++) {\n let c = chs[j - paraStart];\n if (c == StaticLayout.CHAR_NEW_LINE) {\n }\n else if (c == StaticLayout.CHAR_TAB) {\n if (hasTab == false) {\n hasTab = true;\n hasTabOrEmoji = true;\n if (spanned != null) {\n let spans = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, TabStopSpan.type);\n if (spans.length > 0) {\n tabStops = new Layout.TabStops(StaticLayout.TAB_INCREMENT, spans);\n }\n }\n }\n if (tabStops != null) {\n w = tabStops.nextTab(w);\n }\n else {\n w = StaticLayout.TabStops.nextDefaultStop(w, StaticLayout.TAB_INCREMENT);\n }\n }\n else if (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_HIGH_SURROGATE\n && c.codePointAt(0) <= StaticLayout.CHAR_LAST_LOW_SURROGATE && j + 1 < spanEnd) {\n let emoji = chs.codePointAt(j - paraStart);\n w += widths[j - paraStart];\n }\n else {\n w += widths[j - paraStart];\n }\n let isSpaceOrTab = c == StaticLayout.CHAR_SPACE || c == StaticLayout.CHAR_TAB || c == StaticLayout.CHAR_ZWSP;\n if (w <= width || isSpaceOrTab) {\n fitWidth = w;\n fit = j + 1;\n if (fmTop < fitTop)\n fitTop = fmTop;\n if (fmAscent < fitAscent)\n fitAscent = fmAscent;\n if (fmDescent > fitDescent)\n fitDescent = fmDescent;\n if (fmBottom > fitBottom)\n fitBottom = fmBottom;\n let isLineBreak = isSpaceOrTab ||\n ((c == StaticLayout.CHAR_SLASH || c == StaticLayout.CHAR_HYPHEN) && (j + 1 >= spanEnd ||\n !Number.isInteger(Number.parseInt(chs[j + 1 - paraStart])))) ||\n (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_CJK.codePointAt(0) && StaticLayout.isIdeographic(c, true) && j + 1 < spanEnd && StaticLayout.isIdeographic(chs[j + 1 - paraStart], false));\n if (isLineBreak) {\n okWidth = w;\n ok = j + 1;\n if (fitTop < okTop)\n okTop = fitTop;\n if (fitAscent < okAscent)\n okAscent = fitAscent;\n if (fitDescent > okDescent)\n okDescent = fitDescent;\n if (fitBottom > okBottom)\n okBottom = fitBottom;\n }\n }\n else {\n const moreChars = (j + 1 < spanEnd);\n let endPos;\n let above, below, top, bottom;\n let currentTextWidth;\n if (ok != here) {\n endPos = ok;\n above = okAscent;\n below = okDescent;\n top = okTop;\n bottom = okBottom;\n currentTextWidth = okWidth;\n }\n else if (fit != here) {\n endPos = fit;\n above = fitAscent;\n below = fitDescent;\n top = fitTop;\n bottom = fitBottom;\n currentTextWidth = fitWidth;\n }\n else {\n endPos = here + 1;\n above = fm.ascent;\n below = fm.descent;\n top = fm.top;\n bottom = fm.bottom;\n currentTextWidth = widths[here - paraStart];\n }\n v = this.out(source, here, endPos, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, currentTextWidth, paint, moreChars);\n here = endPos;\n j = here - 1;\n ok = fit = here;\n w = 0;\n fitAscent = fitDescent = fitTop = fitBottom = 0;\n okAscent = okDescent = okTop = okBottom = 0;\n if (--firstWidthLineLimit <= 0) {\n width = restWidth;\n }\n if (here < spanStart) {\n measured.setPos(here);\n spanEnd = here;\n break;\n }\n if (this.mLineCount >= this.mMaximumVisibleLineCount) {\n break;\n }\n }\n }\n }\n if (paraEnd != here && this.mLineCount < this.mMaximumVisibleLineCount) {\n if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) {\n paint.getFontMetricsInt(fm);\n fitTop = fm.top;\n fitBottom = fm.bottom;\n fitAscent = fm.ascent;\n fitDescent = fm.descent;\n }\n v = this.out(source, here, paraEnd, fitAscent, fitDescent, fitTop, fitBottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, w, paint, paraEnd != bufEnd);\n }\n paraStart = paraEnd;\n if (paraEnd == bufEnd)\n break;\n }\n if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == StaticLayout.CHAR_NEW_LINE) && this.mLineCount < this.mMaximumVisibleLineCount) {\n measured.setPara(source, bufStart, bufEnd, textDir);\n paint.getFontMetricsInt(fm);\n v = this.out(source, bufEnd, bufEnd, fm.ascent, fm.descent, fm.top, fm.bottom, v, spacingmult, spacingadd, null, null, fm, false, needMultiply, measured.mLevels, measured.mDir, measured.mEasy, bufEnd, includepad, trackpad, null, null, bufStart, ellipsize, ellipsizedWidth, 0, paint, false);\n }\n }\n static isIdeographic(c, includeNonStarters) {\n let code = c.codePointAt(0);\n if (code >= '⺀'.codePointAt(0) && code <= '⿿'.codePointAt(0)) {\n return true;\n }\n if (c == ' ') {\n return true;\n }\n if (code >= '぀'.codePointAt(0) && code <= 'ゟ'.codePointAt(0)) {\n if (!includeNonStarters) {\n switch (c) {\n case 'ぁ':\n case 'ぃ':\n case 'ぅ':\n case 'ぇ':\n case 'ぉ':\n case 'っ':\n case 'ゃ':\n case 'ゅ':\n case 'ょ':\n case 'ゎ':\n case 'ゕ':\n case 'ゖ':\n case '゛':\n case '゜':\n case 'ゝ':\n case 'ゞ':\n return false;\n }\n }\n return true;\n }\n if (code >= '゠'.codePointAt(0) && code <= 'ヿ'.codePointAt(0)) {\n if (!includeNonStarters) {\n switch (c) {\n case '゠':\n case 'ァ':\n case 'ィ':\n case 'ゥ':\n case 'ェ':\n case 'ォ':\n case 'ッ':\n case 'ャ':\n case 'ュ':\n case 'ョ':\n case 'ヮ':\n case 'ヵ':\n case 'ヶ':\n case '・':\n case 'ー':\n case 'ヽ':\n case 'ヾ':\n return false;\n }\n }\n return true;\n }\n if (code >= '㐀'.codePointAt(0) && code <= '䶵'.codePointAt(0)) {\n return true;\n }\n if (code >= '一'.codePointAt(0) && code <= '龻'.codePointAt(0)) {\n return true;\n }\n if (code >= '豈'.codePointAt(0) && code <= '龎'.codePointAt(0)) {\n return true;\n }\n if (code >= 'ꀀ'.codePointAt(0) && code <= '꒏'.codePointAt(0)) {\n return true;\n }\n if (code >= '꒐'.codePointAt(0) && code <= '꓏'.codePointAt(0)) {\n return true;\n }\n if (code >= '﹢'.codePointAt(0) && code <= '﹦'.codePointAt(0)) {\n return true;\n }\n if (code >= '0'.codePointAt(0) && code <= '9'.codePointAt(0)) {\n return true;\n }\n return false;\n }\n out(text, start, end, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includePad, trackPad, chs, widths, widthStart, ellipsize, ellipsisWidth, textWidth, paint, moreChars) {\n let j = this.mLineCount;\n let off = j * this.mColumns;\n let want = off + this.mColumns + StaticLayout.TOP;\n let lines = this.mLines;\n if (want >= lines.length) {\n let nlen = (want + 1);\n let grow = androidui.util.ArrayCreator.newNumberArray(nlen);\n System.arraycopy(lines, 0, grow, 0, lines.length);\n this.mLines = grow;\n lines = grow;\n let grow2 = new Array(nlen);\n System.arraycopy(this.mLineDirections, 0, grow2, 0, this.mLineDirections.length);\n this.mLineDirections = grow2;\n }\n if (chooseHt != null) {\n fm.ascent = above;\n fm.descent = below;\n fm.top = top;\n fm.bottom = bottom;\n for (let i = 0; i < chooseHt.length; i++) {\n chooseHt[i].chooseHeight(text, start, end, chooseHtv[i], v, fm, paint);\n }\n above = fm.ascent;\n below = fm.descent;\n top = fm.top;\n bottom = fm.bottom;\n }\n if (j == 0) {\n if (trackPad) {\n this.mTopPadding = top - above;\n }\n if (includePad) {\n above = top;\n }\n }\n if (end == bufEnd) {\n if (trackPad) {\n this.mBottomPadding = bottom - below;\n }\n if (includePad) {\n below = bottom;\n }\n }\n let extra;\n if (needMultiply) {\n let ex = (below - above) * (spacingmult - 1) + spacingadd;\n if (ex >= 0) {\n extra = Math.floor((ex + StaticLayout.EXTRA_ROUNDING));\n }\n else {\n extra = -Math.floor((-ex + StaticLayout.EXTRA_ROUNDING));\n }\n }\n else {\n extra = 0;\n }\n lines[off + StaticLayout.START] = start;\n lines[off + StaticLayout.TOP] = v;\n lines[off + StaticLayout.DESCENT] = below + extra;\n v += (below - above) + extra;\n lines[off + this.mColumns + StaticLayout.START] = end;\n lines[off + this.mColumns + StaticLayout.TOP] = v;\n if (hasTabOrEmoji)\n lines[off + StaticLayout.TAB] |= StaticLayout.TAB_MASK;\n lines[off + StaticLayout.DIR] |= dir << StaticLayout.DIR_SHIFT;\n let linedirs = StaticLayout.DIRS_ALL_LEFT_TO_RIGHT;\n this.mLineDirections[j] = linedirs;\n if (ellipsize != null) {\n let firstLine = (j == 0);\n let currentLineIsTheLastVisibleOne = (j + 1 == this.mMaximumVisibleLineCount);\n let forceEllipsis = moreChars && (this.mLineCount + 1 == this.mMaximumVisibleLineCount);\n let doEllipsis = (((this.mMaximumVisibleLineCount == 1 && moreChars) || (firstLine && !moreChars)) && ellipsize != TextUtils.TruncateAt.MARQUEE) || (!firstLine && (currentLineIsTheLastVisibleOne || !moreChars) && ellipsize == TextUtils.TruncateAt.END);\n if (doEllipsis) {\n this.calculateEllipsis(start, end, widths, widthStart, ellipsisWidth, ellipsize, j, textWidth, paint, forceEllipsis);\n }\n }\n this.mLineCount++;\n return v;\n }\n calculateEllipsis(lineStart, lineEnd, widths, widthStart, avail, where, line, textWidth, paint, forceEllipsis) {\n if (textWidth <= avail && !forceEllipsis) {\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = 0;\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = 0;\n return;\n }\n let ellipsisWidth = paint.measureText((where == TextUtils.TruncateAt.END_SMALL) ? StaticLayout.ELLIPSIS_TWO_DOTS[0] : StaticLayout.ELLIPSIS_NORMAL[0], 0, 1);\n let ellipsisStart = 0;\n let ellipsisCount = 0;\n let len = lineEnd - lineStart;\n if (where == TextUtils.TruncateAt.START) {\n if (this.mMaximumVisibleLineCount == 1) {\n let sum = 0;\n let i;\n for (i = len; i >= 0; i--) {\n let w = widths[i - 1 + lineStart - widthStart];\n if (w + sum + ellipsisWidth > avail) {\n break;\n }\n sum += w;\n }\n ellipsisStart = 0;\n ellipsisCount = i;\n }\n else {\n }\n }\n else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE || where == TextUtils.TruncateAt.END_SMALL) {\n let sum = 0;\n let i;\n for (i = 0; i < len; i++) {\n let w = widths[i + lineStart - widthStart];\n if (w + sum + ellipsisWidth > avail) {\n break;\n }\n sum += w;\n }\n ellipsisStart = i;\n ellipsisCount = len - i;\n if (forceEllipsis && ellipsisCount == 0 && len > 0) {\n ellipsisStart = len - 1;\n ellipsisCount = 1;\n }\n }\n else {\n if (this.mMaximumVisibleLineCount == 1) {\n let lsum = 0, rsum = 0;\n let left = 0, right = len;\n let ravail = (avail - ellipsisWidth) / 2;\n for (right = len; right >= 0; right--) {\n let w = widths[right - 1 + lineStart - widthStart];\n if (w + rsum > ravail) {\n break;\n }\n rsum += w;\n }\n let lavail = avail - ellipsisWidth - rsum;\n for (left = 0; left < right; left++) {\n let w = widths[left + lineStart - widthStart];\n if (w + lsum > lavail) {\n break;\n }\n lsum += w;\n }\n ellipsisStart = left;\n ellipsisCount = right - left;\n }\n else {\n }\n }\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = ellipsisStart;\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = ellipsisCount;\n }\n getLineForVertical(vertical) {\n let high = this.mLineCount;\n let low = -1;\n let guess;\n let lines = this.mLines;\n while (high - low > 1) {\n guess = (high + low) >> 1;\n if (lines[this.mColumns * guess + StaticLayout.TOP] > vertical) {\n high = guess;\n }\n else {\n low = guess;\n }\n }\n if (low < 0) {\n return 0;\n }\n else {\n return low;\n }\n }\n getLineCount() {\n return this.mLineCount;\n }\n getLineTop(line) {\n let top = this.mLines[this.mColumns * line + StaticLayout.TOP];\n if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount && line != this.mLineCount) {\n top += this.getBottomPadding();\n }\n return top;\n }\n getLineDescent(line) {\n let descent = this.mLines[this.mColumns * line + StaticLayout.DESCENT];\n if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount - 1 && line != this.mLineCount) {\n descent += this.getBottomPadding();\n }\n return descent;\n }\n getLineStart(line) {\n return this.mLines[this.mColumns * line + StaticLayout.START] & StaticLayout.START_MASK;\n }\n getParagraphDirection(line) {\n return this.mLines[this.mColumns * line + StaticLayout.DIR] >> StaticLayout.DIR_SHIFT;\n }\n getLineContainsTab(line) {\n return (this.mLines[this.mColumns * line + StaticLayout.TAB] & StaticLayout.TAB_MASK) != 0;\n }\n getLineDirections(line) {\n return this.mLineDirections[line];\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsisCount(line) {\n if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) {\n return 0;\n }\n return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT];\n }\n getEllipsisStart(line) {\n if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) {\n return 0;\n }\n return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START];\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n prepare() {\n this.mMeasured = MeasuredText.obtain();\n }\n finish() {\n this.mMeasured = MeasuredText.recycle(this.mMeasured);\n }\n }\n StaticLayout.TAG = \"StaticLayout\";\n StaticLayout.COLUMNS_NORMAL = 3;\n StaticLayout.COLUMNS_ELLIPSIZE = 5;\n StaticLayout.START = 0;\n StaticLayout.DIR = StaticLayout.START;\n StaticLayout.TAB = StaticLayout.START;\n StaticLayout.TOP = 1;\n StaticLayout.DESCENT = 2;\n StaticLayout.ELLIPSIS_START = 3;\n StaticLayout.ELLIPSIS_COUNT = 4;\n StaticLayout.START_MASK = 0x1FFFFFFF;\n StaticLayout.DIR_SHIFT = 30;\n StaticLayout.TAB_MASK = 0x20000000;\n StaticLayout.CHAR_FIRST_CJK = '⺀';\n StaticLayout.CHAR_NEW_LINE = '\\n';\n StaticLayout.CHAR_TAB = '\\t';\n StaticLayout.CHAR_SPACE = ' ';\n StaticLayout.CHAR_SLASH = '/';\n StaticLayout.CHAR_HYPHEN = '-';\n StaticLayout.CHAR_ZWSP = '​';\n StaticLayout.EXTRA_ROUNDING = 0.5;\n StaticLayout.CHAR_FIRST_HIGH_SURROGATE = 0xD800;\n StaticLayout.CHAR_LAST_LOW_SURROGATE = 0xDFFF;\n text_10.StaticLayout = StaticLayout;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_11) {\n var Paint = android.graphics.Paint;\n var System = java.lang.System;\n var Layout = android.text.Layout;\n var PackedIntVector = android.text.PackedIntVector;\n var PackedObjectVector = android.text.PackedObjectVector;\n var Spanned = android.text.Spanned;\n var StaticLayout = android.text.StaticLayout;\n class DynamicLayout extends Layout {\n constructor(base, display, paint, width, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0) {\n super((ellipsize == null) ? display : (Spanned.isImplements(display)) ? new Layout.SpannedEllipsizer(display) : new Layout.Ellipsizer(display), paint, width, align, textDir, spacingmult, spacingadd);\n this.mEllipsizedWidth = 0;\n this.mNumberOfBlocks = 0;\n this.mIndexFirstChangedBlock = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mBase = base;\n this.mDisplay = display;\n if (ellipsize != null) {\n this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);\n this.mEllipsizedWidth = ellipsizedWidth;\n this.mEllipsizeAt = ellipsize;\n }\n else {\n this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);\n this.mEllipsizedWidth = width;\n this.mEllipsizeAt = null;\n }\n this.mObjects = new PackedObjectVector(1);\n this.mIncludePad = includepad;\n if (ellipsize != null) {\n let e = this.getText();\n e.mLayout = this;\n e.mWidth = ellipsizedWidth;\n e.mMethod = ellipsize;\n this.mEllipsize = true;\n }\n let start;\n if (ellipsize != null) {\n start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);\n start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);\n }\n let dirs = [DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT];\n let fm = new Paint.FontMetricsInt();\n paint.getFontMetricsInt(fm);\n let asc = fm.ascent;\n let desc = fm.descent;\n start[DynamicLayout.DIR] = DynamicLayout.DIR_LEFT_TO_RIGHT << DynamicLayout.DIR_SHIFT;\n start[DynamicLayout.TOP] = 0;\n start[DynamicLayout.DESCENT] = desc;\n this.mInts.insertAt(0, start);\n start[DynamicLayout.TOP] = desc - asc;\n this.mInts.insertAt(1, start);\n this.mObjects.insertAt(0, dirs);\n this.reflow(base, 0, 0, base.length);\n }\n reflow(s, where, before, after) {\n if (s != this.mBase)\n return;\n let text = this.mDisplay;\n let len = text.length;\n let find = text.lastIndexOf('\\n', where - 1);\n if (find < 0)\n find = 0;\n else\n find = find + 1;\n {\n let diff = where - find;\n before += diff;\n after += diff;\n where -= diff;\n }\n let look = text.indexOf('\\n', where + after);\n if (look < 0)\n look = len;\n else\n look++;\n let change = look - (where + after);\n before += change;\n after += change;\n let startline = this.getLineForOffset(where);\n let startv = this.getLineTop(startline);\n let endline = this.getLineForOffset(where + before);\n if (where + after == len)\n endline = this.getLineCount();\n let endv = this.getLineTop(endline);\n let islast = (endline == this.getLineCount());\n let reflowed;\n {\n reflowed = DynamicLayout.sStaticLayout;\n DynamicLayout.sStaticLayout = null;\n }\n if (reflowed == null) {\n reflowed = new StaticLayout(null, 0, 0, null, 0, null, null, 0, 1, true);\n }\n else {\n reflowed.prepare();\n }\n reflowed.generate(text, where, where + after, this.getPaint(), this.getWidth(), this.getTextDirectionHeuristic(), this.getSpacingMultiplier(), this.getSpacingAdd(), false, true, this.mEllipsizedWidth, this.mEllipsizeAt);\n let n = reflowed.getLineCount();\n if (where + after != len && reflowed.getLineStart(n - 1) == where + after)\n n--;\n this.mInts.deleteAt(startline, endline - startline);\n this.mObjects.deleteAt(startline, endline - startline);\n let ht = reflowed.getLineTop(n);\n let toppad = 0, botpad = 0;\n if (this.mIncludePad && startline == 0) {\n toppad = reflowed.getTopPadding();\n this.mTopPadding = toppad;\n ht -= toppad;\n }\n if (this.mIncludePad && islast) {\n botpad = reflowed.getBottomPadding();\n this.mBottomPadding = botpad;\n ht += botpad;\n }\n this.mInts.adjustValuesBelow(startline, DynamicLayout.START, after - before);\n this.mInts.adjustValuesBelow(startline, DynamicLayout.TOP, startv - endv + ht);\n let ints;\n if (this.mEllipsize) {\n ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);\n ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);\n }\n let objects = new Array(1);\n for (let i = 0; i < n; i++) {\n ints[DynamicLayout.START] = reflowed.getLineStart(i) | (reflowed.getParagraphDirection(i) << DynamicLayout.DIR_SHIFT) | (reflowed.getLineContainsTab(i) ? DynamicLayout.TAB_MASK : 0);\n let top = reflowed.getLineTop(i) + startv;\n if (i > 0)\n top -= toppad;\n ints[DynamicLayout.TOP] = top;\n let desc = reflowed.getLineDescent(i);\n if (i == n - 1)\n desc += botpad;\n ints[DynamicLayout.DESCENT] = desc;\n objects[0] = reflowed.getLineDirections(i);\n if (this.mEllipsize) {\n ints[DynamicLayout.ELLIPSIS_START] = reflowed.getEllipsisStart(i);\n ints[DynamicLayout.ELLIPSIS_COUNT] = reflowed.getEllipsisCount(i);\n }\n this.mInts.insertAt(startline + i, ints);\n this.mObjects.insertAt(startline + i, objects);\n }\n this.updateBlocks(startline, endline - 1, n);\n {\n DynamicLayout.sStaticLayout = reflowed;\n reflowed.finish();\n }\n }\n createBlocks() {\n let offset = DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;\n this.mNumberOfBlocks = 0;\n const text = this.mDisplay;\n while (true) {\n offset = text.indexOf('\\n', offset);\n if (offset < 0) {\n this.addBlockAtOffset(text.length);\n break;\n }\n else {\n this.addBlockAtOffset(offset);\n offset += DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;\n }\n }\n this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length);\n for (let i = 0; i < this.mBlockEndLines.length; i++) {\n this.mBlockIndices[i] = DynamicLayout.INVALID_BLOCK_INDEX;\n }\n }\n addBlockAtOffset(offset) {\n const line = this.getLineForOffset(offset);\n if (this.mBlockEndLines == null) {\n this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray((1));\n this.mBlockEndLines[this.mNumberOfBlocks] = line;\n this.mNumberOfBlocks++;\n return;\n }\n const previousBlockEndLine = this.mBlockEndLines[this.mNumberOfBlocks - 1];\n if (line > previousBlockEndLine) {\n if (this.mNumberOfBlocks == this.mBlockEndLines.length) {\n let blockEndLines = androidui.util.ArrayCreator.newNumberArray((this.mNumberOfBlocks + 1));\n System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, this.mNumberOfBlocks);\n this.mBlockEndLines = blockEndLines;\n }\n this.mBlockEndLines[this.mNumberOfBlocks] = line;\n this.mNumberOfBlocks++;\n }\n }\n updateBlocks(startLine, endLine, newLineCount) {\n if (this.mBlockEndLines == null) {\n this.createBlocks();\n return;\n }\n let firstBlock = -1;\n let lastBlock = -1;\n for (let i = 0; i < this.mNumberOfBlocks; i++) {\n if (this.mBlockEndLines[i] >= startLine) {\n firstBlock = i;\n break;\n }\n }\n for (let i = firstBlock; i < this.mNumberOfBlocks; i++) {\n if (this.mBlockEndLines[i] >= endLine) {\n lastBlock = i;\n break;\n }\n }\n const lastBlockEndLine = this.mBlockEndLines[lastBlock];\n let createBlockBefore = startLine > (firstBlock == 0 ? 0 : this.mBlockEndLines[firstBlock - 1] + 1);\n let createBlock = newLineCount > 0;\n let createBlockAfter = endLine < this.mBlockEndLines[lastBlock];\n let numAddedBlocks = 0;\n if (createBlockBefore)\n numAddedBlocks++;\n if (createBlock)\n numAddedBlocks++;\n if (createBlockAfter)\n numAddedBlocks++;\n const numRemovedBlocks = lastBlock - firstBlock + 1;\n const newNumberOfBlocks = this.mNumberOfBlocks + numAddedBlocks - numRemovedBlocks;\n if (newNumberOfBlocks == 0) {\n this.mBlockEndLines[0] = 0;\n this.mBlockIndices[0] = DynamicLayout.INVALID_BLOCK_INDEX;\n this.mNumberOfBlocks = 1;\n return;\n }\n if (newNumberOfBlocks > this.mBlockEndLines.length) {\n const newSize = (newNumberOfBlocks);\n let blockEndLines = androidui.util.ArrayCreator.newNumberArray(newSize);\n let blockIndices = androidui.util.ArrayCreator.newNumberArray(newSize);\n System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, firstBlock);\n System.arraycopy(this.mBlockIndices, 0, blockIndices, 0, firstBlock);\n System.arraycopy(this.mBlockEndLines, lastBlock + 1, blockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n System.arraycopy(this.mBlockIndices, lastBlock + 1, blockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n this.mBlockEndLines = blockEndLines;\n this.mBlockIndices = blockIndices;\n }\n else {\n System.arraycopy(this.mBlockEndLines, lastBlock + 1, this.mBlockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n System.arraycopy(this.mBlockIndices, lastBlock + 1, this.mBlockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n }\n this.mNumberOfBlocks = newNumberOfBlocks;\n let newFirstChangedBlock;\n const deltaLines = newLineCount - (endLine - startLine + 1);\n if (deltaLines != 0) {\n newFirstChangedBlock = firstBlock + numAddedBlocks;\n for (let i = newFirstChangedBlock; i < this.mNumberOfBlocks; i++) {\n this.mBlockEndLines[i] += deltaLines;\n }\n }\n else {\n newFirstChangedBlock = this.mNumberOfBlocks;\n }\n this.mIndexFirstChangedBlock = Math.min(this.mIndexFirstChangedBlock, newFirstChangedBlock);\n let blockIndex = firstBlock;\n if (createBlockBefore) {\n this.mBlockEndLines[blockIndex] = startLine - 1;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n blockIndex++;\n }\n if (createBlock) {\n this.mBlockEndLines[blockIndex] = startLine + newLineCount - 1;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n blockIndex++;\n }\n if (createBlockAfter) {\n this.mBlockEndLines[blockIndex] = lastBlockEndLine + deltaLines;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n }\n }\n setBlocksDataForTest(blockEndLines, blockIndices, numberOfBlocks) {\n this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray(blockEndLines.length);\n this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(blockIndices.length);\n System.arraycopy(blockEndLines, 0, this.mBlockEndLines, 0, blockEndLines.length);\n System.arraycopy(blockIndices, 0, this.mBlockIndices, 0, blockIndices.length);\n this.mNumberOfBlocks = numberOfBlocks;\n }\n getBlockEndLines() {\n return this.mBlockEndLines;\n }\n getBlockIndices() {\n return this.mBlockIndices;\n }\n getNumberOfBlocks() {\n return this.mNumberOfBlocks;\n }\n getIndexFirstChangedBlock() {\n return this.mIndexFirstChangedBlock;\n }\n setIndexFirstChangedBlock(i) {\n this.mIndexFirstChangedBlock = i;\n }\n getLineCount() {\n return this.mInts.size() - 1;\n }\n getLineTop(line) {\n return this.mInts.getValue(line, DynamicLayout.TOP);\n }\n getLineDescent(line) {\n return this.mInts.getValue(line, DynamicLayout.DESCENT);\n }\n getLineStart(line) {\n return this.mInts.getValue(line, DynamicLayout.START) & DynamicLayout.START_MASK;\n }\n getLineContainsTab(line) {\n return (this.mInts.getValue(line, DynamicLayout.TAB) & DynamicLayout.TAB_MASK) != 0;\n }\n getParagraphDirection(line) {\n return this.mInts.getValue(line, DynamicLayout.DIR) >> DynamicLayout.DIR_SHIFT;\n }\n getLineDirections(line) {\n return this.mObjects.getValue(line, 0);\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n getEllipsisStart(line) {\n if (this.mEllipsizeAt == null) {\n return 0;\n }\n return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_START);\n }\n getEllipsisCount(line) {\n if (this.mEllipsizeAt == null) {\n return 0;\n }\n return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_COUNT);\n }\n }\n DynamicLayout.PRIORITY = 128;\n DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH = 400;\n DynamicLayout.INVALID_BLOCK_INDEX = -1;\n DynamicLayout.sStaticLayout = new StaticLayout(null, 0, 0, null, 0, null, null, 1, 0, true);\n DynamicLayout.sLock = new Array(0);\n DynamicLayout.START = 0;\n DynamicLayout.DIR = DynamicLayout.START;\n DynamicLayout.TAB = DynamicLayout.START;\n DynamicLayout.TOP = 1;\n DynamicLayout.DESCENT = 2;\n DynamicLayout.COLUMNS_NORMAL = 3;\n DynamicLayout.ELLIPSIS_START = 3;\n DynamicLayout.ELLIPSIS_COUNT = 4;\n DynamicLayout.COLUMNS_ELLIPSIZE = 5;\n DynamicLayout.START_MASK = 0x1FFFFFFF;\n DynamicLayout.DIR_SHIFT = 30;\n DynamicLayout.TAB_MASK = 0x20000000;\n DynamicLayout.ELLIPSIS_UNDEFINED = 0x80000000;\n text_11.DynamicLayout = DynamicLayout;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var TransformationMethod;\n (function (TransformationMethod) {\n function isImpl(obj) {\n return obj && obj['getTransformation'] && obj['onFocusChanged'];\n }\n TransformationMethod.isImpl = isImpl;\n })(TransformationMethod = method.TransformationMethod || (method.TransformationMethod = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var TransformationMethod = android.text.method.TransformationMethod;\n var TransformationMethod2;\n (function (TransformationMethod2) {\n function isImpl(obj) {\n return TransformationMethod.isImpl(obj) && obj['setLengthChangesAllowed'];\n }\n TransformationMethod2.isImpl = isImpl;\n })(TransformationMethod2 = method.TransformationMethod2 || (method.TransformationMethod2 = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var Log = android.util.Log;\n class AllCapsTransformationMethod {\n constructor(context) {\n }\n getTransformation(source, view) {\n if (this.mEnabled) {\n return source != null ? source.toLocaleUpperCase() : null;\n }\n Log.w(AllCapsTransformationMethod.TAG, \"Caller did not enable length changes; not transforming text\");\n return source;\n }\n onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) {\n }\n setLengthChangesAllowed(allowLengthChanges) {\n this.mEnabled = allowLengthChanges;\n }\n }\n AllCapsTransformationMethod.TAG = \"AllCapsTransformationMethod\";\n method.AllCapsTransformationMethod = AllCapsTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n class ReplacementTransformationMethod {\n getTransformation(source, v) {\n let original = this.getOriginal();\n let replacement = this.getReplacement();\n let doNothing = true;\n let n = original.length;\n for (let i = 0; i < n; i++) {\n if (source.indexOf(original[i]) >= 0) {\n doNothing = false;\n break;\n }\n }\n if (doNothing) {\n return source;\n }\n return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement).toString();\n return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement);\n }\n onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) {\n }\n }\n method.ReplacementTransformationMethod = ReplacementTransformationMethod;\n (function (ReplacementTransformationMethod) {\n class ReplacementCharSequence extends String {\n constructor(source, original, replacement) {\n super(source);\n this.mSource = source;\n this.mOriginal = original;\n this.mReplacement = replacement;\n }\n charAt(i) {\n let c = this.mSource.charAt(i);\n let n = this.mOriginal.length;\n for (let j = 0; j < n; j++) {\n if (c == this.mOriginal[j]) {\n c = this.mReplacement[j];\n }\n }\n return c;\n }\n toString() {\n return this.startReplace(0, this.length);\n }\n substr(from, length) {\n return this.startReplace(from, from + length);\n }\n substring(start, end) {\n return this.startReplace(start, end);\n }\n startReplace(start, end) {\n let dest = this.mSource.substring(start, end).split('');\n let offend = end - start;\n let n = this.mOriginal.length;\n for (let i = 0; i < offend; i++) {\n let c = dest[i];\n for (let j = 0; j < n; j++) {\n if (c == this.mOriginal[j]) {\n dest[i] = this.mReplacement[j];\n }\n }\n }\n return dest.join('');\n }\n }\n ReplacementTransformationMethod.ReplacementCharSequence = ReplacementCharSequence;\n })(ReplacementTransformationMethod = method.ReplacementTransformationMethod || (method.ReplacementTransformationMethod = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var ReplacementTransformationMethod = android.text.method.ReplacementTransformationMethod;\n class SingleLineTransformationMethod extends ReplacementTransformationMethod {\n getOriginal() {\n return SingleLineTransformationMethod.ORIGINAL;\n }\n getReplacement() {\n return SingleLineTransformationMethod.REPLACEMENT;\n }\n static getInstance() {\n if (SingleLineTransformationMethod.sInstance != null)\n return SingleLineTransformationMethod.sInstance;\n SingleLineTransformationMethod.sInstance = new SingleLineTransformationMethod();\n return SingleLineTransformationMethod.sInstance;\n }\n }\n SingleLineTransformationMethod.ORIGINAL = ['\\n', '\\r'];\n SingleLineTransformationMethod.REPLACEMENT = [' ', ''];\n method.SingleLineTransformationMethod = SingleLineTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ColorStateList = android.content.res.ColorStateList;\n var Paint = android.graphics.Paint;\n var Path = android.graphics.Path;\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n var RectF = android.graphics.RectF;\n var Handler = android.os.Handler;\n var BoringLayout = android.text.BoringLayout;\n var DynamicLayout = android.text.DynamicLayout;\n var Layout = android.text.Layout;\n var Spannable = android.text.Spannable;\n var Spanned = android.text.Spanned;\n var StaticLayout = android.text.StaticLayout;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n var TruncateAt = android.text.TextUtils.TruncateAt;\n var AllCapsTransformationMethod = android.text.method.AllCapsTransformationMethod;\n var SingleLineTransformationMethod = android.text.method.SingleLineTransformationMethod;\n var TransformationMethod2 = android.text.method.TransformationMethod2;\n var Log = android.util.Log;\n var TypedValue = android.util.TypedValue;\n var Gravity = android.view.Gravity;\n var HapticFeedbackConstants = android.view.HapticFeedbackConstants;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var WeakReference = java.lang.ref.WeakReference;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var AttrBinder = androidui.attr.AttrBinder;\n class TextView extends View {\n constructor(context, bindElement, defStyle = android.R.attr.textViewStyle) {\n super(context, bindElement, null);\n this.mTextColor = ColorStateList.valueOf(Color.BLACK);\n this.mCurTextColor = 0;\n this.mCurHintTextColor = 0;\n this.mSpannableFactory = Spannable.Factory.getInstance();\n this.mShadowRadius = 0;\n this.mShadowDx = 0;\n this.mShadowDy = 0;\n this.mMarqueeRepeatLimit = 3;\n this.mLastLayoutDirection = -1;\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL;\n this.mBufferType = TextView.BufferType.NORMAL;\n this.mGravity = Gravity.TOP | Gravity.LEFT;\n this.mAutoLinkMask = 0;\n this.mLinksClickable = true;\n this.mSpacingMult = 1.0;\n this.mSpacingAdd = 0.0;\n this.mMaximum = Integer.MAX_VALUE;\n this.mMaxMode = TextView.LINES;\n this.mMinimum = 0;\n this.mMinMode = TextView.LINES;\n this.mOldMaximum = this.mMaximum;\n this.mOldMaxMode = this.mMaxMode;\n this.mMaxWidthValue = Integer.MAX_VALUE;\n this.mMaxWidthMode = TextView.PIXELS;\n this.mMinWidthValue = 0;\n this.mMinWidthMode = TextView.PIXELS;\n this.mDesiredHeightAtMeasure = -1;\n this.mIncludePad = true;\n this.mDeferScroll = -1;\n this.mLastScroll = 0;\n this.mFilters = TextView.NO_FILTERS;\n this.mHighlightColor = 0x6633B5E5;\n this.mHighlightPathBogus = true;\n this.mCursorDrawableRes = 0;\n this.mTextSelectHandleLeftRes = 0;\n this.mTextSelectHandleRightRes = 0;\n this.mTextSelectHandleRes = 0;\n this.mTextEditSuggestionItemLayout = 0;\n this.mSkipDrawText = false;\n this.mText = \"\";\n const res = this.getResources();\n this.mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);\n this.mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n this.mMovement = this.getDefaultMovementMethod();\n this.mTransformation = null;\n this.setTextSize(14);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n let text = this.mText || this.bindElement.innerText.trim();\n this.bindElement.innerHTML = '';\n this.setText(text, this.mBufferType);\n }\n initBindAttr() {\n super.initBindAttr();\n if (!TextView.TextViewClassAttrBind) {\n TextView.TextViewClassAttrBind = new AttrBinder.ClassBinderMap();\n TextView.TextViewClassAttrBind.set('textColorHighlight', {\n setter(v, value) {\n v.setHighlightColor(v._attrBinder.parseColor(value, v.mHighlightColor));\n },\n getter(v) {\n return v.getHighlightColor();\n }\n }).set('textColor', {\n setter(v, value) {\n let color = v._attrBinder.parseColorList(value);\n if (color)\n v.setTextColor(color);\n },\n getter(v) {\n return v.mTextColor;\n }\n }).set('textColorHint', {\n setter(v, value) {\n let color = v._attrBinder.parseColorList(value);\n if (color)\n v.setHintTextColor(color);\n },\n getter(v) {\n return v.mHintTextColor;\n }\n }).set('textSize', {\n setter(v, value) {\n let size = v._attrBinder.parseNumberPixelSize(value, v.mTextPaint.getTextSize());\n v.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);\n },\n getter(v) {\n return v.mTextPaint.getTextSize();\n }\n }).set('textAllCaps', {\n setter(v, value) {\n v.setAllCaps(v._attrBinder.parseBoolean(value, true));\n }\n }).set('shadowColor', {\n setter(v, value) {\n v.setShadowLayer(v.mShadowRadius, v.mShadowDx, v.mShadowDy, v._attrBinder.parseColor(value, v.mTextPaint.shadowColor));\n },\n getter(v) {\n return v.getShadowColor();\n }\n }).set('shadowDx', {\n setter(v, value) {\n let dx = v._attrBinder.parseNumberPixelSize(value, v.mShadowDx);\n v.setShadowLayer(v.mShadowRadius, dx, v.mShadowDy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowDx();\n }\n }).set('shadowDy', {\n setter(v, value) {\n let dy = v._attrBinder.parseNumberPixelSize(value, v.mShadowDy);\n v.setShadowLayer(v.mShadowRadius, v.mShadowDx, dy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowDy();\n }\n }).set('shadowRadius', {\n setter(v, value) {\n let radius = v._attrBinder.parseNumberPixelSize(value, v.mShadowRadius);\n v.setShadowLayer(radius, v.mShadowDx, v.mShadowDy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowRadius();\n }\n }).set('drawableLeft', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[0];\n }\n }).set('drawableStart', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[0];\n }\n }).set('drawableTop', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[1];\n }\n }).set('drawableRight', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[2];\n }\n }).set('drawableEnd', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[2];\n }\n }).set('drawableBottom', {\n setter(v, value) {\n let dr = v.mDrawables || {};\n let drawable = v._attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable);\n },\n getter(v) {\n return v.getCompoundDrawables()[3];\n }\n }).set('drawablePadding', {\n setter(v, value) {\n v.setCompoundDrawablePadding(v._attrBinder.parseNumberPixelSize(value));\n },\n getter(v) {\n return v.getCompoundDrawablePadding();\n }\n }).set('maxLines', {\n setter(v, value) {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n v.setMaxLines(value);\n },\n getter(v) {\n return v.getMaxLines();\n }\n }).set('maxHeight', {\n setter(v, value) {\n v.setMaxHeight(v._attrBinder.parseNumberPixelSize(value, v.getMaxHeight()));\n },\n getter(v) {\n return v.getMaxHeight();\n }\n }).set('lines', {\n setter(v, value) {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n v.setLines(value);\n },\n getter(v) {\n if (v.getMaxLines() === v.getMinLines())\n return v.getMaxLines();\n return null;\n }\n }).set('height', {\n setter(v, value) {\n value = v._attrBinder.parseNumberPixelSize(value, -1);\n if (value >= 0)\n v.setHeight(value);\n },\n getter(v) {\n if (v.getMaxHeight() === v.getMinimumHeight())\n return v.getMaxHeight();\n return null;\n }\n }).set('minLines', {\n setter(v, value) {\n v.setMinLines(v._attrBinder.parseInt(value, v.getMinLines()));\n },\n getter(v) {\n return v.getMinLines();\n }\n }).set('minHeight', {\n setter(v, value) {\n v.setMinHeight(v._attrBinder.parseNumberPixelSize(value, v.getMinHeight()));\n },\n getter(v) {\n return v.getMinHeight();\n }\n }).set('maxEms', {\n setter(v, value) {\n v.setMaxEms(v._attrBinder.parseInt(value, v.getMaxEms()));\n },\n getter(v) {\n return v.getMaxEms();\n }\n }).set('maxWidth', {\n setter(v, value) {\n v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value, v.getMaxWidth()));\n },\n getter(v) {\n return v.getMaxWidth();\n }\n }).set('ems', {\n setter(v, value) {\n let ems = v._attrBinder.parseInt(value, null);\n if (ems != null)\n v.setEms(ems);\n },\n getter(v) {\n if (v.getMinEms() === v.getMaxEms())\n return v.getMaxEms();\n return null;\n }\n }).set('width', {\n setter(v, value) {\n value = v._attrBinder.parseNumberPixelSize(value, -1);\n if (value >= 0)\n v.setWidth(value);\n },\n getter(v) {\n if (v.getMinWidth() === v.getMaxWidth())\n return v.getMinWidth();\n return null;\n }\n }).set('minEms', {\n setter(v, value) {\n v.setMinEms(v._attrBinder.parseInt(value, v.getMinEms()));\n },\n getter(v) {\n return v.getMinEms();\n }\n }).set('minWidth', {\n setter(v, value) {\n v.setMinWidth(v._attrBinder.parseNumberPixelSize(value, v.getMinWidth()));\n },\n getter(v) {\n return v.getMinWidth();\n }\n }).set('gravity', {\n setter(v, value) {\n v.setGravity(v._attrBinder.parseGravity(value, v.mGravity));\n },\n getter(v) {\n return v.mGravity;\n }\n }).set('hint', {\n setter(v, value) {\n v.setHint(v._attrBinder.parseString(value));\n },\n getter(v) {\n return v.getHint();\n }\n }).set('text', {\n setter(v, value) {\n v.setText(v._attrBinder.parseString(value));\n },\n getter(v) {\n return v.getText();\n }\n }).set('scrollHorizontally', {\n setter(v, value) {\n v.setHorizontallyScrolling(v._attrBinder.parseBoolean(value, false));\n }\n }).set('singleLine', {\n setter(v, value) {\n v.setSingleLine(v._attrBinder.parseBoolean(value, false));\n }\n }).set('ellipsize', {\n setter(v, value) {\n let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()];\n if (ellipsize)\n v.setEllipsize(ellipsize);\n }\n }).set('marqueeRepeatLimit', {\n setter(v, value) {\n let marqueeRepeatLimit = v._attrBinder.parseInt(value, -1);\n if (marqueeRepeatLimit >= 0)\n v.setMarqueeRepeatLimit(marqueeRepeatLimit);\n }\n }).set('includeFontPadding', {\n setter(v, value) {\n v.setIncludeFontPadding(v._attrBinder.parseBoolean(value, false));\n }\n }).set('enabled', {\n setter(v, value) {\n v.setEnabled(v._attrBinder.parseBoolean(value, v.isEnabled()));\n },\n getter(v) {\n return v.isEnabled();\n }\n }).set('lineSpacingExtra', {\n setter(v, value) {\n v.setLineSpacing(v._attrBinder.parseNumberPixelSize(value, v.mSpacingAdd), v.mSpacingMult);\n },\n getter(v) {\n return v.mSpacingAdd;\n }\n }).set('lineSpacingMultiplier', {\n setter(v, value) {\n v.setLineSpacing(v.mSpacingAdd, v._attrBinder.parseFloat(value, v.mSpacingMult));\n },\n getter(v) {\n return v.mSpacingMult;\n }\n });\n }\n this._attrBinder.addClassAttrBind(TextView.TextViewClassAttrBind);\n }\n setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex) {\n }\n setRelativeDrawablesIfNeeded(start, end) {\n let hasRelativeDrawables = (start != null) || (end != null);\n if (hasRelativeDrawables) {\n let dr = this.mDrawables;\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = true;\n const compoundRect = dr.mCompoundRect;\n let state = this.getDrawableState();\n if (start != null) {\n start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight());\n start.setState(state);\n start.copyBounds(compoundRect);\n start.setCallback(this);\n dr.mDrawableStart = start;\n dr.mDrawableSizeStart = compoundRect.width();\n dr.mDrawableHeightStart = compoundRect.height();\n }\n else {\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n }\n if (end != null) {\n end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight());\n end.setState(state);\n end.copyBounds(compoundRect);\n end.setCallback(this);\n dr.mDrawableEnd = end;\n dr.mDrawableSizeEnd = compoundRect.width();\n dr.mDrawableHeightEnd = compoundRect.height();\n }\n else {\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n }\n }\n setEnabled(enabled) {\n if (enabled == this.isEnabled()) {\n return;\n }\n super.setEnabled(enabled);\n }\n setTypeface(tf, style) {\n }\n getDefaultEditable() {\n return false;\n }\n getDefaultMovementMethod() {\n return null;\n }\n getText() {\n return this.mText;\n }\n length() {\n return this.mText.length;\n }\n getEditableText() {\n return null;\n }\n getLineHeight() {\n return Math.round(this.mTextPaint.getFontMetricsInt(null) * this.mSpacingMult + this.mSpacingAdd);\n }\n getLayout() {\n return this.mLayout;\n }\n getHintLayout() {\n return this.mHintLayout;\n }\n getUndoManager() {\n return null;\n }\n setUndoManager(undoManager, tag) {\n }\n getKeyListener() {\n return null;\n }\n setKeyListener(input) {\n }\n setKeyListenerOnly(input) {\n }\n getMovementMethod() {\n return this.mMovement;\n }\n setMovementMethod(movement) {\n if (this.mMovement != movement) {\n this.mMovement = movement;\n if (movement != null && !Spannable.isImpl(this.mText)) {\n this.setText(this.mText);\n }\n this.fixFocusableAndClickableSettings();\n }\n }\n fixFocusableAndClickableSettings() {\n if (this.mMovement != null) {\n this.setFocusable(true);\n this.setClickable(true);\n this.setLongClickable(true);\n }\n else {\n this.setFocusable(false);\n this.setClickable(false);\n this.setLongClickable(false);\n }\n }\n getTransformationMethod() {\n return this.mTransformation;\n }\n setTransformationMethod(method) {\n if (method == this.mTransformation) {\n return;\n }\n if (this.mTransformation != null) {\n if (Spannable.isImpl(this.mText)) {\n this.mText.removeSpan(this.mTransformation);\n }\n }\n this.mTransformation = method;\n if (TransformationMethod2.isImpl(method)) {\n let method2 = method;\n this.mAllowTransformationLengthChange = !this.isTextSelectable();\n method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange);\n }\n else {\n this.mAllowTransformationLengthChange = false;\n }\n this.setText(this.mText);\n }\n getCompoundPaddingTop() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableTop == null) {\n return this.mPaddingTop;\n }\n else {\n return this.mPaddingTop + dr.mDrawablePadding + dr.mDrawableSizeTop;\n }\n }\n getCompoundPaddingBottom() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableBottom == null) {\n return this.mPaddingBottom;\n }\n else {\n return this.mPaddingBottom + dr.mDrawablePadding + dr.mDrawableSizeBottom;\n }\n }\n getCompoundPaddingLeft() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableLeft == null) {\n return this.mPaddingLeft;\n }\n else {\n return this.mPaddingLeft + dr.mDrawablePadding + dr.mDrawableSizeLeft;\n }\n }\n getCompoundPaddingRight() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableRight == null) {\n return this.mPaddingRight;\n }\n else {\n return this.mPaddingRight + dr.mDrawablePadding + dr.mDrawableSizeRight;\n }\n }\n getCompoundPaddingStart() {\n this.resolveDrawables();\n return this.getCompoundPaddingLeft();\n }\n getCompoundPaddingEnd() {\n this.resolveDrawables();\n return this.getCompoundPaddingRight();\n }\n getExtendedPaddingTop() {\n if (this.mMaxMode != TextView.LINES) {\n return this.getCompoundPaddingTop();\n }\n if (this.mLayout.getLineCount() <= this.mMaximum) {\n return this.getCompoundPaddingTop();\n }\n let top = this.getCompoundPaddingTop();\n let bottom = this.getCompoundPaddingBottom();\n let viewht = this.getHeight() - top - bottom;\n let layoutht = this.mLayout.getLineTop(this.mMaximum);\n if (layoutht >= viewht) {\n return top;\n }\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (gravity == Gravity.TOP) {\n return top;\n }\n else if (gravity == Gravity.BOTTOM) {\n return top + viewht - layoutht;\n }\n else {\n return top + (viewht - layoutht) / 2;\n }\n }\n getExtendedPaddingBottom() {\n if (this.mMaxMode != TextView.LINES) {\n return this.getCompoundPaddingBottom();\n }\n if (this.mLayout.getLineCount() <= this.mMaximum) {\n return this.getCompoundPaddingBottom();\n }\n let top = this.getCompoundPaddingTop();\n let bottom = this.getCompoundPaddingBottom();\n let viewht = this.getHeight() - top - bottom;\n let layoutht = this.mLayout.getLineTop(this.mMaximum);\n if (layoutht >= viewht) {\n return bottom;\n }\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (gravity == Gravity.TOP) {\n return bottom + viewht - layoutht;\n }\n else if (gravity == Gravity.BOTTOM) {\n return bottom;\n }\n else {\n return bottom + (viewht - layoutht) / 2;\n }\n }\n getTotalPaddingLeft() {\n return this.getCompoundPaddingLeft();\n }\n getTotalPaddingRight() {\n return this.getCompoundPaddingRight();\n }\n getTotalPaddingStart() {\n return this.getCompoundPaddingStart();\n }\n getTotalPaddingEnd() {\n return this.getCompoundPaddingEnd();\n }\n getTotalPaddingTop() {\n return this.getExtendedPaddingTop() + this.getVerticalOffset(true);\n }\n getTotalPaddingBottom() {\n return this.getExtendedPaddingBottom() + this.getBottomVerticalOffset(true);\n }\n setCompoundDrawables(left, top, right, bottom) {\n let dr = this.mDrawables;\n const drawables = left != null || top != null || right != null || bottom != null;\n if (!drawables) {\n if (dr != null) {\n if (dr.mDrawablePadding == 0) {\n this.mDrawables = null;\n }\n else {\n if (dr.mDrawableLeft != null) {\n dr.mDrawableLeft.setCallback(null);\n }\n dr.mDrawableLeft = null;\n if (dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = null;\n if (dr.mDrawableRight != null) {\n dr.mDrawableRight.setCallback(null);\n }\n dr.mDrawableRight = null;\n if (dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = null;\n dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0;\n dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0;\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = false;\n if (dr.mDrawableLeft != left && dr.mDrawableLeft != null) {\n dr.mDrawableLeft.setCallback(null);\n }\n dr.mDrawableLeft = left;\n if (dr.mDrawableTop != top && dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = top;\n if (dr.mDrawableRight != right && dr.mDrawableRight != null) {\n dr.mDrawableRight.setCallback(null);\n }\n dr.mDrawableRight = right;\n if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = bottom;\n const compoundRect = dr.mCompoundRect;\n let state;\n state = this.getDrawableState();\n if (left != null) {\n left.setState(state);\n left.copyBounds(compoundRect);\n left.setCallback(this);\n dr.mDrawableSizeLeft = compoundRect.width();\n dr.mDrawableHeightLeft = compoundRect.height();\n }\n else {\n dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0;\n }\n if (right != null) {\n right.setState(state);\n right.copyBounds(compoundRect);\n right.setCallback(this);\n dr.mDrawableSizeRight = compoundRect.width();\n dr.mDrawableHeightRight = compoundRect.height();\n }\n else {\n dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0;\n }\n if (top != null) {\n top.setState(state);\n top.copyBounds(compoundRect);\n top.setCallback(this);\n dr.mDrawableSizeTop = compoundRect.height();\n dr.mDrawableWidthTop = compoundRect.width();\n }\n else {\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n }\n if (bottom != null) {\n bottom.setState(state);\n bottom.copyBounds(compoundRect);\n bottom.setCallback(this);\n dr.mDrawableSizeBottom = compoundRect.height();\n dr.mDrawableWidthBottom = compoundRect.width();\n }\n else {\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n if (dr != null) {\n dr.mDrawableLeftInitial = left;\n dr.mDrawableRightInitial = right;\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n this.invalidate();\n this.requestLayout();\n }\n setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom) {\n if (left != null) {\n left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight());\n }\n if (right != null) {\n right.setBounds(0, 0, right.getIntrinsicWidth(), right.getIntrinsicHeight());\n }\n if (top != null) {\n top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight());\n }\n if (bottom != null) {\n bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight());\n }\n this.setCompoundDrawables(left, top, right, bottom);\n }\n setCompoundDrawablesRelative(start, top, end, bottom) {\n let dr = this.mDrawables;\n const drawables = start != null || top != null || end != null || bottom != null;\n if (!drawables) {\n if (dr != null) {\n if (dr.mDrawablePadding == 0) {\n this.mDrawables = null;\n }\n else {\n if (dr.mDrawableStart != null) {\n dr.mDrawableStart.setCallback(null);\n }\n dr.mDrawableStart = null;\n if (dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = null;\n if (dr.mDrawableEnd != null) {\n dr.mDrawableEnd.setCallback(null);\n }\n dr.mDrawableEnd = null;\n if (dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = null;\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = true;\n if (dr.mDrawableStart != start && dr.mDrawableStart != null) {\n dr.mDrawableStart.setCallback(null);\n }\n dr.mDrawableStart = start;\n if (dr.mDrawableTop != top && dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = top;\n if (dr.mDrawableEnd != end && dr.mDrawableEnd != null) {\n dr.mDrawableEnd.setCallback(null);\n }\n dr.mDrawableEnd = end;\n if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = bottom;\n const compoundRect = dr.mCompoundRect;\n let state;\n state = this.getDrawableState();\n if (start != null) {\n start.setState(state);\n start.copyBounds(compoundRect);\n start.setCallback(this);\n dr.mDrawableSizeStart = compoundRect.width();\n dr.mDrawableHeightStart = compoundRect.height();\n }\n else {\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n }\n if (end != null) {\n end.setState(state);\n end.copyBounds(compoundRect);\n end.setCallback(this);\n dr.mDrawableSizeEnd = compoundRect.width();\n dr.mDrawableHeightEnd = compoundRect.height();\n }\n else {\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n }\n if (top != null) {\n top.setState(state);\n top.copyBounds(compoundRect);\n top.setCallback(this);\n dr.mDrawableSizeTop = compoundRect.height();\n dr.mDrawableWidthTop = compoundRect.width();\n }\n else {\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n }\n if (bottom != null) {\n bottom.setState(state);\n bottom.copyBounds(compoundRect);\n bottom.setCallback(this);\n dr.mDrawableSizeBottom = compoundRect.height();\n dr.mDrawableWidthBottom = compoundRect.width();\n }\n else {\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n this.invalidate();\n this.requestLayout();\n }\n setCompoundDrawablesRelativeWithIntrinsicBounds(start, top, end, bottom) {\n if (start != null) {\n start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight());\n }\n if (end != null) {\n end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight());\n }\n if (top != null) {\n top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight());\n }\n if (bottom != null) {\n bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight());\n }\n this.setCompoundDrawablesRelative(start, top, end, bottom);\n }\n getCompoundDrawables() {\n const dr = this.mDrawables;\n if (dr != null) {\n return [dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom];\n }\n else {\n return [null, null, null, null];\n }\n }\n getCompoundDrawablesRelative() {\n const dr = this.mDrawables;\n if (dr != null) {\n return [dr.mDrawableStart, dr.mDrawableTop, dr.mDrawableEnd, dr.mDrawableBottom];\n }\n else {\n return [null, null, null, null];\n }\n }\n setCompoundDrawablePadding(pad) {\n let dr = this.mDrawables;\n if (pad == 0) {\n if (dr != null) {\n dr.mDrawablePadding = pad;\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n dr.mDrawablePadding = pad;\n }\n this.invalidate();\n this.requestLayout();\n }\n getCompoundDrawablePadding() {\n const dr = this.mDrawables;\n return dr != null ? dr.mDrawablePadding : 0;\n }\n setPadding(left, top, right, bottom) {\n if (left != this.mPaddingLeft || right != this.mPaddingRight || top != this.mPaddingTop || bottom != this.mPaddingBottom) {\n this.nullLayouts();\n }\n super.setPadding(left, top, right, bottom);\n this.invalidate();\n }\n getAutoLinkMask() {\n return this.mAutoLinkMask;\n }\n getTextLocale() {\n return null;\n }\n setTextLocale(locale) {\n }\n getTextSize() {\n return this.mTextPaint.getTextSize();\n }\n setTextSize(...args) {\n if (args.length == 1) {\n this.setTextSize(TypedValue.COMPLEX_UNIT_SP, args[0]);\n return;\n }\n let [unit, size] = args;\n this.setRawTextSize(TypedValue.applyDimension(unit, size, this.getResources().getDisplayMetrics()));\n }\n setRawTextSize(size) {\n if (size != this.mTextPaint.getTextSize()) {\n this.mTextPaint.setTextSize(size);\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getTextScaleX() {\n return 1;\n }\n setTextScaleX(size) {\n }\n getTypeface() {\n return null;\n }\n setTextColor(colors) {\n if (typeof colors === 'number') {\n colors = ColorStateList.valueOf(colors);\n }\n if (colors == null) {\n throw Error(`new NullPointerException()`);\n }\n this.mTextColor = colors;\n this.updateTextColors();\n }\n getTextColors() {\n return this.mTextColor;\n }\n getCurrentTextColor() {\n return this.mCurTextColor;\n }\n setHighlightColor(color) {\n if (this.mHighlightColor != color) {\n this.mHighlightColor = color;\n this.invalidate();\n }\n }\n getHighlightColor() {\n return this.mHighlightColor;\n }\n setShowSoftInputOnFocus(show) {\n this.createEditorIfNeeded();\n }\n getShowSoftInputOnFocus() {\n return false;\n }\n setShadowLayer(radius, dx, dy, color) {\n this.mTextPaint.setShadowLayer(radius, dx, dy, color);\n this.mShadowRadius = radius;\n this.mShadowDx = dx;\n this.mShadowDy = dy;\n this.invalidate();\n }\n getShadowRadius() {\n return this.mShadowRadius;\n }\n getShadowDx() {\n return this.mShadowDx;\n }\n getShadowDy() {\n return this.mShadowDy;\n }\n getShadowColor() {\n return this.mTextPaint.shadowColor;\n }\n getPaint() {\n return this.mTextPaint;\n }\n setAutoLinkMask(mask) {\n this.mAutoLinkMask = mask;\n }\n setLinksClickable(whether) {\n this.mLinksClickable = whether;\n }\n getLinksClickable() {\n return this.mLinksClickable;\n }\n getUrls() {\n return new Array(0);\n }\n setHintTextColor(colors) {\n if (typeof colors === 'number') {\n colors = ColorStateList.valueOf(colors);\n }\n this.mHintTextColor = colors;\n this.updateTextColors();\n }\n getHintTextColors() {\n return this.mHintTextColor;\n }\n getCurrentHintTextColor() {\n return this.mHintTextColor != null ? this.mCurHintTextColor : this.mCurTextColor;\n }\n setGravity(gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.LEFT;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n let newLayout = false;\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) != (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK)) {\n newLayout = true;\n }\n if (gravity != this.mGravity) {\n this.invalidate();\n }\n this.mGravity = gravity;\n if (this.mLayout != null && newLayout) {\n let want = this.mLayout.getWidth();\n let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth();\n this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), true);\n }\n }\n getGravity() {\n return this.mGravity;\n }\n getPaintFlags() {\n return this.mTextPaint.getFlags();\n }\n setPaintFlags(flags) {\n if (this.mTextPaint.getFlags() != flags) {\n this.mTextPaint.setFlags(flags);\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n setHorizontallyScrolling(whether) {\n if (this.mHorizontallyScrolling != whether) {\n this.mHorizontallyScrolling = whether;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getHorizontallyScrolling() {\n return this.mHorizontallyScrolling;\n }\n setMinLines(minlines) {\n this.mMinimum = minlines;\n this.mMinMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n getMinLines() {\n return this.mMinMode == TextView.LINES ? this.mMinimum : -1;\n }\n setMinHeight(minHeight) {\n this.mMinimum = minHeight;\n this.mMinMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMinHeight() {\n return this.mMinMode == TextView.PIXELS ? this.mMinimum : -1;\n }\n setMaxLines(maxlines) {\n this.mMaximum = maxlines;\n this.mMaxMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n getMaxLines() {\n return this.mMaxMode == TextView.LINES ? this.mMaximum : -1;\n }\n setMaxHeight(maxHeight) {\n this.mMaximum = maxHeight;\n this.mMaxMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxHeight() {\n return this.mMaxMode == TextView.PIXELS ? this.mMaximum : -1;\n }\n setLines(lines) {\n this.mMaximum = this.mMinimum = lines;\n this.mMaxMode = this.mMinMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n setHeight(pixels) {\n this.mMaximum = this.mMinimum = pixels;\n this.mMaxMode = this.mMinMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n setMinEms(minems) {\n this.mMinWidthValue = minems;\n this.mMinWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n getMinEms() {\n return this.mMinWidthMode == TextView.EMS ? this.mMinWidthValue : -1;\n }\n setMinWidth(minpixels) {\n this.mMinWidthValue = minpixels;\n this.mMinWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMinWidth() {\n return this.mMinWidthMode == TextView.PIXELS ? this.mMinWidthValue : -1;\n }\n setMaxEms(maxems) {\n this.mMaxWidthValue = maxems;\n this.mMaxWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxEms() {\n return this.mMaxWidthMode == TextView.EMS ? this.mMaxWidthValue : -1;\n }\n setMaxWidth(maxpixels) {\n this.mMaxWidthValue = maxpixels;\n this.mMaxWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxWidth() {\n return this.mMaxWidthMode == TextView.PIXELS ? this.mMaxWidthValue : -1;\n }\n setEms(ems) {\n this.mMaxWidthValue = this.mMinWidthValue = ems;\n this.mMaxWidthMode = this.mMinWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n setWidth(pixels) {\n this.mMaxWidthValue = this.mMinWidthValue = pixels;\n this.mMaxWidthMode = this.mMinWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n setLineSpacing(add, mult) {\n if (this.mSpacingAdd != add || this.mSpacingMult != mult) {\n this.mSpacingAdd = add;\n this.mSpacingMult = mult;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getLineSpacingMultiplier() {\n return this.mSpacingMult;\n }\n getLineSpacingExtra() {\n return this.mSpacingAdd;\n }\n updateTextColors() {\n let inval = false;\n let color = this.mTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mCurTextColor) {\n this.mCurTextColor = color;\n inval = true;\n }\n if (this.mLinkTextColor != null) {\n color = this.mLinkTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mTextPaint.linkColor) {\n this.mTextPaint.linkColor = color;\n inval = true;\n }\n }\n if (this.mHintTextColor != null) {\n color = this.mHintTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mCurHintTextColor && this.mText.length == 0) {\n this.mCurHintTextColor = color;\n inval = true;\n }\n }\n if (inval) {\n this.invalidate();\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mTextColor != null && this.mTextColor.isStateful() || (this.mHintTextColor != null && this.mHintTextColor.isStateful()) || (this.mLinkTextColor != null && this.mLinkTextColor.isStateful())) {\n this.updateTextColors();\n }\n const dr = this.mDrawables;\n if (dr != null) {\n let state = this.getDrawableState();\n if (dr.mDrawableTop != null && dr.mDrawableTop.isStateful()) {\n dr.mDrawableTop.setState(state);\n }\n if (dr.mDrawableBottom != null && dr.mDrawableBottom.isStateful()) {\n dr.mDrawableBottom.setState(state);\n }\n if (dr.mDrawableLeft != null && dr.mDrawableLeft.isStateful()) {\n dr.mDrawableLeft.setState(state);\n }\n if (dr.mDrawableRight != null && dr.mDrawableRight.isStateful()) {\n dr.mDrawableRight.setState(state);\n }\n if (dr.mDrawableStart != null && dr.mDrawableStart.isStateful()) {\n dr.mDrawableStart.setState(state);\n }\n if (dr.mDrawableEnd != null && dr.mDrawableEnd.isStateful()) {\n dr.mDrawableEnd.setState(state);\n }\n }\n }\n removeMisspelledSpans(spannable) {\n }\n setFreezesText(freezesText) {\n this.mFreezesText = freezesText;\n }\n getFreezesText() {\n return this.mFreezesText;\n }\n setSpannableFactory(factory) {\n this.mSpannableFactory = factory;\n this.setText(this.mText);\n }\n setText(text, type = this.mBufferType, notifyBefore = true, oldlen = 0) {\n if (text == null) {\n text = \"\";\n }\n if (!this.isSuggestionsEnabled()) {\n text = this.removeSuggestionSpans(text);\n }\n if (Spanned.isImplements(text) && text.getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) {\n this.setHorizontalFadingEdgeEnabled(true);\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL;\n this.setEllipsize(TextUtils.TruncateAt.MARQUEE);\n }\n if (notifyBefore) {\n if (this.mText != null) {\n oldlen = this.mText.length;\n this.sendBeforeTextChanged(this.mText, 0, oldlen, text.length);\n }\n else {\n this.sendBeforeTextChanged(\"\", 0, 0, text.length);\n }\n }\n let needEditableForNotification = false;\n if (this.mListeners != null && this.mListeners.size() != 0) {\n needEditableForNotification = true;\n }\n if (type == TextView.BufferType.SPANNABLE || this.mMovement != null) {\n text = this.mSpannableFactory.newSpannable(text);\n }\n this.mBufferType = type;\n this.mText = text;\n if (this.mTransformation == null) {\n this.mTransformed = text;\n }\n else {\n this.mTransformed = this.mTransformation.getTransformation(text, this);\n }\n const textLength = text.length;\n if (this.mLayout != null) {\n this.checkForRelayout();\n }\n this.sendOnTextChanged(text, 0, oldlen, textLength);\n this.onTextChanged(text, 0, oldlen, textLength);\n }\n setHint(hint) {\n this.mHint = hint;\n if (this.mLayout != null) {\n this.checkForRelayout();\n }\n if (this.mText.length == 0) {\n this.invalidate();\n }\n }\n getHint() {\n return this.mHint;\n }\n isSingleLine() {\n return this.mSingleLine;\n }\n static isMultilineInputType(type) {\n return true;\n }\n removeSuggestionSpans(text) {\n return text;\n }\n hasPasswordTransformationMethod() {\n return false;\n }\n static isPasswordInputType(inputType) {\n return false;\n }\n static isVisiblePasswordInputType(inputType) {\n return true;\n }\n setRawInputType(type) {\n }\n setInputType(type, direct = false) {\n }\n getInputType() {\n return 0;\n }\n setImeOptions(imeOptions) {\n }\n getImeOptions() {\n return -1;\n }\n setImeActionLabel(label, actionId) {\n this.createEditorIfNeeded();\n }\n getImeActionLabel() {\n return '';\n }\n getImeActionId() {\n return 0;\n }\n setOnEditorActionListener(l) {\n this.createEditorIfNeeded();\n }\n setFrame(l, t, r, b) {\n let result = super.setFrame(l, t, r, b);\n this.restartMarqueeIfNeeded();\n return result;\n }\n restartMarqueeIfNeeded() {\n if (this.mRestartMarquee && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n this.mRestartMarquee = false;\n this.startMarquee();\n }\n }\n setFilters(...args) {\n }\n getFilters() {\n return this.mFilters;\n }\n getBoxHeight(l) {\n let padding = (l == this.mHintLayout) ? this.getCompoundPaddingTop() + this.getCompoundPaddingBottom() : this.getExtendedPaddingTop() + this.getExtendedPaddingBottom();\n return this.getMeasuredHeight() - padding;\n }\n getVerticalOffset(forceNormal) {\n let voffset = 0;\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n let l = this.mLayout;\n if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) {\n l = this.mHintLayout;\n }\n if (gravity != Gravity.TOP) {\n let boxht = this.getBoxHeight(l);\n let textht = l.getHeight();\n if (textht < boxht) {\n if (gravity == Gravity.BOTTOM)\n voffset = boxht - textht;\n else\n voffset = (boxht - textht) >> 1;\n }\n }\n return voffset;\n }\n getBottomVerticalOffset(forceNormal) {\n let voffset = 0;\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n let l = this.mLayout;\n if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) {\n l = this.mHintLayout;\n }\n if (gravity != Gravity.BOTTOM) {\n let boxht = this.getBoxHeight(l);\n let textht = l.getHeight();\n if (textht < boxht) {\n if (gravity == Gravity.TOP)\n voffset = boxht - textht;\n else\n voffset = (boxht - textht) >> 1;\n }\n }\n return voffset;\n }\n invalidateRegion(start, end, invalidateCursor) {\n if (this.mLayout == null) {\n this.invalidate();\n }\n else {\n let lineStart = this.mLayout.getLineForOffset(start);\n let top = this.mLayout.getLineTop(lineStart);\n if (lineStart > 0) {\n top -= this.mLayout.getLineDescent(lineStart - 1);\n }\n let lineEnd;\n if (start == end)\n lineEnd = lineStart;\n else\n lineEnd = this.mLayout.getLineForOffset(end);\n let bottom = this.mLayout.getLineBottom(lineEnd);\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const verticalPadding = this.getExtendedPaddingTop() + this.getVerticalOffset(true);\n let left, right;\n if (lineStart == lineEnd && !invalidateCursor) {\n left = Math.floor(this.mLayout.getPrimaryHorizontal(start));\n right = Math.floor((this.mLayout.getPrimaryHorizontal(end) + 1.0));\n left += compoundPaddingLeft;\n right += compoundPaddingLeft;\n }\n else {\n left = compoundPaddingLeft;\n right = this.getWidth() - this.getCompoundPaddingRight();\n }\n this.invalidate(this.mScrollX + left, verticalPadding + top, this.mScrollX + right, verticalPadding + bottom);\n }\n }\n registerForPreDraw() {\n if (!this.mPreDrawRegistered) {\n this.getViewTreeObserver().addOnPreDrawListener(this);\n this.mPreDrawRegistered = true;\n }\n }\n onPreDraw() {\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n if (this.mMovement != null) {\n let curs = this.getSelectionEnd();\n if (curs < 0 && (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n curs = this.mText.length;\n }\n if (curs >= 0) {\n this.bringPointIntoView(curs);\n }\n }\n else {\n this.bringTextIntoView();\n }\n this.getViewTreeObserver().removeOnPreDrawListener(this);\n this.mPreDrawRegistered = false;\n return true;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mTemporaryDetach = false;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mPreDrawRegistered) {\n this.getViewTreeObserver().removeOnPreDrawListener(this);\n this.mPreDrawRegistered = false;\n }\n this.resetResolvedDrawables();\n }\n isPaddingOffsetRequired() {\n return this.mShadowRadius != 0 || this.mDrawables != null;\n }\n getLeftPaddingOffset() {\n return this.getCompoundPaddingLeft() - this.mPaddingLeft + Math.floor(Math.min(0, this.mShadowDx - this.mShadowRadius));\n }\n getTopPaddingOffset() {\n return Math.floor(Math.min(0, this.mShadowDy - this.mShadowRadius));\n }\n getBottomPaddingOffset() {\n return Math.floor(Math.max(0, this.mShadowDy + this.mShadowRadius));\n }\n getRightPaddingOffset() {\n return -(this.getCompoundPaddingRight() - this.mPaddingRight) + Math.floor(Math.max(0, this.mShadowDx + this.mShadowRadius));\n }\n verifyDrawable(who) {\n const verified = super.verifyDrawable(who);\n if (!verified && this.mDrawables != null) {\n return who == this.mDrawables.mDrawableLeft || who == this.mDrawables.mDrawableTop || who == this.mDrawables.mDrawableRight || who == this.mDrawables.mDrawableBottom || who == this.mDrawables.mDrawableStart || who == this.mDrawables.mDrawableEnd;\n }\n return verified;\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mDrawables != null) {\n if (this.mDrawables.mDrawableLeft != null) {\n this.mDrawables.mDrawableLeft.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableTop != null) {\n this.mDrawables.mDrawableTop.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableRight != null) {\n this.mDrawables.mDrawableRight.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableBottom != null) {\n this.mDrawables.mDrawableBottom.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableStart != null) {\n this.mDrawables.mDrawableStart.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableEnd != null) {\n this.mDrawables.mDrawableEnd.jumpToCurrentState();\n }\n }\n }\n drawableSizeChange(d) {\n const drawables = this.mDrawables;\n const isCompoundDrawable = drawables != null && (d == drawables.mDrawableLeft || d == drawables.mDrawableTop\n || d == drawables.mDrawableRight || d == drawables.mDrawableBottom || d == drawables.mDrawableStart || d == drawables.mDrawableEnd);\n if (isCompoundDrawable) {\n d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());\n this.setCompoundDrawables(drawables.mDrawableLeft, drawables.mDrawableTop, drawables.mDrawableRight, drawables.mDrawableBottom);\n }\n else {\n super.drawableSizeChange(d);\n }\n }\n invalidateDrawable(drawable) {\n if (this.verifyDrawable(drawable)) {\n const dirty = drawable.getBounds();\n let scrollX = this.mScrollX;\n let scrollY = this.mScrollY;\n const drawables = this.mDrawables;\n if (drawables != null) {\n if (drawable == drawables.mDrawableLeft) {\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n scrollX += this.mPaddingLeft;\n scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2;\n }\n else if (drawable == drawables.mDrawableRight) {\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n scrollX += (this.mRight - this.mLeft - this.mPaddingRight - drawables.mDrawableSizeRight);\n scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2;\n }\n else if (drawable == drawables.mDrawableTop) {\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft;\n scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2;\n scrollY += this.mPaddingTop;\n }\n else if (drawable == drawables.mDrawableBottom) {\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft;\n scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2;\n scrollY += (this.mBottom - this.mTop - this.mPaddingBottom - drawables.mDrawableSizeBottom);\n }\n }\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n }\n isTextSelectable() {\n return false;\n }\n setTextIsSelectable(selectable) {\n }\n onCreateDrawableState(extraSpace) {\n let drawableState;\n if (this.mSingleLine) {\n drawableState = super.onCreateDrawableState(extraSpace);\n }\n else {\n drawableState = super.onCreateDrawableState(extraSpace + 1);\n TextView.mergeDrawableStates(drawableState, TextView.MULTILINE_STATE_SET);\n }\n if (this.isTextSelectable()) {\n const length = drawableState.length;\n for (let i = 0; i < length; i++) {\n if (drawableState[i] == View.VIEW_STATE_PRESSED) {\n const nonPressedState = androidui.util.ArrayCreator.newNumberArray(length - 1);\n System.arraycopy(drawableState, 0, nonPressedState, 0, i);\n System.arraycopy(drawableState, i + 1, nonPressedState, i, length - i - 1);\n return nonPressedState;\n }\n }\n }\n return drawableState;\n }\n getUpdatedHighlightPath() {\n let highlight = null;\n let highlightPaint = this.mHighlightPaint;\n const selStart = this.getSelectionStart();\n const selEnd = this.getSelectionEnd();\n if (this.mMovement != null && (this.isFocused() || this.isPressed()) && selStart >= 0) {\n if (selStart == selEnd) {\n }\n else {\n if (this.mHighlightPathBogus) {\n if (this.mHighlightPath == null)\n this.mHighlightPath = new Path();\n this.mHighlightPath.reset();\n this.mLayout.getSelectionPath(selStart, selEnd, this.mHighlightPath);\n this.mHighlightPathBogus = false;\n }\n highlightPaint.setColor(this.mHighlightColor);\n highlightPaint.setStyle(Paint.Style.FILL);\n highlight = this.mHighlightPath;\n }\n }\n return highlight;\n }\n getHorizontalOffsetForDrawables() {\n return 0;\n }\n onDraw(canvas) {\n this.restartMarqueeIfNeeded();\n super.onDraw(canvas);\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const right = this.mRight;\n const left = this.mLeft;\n const bottom = this.mBottom;\n const top = this.mTop;\n const isLayoutRtl = this.isLayoutRtl();\n const offset = this.getHorizontalOffsetForDrawables();\n const leftOffset = isLayoutRtl ? 0 : offset;\n const rightOffset = isLayoutRtl ? offset : 0;\n const dr = this.mDrawables;\n if (dr != null) {\n let vspace = bottom - top - compoundPaddingBottom - compoundPaddingTop;\n let hspace = right - left - compoundPaddingRight - compoundPaddingLeft;\n if (dr.mDrawableLeft != null) {\n canvas.save();\n canvas.translate(scrollX + this.mPaddingLeft + leftOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightLeft) / 2);\n dr.mDrawableLeft.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableRight != null) {\n canvas.save();\n canvas.translate(scrollX + right - left - this.mPaddingRight - dr.mDrawableSizeRight - rightOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightRight) / 2);\n dr.mDrawableRight.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableTop != null) {\n canvas.save();\n canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthTop) / 2, scrollY + this.mPaddingTop);\n dr.mDrawableTop.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableBottom != null) {\n canvas.save();\n canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthBottom) / 2, scrollY + bottom - top - this.mPaddingBottom - dr.mDrawableSizeBottom);\n dr.mDrawableBottom.draw(canvas);\n canvas.restore();\n }\n }\n let color = this.mCurTextColor;\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n let layout = this.mLayout;\n if (this.mHint != null && this.mText.length == 0) {\n if (this.mHintTextColor != null) {\n color = this.mCurHintTextColor;\n }\n layout = this.mHintLayout;\n }\n this.mTextPaint.setColor(color);\n this.mTextPaint.drawableState = this.getDrawableState();\n if (this.mSkipDrawText)\n return;\n canvas.save();\n let extendedPaddingTop = this.getExtendedPaddingTop();\n let extendedPaddingBottom = this.getExtendedPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n const maxScrollY = this.mLayout.getHeight() - vspace;\n let clipLeft = compoundPaddingLeft + scrollX;\n let clipTop = (scrollY == 0) ? 0 : extendedPaddingTop + scrollY;\n let clipRight = right - left - compoundPaddingRight + scrollX;\n let clipBottom = bottom - top + scrollY - ((scrollY == maxScrollY) ? 0 : extendedPaddingBottom);\n if (this.mShadowRadius != 0) {\n clipLeft += Math.min(0, this.mShadowDx - this.mShadowRadius);\n clipRight += Math.max(0, this.mShadowDx + this.mShadowRadius);\n clipTop += Math.min(0, this.mShadowDy - this.mShadowRadius);\n clipBottom += Math.max(0, this.mShadowDy + this.mShadowRadius);\n }\n canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);\n let voffsetText = 0;\n let voffsetCursor = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffsetText = this.getVerticalOffset(false);\n voffsetCursor = this.getVerticalOffset(true);\n }\n canvas.translate(compoundPaddingLeft, extendedPaddingTop + voffsetText);\n const absoluteGravity = this.mGravity;\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (!this.mSingleLine && this.getLineCount() == 1 && this.canMarquee() && (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != Gravity.LEFT) {\n const width = this.mRight - this.mLeft;\n const padding = this.getCompoundPaddingLeft() + this.getCompoundPaddingRight();\n const dx = this.mLayout.getLineRight(0) - (width - padding);\n canvas.translate(isLayoutRtl ? -dx : +dx, 0.0);\n }\n if (this.mMarquee != null && this.mMarquee.isRunning()) {\n const dx = -this.mMarquee.getScroll();\n canvas.translate(isLayoutRtl ? -dx : +dx, 0.0);\n }\n }\n const cursorOffsetVertical = voffsetCursor - voffsetText;\n let highlight = this.getUpdatedHighlightPath();\n layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical);\n if (this.mMarquee != null && this.mMarquee.shouldDrawGhost()) {\n const dx = Math.floor(this.mMarquee.getGhostOffset());\n canvas.translate(isLayoutRtl ? -dx : dx, 0.0);\n layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical);\n }\n canvas.restore();\n }\n getFocusedRect(r) {\n if (this.mLayout == null) {\n super.getFocusedRect(r);\n return;\n }\n let selEnd = this.getSelectionEnd();\n if (selEnd < 0) {\n super.getFocusedRect(r);\n return;\n }\n }\n getLineCount() {\n return this.mLayout != null ? this.mLayout.getLineCount() : 0;\n }\n getLineBounds(line, bounds) {\n if (this.mLayout == null) {\n if (bounds != null) {\n bounds.set(0, 0, 0, 0);\n }\n return 0;\n }\n else {\n let baseline = this.mLayout.getLineBounds(line, bounds);\n let voffset = this.getExtendedPaddingTop();\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset += this.getVerticalOffset(true);\n }\n if (bounds != null) {\n bounds.offset(this.getCompoundPaddingLeft(), voffset);\n }\n return baseline + voffset;\n }\n }\n getBaseline() {\n if (this.mLayout == null) {\n return super.getBaseline();\n }\n let voffset = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset = this.getVerticalOffset(true);\n }\n return this.getExtendedPaddingTop() + voffset + this.mLayout.getLineBaseline(0);\n }\n getFadeTop(offsetRequired) {\n if (this.mLayout == null)\n return 0;\n let voffset = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset = this.getVerticalOffset(true);\n }\n if (offsetRequired)\n voffset += this.getTopPaddingOffset();\n return this.getExtendedPaddingTop() + voffset;\n }\n getFadeHeight(offsetRequired) {\n return this.mLayout != null ? this.mLayout.getHeight() : 0;\n }\n onKeyDown(keyCode, event) {\n let which = this.doKeyDown(keyCode, event, null);\n if (which == 0) {\n return super.onKeyDown(keyCode, event);\n }\n return true;\n }\n shouldAdvanceFocusOnEnter() {\n if (this.getKeyListener() == null) {\n return false;\n }\n if (this.mSingleLine) {\n return true;\n }\n return false;\n }\n shouldAdvanceFocusOnTab() {\n return true;\n }\n doKeyDown(keyCode, event, otherEvent) {\n return 0;\n }\n resetErrorChangedFlag() {\n }\n hideErrorIfUnchanged() {\n }\n onKeyUp(keyCode, event) {\n return super.onKeyUp(keyCode, event);\n }\n onCheckIsTextEditor() {\n return false;\n }\n nullLayouts() {\n if (this.mLayout instanceof BoringLayout && this.mSavedLayout == null) {\n this.mSavedLayout = this.mLayout;\n }\n if (this.mHintLayout instanceof BoringLayout && this.mSavedHintLayout == null) {\n this.mSavedHintLayout = this.mHintLayout;\n }\n this.mSavedMarqueeModeLayout = this.mLayout = this.mHintLayout = null;\n this.mBoring = this.mHintBoring = null;\n }\n assumeLayout() {\n let width = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n if (width < 1) {\n width = 0;\n }\n let physicalWidth = width;\n if (this.mHorizontallyScrolling) {\n width = TextView.VERY_WIDE;\n }\n this.makeNewLayout(width, physicalWidth, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, physicalWidth, false);\n }\n getLayoutAlignment() {\n let alignment;\n switch (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n alignment = Layout.Alignment.ALIGN_LEFT;\n break;\n case Gravity.RIGHT:\n alignment = Layout.Alignment.ALIGN_RIGHT;\n break;\n case Gravity.CENTER_HORIZONTAL:\n alignment = Layout.Alignment.ALIGN_CENTER;\n break;\n default:\n alignment = Layout.Alignment.ALIGN_NORMAL;\n break;\n }\n return alignment;\n }\n makeNewLayout(wantWidth, hintWidth, boring, hintBoring, ellipsisWidth, bringIntoView) {\n this.stopMarquee();\n this.mOldMaximum = this.mMaximum;\n this.mOldMaxMode = this.mMaxMode;\n this.mHighlightPathBogus = true;\n if (wantWidth < 0) {\n wantWidth = 0;\n }\n if (hintWidth < 0) {\n hintWidth = 0;\n }\n let alignment = this.getLayoutAlignment();\n const testDirChange = this.mSingleLine && this.mLayout != null && (alignment == Layout.Alignment.ALIGN_NORMAL || alignment == Layout.Alignment.ALIGN_OPPOSITE);\n let oldDir = 0;\n if (testDirChange)\n oldDir = this.mLayout.getParagraphDirection(0);\n let shouldEllipsize = this.mEllipsize != null && this.getKeyListener() == null;\n const switchEllipsize = this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL;\n let effectiveEllipsize = this.mEllipsize;\n if (this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n effectiveEllipsize = TruncateAt.END_SMALL;\n }\n if (this.mTextDir == null) {\n this.mTextDir = this.getTextDirectionHeuristic();\n }\n this.mLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, effectiveEllipsize == this.mEllipsize);\n if (switchEllipsize) {\n let oppositeEllipsize = effectiveEllipsize == TruncateAt.MARQUEE ? TruncateAt.END : TruncateAt.MARQUEE;\n this.mSavedMarqueeModeLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, oppositeEllipsize, effectiveEllipsize != this.mEllipsize);\n }\n shouldEllipsize = this.mEllipsize != null;\n this.mHintLayout = null;\n if (this.mHint != null) {\n if (shouldEllipsize)\n hintWidth = wantWidth;\n if (hintBoring == TextView.UNKNOWN_BORING) {\n hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring);\n if (hintBoring != null) {\n this.mHintBoring = hintBoring;\n }\n }\n if (hintBoring != null) {\n if (hintBoring.width <= hintWidth && (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) {\n if (this.mSavedHintLayout != null) {\n this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad);\n }\n else {\n this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad);\n }\n this.mSavedHintLayout = this.mHintLayout;\n }\n else if (shouldEllipsize && hintBoring.width <= hintWidth) {\n if (this.mSavedHintLayout != null) {\n this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth);\n }\n else {\n this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth);\n }\n }\n else if (shouldEllipsize) {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n else if (shouldEllipsize) {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n if (bringIntoView || (testDirChange && oldDir != this.mLayout.getParagraphDirection(0))) {\n this.registerForPreDraw();\n }\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (!this.compressText(ellipsisWidth)) {\n const height = this.mLayoutParams.height;\n if (height != LayoutParams.WRAP_CONTENT && height != LayoutParams.MATCH_PARENT) {\n this.startMarquee();\n }\n else {\n this.mRestartMarquee = true;\n }\n }\n }\n }\n makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, useSaved) {\n let result = null;\n if (Spannable.isImpl(this.mText)) {\n result = new DynamicLayout(this.mText, this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.getKeyListener() == null ? effectiveEllipsize : null, ellipsisWidth);\n }\n else {\n if (boring == TextView.UNKNOWN_BORING) {\n boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring);\n if (boring != null) {\n this.mBoring = boring;\n }\n }\n if (boring != null) {\n if (boring.width <= wantWidth && (effectiveEllipsize == null || boring.width <= ellipsisWidth)) {\n if (useSaved && this.mSavedLayout != null) {\n result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad);\n }\n else {\n result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad);\n }\n if (useSaved) {\n this.mSavedLayout = result;\n }\n }\n else if (shouldEllipsize && boring.width <= wantWidth) {\n if (useSaved && this.mSavedLayout != null) {\n result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth);\n }\n else {\n result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth);\n }\n }\n else if (shouldEllipsize) {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n else if (shouldEllipsize) {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n return result;\n }\n compressText(width) {\n if (this.isHardwareAccelerated())\n return false;\n if (width > 0.0 && this.mLayout != null && this.getLineCount() == 1 && !this.mUserSetTextScaleX && this.mTextPaint.getTextScaleX() == 1.0) {\n const textWidth = this.mLayout.getLineWidth(0);\n const overflow = (textWidth + 1.0 - width) / width;\n if (overflow > 0.0 && overflow <= TextView.Marquee.MARQUEE_DELTA_MAX) {\n this.mTextPaint.setTextScaleX(1.0 - overflow - 0.005);\n this.post((() => {\n const _this = this;\n class _Inner {\n run() {\n _this.requestLayout();\n }\n }\n return new _Inner();\n })());\n return true;\n }\n }\n return false;\n }\n static desired(layout) {\n let n = layout.getLineCount();\n let text = layout.getText();\n let max = 0;\n for (let i = 0; i < n - 1; i++) {\n if (text.charAt(layout.getLineEnd(i) - 1) != '\\n')\n return -1;\n }\n for (let i = 0; i < n; i++) {\n max = Math.max(max, layout.getLineWidth(i));\n }\n return Math.floor(Math.ceil(max));\n }\n setIncludeFontPadding(includepad) {\n if (this.mIncludePad != includepad) {\n this.mIncludePad = includepad;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getIncludeFontPadding() {\n return this.mIncludePad;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = TextView.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = TextView.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = TextView.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = TextView.MeasureSpec.getSize(heightMeasureSpec);\n let width;\n let height;\n let boring = TextView.UNKNOWN_BORING;\n let hintBoring = TextView.UNKNOWN_BORING;\n if (this.mTextDir == null) {\n this.mTextDir = this.getTextDirectionHeuristic();\n }\n let des = -1;\n let fromexisting = false;\n if (widthMode == TextView.MeasureSpec.EXACTLY) {\n width = widthSize;\n }\n else {\n if (this.mLayout != null && this.mEllipsize == null) {\n des = TextView.desired(this.mLayout);\n }\n if (des < 0) {\n boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring);\n if (boring != null) {\n this.mBoring = boring;\n }\n }\n else {\n fromexisting = true;\n }\n if (boring == null || boring == TextView.UNKNOWN_BORING) {\n if (des < 0) {\n des = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed, this.mTextPaint)));\n }\n width = des;\n }\n else {\n width = boring.width;\n }\n const dr = this.mDrawables;\n if (dr != null) {\n width = Math.max(width, dr.mDrawableWidthTop);\n width = Math.max(width, dr.mDrawableWidthBottom);\n }\n if (this.mHint != null) {\n let hintDes = -1;\n let hintWidth;\n if (this.mHintLayout != null && this.mEllipsize == null) {\n hintDes = TextView.desired(this.mHintLayout);\n }\n if (hintDes < 0) {\n hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring);\n if (hintBoring != null) {\n this.mHintBoring = hintBoring;\n }\n }\n if (hintBoring == null || hintBoring == TextView.UNKNOWN_BORING) {\n if (hintDes < 0) {\n hintDes = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint, this.mTextPaint)));\n }\n hintWidth = hintDes;\n }\n else {\n hintWidth = hintBoring.width;\n }\n if (hintWidth > width) {\n width = hintWidth;\n }\n }\n width += this.getCompoundPaddingLeft() + this.getCompoundPaddingRight();\n if (this.mMaxWidthMode == TextView.EMS) {\n width = Math.min(width, this.mMaxWidthValue * this.getLineHeight());\n }\n else {\n width = Math.min(width, this.mMaxWidthValue);\n }\n if (this.mMinWidthMode == TextView.EMS) {\n width = Math.max(width, this.mMinWidthValue * this.getLineHeight());\n }\n else {\n width = Math.max(width, this.mMinWidthValue);\n }\n width = Math.max(width, this.getSuggestedMinimumWidth());\n if (widthMode == TextView.MeasureSpec.AT_MOST) {\n width = Math.min(widthSize, width);\n }\n }\n let want = width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let unpaddedWidth = want;\n if (this.mHorizontallyScrolling)\n want = TextView.VERY_WIDE;\n let hintWant = want;\n let hintWidth = (this.mHintLayout == null) ? hintWant : this.mHintLayout.getWidth();\n if (this.mLayout == null) {\n this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n }\n else {\n const layoutChanged = (this.mLayout.getWidth() != want) || (hintWidth != hintWant) || (this.mLayout.getEllipsizedWidth() != width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight());\n const widthChanged = (this.mHint == null) && (this.mEllipsize == null) && (want > this.mLayout.getWidth()) && (this.mLayout instanceof BoringLayout || (fromexisting && des >= 0 && des <= want));\n const maximumChanged = (this.mMaxMode != this.mOldMaxMode) || (this.mMaximum != this.mOldMaximum);\n if (layoutChanged || maximumChanged) {\n if (!maximumChanged && widthChanged) {\n this.mLayout.increaseWidthTo(want);\n }\n else {\n this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n }\n }\n else {\n }\n }\n if (heightMode == TextView.MeasureSpec.EXACTLY) {\n height = heightSize;\n this.mDesiredHeightAtMeasure = -1;\n }\n else {\n let desired = this.getDesiredHeight();\n height = desired;\n this.mDesiredHeightAtMeasure = desired;\n if (heightMode == TextView.MeasureSpec.AT_MOST) {\n height = Math.min(desired, heightSize);\n }\n }\n let unpaddedHeight = height - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n if (this.mMaxMode == TextView.LINES && this.mLayout.getLineCount() > this.mMaximum) {\n unpaddedHeight = Math.min(unpaddedHeight, this.mLayout.getLineTop(this.mMaximum));\n }\n if (this.mMovement != null || this.mLayout.getWidth() > unpaddedWidth || this.mLayout.getHeight() > unpaddedHeight) {\n this.registerForPreDraw();\n }\n else {\n this.scrollTo(0, 0);\n }\n this.setMeasuredDimension(width, height);\n }\n getDesiredHeight(layout, cap = true) {\n if (arguments.length === 0) {\n return Math.max(this.getDesiredHeight(this.mLayout, true), this.getDesiredHeight(this.mHintLayout, this.mEllipsize != null));\n }\n if (layout == null) {\n return 0;\n }\n let linecount = layout.getLineCount();\n let pad = this.getCompoundPaddingTop() + this.getCompoundPaddingBottom();\n let desired = layout.getLineTop(linecount);\n const dr = this.mDrawables;\n if (dr != null) {\n desired = Math.max(desired, dr.mDrawableHeightLeft);\n desired = Math.max(desired, dr.mDrawableHeightRight);\n }\n desired += pad;\n if (this.mMaxMode == TextView.LINES) {\n if (cap) {\n if (linecount > this.mMaximum) {\n desired = layout.getLineTop(this.mMaximum);\n if (dr != null) {\n desired = Math.max(desired, dr.mDrawableHeightLeft);\n desired = Math.max(desired, dr.mDrawableHeightRight);\n }\n desired += pad;\n linecount = this.mMaximum;\n }\n }\n }\n else {\n desired = Math.min(desired, this.mMaximum);\n }\n if (this.mMinMode == TextView.LINES) {\n if (linecount < this.mMinimum) {\n desired += this.getLineHeight() * (this.mMinimum - linecount);\n }\n }\n else {\n desired = Math.max(desired, this.mMinimum);\n }\n desired = Math.max(desired, this.getSuggestedMinimumHeight());\n return desired;\n }\n checkForResize() {\n let sizeChanged = false;\n if (this.mLayout != null) {\n if (this.mLayoutParams.width == LayoutParams.WRAP_CONTENT) {\n sizeChanged = true;\n this.invalidate();\n }\n if (this.mLayoutParams.height == LayoutParams.WRAP_CONTENT) {\n let desiredHeight = this.getDesiredHeight();\n if (desiredHeight != this.getHeight()) {\n sizeChanged = true;\n }\n }\n else if (this.mLayoutParams.height == LayoutParams.MATCH_PARENT) {\n if (this.mDesiredHeightAtMeasure >= 0) {\n let desiredHeight = this.getDesiredHeight();\n if (desiredHeight != this.mDesiredHeightAtMeasure) {\n sizeChanged = true;\n }\n }\n }\n }\n if (sizeChanged) {\n this.requestLayout();\n }\n }\n checkForRelayout() {\n if ((this.mLayoutParams.width != LayoutParams.WRAP_CONTENT || (this.mMaxWidthMode == this.mMinWidthMode && this.mMaxWidthValue == this.mMinWidthValue)) && (this.mHint == null || this.mHintLayout != null) && (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() > 0)) {\n let oldht = this.mLayout.getHeight();\n let want = this.mLayout.getWidth();\n let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth();\n this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n if (this.mEllipsize != TextUtils.TruncateAt.MARQUEE) {\n if (this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) {\n this.invalidate();\n return;\n }\n if (this.mLayout.getHeight() == oldht && (this.mHintLayout == null || this.mHintLayout.getHeight() == oldht)) {\n this.invalidate();\n return;\n }\n }\n this.requestLayout();\n this.invalidate();\n }\n else {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n if (this.mDeferScroll >= 0) {\n let curs = this.mDeferScroll;\n this.mDeferScroll = -1;\n this.bringPointIntoView(Math.min(curs, this.mText.length));\n }\n }\n isShowingHint() {\n return TextUtils.isEmpty(this.mText) && !TextUtils.isEmpty(this.mHint);\n }\n bringTextIntoView() {\n let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout;\n let line = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n line = layout.getLineCount() - 1;\n }\n let a = layout.getParagraphAlignment(line);\n let dir = layout.getParagraphDirection(line);\n let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom();\n let ht = layout.getHeight();\n let scrollx, scrolly;\n if (a == Layout.Alignment.ALIGN_NORMAL) {\n a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_LEFT : Layout.Alignment.ALIGN_RIGHT;\n }\n else if (a == Layout.Alignment.ALIGN_OPPOSITE) {\n a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_RIGHT : Layout.Alignment.ALIGN_LEFT;\n }\n if (a == Layout.Alignment.ALIGN_CENTER) {\n let left = Math.floor(Math.floor(layout.getLineLeft(line)));\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n if (right - left < hspace) {\n scrollx = (right + left) / 2 - hspace / 2;\n }\n else {\n if (dir < 0) {\n scrollx = right - hspace;\n }\n else {\n scrollx = left;\n }\n }\n }\n else if (a == Layout.Alignment.ALIGN_RIGHT) {\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n scrollx = right - hspace;\n }\n else {\n scrollx = Math.floor(Math.floor(layout.getLineLeft(line)));\n }\n if (ht < vspace) {\n scrolly = 0;\n }\n else {\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n scrolly = ht - vspace;\n }\n else {\n scrolly = 0;\n }\n }\n if (scrollx != this.mScrollX || scrolly != this.mScrollY) {\n this.scrollTo(scrollx, scrolly);\n return true;\n }\n else {\n return false;\n }\n }\n bringPointIntoView(offset) {\n if (this.isLayoutRequested()) {\n this.mDeferScroll = offset;\n return false;\n }\n let changed = false;\n let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout;\n if (layout == null)\n return changed;\n let line = layout.getLineForOffset(offset);\n let grav;\n switch (layout.getParagraphAlignment(line)) {\n case Layout.Alignment.ALIGN_LEFT:\n grav = 1;\n break;\n case Layout.Alignment.ALIGN_RIGHT:\n grav = -1;\n break;\n case Layout.Alignment.ALIGN_NORMAL:\n grav = layout.getParagraphDirection(line);\n break;\n case Layout.Alignment.ALIGN_OPPOSITE:\n grav = -layout.getParagraphDirection(line);\n break;\n case Layout.Alignment.ALIGN_CENTER:\n default:\n grav = 0;\n break;\n }\n const clamped = grav > 0;\n const x = Math.floor(layout.getPrimaryHorizontal(offset, clamped));\n const top = layout.getLineTop(line);\n const bottom = layout.getLineTop(line + 1);\n let left = Math.floor(Math.floor(layout.getLineLeft(line)));\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n let ht = layout.getHeight();\n let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom();\n if (!this.mHorizontallyScrolling && right - left > hspace && right > x) {\n right = Math.max(x, left + hspace);\n }\n let hslack = (bottom - top) / 2;\n let vslack = hslack;\n if (vslack > vspace / 4)\n vslack = vspace / 4;\n if (hslack > hspace / 4)\n hslack = hspace / 4;\n let hs = this.mScrollX;\n let vs = this.mScrollY;\n if (top - vs < vslack)\n vs = top - vslack;\n if (bottom - vs > vspace - vslack)\n vs = bottom - (vspace - vslack);\n if (ht - vs < vspace)\n vs = ht - vspace;\n if (0 - vs > 0)\n vs = 0;\n if (grav != 0) {\n if (x - hs < hslack) {\n hs = x - hslack;\n }\n if (x - hs > hspace - hslack) {\n hs = x - (hspace - hslack);\n }\n }\n if (grav < 0) {\n if (left - hs > 0)\n hs = left;\n if (right - hs < hspace)\n hs = right - hspace;\n }\n else if (grav > 0) {\n if (right - hs < hspace)\n hs = right - hspace;\n if (left - hs > 0)\n hs = left;\n }\n else {\n if (right - left <= hspace) {\n hs = left - (hspace - (right - left)) / 2;\n }\n else if (x > right - hslack) {\n hs = right - hspace;\n }\n else if (x < left + hslack) {\n hs = left;\n }\n else if (left > hs) {\n hs = left;\n }\n else if (right < hs + hspace) {\n hs = right - hspace;\n }\n else {\n if (x - hs < hslack) {\n hs = x - hslack;\n }\n if (x - hs > hspace - hslack) {\n hs = x - (hspace - hslack);\n }\n }\n }\n if (hs != this.mScrollX || vs != this.mScrollY) {\n if (this.mScroller == null) {\n this.scrollTo(hs, vs);\n }\n else {\n let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll;\n let dx = hs - this.mScrollX;\n let dy = vs - this.mScrollY;\n if (duration > TextView.ANIMATED_SCROLL_GAP) {\n this.mScroller.startScroll(this.mScrollX, this.mScrollY, dx, dy);\n this.awakenScrollBars(this.mScroller.getDuration());\n this.invalidate();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = AnimationUtils.currentAnimationTimeMillis();\n }\n changed = true;\n }\n if (this.isFocused()) {\n if (this.mTempRect == null)\n this.mTempRect = new Rect();\n this.mTempRect.set(x - 2, top, x + 2, bottom);\n this.getInterestingRect(this.mTempRect, line);\n this.mTempRect.offset(this.mScrollX, this.mScrollY);\n }\n return changed;\n }\n moveCursorToVisibleOffset() {\n return false;\n }\n computeScroll() {\n if (this.mScroller != null) {\n if (this.mScroller.computeScrollOffset()) {\n this.mScrollX = this.mScroller.getCurrX();\n this.mScrollY = this.mScroller.getCurrY();\n this.invalidateParentCaches();\n this.postInvalidate();\n }\n }\n }\n getInterestingRect(r, line) {\n this.convertFromViewportToContentCoordinates(r);\n if (line == 0)\n r.top -= this.getExtendedPaddingTop();\n if (line == this.mLayout.getLineCount() - 1)\n r.bottom += this.getExtendedPaddingBottom();\n }\n convertFromViewportToContentCoordinates(r) {\n const horizontalOffset = this.viewportToContentHorizontalOffset();\n r.left += horizontalOffset;\n r.right += horizontalOffset;\n const verticalOffset = this.viewportToContentVerticalOffset();\n r.top += verticalOffset;\n r.bottom += verticalOffset;\n }\n viewportToContentHorizontalOffset() {\n return this.getCompoundPaddingLeft() - this.mScrollX;\n }\n viewportToContentVerticalOffset() {\n let offset = this.getExtendedPaddingTop() - this.mScrollY;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n offset += this.getVerticalOffset(false);\n }\n return offset;\n }\n getSelectionStart() {\n return -1;\n }\n getSelectionEnd() {\n return -1;\n }\n hasSelection() {\n const selectionStart = this.getSelectionStart();\n const selectionEnd = this.getSelectionEnd();\n return selectionStart >= 0 && selectionStart != selectionEnd;\n }\n setAllCaps(allCaps) {\n if (allCaps) {\n this.setTransformationMethod(new AllCapsTransformationMethod());\n }\n else {\n this.setTransformationMethod(null);\n }\n }\n setSingleLine(singleLine = true) {\n if (this.mSingleLine == singleLine)\n return;\n this.setInputTypeSingleLine(singleLine);\n this.applySingleLine(singleLine, true, true);\n }\n setInputTypeSingleLine(singleLine) {\n }\n applySingleLine(singleLine, applyTransformation, changeMaxLines) {\n this.mSingleLine = singleLine;\n if (singleLine) {\n this.setLines(1);\n this.setHorizontallyScrolling(true);\n if (applyTransformation) {\n this.setTransformationMethod(SingleLineTransformationMethod.getInstance());\n }\n }\n else {\n if (changeMaxLines) {\n this.setMaxLines(Integer.MAX_VALUE);\n }\n this.setHorizontallyScrolling(false);\n if (applyTransformation) {\n this.setTransformationMethod(null);\n }\n }\n }\n setEllipsize(where) {\n if (this.mEllipsize != where) {\n this.mEllipsize = where;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n setMarqueeRepeatLimit(marqueeLimit) {\n this.mMarqueeRepeatLimit = marqueeLimit;\n }\n getMarqueeRepeatLimit() {\n return this.mMarqueeRepeatLimit;\n }\n getEllipsize() {\n return this.mEllipsize;\n }\n setSelectAllOnFocus(selectAllOnFocus) {\n this.createEditorIfNeeded();\n this.mEditor.mSelectAllOnFocus = selectAllOnFocus;\n if (selectAllOnFocus && !Spannable.isImpl(this.mText)) {\n this.setText(this.mText, TextView.BufferType.SPANNABLE);\n }\n }\n setCursorVisible(visible) {\n }\n isCursorVisible() {\n return null;\n }\n canMarquee() {\n let width = (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight());\n return width > 0 && (this.mLayout.getLineWidth(0) > width || (this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL && this.mSavedMarqueeModeLayout != null && this.mSavedMarqueeModeLayout.getLineWidth(0) > width));\n }\n startMarquee() {\n if (this.getKeyListener() != null)\n return;\n if (this.compressText(this.getWidth() - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) {\n return;\n }\n if ((this.mMarquee == null || this.mMarquee.isStopped()) && (this.isFocused() || this.isSelected()) && this.getLineCount() == 1 && this.canMarquee()) {\n if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_FADE;\n const tmp = this.mLayout;\n this.mLayout = this.mSavedMarqueeModeLayout;\n this.mSavedMarqueeModeLayout = tmp;\n this.setHorizontalFadingEdgeEnabled(true);\n this.requestLayout();\n this.invalidate();\n }\n if (this.mMarquee == null)\n this.mMarquee = new TextView.Marquee(this);\n this.mMarquee.start(this.mMarqueeRepeatLimit);\n }\n }\n stopMarquee() {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n this.mMarquee.stop();\n }\n if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_FADE) {\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;\n const tmp = this.mSavedMarqueeModeLayout;\n this.mSavedMarqueeModeLayout = this.mLayout;\n this.mLayout = tmp;\n this.setHorizontalFadingEdgeEnabled(false);\n this.requestLayout();\n this.invalidate();\n }\n }\n startStopMarquee(start) {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (start) {\n this.startMarquee();\n }\n else {\n this.stopMarquee();\n }\n }\n }\n onTextChanged(text, start, lengthBefore, lengthAfter) {\n }\n onSelectionChanged(selStart, selEnd) {\n }\n addTextChangedListener(watcher) {\n if (this.mListeners == null) {\n this.mListeners = new ArrayList();\n }\n this.mListeners.add(watcher);\n }\n removeTextChangedListener(watcher) {\n if (this.mListeners != null) {\n let i = this.mListeners.indexOf(watcher);\n if (i >= 0) {\n this.mListeners.remove(i);\n }\n }\n }\n sendBeforeTextChanged(text, start, before, after) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).beforeTextChanged(text, start, before, after);\n }\n }\n }\n removeAdjacentSuggestionSpans(pos) {\n }\n sendOnTextChanged(text, start, before, after) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).onTextChanged(text, start, before, after);\n }\n }\n }\n sendAfterTextChanged(text) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).afterTextChanged(text + '');\n }\n }\n }\n updateAfterEdit() {\n this.invalidate();\n let curs = this.getSelectionStart();\n if (curs >= 0 || (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n this.registerForPreDraw();\n }\n this.checkForResize();\n if (curs >= 0) {\n this.mHighlightPathBogus = true;\n this.bringPointIntoView(curs);\n }\n }\n handleTextChanged(buffer, start, before, after) {\n this.updateAfterEdit();\n this.sendOnTextChanged(buffer, start, before, after);\n this.onTextChanged(buffer, start, before, after);\n }\n spanChange(buf, what, oldStart, newStart, oldEnd, newEnd) {\n let selChanged = false;\n let newSelStart = -1, newSelEnd = -1;\n this.invalidate();\n this.mHighlightPathBogus = true;\n this.checkForResize();\n }\n dispatchFinishTemporaryDetach() {\n this.mDispatchTemporaryDetach = true;\n super.dispatchFinishTemporaryDetach();\n this.mDispatchTemporaryDetach = false;\n }\n onStartTemporaryDetach() {\n super.onStartTemporaryDetach();\n if (!this.mDispatchTemporaryDetach)\n this.mTemporaryDetach = true;\n }\n onFinishTemporaryDetach() {\n super.onFinishTemporaryDetach();\n if (!this.mDispatchTemporaryDetach)\n this.mTemporaryDetach = false;\n }\n onFocusChanged(focused, direction, previouslyFocusedRect) {\n if (this.mTemporaryDetach) {\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n return;\n }\n this.startStopMarquee(focused);\n if (this.mTransformation != null) {\n this.mTransformation.onFocusChanged(this, this.mText, focused, direction, previouslyFocusedRect);\n }\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n }\n onWindowFocusChanged(hasWindowFocus) {\n super.onWindowFocusChanged(hasWindowFocus);\n this.startStopMarquee(hasWindowFocus);\n }\n onVisibilityChanged(changedView, visibility) {\n super.onVisibilityChanged(changedView, visibility);\n }\n clearComposingText() {\n }\n setSelected(selected) {\n let wasSelected = this.isSelected();\n super.setSelected(selected);\n if (selected != wasSelected && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (selected) {\n this.startMarquee();\n }\n else {\n this.stopMarquee();\n }\n }\n }\n onTouchEvent(event) {\n const action = event.getActionMasked();\n const superResult = super.onTouchEvent(event);\n const touchIsFinished = (action == MotionEvent.ACTION_UP)\n && this.isFocused();\n if ((this.mMovement != null || this.onCheckIsTextEditor()) && this.isEnabled() && Spannable.isImpl(this.mText) && this.mLayout != null) {\n let handled = false;\n if (this.mMovement != null) {\n handled = this.mMovement.onTouchEvent(this, this.mText, event) || handled;\n }\n if (handled) {\n return true;\n }\n }\n return superResult;\n }\n onGenericMotionEvent(event) {\n if (this.mMovement != null && Spannable.isImpl(this.mText) && this.mLayout != null) {\n try {\n if (this.mMovement.onGenericMotionEvent(this, this.mText, event)) {\n return true;\n }\n }\n catch (e) {\n }\n }\n return super.onGenericMotionEvent(event);\n }\n isTextEditable() {\n return false;\n }\n didTouchFocusSelect() {\n return false;\n }\n cancelLongPress() {\n super.cancelLongPress();\n }\n setScroller(s) {\n this.mScroller = s;\n }\n getLeftFadingEdgeStrength() {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n const marquee = this.mMarquee;\n if (marquee.shouldDrawLeftFade()) {\n const scroll = marquee.getScroll();\n return scroll / this.getHorizontalFadingEdgeLength();\n }\n else {\n return 0.0;\n }\n }\n else if (this.getLineCount() == 1) {\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n return 0.0;\n case Gravity.RIGHT:\n return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength();\n case Gravity.CENTER_HORIZONTAL:\n case Gravity.FILL_HORIZONTAL:\n const textDirection = this.mLayout.getParagraphDirection(0);\n if (textDirection == Layout.DIR_LEFT_TO_RIGHT) {\n return 0.0;\n }\n else {\n return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength();\n }\n }\n }\n }\n return super.getLeftFadingEdgeStrength();\n }\n getRightFadingEdgeStrength() {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n const marquee = this.mMarquee;\n const maxFadeScroll = marquee.getMaxFadeScroll();\n const scroll = marquee.getScroll();\n return (maxFadeScroll - scroll) / this.getHorizontalFadingEdgeLength();\n }\n else if (this.getLineCount() == 1) {\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n const textWidth = (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n const lineWidth = this.mLayout.getLineWidth(0);\n return (lineWidth - textWidth) / this.getHorizontalFadingEdgeLength();\n case Gravity.RIGHT:\n return 0.0;\n case Gravity.CENTER_HORIZONTAL:\n case Gravity.FILL_HORIZONTAL:\n const textDirection = this.mLayout.getParagraphDirection(0);\n if (textDirection == Layout.DIR_RIGHT_TO_LEFT) {\n return 0.0;\n }\n else {\n return (this.mLayout.getLineWidth(0) - ((this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) / this.getHorizontalFadingEdgeLength();\n }\n }\n }\n }\n return super.getRightFadingEdgeStrength();\n }\n computeHorizontalScrollRange() {\n if (this.mLayout != null) {\n return this.mSingleLine && (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT ? Math.floor(this.mLayout.getLineWidth(0)) : this.mLayout.getWidth();\n }\n return super.computeHorizontalScrollRange();\n }\n computeVerticalScrollRange() {\n if (this.mLayout != null)\n return this.mLayout.getHeight();\n return super.computeVerticalScrollRange();\n }\n computeVerticalScrollExtent() {\n return this.getHeight() - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n }\n static getTextColors() {\n return android.R.attr.textViewStyle.textColor;\n }\n static getTextColor(def) {\n let colors = this.getTextColors();\n if (colors == null) {\n return def;\n }\n else {\n return colors.getDefaultColor();\n }\n }\n canSelectText() {\n return false;\n }\n textCanBeSelected() {\n return false;\n }\n getTransformedText(start, end) {\n return this.removeSuggestionSpans(this.mTransformed.substring(start, end));\n }\n performLongClick() {\n let handled = false;\n if (super.performLongClick()) {\n handled = true;\n }\n if (handled) {\n this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);\n }\n return handled;\n }\n isSuggestionsEnabled() {\n return false;\n }\n setCustomSelectionActionModeCallback(actionModeCallback) {\n this.createEditorIfNeeded();\n }\n getCustomSelectionActionModeCallback() {\n return null;\n }\n stopSelectionActionMode() {\n }\n canCut() {\n return false;\n }\n canCopy() {\n return true;\n }\n canPaste() {\n return false;\n }\n selectAllText() {\n return false;\n }\n getOffsetForPosition(x, y) {\n if (this.getLayout() == null)\n return -1;\n const line = this.getLineAtCoordinate(y);\n const offset = this.getOffsetAtCoordinate(line, x);\n return offset;\n }\n convertToLocalHorizontalCoordinate(x) {\n x -= this.getTotalPaddingLeft();\n x = Math.max(0.0, x);\n x = Math.min(this.getWidth() - this.getTotalPaddingRight() - 1, x);\n x += this.getScrollX();\n return x;\n }\n getLineAtCoordinate(y) {\n y -= this.getTotalPaddingTop();\n y = Math.max(0.0, y);\n y = Math.min(this.getHeight() - this.getTotalPaddingBottom() - 1, y);\n y += this.getScrollY();\n return this.getLayout().getLineForVertical(Math.floor(y));\n }\n getOffsetAtCoordinate(line, x) {\n x = this.convertToLocalHorizontalCoordinate(x);\n return this.getLayout().getOffsetForHorizontal(line, x);\n }\n isInBatchEditMode() {\n return false;\n }\n getTextDirectionHeuristic() {\n return TextDirectionHeuristics.LTR;\n }\n onResolveDrawables(layoutDirection) {\n if (this.mLastLayoutDirection == layoutDirection) {\n return;\n }\n this.mLastLayoutDirection = layoutDirection;\n if (this.mDrawables != null) {\n this.mDrawables.resolveWithLayoutDirection(layoutDirection);\n }\n }\n resetResolvedDrawables() {\n this.mLastLayoutDirection = -1;\n }\n deleteText_internal(start, end) {\n }\n replaceText_internal(start, end, text) {\n }\n setSpan_internal(span, start, end, flags) {\n }\n setCursorPosition_internal(start, end) {\n }\n createEditorIfNeeded() {\n }\n }\n TextView.LOG_TAG = \"TextView\";\n TextView.DEBUG_EXTRACT = false;\n TextView.SANS = 1;\n TextView.SERIF = 2;\n TextView.MONOSPACE = 3;\n TextView.SIGNED = 2;\n TextView.DECIMAL = 4;\n TextView.MARQUEE_FADE_NORMAL = 0;\n TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS = 1;\n TextView.MARQUEE_FADE_SWITCH_SHOW_FADE = 2;\n TextView.LINES = 1;\n TextView.EMS = TextView.LINES;\n TextView.PIXELS = 2;\n TextView.TEMP_RECTF = new RectF();\n TextView.VERY_WIDE = 1024 * 1024;\n TextView.ANIMATED_SCROLL_GAP = 250;\n TextView.NO_FILTERS = new Array(0);\n TextView.CHANGE_WATCHER_PRIORITY = 100;\n TextView.MULTILINE_STATE_SET = [View.VIEW_STATE_MULTILINE];\n TextView.LAST_CUT_OR_COPY_TIME = 0;\n TextView.UNKNOWN_BORING = new BoringLayout.Metrics();\n widget.TextView = TextView;\n (function (TextView) {\n class Drawables {\n constructor(context) {\n this.mCompoundRect = new Rect();\n this.mDrawableSizeTop = 0;\n this.mDrawableSizeBottom = 0;\n this.mDrawableSizeLeft = 0;\n this.mDrawableSizeRight = 0;\n this.mDrawableSizeStart = 0;\n this.mDrawableSizeEnd = 0;\n this.mDrawableSizeError = 0;\n this.mDrawableSizeTemp = 0;\n this.mDrawableWidthTop = 0;\n this.mDrawableWidthBottom = 0;\n this.mDrawableHeightLeft = 0;\n this.mDrawableHeightRight = 0;\n this.mDrawableHeightStart = 0;\n this.mDrawableHeightEnd = 0;\n this.mDrawableHeightError = 0;\n this.mDrawableHeightTemp = 0;\n this.mDrawablePadding = 0;\n this.mDrawableSaved = Drawables.DRAWABLE_NONE;\n this.mIsRtlCompatibilityMode = false;\n this.mOverride = false;\n }\n resolveWithLayoutDirection(layoutDirection) {\n this.mDrawableLeft = this.mDrawableLeftInitial;\n this.mDrawableRight = this.mDrawableRightInitial;\n if (this.mOverride) {\n this.mDrawableLeft = this.mDrawableStart;\n this.mDrawableSizeLeft = this.mDrawableSizeStart;\n this.mDrawableHeightLeft = this.mDrawableHeightStart;\n this.mDrawableRight = this.mDrawableEnd;\n this.mDrawableSizeRight = this.mDrawableSizeEnd;\n this.mDrawableHeightRight = this.mDrawableHeightEnd;\n }\n this.applyErrorDrawableIfNeeded(layoutDirection);\n this.updateDrawablesLayoutDirection(layoutDirection);\n }\n updateDrawablesLayoutDirection(layoutDirection) {\n }\n setErrorDrawable(dr, tv) {\n if (this.mDrawableError != dr && this.mDrawableError != null) {\n this.mDrawableError.setCallback(null);\n }\n this.mDrawableError = dr;\n const compoundRect = this.mCompoundRect;\n let state = tv.getDrawableState();\n if (this.mDrawableError != null) {\n this.mDrawableError.setState(state);\n this.mDrawableError.copyBounds(compoundRect);\n this.mDrawableError.setCallback(tv);\n this.mDrawableSizeError = compoundRect.width();\n this.mDrawableHeightError = compoundRect.height();\n }\n else {\n this.mDrawableSizeError = this.mDrawableHeightError = 0;\n }\n }\n applyErrorDrawableIfNeeded(layoutDirection) {\n switch (this.mDrawableSaved) {\n case Drawables.DRAWABLE_LEFT:\n this.mDrawableLeft = this.mDrawableTemp;\n this.mDrawableSizeLeft = this.mDrawableSizeTemp;\n this.mDrawableHeightLeft = this.mDrawableHeightTemp;\n break;\n case Drawables.DRAWABLE_RIGHT:\n this.mDrawableRight = this.mDrawableTemp;\n this.mDrawableSizeRight = this.mDrawableSizeTemp;\n this.mDrawableHeightRight = this.mDrawableHeightTemp;\n break;\n case Drawables.DRAWABLE_NONE:\n default:\n }\n this.mDrawableSaved = Drawables.DRAWABLE_RIGHT;\n this.mDrawableTemp = this.mDrawableRight;\n this.mDrawableSizeTemp = this.mDrawableSizeRight;\n this.mDrawableHeightTemp = this.mDrawableHeightRight;\n this.mDrawableRight = this.mDrawableError;\n this.mDrawableSizeRight = this.mDrawableSizeError;\n this.mDrawableHeightRight = this.mDrawableHeightError;\n }\n }\n Drawables.DRAWABLE_NONE = -1;\n Drawables.DRAWABLE_RIGHT = 0;\n Drawables.DRAWABLE_LEFT = 1;\n TextView.Drawables = Drawables;\n class Marquee extends Handler {\n constructor(v) {\n super();\n this.mStatus = Marquee.MARQUEE_STOPPED;\n this.mScrollUnit = 0;\n this.mMaxScroll = 0;\n this.mMaxFadeScroll = 0;\n this.mGhostStart = 0;\n this.mGhostOffset = 0;\n this.mFadeStop = 0;\n this.mRepeatLimit = 0;\n this.mScroll = 0;\n const density = v.getResources().getDisplayMetrics().density;\n this.mScrollUnit = (Marquee.MARQUEE_PIXELS_PER_SECOND * density) / Marquee.MARQUEE_RESOLUTION;\n this.mView = new WeakReference(v);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case Marquee.MESSAGE_START:\n this.mStatus = Marquee.MARQUEE_RUNNING;\n this.tick();\n break;\n case Marquee.MESSAGE_TICK:\n this.tick();\n break;\n case Marquee.MESSAGE_RESTART:\n if (this.mStatus == Marquee.MARQUEE_RUNNING) {\n if (this.mRepeatLimit >= 0) {\n this.mRepeatLimit--;\n }\n this.start(this.mRepeatLimit);\n }\n break;\n }\n }\n tick() {\n if (this.mStatus != Marquee.MARQUEE_RUNNING) {\n return;\n }\n this.removeMessages(Marquee.MESSAGE_TICK);\n const textView = this.mView.get();\n if (textView != null && (textView.isFocused() || textView.isSelected())) {\n this.mScroll += this.mScrollUnit;\n if (this.mScroll > this.mMaxScroll) {\n this.mScroll = this.mMaxScroll;\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART, Marquee.MARQUEE_RESTART_DELAY);\n }\n else {\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK, Marquee.MARQUEE_RESOLUTION);\n }\n textView.invalidate();\n }\n }\n stop() {\n this.mStatus = Marquee.MARQUEE_STOPPED;\n this.removeMessages(Marquee.MESSAGE_START);\n this.removeMessages(Marquee.MESSAGE_RESTART);\n this.removeMessages(Marquee.MESSAGE_TICK);\n this.resetScroll();\n }\n resetScroll() {\n this.mScroll = 0.0;\n const textView = this.mView.get();\n if (textView != null)\n textView.invalidate();\n }\n start(repeatLimit) {\n if (repeatLimit == 0) {\n this.stop();\n return;\n }\n this.mRepeatLimit = repeatLimit;\n const textView = this.mView.get();\n if (textView != null && textView.mLayout != null) {\n this.mStatus = Marquee.MARQUEE_STARTING;\n this.mScroll = 0.0;\n const textWidth = textView.getWidth() - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight();\n const lineWidth = textView.mLayout.getLineWidth(0);\n const gap = textWidth / 3.0;\n this.mGhostStart = lineWidth - textWidth + gap;\n this.mMaxScroll = this.mGhostStart + textWidth;\n this.mGhostOffset = lineWidth + gap;\n this.mFadeStop = lineWidth + textWidth / 6.0;\n this.mMaxFadeScroll = this.mGhostStart + lineWidth + lineWidth;\n textView.invalidate();\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_START, Marquee.MARQUEE_DELAY);\n }\n }\n getGhostOffset() {\n return this.mGhostOffset;\n }\n getScroll() {\n return this.mScroll;\n }\n getMaxFadeScroll() {\n return this.mMaxFadeScroll;\n }\n shouldDrawLeftFade() {\n return this.mScroll <= this.mFadeStop;\n }\n shouldDrawGhost() {\n return this.mStatus == Marquee.MARQUEE_RUNNING && this.mScroll > this.mGhostStart;\n }\n isRunning() {\n return this.mStatus == Marquee.MARQUEE_RUNNING;\n }\n isStopped() {\n return this.mStatus == Marquee.MARQUEE_STOPPED;\n }\n }\n Marquee.MARQUEE_DELTA_MAX = 0.07;\n Marquee.MARQUEE_DELAY = 1200;\n Marquee.MARQUEE_RESTART_DELAY = 1200;\n Marquee.MARQUEE_RESOLUTION = 1000 / 30;\n Marquee.MARQUEE_PIXELS_PER_SECOND = 30;\n Marquee.MARQUEE_STOPPED = 0x0;\n Marquee.MARQUEE_STARTING = 0x1;\n Marquee.MARQUEE_RUNNING = 0x2;\n Marquee.MESSAGE_START = 0x1;\n Marquee.MESSAGE_TICK = 0x2;\n Marquee.MESSAGE_RESTART = 0x3;\n TextView.Marquee = Marquee;\n class ChangeWatcher {\n constructor(arg) {\n this._TextView_this = arg;\n }\n beforeTextChanged(buffer, start, before, after) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"beforeTextChanged start=\" + start + \" before=\" + before + \" after=\" + after + \": \" + buffer);\n this._TextView_this.sendBeforeTextChanged(buffer, start, before, after);\n }\n onTextChanged(buffer, start, before, after) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onTextChanged start=\" + start + \" before=\" + before + \" after=\" + after + \": \" + buffer);\n this._TextView_this.handleTextChanged(buffer, start, before, after);\n }\n afterTextChanged(buffer) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"afterTextChanged: \" + buffer);\n this._TextView_this.sendAfterTextChanged(buffer);\n }\n onSpanChanged(buf, what, s, e, st, en) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanChanged s=\" + s + \" e=\" + e + \" st=\" + st + \" en=\" + en + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, s, st, e, en);\n }\n onSpanAdded(buf, what, s, e) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanAdded s=\" + s + \" e=\" + e + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, -1, s, -1, e);\n }\n onSpanRemoved(buf, what, s, e) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanRemoved s=\" + s + \" e=\" + e + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, s, -1, e, -1);\n }\n }\n TextView.ChangeWatcher = ChangeWatcher;\n (function (BufferType) {\n BufferType[BufferType[\"NORMAL\"] = 0] = \"NORMAL\";\n BufferType[BufferType[\"SPANNABLE\"] = 1] = \"SPANNABLE\";\n BufferType[BufferType[\"EDITABLE\"] = 2] = \"EDITABLE\";\n })(TextView.BufferType || (TextView.BufferType = {}));\n var BufferType = TextView.BufferType;\n })(TextView = widget.TextView || (widget.TextView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class Button extends widget.TextView {\n constructor(context, bindElement, defStyle = android.R.attr.buttonStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.Button = Button;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ListAdapter;\n (function (ListAdapter) {\n function isImpl(obj) {\n return obj && obj['areAllItemsEnabled'] && obj['isEnabled'];\n }\n ListAdapter.isImpl = isImpl;\n })(ListAdapter = widget.ListAdapter || (widget.ListAdapter = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var LongSparseArray = android.util.LongSparseArray;\n var SparseArray = android.util.SparseArray;\n var SparseBooleanArray = android.util.SparseBooleanArray;\n var StateSet = android.util.StateSet;\n var HapticFeedbackConstants = android.view.HapticFeedbackConstants;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var AdapterView = android.widget.AdapterView;\n var OverScroller = android.widget.OverScroller;\n class AbsListView extends AdapterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mChoiceMode = AbsListView.CHOICE_MODE_NONE;\n this.mCheckedItemCount = 0;\n this.mDeferNotifyDataSetChanged = false;\n this.mDrawSelectorOnTop = false;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.mSelectorRect = new Rect();\n this.mRecycler = new AbsListView.RecycleBin(this);\n this.mSelectionLeftPadding = 0;\n this.mSelectionTopPadding = 0;\n this.mSelectionRightPadding = 0;\n this.mSelectionBottomPadding = 0;\n this.mListPadding = new Rect();\n this.mWidthMeasureSpec = 0;\n this.mMotionPosition = 0;\n this.mMotionViewOriginalTop = 0;\n this.mMotionViewNewTop = 0;\n this.mMotionX = 0;\n this.mMotionY = 0;\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.mLastY = 0;\n this.mMotionCorrection = 0;\n this.mSelectedTop = 0;\n this.mSmoothScrollbarEnabled = true;\n this.mResurrectToPosition = AbsListView.INVALID_POSITION;\n this.mOverscrollMax = 0;\n this.mLastTouchMode = AbsListView.TOUCH_MODE_UNKNOWN;\n this.mScrollProfilingStarted = false;\n this.mFlingProfilingStarted = false;\n this.mTranscriptMode = 0;\n this.mCacheColorHint = 0;\n this.mLastScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;\n this.mDensityScale = 0;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mVelocityScale = 1.0;\n this.mIsScrap = new Array(1);\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n this.mOverscrollDistance = 0;\n this._mOverflingDistance = 0;\n this.mFirstPositionDistanceGuess = 0;\n this.mLastPositionDistanceGuess = 0;\n this.mDirection = 0;\n this.mGlowPaddingLeft = 0;\n this.mGlowPaddingRight = 0;\n this.mLastHandledItemCount = 0;\n this.initAbsListView();\n this.setVerticalScrollBarEnabled(true);\n this.initializeScrollbars();\n this._attrBinder.addAttr('listSelector', (value) => {\n let d = this._attrBinder.parseDrawable(value);\n if (d)\n this.setSelector(d);\n });\n this._attrBinder.addAttr('drawSelectorOnTop', (value) => {\n this.mDrawSelectorOnTop = this._attrBinder.parseBoolean(value, false);\n });\n this._attrBinder.addAttr('stackFromBottom', (value) => {\n this.setStackFromBottom(this._attrBinder.parseBoolean(value, false));\n });\n this._attrBinder.addAttr('scrollingCache', (value) => {\n this.setScrollingCacheEnabled(this._attrBinder.parseBoolean(value, true));\n });\n this._attrBinder.addAttr('transcriptMode', (value) => {\n this.setTranscriptMode(this._attrBinder.parseEnum(value, new Map()\n .set(\"disabled\", AbsListView.TRANSCRIPT_MODE_DISABLED)\n .set(\"normal\", AbsListView.TRANSCRIPT_MODE_NORMAL)\n .set(\"alwaysScroll\", AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL), AbsListView.TRANSCRIPT_MODE_DISABLED));\n });\n this._attrBinder.addAttr('cacheColorHint', (value) => {\n let color = this._attrBinder.parseColor(value, 0);\n this.setCacheColorHint(color);\n });\n this._attrBinder.addAttr('fastScrollEnabled', (value) => {\n let enableFastScroll = this._attrBinder.parseBoolean(value, false);\n this.setFastScrollEnabled(enableFastScroll);\n });\n this._attrBinder.addAttr('fastScrollAlwaysVisible', (value) => {\n let fastScrollAlwaysVisible = this._attrBinder.parseBoolean(value, false);\n this.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);\n });\n this._attrBinder.addAttr('smoothScrollbar', (value) => {\n let smoothScrollbar = this._attrBinder.parseBoolean(value, true);\n this.setSmoothScrollbarEnabled(smoothScrollbar);\n });\n this._attrBinder.addAttr('choiceMode', (value) => {\n this.setChoiceMode(this._attrBinder.parseEnum(value, new Map()\n .set(\"none\", AbsListView.CHOICE_MODE_NONE)\n .set(\"singleChoice\", AbsListView.CHOICE_MODE_SINGLE)\n .set(\"multipleChoice\", AbsListView.CHOICE_MODE_MULTIPLE), AbsListView.CHOICE_MODE_NONE));\n });\n }\n get mOverflingDistance() {\n if (this.mScrollY <= 0) {\n if (this.mScrollY < -this._mOverflingDistance)\n return -this.mScrollY;\n return this._mOverflingDistance;\n }\n let overDistance = this.mScrollY;\n if (overDistance > this._mOverflingDistance)\n return overDistance;\n return this._mOverflingDistance;\n }\n set mOverflingDistance(value) {\n this._mOverflingDistance = value;\n }\n initAbsListView() {\n this.setClickable(true);\n this.setFocusableInTouchMode(true);\n this.setWillNotDraw(false);\n this.setAlwaysDrawnWithCacheEnabled(false);\n this.setScrollingCacheEnabled(true);\n const configuration = ViewConfiguration.get();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this.mOverflingDistance = configuration.getScaledOverflingDistance();\n this.mDensityScale = android.content.res.Resources.getDisplayMetrics().density;\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n }\n setOverScrollMode(mode) {\n if (mode != AbsListView.OVER_SCROLL_NEVER) {\n }\n else {\n }\n super.setOverScrollMode(mode);\n }\n setAdapter(adapter) {\n if (adapter != null) {\n this.mAdapterHasStableIds = this.mAdapter.hasStableIds();\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapterHasStableIds && this.mCheckedIdStates == null) {\n this.mCheckedIdStates = new LongSparseArray();\n }\n }\n if (this.mCheckStates != null) {\n this.mCheckStates.clear();\n }\n if (this.mCheckedIdStates != null) {\n this.mCheckedIdStates.clear();\n }\n }\n getCheckedItemCount() {\n return this.mCheckedItemCount;\n }\n isItemChecked(position) {\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n return this.mCheckStates.get(position);\n }\n return false;\n }\n getCheckedItemPosition() {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE && this.mCheckStates != null && this.mCheckStates.size() == 1) {\n return this.mCheckStates.keyAt(0);\n }\n return AbsListView.INVALID_POSITION;\n }\n getCheckedItemPositions() {\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n return this.mCheckStates;\n }\n return null;\n }\n getCheckedItemIds() {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE || this.mCheckedIdStates == null || this.mAdapter == null) {\n return [0];\n }\n const idStates = this.mCheckedIdStates;\n const count = idStates.size();\n const ids = [count];\n for (let i = 0; i < count; i++) {\n ids[i] = idStates.keyAt(i);\n }\n return ids;\n }\n clearChoices() {\n if (this.mCheckStates != null) {\n this.mCheckStates.clear();\n }\n if (this.mCheckedIdStates != null) {\n this.mCheckedIdStates.clear();\n }\n this.mCheckedItemCount = 0;\n }\n setItemChecked(position, value) {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE) {\n return;\n }\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) {\n let oldValue = this.mCheckStates.get(position);\n this.mCheckStates.put(position, value);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n if (value) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n else {\n this.mCheckedIdStates.delete(this.mAdapter.getItemId(position));\n }\n }\n if (oldValue != value) {\n if (value) {\n this.mCheckedItemCount++;\n }\n else {\n this.mCheckedItemCount--;\n }\n }\n }\n else {\n let updateIds = this.mCheckedIdStates != null && this.mAdapter.hasStableIds();\n if (value || this.isItemChecked(position)) {\n this.mCheckStates.clear();\n if (updateIds) {\n this.mCheckedIdStates.clear();\n }\n }\n if (value) {\n this.mCheckStates.put(position, true);\n if (updateIds) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n this.mCheckedItemCount = 1;\n }\n else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) {\n this.mCheckedItemCount = 0;\n }\n }\n if (!this.mInLayout && !this.mBlockLayoutRequests) {\n this.mDataChanged = true;\n this.rememberSyncState();\n this.requestLayout();\n }\n }\n performItemClick(view, position, id) {\n let handled = false;\n let dispatchItemClick = true;\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n handled = true;\n let checkedStateChanged = false;\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL && this.mChoiceActionMode != null)) {\n let checked = !this.mCheckStates.get(position, false);\n this.mCheckStates.put(position, checked);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n if (checked) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n else {\n this.mCheckedIdStates.delete(this.mAdapter.getItemId(position));\n }\n }\n if (checked) {\n this.mCheckedItemCount++;\n }\n else {\n this.mCheckedItemCount--;\n }\n checkedStateChanged = true;\n }\n else if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE) {\n let checked = !this.mCheckStates.get(position, false);\n if (checked) {\n this.mCheckStates.clear();\n this.mCheckStates.put(position, true);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n this.mCheckedIdStates.clear();\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n this.mCheckedItemCount = 1;\n }\n else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) {\n this.mCheckedItemCount = 0;\n }\n checkedStateChanged = true;\n }\n if (checkedStateChanged) {\n this.updateOnScreenCheckedViews();\n }\n }\n if (dispatchItemClick) {\n handled = super.performItemClick(view, position, id) || handled;\n }\n return handled;\n }\n updateOnScreenCheckedViews() {\n const firstPos = this.mFirstPosition;\n const count = this.getChildCount();\n const useActivated = true;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n const position = firstPos + i;\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else if (useActivated) {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n }\n getChoiceMode() {\n return this.mChoiceMode;\n }\n setChoiceMode(choiceMode) {\n this.mChoiceMode = choiceMode;\n if (this.mChoiceActionMode != null) {\n this.mChoiceActionMode.finish();\n this.mChoiceActionMode = null;\n }\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n if (this.mCheckStates == null) {\n this.mCheckStates = new SparseBooleanArray(0);\n }\n if (this.mCheckedIdStates == null && this.mAdapter != null && this.mAdapter.hasStableIds()) {\n this.mCheckedIdStates = new LongSparseArray(0);\n }\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) {\n this.clearChoices();\n this.setLongClickable(true);\n }\n }\n }\n contentFits() {\n const childCount = this.getChildCount();\n if (childCount == 0)\n return true;\n if (childCount != this.mItemCount)\n return false;\n return this.getChildAt(0).getTop() >= this.mListPadding.top && this.getChildAt(childCount - 1).getBottom() <= this.getHeight() - this.mListPadding.bottom;\n }\n setFastScrollEnabled(enabled) {\n if (this.mFastScrollEnabled != enabled) {\n this.mFastScrollEnabled = enabled;\n this.setFastScrollerEnabledUiThread(enabled);\n }\n }\n setFastScrollerEnabledUiThread(enabled) {\n }\n setFastScrollAlwaysVisible(alwaysShow) {\n if (this.mFastScrollAlwaysVisible != alwaysShow) {\n if (alwaysShow && !this.mFastScrollEnabled) {\n this.setFastScrollEnabled(true);\n }\n this.mFastScrollAlwaysVisible = alwaysShow;\n this.setFastScrollerAlwaysVisibleUiThread(alwaysShow);\n }\n }\n setFastScrollerAlwaysVisibleUiThread(alwaysShow) {\n }\n isOwnerThread() {\n return true;\n }\n isFastScrollAlwaysVisible() {\n return false;\n }\n getVerticalScrollbarWidth() {\n return super.getVerticalScrollbarWidth();\n }\n isFastScrollEnabled() {\n return false;\n }\n setVerticalScrollbarPosition(position) {\n super.setVerticalScrollbarPosition(position);\n }\n setScrollBarStyle(style) {\n super.setScrollBarStyle(style);\n }\n isVerticalScrollBarHidden() {\n return this.isFastScrollEnabled();\n }\n setSmoothScrollbarEnabled(enabled) {\n this.mSmoothScrollbarEnabled = enabled;\n }\n isSmoothScrollbarEnabled() {\n return this.mSmoothScrollbarEnabled;\n }\n setOnScrollListener(l) {\n this.mOnScrollListener = l;\n this.invokeOnItemScrollListener();\n }\n invokeOnItemScrollListener() {\n if (this.mOnScrollListener != null) {\n this.mOnScrollListener.onScroll(this, this.mFirstPosition, this.getChildCount(), this.mItemCount);\n }\n this.onScrollChanged(0, 0, 0, 0);\n }\n isScrollingCacheEnabled() {\n return this.mScrollingCacheEnabled;\n }\n setScrollingCacheEnabled(enabled) {\n if (this.mScrollingCacheEnabled && !enabled) {\n this.clearScrollingCache();\n }\n this.mScrollingCacheEnabled = enabled;\n }\n setTextFilterEnabled(textFilterEnabled) {\n this.mTextFilterEnabled = textFilterEnabled;\n }\n isTextFilterEnabled() {\n return this.mTextFilterEnabled;\n }\n getFocusedRect(r) {\n let view = this.getSelectedView();\n if (view != null && view.getParent() == this) {\n view.getFocusedRect(r);\n this.offsetDescendantRectToMyCoords(view, r);\n }\n else {\n super.getFocusedRect(r);\n }\n }\n useDefaultSelector() {\n this.setSelector(android.R.drawable.list_selector_background);\n }\n isStackFromBottom() {\n return this.mStackFromBottom;\n }\n setStackFromBottom(stackFromBottom) {\n if (this.mStackFromBottom != stackFromBottom) {\n this.mStackFromBottom = stackFromBottom;\n this.requestLayoutIfNecessary();\n }\n }\n requestLayoutIfNecessary() {\n if (this.getChildCount() > 0) {\n this.resetList();\n this.requestLayout();\n this.invalidate();\n }\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n if (gainFocus && this.mSelectedPosition < 0 && !this.isInTouchMode()) {\n if (!this.isAttachedToWindow() && this.mAdapter != null) {\n this.mDataChanged = true;\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n }\n this.resurrectSelection();\n }\n }\n requestLayout() {\n if (!this.mBlockLayoutRequests && !this.mInLayout) {\n super.requestLayout();\n }\n }\n resetList() {\n this.removeAllViewsInLayout();\n this.mFirstPosition = 0;\n this.mDataChanged = false;\n this.mPositionScrollAfterLayout = null;\n this.mNeedSync = false;\n this.mPendingSync = null;\n this.mOldSelectedPosition = AbsListView.INVALID_POSITION;\n this.mOldSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.setSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.mSelectedTop = 0;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.mSelectorRect.setEmpty();\n this.invalidate();\n }\n computeVerticalScrollExtent() {\n const count = this.getChildCount();\n if (count > 0) {\n if (this.mSmoothScrollbarEnabled) {\n let extent = count * 100;\n let view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n extent += (top * 100) / height;\n }\n view = this.getChildAt(count - 1);\n const bottom = view.getBottom();\n height = view.getHeight();\n if (height > 0) {\n extent -= ((bottom - this.getHeight()) * 100) / height;\n }\n return extent;\n }\n else {\n return 1;\n }\n }\n return 0;\n }\n computeVerticalScrollOffset() {\n const firstPosition = this.mFirstPosition;\n const childCount = this.getChildCount();\n if (firstPosition >= 0 && childCount > 0) {\n if (this.mSmoothScrollbarEnabled) {\n const view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n return Math.max(firstPosition * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)), 0);\n }\n }\n else {\n let index;\n const count = this.mItemCount;\n if (firstPosition == 0) {\n index = 0;\n }\n else if (firstPosition + childCount == count) {\n index = count;\n }\n else {\n index = firstPosition + childCount / 2;\n }\n return Math.floor((firstPosition + childCount * (index / count)));\n }\n }\n return 0;\n }\n computeVerticalScrollRange() {\n let result;\n if (this.mSmoothScrollbarEnabled) {\n result = Math.max(this.mItemCount * 100, 0);\n if (this.mScrollY != 0) {\n result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)));\n }\n }\n else {\n result = this.mItemCount;\n }\n return result;\n }\n getTopFadingEdgeStrength() {\n const count = this.getChildCount();\n const fadeEdge = super.getTopFadingEdgeStrength();\n if (count == 0) {\n return fadeEdge;\n }\n else {\n if (this.mFirstPosition > 0) {\n return 1.0;\n }\n const top = this.getChildAt(0).getTop();\n const fadeLength = this.getVerticalFadingEdgeLength();\n return top < this.mPaddingTop ? -(top - this.mPaddingTop) / fadeLength : fadeEdge;\n }\n }\n getBottomFadingEdgeStrength() {\n const count = this.getChildCount();\n const fadeEdge = super.getBottomFadingEdgeStrength();\n if (count == 0) {\n return fadeEdge;\n }\n else {\n if (this.mFirstPosition + count - 1 < this.mItemCount - 1) {\n return 1.0;\n }\n const bottom = this.getChildAt(count - 1).getBottom();\n const height = this.getHeight();\n const fadeLength = this.getVerticalFadingEdgeLength();\n return bottom > height - this.mPaddingBottom ? (bottom - height + this.mPaddingBottom) / fadeLength : fadeEdge;\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mSelector == null) {\n this.useDefaultSelector();\n }\n const listPadding = this.mListPadding;\n listPadding.left = this.mSelectionLeftPadding + this.mPaddingLeft;\n listPadding.top = this.mSelectionTopPadding + this.mPaddingTop;\n listPadding.right = this.mSelectionRightPadding + this.mPaddingRight;\n listPadding.bottom = this.mSelectionBottomPadding + this.mPaddingBottom;\n if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) {\n const childCount = this.getChildCount();\n const listBottom = this.getHeight() - this.getPaddingBottom();\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;\n this.mForceTranscriptScroll = this.mFirstPosition + childCount >= this.mLastHandledItemCount && lastBottom <= listBottom;\n }\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mInLayout = true;\n if (changed) {\n let childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n this.getChildAt(i).forceLayout();\n }\n this.mRecycler.markChildrenDirty();\n }\n this.layoutChildren();\n this.mInLayout = false;\n this.mOverscrollMax = (b - t) / AbsListView.OVERSCROLL_LIMIT_DIVISOR;\n }\n setFrame(left, top, right, bottom) {\n const changed = super.setFrame(left, top, right, bottom);\n if (changed) {\n const visible = this.getWindowVisibility() == View.VISIBLE;\n }\n return changed;\n }\n layoutChildren() {\n }\n updateScrollIndicators() {\n if (this.mScrollUp != null) {\n let canScrollUp;\n canScrollUp = this.mFirstPosition > 0;\n if (!canScrollUp) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n canScrollUp = child.getTop() < this.mListPadding.top;\n }\n }\n this.mScrollUp.setVisibility(canScrollUp ? View.VISIBLE : View.INVISIBLE);\n }\n if (this.mScrollDown != null) {\n let canScrollDown;\n let count = this.getChildCount();\n canScrollDown = (this.mFirstPosition + count) < this.mItemCount;\n if (!canScrollDown && count > 0) {\n let child = this.getChildAt(count - 1);\n canScrollDown = child.getBottom() > this.mBottom - this.mListPadding.bottom;\n }\n this.mScrollDown.setVisibility(canScrollDown ? View.VISIBLE : View.INVISIBLE);\n }\n }\n getSelectedView() {\n if (this.mItemCount > 0 && this.mSelectedPosition >= 0) {\n return this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n }\n else {\n return null;\n }\n }\n getListPaddingTop() {\n return this.mListPadding.top;\n }\n getListPaddingBottom() {\n return this.mListPadding.bottom;\n }\n getListPaddingLeft() {\n return this.mListPadding.left;\n }\n getListPaddingRight() {\n return this.mListPadding.right;\n }\n obtainView(position, isScrap) {\n isScrap[0] = false;\n let scrapView;\n scrapView = this.mRecycler.getTransientStateView(position);\n if (scrapView == null) {\n scrapView = this.mRecycler.getScrapView(position);\n }\n let child;\n if (scrapView != null) {\n child = this.mAdapter.getView(position, scrapView, this);\n if (child != scrapView) {\n this.mRecycler.addScrapView(scrapView, position);\n if (this.mCacheColorHint != 0) {\n child.setDrawingCacheBackgroundColor(this.mCacheColorHint);\n }\n }\n else {\n isScrap[0] = true;\n child.dispatchFinishTemporaryDetach();\n }\n }\n else {\n child = this.mAdapter.getView(position, null, this);\n if (this.mCacheColorHint != 0) {\n child.setDrawingCacheBackgroundColor(this.mCacheColorHint);\n }\n }\n if (this.mAdapterHasStableIds) {\n const vlp = child.getLayoutParams();\n let lp;\n if (vlp == null) {\n lp = this.generateDefaultLayoutParams();\n }\n else if (!this.checkLayoutParams(vlp)) {\n lp = this.generateLayoutParams(vlp);\n }\n else {\n lp = vlp;\n }\n lp.itemId = this.mAdapter.getItemId(position);\n child.setLayoutParams(lp);\n }\n return child;\n }\n positionSelector(...args) {\n if (args.length === 4) {\n let [l, t, r, b] = args;\n this.mSelectorRect.set(l - this.mSelectionLeftPadding, t - this.mSelectionTopPadding, r + this.mSelectionRightPadding, b + this.mSelectionBottomPadding);\n }\n else {\n let position = args[0];\n let sel = args[1];\n if (position != AbsListView.INVALID_POSITION) {\n this.mSelectorPosition = position;\n }\n const selectorRect = this.mSelectorRect;\n selectorRect.set(sel.getLeft(), sel.getTop(), sel.getRight(), sel.getBottom());\n if (sel['adjustListItemSelectionBounds']) {\n sel.adjustListItemSelectionBounds(selectorRect);\n }\n this.positionSelector(selectorRect.left, selectorRect.top, selectorRect.right, selectorRect.bottom);\n const isChildViewEnabled = this.mIsChildViewEnabled;\n if (sel.isEnabled() != isChildViewEnabled) {\n this.mIsChildViewEnabled = !isChildViewEnabled;\n if (this.getSelectedItemPosition() != AbsListView.INVALID_POSITION) {\n this.refreshDrawableState();\n }\n }\n }\n }\n dispatchDraw(canvas) {\n let saveCount = 0;\n const clipToPadding = (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n this.mGroupFlags &= ~AbsListView.CLIP_TO_PADDING_MASK;\n }\n const drawSelectorOnTop = this.mDrawSelectorOnTop;\n if (!drawSelectorOnTop) {\n this.drawSelector(canvas);\n }\n super.dispatchDraw(canvas);\n if (drawSelectorOnTop) {\n this.drawSelector(canvas);\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n this.mGroupFlags |= AbsListView.CLIP_TO_PADDING_MASK;\n }\n }\n isPaddingOffsetRequired() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) != AbsListView.CLIP_TO_PADDING_MASK;\n }\n getLeftPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingLeft;\n }\n getTopPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingTop;\n }\n getRightPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingRight;\n }\n getBottomPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingBottom;\n }\n onSizeChanged(w, h, oldw, oldh) {\n if (this.getChildCount() > 0) {\n this.mDataChanged = true;\n this.rememberSyncState();\n }\n }\n touchModeDrawsInPressedState() {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n return true;\n default:\n return false;\n }\n }\n shouldShowSelector() {\n return (!this.isInTouchMode()) || (this.touchModeDrawsInPressedState() && this.isPressed());\n }\n drawSelector(canvas) {\n if (!this.mSelectorRect.isEmpty()) {\n const selector = this.mSelector;\n selector.setBounds(this.mSelectorRect);\n selector.draw(canvas);\n }\n }\n setDrawSelectorOnTop(onTop) {\n this.mDrawSelectorOnTop = onTop;\n }\n setSelector(sel) {\n if (this.mSelector != null) {\n this.mSelector.setCallback(null);\n this.unscheduleDrawable(this.mSelector);\n }\n this.mSelector = sel;\n let padding = new Rect();\n sel.getPadding(padding);\n this.mSelectionLeftPadding = padding.left;\n this.mSelectionTopPadding = padding.top;\n this.mSelectionRightPadding = padding.right;\n this.mSelectionBottomPadding = padding.bottom;\n sel.setCallback(this);\n this.updateSelectorState();\n }\n getSelector() {\n return this.mSelector;\n }\n keyPressed() {\n if (!this.isEnabled() || !this.isClickable()) {\n return;\n }\n let selector = this.mSelector;\n let selectorRect = this.mSelectorRect;\n if (selector != null && (this.isFocused() || this.touchModeDrawsInPressedState()) && !selectorRect.isEmpty()) {\n const v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n if (v != null) {\n if (v.hasFocusable())\n return;\n v.setPressed(true);\n }\n this.setPressed(true);\n const longClickable = this.isLongClickable();\n let d = selector.getCurrent();\n if (longClickable && !this.mDataChanged) {\n if (this.mPendingCheckForKeyLongPress == null) {\n this.mPendingCheckForKeyLongPress = new AbsListView.CheckForKeyLongPress(this);\n }\n this.mPendingCheckForKeyLongPress.rememberWindowAttachCount();\n this.postDelayed(this.mPendingCheckForKeyLongPress, ViewConfiguration.getLongPressTimeout());\n }\n }\n }\n setScrollIndicators(up, down) {\n this.mScrollUp = up;\n this.mScrollDown = down;\n }\n updateSelectorState() {\n if (this.mSelector != null) {\n if (this.shouldShowSelector()) {\n this.mSelector.setState(this.getDrawableState());\n }\n else {\n this.mSelector.setState(StateSet.NOTHING);\n }\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n this.updateSelectorState();\n }\n onCreateDrawableState(extraSpace) {\n if (this.mIsChildViewEnabled) {\n return super.onCreateDrawableState(extraSpace);\n }\n const enabledState = AbsListView.ENABLED_STATE_SET[0];\n let state = super.onCreateDrawableState(extraSpace + 1);\n let enabledPos = -1;\n for (let i = state.length - 1; i >= 0; i--) {\n if (state[i] == enabledState) {\n enabledPos = i;\n break;\n }\n }\n if (enabledPos >= 0) {\n System.arraycopy(state, enabledPos + 1, state, enabledPos, state.length - enabledPos - 1);\n }\n return state;\n }\n verifyDrawable(dr) {\n return this.mSelector == dr || super.verifyDrawable(dr);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mSelector != null)\n this.mSelector.jumpToCurrentState();\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n const treeObserver = this.getViewTreeObserver();\n treeObserver.addOnTouchModeChangeListener(this);\n if (this.mAdapter != null && this.mDataSetObserver == null) {\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mDataChanged = true;\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.dismissPopup();\n this.mRecycler.clear();\n const treeObserver = this.getViewTreeObserver();\n treeObserver.removeOnTouchModeChangeListener(this);\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n this.mDataSetObserver = null;\n }\n if (this.mFlingRunnable != null) {\n this.removeCallbacks(this.mFlingRunnable);\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mClearScrollingCache != null) {\n this.removeCallbacks(this.mClearScrollingCache);\n }\n if (this.mPerformClick_ != null) {\n this.removeCallbacks(this.mPerformClick_);\n }\n if (this.mTouchModeReset != null) {\n this.removeCallbacks(this.mTouchModeReset);\n this.mTouchModeReset.run();\n }\n }\n onWindowFocusChanged(hasWindowFocus) {\n super.onWindowFocusChanged(hasWindowFocus);\n const touchMode = this.isInTouchMode() ? AbsListView.TOUCH_MODE_ON : AbsListView.TOUCH_MODE_OFF;\n if (!hasWindowFocus) {\n this.setChildrenDrawingCacheEnabled(false);\n if (this.mFlingRunnable != null) {\n this.removeCallbacks(this.mFlingRunnable);\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentCaches();\n this.finishGlows();\n this.invalidate();\n }\n }\n this.dismissPopup();\n if (touchMode == AbsListView.TOUCH_MODE_OFF) {\n this.mResurrectToPosition = this.mSelectedPosition;\n }\n }\n else {\n if (this.mFiltered && !this.mPopupHidden) {\n this.showPopup();\n }\n if (touchMode != this.mLastTouchMode && this.mLastTouchMode != AbsListView.TOUCH_MODE_UNKNOWN) {\n if (touchMode == AbsListView.TOUCH_MODE_OFF) {\n this.resurrectSelection();\n }\n else {\n this.hideSelector();\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n this.layoutChildren();\n }\n }\n }\n this.mLastTouchMode = touchMode;\n }\n onCancelPendingInputEvents() {\n super.onCancelPendingInputEvents();\n if (this.mPerformClick_ != null) {\n this.removeCallbacks(this.mPerformClick_);\n }\n if (this.mPendingCheckForTap_ != null) {\n this.removeCallbacks(this.mPendingCheckForTap_);\n }\n if (this.mPendingCheckForLongPress_List != null) {\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n }\n if (this.mPendingCheckForKeyLongPress != null) {\n this.removeCallbacks(this.mPendingCheckForKeyLongPress);\n }\n }\n performLongPress(child, longPressPosition, longPressId) {\n let handled = false;\n if (this.mOnItemLongClickListener != null) {\n handled = this.mOnItemLongClickListener.onItemLongClick(this, child, longPressPosition, longPressId);\n }\n if (handled) {\n this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);\n }\n return handled;\n }\n onKeyDown(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (KeyEvent.isConfirmKey(keyCode)) {\n if (!this.isEnabled()) {\n return true;\n }\n if (this.isClickable() && this.isPressed() && this.mSelectedPosition >= 0\n && this.mAdapter != null && this.mSelectedPosition < this.mAdapter.getCount()) {\n const view = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n if (view != null) {\n this.performItemClick(view, this.mSelectedPosition, this.mSelectedRowId);\n view.setPressed(false);\n }\n this.setPressed(false);\n return true;\n }\n }\n return super.onKeyUp(keyCode, event);\n }\n dispatchSetPressed(pressed) {\n }\n pointToPosition(x, y) {\n let frame = this.mTouchFrame;\n if (frame == null) {\n this.mTouchFrame = new Rect();\n frame = this.mTouchFrame;\n }\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n child.getHitRect(frame);\n if (frame.contains(x, y)) {\n return this.mFirstPosition + i;\n }\n }\n }\n return AbsListView.INVALID_POSITION;\n }\n pointToRowId(x, y) {\n let position = this.pointToPosition(x, y);\n if (position >= 0) {\n return this.mAdapter.getItemId(position);\n }\n return AbsListView.INVALID_ROW_ID;\n }\n checkOverScrollStartScrollIfNeeded() {\n return this.mScrollY != 0;\n }\n startScrollIfNeeded(y) {\n const deltaY = y - this.mMotionY;\n const distance = Math.abs(deltaY);\n const overscroll = this.checkOverScrollStartScrollIfNeeded();\n if (overscroll || distance > this.mTouchSlop) {\n this.createScrollingCache();\n if (this.mScrollY != 0) {\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n this.mMotionCorrection = 0;\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n this.mMotionCorrection = deltaY > 0 ? this.mTouchSlop : -this.mTouchSlop;\n }\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.scrollIfNeeded(y);\n return true;\n }\n return false;\n }\n scrollIfNeeded(y) {\n const rawDeltaY = y - this.mMotionY;\n const deltaY = rawDeltaY - this.mMotionCorrection;\n let incrementalDeltaY = this.mLastY != Integer.MIN_VALUE ? y - this.mLastY : deltaY;\n if (this.mTouchMode == AbsListView.TOUCH_MODE_SCROLL) {\n if (AbsListView.PROFILE_SCROLLING) {\n if (!this.mScrollProfilingStarted) {\n this.mScrollProfilingStarted = true;\n }\n }\n if (y != this.mLastY) {\n if ((this.mGroupFlags & AbsListView.FLAG_DISALLOW_INTERCEPT) == 0 && Math.abs(rawDeltaY) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n let motionIndex;\n if (this.mMotionPosition >= 0) {\n motionIndex = this.mMotionPosition - this.mFirstPosition;\n }\n else {\n motionIndex = this.getChildCount() / 2;\n }\n let motionViewPrevTop = 0;\n let motionView = this.getChildAt(motionIndex);\n if (motionView != null) {\n motionViewPrevTop = motionView.getTop();\n }\n let atEdge = false;\n if (incrementalDeltaY != 0) {\n atEdge = this.trackMotionScroll(deltaY, incrementalDeltaY);\n }\n motionView = this.getChildAt(motionIndex);\n if (motionView != null) {\n const motionViewRealTop = motionView.getTop();\n if (atEdge) {\n let overscroll = -incrementalDeltaY - (motionViewRealTop - motionViewPrevTop);\n this.overScrollBy(0, overscroll, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true);\n if (Math.abs(this.mOverscrollDistance) == Math.abs(this.mScrollY)) {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n const overscrollMode = this.getOverScrollMode();\n if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this.contentFits())) {\n this.mDirection = 0;\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n if (rawDeltaY > 0) {\n }\n else if (rawDeltaY < 0) {\n }\n }\n }\n this.mMotionY = y;\n }\n this.mLastY = y;\n }\n }\n else if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERSCROLL) {\n if (y != this.mLastY) {\n const oldScroll = this.mScrollY;\n const newScroll = oldScroll - incrementalDeltaY;\n let newDirection = y > this.mLastY ? 1 : -1;\n if (this.mDirection == 0) {\n this.mDirection = newDirection;\n }\n let overScrollDistance = -incrementalDeltaY;\n if ((newScroll < 0 && oldScroll >= 0) || (newScroll > 0 && oldScroll <= 0)) {\n overScrollDistance = -oldScroll;\n incrementalDeltaY += overScrollDistance;\n }\n else {\n incrementalDeltaY = 0;\n }\n if (overScrollDistance != 0) {\n this.overScrollBy(0, overScrollDistance, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true);\n }\n if (incrementalDeltaY != 0) {\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentIfNeeded();\n }\n this.trackMotionScroll(incrementalDeltaY, incrementalDeltaY);\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n const motionPosition = this.findClosestMotionRow(y);\n this.mMotionCorrection = 0;\n let motionView = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = motionView != null ? motionView.getTop() : 0;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n this.mDirection = newDirection;\n }\n }\n }\n onTouchModeChanged(isInTouchMode) {\n if (isInTouchMode) {\n this.hideSelector();\n if (this.getHeight() > 0 && this.getChildCount() > 0) {\n this.layoutChildren();\n }\n this.updateSelectorState();\n }\n else {\n let touchMode = this.mTouchMode;\n if (touchMode == AbsListView.TOUCH_MODE_OVERSCROLL || touchMode == AbsListView.TOUCH_MODE_OVERFLING) {\n if (this.mFlingRunnable != null) {\n this.mFlingRunnable.endFling();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentCaches();\n this.finishGlows();\n this.invalidate();\n }\n }\n }\n }\n onTouchEvent(ev) {\n if (!this.isEnabled()) {\n return this.isClickable() || this.isLongClickable();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (!this.isAttachedToWindow()) {\n return false;\n }\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const actionMasked = ev.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_DOWN:\n {\n this.onTouchDown(ev);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n this.onTouchMove(ev);\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n this.onTouchUp(ev);\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n this.onTouchCancel();\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n this.onSecondaryPointerUp(ev);\n const x = this.mMotionX;\n const y = this.mMotionY;\n const motionPosition = this.pointToPosition(x, y);\n if (motionPosition >= 0) {\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = child.getTop();\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const index = ev.getActionIndex();\n const id = ev.getPointerId(index);\n const x = Math.floor(ev.getX(index));\n const y = Math.floor(ev.getY(index));\n this.mMotionCorrection = 0;\n this.mActivePointerId = id;\n this.mMotionX = x;\n this.mMotionY = y;\n const motionPosition = this.pointToPosition(x, y);\n if (motionPosition >= 0) {\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = child.getTop();\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n break;\n }\n }\n return true;\n }\n onTouchDown(ev) {\n this.mActivePointerId = ev.getPointerId(0);\n if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERFLING) {\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n this.mMotionX = Math.floor(ev.getX());\n this.mMotionY = Math.floor(ev.getY());\n this.mLastY = this.mMotionY;\n this.mMotionCorrection = 0;\n this.mDirection = 0;\n }\n else {\n const x = Math.floor(ev.getX());\n const y = Math.floor(ev.getY());\n let motionPosition = this.pointToPosition(x, y);\n if (!this.mDataChanged) {\n if (this.mTouchMode == AbsListView.TOUCH_MODE_FLING) {\n this.createScrollingCache();\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n this.mMotionCorrection = 0;\n motionPosition = this.findMotionRow(y);\n this.mFlingRunnable.flywheelTouch();\n }\n else if ((motionPosition >= 0) && this.getAdapter().isEnabled(motionPosition)) {\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n if (this.mPendingCheckForTap_ == null) {\n this.mPendingCheckForTap_ = new AbsListView.CheckForTap(this);\n }\n this.postDelayed(this.mPendingCheckForTap_, ViewConfiguration.getTapTimeout());\n }\n else if (motionPosition < 0) {\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n }\n }\n if (motionPosition >= 0) {\n const v = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = v.getTop();\n }\n this.mMotionX = x;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n this.mLastY = Integer.MIN_VALUE;\n }\n if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN && this.mMotionPosition != AbsListView.INVALID_POSITION\n && this.performButtonActionOnTouchDown(ev)) {\n this.removeCallbacks(this.mPendingCheckForTap_);\n }\n }\n onTouchMove(ev) {\n let pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n pointerIndex = 0;\n this.mActivePointerId = ev.getPointerId(pointerIndex);\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n const y = Math.floor(ev.getY(pointerIndex));\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n if (this.startScrollIfNeeded(y)) {\n break;\n }\n const x = ev.getX(pointerIndex);\n if (!this.pointInView(x, y, this.mTouchSlop)) {\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List);\n this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n this.updateSelectorState();\n }\n break;\n case AbsListView.TOUCH_MODE_SCROLL:\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n this.scrollIfNeeded(y);\n break;\n }\n }\n onTouchUp(ev) {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n const motionPosition = this.mMotionPosition;\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n if (child != null) {\n if (this.mTouchMode != AbsListView.TOUCH_MODE_DOWN) {\n child.setPressed(false);\n }\n const x = ev.getX();\n const inList = x > this.mListPadding.left && x < this.getWidth() - this.mListPadding.right;\n if (inList && !child.hasFocusable()) {\n if (this.mPerformClick_ == null) {\n this.mPerformClick_ = new AbsListView.PerformClick(this);\n }\n const performClick = this.mPerformClick_;\n performClick.mClickMotionPosition = motionPosition;\n performClick.rememberWindowAttachCount();\n this.mResurrectToPosition = motionPosition;\n if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN || this.mTouchMode == AbsListView.TOUCH_MODE_TAP) {\n this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List);\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) {\n this.mTouchMode = AbsListView.TOUCH_MODE_TAP;\n this.setSelectedPositionInt(this.mMotionPosition);\n this.layoutChildren();\n child.setPressed(true);\n this.positionSelector(this.mMotionPosition, child);\n this.setPressed(true);\n if (this.mSelector != null) {\n let d = this.mSelector.getCurrent();\n }\n if (this.mTouchModeReset != null) {\n this.removeCallbacks(this.mTouchModeReset);\n }\n this.mTouchModeReset = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.mTouchModeReset = null;\n _this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n child.setPressed(false);\n _this.setPressed(false);\n if (!_this.mDataChanged && _this.isAttachedToWindow()) {\n performClick.run();\n }\n }\n }\n return new _Inner();\n })();\n this.postDelayed(this.mTouchModeReset, ViewConfiguration.getPressedStateDuration());\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.updateSelectorState();\n }\n return;\n }\n else if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) {\n performClick.run();\n }\n }\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.updateSelectorState();\n break;\n case AbsListView.TOUCH_MODE_SCROLL:\n const childCount = this.getChildCount();\n if (childCount > 0) {\n const firstChildTop = this.getChildAt(0).getTop();\n const lastChildBottom = this.getChildAt(childCount - 1).getBottom();\n const contentTop = this.mListPadding.top;\n const contentBottom = this.getHeight() - this.mListPadding.bottom;\n if (this.mFirstPosition == 0 && firstChildTop >= contentTop && this.mFirstPosition + childCount < this.mItemCount\n && lastChildBottom <= this.getHeight() - contentBottom) {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n const initialVelocity = Math.floor((velocityTracker.getYVelocity(this.mActivePointerId) * this.mVelocityScale));\n if (Math.abs(initialVelocity) > this.mMinimumVelocity\n && !((this.mFirstPosition == 0 && firstChildTop == contentTop - this.mOverscrollDistance)\n || (this.mFirstPosition + childCount == this.mItemCount\n && lastChildBottom == contentBottom + this.mOverscrollDistance))) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.mFlingRunnable.start(-initialVelocity);\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n if (this.mFlingRunnable != null) {\n this.mFlingRunnable.endFling();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n }\n }\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n }\n break;\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n const initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId));\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n if (Math.abs(initialVelocity) > this.mMinimumVelocity) {\n this.mFlingRunnable.startOverfling(-initialVelocity);\n }\n else {\n this.mFlingRunnable.startSpringback();\n }\n break;\n }\n this.setPressed(false);\n this.invalidate();\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.recycleVelocityTracker();\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n if (AbsListView.PROFILE_SCROLLING) {\n if (this.mScrollProfilingStarted) {\n this.mScrollProfilingStarted = false;\n }\n }\n }\n onTouchCancel() {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.mFlingRunnable.startSpringback();\n break;\n case AbsListView.TOUCH_MODE_OVERFLING:\n break;\n default:\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.clearScrollingCache();\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.recycleVelocityTracker();\n }\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (this.mScrollY != scrollY) {\n this.onScrollChanged(this.mScrollX, scrollY, this.mScrollX, this.mScrollY);\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.awakenScrollBars();\n }\n }\n onGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL:\n {\n if (this.mTouchMode == AbsListView.TOUCH_MODE_REST) {\n const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (vscroll != 0) {\n const delta = Math.floor((vscroll * this.getVerticalScrollFactor()));\n if (!this.trackMotionScroll(delta, delta)) {\n return true;\n }\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n draw(canvas) {\n super.draw(canvas);\n }\n setOverScrollEffectPadding(leftPadding, rightPadding) {\n this.mGlowPaddingLeft = leftPadding;\n this.mGlowPaddingRight = rightPadding;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n let action = ev.getAction();\n let v;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (!this.isAttachedToWindow()) {\n return false;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n let touchMode = this.mTouchMode;\n if (touchMode == AbsListView.TOUCH_MODE_OVERFLING || touchMode == AbsListView.TOUCH_MODE_OVERSCROLL) {\n this.mMotionCorrection = 0;\n return true;\n }\n const x = Math.floor(ev.getX());\n const y = Math.floor(ev.getY());\n this.mActivePointerId = ev.getPointerId(0);\n let motionPosition = this.findMotionRow(y);\n if (touchMode != AbsListView.TOUCH_MODE_FLING && motionPosition >= 0) {\n v = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = v.getTop();\n this.mMotionX = x;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n this.clearScrollingCache();\n }\n this.mLastY = Integer.MIN_VALUE;\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n if (touchMode == AbsListView.TOUCH_MODE_FLING) {\n return true;\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n let pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n pointerIndex = 0;\n this.mActivePointerId = ev.getPointerId(pointerIndex);\n }\n const y = Math.floor(ev.getY(pointerIndex));\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n if (this.startScrollIfNeeded(y)) {\n return true;\n }\n break;\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n this.recycleVelocityTracker();\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n this.onSecondaryPointerUp(ev);\n break;\n }\n }\n return false;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mMotionX = Math.floor(ev.getX(newPointerIndex));\n this.mMotionY = Math.floor(ev.getY(newPointerIndex));\n this.mMotionCorrection = 0;\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n }\n }\n addTouchables(views) {\n const count = this.getChildCount();\n const firstPosition = this.mFirstPosition;\n const adapter = this.mAdapter;\n if (adapter == null) {\n return;\n }\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (adapter.isEnabled(firstPosition + i)) {\n views.add(child);\n }\n child.addTouchables(views);\n }\n }\n reportScrollStateChange(newState) {\n if (newState != this.mLastScrollState) {\n if (this.mOnScrollListener != null) {\n this.mLastScrollState = newState;\n this.mOnScrollListener.onScrollStateChanged(this, newState);\n }\n }\n }\n setFriction(friction) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.mFlingRunnable.mScroller.setFriction(friction);\n }\n setVelocityScale(scale) {\n this.mVelocityScale = scale;\n }\n smoothScrollToPositionFromTop(position, offset, duration) {\n if (this.mPositionScroller == null) {\n this.mPositionScroller = new AbsListView.PositionScroller(this);\n }\n this.mPositionScroller.startWithOffset(position, offset, duration);\n }\n smoothScrollToPosition(position, boundPosition) {\n if (this.mPositionScroller == null) {\n this.mPositionScroller = new AbsListView.PositionScroller(this);\n }\n this.mPositionScroller.start(position, boundPosition);\n }\n smoothScrollBy(distance, duration, linear = false) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n const firstPos = this.mFirstPosition;\n const childCount = this.getChildCount();\n const lastPos = firstPos + childCount;\n const topLimit = this.getPaddingTop();\n const bottomLimit = this.getHeight() - this.getPaddingBottom();\n if (distance == 0 || this.mItemCount == 0 || childCount == 0\n || (firstPos == 0 && this.getChildAt(0).getTop() == topLimit && distance < 0)\n || (lastPos == this.mItemCount && this.getChildAt(childCount - 1).getBottom() == bottomLimit && distance > 0)) {\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n }\n else {\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.mFlingRunnable.startScroll(distance, duration, linear);\n }\n }\n smoothScrollByOffset(position) {\n let index = -1;\n if (position < 0) {\n index = this.getFirstVisiblePosition();\n }\n else if (position > 0) {\n index = this.getLastVisiblePosition();\n }\n if (index > -1) {\n let child = this.getChildAt(index - this.getFirstVisiblePosition());\n if (child != null) {\n let visibleRect = new Rect();\n if (child.getGlobalVisibleRect(visibleRect)) {\n let childRectArea = child.getWidth() * child.getHeight();\n let visibleRectArea = visibleRect.width() * visibleRect.height();\n let visibleArea = (visibleRectArea / childRectArea);\n const visibleThreshold = 0.75;\n if ((position < 0) && (visibleArea < visibleThreshold)) {\n ++index;\n }\n else if ((position > 0) && (visibleArea < visibleThreshold)) {\n --index;\n }\n }\n this.smoothScrollToPosition(Math.max(0, Math.min(this.getCount(), index + position)));\n }\n }\n }\n createScrollingCache() {\n if (this.mScrollingCacheEnabled && !this.mCachingStarted && !this.isHardwareAccelerated()) {\n this.setChildrenDrawnWithCacheEnabled(true);\n this.setChildrenDrawingCacheEnabled(true);\n this.mCachingStarted = this.mCachingActive = true;\n }\n }\n clearScrollingCache() {\n if (!this.isHardwareAccelerated()) {\n if (this.mClearScrollingCache == null) {\n this.mClearScrollingCache = (() => {\n const _this = this;\n class _Inner {\n run() {\n if (_this.mCachingStarted) {\n _this.mCachingStarted = _this.mCachingActive = false;\n _this.setChildrenDrawnWithCacheEnabled(false);\n if ((_this.mPersistentDrawingCache & AbsListView.PERSISTENT_SCROLLING_CACHE) == 0) {\n _this.setChildrenDrawingCacheEnabled(false);\n }\n if (!_this.isAlwaysDrawnWithCacheEnabled()) {\n _this.invalidate();\n }\n }\n }\n }\n return new _Inner();\n })();\n }\n this.post(this.mClearScrollingCache);\n }\n }\n scrollListBy(y) {\n this.trackMotionScroll(-y, -y);\n }\n canScrollList(direction) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return false;\n }\n const firstPosition = this.mFirstPosition;\n const listPadding = this.mListPadding;\n if (direction > 0) {\n const lastBottom = this.getChildAt(childCount - 1).getBottom();\n const lastPosition = firstPosition + childCount;\n return lastPosition < this.mItemCount || lastBottom > this.getHeight() - listPadding.bottom;\n }\n else {\n const firstTop = this.getChildAt(0).getTop();\n return firstPosition > 0 || firstTop < listPadding.top;\n }\n }\n trackMotionScroll(deltaY, incrementalDeltaY) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return true;\n }\n const firstTop = this.getChildAt(0).getTop();\n const lastBottom = this.getChildAt(childCount - 1).getBottom();\n const listPadding = this.mListPadding;\n let effectivePaddingTop = 0;\n let effectivePaddingBottom = 0;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n effectivePaddingTop = listPadding.top;\n effectivePaddingBottom = listPadding.bottom;\n }\n const spaceAbove = effectivePaddingTop - firstTop;\n const end = this.getHeight() - effectivePaddingBottom;\n const spaceBelow = lastBottom - end;\n const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n if (deltaY < 0) {\n deltaY = Math.max(-(height - 1), deltaY);\n }\n else {\n deltaY = Math.min(height - 1, deltaY);\n }\n if (incrementalDeltaY < 0) {\n incrementalDeltaY = Math.max(-(height - 1), incrementalDeltaY);\n }\n else {\n incrementalDeltaY = Math.min(height - 1, incrementalDeltaY);\n }\n const firstPosition = this.mFirstPosition;\n if (firstPosition == 0) {\n this.mFirstPositionDistanceGuess = firstTop - listPadding.top;\n }\n else {\n this.mFirstPositionDistanceGuess += incrementalDeltaY;\n }\n if (firstPosition + childCount == this.mItemCount) {\n this.mLastPositionDistanceGuess = lastBottom + listPadding.bottom;\n }\n else {\n this.mLastPositionDistanceGuess += incrementalDeltaY;\n }\n const cannotScrollDown = (firstPosition == 0 && firstTop >= listPadding.top && incrementalDeltaY >= 0);\n const cannotScrollUp = (firstPosition + childCount == this.mItemCount && lastBottom <= this.getHeight() - listPadding.bottom && incrementalDeltaY <= 0);\n if (cannotScrollDown || cannotScrollUp) {\n return incrementalDeltaY != 0;\n }\n const down = incrementalDeltaY < 0;\n const inTouchMode = this.isInTouchMode();\n if (inTouchMode) {\n this.hideSelector();\n }\n const headerViewsCount = this.getHeaderViewsCount();\n const footerViewsStart = this.mItemCount - this.getFooterViewsCount();\n let start = 0;\n let count = 0;\n if (down) {\n let top = -incrementalDeltaY;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n top += listPadding.top;\n }\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getBottom() >= top) {\n break;\n }\n else {\n count++;\n let position = firstPosition + i;\n if (position >= headerViewsCount && position < footerViewsStart) {\n this.mRecycler.addScrapView(child, position);\n }\n }\n }\n }\n else {\n let bottom = this.getHeight() - incrementalDeltaY;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n bottom -= listPadding.bottom;\n }\n for (let i = childCount - 1; i >= 0; i--) {\n const child = this.getChildAt(i);\n if (child.getTop() <= bottom) {\n break;\n }\n else {\n start = i;\n count++;\n let position = firstPosition + i;\n if (position >= headerViewsCount && position < footerViewsStart) {\n this.mRecycler.addScrapView(child, position);\n }\n }\n }\n }\n this.mMotionViewNewTop = this.mMotionViewOriginalTop + deltaY;\n this.mBlockLayoutRequests = true;\n if (count > 0) {\n this.detachViewsFromParent(start, count);\n this.mRecycler.removeSkippedScrap();\n }\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n this.offsetChildrenTopAndBottom(incrementalDeltaY);\n if (down) {\n this.mFirstPosition += count;\n }\n const absIncrementalDeltaY = Math.abs(incrementalDeltaY);\n if (spaceAbove < absIncrementalDeltaY || spaceBelow < absIncrementalDeltaY) {\n this.fillGap(down);\n }\n if (!inTouchMode && this.mSelectedPosition != AbsListView.INVALID_POSITION) {\n const childIndex = this.mSelectedPosition - this.mFirstPosition;\n if (childIndex >= 0 && childIndex < this.getChildCount()) {\n this.positionSelector(this.mSelectedPosition, this.getChildAt(childIndex));\n }\n }\n else if (this.mSelectorPosition != AbsListView.INVALID_POSITION) {\n const childIndex = this.mSelectorPosition - this.mFirstPosition;\n if (childIndex >= 0 && childIndex < this.getChildCount()) {\n this.positionSelector(AbsListView.INVALID_POSITION, this.getChildAt(childIndex));\n }\n }\n else {\n this.mSelectorRect.setEmpty();\n }\n this.mBlockLayoutRequests = false;\n this.invokeOnItemScrollListener();\n return false;\n }\n getHeaderViewsCount() {\n return 0;\n }\n getFooterViewsCount() {\n return 0;\n }\n hideSelector() {\n if (this.mSelectedPosition != AbsListView.INVALID_POSITION) {\n if (this.mLayoutMode != AbsListView.LAYOUT_SPECIFIC) {\n this.mResurrectToPosition = this.mSelectedPosition;\n }\n if (this.mNextSelectedPosition >= 0 && this.mNextSelectedPosition != this.mSelectedPosition) {\n this.mResurrectToPosition = this.mNextSelectedPosition;\n }\n this.setSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.mSelectedTop = 0;\n }\n }\n reconcileSelectedPosition() {\n let position = this.mSelectedPosition;\n if (position < 0) {\n position = this.mResurrectToPosition;\n }\n position = Math.max(0, position);\n position = Math.min(position, this.mItemCount - 1);\n return position;\n }\n findClosestMotionRow(y) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return AbsListView.INVALID_POSITION;\n }\n const motionRow = this.findMotionRow(y);\n return motionRow != AbsListView.INVALID_POSITION ? motionRow : this.mFirstPosition + childCount - 1;\n }\n invalidateViews() {\n this.mDataChanged = true;\n this.rememberSyncState();\n this.requestLayout();\n this.invalidate();\n }\n resurrectSelectionIfNeeded() {\n if (this.mSelectedPosition < 0 && this.resurrectSelection()) {\n this.updateSelectorState();\n return true;\n }\n return false;\n }\n resurrectSelection() {\n const childCount = this.getChildCount();\n if (childCount <= 0) {\n return false;\n }\n let selectedTop = 0;\n let selectedPos;\n let childrenTop = this.mListPadding.top;\n let childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n const firstPosition = this.mFirstPosition;\n const toPosition = this.mResurrectToPosition;\n let down = true;\n if (toPosition >= firstPosition && toPosition < firstPosition + childCount) {\n selectedPos = toPosition;\n const selected = this.getChildAt(selectedPos - this.mFirstPosition);\n selectedTop = selected.getTop();\n let selectedBottom = selected.getBottom();\n if (selectedTop < childrenTop) {\n selectedTop = childrenTop + this.getVerticalFadingEdgeLength();\n }\n else if (selectedBottom > childrenBottom) {\n selectedTop = childrenBottom - selected.getMeasuredHeight() - this.getVerticalFadingEdgeLength();\n }\n }\n else {\n if (toPosition < firstPosition) {\n selectedPos = firstPosition;\n for (let i = 0; i < childCount; i++) {\n const v = this.getChildAt(i);\n const top = v.getTop();\n if (i == 0) {\n selectedTop = top;\n if (firstPosition > 0 || top < childrenTop) {\n childrenTop += this.getVerticalFadingEdgeLength();\n }\n }\n if (top >= childrenTop) {\n selectedPos = firstPosition + i;\n selectedTop = top;\n break;\n }\n }\n }\n else {\n const itemCount = this.mItemCount;\n down = false;\n selectedPos = firstPosition + childCount - 1;\n for (let i = childCount - 1; i >= 0; i--) {\n const v = this.getChildAt(i);\n const top = v.getTop();\n const bottom = v.getBottom();\n if (i == childCount - 1) {\n selectedTop = top;\n if (firstPosition + childCount < itemCount || bottom > childrenBottom) {\n childrenBottom -= this.getVerticalFadingEdgeLength();\n }\n }\n if (bottom <= childrenBottom) {\n selectedPos = firstPosition + i;\n selectedTop = top;\n break;\n }\n }\n }\n }\n this.mResurrectToPosition = AbsListView.INVALID_POSITION;\n this.removeCallbacks(this.mFlingRunnable);\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.clearScrollingCache();\n this.mSpecificTop = selectedTop;\n selectedPos = this.lookForSelectablePosition(selectedPos, down);\n if (selectedPos >= firstPosition && selectedPos <= this.getLastVisiblePosition()) {\n this.mLayoutMode = AbsListView.LAYOUT_SPECIFIC;\n this.updateSelectorState();\n this.setSelectionInt(selectedPos);\n this.invokeOnItemScrollListener();\n }\n else {\n selectedPos = AbsListView.INVALID_POSITION;\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n return selectedPos >= 0;\n }\n confirmCheckedPositionsById() {\n this.mCheckStates.clear();\n let checkedCountChanged = false;\n for (let checkedIndex = 0; checkedIndex < this.mCheckedIdStates.size(); checkedIndex++) {\n const id = this.mCheckedIdStates.keyAt(checkedIndex);\n const lastPos = this.mCheckedIdStates.valueAt(checkedIndex);\n const lastPosId = this.mAdapter.getItemId(lastPos);\n if (id != lastPosId) {\n const start = Math.max(0, lastPos - AbsListView.CHECK_POSITION_SEARCH_DISTANCE);\n const end = Math.min(lastPos + AbsListView.CHECK_POSITION_SEARCH_DISTANCE, this.mItemCount);\n let found = false;\n for (let searchPos = start; searchPos < end; searchPos++) {\n const searchId = this.mAdapter.getItemId(searchPos);\n if (id == searchId) {\n found = true;\n this.mCheckStates.put(searchPos, true);\n this.mCheckedIdStates.setValueAt(checkedIndex, searchPos);\n break;\n }\n }\n if (!found) {\n this.mCheckedIdStates.delete(id);\n checkedIndex--;\n this.mCheckedItemCount--;\n checkedCountChanged = true;\n }\n }\n else {\n this.mCheckStates.put(lastPos, true);\n }\n }\n if (checkedCountChanged && this.mChoiceActionMode != null) {\n this.mChoiceActionMode.invalidate();\n }\n }\n handleDataChanged() {\n let count = this.mItemCount;\n let lastHandledItemCount = this.mLastHandledItemCount;\n this.mLastHandledItemCount = this.mItemCount;\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapter != null && this.mAdapter.hasStableIds()) {\n this.confirmCheckedPositionsById();\n }\n this.mRecycler.clearTransientStateViews();\n if (count > 0) {\n let newPos;\n let selectablePos;\n if (this.mNeedSync) {\n this.mNeedSync = false;\n this.mPendingSync = null;\n if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL) {\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n else if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) {\n if (this.mForceTranscriptScroll) {\n this.mForceTranscriptScroll = false;\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n const childCount = this.getChildCount();\n const listBottom = this.getHeight() - this.getPaddingBottom();\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;\n if (this.mFirstPosition + childCount >= lastHandledItemCount && lastBottom <= listBottom) {\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n this.awakenScrollBars();\n }\n switch (this.mSyncMode) {\n case AbsListView.SYNC_SELECTED_POSITION:\n if (this.isInTouchMode()) {\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1);\n return;\n }\n else {\n newPos = this.findSyncPosition();\n if (newPos >= 0) {\n selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos == newPos) {\n this.mSyncPosition = newPos;\n if (this.mSyncHeight == this.getHeight()) {\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n }\n else {\n this.mLayoutMode = AbsListView.LAYOUT_SET_SELECTION;\n }\n this.setNextSelectedPositionInt(newPos);\n return;\n }\n }\n }\n break;\n case AbsListView.SYNC_FIRST_POSITION:\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1);\n return;\n }\n }\n if (!this.isInTouchMode()) {\n newPos = this.getSelectedItemPosition();\n if (newPos >= count) {\n newPos = count - 1;\n }\n if (newPos < 0) {\n newPos = 0;\n }\n selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n return;\n }\n else {\n selectablePos = this.lookForSelectablePosition(newPos, false);\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n return;\n }\n }\n }\n else {\n if (this.mResurrectToPosition >= 0) {\n return;\n }\n }\n }\n this.mLayoutMode = this.mStackFromBottom ? AbsListView.LAYOUT_FORCE_BOTTOM : AbsListView.LAYOUT_FORCE_TOP;\n this.mSelectedPosition = AbsListView.INVALID_POSITION;\n this.mSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.mNextSelectedPosition = AbsListView.INVALID_POSITION;\n this.mNextSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.mNeedSync = false;\n this.mPendingSync = null;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.checkSelectionChanged();\n }\n onDisplayHint(hint) {\n super.onDisplayHint(hint);\n this.mPopupHidden = hint == AbsListView.INVISIBLE;\n }\n dismissPopup() {\n }\n showPopup() {\n }\n positionPopup() {\n }\n static getDistance(source, dest, direction) {\n let sX, sY;\n let dX, dY;\n switch (direction) {\n case View.FOCUS_RIGHT:\n sX = source.right;\n sY = source.top + source.height() / 2;\n dX = dest.left;\n dY = dest.top + dest.height() / 2;\n break;\n case View.FOCUS_DOWN:\n sX = source.left + source.width() / 2;\n sY = source.bottom;\n dX = dest.left + dest.width() / 2;\n dY = dest.top;\n break;\n case View.FOCUS_LEFT:\n sX = source.left;\n sY = source.top + source.height() / 2;\n dX = dest.right;\n dY = dest.top + dest.height() / 2;\n break;\n case View.FOCUS_UP:\n sX = source.left + source.width() / 2;\n sY = source.top;\n dX = dest.left + dest.width() / 2;\n dY = dest.bottom;\n break;\n case View.FOCUS_FORWARD:\n case View.FOCUS_BACKWARD:\n sX = source.right + source.width() / 2;\n sY = source.top + source.height() / 2;\n dX = dest.left + dest.width() / 2;\n dY = dest.top + dest.height() / 2;\n break;\n default:\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, \" + \"FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n let deltaX = dX - sX;\n let deltaY = dY - sY;\n return deltaY * deltaY + deltaX * deltaX;\n }\n isInFilterMode() {\n return this.mFiltered;\n }\n hasTextFilter() {\n return this.mFiltered;\n }\n onGlobalLayout() {\n if (this.isShown()) {\n }\n else {\n }\n }\n generateDefaultLayoutParams() {\n return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0);\n }\n generateLayoutParams(p) {\n return new AbsListView.LayoutParams(p);\n }\n checkLayoutParams(p) {\n return p instanceof AbsListView.LayoutParams;\n }\n setTranscriptMode(mode) {\n this.mTranscriptMode = mode;\n }\n getTranscriptMode() {\n return this.mTranscriptMode;\n }\n getSolidColor() {\n return this.mCacheColorHint;\n }\n setCacheColorHint(color) {\n if (color != this.mCacheColorHint) {\n this.mCacheColorHint = color;\n let count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n this.getChildAt(i).setDrawingCacheBackgroundColor(color);\n }\n this.mRecycler.setCacheColorHint(color);\n }\n }\n getCacheColorHint() {\n return this.mCacheColorHint;\n }\n reclaimViews(views) {\n let childCount = this.getChildCount();\n let listener = this.mRecycler.mRecyclerListener;\n for (let i = 0; i < childCount; i++) {\n let child = this.getChildAt(i);\n let lp = child.getLayoutParams();\n if (lp != null && this.mRecycler.shouldRecycleViewType(lp.viewType)) {\n views.add(child);\n if (listener != null) {\n listener.onMovedToScrapHeap(child);\n }\n }\n }\n this.mRecycler.reclaimScrapViews(views);\n this.removeAllViewsInLayout();\n }\n finishGlows() {\n }\n setVisibleRangeHint(start, end) {\n }\n setRecyclerListener(listener) {\n this.mRecycler.mRecyclerListener = listener;\n }\n static retrieveFromScrap(scrapViews, position) {\n let size = scrapViews.size();\n if (size > 0) {\n for (let i = 0; i < size; i++) {\n let view = scrapViews.get(i);\n if (view.getLayoutParams().scrappedFromPosition == position) {\n scrapViews.remove(i);\n return view;\n }\n }\n return scrapViews.remove(size - 1);\n }\n else {\n return null;\n }\n }\n }\n AbsListView.TAG_AbsListView = \"AbsListView\";\n AbsListView.TRANSCRIPT_MODE_DISABLED = 0;\n AbsListView.TRANSCRIPT_MODE_NORMAL = 1;\n AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL = 2;\n AbsListView.TOUCH_MODE_REST = -1;\n AbsListView.TOUCH_MODE_DOWN = 0;\n AbsListView.TOUCH_MODE_TAP = 1;\n AbsListView.TOUCH_MODE_DONE_WAITING = 2;\n AbsListView.TOUCH_MODE_SCROLL = 3;\n AbsListView.TOUCH_MODE_FLING = 4;\n AbsListView.TOUCH_MODE_OVERSCROLL = 5;\n AbsListView.TOUCH_MODE_OVERFLING = 6;\n AbsListView.LAYOUT_NORMAL = 0;\n AbsListView.LAYOUT_FORCE_TOP = 1;\n AbsListView.LAYOUT_SET_SELECTION = 2;\n AbsListView.LAYOUT_FORCE_BOTTOM = 3;\n AbsListView.LAYOUT_SPECIFIC = 4;\n AbsListView.LAYOUT_SYNC = 5;\n AbsListView.LAYOUT_MOVE_SELECTION = 6;\n AbsListView.CHOICE_MODE_NONE = 0;\n AbsListView.CHOICE_MODE_SINGLE = 1;\n AbsListView.CHOICE_MODE_MULTIPLE = 2;\n AbsListView.CHOICE_MODE_MULTIPLE_MODAL = 3;\n AbsListView.OVERSCROLL_LIMIT_DIVISOR = 3;\n AbsListView.CHECK_POSITION_SEARCH_DISTANCE = 20;\n AbsListView.TOUCH_MODE_UNKNOWN = -1;\n AbsListView.TOUCH_MODE_ON = 0;\n AbsListView.TOUCH_MODE_OFF = 1;\n AbsListView.PROFILE_SCROLLING = false;\n AbsListView.PROFILE_FLINGING = false;\n AbsListView.INVALID_POINTER = -1;\n AbsListView.sLinearInterpolator = new LinearInterpolator();\n widget.AbsListView = AbsListView;\n (function (AbsListView) {\n var OnScrollListener;\n (function (OnScrollListener) {\n OnScrollListener.SCROLL_STATE_IDLE = 0;\n OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1;\n OnScrollListener.SCROLL_STATE_FLING = 2;\n })(OnScrollListener = AbsListView.OnScrollListener || (AbsListView.OnScrollListener = {}));\n class WindowRunnnable {\n constructor(arg) {\n this._AbsListView_this = arg;\n }\n rememberWindowAttachCount() {\n this.mOriginalAttachCount = this._AbsListView_this.getWindowAttachCount();\n }\n sameWindow() {\n return this._AbsListView_this.getWindowAttachCount() == this.mOriginalAttachCount;\n }\n }\n AbsListView.WindowRunnnable = WindowRunnnable;\n class PerformClick extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this.mClickMotionPosition = 0;\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.mDataChanged)\n return;\n const adapter = this._AbsListView_this.mAdapter;\n const motionPosition = this.mClickMotionPosition;\n if (adapter != null && this._AbsListView_this.mItemCount > 0 && motionPosition != AbsListView.INVALID_POSITION\n && motionPosition < adapter.getCount() && this.sameWindow()) {\n const view = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition);\n if (view != null) {\n this._AbsListView_this.performItemClick(view, motionPosition, adapter.getItemId(motionPosition));\n }\n }\n }\n }\n AbsListView.PerformClick = PerformClick;\n class CheckForLongPress extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n run() {\n const motionPosition = this._AbsListView_this.mMotionPosition;\n const child = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition);\n if (child != null) {\n const longPressPosition = this._AbsListView_this.mMotionPosition;\n const longPressId = this._AbsListView_this.mAdapter.getItemId(this._AbsListView_this.mMotionPosition);\n let handled = false;\n if (this.sameWindow() && !this._AbsListView_this.mDataChanged) {\n handled = this._AbsListView_this.performLongPress(child, longPressPosition, longPressId);\n }\n if (handled) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.setPressed(false);\n child.setPressed(false);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n }\n }\n AbsListView.CheckForLongPress = CheckForLongPress;\n class CheckForKeyLongPress extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.isPressed() && this._AbsListView_this.mSelectedPosition >= 0) {\n let index = this._AbsListView_this.mSelectedPosition - this._AbsListView_this.mFirstPosition;\n let v = this._AbsListView_this.getChildAt(index);\n if (!this._AbsListView_this.mDataChanged) {\n let handled = false;\n if (this.sameWindow()) {\n handled = this._AbsListView_this.performLongPress(v, this._AbsListView_this.mSelectedPosition, this._AbsListView_this.mSelectedRowId);\n }\n if (handled) {\n this._AbsListView_this.setPressed(false);\n v.setPressed(false);\n }\n }\n else {\n this._AbsListView_this.setPressed(false);\n if (v != null)\n v.setPressed(false);\n }\n }\n }\n }\n AbsListView.CheckForKeyLongPress = CheckForKeyLongPress;\n class CheckForTap {\n constructor(arg) {\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.mTouchMode == AbsListView.TOUCH_MODE_DOWN) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_TAP;\n const child = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition);\n if (child != null && !child.hasFocusable()) {\n this._AbsListView_this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n if (!this._AbsListView_this.mDataChanged) {\n child.setPressed(true);\n this._AbsListView_this.setPressed(true);\n this._AbsListView_this.layoutChildren();\n this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition, child);\n this._AbsListView_this.refreshDrawableState();\n const longPressTimeout = ViewConfiguration.getLongPressTimeout();\n const longClickable = this._AbsListView_this.isLongClickable();\n if (this._AbsListView_this.mSelector != null) {\n let d = this._AbsListView_this.mSelector.getCurrent();\n }\n if (longClickable) {\n if (this._AbsListView_this.mPendingCheckForLongPress_List == null) {\n this._AbsListView_this.mPendingCheckForLongPress_List = new AbsListView.CheckForLongPress(this._AbsListView_this);\n }\n this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount();\n this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List, longPressTimeout);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n }\n }\n }\n AbsListView.CheckForTap = CheckForTap;\n class FlingRunnable {\n constructor(arg) {\n this.mLastFlingY = 0;\n this.mCheckFlywheel = (() => {\n const _this = this;\n class _Inner {\n run() {\n const activeId = _this._AbsListView_this.mActivePointerId;\n const vt = _this._AbsListView_this.mVelocityTracker;\n const scroller = _this.mScroller;\n if (vt == null || activeId == AbsListView.INVALID_POINTER) {\n return;\n }\n vt.computeCurrentVelocity(1000, _this._AbsListView_this.mMaximumVelocity);\n const yvel = -vt.getYVelocity(activeId);\n if (Math.abs(yvel) >= _this._AbsListView_this.mMinimumVelocity && scroller.isScrollingInDirection(0, yvel)) {\n _this._AbsListView_this.postDelayed(_this, FlingRunnable.FLYWHEEL_TIMEOUT);\n }\n else {\n _this.endFling();\n _this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n _this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n }\n }\n }\n return new _Inner();\n })();\n this._AbsListView_this = arg;\n this.mScroller = new OverScroller();\n }\n start(initialVelocity) {\n let initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0;\n this.mLastFlingY = initialY;\n this.mScroller.setInterpolator(null);\n this.mScroller.fling(0, initialY, 0, initialVelocity, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING;\n this._AbsListView_this.postOnAnimation(this);\n if (AbsListView.PROFILE_FLINGING) {\n if (!this._AbsListView_this.mFlingProfilingStarted) {\n this._AbsListView_this.mFlingProfilingStarted = true;\n }\n }\n }\n startSpringback() {\n if (this.mScroller.springBack(0, this._AbsListView_this.mScrollY, 0, 0, 0, 0)) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);\n }\n }\n startOverfling(initialVelocity) {\n this.mScroller.setInterpolator(null);\n let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE;\n if (this._AbsListView_this.mScrollY < 0)\n minY = 0;\n else if (this._AbsListView_this.mScrollY > 0)\n maxY = 0;\n this.mScroller.fling(0, this._AbsListView_this.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, this._AbsListView_this.getHeight());\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n edgeReached(delta) {\n this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY, 0, this._AbsListView_this.mOverflingDistance);\n const overscrollMode = this._AbsListView_this.getOverScrollMode();\n if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this._AbsListView_this.contentFits())) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n if (this._AbsListView_this.mPositionScroller != null) {\n this._AbsListView_this.mPositionScroller.stop();\n }\n }\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n startScroll(distance, duration, linear) {\n let initialY = distance < 0 ? Integer.MAX_VALUE : 0;\n this.mLastFlingY = initialY;\n this.mScroller.setInterpolator(linear ? AbsListView.sLinearInterpolator : null);\n this.mScroller.startScroll(0, initialY, 0, distance, duration);\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING;\n this._AbsListView_this.postOnAnimation(this);\n }\n endFling() {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.removeCallbacks(this);\n this._AbsListView_this.removeCallbacks(this.mCheckFlywheel);\n this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);\n this._AbsListView_this.clearScrollingCache();\n this.mScroller.abortAnimation();\n }\n flywheelTouch() {\n this._AbsListView_this.postDelayed(this.mCheckFlywheel, FlingRunnable.FLYWHEEL_TIMEOUT);\n }\n run() {\n switch (this._AbsListView_this.mTouchMode) {\n default:\n this.endFling();\n return;\n case AbsListView.TOUCH_MODE_SCROLL:\n if (this.mScroller.isFinished()) {\n return;\n }\n case AbsListView.TOUCH_MODE_FLING:\n {\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.layoutChildren();\n }\n if (this._AbsListView_this.mItemCount == 0 || this._AbsListView_this.getChildCount() == 0) {\n this.endFling();\n return;\n }\n const scroller = this.mScroller;\n let more = scroller.computeScrollOffset();\n const y = scroller.getCurrY();\n let delta = this.mLastFlingY - y;\n if (delta > 0) {\n this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition;\n const firstView = this._AbsListView_this.getChildAt(0);\n this._AbsListView_this.mMotionViewOriginalTop = firstView.getTop();\n delta = Math.min(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1, delta);\n }\n else {\n let offsetToLast = this._AbsListView_this.getChildCount() - 1;\n this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition + offsetToLast;\n const lastView = this._AbsListView_this.getChildAt(offsetToLast);\n this._AbsListView_this.mMotionViewOriginalTop = lastView.getTop();\n delta = Math.max(-(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1), delta);\n }\n let motionView = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition);\n let oldTop = 0;\n if (motionView != null) {\n oldTop = motionView.getTop();\n }\n const atEdge = this._AbsListView_this.trackMotionScroll(delta, delta);\n const atEnd = atEdge && (delta != 0);\n if (atEnd) {\n if (motionView != null) {\n let overshoot = -(delta - (motionView.getTop() - oldTop));\n this._AbsListView_this.overScrollBy(0, overshoot, 0, this._AbsListView_this.mScrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false);\n }\n if (more) {\n this.edgeReached(delta);\n }\n break;\n }\n if (more && !atEnd) {\n if (atEdge)\n this._AbsListView_this.invalidate();\n this.mLastFlingY = y;\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n this.endFling();\n if (AbsListView.PROFILE_FLINGING) {\n if (this._AbsListView_this.mFlingProfilingStarted) {\n this._AbsListView_this.mFlingProfilingStarted = false;\n }\n }\n }\n break;\n }\n case AbsListView.TOUCH_MODE_OVERFLING:\n {\n const scroller = this.mScroller;\n if (scroller.computeScrollOffset()) {\n const scrollY = this._AbsListView_this.mScrollY;\n const currY = scroller.getCurrY();\n let deltaY = currY - scrollY;\n const crossDown = scrollY <= 0 && currY > 0;\n const crossUp = scrollY >= 0 && currY < 0;\n if (crossDown || crossUp) {\n let velocity = Math.floor(scroller.getCurrVelocity());\n if (crossUp)\n velocity = -velocity;\n scroller.abortAnimation();\n this.start(velocity);\n deltaY = -scrollY;\n }\n if (this._AbsListView_this.overScrollBy(0, deltaY, 0, scrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false)) {\n this.startSpringback();\n }\n else {\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n }\n else {\n this.endFling();\n }\n break;\n }\n }\n }\n }\n FlingRunnable.FLYWHEEL_TIMEOUT = 40;\n AbsListView.FlingRunnable = FlingRunnable;\n class PositionScroller {\n constructor(arg) {\n this.mMode = 0;\n this.mTargetPos = 0;\n this.mBoundPos = 0;\n this.mLastSeenPos = 0;\n this.mScrollDuration = 0;\n this.mExtraScroll = 0;\n this.mOffsetFromTop = 0;\n this._AbsListView_this = arg;\n this.mExtraScroll = ViewConfiguration.get().getScaledFadingEdgeLength();\n }\n start(position, boundPosition) {\n if (boundPosition == null)\n this._start_1(position);\n else\n this._start_2(position, boundPosition);\n }\n _start_1(position) {\n this.stop();\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.start(position);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n if (clampedPosition < firstPos) {\n viewTravelCount = firstPos - clampedPosition + 1;\n this.mMode = PositionScroller.MOVE_UP_POS;\n }\n else if (clampedPosition > lastPos) {\n viewTravelCount = clampedPosition - lastPos + 1;\n this.mMode = PositionScroller.MOVE_DOWN_POS;\n }\n else {\n this.scrollToVisible(clampedPosition, AbsListView.INVALID_POSITION, PositionScroller.SCROLL_DURATION);\n return;\n }\n if (viewTravelCount > 0) {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount;\n }\n else {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION;\n }\n this.mTargetPos = clampedPosition;\n this.mBoundPos = AbsListView.INVALID_POSITION;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n _start_2(position, boundPosition) {\n this.stop();\n if (boundPosition == AbsListView.INVALID_POSITION) {\n this.start(position);\n return;\n }\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.start(position, boundPosition);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n if (clampedPosition < firstPos) {\n const boundPosFromLast = lastPos - boundPosition;\n if (boundPosFromLast < 1) {\n return;\n }\n const posTravel = firstPos - clampedPosition + 1;\n const boundTravel = boundPosFromLast - 1;\n if (boundTravel < posTravel) {\n viewTravelCount = boundTravel;\n this.mMode = PositionScroller.MOVE_UP_BOUND;\n }\n else {\n viewTravelCount = posTravel;\n this.mMode = PositionScroller.MOVE_UP_POS;\n }\n }\n else if (clampedPosition > lastPos) {\n const boundPosFromFirst = boundPosition - firstPos;\n if (boundPosFromFirst < 1) {\n return;\n }\n const posTravel = clampedPosition - lastPos + 1;\n const boundTravel = boundPosFromFirst - 1;\n if (boundTravel < posTravel) {\n viewTravelCount = boundTravel;\n this.mMode = PositionScroller.MOVE_DOWN_BOUND;\n }\n else {\n viewTravelCount = posTravel;\n this.mMode = PositionScroller.MOVE_DOWN_POS;\n }\n }\n else {\n this.scrollToVisible(clampedPosition, boundPosition, PositionScroller.SCROLL_DURATION);\n return;\n }\n if (viewTravelCount > 0) {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount;\n }\n else {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION;\n }\n this.mTargetPos = clampedPosition;\n this.mBoundPos = boundPosition;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n startWithOffset(position, offset, duration = PositionScroller.SCROLL_DURATION) {\n this.stop();\n if (this._AbsListView_this.mDataChanged) {\n const postOffset = offset;\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.startWithOffset(position, postOffset, duration);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n offset += this._AbsListView_this.getPaddingTop();\n this.mTargetPos = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n this.mOffsetFromTop = offset;\n this.mBoundPos = AbsListView.INVALID_POSITION;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this.mMode = PositionScroller.MOVE_OFFSET;\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n if (this.mTargetPos < firstPos) {\n viewTravelCount = firstPos - this.mTargetPos;\n }\n else if (this.mTargetPos > lastPos) {\n viewTravelCount = this.mTargetPos - lastPos;\n }\n else {\n const targetTop = this._AbsListView_this.getChildAt(this.mTargetPos - firstPos).getTop();\n this._AbsListView_this.smoothScrollBy(targetTop - offset, duration, true);\n return;\n }\n const screenTravelCount = viewTravelCount / childCount;\n this.mScrollDuration = screenTravelCount < 1 ? duration : Math.floor((duration / screenTravelCount));\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n scrollToVisible(targetPos, boundPos, duration) {\n const firstPos = this._AbsListView_this.mFirstPosition;\n const childCount = this._AbsListView_this.getChildCount();\n const lastPos = firstPos + childCount - 1;\n const paddedTop = this._AbsListView_this.mListPadding.top;\n const paddedBottom = this._AbsListView_this.getHeight() - this._AbsListView_this.mListPadding.bottom;\n if (targetPos < firstPos || targetPos > lastPos) {\n Log.w(AbsListView.TAG_AbsListView, \"scrollToVisible called with targetPos \" + targetPos + \" not visible [\" + firstPos + \", \" + lastPos + \"]\");\n }\n if (boundPos < firstPos || boundPos > lastPos) {\n boundPos = AbsListView.INVALID_POSITION;\n }\n const targetChild = this._AbsListView_this.getChildAt(targetPos - firstPos);\n const targetTop = targetChild.getTop();\n const targetBottom = targetChild.getBottom();\n let scrollBy = 0;\n if (targetBottom > paddedBottom) {\n scrollBy = targetBottom - paddedBottom;\n }\n if (targetTop < paddedTop) {\n scrollBy = targetTop - paddedTop;\n }\n if (scrollBy == 0) {\n return;\n }\n if (boundPos >= 0) {\n const boundChild = this._AbsListView_this.getChildAt(boundPos - firstPos);\n const boundTop = boundChild.getTop();\n const boundBottom = boundChild.getBottom();\n const absScroll = Math.abs(scrollBy);\n if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) {\n scrollBy = Math.max(0, boundBottom - paddedBottom);\n }\n else if (scrollBy > 0 && boundTop - absScroll < paddedTop) {\n scrollBy = Math.min(0, boundTop - paddedTop);\n }\n }\n this._AbsListView_this.smoothScrollBy(scrollBy, duration);\n }\n stop() {\n this._AbsListView_this.removeCallbacks(this);\n }\n run() {\n const listHeight = this._AbsListView_this.getHeight();\n const firstPos = this._AbsListView_this.mFirstPosition;\n switch (this.mMode) {\n case PositionScroller.MOVE_DOWN_POS:\n {\n const lastViewIndex = this._AbsListView_this.getChildCount() - 1;\n const lastPos = firstPos + lastViewIndex;\n if (lastViewIndex < 0) {\n return;\n }\n if (lastPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const lastView = this._AbsListView_this.getChildAt(lastViewIndex);\n const lastViewHeight = lastView.getHeight();\n const lastViewTop = lastView.getTop();\n const lastViewPixelsShowing = listHeight - lastViewTop;\n const extraScroll = lastPos < this._AbsListView_this.mItemCount - 1 ? Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll) : this._AbsListView_this.mListPadding.bottom;\n const scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll;\n this._AbsListView_this.smoothScrollBy(scrollBy, this.mScrollDuration, true);\n this.mLastSeenPos = lastPos;\n if (lastPos < this.mTargetPos) {\n this._AbsListView_this.postOnAnimation(this);\n }\n break;\n }\n case PositionScroller.MOVE_DOWN_BOUND:\n {\n const nextViewIndex = 1;\n const childCount = this._AbsListView_this.getChildCount();\n if (firstPos == this.mBoundPos || childCount <= nextViewIndex || firstPos + childCount >= this._AbsListView_this.mItemCount) {\n return;\n }\n const nextPos = firstPos + nextViewIndex;\n if (nextPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const nextView = this._AbsListView_this.getChildAt(nextViewIndex);\n const nextViewHeight = nextView.getHeight();\n const nextViewTop = nextView.getTop();\n const extraScroll = Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll);\n if (nextPos < this.mBoundPos) {\n this._AbsListView_this.smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll), this.mScrollDuration, true);\n this.mLastSeenPos = nextPos;\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n if (nextViewTop > extraScroll) {\n this._AbsListView_this.smoothScrollBy(nextViewTop - extraScroll, this.mScrollDuration, true);\n }\n }\n break;\n }\n case PositionScroller.MOVE_UP_POS:\n {\n if (firstPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const firstView = this._AbsListView_this.getChildAt(0);\n if (firstView == null) {\n return;\n }\n const firstViewTop = firstView.getTop();\n const extraScroll = firstPos > 0 ? Math.max(this.mExtraScroll, this._AbsListView_this.mListPadding.top) : this._AbsListView_this.mListPadding.top;\n this._AbsListView_this.smoothScrollBy(firstViewTop - extraScroll, this.mScrollDuration, true);\n this.mLastSeenPos = firstPos;\n if (firstPos > this.mTargetPos) {\n this._AbsListView_this.postOnAnimation(this);\n }\n break;\n }\n case PositionScroller.MOVE_UP_BOUND:\n {\n const lastViewIndex = this._AbsListView_this.getChildCount() - 2;\n if (lastViewIndex < 0) {\n return;\n }\n const lastPos = firstPos + lastViewIndex;\n if (lastPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const lastView = this._AbsListView_this.getChildAt(lastViewIndex);\n const lastViewHeight = lastView.getHeight();\n const lastViewTop = lastView.getTop();\n const lastViewPixelsShowing = listHeight - lastViewTop;\n const extraScroll = Math.max(this._AbsListView_this.mListPadding.top, this.mExtraScroll);\n this.mLastSeenPos = lastPos;\n if (lastPos > this.mBoundPos) {\n this._AbsListView_this.smoothScrollBy(-(lastViewPixelsShowing - extraScroll), this.mScrollDuration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n const bottom = listHeight - extraScroll;\n const lastViewBottom = lastViewTop + lastViewHeight;\n if (bottom > lastViewBottom) {\n this._AbsListView_this.smoothScrollBy(-(bottom - lastViewBottom), this.mScrollDuration, true);\n }\n }\n break;\n }\n case PositionScroller.MOVE_OFFSET:\n {\n if (this.mLastSeenPos == firstPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n this.mLastSeenPos = firstPos;\n const childCount = this._AbsListView_this.getChildCount();\n const position = this.mTargetPos;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount = 0;\n if (position < firstPos) {\n viewTravelCount = firstPos - position + 1;\n }\n else if (position > lastPos) {\n viewTravelCount = position - lastPos;\n }\n const screenTravelCount = viewTravelCount / childCount;\n const modifier = Math.min(Math.abs(screenTravelCount), 1.);\n if (position < firstPos) {\n const distance = Math.floor((-this._AbsListView_this.getHeight() * modifier));\n const duration = Math.floor((this.mScrollDuration * modifier));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else if (position > lastPos) {\n const distance = Math.floor((this._AbsListView_this.getHeight() * modifier));\n const duration = Math.floor((this.mScrollDuration * modifier));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n const targetTop = this._AbsListView_this.getChildAt(position - firstPos).getTop();\n const distance = targetTop - this.mOffsetFromTop;\n const duration = Math.floor((this.mScrollDuration * (Math.abs(distance) / this._AbsListView_this.getHeight())));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n }\n break;\n }\n default:\n break;\n }\n }\n }\n PositionScroller.SCROLL_DURATION = 200;\n PositionScroller.MOVE_DOWN_POS = 1;\n PositionScroller.MOVE_UP_POS = 2;\n PositionScroller.MOVE_DOWN_BOUND = 3;\n PositionScroller.MOVE_UP_BOUND = 4;\n PositionScroller.MOVE_OFFSET = 5;\n AbsListView.PositionScroller = PositionScroller;\n class AdapterDataSetObserver extends AdapterView.AdapterDataSetObserver {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n onChanged() {\n super.onChanged();\n }\n onInvalidated() {\n super.onInvalidated();\n }\n }\n AbsListView.AdapterDataSetObserver = AdapterDataSetObserver;\n class LayoutParams extends ViewGroup.LayoutParams {\n constructor(...args) {\n super(...(args.length == 3 ? [args[0], args[1]] : args));\n this.viewType = 0;\n this.scrappedFromPosition = 0;\n this.itemId = -1;\n if (args.length === 3) {\n this.viewType = args[2];\n }\n }\n }\n AbsListView.LayoutParams = LayoutParams;\n class RecycleBin {\n constructor(arg) {\n this.mFirstActivePosition = 0;\n this.mActiveViews = [];\n this.mViewTypeCount = 0;\n this._AbsListView_this = arg;\n }\n setViewTypeCount(viewTypeCount) {\n if (viewTypeCount < 1) {\n throw Error(`new IllegalArgumentException(\"Can't have a viewTypeCount < 1\")`);\n }\n let scrapViews = new Array(viewTypeCount);\n for (let i = 0; i < viewTypeCount; i++) {\n scrapViews[i] = new ArrayList();\n }\n this.mViewTypeCount = viewTypeCount;\n this.mCurrentScrap = scrapViews[0];\n this.mScrapViews = scrapViews;\n }\n markChildrenDirty() {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n scrap.get(i).forceLayout();\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n scrap.get(j).forceLayout();\n }\n }\n }\n if (this.mTransientStateViews != null) {\n const count = this.mTransientStateViews.size();\n for (let i = 0; i < count; i++) {\n this.mTransientStateViews.valueAt(i).forceLayout();\n }\n }\n if (this.mTransientStateViewsById != null) {\n const count = this.mTransientStateViewsById.size();\n for (let i = 0; i < count; i++) {\n this.mTransientStateViewsById.valueAt(i).forceLayout();\n }\n }\n }\n shouldRecycleViewType(viewType) {\n return viewType >= 0;\n }\n clear() {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - i), false);\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - j), false);\n }\n }\n }\n if (this.mTransientStateViews != null) {\n this.mTransientStateViews.clear();\n }\n if (this.mTransientStateViewsById != null) {\n this.mTransientStateViewsById.clear();\n }\n }\n fillActiveViews(childCount, firstActivePosition) {\n if (this.mActiveViews.length < childCount) {\n this.mActiveViews = new Array(childCount);\n }\n this.mFirstActivePosition = firstActivePosition;\n const activeViews = this.mActiveViews;\n for (let i = 0; i < childCount; i++) {\n let child = this._AbsListView_this.getChildAt(i);\n let lp = child.getLayoutParams();\n if (lp != null && lp.viewType != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {\n activeViews[i] = child;\n }\n }\n }\n getActiveView(position) {\n let index = position - this.mFirstActivePosition;\n const activeViews = this.mActiveViews;\n if (index >= 0 && index < activeViews.length) {\n const match = activeViews[index];\n activeViews[index] = null;\n return match;\n }\n return null;\n }\n getTransientStateView(position) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds && this.mTransientStateViewsById != null) {\n let id = this._AbsListView_this.mAdapter.getItemId(position);\n let result = this.mTransientStateViewsById.get(id);\n this.mTransientStateViewsById.remove(id);\n return result;\n }\n if (this.mTransientStateViews != null) {\n const index = this.mTransientStateViews.indexOfKey(position);\n if (index >= 0) {\n let result = this.mTransientStateViews.valueAt(index);\n this.mTransientStateViews.removeAt(index);\n return result;\n }\n }\n return null;\n }\n clearTransientStateViews() {\n if (this.mTransientStateViews != null) {\n this.mTransientStateViews.clear();\n }\n if (this.mTransientStateViewsById != null) {\n this.mTransientStateViewsById.clear();\n }\n }\n getScrapView(position) {\n if (this.mViewTypeCount == 1) {\n return AbsListView.retrieveFromScrap(this.mCurrentScrap, position);\n }\n else {\n let whichScrap = this._AbsListView_this.mAdapter.getItemViewType(position);\n if (whichScrap >= 0 && whichScrap < this.mScrapViews.length) {\n return AbsListView.retrieveFromScrap(this.mScrapViews[whichScrap], position);\n }\n }\n return null;\n }\n addScrapView(scrap, position) {\n const lp = scrap.getLayoutParams();\n if (lp == null) {\n return;\n }\n lp.scrappedFromPosition = position;\n const viewType = lp.viewType;\n if (!this.shouldRecycleViewType(viewType)) {\n return;\n }\n scrap.dispatchStartTemporaryDetach();\n const scrapHasTransientState = scrap.hasTransientState();\n if (scrapHasTransientState) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) {\n if (this.mTransientStateViewsById == null) {\n this.mTransientStateViewsById = new LongSparseArray();\n }\n this.mTransientStateViewsById.put(lp.itemId, scrap);\n }\n else if (!this._AbsListView_this.mDataChanged) {\n if (this.mTransientStateViews == null) {\n this.mTransientStateViews = new SparseArray();\n }\n this.mTransientStateViews.put(position, scrap);\n }\n else {\n if (this.mSkippedScrap == null) {\n this.mSkippedScrap = new ArrayList();\n }\n this.mSkippedScrap.add(scrap);\n }\n }\n else {\n if (this.mViewTypeCount == 1) {\n this.mCurrentScrap.add(scrap);\n }\n else {\n this.mScrapViews[viewType].add(scrap);\n }\n if (this.mRecyclerListener != null) {\n this.mRecyclerListener.onMovedToScrapHeap(scrap);\n }\n }\n }\n removeSkippedScrap() {\n if (this.mSkippedScrap == null) {\n return;\n }\n const count = this.mSkippedScrap.size();\n for (let i = 0; i < count; i++) {\n this._AbsListView_this.removeDetachedView(this.mSkippedScrap.get(i), false);\n }\n this.mSkippedScrap.clear();\n }\n scrapActiveViews() {\n const activeViews = this.mActiveViews;\n const hasListener = this.mRecyclerListener != null;\n const multipleScraps = this.mViewTypeCount > 1;\n let scrapViews = this.mCurrentScrap;\n const count = activeViews.length;\n for (let i = count - 1; i >= 0; i--) {\n const victim = activeViews[i];\n if (victim != null) {\n const lp = victim.getLayoutParams();\n let whichScrap = lp.viewType;\n activeViews[i] = null;\n const scrapHasTransientState = victim.hasTransientState();\n if (!this.shouldRecycleViewType(whichScrap) || scrapHasTransientState) {\n if (whichScrap != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER && scrapHasTransientState) {\n this._AbsListView_this.removeDetachedView(victim, false);\n }\n if (scrapHasTransientState) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) {\n if (this.mTransientStateViewsById == null) {\n this.mTransientStateViewsById = new LongSparseArray();\n }\n let id = this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition + i);\n this.mTransientStateViewsById.put(id, victim);\n }\n else {\n if (this.mTransientStateViews == null) {\n this.mTransientStateViews = new SparseArray();\n }\n this.mTransientStateViews.put(this.mFirstActivePosition + i, victim);\n }\n }\n continue;\n }\n if (multipleScraps) {\n scrapViews = this.mScrapViews[whichScrap];\n }\n victim.dispatchStartTemporaryDetach();\n lp.scrappedFromPosition = this.mFirstActivePosition + i;\n scrapViews.add(victim);\n if (hasListener) {\n this.mRecyclerListener.onMovedToScrapHeap(victim);\n }\n }\n }\n this.pruneScrapViews();\n }\n pruneScrapViews() {\n const maxViews = this.mActiveViews.length;\n const viewTypeCount = this.mViewTypeCount;\n const scrapViews = this.mScrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n let size = scrapPile.size();\n const extras = size - maxViews;\n size--;\n for (let j = 0; j < extras; j++) {\n this._AbsListView_this.removeDetachedView(scrapPile.remove(size--), false);\n }\n }\n if (this.mTransientStateViews != null) {\n for (let i = 0; i < this.mTransientStateViews.size(); i++) {\n const v = this.mTransientStateViews.valueAt(i);\n if (!v.hasTransientState()) {\n this.mTransientStateViews.removeAt(i);\n i--;\n }\n }\n }\n if (this.mTransientStateViewsById != null) {\n for (let i = 0; i < this.mTransientStateViewsById.size(); i++) {\n const v = this.mTransientStateViewsById.valueAt(i);\n if (!v.hasTransientState()) {\n this.mTransientStateViewsById.removeAt(i);\n i--;\n }\n }\n }\n }\n reclaimScrapViews(views) {\n if (this.mViewTypeCount == 1) {\n views.addAll(this.mCurrentScrap);\n }\n else {\n const viewTypeCount = this.mViewTypeCount;\n const scrapViews = this.mScrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n views.addAll(scrapPile);\n }\n }\n }\n setCacheColorHint(color) {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n scrap.get(i).setDrawingCacheBackgroundColor(color);\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n scrap.get(j).setDrawingCacheBackgroundColor(color);\n }\n }\n }\n const activeViews = this.mActiveViews;\n const count = activeViews.length;\n for (let i = 0; i < count; ++i) {\n const victim = activeViews[i];\n if (victim != null) {\n victim.setDrawingCacheBackgroundColor(color);\n }\n }\n }\n }\n AbsListView.RecycleBin = RecycleBin;\n })(AbsListView = widget.AbsListView || (widget.AbsListView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayList = java.util.ArrayList;\n var AdapterView = android.widget.AdapterView;\n class HeaderViewListAdapter {\n constructor(headerViewInfos, footerViewInfos, adapter) {\n this.mAdapter = adapter;\n this.mIsFilterable = false;\n if (headerViewInfos == null) {\n this.mHeaderViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST;\n }\n else {\n this.mHeaderViewInfos = headerViewInfos;\n }\n if (footerViewInfos == null) {\n this.mFooterViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST;\n }\n else {\n this.mFooterViewInfos = footerViewInfos;\n }\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n }\n getHeadersCount() {\n return this.mHeaderViewInfos.size();\n }\n getFootersCount() {\n return this.mFooterViewInfos.size();\n }\n isEmpty() {\n return this.mAdapter == null || this.mAdapter.isEmpty();\n }\n areAllListInfosSelectable(infos) {\n if (infos != null) {\n for (let info of infos.array) {\n if (!info.isSelectable) {\n return false;\n }\n }\n }\n return true;\n }\n removeHeader(v) {\n for (let i = 0; i < this.mHeaderViewInfos.size(); i++) {\n let info = this.mHeaderViewInfos.get(i);\n if (info.view == v) {\n this.mHeaderViewInfos.remove(i);\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n return true;\n }\n }\n return false;\n }\n removeFooter(v) {\n for (let i = 0; i < this.mFooterViewInfos.size(); i++) {\n let info = this.mFooterViewInfos.get(i);\n if (info.view == v) {\n this.mFooterViewInfos.remove(i);\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n return true;\n }\n }\n return false;\n }\n getCount() {\n if (this.mAdapter != null) {\n return this.getFootersCount() + this.getHeadersCount() + this.mAdapter.getCount();\n }\n else {\n return this.getFootersCount() + this.getHeadersCount();\n }\n }\n areAllItemsEnabled() {\n if (this.mAdapter != null) {\n return this.mAreAllFixedViewsSelectable && this.mAdapter.areAllItemsEnabled();\n }\n else {\n return true;\n }\n }\n isEnabled(position) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).isSelectable;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.isEnabled(adjPosition);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).isSelectable;\n }\n getItem(position) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).data;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItem(adjPosition);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).data;\n }\n getItemId(position) {\n let numHeaders = this.getHeadersCount();\n if (this.mAdapter != null && position >= numHeaders) {\n let adjPosition = position - numHeaders;\n let adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItemId(adjPosition);\n }\n }\n return -1;\n }\n hasStableIds() {\n if (this.mAdapter != null) {\n return this.mAdapter.hasStableIds();\n }\n return false;\n }\n getView(position, convertView, parent) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).view;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getView(adjPosition, convertView, parent);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).view;\n }\n getItemViewType(position) {\n let numHeaders = this.getHeadersCount();\n if (this.mAdapter != null && position >= numHeaders) {\n let adjPosition = position - numHeaders;\n let adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItemViewType(adjPosition);\n }\n }\n return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER;\n }\n getViewTypeCount() {\n if (this.mAdapter != null) {\n return this.mAdapter.getViewTypeCount();\n }\n return 1;\n }\n registerDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.registerDataSetObserver(observer);\n }\n }\n unregisterDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(observer);\n }\n }\n getFilter() {\n return null;\n }\n getWrappedAdapter() {\n return this.mAdapter;\n }\n }\n HeaderViewListAdapter.EMPTY_INFO_LIST = new ArrayList();\n widget.HeaderViewListAdapter = HeaderViewListAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n var ArrayList = java.util.ArrayList;\n class Observable {\n constructor() {\n this.mObservers = new ArrayList();\n }\n registerObserver(observer) {\n if (observer == null) {\n throw new Error(\"The observer is null.\");\n }\n if (this.mObservers.contains(observer)) {\n throw new Error(\"Observer \" + observer + \" is already registered.\");\n }\n this.mObservers.add(observer);\n }\n unregisterObserver(observer) {\n if (observer == null) {\n throw new Error(\"The observer is null.\");\n }\n let index = this.mObservers.indexOf(observer);\n if (index == -1) {\n throw new Error(\"Observer \" + observer + \" was not registered.\");\n }\n this.mObservers.remove(index);\n }\n unregisterAll() {\n this.mObservers.clear();\n }\n }\n database.Observable = Observable;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n var Observable = android.database.Observable;\n class DataSetObservable extends Observable {\n notifyChanged() {\n for (let i = this.mObservers.size() - 1; i >= 0; i--) {\n this.mObservers.get(i).onChanged();\n }\n }\n notifyInvalidated() {\n for (let i = this.mObservers.size() - 1; i >= 0; i--) {\n this.mObservers.get(i).onInvalidated();\n }\n }\n }\n database.DataSetObservable = DataSetObservable;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObservable = android.database.DataSetObservable;\n class BaseAdapter {\n constructor() {\n this.mDataSetObservable = new DataSetObservable();\n }\n hasStableIds() {\n return false;\n }\n registerDataSetObserver(observer) {\n this.mDataSetObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mDataSetObservable.unregisterObserver(observer);\n }\n notifyDataSetChanged() {\n this.mDataSetObservable.notifyChanged();\n }\n notifyDataSetInvalidated() {\n this.mDataSetObservable.notifyInvalidated();\n }\n areAllItemsEnabled() {\n return true;\n }\n isEnabled(position) {\n return true;\n }\n getDropDownView(position, convertView, parent) {\n return this.getView(position, convertView, parent);\n }\n getItemViewType(position) {\n return 0;\n }\n getViewTypeCount() {\n return 1;\n }\n isEmpty() {\n return this.getCount() == 0;\n }\n }\n widget.BaseAdapter = BaseAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Paint = android.graphics.Paint;\n var PixelFormat = android.graphics.PixelFormat;\n var Rect = android.graphics.Rect;\n var MathUtils = android.util.MathUtils;\n var FocusFinder = android.view.FocusFinder;\n var KeyEvent = android.view.KeyEvent;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Trace = android.os.Trace;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var AbsListView = android.widget.AbsListView;\n var AdapterView = android.widget.AdapterView;\n var HeaderViewListAdapter = android.widget.HeaderViewListAdapter;\n class ListView extends AbsListView {\n constructor(context, bindElement, defStyle = android.R.attr.listViewStyle) {\n super(context, bindElement, null);\n this.mHeaderViewInfos = new ArrayList();\n this.mFooterViewInfos = new ArrayList();\n this.mDividerHeight = 0;\n this.mIsCacheColorOpaque = false;\n this.mDividerIsOpaque = false;\n this.mHeaderDividersEnabled = true;\n this.mFooterDividersEnabled = true;\n this.mAreAllItemsSelectable = true;\n this.mItemsCanFocus = false;\n this.mTempRect = new Rect();\n this.mArrowScrollFocusResult = new ListView.ArrowScrollFocusResult();\n this._attrBinder.addAttr('divider', (value) => {\n let divider = this._attrBinder.parseDrawable(value);\n if (divider)\n this.setDivider(divider);\n });\n this._attrBinder.addAttr('overScrollHeader', (value) => {\n let header = this._attrBinder.parseDrawable(value);\n if (header)\n this.setOverscrollHeader(header);\n });\n this._attrBinder.addAttr('overScrollFooter', (value) => {\n let footer = this._attrBinder.parseDrawable(value);\n if (footer)\n this.setOverscrollFooter(footer);\n });\n this._attrBinder.addAttr('dividerHeight', (value) => {\n let dividerHeight = this._attrBinder.parseNumberPixelSize(value, -1);\n if (dividerHeight >= 0) {\n this.setDividerHeight(dividerHeight);\n }\n });\n this._attrBinder.addAttr('headerDividersEnabled', (value) => {\n this.setHeaderDividersEnabled(this._attrBinder.parseBoolean(value, true));\n });\n this._attrBinder.addAttr('footerDividersEnabled', (value) => {\n this.setFooterDividersEnabled(this._attrBinder.parseBoolean(value, true));\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n getMaxScrollAmount() {\n return Math.floor((ListView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop)));\n }\n adjustViewsUpOrDown() {\n const childCount = this.getChildCount();\n let delta;\n if (childCount > 0) {\n let child;\n if (!this.mStackFromBottom) {\n child = this.getChildAt(0);\n delta = child.getTop() - this.mListPadding.top;\n if (this.mFirstPosition != 0) {\n delta -= this.mDividerHeight;\n }\n if (delta < 0) {\n delta = 0;\n }\n }\n else {\n child = this.getChildAt(childCount - 1);\n delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom);\n if (this.mFirstPosition + childCount < this.mItemCount) {\n delta += this.mDividerHeight;\n }\n if (delta > 0) {\n delta = 0;\n }\n }\n if (delta != 0) {\n this.offsetChildrenTopAndBottom(-delta);\n }\n }\n }\n addHeaderView(v, data = null, isSelectable = true) {\n const info = new ListView.FixedViewInfo(this);\n info.view = v;\n info.data = data;\n info.isSelectable = isSelectable;\n this.mHeaderViewInfos.add(info);\n if (this.mAdapter != null) {\n if (!(this.mAdapter instanceof HeaderViewListAdapter)) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter);\n }\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n }\n }\n getHeaderViewsCount() {\n return this.mHeaderViewInfos.size();\n }\n removeHeaderView(v) {\n if (this.mHeaderViewInfos.size() > 0) {\n let result = false;\n if (this.mAdapter != null && this.mAdapter.removeHeader(v)) {\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n result = true;\n }\n this.removeFixedViewInfo(v, this.mHeaderViewInfos);\n return result;\n }\n return false;\n }\n removeFixedViewInfo(v, where) {\n let len = where.size();\n for (let i = 0; i < len; ++i) {\n let info = where.get(i);\n if (info.view == v) {\n where.remove(i);\n break;\n }\n }\n }\n addFooterView(v, data = null, isSelectable = true) {\n const info = new ListView.FixedViewInfo(this);\n info.view = v;\n info.data = data;\n info.isSelectable = isSelectable;\n this.mFooterViewInfos.add(info);\n if (this.mAdapter != null) {\n if (!(this.mAdapter instanceof HeaderViewListAdapter)) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter);\n }\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n }\n }\n getFooterViewsCount() {\n return this.mFooterViewInfos.size();\n }\n removeFooterView(v) {\n if (this.mFooterViewInfos.size() > 0) {\n let result = false;\n if (this.mAdapter != null && this.mAdapter.removeFooter(v)) {\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n result = true;\n }\n this.removeFixedViewInfo(v, this.mFooterViewInfos);\n return result;\n }\n return false;\n }\n getAdapter() {\n return this.mAdapter;\n }\n setAdapter(adapter) {\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.resetList();\n this.mRecycler.clear();\n if (this.mHeaderViewInfos.size() > 0 || this.mFooterViewInfos.size() > 0) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, adapter);\n }\n else {\n this.mAdapter = adapter;\n }\n this.mOldSelectedPosition = ListView.INVALID_POSITION;\n this.mOldSelectedRowId = ListView.INVALID_ROW_ID;\n super.setAdapter(adapter);\n if (this.mAdapter != null) {\n this.mAreAllItemsSelectable = this.mAdapter.areAllItemsEnabled();\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.checkFocus();\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());\n let position;\n if (this.mStackFromBottom) {\n position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n }\n else {\n position = this.lookForSelectablePosition(0, true);\n }\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n if (this.mItemCount == 0) {\n this.checkSelectionChanged();\n }\n }\n else {\n this.mAreAllItemsSelectable = true;\n this.checkFocus();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n resetList() {\n this.clearRecycledState(this.mHeaderViewInfos);\n this.clearRecycledState(this.mFooterViewInfos);\n super.resetList();\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n }\n clearRecycledState(infos) {\n if (infos != null) {\n const count = infos.size();\n for (let i = 0; i < count; i++) {\n const child = infos.get(i).view;\n const p = child.getLayoutParams();\n if (p != null) {\n p.recycledHeaderFooter = false;\n }\n }\n }\n }\n showingTopFadingEdge() {\n const listTop = this.mScrollY + this.mListPadding.top;\n return (this.mFirstPosition > 0) || (this.getChildAt(0).getTop() > listTop);\n }\n showingBottomFadingEdge() {\n const childCount = this.getChildCount();\n const bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom();\n const lastVisiblePosition = this.mFirstPosition + childCount - 1;\n const listBottom = this.mScrollY + this.getHeight() - this.mListPadding.bottom;\n return (lastVisiblePosition < this.mItemCount - 1) || (bottomOfBottomChild < listBottom);\n }\n requestChildRectangleOnScreen(child, rect, immediate) {\n let rectTopWithinChild = rect.top;\n rect.offset(child.getLeft(), child.getTop());\n rect.offset(-child.getScrollX(), -child.getScrollY());\n const height = this.getHeight();\n let listUnfadedTop = this.getScrollY();\n let listUnfadedBottom = listUnfadedTop + height;\n const fadingEdge = this.getVerticalFadingEdgeLength();\n if (this.showingTopFadingEdge()) {\n if ((this.mSelectedPosition > 0) || (rectTopWithinChild > fadingEdge)) {\n listUnfadedTop += fadingEdge;\n }\n }\n let childCount = this.getChildCount();\n let bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom();\n if (this.showingBottomFadingEdge()) {\n if ((this.mSelectedPosition < this.mItemCount - 1) || (rect.bottom < (bottomOfBottomChild - fadingEdge))) {\n listUnfadedBottom -= fadingEdge;\n }\n }\n let scrollYDelta = 0;\n if (rect.bottom > listUnfadedBottom && rect.top > listUnfadedTop) {\n if (rect.height() > height) {\n scrollYDelta += (rect.top - listUnfadedTop);\n }\n else {\n scrollYDelta += (rect.bottom - listUnfadedBottom);\n }\n let distanceToBottom = bottomOfBottomChild - listUnfadedBottom;\n scrollYDelta = Math.min(scrollYDelta, distanceToBottom);\n }\n else if (rect.top < listUnfadedTop && rect.bottom < listUnfadedBottom) {\n if (rect.height() > height) {\n scrollYDelta -= (listUnfadedBottom - rect.bottom);\n }\n else {\n scrollYDelta -= (listUnfadedTop - rect.top);\n }\n let top = this.getChildAt(0).getTop();\n let deltaToTop = top - listUnfadedTop;\n scrollYDelta = Math.max(scrollYDelta, deltaToTop);\n }\n const scroll = scrollYDelta != 0;\n if (scroll) {\n this.scrollListItemsBy(-scrollYDelta);\n this.positionSelector(ListView.INVALID_POSITION, child);\n this.mSelectedTop = child.getTop();\n this.invalidate();\n }\n return scroll;\n }\n fillGap(down) {\n const count = this.getChildCount();\n if (down) {\n let paddingTop = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n paddingTop = this.getListPaddingTop();\n }\n const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + this.mDividerHeight : paddingTop;\n this.fillDown(this.mFirstPosition + count, startOffset);\n this.correctTooHigh(this.getChildCount());\n }\n else {\n let paddingBottom = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n paddingBottom = this.getListPaddingBottom();\n }\n const startOffset = count > 0 ? this.getChildAt(0).getTop() - this.mDividerHeight : this.getHeight() - paddingBottom;\n this.fillUp(this.mFirstPosition - 1, startOffset);\n this.correctTooLow(this.getChildCount());\n }\n }\n fillDown(pos, nextTop) {\n let selectedView = null;\n let end = (this.mBottom - this.mTop);\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n end -= this.mListPadding.bottom;\n }\n while (nextTop < end && pos < this.mItemCount) {\n let selected = pos == this.mSelectedPosition;\n let child = this.makeAndAddView(pos, nextTop, true, this.mListPadding.left, selected);\n nextTop = child.getBottom() + this.mDividerHeight;\n if (selected) {\n selectedView = child;\n }\n pos++;\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillUp(pos, nextBottom) {\n let selectedView = null;\n let end = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n end = this.mListPadding.top;\n }\n while (nextBottom > end && pos >= 0) {\n let selected = pos == this.mSelectedPosition;\n let child = this.makeAndAddView(pos, nextBottom, false, this.mListPadding.left, selected);\n nextBottom = child.getTop() - this.mDividerHeight;\n if (selected) {\n selectedView = child;\n }\n pos--;\n }\n this.mFirstPosition = pos + 1;\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillFromTop(nextTop) {\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition);\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1);\n if (this.mFirstPosition < 0) {\n this.mFirstPosition = 0;\n }\n return this.fillDown(this.mFirstPosition, nextTop);\n }\n fillFromMiddle(childrenTop, childrenBottom) {\n let height = childrenBottom - childrenTop;\n let position = this.reconcileSelectedPosition();\n let sel = this.makeAndAddView(position, childrenTop, true, this.mListPadding.left, true);\n this.mFirstPosition = position;\n let selHeight = sel.getMeasuredHeight();\n if (selHeight <= height) {\n sel.offsetTopAndBottom((height - selHeight) / 2);\n }\n this.fillAboveAndBelow(sel, position);\n if (!this.mStackFromBottom) {\n this.correctTooHigh(this.getChildCount());\n }\n else {\n this.correctTooLow(this.getChildCount());\n }\n return sel;\n }\n fillAboveAndBelow(sel, position) {\n const dividerHeight = this.mDividerHeight;\n if (!this.mStackFromBottom) {\n this.fillUp(position - 1, sel.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillDown(position + 1, sel.getBottom() + dividerHeight);\n }\n else {\n this.fillDown(position + 1, sel.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillUp(position - 1, sel.getTop() - dividerHeight);\n }\n }\n fillFromSelection(selectedTop, childrenTop, childrenBottom) {\n let fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n let sel;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition);\n sel = this.makeAndAddView(selectedPosition, selectedTop, true, this.mListPadding.left, true);\n if (sel.getBottom() > bottomSelectionPixel) {\n const spaceAbove = sel.getTop() - topSelectionPixel;\n const spaceBelow = sel.getBottom() - bottomSelectionPixel;\n const offset = Math.min(spaceAbove, spaceBelow);\n sel.offsetTopAndBottom(-offset);\n }\n else if (sel.getTop() < topSelectionPixel) {\n const spaceAbove = topSelectionPixel - sel.getTop();\n const spaceBelow = bottomSelectionPixel - sel.getBottom();\n const offset = Math.min(spaceAbove, spaceBelow);\n sel.offsetTopAndBottom(offset);\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n if (!this.mStackFromBottom) {\n this.correctTooHigh(this.getChildCount());\n }\n else {\n this.correctTooLow(this.getChildCount());\n }\n return sel;\n }\n getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition) {\n let bottomSelectionPixel = childrenBottom;\n if (selectedPosition != this.mItemCount - 1) {\n bottomSelectionPixel -= fadingEdgeLength;\n }\n return bottomSelectionPixel;\n }\n getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition) {\n let topSelectionPixel = childrenTop;\n if (selectedPosition > 0) {\n topSelectionPixel += fadingEdgeLength;\n }\n return topSelectionPixel;\n }\n smoothScrollToPosition(position, boundPosition) {\n super.smoothScrollToPosition(position, boundPosition);\n }\n smoothScrollByOffset(offset) {\n super.smoothScrollByOffset(offset);\n }\n moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom) {\n let fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n let sel;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n if (delta > 0) {\n oldSel = this.makeAndAddView(selectedPosition - 1, oldSel.getTop(), true, this.mListPadding.left, false);\n const dividerHeight = this.mDividerHeight;\n sel = this.makeAndAddView(selectedPosition, oldSel.getBottom() + dividerHeight, true, this.mListPadding.left, true);\n if (sel.getBottom() > bottomSelectionPixel) {\n let spaceAbove = sel.getTop() - topSelectionPixel;\n let spaceBelow = sel.getBottom() - bottomSelectionPixel;\n let halfVerticalSpace = (childrenBottom - childrenTop) / 2;\n let offset = Math.min(spaceAbove, spaceBelow);\n offset = Math.min(offset, halfVerticalSpace);\n oldSel.offsetTopAndBottom(-offset);\n sel.offsetTopAndBottom(-offset);\n }\n if (!this.mStackFromBottom) {\n this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight);\n }\n else {\n this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight);\n }\n }\n else if (delta < 0) {\n if (newSel != null) {\n sel = this.makeAndAddView(selectedPosition, newSel.getTop(), true, this.mListPadding.left, true);\n }\n else {\n sel = this.makeAndAddView(selectedPosition, oldSel.getTop(), false, this.mListPadding.left, true);\n }\n if (sel.getTop() < topSelectionPixel) {\n let spaceAbove = topSelectionPixel - sel.getTop();\n let spaceBelow = bottomSelectionPixel - sel.getBottom();\n let halfVerticalSpace = (childrenBottom - childrenTop) / 2;\n let offset = Math.min(spaceAbove, spaceBelow);\n offset = Math.min(offset, halfVerticalSpace);\n sel.offsetTopAndBottom(offset);\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n }\n else {\n let oldTop = oldSel.getTop();\n sel = this.makeAndAddView(selectedPosition, oldTop, true, this.mListPadding.left, true);\n if (oldTop < childrenTop) {\n let newBottom = sel.getBottom();\n if (newBottom < childrenTop + 20) {\n sel.offsetTopAndBottom(childrenTop - sel.getTop());\n }\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n }\n return sel;\n }\n onSizeChanged(w, h, oldw, oldh) {\n if (this.getChildCount() > 0) {\n let focusedChild = this.getFocusedChild();\n if (focusedChild != null) {\n const childPosition = this.mFirstPosition + this.indexOfChild(focusedChild);\n const childBottom = focusedChild.getBottom();\n const offset = Math.max(0, childBottom - (h - this.mPaddingTop));\n const top = focusedChild.getTop() - offset;\n if (this.mFocusSelector == null) {\n this.mFocusSelector = new ListView.FocusSelector(this);\n }\n this.post(this.mFocusSelector.setup(childPosition, top));\n }\n }\n super.onSizeChanged(w, h, oldw, oldh);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n let widthMode = ListView.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = ListView.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = ListView.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = ListView.MeasureSpec.getSize(heightMeasureSpec);\n let childWidth = 0;\n let childHeight = 0;\n let childState = 0;\n this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount();\n if (this.mItemCount > 0 && (widthMode == ListView.MeasureSpec.UNSPECIFIED || heightMode == ListView.MeasureSpec.UNSPECIFIED)) {\n const child = this.obtainView(0, this.mIsScrap);\n this.measureScrapChild(child, 0, widthMeasureSpec);\n childWidth = child.getMeasuredWidth();\n childHeight = child.getMeasuredHeight();\n childState = ListView.combineMeasuredStates(childState, child.getMeasuredState());\n if (this.recycleOnMeasure() && this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)) {\n this.mRecycler.addScrapView(child, -1);\n }\n }\n if (widthMode == ListView.MeasureSpec.UNSPECIFIED) {\n widthSize = this.mListPadding.left + this.mListPadding.right + childWidth + this.getVerticalScrollbarWidth();\n }\n else {\n widthSize |= (childState & ListView.MEASURED_STATE_MASK);\n }\n if (heightMode == ListView.MeasureSpec.UNSPECIFIED) {\n heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2;\n }\n if (heightMode == ListView.MeasureSpec.AT_MOST) {\n heightSize = this.measureHeightOfChildren(widthMeasureSpec, 0, ListView.NO_POSITION, heightSize, -1);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n measureScrapChild(child, position, widthMeasureSpec) {\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n child.setLayoutParams(p);\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n p.forceAdd = true;\n let childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n recycleOnMeasure() {\n return true;\n }\n measureHeightOfChildren(widthMeasureSpec, startPosition, endPosition, maxHeight, disallowPartialChildPosition) {\n const adapter = this.mAdapter;\n if (adapter == null) {\n return this.mListPadding.top + this.mListPadding.bottom;\n }\n let returnedHeight = this.mListPadding.top + this.mListPadding.bottom;\n const dividerHeight = ((this.mDividerHeight > 0) && this.mDivider != null) ? this.mDividerHeight : 0;\n let prevHeightWithoutPartialChild = 0;\n let i;\n let child;\n endPosition = (endPosition == ListView.NO_POSITION) ? adapter.getCount() - 1 : endPosition;\n const recycleBin = this.mRecycler;\n const recyle = this.recycleOnMeasure();\n const isScrap = this.mIsScrap;\n for (i = startPosition; i <= endPosition; ++i) {\n child = this.obtainView(i, isScrap);\n this.measureScrapChild(child, i, widthMeasureSpec);\n if (i > 0) {\n returnedHeight += dividerHeight;\n }\n if (recyle && recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)) {\n recycleBin.addScrapView(child, -1);\n }\n returnedHeight += child.getMeasuredHeight();\n if (returnedHeight >= maxHeight) {\n return (disallowPartialChildPosition >= 0) &&\n (i > disallowPartialChildPosition) &&\n (prevHeightWithoutPartialChild > 0) &&\n (returnedHeight != maxHeight) ? prevHeightWithoutPartialChild : maxHeight;\n }\n if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) {\n prevHeightWithoutPartialChild = returnedHeight;\n }\n }\n return returnedHeight;\n }\n findMotionRow(y) {\n let childCount = this.getChildCount();\n if (childCount > 0) {\n if (!this.mStackFromBottom) {\n for (let i = 0; i < childCount; i++) {\n let v = this.getChildAt(i);\n if (y <= v.getBottom()) {\n return this.mFirstPosition + i;\n }\n }\n }\n else {\n for (let i = childCount - 1; i >= 0; i--) {\n let v = this.getChildAt(i);\n if (y >= v.getTop()) {\n return this.mFirstPosition + i;\n }\n }\n }\n }\n return ListView.INVALID_POSITION;\n }\n fillSpecific(position, top) {\n let tempIsSelected = position == this.mSelectedPosition;\n let temp = this.makeAndAddView(position, top, true, this.mListPadding.left, tempIsSelected);\n this.mFirstPosition = position;\n let above;\n let below;\n const dividerHeight = this.mDividerHeight;\n if (!this.mStackFromBottom) {\n above = this.fillUp(position - 1, temp.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n below = this.fillDown(position + 1, temp.getBottom() + dividerHeight);\n let childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooHigh(childCount);\n }\n }\n else {\n below = this.fillDown(position + 1, temp.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n above = this.fillUp(position - 1, temp.getTop() - dividerHeight);\n let childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooLow(childCount);\n }\n }\n if (tempIsSelected) {\n return temp;\n }\n else if (above != null) {\n return above;\n }\n else {\n return below;\n }\n }\n correctTooHigh(childCount) {\n let lastPosition = this.mFirstPosition + childCount - 1;\n if (lastPosition == this.mItemCount - 1 && childCount > 0) {\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let bottomOffset = end - lastBottom;\n let firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) {\n if (this.mFirstPosition == 0) {\n bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop);\n }\n this.offsetChildrenTopAndBottom(bottomOffset);\n if (this.mFirstPosition > 0) {\n this.fillUp(this.mFirstPosition - 1, firstChild.getTop() - this.mDividerHeight);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n correctTooLow(childCount) {\n if (this.mFirstPosition == 0 && childCount > 0) {\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n const start = this.mListPadding.top;\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let topOffset = firstTop - start;\n let lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n let lastPosition = this.mFirstPosition + childCount - 1;\n if (topOffset > 0) {\n if (lastPosition < this.mItemCount - 1 || lastBottom > end) {\n if (lastPosition == this.mItemCount - 1) {\n topOffset = Math.min(topOffset, lastBottom - end);\n }\n this.offsetChildrenTopAndBottom(-topOffset);\n if (lastPosition < this.mItemCount - 1) {\n this.fillDown(lastPosition + 1, lastChild.getBottom() + this.mDividerHeight);\n this.adjustViewsUpOrDown();\n }\n }\n else if (lastPosition == this.mItemCount - 1) {\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n layoutChildren() {\n const blockLayoutRequests = this.mBlockLayoutRequests;\n if (blockLayoutRequests) {\n return;\n }\n this.mBlockLayoutRequests = true;\n try {\n super.layoutChildren();\n this.invalidate();\n if (this.mAdapter == null) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n const childrenTop = this.mListPadding.top;\n const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n const childCount = this.getChildCount();\n let index = 0;\n let delta = 0;\n let sel;\n let oldSel = null;\n let oldFirst = null;\n let newSel = null;\n switch (this.mLayoutMode) {\n case ListView.LAYOUT_SET_SELECTION:\n index = this.mNextSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n newSel = this.getChildAt(index);\n }\n break;\n case ListView.LAYOUT_FORCE_TOP:\n case ListView.LAYOUT_FORCE_BOTTOM:\n case ListView.LAYOUT_SPECIFIC:\n case ListView.LAYOUT_SYNC:\n break;\n case ListView.LAYOUT_MOVE_SELECTION:\n default:\n index = this.mSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n oldSel = this.getChildAt(index);\n }\n oldFirst = this.getChildAt(0);\n if (this.mNextSelectedPosition >= 0) {\n delta = this.mNextSelectedPosition - this.mSelectedPosition;\n }\n newSel = this.getChildAt(index + delta);\n }\n let dataChanged = this.mDataChanged;\n if (dataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n else if (this.mItemCount != this.mAdapter.getCount()) {\n throw Error(`IllegalStateException(\"The content of the adapter has changed but\n ListView did not receive a notification. Make sure the content of\n your adapter is not modified from a background thread, but only from\n the UI thread. Make sure your adapter calls notifyDataSetChanged()\n when its content changes. [in ListView(${this.getId()},${this.constructor.name})\n with Adapter(${this.mAdapter.constructor.name})]\")`);\n }\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n const accessFocusedChild = null;\n const focusedChild = this.getFocusedChild();\n if (focusedChild != null) {\n focusedChild.setHasTransientState(true);\n }\n const firstPosition = this.mFirstPosition;\n const recycleBin = this.mRecycler;\n if (dataChanged) {\n for (let i = 0; i < childCount; i++) {\n recycleBin.addScrapView(this.getChildAt(i), firstPosition + i);\n }\n }\n else {\n recycleBin.fillActiveViews(childCount, firstPosition);\n }\n this.detachAllViewsFromParent();\n recycleBin.removeSkippedScrap();\n switch (this.mLayoutMode) {\n case ListView.LAYOUT_SET_SELECTION:\n if (newSel != null) {\n sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom);\n }\n else {\n sel = this.fillFromMiddle(childrenTop, childrenBottom);\n }\n break;\n case ListView.LAYOUT_SYNC:\n sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop);\n break;\n case ListView.LAYOUT_FORCE_BOTTOM:\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n this.adjustViewsUpOrDown();\n break;\n case ListView.LAYOUT_FORCE_TOP:\n this.mFirstPosition = 0;\n sel = this.fillFromTop(childrenTop);\n this.adjustViewsUpOrDown();\n break;\n case ListView.LAYOUT_SPECIFIC:\n sel = this.fillSpecific(this.reconcileSelectedPosition(), this.mSpecificTop);\n break;\n case ListView.LAYOUT_MOVE_SELECTION:\n sel = this.moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom);\n break;\n default:\n if (childCount == 0) {\n if (!this.mStackFromBottom) {\n const position = this.lookForSelectablePosition(0, true);\n this.setSelectedPositionInt(position);\n sel = this.fillFromTop(childrenTop);\n }\n else {\n const position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n this.setSelectedPositionInt(position);\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n }\n }\n else {\n if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop());\n }\n else if (this.mFirstPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop());\n }\n else {\n sel = this.fillSpecific(0, childrenTop);\n }\n }\n break;\n }\n recycleBin.scrapActiveViews();\n if (sel != null) {\n const shouldPlaceFocus = this.mItemsCanFocus && this.hasFocus();\n const maintainedFocus = focusedChild != null && focusedChild.hasFocus();\n if (shouldPlaceFocus && !maintainedFocus && !sel.hasFocus()) {\n if (sel.requestFocus()) {\n sel.setSelected(false);\n this.mSelectorRect.setEmpty();\n }\n else {\n const focused = this.getFocusedChild();\n if (focused != null) {\n focused.clearFocus();\n }\n this.positionSelector(ListView.INVALID_POSITION, sel);\n }\n }\n else {\n this.positionSelector(ListView.INVALID_POSITION, sel);\n }\n this.mSelectedTop = sel.getTop();\n }\n else {\n if (this.mTouchMode == ListView.TOUCH_MODE_TAP || this.mTouchMode == ListView.TOUCH_MODE_DONE_WAITING) {\n const child = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (child != null) {\n this.positionSelector(this.mMotionPosition, child);\n }\n }\n else {\n this.mSelectedTop = 0;\n this.mSelectorRect.setEmpty();\n }\n }\n if (accessFocusedChild != null) {\n accessFocusedChild.setHasTransientState(false);\n }\n if (focusedChild != null) {\n focusedChild.setHasTransientState(false);\n }\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n this.mDataChanged = false;\n if (this.mPositionScrollAfterLayout != null) {\n this.post(this.mPositionScrollAfterLayout);\n this.mPositionScrollAfterLayout = null;\n }\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n this.updateScrollIndicators();\n if (this.mItemCount > 0) {\n this.checkSelectionChanged();\n }\n this.invokeOnItemScrollListener();\n }\n finally {\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = false;\n }\n }\n }\n makeAndAddView(position, y, flow, childrenLeft, selected) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.getActiveView(position);\n if (child != null) {\n this.setupChild(child, position, y, flow, childrenLeft, selected, true);\n return child;\n }\n }\n child = this.obtainView(position, this.mIsScrap);\n this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0]);\n return child;\n }\n setupChild(child, position, y, flowDown, childrenLeft, selected, recycled) {\n Trace.traceBegin(Trace.TRACE_TAG_VIEW, \"setupListItem\");\n const isSelected = selected && this.shouldShowSelector();\n const updateChildSelected = isSelected != child.isSelected();\n const mode = this.mTouchMode;\n const isPressed = mode > ListView.TOUCH_MODE_DOWN && mode < ListView.TOUCH_MODE_SCROLL && this.mMotionPosition == position;\n const updateChildPressed = isPressed != child.isPressed();\n const needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n }\n if (!(p instanceof AbsListView.LayoutParams)) {\n throw Error('ClassCaseException(' + p.constructor.name + ' can\\'t case to AbsListView.LayoutParams)');\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {\n this.attachViewToParent(child, flowDown ? -1 : 0, p);\n }\n else {\n p.forceAdd = false;\n if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {\n p.recycledHeaderFooter = true;\n }\n this.addViewInLayout(child, flowDown ? -1 : 0, p, true);\n }\n if (updateChildSelected) {\n child.setSelected(isSelected);\n }\n if (updateChildPressed) {\n child.setPressed(isPressed);\n }\n if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n if (needToMeasure) {\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n else {\n this.cleanupLayoutState(child);\n }\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n const childTop = flowDown ? y : y - h;\n if (needToMeasure) {\n const childRight = childrenLeft + w;\n const childBottom = childTop + h;\n child.layout(childrenLeft, childTop, childRight, childBottom);\n }\n else {\n child.offsetLeftAndRight(childrenLeft - child.getLeft());\n child.offsetTopAndBottom(childTop - child.getTop());\n }\n if (this.mCachingStarted && !child.isDrawingCacheEnabled()) {\n child.setDrawingCacheEnabled(true);\n }\n if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) {\n child.jumpDrawablesToCurrentState();\n }\n Trace.traceEnd(Trace.TRACE_TAG_VIEW);\n }\n canAnimate() {\n return super.canAnimate() && this.mItemCount > 0;\n }\n setSelection(position) {\n this.setSelectionFromTop(position, 0);\n }\n setSelectionFromTop(position, y) {\n if (this.mAdapter == null) {\n return;\n }\n if (!this.isInTouchMode()) {\n position = this.lookForSelectablePosition(position, true);\n if (position >= 0) {\n this.setNextSelectedPositionInt(position);\n }\n }\n else {\n this.mResurrectToPosition = position;\n }\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_SPECIFIC;\n this.mSpecificTop = this.mListPadding.top + y;\n if (this.mNeedSync) {\n this.mSyncPosition = position;\n this.mSyncRowId = this.mAdapter.getItemId(position);\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.requestLayout();\n }\n }\n setSelectionInt(position) {\n this.setNextSelectedPositionInt(position);\n let awakeScrollbars = false;\n const selectedPosition = this.mSelectedPosition;\n if (selectedPosition >= 0) {\n if (position == selectedPosition - 1) {\n awakeScrollbars = true;\n }\n else if (position == selectedPosition + 1) {\n awakeScrollbars = true;\n }\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.layoutChildren();\n if (awakeScrollbars) {\n this.awakenScrollBars();\n }\n }\n lookForSelectablePosition(position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return ListView.INVALID_POSITION;\n }\n const count = adapter.getCount();\n if (!this.mAreAllItemsSelectable) {\n if (lookDown) {\n position = Math.max(0, position);\n while (position < count && !adapter.isEnabled(position)) {\n position++;\n }\n }\n else {\n position = Math.min(position, count - 1);\n while (position >= 0 && !adapter.isEnabled(position)) {\n position--;\n }\n }\n }\n if (position < 0 || position >= count) {\n return ListView.INVALID_POSITION;\n }\n return position;\n }\n lookForSelectablePositionAfter(current, position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return ListView.INVALID_POSITION;\n }\n const after = this.lookForSelectablePosition(position, lookDown);\n if (after != ListView.INVALID_POSITION) {\n return after;\n }\n const count = adapter.getCount();\n current = MathUtils.constrain(current, -1, count - 1);\n if (lookDown) {\n position = Math.min(position - 1, count - 1);\n while ((position > current) && !adapter.isEnabled(position)) {\n position--;\n }\n if (position <= current) {\n return ListView.INVALID_POSITION;\n }\n }\n else {\n position = Math.max(0, position + 1);\n while ((position < current) && !adapter.isEnabled(position)) {\n position++;\n }\n if (position >= current) {\n return ListView.INVALID_POSITION;\n }\n }\n return position;\n }\n setSelectionAfterHeaderView() {\n const count = this.mHeaderViewInfos.size();\n if (count > 0) {\n this.mNextSelectedPosition = 0;\n return;\n }\n if (this.mAdapter != null) {\n this.setSelection(count);\n }\n else {\n this.mNextSelectedPosition = count;\n this.mLayoutMode = ListView.LAYOUT_SET_SELECTION;\n }\n }\n dispatchKeyEvent(event) {\n let handled = super.dispatchKeyEvent(event);\n if (!handled) {\n let focused = this.getFocusedChild();\n if (focused != null && event.getAction() == KeyEvent.ACTION_DOWN) {\n handled = this.onKeyDown(event.getKeyCode(), event);\n }\n }\n return handled;\n }\n onKeyDown(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return this.commonKey(keyCode, repeatCount, event);\n }\n onKeyUp(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n commonKey(keyCode, count, event) {\n if (this.mAdapter == null || !this.isAttachedToWindow()) {\n return false;\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n let handled = false;\n let action = event.getAction();\n if (action != KeyEvent.ACTION_UP) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled) {\n while (count-- > 0) {\n if (this.arrowScroll(ListView.FOCUS_UP)) {\n handled = true;\n }\n else {\n break;\n }\n }\n }\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled) {\n while (count-- > 0) {\n if (this.arrowScroll(ListView.FOCUS_DOWN)) {\n handled = true;\n }\n else {\n break;\n }\n }\n }\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (event.hasNoModifiers()) {\n handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (event.hasNoModifiers()) {\n handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) {\n this.keyPressed();\n handled = true;\n }\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP);\n }\n handled = true;\n break;\n case KeyEvent.KEYCODE_PAGE_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_HOME:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_END:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_TAB:\n if (false) {\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(ListView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(ListView.FOCUS_UP);\n }\n }\n break;\n }\n }\n if (handled) {\n return true;\n }\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return super.onKeyDown(keyCode, event);\n case KeyEvent.ACTION_UP:\n return super.onKeyUp(keyCode, event);\n default:\n return false;\n }\n }\n pageScroll(direction) {\n let nextPage;\n let down;\n if (direction == ListView.FOCUS_UP) {\n nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount() - 1);\n down = false;\n }\n else if (direction == ListView.FOCUS_DOWN) {\n nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount() - 1);\n down = true;\n }\n else {\n return false;\n }\n if (nextPage >= 0) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, nextPage, down);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_SPECIFIC;\n this.mSpecificTop = this.mPaddingTop + this.getVerticalFadingEdgeLength();\n if (down && (position > (this.mItemCount - this.getChildCount()))) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM;\n }\n if (!down && (position < this.getChildCount())) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_TOP;\n }\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n return true;\n }\n }\n return false;\n }\n fullScroll(direction) {\n let moved = false;\n if (direction == ListView.FOCUS_UP) {\n if (this.mSelectedPosition != 0) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, 0, true);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_TOP;\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n }\n moved = true;\n }\n }\n else if (direction == ListView.FOCUS_DOWN) {\n const lastItem = (this.mItemCount - 1);\n if (this.mSelectedPosition < lastItem) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, lastItem, false);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM;\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n }\n moved = true;\n }\n }\n if (moved && !this.awakenScrollBars()) {\n this.awakenScrollBars();\n this.invalidate();\n }\n return moved;\n }\n handleHorizontalFocusWithinListItem(direction) {\n if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT) {\n throw Error(`new IllegalArgumentException(\"direction must be one of\" + \" {View.FOCUS_LEFT, View.FOCUS_RIGHT}\")`);\n }\n const numChildren = this.getChildCount();\n if (this.mItemsCanFocus && numChildren > 0 && this.mSelectedPosition != ListView.INVALID_POSITION) {\n const selectedView = this.getSelectedView();\n if (selectedView != null && selectedView.hasFocus() && selectedView instanceof ViewGroup) {\n const currentFocus = selectedView.findFocus();\n const nextFocus = FocusFinder.getInstance().findNextFocus(selectedView, currentFocus, direction);\n if (nextFocus != null) {\n currentFocus.getFocusedRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocus, this.mTempRect);\n this.offsetRectIntoDescendantCoords(nextFocus, this.mTempRect);\n if (nextFocus.requestFocus(direction, this.mTempRect)) {\n return true;\n }\n }\n const globalNextFocus = FocusFinder.getInstance().findNextFocus(this.getRootView(), currentFocus, direction);\n if (globalNextFocus != null) {\n return this.isViewAncestorOf(globalNextFocus, this);\n }\n }\n }\n return false;\n }\n arrowScroll(direction) {\n try {\n this.mInLayout = true;\n const handled = this.arrowScrollImpl(direction);\n if (handled) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n }\n return handled;\n }\n finally {\n this.mInLayout = false;\n }\n }\n nextSelectedPositionForDirection(selectedView, selectedPos, direction) {\n let nextSelected;\n if (direction == View.FOCUS_DOWN) {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n if (selectedView != null && selectedView.getBottom() <= listBottom) {\n nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos >= this.mFirstPosition ? selectedPos + 1 : this.mFirstPosition;\n }\n else {\n return ListView.INVALID_POSITION;\n }\n }\n else {\n const listTop = this.mListPadding.top;\n if (selectedView != null && selectedView.getTop() >= listTop) {\n const lastPos = this.mFirstPosition + this.getChildCount() - 1;\n nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos <= lastPos ? selectedPos - 1 : lastPos;\n }\n else {\n return ListView.INVALID_POSITION;\n }\n }\n if (nextSelected < 0 || nextSelected >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n return this.lookForSelectablePosition(nextSelected, direction == View.FOCUS_DOWN);\n }\n arrowScrollImpl(direction) {\n if (this.getChildCount() <= 0) {\n return false;\n }\n let selectedView = this.getSelectedView();\n let selectedPos = this.mSelectedPosition;\n let nextSelectedPosition = this.nextSelectedPositionForDirection(selectedView, selectedPos, direction);\n let amountToScroll = this.amountToScroll(direction, nextSelectedPosition);\n const focusResult = this.mItemsCanFocus ? this.arrowScrollFocused(direction) : null;\n if (focusResult != null) {\n nextSelectedPosition = focusResult.getSelectedPosition();\n amountToScroll = focusResult.getAmountToScroll();\n }\n let needToRedraw = focusResult != null;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n this.handleNewSelectionChange(selectedView, direction, nextSelectedPosition, focusResult != null);\n this.setSelectedPositionInt(nextSelectedPosition);\n this.setNextSelectedPositionInt(nextSelectedPosition);\n selectedView = this.getSelectedView();\n selectedPos = nextSelectedPosition;\n if (this.mItemsCanFocus && focusResult == null) {\n const focused = this.getFocusedChild();\n if (focused != null) {\n focused.clearFocus();\n }\n }\n needToRedraw = true;\n this.checkSelectionChanged();\n }\n if (amountToScroll > 0) {\n this.scrollListItemsBy((direction == View.FOCUS_UP) ? amountToScroll : -amountToScroll);\n needToRedraw = true;\n }\n if (this.mItemsCanFocus && (focusResult == null) && selectedView != null && selectedView.hasFocus()) {\n const focused = selectedView.findFocus();\n if (!this.isViewAncestorOf(focused, this) || this.distanceToView(focused) > 0) {\n focused.clearFocus();\n }\n }\n if (nextSelectedPosition == ListView.INVALID_POSITION && selectedView != null && !this.isViewAncestorOf(selectedView, this)) {\n selectedView = null;\n this.hideSelector();\n this.mResurrectToPosition = ListView.INVALID_POSITION;\n }\n if (needToRedraw) {\n if (selectedView != null) {\n this.positionSelector(selectedPos, selectedView);\n this.mSelectedTop = selectedView.getTop();\n }\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n this.invokeOnItemScrollListener();\n return true;\n }\n return false;\n }\n handleNewSelectionChange(selectedView, direction, newSelectedPosition, newFocusAssigned) {\n if (newSelectedPosition == ListView.INVALID_POSITION) {\n throw Error(`new IllegalArgumentException(\"newSelectedPosition needs to be valid\")`);\n }\n let topView;\n let bottomView;\n let topViewIndex, bottomViewIndex;\n let topSelected = false;\n const selectedIndex = this.mSelectedPosition - this.mFirstPosition;\n const nextSelectedIndex = newSelectedPosition - this.mFirstPosition;\n if (direction == View.FOCUS_UP) {\n topViewIndex = nextSelectedIndex;\n bottomViewIndex = selectedIndex;\n topView = this.getChildAt(topViewIndex);\n bottomView = selectedView;\n topSelected = true;\n }\n else {\n topViewIndex = selectedIndex;\n bottomViewIndex = nextSelectedIndex;\n topView = selectedView;\n bottomView = this.getChildAt(bottomViewIndex);\n }\n const numChildren = this.getChildCount();\n if (topView != null) {\n topView.setSelected(!newFocusAssigned && topSelected);\n this.measureAndAdjustDown(topView, topViewIndex, numChildren);\n }\n if (bottomView != null) {\n bottomView.setSelected(!newFocusAssigned && !topSelected);\n this.measureAndAdjustDown(bottomView, bottomViewIndex, numChildren);\n }\n }\n measureAndAdjustDown(child, childIndex, numChildren) {\n let oldHeight = child.getHeight();\n this.measureItem(child);\n if (child.getMeasuredHeight() != oldHeight) {\n this.relayoutMeasuredItem(child);\n const heightDelta = child.getMeasuredHeight() - oldHeight;\n for (let i = childIndex + 1; i < numChildren; i++) {\n this.getChildAt(i).offsetTopAndBottom(heightDelta);\n }\n }\n }\n measureItem(child) {\n let p = child.getLayoutParams();\n if (p == null) {\n p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n relayoutMeasuredItem(child) {\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n const childLeft = this.mListPadding.left;\n const childRight = childLeft + w;\n const childTop = child.getTop();\n const childBottom = childTop + h;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n getArrowScrollPreviewLength() {\n return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS, this.getVerticalFadingEdgeLength());\n }\n amountToScroll(direction, nextSelectedPosition) {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n const listTop = this.mListPadding.top;\n let numChildren = this.getChildCount();\n if (direction == View.FOCUS_DOWN) {\n let indexToMakeVisible = numChildren - 1;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n while (numChildren <= indexToMakeVisible) {\n this.addViewBelow(this.getChildAt(numChildren - 1), this.mFirstPosition + numChildren - 1);\n numChildren++;\n }\n const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible;\n const viewToMakeVisible = this.getChildAt(indexToMakeVisible);\n let goalBottom = listBottom;\n if (positionToMakeVisible < this.mItemCount - 1) {\n goalBottom -= this.getArrowScrollPreviewLength();\n }\n if (viewToMakeVisible.getBottom() <= goalBottom) {\n return 0;\n }\n if (nextSelectedPosition != ListView.INVALID_POSITION && (goalBottom - viewToMakeVisible.getTop()) >= this.getMaxScrollAmount()) {\n return 0;\n }\n let amountToScroll = (viewToMakeVisible.getBottom() - goalBottom);\n if ((this.mFirstPosition + numChildren) == this.mItemCount) {\n const max = this.getChildAt(numChildren - 1).getBottom() - listBottom;\n amountToScroll = Math.min(amountToScroll, max);\n }\n return Math.min(amountToScroll, this.getMaxScrollAmount());\n }\n else {\n let indexToMakeVisible = 0;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n while (indexToMakeVisible < 0) {\n this.addViewAbove(this.getChildAt(0), this.mFirstPosition);\n this.mFirstPosition--;\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible;\n const viewToMakeVisible = this.getChildAt(indexToMakeVisible);\n let goalTop = listTop;\n if (positionToMakeVisible > 0) {\n goalTop += this.getArrowScrollPreviewLength();\n }\n if (viewToMakeVisible.getTop() >= goalTop) {\n return 0;\n }\n if (nextSelectedPosition != ListView.INVALID_POSITION && (viewToMakeVisible.getBottom() - goalTop) >= this.getMaxScrollAmount()) {\n return 0;\n }\n let amountToScroll = (goalTop - viewToMakeVisible.getTop());\n if (this.mFirstPosition == 0) {\n const max = listTop - this.getChildAt(0).getTop();\n amountToScroll = Math.min(amountToScroll, max);\n }\n return Math.min(amountToScroll, this.getMaxScrollAmount());\n }\n }\n lookForSelectablePositionOnScreen(direction) {\n const firstPosition = this.mFirstPosition;\n if (direction == View.FOCUS_DOWN) {\n let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition + 1 : firstPosition;\n if (startPos >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n if (startPos < firstPosition) {\n startPos = firstPosition;\n }\n const lastVisiblePos = this.getLastVisiblePosition();\n const adapter = this.getAdapter();\n for (let pos = startPos; pos <= lastVisiblePos; pos++) {\n if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) {\n return pos;\n }\n }\n }\n else {\n let last = firstPosition + this.getChildCount() - 1;\n let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition - 1 : firstPosition + this.getChildCount() - 1;\n if (startPos < 0 || startPos >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n if (startPos > last) {\n startPos = last;\n }\n const adapter = this.getAdapter();\n for (let pos = startPos; pos >= firstPosition; pos--) {\n if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) {\n return pos;\n }\n }\n }\n return ListView.INVALID_POSITION;\n }\n arrowScrollFocused(direction) {\n const selectedView = this.getSelectedView();\n let newFocus;\n if (selectedView != null && selectedView.hasFocus()) {\n let oldFocus = selectedView.findFocus();\n newFocus = FocusFinder.getInstance().findNextFocus(this, oldFocus, direction);\n }\n else {\n if (direction == View.FOCUS_DOWN) {\n const topFadingEdgeShowing = (this.mFirstPosition > 0);\n const listTop = this.mListPadding.top + (topFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0);\n const ySearchPoint = (selectedView != null && selectedView.getTop() > listTop) ? selectedView.getTop() : listTop;\n this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint);\n }\n else {\n const bottomFadingEdgeShowing = (this.mFirstPosition + this.getChildCount() - 1) < this.mItemCount;\n const listBottom = this.getHeight() - this.mListPadding.bottom - (bottomFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0);\n const ySearchPoint = (selectedView != null && selectedView.getBottom() < listBottom) ? selectedView.getBottom() : listBottom;\n this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint);\n }\n newFocus = FocusFinder.getInstance().findNextFocusFromRect(this, this.mTempRect, direction);\n }\n if (newFocus != null) {\n const positionOfNewFocus = this.positionOfNewFocus(newFocus);\n if (this.mSelectedPosition != ListView.INVALID_POSITION && positionOfNewFocus != this.mSelectedPosition) {\n const selectablePosition = this.lookForSelectablePositionOnScreen(direction);\n if (selectablePosition != ListView.INVALID_POSITION && ((direction == View.FOCUS_DOWN && selectablePosition < positionOfNewFocus) || (direction == View.FOCUS_UP && selectablePosition > positionOfNewFocus))) {\n return null;\n }\n }\n let focusScroll = this.amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus);\n const maxScrollAmount = this.getMaxScrollAmount();\n if (focusScroll < maxScrollAmount) {\n newFocus.requestFocus(direction);\n this.mArrowScrollFocusResult.populate(positionOfNewFocus, focusScroll);\n return this.mArrowScrollFocusResult;\n }\n else if (this.distanceToView(newFocus) < maxScrollAmount) {\n newFocus.requestFocus(direction);\n this.mArrowScrollFocusResult.populate(positionOfNewFocus, maxScrollAmount);\n return this.mArrowScrollFocusResult;\n }\n }\n return null;\n }\n positionOfNewFocus(newFocus) {\n const numChildren = this.getChildCount();\n for (let i = 0; i < numChildren; i++) {\n const child = this.getChildAt(i);\n if (this.isViewAncestorOf(newFocus, child)) {\n return this.mFirstPosition + i;\n }\n }\n throw Error(`new IllegalArgumentException(\"newFocus is not a child of any of the\" + \" children of the list!\")`);\n }\n isViewAncestorOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && this.isViewAncestorOf(theParent, parent);\n }\n amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus) {\n let amountToScroll = 0;\n newFocus.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(newFocus, this.mTempRect);\n if (direction == View.FOCUS_UP) {\n if (this.mTempRect.top < this.mListPadding.top) {\n amountToScroll = this.mListPadding.top - this.mTempRect.top;\n if (positionOfNewFocus > 0) {\n amountToScroll += this.getArrowScrollPreviewLength();\n }\n }\n }\n else {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n if (this.mTempRect.bottom > listBottom) {\n amountToScroll = this.mTempRect.bottom - listBottom;\n if (positionOfNewFocus < this.mItemCount - 1) {\n amountToScroll += this.getArrowScrollPreviewLength();\n }\n }\n }\n return amountToScroll;\n }\n distanceToView(descendant) {\n let distance = 0;\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n const listBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n if (this.mTempRect.bottom < this.mListPadding.top) {\n distance = this.mListPadding.top - this.mTempRect.bottom;\n }\n else if (this.mTempRect.top > listBottom) {\n distance = this.mTempRect.top - listBottom;\n }\n return distance;\n }\n scrollListItemsBy(amount) {\n this.offsetChildrenTopAndBottom(amount);\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n const listTop = this.mListPadding.top;\n const recycleBin = this.mRecycler;\n if (amount < 0) {\n let numChildren = this.getChildCount();\n let last = this.getChildAt(numChildren - 1);\n while (last.getBottom() < listBottom) {\n const lastVisiblePosition = this.mFirstPosition + numChildren - 1;\n if (lastVisiblePosition < this.mItemCount - 1) {\n last = this.addViewBelow(last, lastVisiblePosition);\n numChildren++;\n }\n else {\n break;\n }\n }\n if (last.getBottom() < listBottom) {\n this.offsetChildrenTopAndBottom(listBottom - last.getBottom());\n }\n let first = this.getChildAt(0);\n while (first.getBottom() < listTop) {\n let layoutParams = first.getLayoutParams();\n if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {\n recycleBin.addScrapView(first, this.mFirstPosition);\n }\n this.detachViewFromParent(first);\n first = this.getChildAt(0);\n this.mFirstPosition++;\n }\n }\n else {\n let first = this.getChildAt(0);\n while ((first.getTop() > listTop) && (this.mFirstPosition > 0)) {\n first = this.addViewAbove(first, this.mFirstPosition);\n this.mFirstPosition--;\n }\n if (first.getTop() > listTop) {\n this.offsetChildrenTopAndBottom(listTop - first.getTop());\n }\n let lastIndex = this.getChildCount() - 1;\n let last = this.getChildAt(lastIndex);\n while (last.getTop() > listBottom) {\n let layoutParams = last.getLayoutParams();\n if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {\n recycleBin.addScrapView(last, this.mFirstPosition + lastIndex);\n }\n this.detachViewFromParent(last);\n last = this.getChildAt(--lastIndex);\n }\n }\n }\n addViewAbove(theView, position) {\n let abovePosition = position - 1;\n let view = this.obtainView(abovePosition, this.mIsScrap);\n let edgeOfNewChild = theView.getTop() - this.mDividerHeight;\n this.setupChild(view, abovePosition, edgeOfNewChild, false, this.mListPadding.left, false, this.mIsScrap[0]);\n return view;\n }\n addViewBelow(theView, position) {\n let belowPosition = position + 1;\n let view = this.obtainView(belowPosition, this.mIsScrap);\n let edgeOfNewChild = theView.getBottom() + this.mDividerHeight;\n this.setupChild(view, belowPosition, edgeOfNewChild, true, this.mListPadding.left, false, this.mIsScrap[0]);\n return view;\n }\n setItemsCanFocus(itemsCanFocus) {\n this.mItemsCanFocus = itemsCanFocus;\n if (!itemsCanFocus) {\n this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);\n }\n }\n getItemsCanFocus() {\n return this.mItemsCanFocus;\n }\n isOpaque() {\n let retValue = (this.mCachingActive && this.mIsCacheColorOpaque && this.mDividerIsOpaque && this.hasOpaqueScrollbars()) || super.isOpaque();\n if (retValue) {\n const listTop = this.mListPadding != null ? this.mListPadding.top : this.mPaddingTop;\n let first = this.getChildAt(0);\n if (first == null || first.getTop() > listTop) {\n return false;\n }\n const listBottom = this.getHeight() - (this.mListPadding != null ? this.mListPadding.bottom : this.mPaddingBottom);\n let last = this.getChildAt(this.getChildCount() - 1);\n if (last == null || last.getBottom() < listBottom) {\n return false;\n }\n }\n return retValue;\n }\n setCacheColorHint(color) {\n const opaque = (color >>> 24) == 0xFF;\n this.mIsCacheColorOpaque = opaque;\n if (opaque) {\n if (this.mDividerPaint == null) {\n this.mDividerPaint = new Paint();\n }\n this.mDividerPaint.setColor(color);\n }\n super.setCacheColorHint(color);\n }\n drawOverscrollHeader(canvas, drawable, bounds) {\n const height = drawable.getMinimumHeight();\n canvas.save();\n canvas.clipRect(bounds);\n const span = bounds.bottom - bounds.top;\n if (span < height) {\n bounds.top = bounds.bottom - height;\n }\n drawable.setBounds(bounds);\n drawable.draw(canvas);\n canvas.restore();\n }\n drawOverscrollFooter(canvas, drawable, bounds) {\n const height = drawable.getMinimumHeight();\n canvas.save();\n canvas.clipRect(bounds);\n const span = bounds.bottom - bounds.top;\n if (span < height) {\n bounds.bottom = bounds.top + height;\n }\n drawable.setBounds(bounds);\n drawable.draw(canvas);\n canvas.restore();\n }\n dispatchDraw(canvas) {\n if (this.mCachingStarted) {\n this.mCachingActive = true;\n }\n const dividerHeight = this.mDividerHeight;\n const overscrollHeader = this.mOverScrollHeader;\n const overscrollFooter = this.mOverScrollFooter;\n const drawOverscrollHeader = overscrollHeader != null;\n const drawOverscrollFooter = overscrollFooter != null;\n const drawDividers = dividerHeight > 0 && this.mDivider != null;\n if (drawDividers || drawOverscrollHeader || drawOverscrollFooter) {\n const bounds = this.mTempRect;\n bounds.left = this.mPaddingLeft;\n bounds.right = this.mRight - this.mLeft - this.mPaddingRight;\n const count = this.getChildCount();\n const headerCount = this.mHeaderViewInfos.size();\n const itemCount = this.mItemCount;\n const footerLimit = (itemCount - this.mFooterViewInfos.size());\n const headerDividers = this.mHeaderDividersEnabled;\n const footerDividers = this.mFooterDividersEnabled;\n const first = this.mFirstPosition;\n const areAllItemsSelectable = this.mAreAllItemsSelectable;\n const adapter = this.mAdapter;\n const fillForMissingDividers = this.isOpaque() && !super.isOpaque();\n if (fillForMissingDividers && this.mDividerPaint == null && this.mIsCacheColorOpaque) {\n this.mDividerPaint = new Paint();\n this.mDividerPaint.setColor(this.getCacheColorHint());\n }\n const paint = this.mDividerPaint;\n let effectivePaddingTop = 0;\n let effectivePaddingBottom = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n effectivePaddingTop = this.mListPadding.top;\n effectivePaddingBottom = this.mListPadding.bottom;\n }\n const listBottom = this.mBottom - this.mTop - effectivePaddingBottom + this.mScrollY;\n if (!this.mStackFromBottom) {\n let bottom = 0;\n const scrollY = this.mScrollY;\n if (count > 0 && scrollY < 0) {\n if (drawOverscrollHeader) {\n bounds.bottom = 0;\n bounds.top = scrollY;\n this.drawOverscrollHeader(canvas, overscrollHeader, bounds);\n }\n else if (drawDividers) {\n bounds.bottom = 0;\n bounds.top = -dividerHeight;\n this.drawDivider(canvas, bounds, -1);\n }\n }\n for (let i = 0; i < count; i++) {\n const itemIndex = (first + i);\n const isHeader = (itemIndex < headerCount);\n const isFooter = (itemIndex >= footerLimit);\n if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) {\n const child = this.getChildAt(i);\n bottom = child.getBottom();\n const isLastItem = (i == (count - 1));\n if (drawDividers && (bottom < listBottom) && !(drawOverscrollFooter && isLastItem)) {\n const nextIndex = (itemIndex + 1);\n if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isLastItem || adapter.isEnabled(nextIndex) || (headerDividers && (nextIndex < headerCount)) || (footerDividers && (nextIndex >= footerLimit))))) {\n bounds.top = bottom;\n bounds.bottom = bottom + dividerHeight;\n this.drawDivider(canvas, bounds, i);\n }\n else if (fillForMissingDividers) {\n bounds.top = bottom;\n bounds.bottom = bottom + dividerHeight;\n canvas.drawRect(bounds, paint);\n }\n }\n }\n }\n const overFooterBottom = this.mBottom + this.mScrollY;\n if (drawOverscrollFooter && first + count == itemCount && overFooterBottom > bottom) {\n bounds.top = bottom;\n bounds.bottom = overFooterBottom;\n this.drawOverscrollFooter(canvas, overscrollFooter, bounds);\n }\n }\n else {\n let top;\n const scrollY = this.mScrollY;\n if (count > 0 && drawOverscrollHeader) {\n bounds.top = scrollY;\n bounds.bottom = this.getChildAt(0).getTop();\n this.drawOverscrollHeader(canvas, overscrollHeader, bounds);\n }\n const start = drawOverscrollHeader ? 1 : 0;\n for (let i = start; i < count; i++) {\n const itemIndex = (first + i);\n const isHeader = (itemIndex < headerCount);\n const isFooter = (itemIndex >= footerLimit);\n if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) {\n const child = this.getChildAt(i);\n top = child.getTop();\n if (drawDividers && (top > effectivePaddingTop)) {\n const isFirstItem = (i == start);\n const previousIndex = (itemIndex - 1);\n if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isFirstItem || adapter.isEnabled(previousIndex) || (headerDividers && (previousIndex < headerCount)) || (footerDividers && (previousIndex >= footerLimit))))) {\n bounds.top = top - dividerHeight;\n bounds.bottom = top;\n this.drawDivider(canvas, bounds, i - 1);\n }\n else if (fillForMissingDividers) {\n bounds.top = top - dividerHeight;\n bounds.bottom = top;\n canvas.drawRect(bounds, paint);\n }\n }\n }\n }\n if (count > 0 && scrollY > 0) {\n if (drawOverscrollFooter) {\n const absListBottom = this.mBottom;\n bounds.top = absListBottom;\n bounds.bottom = absListBottom + scrollY;\n this.drawOverscrollFooter(canvas, overscrollFooter, bounds);\n }\n else if (drawDividers) {\n bounds.top = listBottom;\n bounds.bottom = listBottom + dividerHeight;\n this.drawDivider(canvas, bounds, -1);\n }\n }\n }\n }\n super.dispatchDraw(canvas);\n }\n drawChild(canvas, child, drawingTime) {\n let more = super.drawChild(canvas, child, drawingTime);\n if (this.mCachingActive && child.mCachingFailed) {\n this.mCachingActive = false;\n }\n return more;\n }\n drawDivider(canvas, bounds, childIndex) {\n const divider = this.mDivider;\n divider.setBounds(bounds);\n divider.draw(canvas);\n }\n getDivider() {\n return this.mDivider;\n }\n setDivider(divider) {\n if (divider != null) {\n this.mDividerHeight = divider.getIntrinsicHeight();\n }\n else {\n this.mDividerHeight = 0;\n }\n this.mDivider = divider;\n this.mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE;\n this.requestLayout();\n this.invalidate();\n }\n getDividerHeight() {\n return this.mDividerHeight;\n }\n setDividerHeight(height) {\n this.mDividerHeight = height;\n this.requestLayout();\n this.invalidate();\n }\n setHeaderDividersEnabled(headerDividersEnabled) {\n this.mHeaderDividersEnabled = headerDividersEnabled;\n this.invalidate();\n }\n areHeaderDividersEnabled() {\n return this.mHeaderDividersEnabled;\n }\n setFooterDividersEnabled(footerDividersEnabled) {\n this.mFooterDividersEnabled = footerDividersEnabled;\n this.invalidate();\n }\n areFooterDividersEnabled() {\n return this.mFooterDividersEnabled;\n }\n setOverscrollHeader(header) {\n this.mOverScrollHeader = header;\n if (this.mScrollY < 0) {\n this.invalidate();\n }\n }\n getOverscrollHeader() {\n return this.mOverScrollHeader;\n }\n setOverscrollFooter(footer) {\n this.mOverScrollFooter = footer;\n this.invalidate();\n }\n getOverscrollFooter() {\n return this.mOverScrollFooter;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n const adapter = this.mAdapter;\n let closetChildIndex = -1;\n let closestChildTop = 0;\n if (adapter != null && gainFocus && previouslyFocusedRect != null) {\n previouslyFocusedRect.offset(this.mScrollX, this.mScrollY);\n if (adapter.getCount() < this.getChildCount() + this.mFirstPosition) {\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n this.layoutChildren();\n }\n let otherRect = this.mTempRect;\n let minDistance = Integer.MAX_VALUE;\n const childCount = this.getChildCount();\n const firstPosition = this.mFirstPosition;\n for (let i = 0; i < childCount; i++) {\n if (!adapter.isEnabled(firstPosition + i)) {\n continue;\n }\n let other = this.getChildAt(i);\n other.getDrawingRect(otherRect);\n this.offsetDescendantRectToMyCoords(other, otherRect);\n let distance = ListView.getDistance(previouslyFocusedRect, otherRect, direction);\n if (distance < minDistance) {\n minDistance = distance;\n closetChildIndex = i;\n closestChildTop = other.getTop();\n }\n }\n }\n if (closetChildIndex >= 0) {\n this.setSelectionFromTop(closetChildIndex + this.mFirstPosition, closestChildTop);\n }\n else {\n this.requestLayout();\n }\n }\n onFinishInflate() {\n super.onFinishInflate();\n let count = this.getChildCount();\n if (count > 0) {\n for (let i = 0; i < count; ++i) {\n this.addHeaderView(this.getChildAt(i));\n }\n this.removeAllViews();\n }\n }\n findViewTraversal(id) {\n let v;\n v = super.findViewTraversal(id);\n if (v == null) {\n v = this.findViewInHeadersOrFooters(this.mHeaderViewInfos, id);\n if (v != null) {\n return v;\n }\n v = this.findViewInHeadersOrFooters(this.mFooterViewInfos, id);\n if (v != null) {\n return v;\n }\n }\n return v;\n }\n findViewInHeadersOrFooters(where, id) {\n if (where != null) {\n let len = where.size();\n let v;\n for (let i = 0; i < len; i++) {\n v = where.get(i).view;\n if (!v.isRootNamespace()) {\n v = v.findViewById(id);\n if (v != null) {\n return v;\n }\n }\n }\n }\n return null;\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n let v;\n v = super.findViewByPredicateTraversal(predicate, childToSkip);\n if (v == null) {\n v = this.findViewByPredicateInHeadersOrFooters(this.mHeaderViewInfos, predicate, childToSkip);\n if (v != null) {\n return v;\n }\n v = this.findViewByPredicateInHeadersOrFooters(this.mFooterViewInfos, predicate, childToSkip);\n if (v != null) {\n return v;\n }\n }\n return v;\n }\n findViewByPredicateInHeadersOrFooters(where, predicate, childToSkip) {\n if (where != null) {\n let len = where.size();\n let v;\n for (let i = 0; i < len; i++) {\n v = where.get(i).view;\n if (v != childToSkip && !v.isRootNamespace()) {\n v = v.findViewByPredicate(predicate);\n if (v != null) {\n return v;\n }\n }\n }\n }\n return null;\n }\n getCheckItemIds() {\n if (this.mAdapter != null && this.mAdapter.hasStableIds()) {\n return this.getCheckedItemIds();\n }\n if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null && this.mAdapter != null) {\n const states = this.mCheckStates;\n const count = states.size();\n const ids = androidui.util.ArrayCreator.newNumberArray(count);\n const adapter = this.mAdapter;\n let checkedCount = 0;\n for (let i = 0; i < count; i++) {\n if (states.valueAt(i)) {\n ids[checkedCount++] = adapter.getItemId(states.keyAt(i));\n }\n }\n if (checkedCount == count) {\n return ids;\n }\n else {\n const result = androidui.util.ArrayCreator.newNumberArray(checkedCount);\n System.arraycopy(ids, 0, result, 0, checkedCount);\n return result;\n }\n }\n return androidui.util.ArrayCreator.newNumberArray(0);\n }\n }\n ListView.NO_POSITION = -1;\n ListView.MAX_SCROLL_FACTOR = 0.33;\n ListView.MIN_SCROLL_PREVIEW_PIXELS = 2;\n widget.ListView = ListView;\n (function (ListView) {\n class FixedViewInfo {\n constructor(arg) {\n this._ListView_this = arg;\n }\n }\n ListView.FixedViewInfo = FixedViewInfo;\n class FocusSelector {\n constructor(arg) {\n this.mPosition = 0;\n this.mPositionTop = 0;\n this._ListView_this = arg;\n }\n setup(position, top) {\n this.mPosition = position;\n this.mPositionTop = top;\n return this;\n }\n run() {\n this._ListView_this.setSelectionFromTop(this.mPosition, this.mPositionTop);\n }\n }\n ListView.FocusSelector = FocusSelector;\n class ArrowScrollFocusResult {\n constructor() {\n this.mSelectedPosition = 0;\n this.mAmountToScroll = 0;\n }\n populate(selectedPosition, amountToScroll) {\n this.mSelectedPosition = selectedPosition;\n this.mAmountToScroll = amountToScroll;\n }\n getSelectedPosition() {\n return this.mSelectedPosition;\n }\n getAmountToScroll() {\n return this.mAmountToScroll;\n }\n }\n ListView.ArrowScrollFocusResult = ArrowScrollFocusResult;\n })(ListView = widget.ListView || (widget.ListView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var FocusFinder = android.view.FocusFinder;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var FrameLayout = android.widget.FrameLayout;\n var OverScroller = android.widget.OverScroller;\n var ScrollView = android.widget.ScrollView;\n class HorizontalScrollView extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mLastScroll = 0;\n this.mTempRect = new Rect();\n this.mLastMotionX = 0;\n this.mIsLayoutDirty = true;\n this.mChildToScrollTo = null;\n this.mIsBeingDragged = false;\n this.mSmoothScrollingEnabled = true;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mOverscrollDistance = 0;\n this._mOverflingDistance = 0;\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.initScrollView();\n this._attrBinder.addAttr('fillViewport', (value) => {\n this.setFillViewport(this._attrBinder.parseBoolean(value));\n });\n }\n get mOverflingDistance() {\n if (this.mScrollX < -this._mOverflingDistance)\n return -this.mScrollX;\n let overDistance = this.mScrollX - this.getScrollRange();\n if (overDistance > this._mOverflingDistance)\n return overDistance;\n return this._mOverflingDistance;\n }\n set mOverflingDistance(value) {\n this._mOverflingDistance = value;\n }\n getLeftFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getHorizontalFadingEdgeLength();\n if (this.mScrollX < length) {\n return this.mScrollX / length;\n }\n return 1.0;\n }\n getRightFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getHorizontalFadingEdgeLength();\n const rightEdge = this.getWidth() - this.mPaddingRight;\n const span = this.getChildAt(0).getRight() - this.mScrollX - rightEdge;\n if (span < length) {\n return span / length;\n }\n return 1.0;\n }\n getMaxScrollAmount() {\n return Math.floor((HorizontalScrollView.MAX_SCROLL_FACTOR * (this.mRight - this.mLeft)));\n }\n initScrollView() {\n this.mScroller = new OverScroller();\n this.setFocusable(true);\n this.setDescendantFocusability(HorizontalScrollView.FOCUS_AFTER_DESCENDANTS);\n this.setWillNotDraw(false);\n const configuration = ViewConfiguration.get();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this._mOverflingDistance = configuration.getScaledOverflingDistance();\n this.initScrollCache();\n this.setHorizontalScrollBarEnabled(true);\n }\n addView(...args) {\n if (this.getChildCount() > 0) {\n throw new Error(\"ScrollView can host only one direct child\");\n }\n return super.addView(...args);\n }\n canScroll() {\n let child = this.getChildAt(0);\n if (child != null) {\n let childWidth = child.getWidth();\n return this.getWidth() < childWidth + this.mPaddingLeft + this.mPaddingRight;\n }\n return false;\n }\n isFillViewport() {\n return this.mFillViewport;\n }\n setFillViewport(fillViewport) {\n if (fillViewport != this.mFillViewport) {\n this.mFillViewport = fillViewport;\n this.requestLayout();\n }\n }\n isSmoothScrollingEnabled() {\n return this.mSmoothScrollingEnabled;\n }\n setSmoothScrollingEnabled(smoothScrollingEnabled) {\n this.mSmoothScrollingEnabled = smoothScrollingEnabled;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (!this.mFillViewport) {\n return;\n }\n const widthMode = HorizontalScrollView.MeasureSpec.getMode(widthMeasureSpec);\n if (widthMode == HorizontalScrollView.MeasureSpec.UNSPECIFIED) {\n return;\n }\n if (this.getChildCount() > 0) {\n const child = this.getChildAt(0);\n let width = this.getMeasuredWidth();\n if (child.getMeasuredWidth() < width) {\n const lp = child.getLayoutParams();\n let childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n width -= this.mPaddingLeft;\n width -= this.mPaddingRight;\n let childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(width, HorizontalScrollView.MeasureSpec.EXACTLY);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n this.mTempRect.setEmpty();\n if (!this.canScroll()) {\n if (this.isFocused()) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_RIGHT);\n return nextFocused != null && nextFocused != this && nextFocused.requestFocus(View.FOCUS_RIGHT);\n }\n return false;\n }\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_LEFT);\n }\n else {\n handled = this.fullScroll(View.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_RIGHT);\n }\n else {\n handled = this.fullScroll(View.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n this.pageScroll(event.isShiftPressed() ? View.FOCUS_LEFT : View.FOCUS_RIGHT);\n break;\n }\n }\n return handled;\n }\n inChild(x, y) {\n if (this.getChildCount() > 0) {\n const scrollX = this.mScrollX;\n const child = this.getChildAt(0);\n return !(y < child.getTop() || y >= child.getBottom() || x < child.getLeft() - scrollX || x >= child.getRight() - scrollX);\n }\n return false;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction();\n if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) {\n return true;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_MOVE:\n {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == HorizontalScrollView.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n if (pointerIndex == -1) {\n Log.e(HorizontalScrollView.TAG, \"Invalid pointerId=\" + activePointerId + \" in onInterceptTouchEvent\");\n break;\n }\n const x = Math.floor(ev.getX(pointerIndex));\n const xDiff = Math.floor(Math.abs(x - this.mLastMotionX));\n if (xDiff > this.mTouchSlop) {\n this.mIsBeingDragged = true;\n this.mLastMotionX = x;\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n if (this.mParent != null)\n this.mParent.requestDisallowInterceptTouchEvent(true);\n }\n break;\n }\n case MotionEvent.ACTION_DOWN:\n {\n const x = Math.floor(ev.getX());\n if (!this.inChild(Math.floor(x), Math.floor(ev.getY()))) {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n break;\n }\n this.mLastMotionX = x;\n this.mActivePointerId = ev.getPointerId(0);\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n this.mIsBeingDragged = !this.mScroller.isFinished();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mIsBeingDragged = false;\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const index = ev.getActionIndex();\n this.mLastMotionX = Math.floor(ev.getX(index));\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionX = Math.floor(ev.getX(ev.findPointerIndex(this.mActivePointerId)));\n break;\n }\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n if (this.getChildCount() == 0) {\n return false;\n }\n if ((this.mIsBeingDragged = !this.mScroller.isFinished())) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.mLastMotionX = Math.floor(ev.getX());\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex == -1) {\n Log.e(HorizontalScrollView.TAG, \"Invalid pointerId=\" + this.mActivePointerId + \" in onTouchEvent\");\n break;\n }\n const x = Math.floor(ev.getX(activePointerIndex));\n let deltaX = this.mLastMotionX - x;\n if (!this.mIsBeingDragged && Math.abs(deltaX) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.mIsBeingDragged = true;\n if (deltaX > 0) {\n deltaX -= this.mTouchSlop;\n }\n else {\n deltaX += this.mTouchSlop;\n }\n }\n if (this.mIsBeingDragged) {\n this.mLastMotionX = x;\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == HorizontalScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n if (this.overScrollBy(deltaX, 0, this.mScrollX, 0, range, 0, this.mOverscrollDistance, 0, true)) {\n this.mVelocityTracker.clear();\n }\n if (canOverscroll) {\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));\n if (this.getChildCount() > 0) {\n let isOverDrag = this.mScrollX < 0 || this.mScrollX > this.getScrollRange();\n if (!isOverDrag && (Math.abs(initialVelocity) > this.mMinimumVelocity)) {\n this.fling(-initialVelocity);\n }\n else {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged && this.getChildCount() > 0) {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n return true;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionX = Math.floor(ev.getX(newPointerIndex));\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n onGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL:\n {\n if (!this.mIsBeingDragged) {\n let hscroll;\n hscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (hscroll != 0) {\n const delta = Math.floor((hscroll * this.getHorizontalScrollFactor()));\n const range = this.getScrollRange();\n let oldScrollX = this.mScrollX;\n let newScrollX = oldScrollX + delta;\n if (newScrollX < 0) {\n newScrollX = 0;\n }\n else if (newScrollX > range) {\n newScrollX = range;\n }\n if (newScrollX != oldScrollX) {\n super.scrollTo(newScrollX, this.mScrollY);\n return true;\n }\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n shouldDelayChildPressedState() {\n return true;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (!this.mScroller.isFinished()) {\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n this.mScrollX = scrollX;\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (clampedX) {\n this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0);\n }\n }\n else {\n super.scrollTo(scrollX, scrollY);\n }\n this.awakenScrollBars();\n }\n getScrollRange() {\n let scrollRange = 0;\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n scrollRange = Math.max(0, child.getWidth() - (this.getWidth() - this.mPaddingLeft - this.mPaddingRight));\n }\n return scrollRange;\n }\n findFocusableViewInMyBounds(leftFocus, left, preferredFocusable) {\n const fadingEdgeLength = this.getHorizontalFadingEdgeLength() / 2;\n const leftWithoutFadingEdge = left + fadingEdgeLength;\n const rightWithoutFadingEdge = left + this.getWidth() - fadingEdgeLength;\n if ((preferredFocusable != null) && (preferredFocusable.getLeft() < rightWithoutFadingEdge) && (preferredFocusable.getRight() > leftWithoutFadingEdge)) {\n return preferredFocusable;\n }\n return this.findFocusableViewInBounds(leftFocus, leftWithoutFadingEdge, rightWithoutFadingEdge);\n }\n findFocusableViewInBounds(leftFocus, left, right) {\n let focusables = this.getFocusables(View.FOCUS_FORWARD);\n let focusCandidate = null;\n let foundFullyContainedFocusable = false;\n let count = focusables.size();\n for (let i = 0; i < count; i++) {\n let view = focusables.get(i);\n let viewLeft = view.getLeft();\n let viewRight = view.getRight();\n if (left < viewRight && viewLeft < right) {\n const viewIsFullyContained = (left < viewLeft) && (viewRight < right);\n if (focusCandidate == null) {\n focusCandidate = view;\n foundFullyContainedFocusable = viewIsFullyContained;\n }\n else {\n const viewIsCloserToBoundary = (leftFocus && viewLeft < focusCandidate.getLeft()) || (!leftFocus && viewRight > focusCandidate.getRight());\n if (foundFullyContainedFocusable) {\n if (viewIsFullyContained && viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n else {\n if (viewIsFullyContained) {\n focusCandidate = view;\n foundFullyContainedFocusable = true;\n }\n else if (viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n }\n }\n }\n return focusCandidate;\n }\n pageScroll(direction) {\n let right = direction == View.FOCUS_RIGHT;\n let width = this.getWidth();\n if (right) {\n this.mTempRect.left = this.getScrollX() + width;\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(0);\n if (this.mTempRect.left + width > view.getRight()) {\n this.mTempRect.left = view.getRight() - width;\n }\n }\n }\n else {\n this.mTempRect.left = this.getScrollX() - width;\n if (this.mTempRect.left < 0) {\n this.mTempRect.left = 0;\n }\n }\n this.mTempRect.right = this.mTempRect.left + width;\n return this.scrollAndFocus(direction, this.mTempRect.left, this.mTempRect.right);\n }\n fullScroll(direction) {\n let right = direction == View.FOCUS_RIGHT;\n let width = this.getWidth();\n this.mTempRect.left = 0;\n this.mTempRect.right = width;\n if (right) {\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(0);\n this.mTempRect.right = view.getRight();\n this.mTempRect.left = this.mTempRect.right - width;\n }\n }\n return this.scrollAndFocus(direction, this.mTempRect.left, this.mTempRect.right);\n }\n scrollAndFocus(direction, left, right) {\n let handled = true;\n let width = this.getWidth();\n let containerLeft = this.getScrollX();\n let containerRight = containerLeft + width;\n let goLeft = direction == View.FOCUS_LEFT;\n let newFocused = this.findFocusableViewInBounds(goLeft, left, right);\n if (newFocused == null) {\n newFocused = this;\n }\n if (left >= containerLeft && right <= containerRight) {\n handled = false;\n }\n else {\n let delta = goLeft ? (left - containerLeft) : (right - containerRight);\n this.doScrollX(delta);\n }\n if (newFocused != this.findFocus())\n newFocused.requestFocus(direction);\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n const maxJump = this.getMaxScrollAmount();\n if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump)) {\n nextFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollX(scrollDelta);\n nextFocused.requestFocus(direction);\n }\n else {\n let scrollDelta = maxJump;\n if (direction == View.FOCUS_LEFT && this.getScrollX() < scrollDelta) {\n scrollDelta = this.getScrollX();\n }\n else if (direction == View.FOCUS_RIGHT && this.getChildCount() > 0) {\n let daRight = this.getChildAt(0).getRight();\n let screenRight = this.getScrollX() + this.getWidth();\n if (daRight - screenRight < maxJump) {\n scrollDelta = daRight - screenRight;\n }\n }\n if (scrollDelta == 0) {\n return false;\n }\n this.doScrollX(direction == View.FOCUS_RIGHT ? scrollDelta : -scrollDelta);\n }\n if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) {\n const descendantFocusability = this.getDescendantFocusability();\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.requestFocus();\n this.setDescendantFocusability(descendantFocusability);\n }\n return true;\n }\n isOffScreen(descendant) {\n return !this.isWithinDeltaOfScreen(descendant, 0);\n }\n isWithinDeltaOfScreen(descendant, delta) {\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n return (this.mTempRect.right + delta) >= this.getScrollX() && (this.mTempRect.left - delta) <= (this.getScrollX() + this.getWidth());\n }\n doScrollX(delta) {\n if (delta != 0) {\n if (this.mSmoothScrollingEnabled) {\n this.smoothScrollBy(delta, 0);\n }\n else {\n this.scrollBy(delta, 0);\n }\n }\n }\n smoothScrollBy(dx, dy) {\n if (this.getChildCount() == 0) {\n return;\n }\n let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll;\n if (duration > HorizontalScrollView.ANIMATED_SCROLL_GAP) {\n const width = this.getWidth() - this.mPaddingRight - this.mPaddingLeft;\n const right = this.getChildAt(0).getWidth();\n const maxX = Math.max(0, right - width);\n const scrollX = this.mScrollX;\n dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX;\n this.mScroller.startScroll(scrollX, this.mScrollY, dx, 0);\n this.postInvalidateOnAnimation();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = AnimationUtils.currentAnimationTimeMillis();\n }\n smoothScrollTo(x, y) {\n this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY);\n }\n computeHorizontalScrollRange() {\n const count = this.getChildCount();\n const contentWidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n if (count == 0) {\n return contentWidth;\n }\n let scrollRange = this.getChildAt(0).getRight();\n const scrollX = this.mScrollX;\n const overscrollRight = Math.max(0, scrollRange - contentWidth);\n if (scrollX < 0) {\n scrollRange -= scrollX;\n }\n else if (scrollX > overscrollRight) {\n scrollRange += scrollX - overscrollRight;\n }\n return scrollRange;\n }\n computeHorizontalScrollOffset() {\n return Math.max(0, super.computeHorizontalScrollOffset());\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(0, HorizontalScrollView.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n const lp = child.getLayoutParams();\n const childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin + heightUsed, lp.height);\n const childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(lp.leftMargin + lp.rightMargin, HorizontalScrollView.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n computeScroll() {\n if (this.mScroller.computeScrollOffset()) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == HorizontalScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n this.overScrollBy(x - oldX, y - oldY, oldX, oldY, range, 0, this.mOverflingDistance, 0, false);\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (canOverscroll) {\n }\n }\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n scrollToChild(child) {\n child.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(child, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n if (scrollDelta != 0) {\n this.scrollBy(scrollDelta, 0);\n }\n }\n scrollToChildRect(rect, immediate) {\n const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect);\n const scroll = delta != 0;\n if (scroll) {\n if (immediate) {\n this.scrollBy(delta, 0);\n }\n else {\n this.smoothScrollBy(delta, 0);\n }\n }\n return scroll;\n }\n computeScrollDeltaToGetChildRectOnScreen(rect) {\n if (this.getChildCount() == 0)\n return 0;\n let width = this.getWidth();\n let screenLeft = this.getScrollX();\n let screenRight = screenLeft + width;\n let fadingEdge = this.getHorizontalFadingEdgeLength();\n if (rect.left > 0) {\n screenLeft += fadingEdge;\n }\n if (rect.right < this.getChildAt(0).getWidth()) {\n screenRight -= fadingEdge;\n }\n let scrollXDelta = 0;\n if (rect.right > screenRight && rect.left > screenLeft) {\n if (rect.width() > width) {\n scrollXDelta += (rect.left - screenLeft);\n }\n else {\n scrollXDelta += (rect.right - screenRight);\n }\n let right = this.getChildAt(0).getRight();\n let distanceToRight = right - screenRight;\n scrollXDelta = Math.min(scrollXDelta, distanceToRight);\n }\n else if (rect.left < screenLeft && rect.right < screenRight) {\n if (rect.width() > width) {\n scrollXDelta -= (screenRight - rect.right);\n }\n else {\n scrollXDelta -= (screenLeft - rect.left);\n }\n scrollXDelta = Math.max(scrollXDelta, -this.getScrollX());\n }\n return scrollXDelta;\n }\n requestChildFocus(child, focused) {\n if (!this.mIsLayoutDirty) {\n this.scrollToChild(focused);\n }\n else {\n this.mChildToScrollTo = focused;\n }\n super.requestChildFocus(child, focused);\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n if (direction == View.FOCUS_FORWARD) {\n direction = View.FOCUS_RIGHT;\n }\n else if (direction == View.FOCUS_BACKWARD) {\n direction = View.FOCUS_LEFT;\n }\n const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction);\n if (nextFocus == null) {\n return false;\n }\n if (this.isOffScreen(nextFocus)) {\n return false;\n }\n return nextFocus.requestFocus(direction, previouslyFocusedRect);\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY());\n return this.scrollToChildRect(rectangle, immediate);\n }\n requestLayout() {\n this.mIsLayoutDirty = true;\n super.requestLayout();\n }\n onLayout(changed, l, t, r, b) {\n let childWidth = 0;\n let childMargins = 0;\n if (this.getChildCount() > 0) {\n childWidth = this.getChildAt(0).getMeasuredWidth();\n let childParams = this.getChildAt(0).getLayoutParams();\n childMargins = childParams.leftMargin + childParams.rightMargin;\n }\n const available = r - l - this.getPaddingLeftWithForeground() - this.getPaddingRightWithForeground() - childMargins;\n const forceLeftGravity = (childWidth > available);\n this.layoutChildren(l, t, r, b, forceLeftGravity);\n this.mIsLayoutDirty = false;\n if (this.mChildToScrollTo != null && HorizontalScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) {\n this.scrollToChild(this.mChildToScrollTo);\n }\n this.mChildToScrollTo = null;\n if (!this.isLaidOut()) {\n const scrollRange = Math.max(0, childWidth - (r - l - this.mPaddingLeft - this.mPaddingRight));\n {\n if (this.isLayoutRtl()) {\n this.mScrollX = scrollRange - this.mScrollX;\n }\n }\n if (this.mScrollX > scrollRange) {\n this.mScrollX = scrollRange;\n }\n else if (this.mScrollX < 0) {\n this.mScrollX = 0;\n }\n }\n this.scrollTo(this.mScrollX, this.mScrollY);\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n let currentFocused = this.findFocus();\n if (null == currentFocused || this == currentFocused)\n return;\n const maxJump = this.mRight - this.mLeft;\n if (this.isWithinDeltaOfScreen(currentFocused, maxJump)) {\n currentFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollX(scrollDelta);\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && HorizontalScrollView.isViewDescendantOf(theParent, parent);\n }\n fling(velocityX) {\n if (this.getChildCount() > 0) {\n let width = this.getWidth() - this.mPaddingRight - this.mPaddingLeft;\n let right = this.getChildAt(0).getWidth();\n this.mScroller.fling(this.mScrollX, this.mScrollY, velocityX, 0, 0, Math.max(0, right - width), 0, 0, width / 2, 0);\n const movingRight = velocityX > 0;\n let currentFocused = this.findFocus();\n let newFocused = this.findFocusableViewInMyBounds(movingRight, this.mScroller.getFinalX(), currentFocused);\n if (newFocused == null) {\n newFocused = this;\n }\n if (newFocused != currentFocused) {\n newFocused.requestFocus(movingRight ? View.FOCUS_RIGHT : View.FOCUS_LEFT);\n }\n this.postInvalidateOnAnimation();\n }\n }\n scrollTo(x, y) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n x = HorizontalScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth());\n y = HorizontalScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight());\n if (x != this.mScrollX || y != this.mScrollY) {\n super.scrollTo(x, y);\n }\n }\n }\n setOverScrollMode(mode) {\n super.setOverScrollMode(mode);\n }\n draw(canvas) {\n super.draw(canvas);\n }\n static clamp(n, my, child) {\n if (my >= child || n < 0) {\n return 0;\n }\n if ((my + n) > child) {\n return child - my;\n }\n return n;\n }\n }\n HorizontalScrollView.ANIMATED_SCROLL_GAP = ScrollView.ANIMATED_SCROLL_GAP;\n HorizontalScrollView.MAX_SCROLL_FACTOR = ScrollView.MAX_SCROLL_FACTOR;\n HorizontalScrollView.TAG = \"HorizontalScrollView\";\n HorizontalScrollView.INVALID_POINTER = -1;\n widget.HorizontalScrollView = HorizontalScrollView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayMap = android.util.ArrayMap;\n var ArrayDeque = java.util.ArrayDeque;\n var ArrayList = java.util.ArrayList;\n var Rect = android.graphics.Rect;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var SparseMap = android.util.SparseMap;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n class RelativeLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBaselineView = null;\n this.mGravity = Gravity.START | Gravity.TOP;\n this.mContentBounds = new Rect();\n this.mSelfBounds = new Rect();\n this.mIgnoreGravity = View.NO_ID;\n this.mGraph = new RelativeLayout.DependencyGraph();\n this.mAllowBrokenMeasureSpecs = false;\n this.mMeasureVerticalWithPaddingMargin = false;\n this._attrBinder.addAttr('ignoreGravity', (value) => {\n this.setIgnoreGravity(value);\n });\n this._attrBinder.addAttr('gravity', (value) => {\n this.setGravity(this._attrBinder.parseGravity(value, this.mGravity));\n });\n this.queryCompatibilityModes();\n }\n queryCompatibilityModes() {\n this.mAllowBrokenMeasureSpecs = false;\n this.mMeasureVerticalWithPaddingMargin = true;\n }\n shouldDelayChildPressedState() {\n return false;\n }\n setIgnoreGravity(viewId) {\n this.mIgnoreGravity = viewId;\n }\n getGravity() {\n return this.mGravity;\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.START;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n setHorizontalGravity(horizontalGravity) {\n const gravity = horizontalGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n setVerticalGravity(verticalGravity) {\n const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n getBaseline() {\n return this.mBaselineView != null ? this.mBaselineView.getBaseline() : super.getBaseline();\n }\n requestLayout() {\n super.requestLayout();\n this.mDirtyHierarchy = true;\n }\n sortChildren() {\n const count = this.getChildCount();\n if (this.mSortedVerticalChildren == null || this.mSortedVerticalChildren.length != count) {\n this.mSortedVerticalChildren = new Array(count);\n }\n if (this.mSortedHorizontalChildren == null || this.mSortedHorizontalChildren.length != count) {\n this.mSortedHorizontalChildren = new Array(count);\n }\n const graph = this.mGraph;\n graph.clear();\n for (let i = 0; i < count; i++) {\n graph.add(this.getChildAt(i));\n }\n graph.getSortedViews(this.mSortedVerticalChildren, RelativeLayout.RULES_VERTICAL);\n graph.getSortedViews(this.mSortedHorizontalChildren, RelativeLayout.RULES_HORIZONTAL);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mDirtyHierarchy) {\n this.mDirtyHierarchy = false;\n this.sortChildren();\n }\n let myWidth = -1;\n let myHeight = -1;\n let width = 0;\n let height = 0;\n const widthMode = RelativeLayout.MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = RelativeLayout.MeasureSpec.getMode(heightMeasureSpec);\n const widthSize = RelativeLayout.MeasureSpec.getSize(widthMeasureSpec);\n const heightSize = RelativeLayout.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode != RelativeLayout.MeasureSpec.UNSPECIFIED) {\n myWidth = widthSize;\n }\n if (heightMode != RelativeLayout.MeasureSpec.UNSPECIFIED) {\n myHeight = heightSize;\n }\n if (widthMode == RelativeLayout.MeasureSpec.EXACTLY) {\n width = myWidth;\n }\n if (heightMode == RelativeLayout.MeasureSpec.EXACTLY) {\n height = myHeight;\n }\n this.mHasBaselineAlignedChild = false;\n let ignore = null;\n let gravity = this.mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;\n const horizontalGravity = gravity != Gravity.START && gravity != 0;\n gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const verticalGravity = gravity != Gravity.TOP && gravity != 0;\n let left = Integer.MAX_VALUE;\n let top = Integer.MAX_VALUE;\n let right = Integer.MIN_VALUE;\n let bottom = Integer.MIN_VALUE;\n let offsetHorizontalAxis = false;\n let offsetVerticalAxis = false;\n if ((horizontalGravity || verticalGravity) && this.mIgnoreGravity != View.NO_ID) {\n ignore = this.findViewById(this.mIgnoreGravity);\n }\n const isWrapContentWidth = widthMode != RelativeLayout.MeasureSpec.EXACTLY;\n const isWrapContentHeight = heightMode != RelativeLayout.MeasureSpec.EXACTLY;\n const layoutDirection = this.getLayoutDirection();\n if (this.isLayoutRtl() && myWidth == -1) {\n myWidth = RelativeLayout.DEFAULT_WIDTH;\n }\n let views = this.mSortedHorizontalChildren;\n let count = views.length;\n for (let i = 0; i < count; i++) {\n let child = views[i];\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n let rules = params.getRules(layoutDirection);\n this.applyHorizontalSizeRules(params, myWidth, rules);\n this.measureChildHorizontal(child, params, myWidth, myHeight);\n if (this.positionChildHorizontal(child, params, myWidth, isWrapContentWidth)) {\n offsetHorizontalAxis = true;\n }\n }\n }\n views = this.mSortedVerticalChildren;\n count = views.length;\n for (let i = 0; i < count; i++) {\n let child = views[i];\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n this.applyVerticalSizeRules(params, myHeight);\n this._measureChild(child, params, myWidth, myHeight);\n if (this.positionChildVertical(child, params, myHeight, isWrapContentHeight)) {\n offsetVerticalAxis = true;\n }\n if (isWrapContentWidth) {\n if (this.isLayoutRtl()) {\n width = Math.max(width, myWidth - params.mLeft - params.leftMargin);\n }\n else {\n width = Math.max(width, params.mRight + params.rightMargin);\n }\n }\n if (isWrapContentHeight) {\n height = Math.max(height, params.mBottom + params.bottomMargin);\n }\n if (child != ignore || verticalGravity) {\n left = Math.min(left, params.mLeft - params.leftMargin);\n top = Math.min(top, params.mTop - params.topMargin);\n }\n if (child != ignore || horizontalGravity) {\n right = Math.max(right, params.mRight + params.rightMargin);\n bottom = Math.max(bottom, params.mBottom + params.bottomMargin);\n }\n }\n }\n if (this.mHasBaselineAlignedChild) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n this.alignBaseline(child, params);\n if (child != ignore || verticalGravity) {\n left = Math.min(left, params.mLeft - params.leftMargin);\n top = Math.min(top, params.mTop - params.topMargin);\n }\n if (child != ignore || horizontalGravity) {\n right = Math.max(right, params.mRight + params.rightMargin);\n bottom = Math.max(bottom, params.mBottom + params.bottomMargin);\n }\n }\n }\n }\n if (isWrapContentWidth) {\n width += this.mPaddingRight;\n if (this.mLayoutParams != null && this.mLayoutParams.width >= 0) {\n width = Math.max(width, this.mLayoutParams.width);\n }\n width = Math.max(width, this.getSuggestedMinimumWidth());\n width = RelativeLayout.resolveSize(width, widthMeasureSpec);\n if (offsetHorizontalAxis) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n const rules = params.getRules(layoutDirection);\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_HORIZONTAL] != null) {\n RelativeLayout.centerHorizontal(child, params, width);\n }\n else if (rules[RelativeLayout.ALIGN_PARENT_RIGHT] != null) {\n const childWidth = child.getMeasuredWidth();\n params.mLeft = width - this.mPaddingRight - childWidth;\n params.mRight = params.mLeft + childWidth;\n }\n }\n }\n }\n }\n if (isWrapContentHeight) {\n height += this.mPaddingBottom;\n if (this.mLayoutParams != null && this.mLayoutParams.height >= 0) {\n height = Math.max(height, this.mLayoutParams.height);\n }\n height = Math.max(height, this.getSuggestedMinimumHeight());\n height = RelativeLayout.resolveSize(height, heightMeasureSpec);\n if (offsetVerticalAxis) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n const rules = params.getRules(layoutDirection);\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_VERTICAL] != null) {\n RelativeLayout.centerVertical(child, params, height);\n }\n else if (rules[RelativeLayout.ALIGN_PARENT_BOTTOM] != null) {\n const childHeight = child.getMeasuredHeight();\n params.mTop = height - this.mPaddingBottom - childHeight;\n params.mBottom = params.mTop + childHeight;\n }\n }\n }\n }\n }\n if (horizontalGravity || verticalGravity) {\n const selfBounds = this.mSelfBounds;\n selfBounds.set(this.mPaddingLeft, this.mPaddingTop, width - this.mPaddingRight, height - this.mPaddingBottom);\n const contentBounds = this.mContentBounds;\n Gravity.apply(this.mGravity, right - left, bottom - top, selfBounds, contentBounds, layoutDirection);\n const horizontalOffset = contentBounds.left - left;\n const verticalOffset = contentBounds.top - top;\n if (horizontalOffset != 0 || verticalOffset != 0) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE && child != ignore) {\n let params = child.getLayoutParams();\n if (horizontalGravity) {\n params.mLeft += horizontalOffset;\n params.mRight += horizontalOffset;\n }\n if (verticalGravity) {\n params.mTop += verticalOffset;\n params.mBottom += verticalOffset;\n }\n }\n }\n }\n }\n if (this.isLayoutRtl()) {\n const offsetWidth = myWidth - width;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n params.mLeft -= offsetWidth;\n params.mRight -= offsetWidth;\n }\n }\n }\n this.setMeasuredDimension(width, height);\n }\n alignBaseline(child, params) {\n const layoutDirection = this.getLayoutDirection();\n let rules = params.getRules(layoutDirection);\n let anchorBaseline = this.getRelatedViewBaseline(rules, RelativeLayout.ALIGN_BASELINE);\n if (anchorBaseline != -1) {\n let anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_BASELINE);\n if (anchorParams != null) {\n let offset = anchorParams.mTop + anchorBaseline;\n let baseline = child.getBaseline();\n if (baseline != -1) {\n offset -= baseline;\n }\n let height = params.mBottom - params.mTop;\n params.mTop = offset;\n params.mBottom = params.mTop + height;\n }\n }\n if (this.mBaselineView == null) {\n this.mBaselineView = child;\n }\n else {\n let lp = this.mBaselineView.getLayoutParams();\n if (params.mTop < lp.mTop || (params.mTop == lp.mTop && params.mLeft < lp.mLeft)) {\n this.mBaselineView = child;\n }\n }\n }\n _measureChild(child, params, myWidth, myHeight) {\n let childWidthMeasureSpec = this.getChildMeasureSpec(params.mLeft, params.mRight, params.width, params.leftMargin, params.rightMargin, this.mPaddingLeft, this.mPaddingRight, myWidth);\n let childHeightMeasureSpec = this.getChildMeasureSpec(params.mTop, params.mBottom, params.height, params.topMargin, params.bottomMargin, this.mPaddingTop, this.mPaddingBottom, myHeight);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildHorizontal(child, params, myWidth, myHeight) {\n let childWidthMeasureSpec = this.getChildMeasureSpec(params.mLeft, params.mRight, params.width, params.leftMargin, params.rightMargin, this.mPaddingLeft, this.mPaddingRight, myWidth);\n let maxHeight = myHeight;\n if (this.mMeasureVerticalWithPaddingMargin) {\n maxHeight = Math.max(0, myHeight - this.mPaddingTop - this.mPaddingBottom - params.topMargin - params.bottomMargin);\n }\n let childHeightMeasureSpec;\n if (myHeight < 0 && !this.mAllowBrokenMeasureSpecs) {\n if (params.height >= 0) {\n childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(params.height, RelativeLayout.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(0, RelativeLayout.MeasureSpec.UNSPECIFIED);\n }\n }\n else if (params.width == RelativeLayout.LayoutParams.MATCH_PARENT) {\n childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight, RelativeLayout.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight, RelativeLayout.MeasureSpec.AT_MOST);\n }\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n getChildMeasureSpec(childStart, childEnd, childSize, startMargin, endMargin, startPadding, endPadding, mySize) {\n if (mySize < 0 && !this.mAllowBrokenMeasureSpecs) {\n if (childSize >= 0) {\n return RelativeLayout.MeasureSpec.makeMeasureSpec(childSize, RelativeLayout.MeasureSpec.EXACTLY);\n }\n return RelativeLayout.MeasureSpec.makeMeasureSpec(0, RelativeLayout.MeasureSpec.UNSPECIFIED);\n }\n let childSpecMode = 0;\n let childSpecSize = 0;\n let tempStart = childStart;\n let tempEnd = childEnd;\n if (tempStart < 0) {\n tempStart = startPadding + startMargin;\n }\n if (tempEnd < 0) {\n tempEnd = mySize - endPadding - endMargin;\n }\n let maxAvailable = tempEnd - tempStart;\n if (childStart >= 0 && childEnd >= 0) {\n childSpecMode = RelativeLayout.MeasureSpec.EXACTLY;\n childSpecSize = maxAvailable;\n }\n else {\n if (childSize >= 0) {\n childSpecMode = RelativeLayout.MeasureSpec.EXACTLY;\n if (maxAvailable >= 0) {\n childSpecSize = Math.min(maxAvailable, childSize);\n }\n else {\n childSpecSize = childSize;\n }\n }\n else if (childSize == RelativeLayout.LayoutParams.MATCH_PARENT) {\n childSpecMode = RelativeLayout.MeasureSpec.EXACTLY;\n childSpecSize = maxAvailable;\n }\n else if (childSize == RelativeLayout.LayoutParams.WRAP_CONTENT) {\n if (maxAvailable >= 0) {\n childSpecMode = RelativeLayout.MeasureSpec.AT_MOST;\n childSpecSize = maxAvailable;\n }\n else {\n childSpecMode = RelativeLayout.MeasureSpec.UNSPECIFIED;\n childSpecSize = 0;\n }\n }\n }\n return RelativeLayout.MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode);\n }\n positionChildHorizontal(child, params, myWidth, wrapContent) {\n const layoutDirection = this.getLayoutDirection();\n let rules = params.getRules(layoutDirection);\n if (params.mLeft < 0 && params.mRight >= 0) {\n params.mLeft = params.mRight - child.getMeasuredWidth();\n }\n else if (params.mLeft >= 0 && params.mRight < 0) {\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n else if (params.mLeft < 0 && params.mRight < 0) {\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_HORIZONTAL] != null) {\n if (!wrapContent) {\n RelativeLayout.centerHorizontal(child, params, myWidth);\n }\n else {\n params.mLeft = this.mPaddingLeft + params.leftMargin;\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n return true;\n }\n else {\n if (this.isLayoutRtl()) {\n params.mRight = myWidth - this.mPaddingRight - params.rightMargin;\n params.mLeft = params.mRight - child.getMeasuredWidth();\n }\n else {\n params.mLeft = this.mPaddingLeft + params.leftMargin;\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n }\n }\n return rules[RelativeLayout.ALIGN_PARENT_END] != null;\n }\n positionChildVertical(child, params, myHeight, wrapContent) {\n let rules = params.getRules();\n if (params.mTop < 0 && params.mBottom >= 0) {\n params.mTop = params.mBottom - child.getMeasuredHeight();\n }\n else if (params.mTop >= 0 && params.mBottom < 0) {\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n else if (params.mTop < 0 && params.mBottom < 0) {\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_VERTICAL] != null) {\n if (!wrapContent) {\n RelativeLayout.centerVertical(child, params, myHeight);\n }\n else {\n params.mTop = this.mPaddingTop + params.topMargin;\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n return true;\n }\n else {\n params.mTop = this.mPaddingTop + params.topMargin;\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n }\n return rules[RelativeLayout.ALIGN_PARENT_BOTTOM] != null;\n }\n applyHorizontalSizeRules(childParams, myWidth, rules) {\n let anchorParams;\n childParams.mLeft = -1;\n childParams.mRight = -1;\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.LEFT_OF);\n if (anchorParams != null) {\n childParams.mRight = anchorParams.mLeft - (anchorParams.leftMargin + childParams.rightMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.LEFT_OF] != null) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.RIGHT_OF);\n if (anchorParams != null) {\n childParams.mLeft = anchorParams.mRight + (anchorParams.rightMargin + childParams.leftMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.RIGHT_OF] != null) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_LEFT);\n if (anchorParams != null) {\n childParams.mLeft = anchorParams.mLeft + childParams.leftMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_LEFT] != null) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_RIGHT);\n if (anchorParams != null) {\n childParams.mRight = anchorParams.mRight - childParams.rightMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_RIGHT] != null) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_LEFT]) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_RIGHT]) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n }\n applyVerticalSizeRules(childParams, myHeight) {\n let rules = childParams.getRules();\n let anchorParams;\n childParams.mTop = -1;\n childParams.mBottom = -1;\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ABOVE);\n if (anchorParams != null) {\n childParams.mBottom = anchorParams.mTop - (anchorParams.topMargin + childParams.bottomMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ABOVE] != null) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.BELOW);\n if (anchorParams != null) {\n childParams.mTop = anchorParams.mBottom + (anchorParams.bottomMargin + childParams.topMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.BELOW] != null) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_TOP);\n if (anchorParams != null) {\n childParams.mTop = anchorParams.mTop + childParams.topMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_TOP] != null) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_BOTTOM);\n if (anchorParams != null) {\n childParams.mBottom = anchorParams.mBottom - childParams.bottomMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_BOTTOM] != null) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_TOP]) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_BOTTOM]) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n if (rules[RelativeLayout.ALIGN_BASELINE] != null) {\n this.mHasBaselineAlignedChild = true;\n }\n }\n getRelatedView(rules, relation) {\n let id = rules[relation];\n if (id != null) {\n let node = this.mGraph.mKeyNodes.get(id);\n if (node == null)\n return null;\n let v = node.view;\n while (v.getVisibility() == View.GONE) {\n rules = v.getLayoutParams().getRules(v.getLayoutDirection());\n node = this.mGraph.mKeyNodes.get((rules[relation]));\n if (node == null)\n return null;\n v = node.view;\n }\n return v;\n }\n return null;\n }\n getRelatedViewParams(rules, relation) {\n let v = this.getRelatedView(rules, relation);\n if (v != null) {\n let params = v.getLayoutParams();\n if (params instanceof RelativeLayout.LayoutParams) {\n return v.getLayoutParams();\n }\n }\n return null;\n }\n getRelatedViewBaseline(rules, relation) {\n let v = this.getRelatedView(rules, relation);\n if (v != null) {\n return v.getBaseline();\n }\n return -1;\n }\n static centerHorizontal(child, params, myWidth) {\n let childWidth = child.getMeasuredWidth();\n let left = (myWidth - childWidth) / 2;\n params.mLeft = left;\n params.mRight = left + childWidth;\n }\n static centerVertical(child, params, myHeight) {\n let childHeight = child.getMeasuredHeight();\n let top = (myHeight - childHeight) / 2;\n params.mTop = top;\n params.mBottom = top + childHeight;\n }\n onLayout(changed, l, t, r, b) {\n const count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let st = child.getLayoutParams();\n child.layout(st.mLeft, st.mTop, st.mRight, st.mBottom);\n }\n }\n }\n generateDefaultLayoutParams() {\n return new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);\n }\n checkLayoutParams(p) {\n return p instanceof RelativeLayout.LayoutParams;\n }\n generateLayoutParams(p) {\n return new RelativeLayout.LayoutParams(p);\n }\n }\n RelativeLayout.TRUE = -1;\n RelativeLayout.LEFT_OF = 0;\n RelativeLayout.RIGHT_OF = 1;\n RelativeLayout.ABOVE = 2;\n RelativeLayout.BELOW = 3;\n RelativeLayout.ALIGN_BASELINE = 4;\n RelativeLayout.ALIGN_LEFT = 5;\n RelativeLayout.ALIGN_TOP = 6;\n RelativeLayout.ALIGN_RIGHT = 7;\n RelativeLayout.ALIGN_BOTTOM = 8;\n RelativeLayout.ALIGN_PARENT_LEFT = 9;\n RelativeLayout.ALIGN_PARENT_TOP = 10;\n RelativeLayout.ALIGN_PARENT_RIGHT = 11;\n RelativeLayout.ALIGN_PARENT_BOTTOM = 12;\n RelativeLayout.CENTER_IN_PARENT = 13;\n RelativeLayout.CENTER_HORIZONTAL = 14;\n RelativeLayout.CENTER_VERTICAL = 15;\n RelativeLayout.START_OF = 16;\n RelativeLayout.END_OF = 17;\n RelativeLayout.ALIGN_START = 18;\n RelativeLayout.ALIGN_END = 19;\n RelativeLayout.ALIGN_PARENT_START = 20;\n RelativeLayout.ALIGN_PARENT_END = 21;\n RelativeLayout.VERB_COUNT = 22;\n RelativeLayout.RULES_VERTICAL = [RelativeLayout.ABOVE, RelativeLayout.BELOW, RelativeLayout.ALIGN_BASELINE, RelativeLayout.ALIGN_TOP, RelativeLayout.ALIGN_BOTTOM];\n RelativeLayout.RULES_HORIZONTAL = [RelativeLayout.LEFT_OF, RelativeLayout.RIGHT_OF, RelativeLayout.ALIGN_LEFT, RelativeLayout.ALIGN_RIGHT, RelativeLayout.START_OF, RelativeLayout.END_OF, RelativeLayout.ALIGN_START, RelativeLayout.ALIGN_END];\n RelativeLayout.DEFAULT_WIDTH = 0x00010000;\n widget.RelativeLayout = RelativeLayout;\n (function (RelativeLayout) {\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...args);\n this.mRules = new Array(RelativeLayout.VERB_COUNT);\n this.mInitialRules = new Array(RelativeLayout.VERB_COUNT);\n this.mLeft = 0;\n this.mTop = 0;\n this.mRight = 0;\n this.mBottom = 0;\n this.mStart = LayoutParams.DEFAULT_MARGIN_RELATIVE;\n this.mEnd = LayoutParams.DEFAULT_MARGIN_RELATIVE;\n this.mRulesChanged = false;\n this.mIsRtlCompatibilityMode = false;\n if (args[0] instanceof LayoutParams) {\n let source = args[0];\n this.mIsRtlCompatibilityMode = source.mIsRtlCompatibilityMode;\n this.mRulesChanged = source.mRulesChanged;\n this.alignWithParent = source.alignWithParent;\n System.arraycopy(source.mRules, RelativeLayout.LEFT_OF, this.mRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n System.arraycopy(source.mInitialRules, RelativeLayout.LEFT_OF, this.mInitialRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n }\n this._attrBinder.addAttr('alignWithParentIfMissing', (value) => {\n this.alignWithParent = this._attrBinder.parseBoolean(value, false);\n });\n this._attrBinder.addAttr('toLeftOf', (value) => {\n this.addRule(RelativeLayout.LEFT_OF, value);\n });\n this._attrBinder.addAttr('toRightOf', (value) => {\n this.addRule(RelativeLayout.RIGHT_OF, value);\n });\n this._attrBinder.addAttr('above', (value) => {\n this.addRule(RelativeLayout.ABOVE, value);\n });\n this._attrBinder.addAttr('below', (value) => {\n this.addRule(RelativeLayout.BELOW, value);\n });\n this._attrBinder.addAttr('alignBaseline', (value) => {\n this.addRule(RelativeLayout.ALIGN_BASELINE, value);\n });\n this._attrBinder.addAttr('alignLeft', (value) => {\n this.addRule(RelativeLayout.ALIGN_LEFT, value);\n });\n this._attrBinder.addAttr('alignTop', (value) => {\n this.addRule(RelativeLayout.ALIGN_TOP, value);\n });\n this._attrBinder.addAttr('alignRight', (value) => {\n this.addRule(RelativeLayout.ALIGN_RIGHT, value);\n });\n this._attrBinder.addAttr('alignBottom', (value) => {\n this.addRule(RelativeLayout.ALIGN_BOTTOM, value);\n });\n this._attrBinder.addAttr('alignParentLeft', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor);\n });\n this._attrBinder.addAttr('alignParentTop', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_TOP, anchor);\n });\n this._attrBinder.addAttr('alignParentRight', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor);\n });\n this._attrBinder.addAttr('alignParentBottom', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, anchor);\n });\n this._attrBinder.addAttr('centerInParent', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_IN_PARENT, anchor);\n });\n this._attrBinder.addAttr('centerHorizontal', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_HORIZONTAL, anchor);\n });\n this._attrBinder.addAttr('centerVertical', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_VERTICAL, anchor);\n });\n this._attrBinder.addAttr('toStartOf', (value) => {\n this.addRule(RelativeLayout.LEFT_OF, value);\n });\n this._attrBinder.addAttr('toEndOf', (value) => {\n this.addRule(RelativeLayout.RIGHT_OF, value);\n });\n this._attrBinder.addAttr('alignStart', (value) => {\n this.addRule(RelativeLayout.ALIGN_LEFT, value);\n });\n this._attrBinder.addAttr('alignEnd', (value) => {\n this.addRule(RelativeLayout.ALIGN_RIGHT, value);\n });\n this._attrBinder.addAttr('alignParentStart', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor);\n });\n this._attrBinder.addAttr('alignParentEnd', (value) => {\n const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor);\n });\n }\n addRule(verb, anchor = RelativeLayout.TRUE) {\n this.mRules[verb] = anchor;\n this.mInitialRules[verb] = anchor;\n this.mRulesChanged = true;\n }\n removeRule(verb) {\n this.mRules[verb] = null;\n this.mInitialRules[verb] = null;\n this.mRulesChanged = true;\n }\n hasRelativeRules() {\n return (this.mInitialRules[RelativeLayout.START_OF] != null || this.mInitialRules[RelativeLayout.END_OF] != null\n || this.mInitialRules[RelativeLayout.ALIGN_START] != null || this.mInitialRules[RelativeLayout.ALIGN_END] != null\n || this.mInitialRules[RelativeLayout.ALIGN_PARENT_START] != null || this.mInitialRules[RelativeLayout.ALIGN_PARENT_END] != null);\n }\n resolveRules(layoutDirection) {\n const isLayoutRtl = (layoutDirection == View.LAYOUT_DIRECTION_RTL);\n System.arraycopy(this.mInitialRules, RelativeLayout.LEFT_OF, this.mRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n if (this.mIsRtlCompatibilityMode) {\n if (this.mRules[RelativeLayout.ALIGN_START] != null) {\n if (this.mRules[RelativeLayout.ALIGN_LEFT] == null) {\n this.mRules[RelativeLayout.ALIGN_LEFT] = this.mRules[RelativeLayout.ALIGN_START];\n }\n this.mRules[RelativeLayout.ALIGN_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_END] != null) {\n if (this.mRules[RelativeLayout.ALIGN_RIGHT] == null) {\n this.mRules[RelativeLayout.ALIGN_RIGHT] = this.mRules[RelativeLayout.ALIGN_END];\n }\n this.mRules[RelativeLayout.ALIGN_END] = null;\n }\n if (this.mRules[RelativeLayout.START_OF] != null) {\n if (this.mRules[RelativeLayout.LEFT_OF] == null) {\n this.mRules[RelativeLayout.LEFT_OF] = this.mRules[RelativeLayout.START_OF];\n }\n this.mRules[RelativeLayout.START_OF] = null;\n }\n if (this.mRules[RelativeLayout.END_OF] != null) {\n if (this.mRules[RelativeLayout.RIGHT_OF] == null) {\n this.mRules[RelativeLayout.RIGHT_OF] = this.mRules[RelativeLayout.END_OF];\n }\n this.mRules[RelativeLayout.END_OF] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_START] != null) {\n if (this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] == null) {\n this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] = this.mRules[RelativeLayout.ALIGN_PARENT_START];\n }\n this.mRules[RelativeLayout.ALIGN_PARENT_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] == null) {\n if (this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] == null) {\n this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] = this.mRules[RelativeLayout.ALIGN_PARENT_END];\n }\n this.mRules[RelativeLayout.ALIGN_PARENT_END] = null;\n }\n }\n else {\n if ((this.mRules[RelativeLayout.ALIGN_START] != null || this.mRules[RelativeLayout.ALIGN_END] != null)\n && (this.mRules[RelativeLayout.ALIGN_LEFT] != null || this.mRules[RelativeLayout.ALIGN_RIGHT] != null)) {\n this.mRules[RelativeLayout.ALIGN_LEFT] = null;\n this.mRules[RelativeLayout.ALIGN_RIGHT] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_START] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_RIGHT : RelativeLayout.ALIGN_LEFT] = this.mRules[RelativeLayout.ALIGN_START];\n this.mRules[RelativeLayout.ALIGN_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_END] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_LEFT : RelativeLayout.ALIGN_RIGHT] = this.mRules[RelativeLayout.ALIGN_END];\n this.mRules[RelativeLayout.ALIGN_END] = null;\n }\n if ((this.mRules[RelativeLayout.START_OF] != null || this.mRules[RelativeLayout.END_OF] != null)\n && (this.mRules[RelativeLayout.LEFT_OF] != null || this.mRules[RelativeLayout.RIGHT_OF] != null)) {\n this.mRules[RelativeLayout.LEFT_OF] = null;\n this.mRules[RelativeLayout.RIGHT_OF] = null;\n }\n if (this.mRules[RelativeLayout.START_OF] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.RIGHT_OF : RelativeLayout.LEFT_OF] = this.mRules[RelativeLayout.START_OF];\n this.mRules[RelativeLayout.START_OF] = null;\n }\n if (this.mRules[RelativeLayout.END_OF] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.LEFT_OF : RelativeLayout.RIGHT_OF] = this.mRules[RelativeLayout.END_OF];\n this.mRules[RelativeLayout.END_OF] = null;\n }\n if ((this.mRules[RelativeLayout.ALIGN_PARENT_START] != null || this.mRules[RelativeLayout.ALIGN_PARENT_END] != null)\n && (this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] != null || this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] != null)) {\n this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] = null;\n this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_START] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_PARENT_RIGHT : RelativeLayout.ALIGN_PARENT_LEFT] = this.mRules[RelativeLayout.ALIGN_PARENT_START];\n this.mRules[RelativeLayout.ALIGN_PARENT_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_END] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_PARENT_LEFT : RelativeLayout.ALIGN_PARENT_RIGHT] = this.mRules[RelativeLayout.ALIGN_PARENT_END];\n this.mRules[RelativeLayout.ALIGN_PARENT_END] = null;\n }\n }\n this.mRulesChanged = false;\n }\n getRules(layoutDirection) {\n if (layoutDirection != null) {\n if (this.hasRelativeRules() && (this.mRulesChanged || layoutDirection != this.getLayoutDirection())) {\n this.resolveRules(layoutDirection);\n if (layoutDirection != this.getLayoutDirection()) {\n this.setLayoutDirection(layoutDirection);\n }\n }\n }\n return this.mRules;\n }\n resolveLayoutDirection(layoutDirection) {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mStart != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mRight = this.mStart;\n if (this.mEnd != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mLeft = this.mEnd;\n }\n else {\n if (this.mStart != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mLeft = this.mStart;\n if (this.mEnd != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mRight = this.mEnd;\n }\n if (this.hasRelativeRules() && layoutDirection != this.getLayoutDirection()) {\n this.resolveRules(layoutDirection);\n }\n super.resolveLayoutDirection(layoutDirection);\n }\n }\n RelativeLayout.LayoutParams = LayoutParams;\n class DependencyGraph {\n constructor() {\n this.mNodes = new ArrayList();\n this.mKeyNodes = new SparseMap();\n this.mRoots = new ArrayDeque();\n }\n clear() {\n const nodes = this.mNodes;\n const count = nodes.size();\n for (let i = 0; i < count; i++) {\n nodes.get(i).release();\n }\n nodes.clear();\n this.mKeyNodes.clear();\n this.mRoots.clear();\n }\n add(view) {\n const id = view.getId();\n const node = DependencyGraph.Node.acquire(view);\n if (id != View.NO_ID) {\n this.mKeyNodes.put(id, node);\n }\n this.mNodes.add(node);\n }\n getSortedViews(sorted, rules) {\n const roots = this.findRoots(rules);\n let index = 0;\n let node;\n while ((node = roots.pollLast()) != null) {\n const view = node.view;\n const key = view.getId();\n sorted[index++] = view;\n const dependents = node.dependents;\n const count = dependents.size();\n for (let i = 0; i < count; i++) {\n const dependent = dependents.keyAt(i);\n const dependencies = dependent.dependencies;\n dependencies.remove(key);\n if (dependencies.size() == 0) {\n roots.add(dependent);\n }\n }\n }\n if (index < sorted.length) {\n throw Error(`new IllegalStateException(\"Circular dependencies cannot exist\" + \" in RelativeLayout\")`);\n }\n }\n findRoots(rulesFilter) {\n const keyNodes = this.mKeyNodes;\n const nodes = this.mNodes;\n const count = nodes.size();\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n node.dependents.clear();\n node.dependencies.clear();\n }\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n const layoutParams = node.view.getLayoutParams();\n const rules = layoutParams.mRules;\n const rulesCount = rulesFilter.length;\n for (let j = 0; j < rulesCount; j++) {\n const rule = rules[rulesFilter[j]];\n if (rule != null) {\n const dependency = keyNodes.get(rule);\n if (dependency == null || dependency == node) {\n continue;\n }\n dependency.dependents.put(node, this);\n node.dependencies.put(rule, dependency);\n }\n }\n }\n const roots = this.mRoots;\n roots.clear();\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n if (node.dependencies.size() == 0)\n roots.addLast(node);\n }\n return roots;\n }\n }\n RelativeLayout.DependencyGraph = DependencyGraph;\n (function (DependencyGraph) {\n class Node {\n constructor() {\n this.dependents = new ArrayMap();\n this.dependencies = new SparseMap();\n }\n static acquire(view) {\n let node = Node.sPool.acquire();\n if (node == null) {\n node = new Node();\n }\n node.view = view;\n return node;\n }\n release() {\n this.view = null;\n this.dependents.clear();\n this.dependencies.clear();\n Node.sPool.release(this);\n }\n }\n Node.POOL_LIMIT = 100;\n Node.sPool = new SynchronizedPool(Node.POOL_LIMIT);\n DependencyGraph.Node = Node;\n })(DependencyGraph = RelativeLayout.DependencyGraph || (RelativeLayout.DependencyGraph = {}));\n })(RelativeLayout = widget.RelativeLayout || (widget.RelativeLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n class PasswordTransformationMethod extends method.SingleLineTransformationMethod {\n getTransformation(source, v) {\n let transform = super.getTransformation(source, v);\n if (transform)\n transform = new Array(transform.length + 1).join('•');\n return transform;\n }\n static getInstance() {\n if (PasswordTransformationMethod.instance != null)\n return PasswordTransformationMethod.instance;\n PasswordTransformationMethod.instance = new PasswordTransformationMethod();\n return PasswordTransformationMethod.instance;\n }\n }\n method.PasswordTransformationMethod = PasswordTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var TextUtils = android.text.TextUtils;\n var TextView = android.widget.TextView;\n var Gravity = android.view.Gravity;\n var Color = android.graphics.Color;\n var Canvas = android.graphics.Canvas;\n var Integer = java.lang.Integer;\n var InputType = android.text.InputType;\n var PasswordTransformationMethod = android.text.method.PasswordTransformationMethod;\n var Platform = androidui.util.Platform;\n class EditText extends TextView {\n constructor(context, bindElement, defStyle = android.R.attr.editTextStyle) {\n super(context, bindElement, null);\n this.mInputType = InputType.TYPE_NULL;\n this.mForceDisableDraw = false;\n this.mMaxLength = Integer.MAX_VALUE;\n let a = this._attrBinder;\n a.addAttr('inputType', (value) => {\n switch (value + '') {\n case 'none':\n this.setInputType(InputType.TYPE_NULL);\n break;\n case 'text':\n this.setInputType(InputType.TYPE_CLASS_TEXT);\n break;\n case 'textUri':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);\n break;\n case 'textEmailAddress':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);\n break;\n case 'textPassword':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n break;\n case 'textVisiblePassword':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n break;\n case 'number':\n this.setInputType(InputType.TYPE_CLASS_NUMBER);\n break;\n case 'numberSigned':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);\n break;\n case 'numberDecimal':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);\n break;\n case 'numberPassword':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);\n break;\n case 'phone':\n this.setInputType(InputType.TYPE_CLASS_PHONE);\n break;\n case 'datetime':\n this.setInputType(InputType.TYPE_CLASS_DATETIME);\n break;\n case 'date':\n this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE);\n break;\n case 'time':\n this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME);\n break;\n }\n });\n a.addAttr('maxLength', (value) => {\n this.mMaxLength = a.parseInt(value, this.mMaxLength);\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n initBindElement(bindElement) {\n super.initBindElement(bindElement);\n this.switchToMultiLineInputElement();\n }\n onInputValueChange(e) {\n let text = this.inputElement.value;\n let filterText = '';\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.codePointAt(i);\n if (!this.filterKeyCodeByInputType(c) && filterText.length < this.mMaxLength) {\n filterText += text[i];\n }\n }\n if (text != filterText) {\n text = filterText;\n this.inputElement.value = text;\n }\n if (!text || text.length === 0) {\n this.setForceDisableDrawText(false);\n }\n else {\n this.setForceDisableDrawText(true);\n }\n this.setText(text);\n }\n onDomTextInput(e) {\n let text = e['data'];\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.codePointAt(i);\n if (!this.filterKeyCodeOnInput(c)) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }\n switchToInputElement(inputElement) {\n if (this.inputElement === inputElement)\n return;\n inputElement.onblur = () => {\n inputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n this.onInputElementFocusChanged(false);\n };\n inputElement.onfocus = () => {\n inputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n this.onInputElementFocusChanged(true);\n };\n inputElement.oninput = (e) => this.onInputValueChange(e);\n inputElement.removeEventListener('textInput', (e) => this.onDomTextInput(e));\n inputElement.addEventListener('textInput', (e) => this.onDomTextInput(e));\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(inputElement);\n }\n this.inputElement = inputElement;\n }\n switchToSingleLineInputElement() {\n if (!this.mSingleLineInputElement) {\n this.mSingleLineInputElement = document.createElement('input');\n this.mSingleLineInputElement.style.position = 'absolute';\n this.mSingleLineInputElement.style['webkitAppearance'] = 'none';\n this.mSingleLineInputElement.style.borderRadius = '0';\n this.mSingleLineInputElement.style.overflow = 'auto';\n this.mSingleLineInputElement.style.background = 'transparent';\n this.mSingleLineInputElement.style.fontFamily = Canvas.getMeasureTextFontFamily();\n }\n this.switchToInputElement(this.mSingleLineInputElement);\n }\n switchToMultiLineInputElement() {\n if (!this.mMultiLineInputElement) {\n this.mMultiLineInputElement = document.createElement('textarea');\n this.mMultiLineInputElement.style.position = 'absolute';\n this.mMultiLineInputElement.style['webkitAppearance'] = 'none';\n this.mMultiLineInputElement.style['resize'] = 'none';\n this.mMultiLineInputElement.style.borderRadius = '0';\n this.mMultiLineInputElement.style.overflow = 'auto';\n this.mMultiLineInputElement.style.background = 'transparent';\n this.mMultiLineInputElement.style.boxSizing = 'border-box';\n this.mMultiLineInputElement.style.fontFamily = Canvas.getMeasureTextFontFamily();\n }\n this.switchToInputElement(this.mMultiLineInputElement);\n }\n tryShowInputElement() {\n if (!this.isInputElementShowed()) {\n this.inputElement.value = this.getText().toString();\n this.bindElement.appendChild(this.inputElement);\n this.inputElement.focus();\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n this.syncTextBoundInfoToInputElement();\n }\n }\n tryDismissInputElement() {\n try {\n if (this.inputElement.parentNode)\n this.bindElement.removeChild(this.inputElement);\n }\n catch (e) {\n }\n this.setForceDisableDrawText(false);\n }\n onInputElementFocusChanged(focused) {\n }\n isInputElementShowed() {\n return this.inputElement.parentElement != null && this.inputElement.style.opacity != '0';\n }\n performClick(event) {\n this.tryShowInputElement();\n return super.performClick(event);\n }\n onFocusChanged(focused, direction, previouslyFocusedRect) {\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n if (focused) {\n this.tryShowInputElement();\n }\n else {\n this.tryDismissInputElement();\n }\n }\n setForceDisableDrawText(disable) {\n if (this.mForceDisableDraw == disable)\n return;\n this.mForceDisableDraw = disable;\n if (disable) {\n this.mSkipDrawText = true;\n }\n else {\n this.mSkipDrawText = false;\n }\n this.invalidate();\n }\n updateTextColors() {\n super.updateTextColors();\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onTouchEvent(event) {\n const superResult = super.onTouchEvent(event);\n if (this.isInputElementShowed()) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n if (this.inputElement.scrollHeight > this.inputElement.offsetHeight || this.inputElement.scrollWidth > this.inputElement.offsetWidth) {\n this.getParent().requestDisallowInterceptTouchEvent(true);\n }\n return true;\n }\n return superResult;\n }\n filterKeyEvent(event) {\n let keyCode = event.getKeyCode();\n if (keyCode == android.view.KeyEvent.KEYCODE_Backspace || keyCode == android.view.KeyEvent.KEYCODE_Del\n || event.isCtrlPressed() || event.isAltPressed() || event.isMetaPressed()) {\n return false;\n }\n if (keyCode == android.view.KeyEvent.KEYCODE_ENTER && this.isSingleLine()) {\n return true;\n }\n if (event.mIsTypingKey) {\n if (this.getText().length >= this.mMaxLength) {\n return true;\n }\n return this.filterKeyCodeOnInput(keyCode);\n }\n return false;\n }\n filterKeyCodeByInputType(keyCode) {\n let filter = false;\n const inputType = this.mInputType;\n const typeClass = inputType & InputType.TYPE_MASK_CLASS;\n if (typeClass === InputType.TYPE_CLASS_NUMBER) {\n filter = InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode) === -1;\n if ((inputType & InputType.TYPE_NUMBER_FLAG_SIGNED) === InputType.TYPE_NUMBER_FLAG_SIGNED) {\n filter = filter && keyCode !== android.view.KeyEvent.KEYCODE_Minus;\n }\n if ((inputType & InputType.TYPE_NUMBER_FLAG_DECIMAL) === InputType.TYPE_NUMBER_FLAG_DECIMAL) {\n filter = filter && keyCode !== android.view.KeyEvent.KEYCODE_Period;\n }\n }\n else if (typeClass === InputType.TYPE_CLASS_PHONE) {\n filter = InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode) === -1;\n }\n return filter;\n }\n filterKeyCodeOnInput(keyCode) {\n let filter = false;\n const inputType = this.mInputType;\n const typeClass = inputType & InputType.TYPE_MASK_CLASS;\n if (typeClass === InputType.TYPE_CLASS_NUMBER) {\n if ((inputType & InputType.TYPE_NUMBER_FLAG_SIGNED) === InputType.TYPE_NUMBER_FLAG_SIGNED) {\n if (keyCode === android.view.KeyEvent.KEYCODE_Minus && this.getText().length > 0) {\n filter = true;\n }\n }\n if ((inputType & InputType.TYPE_NUMBER_FLAG_DECIMAL) === InputType.TYPE_NUMBER_FLAG_DECIMAL) {\n if (keyCode === android.view.KeyEvent.KEYCODE_Period && (this.getText().includes('.') || this.getText().length === 0)) {\n filter = true;\n }\n }\n }\n return filter || this.filterKeyCodeByInputType(keyCode);\n }\n checkFilterKeyEventToDom(event) {\n if (this.isInputElementShowed()) {\n if (this.filterKeyEvent(event)) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = false;\n }\n else {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n }\n return true;\n }\n return false;\n }\n onKeyDown(keyCode, event) {\n const filter = this.checkFilterKeyEventToDom(event);\n return super.onKeyDown(keyCode, event) || filter;\n }\n onKeyUp(keyCode, event) {\n const filter = this.checkFilterKeyEventToDom(event);\n return super.onKeyUp(keyCode, event) || filter;\n }\n requestSyncBoundToElement(immediately = false) {\n if (this.isInputElementShowed()) {\n immediately = true;\n }\n super.requestSyncBoundToElement(immediately);\n }\n setRawTextSize(size) {\n super.setRawTextSize(size);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onTextChanged(text, start, lengthBefore, lengthAfter) {\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n setGravity(gravity) {\n super.setGravity(gravity);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n setSingleLine(singleLine = true) {\n if (singleLine) {\n this.switchToSingleLineInputElement();\n }\n else {\n this.switchToMultiLineInputElement();\n }\n super.setSingleLine(singleLine);\n }\n setInputType(type) {\n this.mInputType = type;\n const typeClass = type & InputType.TYPE_MASK_CLASS;\n this.inputElement.style['webkitTextSecurity'] = '';\n this.setTransformationMethod(null);\n switch (typeClass) {\n case InputType.TYPE_NULL:\n this.setSingleLine(false);\n this.inputElement.removeAttribute('type');\n break;\n case InputType.TYPE_CLASS_TEXT:\n if ((type & InputType.TYPE_TEXT_VARIATION_URI) === InputType.TYPE_TEXT_VARIATION_URI) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'url');\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) === InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'email');\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_PASSWORD) === InputType.TYPE_TEXT_VARIATION_PASSWORD) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'password');\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) === InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'email');\n }\n else {\n this.setSingleLine(false);\n this.inputElement.removeAttribute('type');\n }\n break;\n case InputType.TYPE_CLASS_NUMBER:\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'number');\n if ((type & InputType.TYPE_NUMBER_VARIATION_PASSWORD) === InputType.TYPE_NUMBER_VARIATION_PASSWORD) {\n this.inputElement.style['webkitTextSecurity'] = 'disc';\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n }\n break;\n case InputType.TYPE_CLASS_PHONE:\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'tel');\n break;\n case InputType.TYPE_CLASS_DATETIME:\n this.setSingleLine(true);\n if ((type & InputType.TYPE_DATETIME_VARIATION_DATE) === InputType.TYPE_DATETIME_VARIATION_DATE) {\n this.inputElement.setAttribute('type', 'date');\n }\n else if ((type & InputType.TYPE_DATETIME_VARIATION_TIME) === InputType.TYPE_DATETIME_VARIATION_TIME) {\n this.inputElement.setAttribute('type', 'time');\n }\n else {\n this.inputElement.setAttribute('type', 'datetime');\n }\n break;\n }\n }\n getInputType() {\n return this.mInputType;\n }\n syncTextBoundInfoToInputElement() {\n let left = this.getLeft();\n let top = this.getTop();\n let right = this.getRight();\n let bottom = this.getBottom();\n const density = this.getResources().getDisplayMetrics().density;\n let maxHeight = this.getMaxHeight();\n if (maxHeight <= 0 || maxHeight >= Integer.MAX_VALUE) {\n let maxLine = this.getMaxLines();\n if (maxLine > 0 && maxLine < Integer.MAX_VALUE) {\n maxHeight = maxLine * this.getLineHeight();\n }\n }\n let textHeight = bottom - top - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n if (maxHeight <= 0 || maxHeight > textHeight) {\n maxHeight = textHeight;\n }\n let layout = this.mLayout;\n if (this.mHint != null && this.mText.length == 0) {\n layout = this.mHintLayout;\n }\n let height = layout ? Math.min(layout.getLineTop(layout.getLineCount()), maxHeight) : maxHeight;\n this.inputElement.style.height = height / density + 1 + 'px';\n this.inputElement.style.top = '';\n this.inputElement.style.bottom = '';\n this.inputElement.style.transform = this.inputElement.style.webkitTransform = '';\n let gravity = this.getGravity();\n switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {\n case Gravity.TOP:\n this.inputElement.style.top = this.getCompoundPaddingTop() / density + 'px';\n break;\n case Gravity.BOTTOM:\n this.inputElement.style.bottom = this.getCompoundPaddingBottom() / density + 'px';\n break;\n default:\n this.inputElement.style.top = '50%';\n this.inputElement.style.transform = this.inputElement.style.webkitTransform = 'translate(0, -50%)';\n break;\n }\n switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n this.inputElement.style.textAlign = 'left';\n break;\n case Gravity.RIGHT:\n this.inputElement.style.textAlign = 'right';\n break;\n default:\n this.inputElement.style.textAlign = 'center';\n break;\n }\n const isIOS = Platform.isIOS;\n this.inputElement.style.left = this.getCompoundPaddingLeft() / density - (isIOS ? 3 : 0) + 'px';\n this.inputElement.style.width = (right - left - this.getCompoundPaddingRight() - this.getCompoundPaddingLeft()) / density + (isIOS ? 6 : 1) + 'px';\n this.inputElement.style.lineHeight = this.getLineHeight() / density + 'px';\n if (this.getLineCount() == 1) {\n this.inputElement.style.whiteSpace = 'nowrap';\n }\n else {\n this.inputElement.style.whiteSpace = '';\n }\n let text = this.getText().toString();\n if (text != this.inputElement.value)\n this.inputElement.value = text;\n this.inputElement.style.fontSize = this.getTextSize() / density + 'px';\n this.inputElement.style.color = Color.toRGBAFunc(this.getCurrentTextColor());\n if (this.inputElement == this.mMultiLineInputElement) {\n this.inputElement.style.padding = (this.getTextSize() / density / 5).toFixed(1) + 'px 0px 0px 0px';\n }\n else {\n this.inputElement.style.padding = '0px';\n }\n }\n dependOnDebugLayout() {\n return true;\n }\n setEllipsize(ellipsis) {\n if (ellipsis == TextUtils.TruncateAt.MARQUEE) {\n throw Error(`new IllegalArgumentException(\"EditText cannot use the ellipsize mode \" + \"TextUtils.TruncateAt.MARQUEE\")`);\n }\n super.setEllipsize(ellipsis);\n }\n }\n widget.EditText = EditText;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Matrix = android.graphics.Matrix;\n var RectF = android.graphics.RectF;\n var View = android.view.View;\n var Integer = java.lang.Integer;\n var NetDrawable = androidui.image.NetDrawable;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n var AttrBinder = androidui.attr.AttrBinder;\n class ImageView extends View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHaveFrame = false;\n this.mAdjustViewBounds = false;\n this.mMaxWidth = Integer.MAX_VALUE;\n this.mMaxHeight = Integer.MAX_VALUE;\n this.mAlpha = 255;\n this.mViewAlphaScale = 256;\n this.mColorMod = false;\n this.mDrawable = null;\n this.mState = null;\n this.mMergeState = false;\n this.mLevel = 0;\n this.mDrawableWidth = 0;\n this.mDrawableHeight = 0;\n this.mDrawMatrix = null;\n this.mTempSrc = new RectF();\n this.mTempDst = new RectF();\n this.mBaseline = -1;\n this.mBaselineAlignBottom = false;\n this.mAdjustViewBoundsCompat = false;\n this.initImageView();\n }\n initBindAttr() {\n super.initBindAttr();\n if (!ImageView.ImageViewClassAttrBind) {\n ImageView.ImageViewClassAttrBind = new AttrBinder.ClassBinderMap();\n ImageView.ImageViewClassAttrBind.set('src', {\n setter(v, value) {\n let d = v._attrBinder.parseDrawable(value);\n if (d)\n v.setImageDrawable(d);\n else\n v.setImageURI(value);\n }, getter(v) {\n return v.mDrawable;\n }\n }).set('baselineAlignBottom', {\n setter(v, value) {\n v.setBaselineAlignBottom(v._attrBinder.parseBoolean(value, v.mBaselineAlignBottom));\n }\n }).set('baseline', {\n setter(v, value) {\n v.setBaseline(v._attrBinder.parseNumberPixelSize(value, v.mBaseline));\n }, getter(v) {\n return v.mBaseline;\n }\n }).set('adjustViewBounds', {\n setter(v, value) {\n v.setAdjustViewBounds(v._attrBinder.parseBoolean(value, false));\n }\n }).set('maxWidth', {\n setter(v, value) {\n let baseValue = v.getParent() instanceof View ? v.getParent().getWidth() : 0;\n v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value, v.mMaxWidth, baseValue));\n }, getter(v) {\n return v.mMaxWidth;\n }\n }).set('maxHeight', {\n setter(v, value) {\n let baseValue = v.getParent() instanceof View ? v.getParent().getHeight() : 0;\n v.setMaxHeight(v._attrBinder.parseNumberPixelSize(value, v.mMaxHeight, baseValue));\n }, getter(v) {\n return v.mMaxHeight;\n }\n }).set('scaleType', {\n setter(v, value) {\n if (typeof value === 'number') {\n v.setScaleType(value);\n }\n else {\n v.setScaleType(ImageView.parseScaleType(value, v.mScaleType));\n }\n }, getter(v) {\n return v.mScaleType;\n }\n }).set('drawableAlpha', {\n setter(v, value) {\n v.setImageAlpha(v._attrBinder.parseInt(value, v.mAlpha));\n }, getter(v) {\n return v.mAlpha;\n }\n }).set('cropToPadding', {\n setter(v, value) {\n v.setCropToPadding(v._attrBinder.parseBoolean(value, false));\n }\n });\n }\n this._attrBinder.addClassAttrBind(ImageView.ImageViewClassAttrBind);\n }\n initImageView() {\n this.mMatrix = new Matrix();\n this.mScaleType = ImageView.ScaleType.FIT_CENTER;\n }\n verifyDrawable(dr) {\n return this.mDrawable == dr || super.verifyDrawable(dr);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mDrawable != null)\n this.mDrawable.jumpToCurrentState();\n }\n invalidateDrawable(dr) {\n if (dr == this.mDrawable) {\n this.invalidate();\n }\n else {\n super.invalidateDrawable(dr);\n }\n }\n drawableSizeChange(who) {\n if (who == this.mDrawable) {\n this.resizeFromDrawable();\n }\n else {\n super.drawableSizeChange(who);\n }\n }\n hasOverlappingRendering() {\n return (this.getBackground() != null && this.getBackground().getCurrent() != null);\n }\n getAdjustViewBounds() {\n return this.mAdjustViewBounds;\n }\n setAdjustViewBounds(adjustViewBounds) {\n this.mAdjustViewBounds = adjustViewBounds;\n if (adjustViewBounds) {\n this.setScaleType(ImageView.ScaleType.FIT_CENTER);\n }\n }\n getMaxWidth() {\n return this.mMaxWidth;\n }\n setMaxWidth(maxWidth) {\n this.mMaxWidth = maxWidth;\n }\n getMaxHeight() {\n return this.mMaxHeight;\n }\n setMaxHeight(maxHeight) {\n this.mMaxHeight = maxHeight;\n }\n getDrawable() {\n return this.mDrawable;\n }\n setImageURI(uri) {\n if (this.mUri != uri) {\n if (this.mDrawable instanceof NetDrawable) {\n this.mUri = uri;\n this.mDrawable.setURL(uri);\n this.invalidate();\n }\n else {\n this.updateDrawable(null);\n this.mUri = uri;\n const oldWidth = this.mDrawableWidth;\n const oldHeight = this.mDrawableHeight;\n this.resolveUri();\n if (oldWidth != this.mDrawableWidth || oldHeight != this.mDrawableHeight) {\n this.requestLayout();\n }\n this.invalidate();\n }\n }\n }\n setImageDrawable(drawable) {\n if (this.mDrawable != drawable) {\n this.mUri = null;\n const oldWidth = this.mDrawableWidth;\n const oldHeight = this.mDrawableHeight;\n this.updateDrawable(drawable);\n if (oldWidth != this.mDrawableWidth || oldHeight != this.mDrawableHeight) {\n this.requestLayout();\n }\n this.invalidate();\n }\n }\n setImageState(state, merge) {\n this.mState = state;\n this.mMergeState = merge;\n if (this.mDrawable != null) {\n this.refreshDrawableState();\n this.resizeFromDrawable();\n }\n }\n setSelected(selected) {\n super.setSelected(selected);\n this.resizeFromDrawable();\n }\n setImageLevel(level) {\n this.mLevel = level;\n if (this.mDrawable != null) {\n this.mDrawable.setLevel(level);\n this.resizeFromDrawable();\n }\n }\n setScaleType(scaleType) {\n if (scaleType == null) {\n throw Error(`new NullPointerException()`);\n }\n if (this.mScaleType != scaleType) {\n this.mScaleType = scaleType;\n this.setWillNotCacheDrawing(this.mScaleType == ImageView.ScaleType.CENTER);\n this.requestLayout();\n this.invalidate();\n }\n }\n getScaleType() {\n return this.mScaleType;\n }\n getImageMatrix() {\n if (this.mDrawMatrix == null) {\n return new Matrix(Matrix.IDENTITY_MATRIX);\n }\n return this.mDrawMatrix;\n }\n setImageMatrix(matrix) {\n if (matrix != null && matrix.isIdentity()) {\n matrix = null;\n }\n if (matrix == null && !this.mMatrix.isIdentity() || matrix != null && !this.mMatrix.equals(matrix)) {\n this.mMatrix.set(matrix);\n this.configureBounds();\n this.invalidate();\n }\n }\n getCropToPadding() {\n return this.mCropToPadding;\n }\n setCropToPadding(cropToPadding) {\n if (this.mCropToPadding != cropToPadding) {\n this.mCropToPadding = cropToPadding;\n this.requestLayout();\n this.invalidate();\n }\n }\n resolveUri() {\n if (this.mDrawable != null) {\n return;\n }\n let d = null;\n if (this.mUri != null) {\n d = new androidui.image.NetDrawable(this.mUri);\n }\n else {\n return;\n }\n this.updateDrawable(d);\n }\n onCreateDrawableState(extraSpace) {\n if (this.mState == null) {\n return super.onCreateDrawableState(extraSpace);\n }\n else if (!this.mMergeState) {\n return this.mState;\n }\n else {\n return ImageView.mergeDrawableStates(super.onCreateDrawableState(extraSpace + this.mState.length), this.mState);\n }\n }\n updateDrawable(d) {\n if (this.mDrawable != null) {\n this.mDrawable.setCallback(null);\n this.unscheduleDrawable(this.mDrawable);\n }\n this.mDrawable = d;\n if (d != null) {\n d.setCallback(this);\n if (d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n d.setLevel(this.mLevel);\n d.setVisible(this.getVisibility() == ImageView.VISIBLE, true);\n this.mDrawableWidth = d.getIntrinsicWidth();\n this.mDrawableHeight = d.getIntrinsicHeight();\n this.applyColorMod();\n this.configureBounds();\n }\n else {\n this.mDrawableWidth = this.mDrawableHeight = -1;\n }\n }\n resizeFromDrawable() {\n let d = this.mDrawable;\n if (d != null) {\n let w = d.getIntrinsicWidth();\n if (w < 0)\n w = this.mDrawableWidth;\n let h = d.getIntrinsicHeight();\n if (h < 0)\n h = this.mDrawableHeight;\n if (w != this.mDrawableWidth || h != this.mDrawableHeight) {\n this.mDrawableWidth = w;\n this.mDrawableHeight = h;\n if (this.mLayoutParams != null\n && this.mLayoutParams.width != LayoutParams.WRAP_CONTENT && this.mLayoutParams.width != LayoutParams.MATCH_PARENT\n && this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) {\n this.configureBounds();\n }\n else {\n this.requestLayout();\n }\n this.invalidate();\n return true;\n }\n }\n return false;\n }\n static scaleTypeToScaleToFit(st) {\n return ImageView.sS2FArray[st - 1];\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.resolveUri();\n let w;\n let h;\n let desiredAspect = 0.0;\n let resizeWidth = false;\n let resizeHeight = false;\n const widthSpecMode = ImageView.MeasureSpec.getMode(widthMeasureSpec);\n const heightSpecMode = ImageView.MeasureSpec.getMode(heightMeasureSpec);\n if (this.mDrawable == null) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n w = h = 0;\n }\n else {\n w = this.mDrawableWidth;\n h = this.mDrawableHeight;\n if (w <= 0)\n w = 1;\n if (h <= 0)\n h = 1;\n if (this.mAdjustViewBounds) {\n resizeWidth = widthSpecMode != ImageView.MeasureSpec.EXACTLY;\n resizeHeight = heightSpecMode != ImageView.MeasureSpec.EXACTLY;\n desiredAspect = w / h;\n }\n }\n let pleft = this.mPaddingLeft;\n let pright = this.mPaddingRight;\n let ptop = this.mPaddingTop;\n let pbottom = this.mPaddingBottom;\n let widthSize;\n let heightSize;\n if (resizeWidth || resizeHeight) {\n widthSize = this.resolveAdjustedSize(w + pleft + pright, this.mMaxWidth, widthMeasureSpec);\n heightSize = this.resolveAdjustedSize(h + ptop + pbottom, this.mMaxHeight, heightMeasureSpec);\n if (desiredAspect != 0.0) {\n let actualAspect = (widthSize - pleft - pright) / (heightSize - ptop - pbottom);\n if (Math.abs(actualAspect - desiredAspect) > 0.0000001) {\n let done = false;\n if (resizeWidth) {\n let newWidth = Math.floor((desiredAspect * (heightSize - ptop - pbottom))) + pleft + pright;\n if (!resizeHeight && !this.mAdjustViewBoundsCompat) {\n widthSize = this.resolveAdjustedSize(newWidth, this.mMaxWidth, widthMeasureSpec);\n }\n if (newWidth <= widthSize) {\n widthSize = newWidth;\n done = true;\n }\n }\n if (!done && resizeHeight) {\n let newHeight = Math.floor(((widthSize - pleft - pright) / desiredAspect)) + ptop + pbottom;\n if (!resizeWidth && !this.mAdjustViewBoundsCompat) {\n heightSize = this.resolveAdjustedSize(newHeight, this.mMaxHeight, heightMeasureSpec);\n }\n if (newHeight <= heightSize) {\n heightSize = newHeight;\n }\n }\n }\n }\n }\n else {\n w += pleft + pright;\n h += ptop + pbottom;\n w = Math.max(w, this.getSuggestedMinimumWidth());\n h = Math.max(h, this.getSuggestedMinimumHeight());\n widthSize = ImageView.resolveSizeAndState(w, widthMeasureSpec, 0);\n heightSize = ImageView.resolveSizeAndState(h, heightMeasureSpec, 0);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n }\n resolveAdjustedSize(desiredSize, maxSize, measureSpec) {\n let result = desiredSize;\n let specMode = ImageView.MeasureSpec.getMode(measureSpec);\n let specSize = ImageView.MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case ImageView.MeasureSpec.UNSPECIFIED:\n result = Math.min(desiredSize, maxSize);\n break;\n case ImageView.MeasureSpec.AT_MOST:\n result = Math.min(Math.min(desiredSize, specSize), maxSize);\n break;\n case ImageView.MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n setFrame(l, t, r, b) {\n let changed = super.setFrame(l, t, r, b);\n this.mHaveFrame = true;\n this.configureBounds();\n return changed;\n }\n configureBounds() {\n if (this.mDrawable == null || !this.mHaveFrame) {\n return;\n }\n let dwidth = this.mDrawableWidth;\n let dheight = this.mDrawableHeight;\n let vwidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n let vheight = this.getHeight() - this.mPaddingTop - this.mPaddingBottom;\n let fits = (dwidth < 0 || vwidth == dwidth) && (dheight < 0 || vheight == dheight);\n if (dwidth <= 0 || dheight <= 0 || ImageView.ScaleType.FIT_XY == this.mScaleType) {\n this.mDrawable.setBounds(0, 0, vwidth, vheight);\n this.mDrawMatrix = null;\n }\n else {\n this.mDrawable.setBounds(0, 0, dwidth, dheight);\n if (ImageView.ScaleType.MATRIX == this.mScaleType) {\n if (this.mMatrix.isIdentity()) {\n this.mDrawMatrix = null;\n }\n else {\n this.mDrawMatrix = this.mMatrix;\n }\n }\n else if (fits) {\n this.mDrawMatrix = null;\n }\n else if (ImageView.ScaleType.CENTER == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n this.mDrawMatrix.setTranslate(Math.floor(((vwidth - dwidth) * 0.5 + 0.5)), Math.floor(((vheight - dheight) * 0.5 + 0.5)));\n }\n else if (ImageView.ScaleType.CENTER_CROP == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n let scale;\n let dx = 0, dy = 0;\n if (dwidth * vheight > vwidth * dheight) {\n scale = vheight / dheight;\n dx = (vwidth - dwidth * scale) * 0.5;\n }\n else {\n scale = vwidth / dwidth;\n dy = (vheight - dheight * scale) * 0.5;\n }\n this.mDrawMatrix.setScale(scale, scale);\n this.mDrawMatrix.postTranslate(Math.floor((dx + 0.5)), Math.floor((dy + 0.5)));\n }\n else if (ImageView.ScaleType.CENTER_INSIDE == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n let scale;\n let dx;\n let dy;\n if (dwidth <= vwidth && dheight <= vheight) {\n scale = 1.0;\n }\n else {\n scale = Math.min(vwidth / dwidth, vheight / dheight);\n }\n dx = Math.floor(((vwidth - dwidth * scale) * 0.5 + 0.5));\n dy = Math.floor(((vheight - dheight * scale) * 0.5 + 0.5));\n this.mDrawMatrix.setScale(scale, scale);\n this.mDrawMatrix.postTranslate(dx, dy);\n }\n else {\n this.mTempSrc.set(0, 0, dwidth, dheight);\n this.mTempDst.set(0, 0, vwidth, vheight);\n this.mDrawMatrix = this.mMatrix;\n this.mDrawMatrix.setRectToRect(this.mTempSrc, this.mTempDst, ImageView.scaleTypeToScaleToFit(this.mScaleType));\n }\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n let d = this.mDrawable;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mDrawable == null) {\n return;\n }\n if (this.mDrawableWidth == 0 || this.mDrawableHeight == 0) {\n return;\n }\n if (this.mDrawMatrix == null && this.mPaddingTop == 0 && this.mPaddingLeft == 0) {\n this.mDrawable.draw(canvas);\n }\n else {\n let saveCount = canvas.getSaveCount();\n canvas.save();\n if (this.mCropToPadding) {\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n canvas.translate(this.mPaddingLeft, this.mPaddingTop);\n if (this.mDrawMatrix != null) {\n canvas.concat(this.mDrawMatrix);\n }\n this.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n }\n getBaseline() {\n if (this.mBaselineAlignBottom) {\n return this.getMeasuredHeight();\n }\n else {\n return this.mBaseline;\n }\n }\n setBaseline(baseline) {\n if (this.mBaseline != baseline) {\n this.mBaseline = baseline;\n this.requestLayout();\n }\n }\n setBaselineAlignBottom(aligned) {\n if (this.mBaselineAlignBottom != aligned) {\n this.mBaselineAlignBottom = aligned;\n this.requestLayout();\n }\n }\n getBaselineAlignBottom() {\n return this.mBaselineAlignBottom;\n }\n getImageAlpha() {\n return this.mAlpha;\n }\n setImageAlpha(alpha) {\n alpha &= 0xFF;\n if (this.mAlpha != alpha) {\n this.mAlpha = alpha;\n this.mColorMod = true;\n this.applyColorMod();\n this.invalidate();\n }\n }\n applyColorMod() {\n if (this.mDrawable != null && this.mColorMod) {\n this.mDrawable = this.mDrawable.mutate();\n this.mDrawable.setAlpha(this.mAlpha * this.mViewAlphaScale >> 8);\n }\n }\n setVisibility(visibility) {\n super.setVisibility(visibility);\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(visibility == ImageView.VISIBLE, false);\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(this.getVisibility() == ImageView.VISIBLE, false);\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(false, false);\n }\n }\n static parseScaleType(s, defaultType) {\n if (s == null)\n return defaultType;\n s = s.toLowerCase();\n if (s === 'matrix'.toLowerCase())\n return ImageView.ScaleType.MATRIX;\n if (s === 'fitXY'.toLowerCase())\n return ImageView.ScaleType.FIT_XY;\n if (s === 'fitStart'.toLowerCase())\n return ImageView.ScaleType.FIT_START;\n if (s === 'fitCenter'.toLowerCase())\n return ImageView.ScaleType.FIT_CENTER;\n if (s === 'fitEnd'.toLowerCase())\n return ImageView.ScaleType.FIT_END;\n if (s === 'center'.toLowerCase())\n return ImageView.ScaleType.CENTER;\n if (s === 'centerCrop'.toLowerCase())\n return ImageView.ScaleType.CENTER_CROP;\n if (s === 'centerInside'.toLowerCase())\n return ImageView.ScaleType.CENTER_INSIDE;\n return defaultType;\n }\n }\n ImageView.sS2FArray = [Matrix.ScaleToFit.FILL, Matrix.ScaleToFit.START, Matrix.ScaleToFit.CENTER, Matrix.ScaleToFit.END];\n widget.ImageView = ImageView;\n (function (ImageView) {\n (function (ScaleType) {\n ScaleType[ScaleType[\"MATRIX\"] = 0] = \"MATRIX\";\n ScaleType[ScaleType[\"FIT_XY\"] = 1] = \"FIT_XY\";\n ScaleType[ScaleType[\"FIT_START\"] = 2] = \"FIT_START\";\n ScaleType[ScaleType[\"FIT_CENTER\"] = 3] = \"FIT_CENTER\";\n ScaleType[ScaleType[\"FIT_END\"] = 4] = \"FIT_END\";\n ScaleType[ScaleType[\"CENTER\"] = 5] = \"CENTER\";\n ScaleType[ScaleType[\"CENTER_CROP\"] = 6] = \"CENTER_CROP\";\n ScaleType[ScaleType[\"CENTER_INSIDE\"] = 7] = \"CENTER_INSIDE\";\n })(ImageView.ScaleType || (ImageView.ScaleType = {}));\n var ScaleType = ImageView.ScaleType;\n })(ImageView = widget.ImageView || (widget.ImageView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class ImageButton extends widget.ImageView {\n constructor(context, bindElement, defStyle = android.R.attr.imageButtonStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.ImageButton = ImageButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Trace = android.os.Trace;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var AbsListView = android.widget.AbsListView;\n class GridView extends AbsListView {\n constructor(context, bindElement, defStyle = android.R.attr.gridViewStyle) {\n super(context, bindElement, null);\n this.mNumColumns = GridView.AUTO_FIT;\n this.mHorizontalSpacing = 0;\n this.mRequestedHorizontalSpacing = 0;\n this.mVerticalSpacing = 0;\n this.mStretchMode = GridView.STRETCH_COLUMN_WIDTH;\n this.mColumnWidth = 0;\n this.mRequestedColumnWidth = 0;\n this.mRequestedNumColumns = 0;\n this.mReferenceView = null;\n this.mReferenceViewInSelectedRow = null;\n this.mGravity = Gravity.LEFT;\n this.mTempRect = new Rect();\n this._attrBinder.addAttr('horizontalSpacing', (value) => {\n this.setHorizontalSpacing(this._attrBinder.parseNumberPixelOffset(value, 0));\n });\n this._attrBinder.addAttr('verticalSpacing', (value) => {\n this.setVerticalSpacing(this._attrBinder.parseNumberPixelOffset(value, 0));\n });\n this._attrBinder.addAttr('stretchMode', (value) => {\n this.setStretchMode(this._attrBinder.parseEnum(value, new Map()\n .set(\"none\", GridView.NO_STRETCH)\n .set(\"spacingWidth\", GridView.STRETCH_SPACING)\n .set(\"columnWidth\", GridView.STRETCH_COLUMN_WIDTH)\n .set(\"spacingWidthUniform\", GridView.STRETCH_SPACING_UNIFORM), GridView.STRETCH_COLUMN_WIDTH));\n });\n this._attrBinder.addAttr('columnWidth', (value) => {\n let columnWidth = this._attrBinder.parseNumberPixelOffset(value, -1);\n if (columnWidth > 0) {\n this.setColumnWidth(columnWidth);\n }\n });\n this._attrBinder.addAttr('numColumns', (value) => {\n this.setNumColumns(this._attrBinder.parseInt(value, 1));\n });\n this._attrBinder.addAttr('gravity', (value) => {\n this.setGravity(this._attrBinder.parseGravity(value, this.mGravity));\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n getAdapter() {\n return this.mAdapter;\n }\n setAdapter(adapter) {\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.resetList();\n this.mRecycler.clear();\n this.mAdapter = adapter;\n this.mOldSelectedPosition = GridView.INVALID_POSITION;\n this.mOldSelectedRowId = GridView.INVALID_ROW_ID;\n super.setAdapter(adapter);\n if (this.mAdapter != null) {\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.mDataChanged = true;\n this.checkFocus();\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());\n let position;\n if (this.mStackFromBottom) {\n position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n }\n else {\n position = this.lookForSelectablePosition(0, true);\n }\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n this.checkSelectionChanged();\n }\n else {\n this.checkFocus();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n lookForSelectablePosition(position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return GridView.INVALID_POSITION;\n }\n if (position < 0 || position >= this.mItemCount) {\n return GridView.INVALID_POSITION;\n }\n return position;\n }\n fillGap(down) {\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n const count = this.getChildCount();\n if (down) {\n let paddingTop = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n paddingTop = this.getListPaddingTop();\n }\n const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + verticalSpacing : paddingTop;\n let position = this.mFirstPosition + count;\n if (this.mStackFromBottom) {\n position += numColumns - 1;\n }\n this.fillDown(position, startOffset);\n this.correctTooHigh(numColumns, verticalSpacing, this.getChildCount());\n }\n else {\n let paddingBottom = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n paddingBottom = this.getListPaddingBottom();\n }\n const startOffset = count > 0 ? this.getChildAt(0).getTop() - verticalSpacing : this.getHeight() - paddingBottom;\n let position = this.mFirstPosition;\n if (!this.mStackFromBottom) {\n position -= numColumns;\n }\n else {\n position--;\n }\n this.fillUp(position, startOffset);\n this.correctTooLow(numColumns, verticalSpacing, this.getChildCount());\n }\n }\n fillDown(pos, nextTop) {\n let selectedView = null;\n let end = (this.mBottom - this.mTop);\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n end -= this.mListPadding.bottom;\n }\n while (nextTop < end && pos < this.mItemCount) {\n let temp = this.makeRow(pos, nextTop, true);\n if (temp != null) {\n selectedView = temp;\n }\n nextTop = this.mReferenceView.getBottom() + this.mVerticalSpacing;\n pos += this.mNumColumns;\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n makeRow(startPos, y, flow) {\n const columnWidth = this.mColumnWidth;\n const horizontalSpacing = this.mHorizontalSpacing;\n const isLayoutRtl = this.isLayoutRtl();\n let last;\n let nextLeft;\n if (isLayoutRtl) {\n nextLeft = this.getWidth() - this.mListPadding.right - columnWidth - ((this.mStretchMode == GridView.STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);\n }\n else {\n nextLeft = this.mListPadding.left + ((this.mStretchMode == GridView.STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);\n }\n if (!this.mStackFromBottom) {\n last = Math.min(startPos + this.mNumColumns, this.mItemCount);\n }\n else {\n last = startPos + 1;\n startPos = Math.max(0, startPos - this.mNumColumns + 1);\n if (last - startPos < this.mNumColumns) {\n const deltaLeft = (this.mNumColumns - (last - startPos)) * (columnWidth + horizontalSpacing);\n nextLeft += (isLayoutRtl ? -1 : +1) * deltaLeft;\n }\n }\n let selectedView = null;\n const hasFocus = this.shouldShowSelector();\n const inClick = this.touchModeDrawsInPressedState();\n const selectedPosition = this.mSelectedPosition;\n let child = null;\n for (let pos = startPos; pos < last; pos++) {\n let selected = pos == selectedPosition;\n const where = flow ? -1 : pos - startPos;\n child = this.makeAndAddView(pos, y, flow, nextLeft, selected, where);\n nextLeft += (isLayoutRtl ? -1 : +1) * columnWidth;\n if (pos < last - 1) {\n nextLeft += horizontalSpacing;\n }\n if (selected && (hasFocus || inClick)) {\n selectedView = child;\n }\n }\n this.mReferenceView = child;\n if (selectedView != null) {\n this.mReferenceViewInSelectedRow = this.mReferenceView;\n }\n return selectedView;\n }\n fillUp(pos, nextBottom) {\n let selectedView = null;\n let end = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n end = this.mListPadding.top;\n }\n while (nextBottom > end && pos >= 0) {\n let temp = this.makeRow(pos, nextBottom, false);\n if (temp != null) {\n selectedView = temp;\n }\n nextBottom = this.mReferenceView.getTop() - this.mVerticalSpacing;\n this.mFirstPosition = pos;\n pos -= this.mNumColumns;\n }\n if (this.mStackFromBottom) {\n this.mFirstPosition = Math.max(0, pos + 1);\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillFromTop(nextTop) {\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition);\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1);\n if (this.mFirstPosition < 0) {\n this.mFirstPosition = 0;\n }\n this.mFirstPosition -= this.mFirstPosition % this.mNumColumns;\n return this.fillDown(this.mFirstPosition, nextTop);\n }\n fillFromBottom(lastPosition, nextBottom) {\n lastPosition = Math.max(lastPosition, this.mSelectedPosition);\n lastPosition = Math.min(lastPosition, this.mItemCount - 1);\n const invertedPosition = this.mItemCount - 1 - lastPosition;\n lastPosition = this.mItemCount - 1 - (invertedPosition - (invertedPosition % this.mNumColumns));\n return this.fillUp(lastPosition, nextBottom);\n }\n fillSelection(childrenTop, childrenBottom) {\n const selectedPosition = this.reconcileSelectedPosition();\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n }\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n const sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, topSelectionPixel, true);\n this.mFirstPosition = rowStart;\n const referenceView = this.mReferenceView;\n if (!this.mStackFromBottom) {\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n this.pinToBottom(childrenBottom);\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n else {\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n const offset = bottomSelectionPixel - referenceView.getBottom();\n this.offsetChildrenTopAndBottom(offset);\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n this.pinToTop(childrenTop);\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n return sel;\n }\n pinToTop(childrenTop) {\n if (this.mFirstPosition == 0) {\n const top = this.getChildAt(0).getTop();\n const offset = childrenTop - top;\n if (offset < 0) {\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n }\n pinToBottom(childrenBottom) {\n const count = this.getChildCount();\n if (this.mFirstPosition + count == this.mItemCount) {\n const bottom = this.getChildAt(count - 1).getBottom();\n const offset = childrenBottom - bottom;\n if (offset > 0) {\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n }\n findMotionRow(y) {\n const childCount = this.getChildCount();\n if (childCount > 0) {\n const numColumns = this.mNumColumns;\n if (!this.mStackFromBottom) {\n for (let i = 0; i < childCount; i += numColumns) {\n if (y <= this.getChildAt(i).getBottom()) {\n return this.mFirstPosition + i;\n }\n }\n }\n else {\n for (let i = childCount - 1; i >= 0; i -= numColumns) {\n if (y >= this.getChildAt(i).getTop()) {\n return this.mFirstPosition + i;\n }\n }\n }\n }\n return GridView.INVALID_POSITION;\n }\n fillSpecific(position, top) {\n const numColumns = this.mNumColumns;\n let motionRowStart;\n let motionRowEnd = -1;\n if (!this.mStackFromBottom) {\n motionRowStart = position - (position % numColumns);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - position;\n motionRowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n motionRowStart = Math.max(0, motionRowEnd - numColumns + 1);\n }\n const temp = this.makeRow(this.mStackFromBottom ? motionRowEnd : motionRowStart, top, true);\n this.mFirstPosition = motionRowStart;\n const referenceView = this.mReferenceView;\n if (referenceView == null) {\n return null;\n }\n const verticalSpacing = this.mVerticalSpacing;\n let above;\n let below;\n if (!this.mStackFromBottom) {\n above = this.fillUp(motionRowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n below = this.fillDown(motionRowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n const childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooHigh(numColumns, verticalSpacing, childCount);\n }\n }\n else {\n below = this.fillDown(motionRowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n above = this.fillUp(motionRowStart - 1, referenceView.getTop() - verticalSpacing);\n const childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooLow(numColumns, verticalSpacing, childCount);\n }\n }\n if (temp != null) {\n return temp;\n }\n else if (above != null) {\n return above;\n }\n else {\n return below;\n }\n }\n correctTooHigh(numColumns, verticalSpacing, childCount) {\n const lastPosition = this.mFirstPosition + childCount - 1;\n if (lastPosition == this.mItemCount - 1 && childCount > 0) {\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let bottomOffset = end - lastBottom;\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) {\n if (this.mFirstPosition == 0) {\n bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop);\n }\n this.offsetChildrenTopAndBottom(bottomOffset);\n if (this.mFirstPosition > 0) {\n this.fillUp(this.mFirstPosition - (this.mStackFromBottom ? 1 : numColumns), firstChild.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n correctTooLow(numColumns, verticalSpacing, childCount) {\n if (this.mFirstPosition == 0 && childCount > 0) {\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n const start = this.mListPadding.top;\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let topOffset = firstTop - start;\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const lastPosition = this.mFirstPosition + childCount - 1;\n if (topOffset > 0 && (lastPosition < this.mItemCount - 1 || lastBottom > end)) {\n if (lastPosition == this.mItemCount - 1) {\n topOffset = Math.min(topOffset, lastBottom - end);\n }\n this.offsetChildrenTopAndBottom(-topOffset);\n if (lastPosition < this.mItemCount - 1) {\n this.fillDown(lastPosition + (!this.mStackFromBottom ? 1 : numColumns), lastChild.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n fillFromSelection(selectedTop, childrenTop, childrenBottom) {\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n let invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n }\n let sel;\n let referenceView;\n let topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n let bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, selectedTop, true);\n this.mFirstPosition = rowStart;\n referenceView = this.mReferenceView;\n this.adjustForTopFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n this.adjustForBottomFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n if (!this.mStackFromBottom) {\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n }\n else {\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n }\n return sel;\n }\n getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart) {\n let bottomSelectionPixel = childrenBottom;\n if (rowStart + numColumns - 1 < this.mItemCount - 1) {\n bottomSelectionPixel -= fadingEdgeLength;\n }\n return bottomSelectionPixel;\n }\n getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart) {\n let topSelectionPixel = childrenTop;\n if (rowStart > 0) {\n topSelectionPixel += fadingEdgeLength;\n }\n return topSelectionPixel;\n }\n adjustForBottomFadingEdge(childInSelectedRow, topSelectionPixel, bottomSelectionPixel) {\n if (childInSelectedRow.getBottom() > bottomSelectionPixel) {\n let spaceAbove = childInSelectedRow.getTop() - topSelectionPixel;\n let spaceBelow = childInSelectedRow.getBottom() - bottomSelectionPixel;\n let offset = Math.min(spaceAbove, spaceBelow);\n this.offsetChildrenTopAndBottom(-offset);\n }\n }\n adjustForTopFadingEdge(childInSelectedRow, topSelectionPixel, bottomSelectionPixel) {\n if (childInSelectedRow.getTop() < topSelectionPixel) {\n let spaceAbove = topSelectionPixel - childInSelectedRow.getTop();\n let spaceBelow = bottomSelectionPixel - childInSelectedRow.getBottom();\n let offset = Math.min(spaceAbove, spaceBelow);\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n smoothScrollToPosition(position) {\n super.smoothScrollToPosition(position);\n }\n smoothScrollByOffset(offset) {\n super.smoothScrollByOffset(offset);\n }\n moveSelection(delta, childrenTop, childrenBottom) {\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let oldRowStart;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n oldRowStart = (selectedPosition - delta) - ((selectedPosition - delta) % numColumns);\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n let invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n invertedSelection = this.mItemCount - 1 - (selectedPosition - delta);\n oldRowStart = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n oldRowStart = Math.max(0, oldRowStart - numColumns + 1);\n }\n const rowDelta = rowStart - oldRowStart;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n this.mFirstPosition = rowStart;\n let sel;\n let referenceView;\n if (rowDelta > 0) {\n const oldBottom = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getBottom();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldBottom + verticalSpacing, true);\n referenceView = this.mReferenceView;\n this.adjustForBottomFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n }\n else if (rowDelta < 0) {\n const oldTop = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getTop();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldTop - verticalSpacing, false);\n referenceView = this.mReferenceView;\n this.adjustForTopFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n }\n else {\n const oldTop = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getTop();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldTop, true);\n referenceView = this.mReferenceView;\n }\n if (!this.mStackFromBottom) {\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n }\n else {\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n }\n return sel;\n }\n determineColumns(availableSpace) {\n const requestedHorizontalSpacing = this.mRequestedHorizontalSpacing;\n const stretchMode = this.mStretchMode;\n const requestedColumnWidth = this.mRequestedColumnWidth;\n let didNotInitiallyFit = false;\n if (this.mRequestedNumColumns == GridView.AUTO_FIT) {\n if (requestedColumnWidth > 0) {\n this.mNumColumns = (availableSpace + requestedHorizontalSpacing) / (requestedColumnWidth + requestedHorizontalSpacing);\n }\n else {\n this.mNumColumns = 2;\n }\n }\n else {\n this.mNumColumns = this.mRequestedNumColumns;\n }\n if (this.mNumColumns <= 0) {\n this.mNumColumns = 1;\n }\n switch (stretchMode) {\n case GridView.NO_STRETCH:\n this.mColumnWidth = requestedColumnWidth;\n this.mHorizontalSpacing = requestedHorizontalSpacing;\n break;\n default:\n let spaceLeftOver = availableSpace - (this.mNumColumns * requestedColumnWidth) - ((this.mNumColumns - 1) * requestedHorizontalSpacing);\n if (spaceLeftOver < 0) {\n didNotInitiallyFit = true;\n }\n switch (stretchMode) {\n case GridView.STRETCH_COLUMN_WIDTH:\n this.mColumnWidth = requestedColumnWidth + spaceLeftOver / this.mNumColumns;\n this.mHorizontalSpacing = requestedHorizontalSpacing;\n break;\n case GridView.STRETCH_SPACING:\n this.mColumnWidth = requestedColumnWidth;\n if (this.mNumColumns > 1) {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver / (this.mNumColumns - 1);\n }\n else {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver;\n }\n break;\n case GridView.STRETCH_SPACING_UNIFORM:\n this.mColumnWidth = requestedColumnWidth;\n if (this.mNumColumns > 1) {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver / (this.mNumColumns + 1);\n }\n else {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver;\n }\n break;\n }\n break;\n }\n return didNotInitiallyFit;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n let widthMode = GridView.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = GridView.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = GridView.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = GridView.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode == GridView.MeasureSpec.UNSPECIFIED) {\n if (this.mColumnWidth > 0) {\n widthSize = this.mColumnWidth + this.mListPadding.left + this.mListPadding.right;\n }\n else {\n widthSize = this.mListPadding.left + this.mListPadding.right;\n }\n widthSize += this.getVerticalScrollbarWidth();\n }\n let childWidth = widthSize - this.mListPadding.left - this.mListPadding.right;\n let didNotInitiallyFit = this.determineColumns(childWidth);\n let childHeight = 0;\n let childState = 0;\n this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount();\n const count = this.mItemCount;\n if (count > 0) {\n const child = this.obtainView(0, this.mIsScrap);\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n child.setLayoutParams(p);\n }\n p.viewType = this.mAdapter.getItemViewType(0);\n p.forceAdd = true;\n let childHeightSpec = GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(0, GridView.MeasureSpec.UNSPECIFIED), 0, p.height);\n let childWidthSpec = GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(this.mColumnWidth, GridView.MeasureSpec.EXACTLY), 0, p.width);\n child.measure(childWidthSpec, childHeightSpec);\n childHeight = child.getMeasuredHeight();\n childState = GridView.combineMeasuredStates(childState, child.getMeasuredState());\n if (this.mRecycler.shouldRecycleViewType(p.viewType)) {\n this.mRecycler.addScrapView(child, -1);\n }\n }\n if (heightMode == GridView.MeasureSpec.UNSPECIFIED) {\n heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2;\n }\n if (heightMode == GridView.MeasureSpec.AT_MOST) {\n let ourSize = this.mListPadding.top + this.mListPadding.bottom;\n const numColumns = this.mNumColumns;\n for (let i = 0; i < count; i += numColumns) {\n ourSize += childHeight;\n if (i + numColumns < count) {\n ourSize += this.mVerticalSpacing;\n }\n if (ourSize >= heightSize) {\n ourSize = heightSize;\n break;\n }\n }\n heightSize = ourSize;\n }\n if (widthMode == GridView.MeasureSpec.AT_MOST && this.mRequestedNumColumns != GridView.AUTO_FIT) {\n let ourSize = (this.mRequestedNumColumns * this.mColumnWidth) + ((this.mRequestedNumColumns - 1) * this.mHorizontalSpacing) + this.mListPadding.left + this.mListPadding.right;\n if (ourSize > widthSize || didNotInitiallyFit) {\n widthSize |= GridView.MEASURED_STATE_TOO_SMALL;\n }\n }\n this.setMeasuredDimension(widthSize, heightSize);\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n layoutChildren() {\n const blockLayoutRequests = this.mBlockLayoutRequests;\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = true;\n }\n try {\n super.layoutChildren();\n this.invalidate();\n if (this.mAdapter == null) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n const childrenTop = this.mListPadding.top;\n const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n let childCount = this.getChildCount();\n let index;\n let delta = 0;\n let sel;\n let oldSel = null;\n let oldFirst = null;\n let newSel = null;\n switch (this.mLayoutMode) {\n case GridView.LAYOUT_SET_SELECTION:\n index = this.mNextSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n newSel = this.getChildAt(index);\n }\n break;\n case GridView.LAYOUT_FORCE_TOP:\n case GridView.LAYOUT_FORCE_BOTTOM:\n case GridView.LAYOUT_SPECIFIC:\n case GridView.LAYOUT_SYNC:\n break;\n case GridView.LAYOUT_MOVE_SELECTION:\n if (this.mNextSelectedPosition >= 0) {\n delta = this.mNextSelectedPosition - this.mSelectedPosition;\n }\n break;\n default:\n index = this.mSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n oldSel = this.getChildAt(index);\n }\n oldFirst = this.getChildAt(0);\n }\n let dataChanged = this.mDataChanged;\n if (dataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n const firstPosition = this.mFirstPosition;\n const recycleBin = this.mRecycler;\n if (dataChanged) {\n for (let i = 0; i < childCount; i++) {\n recycleBin.addScrapView(this.getChildAt(i), firstPosition + i);\n }\n }\n else {\n recycleBin.fillActiveViews(childCount, firstPosition);\n }\n this.detachAllViewsFromParent();\n recycleBin.removeSkippedScrap();\n switch (this.mLayoutMode) {\n case GridView.LAYOUT_SET_SELECTION:\n if (newSel != null) {\n sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom);\n }\n else {\n sel = this.fillSelection(childrenTop, childrenBottom);\n }\n break;\n case GridView.LAYOUT_FORCE_TOP:\n this.mFirstPosition = 0;\n sel = this.fillFromTop(childrenTop);\n this.adjustViewsUpOrDown();\n break;\n case GridView.LAYOUT_FORCE_BOTTOM:\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n this.adjustViewsUpOrDown();\n break;\n case GridView.LAYOUT_SPECIFIC:\n sel = this.fillSpecific(this.mSelectedPosition, this.mSpecificTop);\n break;\n case GridView.LAYOUT_SYNC:\n sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop);\n break;\n case GridView.LAYOUT_MOVE_SELECTION:\n sel = this.moveSelection(delta, childrenTop, childrenBottom);\n break;\n default:\n if (childCount == 0) {\n if (!this.mStackFromBottom) {\n this.setSelectedPositionInt(this.mAdapter == null || this.isInTouchMode() ? GridView.INVALID_POSITION : 0);\n sel = this.fillFromTop(childrenTop);\n }\n else {\n const last = this.mItemCount - 1;\n this.setSelectedPositionInt(this.mAdapter == null || this.isInTouchMode() ? GridView.INVALID_POSITION : last);\n sel = this.fillFromBottom(last, childrenBottom);\n }\n }\n else {\n if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop());\n }\n else if (this.mFirstPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop());\n }\n else {\n sel = this.fillSpecific(0, childrenTop);\n }\n }\n break;\n }\n recycleBin.scrapActiveViews();\n if (sel != null) {\n this.positionSelector(GridView.INVALID_POSITION, sel);\n this.mSelectedTop = sel.getTop();\n }\n else if (this.mTouchMode > GridView.TOUCH_MODE_DOWN && this.mTouchMode < GridView.TOUCH_MODE_SCROLL) {\n let child = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (child != null)\n this.positionSelector(this.mMotionPosition, child);\n }\n else {\n this.mSelectedTop = 0;\n this.mSelectorRect.setEmpty();\n }\n this.mLayoutMode = GridView.LAYOUT_NORMAL;\n this.mDataChanged = false;\n if (this.mPositionScrollAfterLayout != null) {\n this.post(this.mPositionScrollAfterLayout);\n this.mPositionScrollAfterLayout = null;\n }\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n this.updateScrollIndicators();\n if (this.mItemCount > 0) {\n this.checkSelectionChanged();\n }\n this.invokeOnItemScrollListener();\n }\n finally {\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = false;\n }\n }\n }\n makeAndAddView(position, y, flow, childrenLeft, selected, where) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.getActiveView(position);\n if (child != null) {\n this.setupChild(child, position, y, flow, childrenLeft, selected, true, where);\n return child;\n }\n }\n child = this.obtainView(position, this.mIsScrap);\n this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0], where);\n return child;\n }\n setupChild(child, position, y, flow, childrenLeft, selected, recycled, where) {\n Trace.traceBegin(Trace.TRACE_TAG_VIEW, \"setupGridItem\");\n let isSelected = selected && this.shouldShowSelector();\n const updateChildSelected = isSelected != child.isSelected();\n const mode = this.mTouchMode;\n const isPressed = mode > GridView.TOUCH_MODE_DOWN && mode < GridView.TOUCH_MODE_SCROLL && this.mMotionPosition == position;\n const updateChildPressed = isPressed != child.isPressed();\n let needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n if (recycled && !p.forceAdd) {\n this.attachViewToParent(child, where, p);\n }\n else {\n p.forceAdd = false;\n this.addViewInLayout(child, where, p, true);\n }\n if (updateChildSelected) {\n child.setSelected(isSelected);\n if (isSelected) {\n this.requestFocus();\n }\n }\n if (updateChildPressed) {\n child.setPressed(isPressed);\n }\n if (this.mChoiceMode != GridView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n if (needToMeasure) {\n let childHeightSpec = ViewGroup.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(0, GridView.MeasureSpec.UNSPECIFIED), 0, p.height);\n let childWidthSpec = ViewGroup.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(this.mColumnWidth, GridView.MeasureSpec.EXACTLY), 0, p.width);\n child.measure(childWidthSpec, childHeightSpec);\n }\n else {\n this.cleanupLayoutState(child);\n }\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n let childLeft;\n const childTop = flow ? y : y - h;\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n childLeft = childrenLeft;\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = childrenLeft + ((this.mColumnWidth - w) / 2);\n break;\n case Gravity.RIGHT:\n childLeft = childrenLeft + this.mColumnWidth - w;\n break;\n default:\n childLeft = childrenLeft;\n break;\n }\n if (needToMeasure) {\n const childRight = childLeft + w;\n const childBottom = childTop + h;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n else {\n child.offsetLeftAndRight(childLeft - child.getLeft());\n child.offsetTopAndBottom(childTop - child.getTop());\n }\n if (this.mCachingStarted) {\n child.setDrawingCacheEnabled(true);\n }\n if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) {\n child.jumpDrawablesToCurrentState();\n }\n Trace.traceEnd(Trace.TRACE_TAG_VIEW);\n }\n setSelection(position) {\n if (!this.isInTouchMode()) {\n this.setNextSelectedPositionInt(position);\n }\n else {\n this.mResurrectToPosition = position;\n }\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.requestLayout();\n }\n setSelectionInt(position) {\n let previousSelectedPosition = this.mNextSelectedPosition;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.setNextSelectedPositionInt(position);\n this.layoutChildren();\n const next = this.mStackFromBottom ? this.mItemCount - 1 - this.mNextSelectedPosition : this.mNextSelectedPosition;\n const previous = this.mStackFromBottom ? this.mItemCount - 1 - previousSelectedPosition : previousSelectedPosition;\n const nextRow = next / this.mNumColumns;\n const previousRow = previous / this.mNumColumns;\n if (nextRow != previousRow) {\n this.awakenScrollBars();\n }\n }\n onKeyDown(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return this.commonKey(keyCode, repeatCount, event);\n }\n onKeyUp(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n commonKey(keyCode, count, event) {\n if (this.mAdapter == null) {\n return false;\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n let handled = false;\n let action = event.getAction();\n if (action != KeyEvent.ACTION_UP) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) {\n this.keyPressed();\n handled = true;\n }\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_HOME:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_END:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_TAB:\n if (false) {\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.sequenceScroll(GridView.FOCUS_FORWARD);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.sequenceScroll(GridView.FOCUS_BACKWARD);\n }\n }\n break;\n }\n }\n if (handled) {\n return true;\n }\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return super.onKeyDown(keyCode, event);\n case KeyEvent.ACTION_UP:\n return super.onKeyUp(keyCode, event);\n default:\n return false;\n }\n }\n pageScroll(direction) {\n let nextPage = -1;\n if (direction == GridView.FOCUS_UP) {\n nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount());\n }\n else if (direction == GridView.FOCUS_DOWN) {\n nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount());\n }\n if (nextPage >= 0) {\n this.setSelectionInt(nextPage);\n this.invokeOnItemScrollListener();\n this.awakenScrollBars();\n return true;\n }\n return false;\n }\n fullScroll(direction) {\n let moved = false;\n if (direction == GridView.FOCUS_UP) {\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n this.setSelectionInt(0);\n this.invokeOnItemScrollListener();\n moved = true;\n }\n else if (direction == GridView.FOCUS_DOWN) {\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n this.setSelectionInt(this.mItemCount - 1);\n this.invokeOnItemScrollListener();\n moved = true;\n }\n if (moved) {\n this.awakenScrollBars();\n }\n return moved;\n }\n arrowScroll(direction) {\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n let startOfRowPos;\n let endOfRowPos;\n let moved = false;\n if (!this.mStackFromBottom) {\n startOfRowPos = Math.floor(selectedPosition / numColumns) * numColumns;\n endOfRowPos = Math.min(startOfRowPos + numColumns - 1, this.mItemCount - 1);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - selectedPosition;\n endOfRowPos = this.mItemCount - 1 - (invertedSelection / numColumns) * numColumns;\n startOfRowPos = Math.max(0, endOfRowPos - numColumns + 1);\n }\n switch (direction) {\n case GridView.FOCUS_UP:\n if (startOfRowPos > 0) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.max(0, selectedPosition - numColumns));\n moved = true;\n }\n break;\n case GridView.FOCUS_DOWN:\n if (endOfRowPos < this.mItemCount - 1) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.min(selectedPosition + numColumns, this.mItemCount - 1));\n moved = true;\n }\n break;\n case GridView.FOCUS_LEFT:\n if (selectedPosition > startOfRowPos) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.max(0, selectedPosition - 1));\n moved = true;\n }\n break;\n case GridView.FOCUS_RIGHT:\n if (selectedPosition < endOfRowPos) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.min(selectedPosition + 1, this.mItemCount - 1));\n moved = true;\n }\n break;\n }\n if (moved) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n this.invokeOnItemScrollListener();\n }\n if (moved) {\n this.awakenScrollBars();\n }\n return moved;\n }\n sequenceScroll(direction) {\n let selectedPosition = this.mSelectedPosition;\n let numColumns = this.mNumColumns;\n let count = this.mItemCount;\n let startOfRow;\n let endOfRow;\n if (!this.mStackFromBottom) {\n startOfRow = (selectedPosition / numColumns) * numColumns;\n endOfRow = Math.min(startOfRow + numColumns - 1, count - 1);\n }\n else {\n let invertedSelection = count - 1 - selectedPosition;\n endOfRow = count - 1 - (invertedSelection / numColumns) * numColumns;\n startOfRow = Math.max(0, endOfRow - numColumns + 1);\n }\n let moved = false;\n let showScroll = false;\n switch (direction) {\n case GridView.FOCUS_FORWARD:\n if (selectedPosition < count - 1) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(selectedPosition + 1);\n moved = true;\n showScroll = selectedPosition == endOfRow;\n }\n break;\n case GridView.FOCUS_BACKWARD:\n if (selectedPosition > 0) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(selectedPosition - 1);\n moved = true;\n showScroll = selectedPosition == startOfRow;\n }\n break;\n }\n if (moved) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n this.invokeOnItemScrollListener();\n }\n if (showScroll) {\n this.awakenScrollBars();\n }\n return moved;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n let closestChildIndex = -1;\n if (gainFocus && previouslyFocusedRect != null) {\n previouslyFocusedRect.offset(this.mScrollX, this.mScrollY);\n let otherRect = this.mTempRect;\n let minDistance = Integer.MAX_VALUE;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n if (!this.isCandidateSelection(i, direction)) {\n continue;\n }\n const other = this.getChildAt(i);\n other.getDrawingRect(otherRect);\n this.offsetDescendantRectToMyCoords(other, otherRect);\n let distance = GridView.getDistance(previouslyFocusedRect, otherRect, direction);\n if (distance < minDistance) {\n minDistance = distance;\n closestChildIndex = i;\n }\n }\n }\n if (closestChildIndex >= 0) {\n this.setSelection(closestChildIndex + this.mFirstPosition);\n }\n else {\n this.requestLayout();\n }\n }\n isCandidateSelection(childIndex, direction) {\n const count = this.getChildCount();\n const invertedIndex = count - 1 - childIndex;\n let rowStart;\n let rowEnd;\n if (!this.mStackFromBottom) {\n rowStart = childIndex - (childIndex % this.mNumColumns);\n rowEnd = Math.max(rowStart + this.mNumColumns - 1, count);\n }\n else {\n rowEnd = count - 1 - (invertedIndex - (invertedIndex % this.mNumColumns));\n rowStart = Math.max(0, rowEnd - this.mNumColumns + 1);\n }\n switch (direction) {\n case View.FOCUS_RIGHT:\n return childIndex == rowStart;\n case View.FOCUS_DOWN:\n return rowStart == 0;\n case View.FOCUS_LEFT:\n return childIndex == rowEnd;\n case View.FOCUS_UP:\n return rowEnd == count - 1;\n case View.FOCUS_FORWARD:\n return childIndex == rowStart && rowStart == 0;\n case View.FOCUS_BACKWARD:\n return childIndex == rowEnd && rowEnd == count - 1;\n default:\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, \" + \"FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n this.mGravity = gravity;\n this.requestLayoutIfNecessary();\n }\n }\n getGravity() {\n return this.mGravity;\n }\n setHorizontalSpacing(horizontalSpacing) {\n if (horizontalSpacing != this.mRequestedHorizontalSpacing) {\n this.mRequestedHorizontalSpacing = horizontalSpacing;\n this.requestLayoutIfNecessary();\n }\n }\n getHorizontalSpacing() {\n return this.mHorizontalSpacing;\n }\n getRequestedHorizontalSpacing() {\n return this.mRequestedHorizontalSpacing;\n }\n setVerticalSpacing(verticalSpacing) {\n if (verticalSpacing != this.mVerticalSpacing) {\n this.mVerticalSpacing = verticalSpacing;\n this.requestLayoutIfNecessary();\n }\n }\n getVerticalSpacing() {\n return this.mVerticalSpacing;\n }\n setStretchMode(stretchMode) {\n if (stretchMode != this.mStretchMode) {\n this.mStretchMode = stretchMode;\n this.requestLayoutIfNecessary();\n }\n }\n getStretchMode() {\n return this.mStretchMode;\n }\n setColumnWidth(columnWidth) {\n if (columnWidth != this.mRequestedColumnWidth) {\n this.mRequestedColumnWidth = columnWidth;\n this.requestLayoutIfNecessary();\n }\n }\n getColumnWidth() {\n return this.mColumnWidth;\n }\n getRequestedColumnWidth() {\n return this.mRequestedColumnWidth;\n }\n setNumColumns(numColumns) {\n if (numColumns != this.mRequestedNumColumns) {\n this.mRequestedNumColumns = numColumns;\n this.requestLayoutIfNecessary();\n }\n }\n getNumColumns() {\n return this.mNumColumns;\n }\n adjustViewsUpOrDown() {\n const childCount = this.getChildCount();\n if (childCount > 0) {\n let delta;\n let child;\n if (!this.mStackFromBottom) {\n child = this.getChildAt(0);\n delta = child.getTop() - this.mListPadding.top;\n if (this.mFirstPosition != 0) {\n delta -= this.mVerticalSpacing;\n }\n if (delta < 0) {\n delta = 0;\n }\n }\n else {\n child = this.getChildAt(childCount - 1);\n delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom);\n if (this.mFirstPosition + childCount < this.mItemCount) {\n delta += this.mVerticalSpacing;\n }\n if (delta > 0) {\n delta = 0;\n }\n }\n if (delta != 0) {\n this.offsetChildrenTopAndBottom(-delta);\n }\n }\n }\n computeVerticalScrollExtent() {\n const count = this.getChildCount();\n if (count > 0) {\n const numColumns = this.mNumColumns;\n const rowCount = (count + numColumns - 1) / numColumns;\n let extent = rowCount * 100;\n let view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n extent += (top * 100) / height;\n }\n view = this.getChildAt(count - 1);\n const bottom = view.getBottom();\n height = view.getHeight();\n if (height > 0) {\n extent -= ((bottom - this.getHeight()) * 100) / height;\n }\n return extent;\n }\n return 0;\n }\n computeVerticalScrollOffset() {\n if (this.mFirstPosition >= 0 && this.getChildCount() > 0) {\n const view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n const numColumns = this.mNumColumns;\n const rowCount = (this.mItemCount + numColumns - 1) / numColumns;\n const oddItemsOnFirstRow = this.isStackFromBottom() ? ((rowCount * numColumns) - this.mItemCount) : 0;\n const whichRow = (this.mFirstPosition + oddItemsOnFirstRow) / numColumns;\n return Math.max(whichRow * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * rowCount * 100)), 0);\n }\n }\n return 0;\n }\n computeVerticalScrollRange() {\n const numColumns = this.mNumColumns;\n const rowCount = (this.mItemCount + numColumns - 1) / numColumns;\n let result = Math.max(rowCount * 100, 0);\n if (this.mScrollY != 0) {\n result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * rowCount * 100)));\n }\n return result;\n }\n }\n GridView.NO_STRETCH = 0;\n GridView.STRETCH_SPACING = 1;\n GridView.STRETCH_COLUMN_WIDTH = 2;\n GridView.STRETCH_SPACING_UNIFORM = 3;\n GridView.AUTO_FIT = -1;\n widget.GridView = GridView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var Comparable;\n (function (Comparable) {\n function isImpl(obj) {\n return obj && obj['compareTo'];\n }\n Comparable.isImpl = isImpl;\n })(Comparable = lang.Comparable || (lang.Comparable = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n var Comparable = java.lang.Comparable;\n class Collections {\n static emptyList() {\n return Collections.EMPTY_LIST;\n }\n static sort(list, c) {\n if (c) {\n list.sort((t1, t2) => {\n return c.compare(t1, t2);\n });\n }\n else {\n list.sort((t1, t2) => {\n if (Comparable.isImpl(t1) && Comparable.isImpl(t2)) {\n return t1.compareTo(t2);\n }\n return 0;\n });\n }\n }\n }\n Collections.EMPTY_LIST = new util.ArrayList();\n util.Collections = Collections;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Color = android.graphics.Color;\n var Paint = android.graphics.Paint;\n var Align = android.graphics.Paint.Align;\n var SparseArray = android.util.SparseArray;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var DecelerateInterpolator = android.view.animation.DecelerateInterpolator;\n var Integer = java.lang.Integer;\n var LinearLayout = android.widget.LinearLayout;\n var OverScroller = android.widget.OverScroller;\n var R = android.R;\n class NumberPicker extends LinearLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.SELECTOR_WHEEL_ITEM_COUNT = 3;\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectionDividersDistance = 0;\n this.mMinHeight_ = NumberPicker.SIZE_UNSPECIFIED;\n this.mMaxHeight = NumberPicker.SIZE_UNSPECIFIED;\n this.mMinWidth_ = NumberPicker.SIZE_UNSPECIFIED;\n this.mMaxWidth = NumberPicker.SIZE_UNSPECIFIED;\n this.mTextSize = 0;\n this.mSelectorTextGapHeight = 0;\n this.mMinValue = 0;\n this.mMaxValue = 0;\n this.mValue = 0;\n this.mLongPressUpdateInterval = NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;\n this.mSelectorIndexToStringCache = new SparseArray();\n this.mSelectorElementHeight = 0;\n this.mInitialScrollOffset = Integer.MIN_VALUE;\n this.mCurrentScrollOffset = 0;\n this.mPreviousScrollerY = 0;\n this.mLastDownEventY = 0;\n this.mLastDownEventTime = 0;\n this.mLastDownOrMoveEventY = 0;\n this.mMinimumFlingVelocity = 0;\n this.mMaximumFlingVelocity = 0;\n this.mSolidColor = 0;\n this.mSelectionDividerHeight = 0;\n this.mScrollState = NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;\n this.mTopSelectionDividerTop = 0;\n this.mBottomSelectionDividerBottom = 0;\n this.mLastHoveredChildVirtualViewId = 0;\n this.mLastHandledDownDpadKeyCode = -1;\n this.mHasSelectorWheel = true;\n this._attrBinder.addAttr('solidColor', (value) => {\n this.mSolidColor = this._attrBinder.parseColor(value) || 0;\n });\n this._attrBinder.addAttr('selectionDivider', (value) => {\n this.mSelectionDivider = this._attrBinder.parseDrawable(value);\n });\n this._attrBinder.addAttr('selectionDividerHeight', (value) => {\n const defSelectionDividerHeight = NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT\n * this.getResources().getDisplayMetrics().density;\n this.mSelectionDividerHeight = this._attrBinder.parseNumberPixelSize(value, defSelectionDividerHeight);\n });\n this._attrBinder.addAttr('selectionDividersDistance', (value) => {\n const defSelectionDividerDistance = NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE\n * this.getResources().getDisplayMetrics().density;\n this.mSelectionDividersDistance = this._attrBinder.parseNumberPixelSize(value, defSelectionDividerDistance);\n });\n this._attrBinder.addAttr('internalMinHeight', (value) => {\n this.mMinHeight_ = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxHeight', (value) => {\n this.mMaxHeight = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMinWidth', (value) => {\n this.mMinWidth_ = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('virtualButtonPressedDrawable', (value) => {\n this.mVirtualButtonPressedDrawable = this._attrBinder.parseDrawable(value);\n });\n this._attrBinder.addAttr('textSize', (value) => {\n this.mTextSize = this._attrBinder.parseNumberPixelSize(value, this.mTextSize);\n this.mSelectorWheelPaint.setTextSize(this.mTextSize);\n });\n this._attrBinder.addAttr('textColor', (value) => {\n this.mSelectorWheelPaint.setColor(this._attrBinder.parseColor(value, this.mSelectorWheelPaint.getColor()));\n });\n this._attrBinder.addAttr('minValue', (value) => {\n this.setMinValue(this._attrBinder.parseInt(value, this.mMinValue));\n });\n this._attrBinder.addAttr('maxValue', (value) => {\n this.setMaxValue(this._attrBinder.parseInt(value, this.mMaxValue));\n });\n this._attrBinder.addAttr('itemCount', (value) => {\n this.SELECTOR_WHEEL_ITEM_COUNT = this._attrBinder.parseInt(value, this.SELECTOR_WHEEL_ITEM_COUNT);\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectorIndices = androidui.util.ArrayCreator.newNumberArray(this.SELECTOR_WHEEL_ITEM_COUNT);\n });\n this.mTextSize = Math.floor(16 * this.getResources().getDisplayMetrics().density);\n let paint = new Paint();\n paint.setAntiAlias(true);\n paint.setTextAlign(Align.CENTER);\n paint.setTextSize(this.mTextSize);\n paint.setColor(Color.DKGRAY);\n this.mSelectorWheelPaint = paint;\n this.mSelectorIndices = androidui.util.ArrayCreator.newNumberArray(this.SELECTOR_WHEEL_ITEM_COUNT);\n this.applyDefaultAttributes(R.attr.numberPickerStyle);\n if (this.mMinHeight_ != NumberPicker.SIZE_UNSPECIFIED && this.mMaxHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMinHeight_ > this.mMaxHeight) {\n throw Error(`new IllegalArgumentException(\"minHeight > maxHeight\")`);\n }\n if (this.mMinWidth_ != NumberPicker.SIZE_UNSPECIFIED && this.mMaxWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMinWidth_ > this.mMaxWidth) {\n throw Error(`new IllegalArgumentException(\"minWidth > maxWidth\")`);\n }\n this.mComputeMaxWidth = (this.mMaxWidth == NumberPicker.SIZE_UNSPECIFIED);\n this.mPressedStateHelper = new NumberPicker.PressedStateHelper(this);\n this.setWillNotDraw(!this.mHasSelectorWheel);\n let configuration = ViewConfiguration.get();\n this.mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity() / NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;\n this.mFlingScroller = new OverScroller(null, true);\n this.mAdjustScroller = new OverScroller(new DecelerateInterpolator(2.5));\n this.updateInputTextView();\n }\n static getTwoDigitFormatter() {\n if (!NumberPicker.sTwoDigitFormatter) {\n NumberPicker.sTwoDigitFormatter = new NumberPicker.TwoDigitFormatter();\n }\n return NumberPicker.sTwoDigitFormatter;\n }\n onLayout(changed, left, top, right, bottom) {\n if (!this.mHasSelectorWheel) {\n super.onLayout(changed, left, top, right, bottom);\n return;\n }\n const msrdWdth = this.getMeasuredWidth();\n const msrdHght = this.getMeasuredHeight();\n if (changed) {\n this.initializeSelectorWheel();\n this.initializeFadingEdges();\n this.mTopSelectionDividerTop = (this.getHeight() - this.mSelectionDividersDistance) / 2 - this.mSelectionDividerHeight;\n this.mBottomSelectionDividerBottom = this.mTopSelectionDividerTop + 2 * this.mSelectionDividerHeight + this.mSelectionDividersDistance;\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (!this.mHasSelectorWheel) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n return;\n }\n const newWidthMeasureSpec = this.makeMeasureSpec(widthMeasureSpec, this.mMaxWidth);\n const newHeightMeasureSpec = this.makeMeasureSpec(heightMeasureSpec, this.mMaxHeight);\n super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec);\n const widthSize = this.resolveSizeAndStateRespectingMinSize(this.mMinWidth_, this.getMeasuredWidth(), widthMeasureSpec);\n const heightSize = this.resolveSizeAndStateRespectingMinSize(this.mMinHeight_, this.getMeasuredHeight(), heightMeasureSpec);\n this.setMeasuredDimension(widthSize, heightSize);\n }\n moveToFinalScrollerPosition(scroller) {\n scroller.forceFinished(true);\n let amountToScroll = scroller.getFinalY() - scroller.getCurrY();\n let futureScrollOffset = (this.mCurrentScrollOffset + amountToScroll) % this.mSelectorElementHeight;\n let overshootAdjustment = this.mInitialScrollOffset - futureScrollOffset;\n if (overshootAdjustment != 0) {\n if (Math.abs(overshootAdjustment) > this.mSelectorElementHeight / 2) {\n if (overshootAdjustment > 0) {\n overshootAdjustment -= this.mSelectorElementHeight;\n }\n else {\n overshootAdjustment += this.mSelectorElementHeight;\n }\n }\n amountToScroll += overshootAdjustment;\n this.scrollBy(0, amountToScroll);\n return true;\n }\n return false;\n }\n onInterceptTouchEvent(event) {\n if (!this.mHasSelectorWheel || !this.isEnabled()) {\n return false;\n }\n const action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n this.removeAllCallbacks();\n this.mLastDownOrMoveEventY = this.mLastDownEventY = event.getY();\n this.mLastDownEventTime = event.getEventTime();\n this.mIngonreMoveEvents = false;\n this.mShowSoftInputOnTap = false;\n if (this.mLastDownEventY < this.mTopSelectionDividerTop) {\n if (this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);\n }\n }\n else if (this.mLastDownEventY > this.mBottomSelectionDividerBottom) {\n if (this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);\n }\n }\n this.getParent().requestDisallowInterceptTouchEvent(true);\n if (!this.mFlingScroller.isFinished()) {\n this.mFlingScroller.forceFinished(true);\n this.mAdjustScroller.forceFinished(true);\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else if (!this.mAdjustScroller.isFinished()) {\n this.mFlingScroller.forceFinished(true);\n this.mAdjustScroller.forceFinished(true);\n }\n else if (this.mLastDownEventY < this.mTopSelectionDividerTop) {\n this.hideSoftInput();\n this.postChangeCurrentByOneFromLongPress(false, ViewConfiguration.getLongPressTimeout());\n }\n else if (this.mLastDownEventY > this.mBottomSelectionDividerBottom) {\n this.hideSoftInput();\n this.postChangeCurrentByOneFromLongPress(true, ViewConfiguration.getLongPressTimeout());\n }\n else {\n this.mShowSoftInputOnTap = true;\n this.postBeginSoftInputOnLongPressCommand();\n }\n return true;\n }\n }\n return false;\n }\n onTouchEvent(event) {\n if (!this.isEnabled() || !this.mHasSelectorWheel) {\n return false;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(event);\n let action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mIngonreMoveEvents) {\n break;\n }\n let currentMoveY = event.getY();\n if (this.mScrollState != NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {\n let deltaDownY = Math.floor(Math.abs(currentMoveY - this.mLastDownEventY));\n if (deltaDownY > this.mTouchSlop) {\n this.removeAllCallbacks();\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n }\n }\n else {\n let deltaMoveY = Math.floor(((currentMoveY - this.mLastDownOrMoveEventY)));\n this.scrollBy(0, deltaMoveY);\n this.invalidate();\n }\n this.mLastDownOrMoveEventY = currentMoveY;\n }\n break;\n case MotionEvent.ACTION_UP:\n {\n this.removeBeginSoftInputCommand();\n this.removeChangeCurrentByOneFromLongPress();\n this.mPressedStateHelper.cancel();\n let velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n let initialVelocity = Math.floor(velocityTracker.getYVelocity());\n if (Math.abs(initialVelocity) > this.mMinimumFlingVelocity) {\n this.fling(initialVelocity);\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_FLING);\n }\n else {\n let eventY = Math.floor(event.getY());\n let deltaMoveY = Math.floor(Math.abs(eventY - this.mLastDownEventY));\n let deltaTime = event.getEventTime() - this.mLastDownEventTime;\n if (deltaMoveY <= this.mTouchSlop && deltaTime < ViewConfiguration.getTapTimeout()) {\n if (this.mShowSoftInputOnTap) {\n this.mShowSoftInputOnTap = false;\n this.showSoftInput();\n }\n else {\n let selectorIndexOffset = (eventY / this.mSelectorElementHeight) - this.SELECTOR_MIDDLE_ITEM_INDEX;\n if (selectorIndexOffset > 0) {\n this.changeValueByOne(true);\n this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);\n }\n else if (selectorIndexOffset < 0) {\n this.changeValueByOne(false);\n this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);\n }\n }\n }\n else {\n this.ensureScrollWheelAdjusted();\n }\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n return true;\n }\n dispatchTouchEvent(event) {\n const action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.removeAllCallbacks();\n break;\n }\n return super.dispatchTouchEvent(event);\n }\n dispatchKeyEvent(event) {\n const keyCode = event.getKeyCode();\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n this.removeAllCallbacks();\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n case KeyEvent.KEYCODE_DPAD_UP:\n if (!this.mHasSelectorWheel) {\n break;\n }\n switch (event.getAction()) {\n case KeyEvent.ACTION_DOWN:\n if (this.mWrapSelectorWheel || (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) ? this.getValue() < this.getMaxValue() : this.getValue() > this.getMinValue()) {\n this.requestFocus();\n this.mLastHandledDownDpadKeyCode = keyCode;\n this.removeAllCallbacks();\n if (this.mFlingScroller.isFinished()) {\n this.changeValueByOne(keyCode == KeyEvent.KEYCODE_DPAD_DOWN);\n }\n return true;\n }\n break;\n case KeyEvent.ACTION_UP:\n if (this.mLastHandledDownDpadKeyCode == keyCode) {\n this.mLastHandledDownDpadKeyCode = -1;\n return true;\n }\n break;\n }\n }\n return super.dispatchKeyEvent(event);\n }\n computeScroll() {\n let scroller = this.mFlingScroller;\n if (scroller.isFinished()) {\n scroller = this.mAdjustScroller;\n if (scroller.isFinished()) {\n return;\n }\n }\n scroller.computeScrollOffset();\n let currentScrollerY = scroller.getCurrY();\n if (this.mPreviousScrollerY == 0) {\n this.mPreviousScrollerY = scroller.getStartY();\n }\n this.scrollBy(0, currentScrollerY - this.mPreviousScrollerY);\n this.mPreviousScrollerY = currentScrollerY;\n if (scroller.isFinished()) {\n this.onScrollerFinished(scroller);\n }\n else {\n this.invalidate();\n }\n }\n setEnabled(enabled) {\n super.setEnabled(enabled);\n if (!this.mHasSelectorWheel) {\n }\n if (!this.mHasSelectorWheel) {\n }\n }\n scrollBy(x, y) {\n let selectorIndices = this.mSelectorIndices;\n if (!this.mWrapSelectorWheel && y > 0 && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] <= this.mMinValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n return;\n }\n if (!this.mWrapSelectorWheel && y < 0 && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] >= this.mMaxValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n return;\n }\n this.mCurrentScrollOffset += y;\n while (this.mCurrentScrollOffset - this.mInitialScrollOffset > this.mSelectorTextGapHeight) {\n this.mCurrentScrollOffset -= this.mSelectorElementHeight;\n this.decrementSelectorIndices(selectorIndices);\n this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX], true);\n if (!this.mWrapSelectorWheel && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] <= this.mMinValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n }\n }\n while (this.mCurrentScrollOffset - this.mInitialScrollOffset < -this.mSelectorTextGapHeight) {\n this.mCurrentScrollOffset += this.mSelectorElementHeight;\n this.incrementSelectorIndices(selectorIndices);\n this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX], true);\n if (!this.mWrapSelectorWheel && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] >= this.mMaxValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n }\n }\n }\n computeVerticalScrollOffset() {\n return this.mCurrentScrollOffset;\n }\n computeVerticalScrollRange() {\n return (this.mMaxValue - this.mMinValue + 1) * this.mSelectorElementHeight;\n }\n computeVerticalScrollExtent() {\n return this.getHeight();\n }\n getSolidColor() {\n return this.mSolidColor;\n }\n setOnValueChangedListener(onValueChangedListener) {\n this.mOnValueChangeListener = onValueChangedListener;\n }\n setOnScrollListener(onScrollListener) {\n this.mOnScrollListener = onScrollListener;\n }\n setFormatter(formatter) {\n if (formatter == this.mFormatter) {\n return;\n }\n this.mFormatter = formatter;\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n }\n setValue(value) {\n this.setValueInternal(value, false);\n }\n showSoftInput() {\n }\n hideSoftInput() {\n }\n tryComputeMaxWidth() {\n if (!this.mComputeMaxWidth) {\n return;\n }\n let maxTextWidth = 0;\n if (this.mDisplayedValues == null) {\n let maxDigitWidth = 0;\n for (let i = 0; i <= 9; i++) {\n const digitWidth = this.mSelectorWheelPaint.measureText(NumberPicker.formatNumberWithLocale(i));\n if (digitWidth > maxDigitWidth) {\n maxDigitWidth = digitWidth;\n }\n }\n let numberOfDigits = 0;\n let current = this.mMaxValue;\n while (current > 0) {\n numberOfDigits++;\n current = current / 10;\n }\n maxTextWidth = Math.floor((numberOfDigits * maxDigitWidth));\n }\n else {\n const valueCount = this.mDisplayedValues.length;\n for (let i = 0; i < valueCount; i++) {\n const textWidth = this.mSelectorWheelPaint.measureText(this.mDisplayedValues[i]);\n if (textWidth > maxTextWidth) {\n maxTextWidth = Math.floor(textWidth);\n }\n }\n }\n if (this.mMaxWidth != maxTextWidth) {\n if (maxTextWidth > this.mMinWidth_) {\n this.mMaxWidth = maxTextWidth;\n }\n else {\n this.mMaxWidth = this.mMinWidth_;\n }\n this.invalidate();\n }\n }\n getWrapSelectorWheel() {\n return this.mWrapSelectorWheel;\n }\n setWrapSelectorWheel(wrapSelectorWheel) {\n const wrappingAllowed = (this.mMaxValue - this.mMinValue) >= this.mSelectorIndices.length;\n if ((!wrapSelectorWheel || wrappingAllowed) && wrapSelectorWheel != this.mWrapSelectorWheel) {\n this.mWrapSelectorWheel = wrapSelectorWheel;\n }\n }\n setOnLongPressUpdateInterval(intervalMillis) {\n this.mLongPressUpdateInterval = intervalMillis;\n }\n getValue() {\n return this.mValue;\n }\n getMinValue() {\n return this.mMinValue;\n }\n setMinValue(minValue) {\n if (this.mMinValue == minValue) {\n return;\n }\n if (minValue < 0) {\n throw Error(`new IllegalArgumentException(\"minValue must be >= 0\")`);\n }\n this.mMinValue = minValue;\n if (this.mMinValue > this.mValue) {\n this.mValue = this.mMinValue;\n }\n let wrapSelectorWheel = this.mMaxValue - this.mMinValue > this.mSelectorIndices.length;\n this.setWrapSelectorWheel(wrapSelectorWheel);\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n this.tryComputeMaxWidth();\n this.invalidate();\n }\n getMaxValue() {\n return this.mMaxValue;\n }\n setMaxValue(maxValue) {\n if (this.mMaxValue == maxValue) {\n return;\n }\n if (maxValue < 0) {\n throw Error(`new IllegalArgumentException(\"maxValue must be >= 0\")`);\n }\n this.mMaxValue = maxValue;\n if (this.mMaxValue < this.mValue) {\n this.mValue = this.mMaxValue;\n }\n let wrapSelectorWheel = this.mMaxValue - this.mMinValue > this.mSelectorIndices.length;\n this.setWrapSelectorWheel(wrapSelectorWheel);\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n this.tryComputeMaxWidth();\n this.invalidate();\n }\n getDisplayedValues() {\n return this.mDisplayedValues;\n }\n setDisplayedValues(displayedValues) {\n if (this.mDisplayedValues == displayedValues) {\n return;\n }\n this.mDisplayedValues = displayedValues;\n if (this.mDisplayedValues != null) {\n }\n else {\n }\n this.updateInputTextView();\n this.initializeSelectorWheelIndices();\n this.tryComputeMaxWidth();\n }\n getTopFadingEdgeStrength() {\n return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;\n }\n getBottomFadingEdgeStrength() {\n return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.removeAllCallbacks();\n }\n onDraw(canvas) {\n if (!this.mHasSelectorWheel) {\n super.onDraw(canvas);\n return;\n }\n let x = (this.mRight - this.mLeft) / 2;\n let y = this.mCurrentScrollOffset;\n if (this.mVirtualButtonPressedDrawable != null && this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n if (this.mDecrementVirtualButtonPressed) {\n this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);\n this.mVirtualButtonPressedDrawable.setBounds(0, 0, this.mRight, this.mTopSelectionDividerTop);\n this.mVirtualButtonPressedDrawable.draw(canvas);\n }\n if (this.mIncrementVirtualButtonPressed) {\n this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);\n this.mVirtualButtonPressedDrawable.setBounds(0, this.mBottomSelectionDividerBottom, this.mRight, this.mBottom);\n this.mVirtualButtonPressedDrawable.draw(canvas);\n }\n }\n let selectorIndices = this.mSelectorIndices;\n for (let i = 0; i < selectorIndices.length; i++) {\n let selectorIndex = selectorIndices[i];\n let scrollSelectorValue = this.mSelectorIndexToStringCache.get(selectorIndex);\n canvas.drawText(scrollSelectorValue, x, y, this.mSelectorWheelPaint);\n y += this.mSelectorElementHeight;\n }\n if (this.mSelectionDivider != null) {\n let topOfTopDivider = this.mTopSelectionDividerTop;\n let bottomOfTopDivider = topOfTopDivider + this.mSelectionDividerHeight;\n this.mSelectionDivider.setBounds(0, topOfTopDivider, this.mRight, bottomOfTopDivider);\n this.mSelectionDivider.draw(canvas);\n let bottomOfBottomDivider = this.mBottomSelectionDividerBottom;\n let topOfBottomDivider = bottomOfBottomDivider - this.mSelectionDividerHeight;\n this.mSelectionDivider.setBounds(0, topOfBottomDivider, this.mRight, bottomOfBottomDivider);\n this.mSelectionDivider.draw(canvas);\n }\n }\n makeMeasureSpec(measureSpec, maxSize) {\n if (maxSize == NumberPicker.SIZE_UNSPECIFIED) {\n return measureSpec;\n }\n const size = NumberPicker.MeasureSpec.getSize(measureSpec);\n const mode = NumberPicker.MeasureSpec.getMode(measureSpec);\n switch (mode) {\n case NumberPicker.MeasureSpec.EXACTLY:\n return measureSpec;\n case NumberPicker.MeasureSpec.AT_MOST:\n return NumberPicker.MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), NumberPicker.MeasureSpec.EXACTLY);\n case NumberPicker.MeasureSpec.UNSPECIFIED:\n return NumberPicker.MeasureSpec.makeMeasureSpec(maxSize, NumberPicker.MeasureSpec.EXACTLY);\n default:\n throw Error(`new IllegalArgumentException(\"Unknown measure mode: \" + mode)`);\n }\n }\n resolveSizeAndStateRespectingMinSize(minSize, measuredSize, measureSpec) {\n if (minSize != NumberPicker.SIZE_UNSPECIFIED) {\n const desiredWidth = Math.max(minSize, measuredSize);\n return NumberPicker.resolveSizeAndState(desiredWidth, measureSpec, 0);\n }\n else {\n return measuredSize;\n }\n }\n initializeSelectorWheelIndices() {\n this.mSelectorIndexToStringCache.clear();\n let selectorIndices = this.mSelectorIndices;\n let current = this.getValue();\n for (let i = 0; i < this.mSelectorIndices.length; i++) {\n let selectorIndex = Math.floor(current + (i - this.SELECTOR_MIDDLE_ITEM_INDEX));\n if (this.mWrapSelectorWheel) {\n selectorIndex = this.getWrappedSelectorIndex(selectorIndex);\n }\n selectorIndices[i] = selectorIndex;\n this.ensureCachedScrollSelectorValue(selectorIndices[i]);\n }\n }\n setValueInternal(current, notifyChange) {\n if (this.mValue == current) {\n return;\n }\n if (this.mWrapSelectorWheel) {\n current = this.getWrappedSelectorIndex(current);\n }\n else {\n current = Math.max(current, this.mMinValue);\n current = Math.min(current, this.mMaxValue);\n }\n let previous = this.mValue;\n this.mValue = current;\n this.updateInputTextView();\n if (notifyChange) {\n this.notifyChange(previous, current);\n }\n this.initializeSelectorWheelIndices();\n this.invalidate();\n }\n changeValueByOne(increment) {\n if (this.mHasSelectorWheel) {\n if (!this.moveToFinalScrollerPosition(this.mFlingScroller)) {\n this.moveToFinalScrollerPosition(this.mAdjustScroller);\n }\n this.mPreviousScrollerY = 0;\n if (increment) {\n this.mFlingScroller.startScroll(0, 0, 0, -this.mSelectorElementHeight, NumberPicker.SNAP_SCROLL_DURATION);\n }\n else {\n this.mFlingScroller.startScroll(0, 0, 0, this.mSelectorElementHeight, NumberPicker.SNAP_SCROLL_DURATION);\n }\n this.invalidate();\n }\n else {\n if (increment) {\n this.setValueInternal(this.mValue + 1, true);\n }\n else {\n this.setValueInternal(this.mValue - 1, true);\n }\n }\n }\n initializeSelectorWheel() {\n this.initializeSelectorWheelIndices();\n let selectorIndices = this.mSelectorIndices;\n let totalTextHeight = selectorIndices.length * this.mTextSize;\n let totalTextGapHeight = (this.mBottom - this.mTop) - totalTextHeight;\n let textGapCount = selectorIndices.length;\n this.mSelectorTextGapHeight = Math.floor((totalTextGapHeight / textGapCount + 0.5));\n this.mSelectorElementHeight = this.mTextSize + this.mSelectorTextGapHeight;\n let editTextTextPosition = this.getHeight() / 2 + this.mTextSize / 2;\n this.mInitialScrollOffset = editTextTextPosition - (this.mSelectorElementHeight * this.SELECTOR_MIDDLE_ITEM_INDEX);\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n this.updateInputTextView();\n }\n initializeFadingEdges() {\n this.setVerticalFadingEdgeEnabled(true);\n this.setFadingEdgeLength((this.mBottom - this.mTop - this.mTextSize) / 2);\n }\n onScrollerFinished(scroller) {\n if (scroller == this.mFlingScroller) {\n if (!this.ensureScrollWheelAdjusted()) {\n this.updateInputTextView();\n }\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else {\n if (this.mScrollState != NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {\n this.updateInputTextView();\n }\n }\n }\n onScrollStateChange(scrollState) {\n if (this.mScrollState == scrollState) {\n return;\n }\n this.mScrollState = scrollState;\n if (this.mOnScrollListener != null) {\n this.mOnScrollListener.onScrollStateChange(this, scrollState);\n }\n }\n fling(velocityY) {\n this.mPreviousScrollerY = 0;\n if (velocityY > 0) {\n this.mFlingScroller.fling(0, 0, 0, velocityY, 0, 0, 0, Integer.MAX_VALUE);\n }\n else {\n this.mFlingScroller.fling(0, Integer.MAX_VALUE, 0, velocityY, 0, 0, 0, Integer.MAX_VALUE);\n }\n this.invalidate();\n }\n getWrappedSelectorIndex(selectorIndex) {\n if (selectorIndex > this.mMaxValue) {\n return this.mMinValue + (selectorIndex - this.mMaxValue) % (this.mMaxValue - this.mMinValue) - 1;\n }\n else if (selectorIndex < this.mMinValue) {\n return this.mMaxValue - (this.mMinValue - selectorIndex) % (this.mMaxValue - this.mMinValue) + 1;\n }\n return selectorIndex;\n }\n incrementSelectorIndices(selectorIndices) {\n for (let i = 0; i < selectorIndices.length - 1; i++) {\n selectorIndices[i] = selectorIndices[i + 1];\n }\n let nextScrollSelectorIndex = selectorIndices[selectorIndices.length - 2] + 1;\n if (this.mWrapSelectorWheel && nextScrollSelectorIndex > this.mMaxValue) {\n nextScrollSelectorIndex = this.mMinValue;\n }\n selectorIndices[selectorIndices.length - 1] = nextScrollSelectorIndex;\n this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);\n }\n decrementSelectorIndices(selectorIndices) {\n for (let i = selectorIndices.length - 1; i > 0; i--) {\n selectorIndices[i] = selectorIndices[i - 1];\n }\n let nextScrollSelectorIndex = selectorIndices[1] - 1;\n if (this.mWrapSelectorWheel && nextScrollSelectorIndex < this.mMinValue) {\n nextScrollSelectorIndex = this.mMaxValue;\n }\n selectorIndices[0] = nextScrollSelectorIndex;\n this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);\n }\n ensureCachedScrollSelectorValue(selectorIndex) {\n let cache = this.mSelectorIndexToStringCache;\n let scrollSelectorValue = cache.get(selectorIndex);\n if (scrollSelectorValue != null) {\n return;\n }\n if (selectorIndex < this.mMinValue || selectorIndex > this.mMaxValue) {\n scrollSelectorValue = \"\";\n }\n else {\n if (this.mDisplayedValues != null) {\n let displayedValueIndex = selectorIndex - this.mMinValue;\n scrollSelectorValue = this.mDisplayedValues[displayedValueIndex];\n }\n else {\n scrollSelectorValue = this.formatNumber(selectorIndex);\n }\n }\n cache.put(selectorIndex, scrollSelectorValue);\n }\n formatNumber(value) {\n return (this.mFormatter != null) ? this.mFormatter.format(value) : NumberPicker.formatNumberWithLocale(value);\n }\n validateInputTextView(v) {\n }\n updateInputTextView() {\n return false;\n }\n notifyChange(previous, current) {\n if (this.mOnValueChangeListener != null) {\n this.mOnValueChangeListener.onValueChange(this, previous, this.mValue);\n }\n }\n postChangeCurrentByOneFromLongPress(increment, delayMillis) {\n if (this.mChangeCurrentByOneFromLongPressCommand == null) {\n this.mChangeCurrentByOneFromLongPressCommand = new NumberPicker.ChangeCurrentByOneFromLongPressCommand(this);\n }\n else {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n this.mChangeCurrentByOneFromLongPressCommand.setStep(increment);\n this.postDelayed(this.mChangeCurrentByOneFromLongPressCommand, delayMillis);\n }\n removeChangeCurrentByOneFromLongPress() {\n if (this.mChangeCurrentByOneFromLongPressCommand != null) {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n }\n postBeginSoftInputOnLongPressCommand() {\n if (this.mBeginSoftInputOnLongPressCommand == null) {\n this.mBeginSoftInputOnLongPressCommand = new NumberPicker.BeginSoftInputOnLongPressCommand(this);\n }\n else {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n this.postDelayed(this.mBeginSoftInputOnLongPressCommand, ViewConfiguration.getLongPressTimeout());\n }\n removeBeginSoftInputCommand() {\n if (this.mBeginSoftInputOnLongPressCommand != null) {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n }\n removeAllCallbacks() {\n if (this.mChangeCurrentByOneFromLongPressCommand != null) {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n if (this.mSetSelectionCommand != null) {\n this.removeCallbacks(this.mSetSelectionCommand);\n }\n if (this.mBeginSoftInputOnLongPressCommand != null) {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n this.mPressedStateHelper.cancel();\n }\n getSelectedPos(value) {\n if (this.mDisplayedValues == null) {\n try {\n return Integer.parseInt(value);\n }\n catch (e) {\n }\n }\n else {\n for (let i = 0; i < this.mDisplayedValues.length; i++) {\n value = value.toLowerCase();\n if (this.mDisplayedValues[i].toLowerCase().startsWith(value)) {\n return this.mMinValue + i;\n }\n }\n try {\n return Integer.parseInt(value);\n }\n catch (e) {\n }\n }\n return this.mMinValue;\n }\n postSetSelectionCommand(selectionStart, selectionEnd) {\n if (this.mSetSelectionCommand == null) {\n this.mSetSelectionCommand = new NumberPicker.SetSelectionCommand(this);\n }\n else {\n this.removeCallbacks(this.mSetSelectionCommand);\n }\n this.mSetSelectionCommand.mSelectionStart = selectionStart;\n this.mSetSelectionCommand.mSelectionEnd = selectionEnd;\n this.post(this.mSetSelectionCommand);\n }\n ensureScrollWheelAdjusted() {\n let deltaY = this.mInitialScrollOffset - this.mCurrentScrollOffset;\n if (deltaY != 0) {\n this.mPreviousScrollerY = 0;\n if (Math.abs(deltaY) > this.mSelectorElementHeight / 2) {\n deltaY += (deltaY > 0) ? -this.mSelectorElementHeight : this.mSelectorElementHeight;\n }\n this.mAdjustScroller.startScroll(0, 0, 0, deltaY, NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS);\n this.invalidate();\n return true;\n }\n return false;\n }\n static formatNumberWithLocale(value) {\n return value + '';\n }\n }\n NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL = 300;\n NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT = 8;\n NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS = 800;\n NumberPicker.SNAP_SCROLL_DURATION = 300;\n NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH = 0.9;\n NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT = 2;\n NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE = 48;\n NumberPicker.SIZE_UNSPECIFIED = -1;\n widget.NumberPicker = NumberPicker;\n (function (NumberPicker) {\n class TwoDigitFormatter {\n format(value) {\n let s = value + '';\n if (s.length === 1)\n s = '0' + s;\n return s;\n }\n }\n NumberPicker.TwoDigitFormatter = TwoDigitFormatter;\n var OnScrollListener;\n (function (OnScrollListener) {\n OnScrollListener.SCROLL_STATE_IDLE = 0;\n OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1;\n OnScrollListener.SCROLL_STATE_FLING = 2;\n })(OnScrollListener = NumberPicker.OnScrollListener || (NumberPicker.OnScrollListener = {}));\n class PressedStateHelper {\n constructor(arg) {\n this.MODE_PRESS = 1;\n this.MODE_TAPPED = 2;\n this.mManagedButton = 0;\n this.mMode = 0;\n this._NumberPicker_this = arg;\n }\n cancel() {\n this.mMode = 0;\n this.mManagedButton = 0;\n this._NumberPicker_this.removeCallbacks(this);\n if (this._NumberPicker_this.mIncrementVirtualButtonPressed) {\n this._NumberPicker_this.mIncrementVirtualButtonPressed = false;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n if (this._NumberPicker_this.mDecrementVirtualButtonPressed) {\n this._NumberPicker_this.mDecrementVirtualButtonPressed = false;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n buttonPressDelayed(button) {\n this.cancel();\n this.mMode = this.MODE_PRESS;\n this.mManagedButton = button;\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getTapTimeout());\n }\n buttonTapped(button) {\n this.cancel();\n this.mMode = this.MODE_TAPPED;\n this.mManagedButton = button;\n this._NumberPicker_this.post(this);\n }\n run() {\n switch (this.mMode) {\n case this.MODE_PRESS:\n {\n switch (this.mManagedButton) {\n case PressedStateHelper.BUTTON_INCREMENT:\n {\n this._NumberPicker_this.mIncrementVirtualButtonPressed = true;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n break;\n case PressedStateHelper.BUTTON_DECREMENT:\n {\n this._NumberPicker_this.mDecrementVirtualButtonPressed = true;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n }\n break;\n case this.MODE_TAPPED:\n {\n switch (this.mManagedButton) {\n case PressedStateHelper.BUTTON_INCREMENT:\n {\n if (!this._NumberPicker_this.mIncrementVirtualButtonPressed) {\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getPressedStateDuration());\n }\n this._NumberPicker_this.mIncrementVirtualButtonPressed = !this._NumberPicker_this.mIncrementVirtualButtonPressed;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n break;\n case PressedStateHelper.BUTTON_DECREMENT:\n {\n if (!this._NumberPicker_this.mDecrementVirtualButtonPressed) {\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getPressedStateDuration());\n }\n this._NumberPicker_this.mDecrementVirtualButtonPressed = !this._NumberPicker_this.mDecrementVirtualButtonPressed;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n }\n break;\n }\n }\n }\n PressedStateHelper.BUTTON_INCREMENT = 1;\n PressedStateHelper.BUTTON_DECREMENT = 2;\n NumberPicker.PressedStateHelper = PressedStateHelper;\n class SetSelectionCommand {\n constructor(arg) {\n this.mSelectionStart = 0;\n this.mSelectionEnd = 0;\n this._NumberPicker_this = arg;\n }\n run() {\n }\n }\n NumberPicker.SetSelectionCommand = SetSelectionCommand;\n class ChangeCurrentByOneFromLongPressCommand {\n constructor(arg) {\n this._NumberPicker_this = arg;\n }\n setStep(increment) {\n this.mIncrement = increment;\n }\n run() {\n this._NumberPicker_this.changeValueByOne(this.mIncrement);\n this._NumberPicker_this.postDelayed(this, this._NumberPicker_this.mLongPressUpdateInterval);\n }\n }\n NumberPicker.ChangeCurrentByOneFromLongPressCommand = ChangeCurrentByOneFromLongPressCommand;\n class BeginSoftInputOnLongPressCommand {\n constructor(arg) {\n this._NumberPicker_this = arg;\n }\n run() {\n this._NumberPicker_this.showSoftInput();\n this._NumberPicker_this.mIngonreMoveEvents = true;\n }\n }\n NumberPicker.BeginSoftInputOnLongPressCommand = BeginSoftInputOnLongPressCommand;\n })(NumberPicker = widget.NumberPicker || (widget.NumberPicker = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_8) {\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n class ClipDrawable extends Drawable {\n constructor(...args) {\n super();\n this.mTmpRect = new Rect();\n if (args.length <= 1) {\n this.mClipState = new ClipDrawable.ClipState(args[0], this);\n }\n else {\n this.mClipState = new ClipDrawable.ClipState(null, this);\n let drawable = args[0];\n let gravity = args[1];\n let orientation = args[2];\n this.mClipState.mDrawable = drawable;\n this.mClipState.mGravity = gravity;\n this.mClipState.mOrientation = orientation;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let orientation = a.getInt(\"android:clipOrientation\", ClipDrawable.HORIZONTAL);\n let gStr = a.getString(\"android:gravity\");\n let g = Gravity.parseGravity(gStr, Gravity.LEFT);\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, parser.children[0]);\n }\n if (dr == null) {\n throw Error(`new IllegalArgumentException(\"No drawable specified for \")`);\n }\n this.mClipState.mDrawable = dr;\n this.mClipState.mOrientation = orientation;\n this.mClipState.mGravity = g;\n dr.setCallback(this);\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getPadding(padding) {\n return this.mClipState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mClipState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mClipState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mClipState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mClipState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mClipState.mDrawable.isStateful();\n }\n onStateChange(state) {\n return this.mClipState.mDrawable.setState(state);\n }\n onLevelChange(level) {\n this.mClipState.mDrawable.setLevel(level);\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n this.mClipState.mDrawable.setBounds(bounds);\n }\n draw(canvas) {\n if (this.mClipState.mDrawable.getLevel() == 0) {\n return;\n }\n const r = this.mTmpRect;\n const bounds = this.getBounds();\n let level = this.getLevel();\n let w = bounds.width();\n const iw = 0;\n if ((this.mClipState.mOrientation & ClipDrawable.HORIZONTAL) != 0) {\n w -= (w - iw) * (10000 - level) / 10000;\n }\n let h = bounds.height();\n const ih = 0;\n if ((this.mClipState.mOrientation & ClipDrawable.VERTICAL) != 0) {\n h -= (h - ih) * (10000 - level) / 10000;\n }\n Gravity.apply(this.mClipState.mGravity, w, h, bounds, r);\n if (w > 0 && h > 0) {\n canvas.save();\n canvas.clipRect(r);\n this.mClipState.mDrawable.draw(canvas);\n canvas.restore();\n }\n }\n getIntrinsicWidth() {\n return this.mClipState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mClipState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mClipState.canConstantState()) {\n return this.mClipState;\n }\n return null;\n }\n }\n ClipDrawable.HORIZONTAL = 1;\n ClipDrawable.VERTICAL = 2;\n drawable_8.ClipDrawable = ClipDrawable;\n (function (ClipDrawable) {\n class ClipState {\n constructor(orig, owner) {\n this.mOrientation = 0;\n this.mGravity = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mOrientation = orig.mOrientation;\n this.mGravity = orig.mGravity;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n return new ClipDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n ClipDrawable.ClipState = ClipState;\n })(ClipDrawable = drawable_8.ClipDrawable || (drawable_8.ClipDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Animatable = android.graphics.drawable.Animatable;\n var AnimationDrawable = android.graphics.drawable.AnimationDrawable;\n var LayerDrawable = android.graphics.drawable.LayerDrawable;\n var StateListDrawable = android.graphics.drawable.StateListDrawable;\n var ClipDrawable = android.graphics.drawable.ClipDrawable;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var AlphaAnimation = android.view.animation.AlphaAnimation;\n var Animation = android.view.animation.Animation;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var Transformation = android.view.animation.Transformation;\n var ArrayList = java.util.ArrayList;\n var R = android.R;\n var NetDrawable = androidui.image.NetDrawable;\n class ProgressBar extends View {\n constructor(context, bindElement, defStyle = android.R.attr.progressBarStyle) {\n super(context, bindElement, null);\n this.mMinWidth = 0;\n this.mMaxWidth = 0;\n this.mMinHeight = 0;\n this.mMaxHeight = 0;\n this.mProgress = 0;\n this.mSecondaryProgress = 0;\n this.mMax = 0;\n this.mBehavior = 0;\n this.mDuration = 0;\n this.mMirrorForRtl = false;\n this.mRefreshData = new ArrayList();\n this.initProgressBar();\n const a = this._attrBinder;\n a.addAttr('progressDrawable', (value) => {\n let drawable = a.parseDrawable(value);\n if (drawable != null) {\n drawable = this.tileify(drawable, false);\n this.setProgressDrawable(drawable);\n }\n }, () => {\n return this.mProgressDrawable;\n });\n a.addAttr('indeterminateDuration', (value) => {\n this.mDuration = Math.floor(a.parseInt(value, this.mDuration));\n }, () => {\n return this.mDuration;\n });\n a.addAttr('minWidth', (value) => {\n this.mMinWidth = Math.floor(a.parseNumberPixelSize(value, this.mMinWidth));\n }, () => {\n return this.mMinWidth;\n });\n a.addAttr('maxWidth', (value) => {\n this.mMaxWidth = Math.floor(a.parseNumberPixelSize(value, this.mMaxWidth));\n }, () => {\n return this.mMaxWidth;\n });\n a.addAttr('minHeight', (value) => {\n this.mMinHeight = Math.floor(a.parseNumberPixelSize(value, this.mMinHeight));\n }, () => {\n return this.mMinHeight;\n });\n a.addAttr('maxHeight', (value) => {\n this.mMaxHeight = Math.floor(a.parseNumberPixelSize(value, this.mMaxHeight));\n }, () => {\n return this.mMaxHeight;\n });\n a.addAttr('indeterminateBehavior', (value) => {\n if (value + ''.toLowerCase() == 'cycle') {\n this.mBehavior = Animation.REVERSE;\n }\n else {\n this.mBehavior = Animation.RESTART;\n }\n });\n a.addAttr('interpolator', (value) => {\n });\n a.addAttr('max', (value) => {\n this.setMax(a.parseInt(value, this.mMax));\n }, () => {\n return this.mMax;\n });\n a.addAttr('progress', (value) => {\n this.setProgress(a.parseInt(value, this.mProgress));\n }, () => {\n return this.mProgress;\n });\n a.addAttr('secondaryProgress', (value) => {\n this.setSecondaryProgress(a.parseInt(value, this.mSecondaryProgress));\n }, () => {\n return this.mSecondaryProgress;\n });\n a.addAttr('indeterminateDrawable', (value) => {\n let drawable = a.parseDrawable(value);\n if (drawable != null) {\n drawable = this.tileifyIndeterminate(drawable);\n this.setIndeterminateDrawable(drawable);\n }\n }, () => {\n return this.mIndeterminateDrawable;\n });\n a.addAttr('indeterminateOnly', (value) => {\n this.mOnlyIndeterminate = a.parseBoolean(value, this.mOnlyIndeterminate);\n this.setIndeterminate(this.mOnlyIndeterminate || this.mIndeterminate);\n });\n a.addAttr('indeterminate', (value) => {\n this.setIndeterminate(this.mOnlyIndeterminate || a.parseBoolean(value, this.mIndeterminate));\n });\n this.mNoInvalidate = true;\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n this.mNoInvalidate = false;\n this.setIndeterminate(this.mOnlyIndeterminate || this.mIndeterminate);\n }\n tileify(drawable, clip) {\n if (drawable instanceof LayerDrawable) {\n let background = drawable;\n const N = background.getNumberOfLayers();\n let outDrawables = new Array(N);\n let drawableChange = false;\n for (let i = 0; i < N; i++) {\n let id = background.getId(i);\n let orig = background.getDrawable(i);\n outDrawables[i] = this.tileify(orig, (id == R.id.progress || id == R.id.secondaryProgress));\n drawableChange = drawableChange || outDrawables[i] !== orig;\n }\n if (!drawableChange)\n return background;\n let newBg = new LayerDrawable(outDrawables);\n for (let i = 0; i < N; i++) {\n newBg.setId(i, background.getId(i));\n }\n return newBg;\n }\n else if (drawable instanceof StateListDrawable) {\n let _in = drawable;\n let out = new StateListDrawable();\n let numStates = _in.getStateCount();\n for (let i = 0; i < numStates; i++) {\n out.addState(_in.getStateSet(i), this.tileify(_in.getStateDrawable(i), clip));\n }\n return out;\n }\n else if (drawable instanceof NetDrawable) {\n const netDrawable = drawable;\n if (this.mSampleTile == null) {\n this.mSampleTile = netDrawable;\n }\n netDrawable.setTileMode(NetDrawable.TileMode.REPEAT, null);\n return (clip) ? new ClipDrawable(netDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL) : netDrawable;\n }\n return drawable;\n }\n tileifyIndeterminate(drawable) {\n if (drawable instanceof AnimationDrawable) {\n let background = drawable;\n const N = background.getNumberOfFrames();\n let newBg = new AnimationDrawable();\n newBg.setOneShot(background.isOneShot());\n for (let i = 0; i < N; i++) {\n let frame = this.tileify(background.getFrame(i), true);\n frame.setLevel(10000);\n newBg.addFrame(frame, background.getDuration(i));\n }\n newBg.setLevel(10000);\n drawable = newBg;\n }\n return drawable;\n }\n initProgressBar() {\n this.mMax = 100;\n this.mProgress = 0;\n this.mSecondaryProgress = 0;\n this.mIndeterminate = false;\n this.mOnlyIndeterminate = false;\n this.mDuration = 4000;\n this.mBehavior = AlphaAnimation.RESTART;\n this.mMinWidth = 24;\n this.mMaxWidth = 48;\n this.mMinHeight = 24;\n this.mMaxHeight = 48;\n }\n isIndeterminate() {\n return this.mIndeterminate;\n }\n setIndeterminate(indeterminate) {\n if ((!this.mOnlyIndeterminate || !this.mIndeterminate) && indeterminate != this.mIndeterminate) {\n this.mIndeterminate = indeterminate;\n if (indeterminate) {\n this.mCurrentDrawable = this.mIndeterminateDrawable;\n this.startAnimation();\n }\n else {\n this.mCurrentDrawable = this.mProgressDrawable;\n this.stopAnimation();\n }\n }\n }\n getIndeterminateDrawable() {\n return this.mIndeterminateDrawable;\n }\n setIndeterminateDrawable(d) {\n if (d != null) {\n d.setCallback(this);\n }\n this.mIndeterminateDrawable = d;\n if (this.mIndeterminate) {\n this.mCurrentDrawable = d;\n this.postInvalidate();\n }\n }\n getProgressDrawable() {\n return this.mProgressDrawable;\n }\n setProgressDrawable(d) {\n let needUpdate;\n if (this.mProgressDrawable != null && d != this.mProgressDrawable) {\n this.mProgressDrawable.setCallback(null);\n needUpdate = true;\n }\n else {\n needUpdate = false;\n }\n if (d != null) {\n d.setCallback(this);\n let drawableHeight = d.getMinimumHeight();\n if (this.mMaxHeight < drawableHeight) {\n this.mMaxHeight = drawableHeight;\n this.requestLayout();\n }\n }\n this.mProgressDrawable = d;\n if (!this.mIndeterminate) {\n this.mCurrentDrawable = d;\n this.postInvalidate();\n }\n if (needUpdate) {\n this.updateDrawableBounds(this.getWidth(), this.getHeight());\n this.updateDrawableState();\n this.doRefreshProgress(R.id.progress, this.mProgress, false, false);\n this.doRefreshProgress(R.id.secondaryProgress, this.mSecondaryProgress, false, false);\n }\n }\n getCurrentDrawable() {\n return this.mCurrentDrawable;\n }\n verifyDrawable(who) {\n return who == this.mProgressDrawable || who == this.mIndeterminateDrawable || super.verifyDrawable(who);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mProgressDrawable != null)\n this.mProgressDrawable.jumpToCurrentState();\n if (this.mIndeterminateDrawable != null)\n this.mIndeterminateDrawable.jumpToCurrentState();\n }\n postInvalidate() {\n if (!this.mNoInvalidate) {\n super.postInvalidate();\n }\n }\n doRefreshProgress(id, progress, fromUser, callBackToApp) {\n let scale = this.mMax > 0 ? progress / this.mMax : 0;\n const d = this.mCurrentDrawable;\n if (d != null) {\n let progressDrawable = null;\n if (d instanceof LayerDrawable) {\n progressDrawable = d.findDrawableByLayerId(id);\n }\n const level = Math.floor((scale * ProgressBar.MAX_LEVEL));\n (progressDrawable != null ? progressDrawable : d).setLevel(level);\n }\n else {\n this.invalidate();\n }\n if (callBackToApp && id == R.id.progress) {\n this.onProgressRefresh(scale, fromUser);\n }\n }\n onProgressRefresh(scale, fromUser) {\n }\n refreshProgress(id, progress, fromUser) {\n this.doRefreshProgress(id, progress, fromUser, true);\n }\n setProgress(progress, fromUser = false) {\n if (this.mIndeterminate) {\n return;\n }\n if (progress < 0) {\n progress = 0;\n }\n if (progress > this.mMax) {\n progress = this.mMax;\n }\n if (progress != this.mProgress) {\n this.mProgress = progress;\n this.refreshProgress(R.id.progress, this.mProgress, fromUser);\n }\n }\n setSecondaryProgress(secondaryProgress) {\n if (this.mIndeterminate) {\n return;\n }\n if (secondaryProgress < 0) {\n secondaryProgress = 0;\n }\n if (secondaryProgress > this.mMax) {\n secondaryProgress = this.mMax;\n }\n if (secondaryProgress != this.mSecondaryProgress) {\n this.mSecondaryProgress = secondaryProgress;\n this.refreshProgress(R.id.secondaryProgress, this.mSecondaryProgress, false);\n }\n }\n getProgress() {\n return this.mIndeterminate ? 0 : this.mProgress;\n }\n getSecondaryProgress() {\n return this.mIndeterminate ? 0 : this.mSecondaryProgress;\n }\n getMax() {\n return this.mMax;\n }\n setMax(max) {\n if (max < 0) {\n max = 0;\n }\n if (max != this.mMax) {\n this.mMax = max;\n this.postInvalidate();\n if (this.mProgress > max) {\n this.mProgress = max;\n }\n this.refreshProgress(R.id.progress, this.mProgress, false);\n }\n }\n incrementProgressBy(diff) {\n this.setProgress(this.mProgress + diff);\n }\n incrementSecondaryProgressBy(diff) {\n this.setSecondaryProgress(this.mSecondaryProgress + diff);\n }\n startAnimation() {\n if (this.getVisibility() != ProgressBar.VISIBLE) {\n return;\n }\n if (Animatable.isImpl(this.mIndeterminateDrawable)) {\n this.mShouldStartAnimationDrawable = true;\n this.mHasAnimation = false;\n }\n else {\n this.mHasAnimation = true;\n if (this.mInterpolator == null) {\n this.mInterpolator = new LinearInterpolator();\n }\n if (this.mTransformation == null) {\n this.mTransformation = new Transformation();\n }\n else {\n this.mTransformation.clear();\n }\n if (this.mAnimation == null) {\n this.mAnimation = new AlphaAnimation(0.0, 1.0);\n }\n else {\n this.mAnimation.reset();\n }\n this.mAnimation.setRepeatMode(this.mBehavior);\n this.mAnimation.setRepeatCount(Animation.INFINITE);\n this.mAnimation.setDuration(this.mDuration);\n this.mAnimation.setInterpolator(this.mInterpolator);\n this.mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME);\n }\n this.postInvalidate();\n }\n stopAnimation() {\n this.mHasAnimation = false;\n if (Animatable.isImpl(this.mIndeterminateDrawable)) {\n this.mIndeterminateDrawable.stop();\n this.mShouldStartAnimationDrawable = false;\n }\n this.postInvalidate();\n }\n setInterpolator(interpolator) {\n this.mInterpolator = interpolator;\n }\n getInterpolator() {\n return this.mInterpolator;\n }\n setVisibility(v) {\n if (this.getVisibility() != v) {\n super.setVisibility(v);\n if (this.mIndeterminate) {\n if (v == ProgressBar.GONE || v == ProgressBar.INVISIBLE) {\n this.stopAnimation();\n }\n else {\n this.startAnimation();\n }\n }\n }\n }\n onVisibilityChanged(changedView, visibility) {\n super.onVisibilityChanged(changedView, visibility);\n if (this.mIndeterminate) {\n if (visibility == ProgressBar.GONE || visibility == ProgressBar.INVISIBLE) {\n this.stopAnimation();\n }\n else {\n this.startAnimation();\n }\n }\n }\n invalidateDrawable(dr) {\n if (!this.mInDrawing) {\n if (this.verifyDrawable(dr)) {\n const dirty = dr.getBounds();\n const scrollX = this.mScrollX + this.mPaddingLeft;\n const scrollY = this.mScrollY + this.mPaddingTop;\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n else {\n super.invalidateDrawable(dr);\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n this.updateDrawableBounds(w, h);\n }\n updateDrawableBounds(w, h) {\n w -= this.mPaddingRight + this.mPaddingLeft;\n h -= this.mPaddingTop + this.mPaddingBottom;\n let right = w;\n let bottom = h;\n let top = 0;\n let left = 0;\n if (this.mIndeterminateDrawable != null) {\n if (this.mOnlyIndeterminate && !(this.mIndeterminateDrawable instanceof AnimationDrawable)) {\n const intrinsicWidth = this.mIndeterminateDrawable.getIntrinsicWidth();\n const intrinsicHeight = this.mIndeterminateDrawable.getIntrinsicHeight();\n const intrinsicAspect = intrinsicWidth / intrinsicHeight;\n const boundAspect = w / h;\n if (intrinsicAspect != boundAspect) {\n if (boundAspect > intrinsicAspect) {\n const width = Math.floor((h * intrinsicAspect));\n left = (w - width) / 2;\n right = left + width;\n }\n else {\n const height = Math.floor((w * (1 / intrinsicAspect)));\n top = (h - height) / 2;\n bottom = top + height;\n }\n }\n }\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n let tempLeft = left;\n left = w - right;\n right = w - tempLeft;\n }\n this.mIndeterminateDrawable.setBounds(left, top, right, bottom);\n }\n if (this.mProgressDrawable != null) {\n this.mProgressDrawable.setBounds(0, 0, right, bottom);\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n let d = this.mCurrentDrawable;\n if (d != null) {\n canvas.save();\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n canvas.translate(this.getWidth() - this.mPaddingRight, this.mPaddingTop);\n canvas.scale(-1.0, 1.0);\n }\n else {\n canvas.translate(this.mPaddingLeft, this.mPaddingTop);\n }\n let time = this.getDrawingTime();\n if (this.mHasAnimation) {\n this.mAnimation.getTransformation(time, this.mTransformation);\n let scale = this.mTransformation.getAlpha();\n try {\n this.mInDrawing = true;\n d.setLevel(Math.floor((scale * ProgressBar.MAX_LEVEL)));\n }\n finally {\n this.mInDrawing = false;\n }\n this.postInvalidateOnAnimation();\n }\n d.draw(canvas);\n canvas.restore();\n if (this.mShouldStartAnimationDrawable && Animatable.isImpl(d)) {\n d.start();\n this.mShouldStartAnimationDrawable = false;\n }\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let d = this.mCurrentDrawable;\n let dw = 0;\n let dh = 0;\n if (d != null) {\n dw = Math.max(this.mMinWidth, Math.min(this.mMaxWidth, d.getIntrinsicWidth()));\n dh = Math.max(this.mMinHeight, Math.min(this.mMaxHeight, d.getIntrinsicHeight()));\n }\n this.updateDrawableState();\n dw += this.mPaddingLeft + this.mPaddingRight;\n dh += this.mPaddingTop + this.mPaddingBottom;\n this.setMeasuredDimension(ProgressBar.resolveSizeAndState(dw, widthMeasureSpec, 0), ProgressBar.resolveSizeAndState(dh, heightMeasureSpec, 0));\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n this.updateDrawableState();\n }\n updateDrawableState() {\n let state = this.getDrawableState();\n if (this.mProgressDrawable != null && this.mProgressDrawable.isStateful()) {\n this.mProgressDrawable.setState(state);\n }\n if (this.mIndeterminateDrawable != null && this.mIndeterminateDrawable.isStateful()) {\n this.mIndeterminateDrawable.setState(state);\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n if (this.mIndeterminate) {\n this.startAnimation();\n }\n if (this.mRefreshData != null) {\n {\n const count = this.mRefreshData.size();\n for (let i = 0; i < count; i++) {\n const rd = this.mRefreshData.get(i);\n this.doRefreshProgress(rd.id, rd.progress, rd.fromUser, true);\n rd.recycle();\n }\n this.mRefreshData.clear();\n }\n }\n this.mAttached = true;\n }\n onDetachedFromWindow() {\n if (this.mIndeterminate) {\n this.stopAnimation();\n }\n super.onDetachedFromWindow();\n this.mAttached = false;\n }\n }\n ProgressBar.MAX_LEVEL = 10000;\n ProgressBar.TIMEOUT_SEND_ACCESSIBILITY_EVENT = 200;\n widget.ProgressBar = ProgressBar;\n (function (ProgressBar) {\n class RefreshData {\n constructor() {\n this.progress = 0;\n }\n static obtain(id, progress, fromUser) {\n let rd = RefreshData.sPool.acquire();\n if (rd == null) {\n rd = new RefreshData();\n }\n rd.id = id;\n rd.progress = progress;\n rd.fromUser = fromUser;\n return rd;\n }\n recycle() {\n RefreshData.sPool.release(this);\n }\n }\n RefreshData.POOL_MAX = 24;\n RefreshData.sPool = new SynchronizedPool(RefreshData.POOL_MAX);\n ProgressBar.RefreshData = RefreshData;\n })(ProgressBar = widget.ProgressBar || (widget.ProgressBar = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var Button = android.widget.Button;\n class CompoundButton extends Button {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, null);\n this.mButtonResource = 0;\n this._attrBinder.addAttr('button', (value) => {\n this.setButtonDrawable(this._attrBinder.parseDrawable(value));\n }, () => {\n return this.mButtonDrawable;\n });\n this._attrBinder.addAttr('checked', (value) => {\n this.setChecked(this._attrBinder.parseBoolean(value, this.isChecked()));\n }, () => {\n return this.isChecked();\n });\n if (defStyle != null)\n this.applyDefaultAttributes(defStyle);\n }\n toggle() {\n this.setChecked(!this.mChecked);\n }\n performClick() {\n this.toggle();\n return super.performClick();\n }\n isChecked() {\n return this.mChecked;\n }\n setChecked(checked) {\n if (this.mChecked != checked) {\n this.mChecked = checked;\n this.refreshDrawableState();\n if (this.mBroadcasting) {\n return;\n }\n this.mBroadcasting = true;\n if (this.mOnCheckedChangeListener != null) {\n this.mOnCheckedChangeListener.onCheckedChanged(this, this.mChecked);\n }\n if (this.mOnCheckedChangeWidgetListener != null) {\n this.mOnCheckedChangeWidgetListener.onCheckedChanged(this, this.mChecked);\n }\n this.mBroadcasting = false;\n }\n }\n setOnCheckedChangeListener(listener) {\n this.mOnCheckedChangeListener = listener;\n }\n setOnCheckedChangeWidgetListener(listener) {\n this.mOnCheckedChangeWidgetListener = listener;\n }\n setButtonDrawable(d) {\n if (d != null) {\n if (this.mButtonDrawable != null) {\n this.mButtonDrawable.setCallback(null);\n this.unscheduleDrawable(this.mButtonDrawable);\n }\n d.setCallback(this);\n d.setVisible(this.getVisibility() == CompoundButton.VISIBLE, false);\n this.mButtonDrawable = d;\n this.setMinHeight(this.mButtonDrawable.getIntrinsicHeight());\n }\n this.refreshDrawableState();\n }\n getCompoundPaddingLeft() {\n let padding = super.getCompoundPaddingLeft();\n if (!this.isLayoutRtl()) {\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n padding += buttonDrawable.getIntrinsicWidth();\n }\n }\n return padding;\n }\n getCompoundPaddingRight() {\n let padding = super.getCompoundPaddingRight();\n if (this.isLayoutRtl()) {\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n padding += buttonDrawable.getIntrinsicWidth();\n }\n }\n return padding;\n }\n getHorizontalOffsetForDrawables() {\n const buttonDrawable = this.mButtonDrawable;\n return (buttonDrawable != null) ? buttonDrawable.getIntrinsicWidth() : 0;\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n const verticalGravity = this.getGravity() & Gravity.VERTICAL_GRAVITY_MASK;\n const drawableHeight = buttonDrawable.getIntrinsicHeight();\n const drawableWidth = buttonDrawable.getIntrinsicWidth();\n let top = 0;\n switch (verticalGravity) {\n case Gravity.BOTTOM:\n top = this.getHeight() - drawableHeight;\n break;\n case Gravity.CENTER_VERTICAL:\n top = (this.getHeight() - drawableHeight) / 2;\n break;\n }\n let bottom = top + drawableHeight;\n let left = this.isLayoutRtl() ? this.getWidth() - drawableWidth : 0;\n let right = this.isLayoutRtl() ? this.getWidth() : drawableWidth;\n buttonDrawable.setBounds(left, top, right, bottom);\n buttonDrawable.draw(canvas);\n }\n }\n onCreateDrawableState(extraSpace) {\n const drawableState = super.onCreateDrawableState(extraSpace + 1);\n if (this.isChecked()) {\n CompoundButton.mergeDrawableStates(drawableState, CompoundButton.CHECKED_STATE_SET);\n }\n return drawableState;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mButtonDrawable != null) {\n let myDrawableState = this.getDrawableState();\n this.mButtonDrawable.setState(myDrawableState);\n this.invalidate();\n }\n }\n drawableSizeChange(d) {\n if (d == this.mButtonDrawable) {\n this.setButtonDrawable(d);\n this.requestLayout();\n }\n else {\n super.drawableSizeChange(d);\n }\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || who == this.mButtonDrawable;\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mButtonDrawable != null)\n this.mButtonDrawable.jumpToCurrentState();\n }\n }\n CompoundButton.CHECKED_STATE_SET = [View.VIEW_STATE_CHECKED];\n widget.CompoundButton = CompoundButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var CompoundButton = android.widget.CompoundButton;\n class CheckBox extends CompoundButton {\n constructor(context, bindElement, defStyle = android.R.attr.checkboxStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.CheckBox = CheckBox;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var CompoundButton = android.widget.CompoundButton;\n class RadioButton extends CompoundButton {\n constructor(context, bindElement, defStyle = android.R.attr.radiobuttonStyle) {\n super(context, bindElement, defStyle);\n }\n toggle() {\n if (!this.isChecked()) {\n super.toggle();\n }\n }\n }\n widget.RadioButton = RadioButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var LinearLayout = android.widget.LinearLayout;\n var RadioButton = android.widget.RadioButton;\n var AttrBinder = androidui.attr.AttrBinder;\n class RadioGroup extends LinearLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mCheckedId = View.NO_ID;\n this.mProtectFromCheckedChange = false;\n this.setOrientation(RadioGroup.VERTICAL);\n this.init();\n }\n initBindAttr() {\n super.initBindAttr();\n if (!RadioGroup.RadioGroupClassAttrBind) {\n RadioGroup.RadioGroupClassAttrBind = new AttrBinder.ClassBinderMap();\n RadioGroup.RadioGroupClassAttrBind.set('checkedButton', {\n setter(v, value) {\n v.setCheckedId(value);\n }\n });\n }\n this._attrBinder.addClassAttrBind(RadioGroup.RadioGroupClassAttrBind);\n }\n init() {\n this.mChildOnCheckedChangeListener = new RadioGroup.CheckedStateTracker(this);\n this.mPassThroughListener = new RadioGroup.PassThroughHierarchyChangeListener(this);\n super.setOnHierarchyChangeListener(this.mPassThroughListener);\n }\n setOnHierarchyChangeListener(listener) {\n this.mPassThroughListener.mOnHierarchyChangeListener = listener;\n }\n onFinishInflate() {\n super.onFinishInflate();\n if (this.mCheckedId != null) {\n this.mProtectFromCheckedChange = true;\n this.setCheckedStateForView(this.mCheckedId, true);\n this.mProtectFromCheckedChange = false;\n this.setCheckedId(this.mCheckedId);\n }\n }\n addView(...args) {\n let child = args[0];\n if (child instanceof RadioButton) {\n const button = child;\n if (button.isChecked()) {\n this.mProtectFromCheckedChange = true;\n if (this.mCheckedId != null) {\n this.setCheckedStateForView(this.mCheckedId, false);\n }\n this.mProtectFromCheckedChange = false;\n this.setCheckedId(button.getId());\n }\n }\n super.addView(...args);\n }\n check(id) {\n if (id != null && (id == this.mCheckedId)) {\n return;\n }\n if (this.mCheckedId != null) {\n this.setCheckedStateForView(this.mCheckedId, false);\n }\n if (id != null) {\n this.setCheckedStateForView(id, true);\n }\n this.setCheckedId(id);\n }\n setCheckedId(id) {\n this.mCheckedId = id;\n if (this.mOnCheckedChangeListener != null) {\n this.mOnCheckedChangeListener.onCheckedChanged(this, this.mCheckedId);\n }\n }\n setCheckedStateForView(viewId, checked) {\n let checkedView = this.findViewById(viewId);\n if (checkedView != null && checkedView instanceof RadioButton) {\n checkedView.setChecked(checked);\n }\n }\n getCheckedRadioButtonId() {\n return this.mCheckedId;\n }\n clearCheck() {\n this.check(null);\n }\n setOnCheckedChangeListener(listener) {\n this.mOnCheckedChangeListener = listener;\n }\n checkLayoutParams(p) {\n return p instanceof RadioGroup.LayoutParams;\n }\n generateDefaultLayoutParams() {\n return new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT);\n }\n }\n widget.RadioGroup = RadioGroup;\n (function (RadioGroup) {\n class LayoutParams extends LinearLayout.LayoutParams {\n }\n RadioGroup.LayoutParams = LayoutParams;\n class CheckedStateTracker {\n constructor(arg) {\n this._RadioGroup_this = arg;\n }\n onCheckedChanged(buttonView, isChecked) {\n if (this._RadioGroup_this.mProtectFromCheckedChange) {\n return;\n }\n this._RadioGroup_this.mProtectFromCheckedChange = true;\n if (this._RadioGroup_this.mCheckedId != null) {\n this._RadioGroup_this.setCheckedStateForView(this._RadioGroup_this.mCheckedId, false);\n }\n this._RadioGroup_this.mProtectFromCheckedChange = false;\n let id = buttonView.getId();\n this._RadioGroup_this.setCheckedId(id);\n }\n }\n RadioGroup.CheckedStateTracker = CheckedStateTracker;\n class PassThroughHierarchyChangeListener {\n constructor(arg) {\n this._RadioGroup_this = arg;\n }\n onChildViewAdded(parent, child) {\n if (parent == this._RadioGroup_this && child instanceof RadioButton) {\n let id = child.getId();\n if (id == View.NO_ID) {\n id = 'hash' + child.hashCode();\n child.setId(id);\n }\n child.setOnCheckedChangeWidgetListener(this._RadioGroup_this.mChildOnCheckedChangeListener);\n }\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewAdded(parent, child);\n }\n }\n onChildViewRemoved(parent, child) {\n if (parent == this._RadioGroup_this && child instanceof RadioButton) {\n child.setOnCheckedChangeWidgetListener(null);\n }\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewRemoved(parent, child);\n }\n }\n }\n RadioGroup.PassThroughHierarchyChangeListener = PassThroughHierarchyChangeListener;\n })(RadioGroup = widget.RadioGroup || (widget.RadioGroup = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var TextView = android.widget.TextView;\n var View = android.view.View;\n class CheckedTextView extends TextView {\n constructor(context, bindElement, defStyle = android.R.attr.checkedTextViewStyle) {\n super(context, bindElement, null);\n this.mCheckMarkResource = 0;\n this.mBasePadding = 0;\n this.mCheckMarkWidth = 0;\n this._attrBinder.addAttr('checkMark', (value) => {\n this.setCheckMarkDrawable(this._attrBinder.parseDrawable(value));\n }, () => {\n return this.getCheckMarkDrawable();\n });\n this._attrBinder.addAttr('checked', (value) => {\n this.setChecked(this._attrBinder.parseBoolean(value, false));\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n toggle() {\n this.setChecked(!this.mChecked);\n }\n isChecked() {\n return this.mChecked;\n }\n setChecked(checked) {\n if (this.mChecked != checked) {\n this.mChecked = checked;\n this.refreshDrawableState();\n }\n }\n setCheckMarkDrawable(d) {\n if (this.mCheckMarkDrawable != null) {\n this.mCheckMarkDrawable.setCallback(null);\n this.unscheduleDrawable(this.mCheckMarkDrawable);\n }\n this.mNeedRequestlayout = (d != this.mCheckMarkDrawable);\n if (d != null) {\n d.setCallback(this);\n d.setVisible(this.getVisibility() == CheckedTextView.VISIBLE, false);\n d.setState(CheckedTextView.CHECKED_STATE_SET);\n this.setMinHeight(d.getIntrinsicHeight());\n this.mCheckMarkWidth = d.getIntrinsicWidth();\n d.setState(this.getDrawableState());\n }\n else {\n this.mCheckMarkWidth = 0;\n }\n this.mCheckMarkDrawable = d;\n this.resolvePadding();\n }\n getCheckMarkDrawable() {\n return this.mCheckMarkDrawable;\n }\n setPadding(left, top, right, bottom) {\n super.setPadding(left, top, right, bottom);\n this.setBasePadding(this.isLayoutRtl());\n }\n updatePadding() {\n let newPadding = (this.mCheckMarkDrawable != null) ? this.mCheckMarkWidth + this.mBasePadding : this.mBasePadding;\n if (this.isLayoutRtl()) {\n this.mNeedRequestlayout = (this.mPaddingLeft != newPadding) || this.mNeedRequestlayout;\n this.mPaddingLeft = newPadding;\n }\n else {\n this.mNeedRequestlayout = (this.mPaddingRight != newPadding) || this.mNeedRequestlayout;\n this.mPaddingRight = newPadding;\n }\n if (this.mNeedRequestlayout) {\n this.requestLayout();\n this.mNeedRequestlayout = false;\n }\n }\n setBasePadding(isLayoutRtl) {\n if (isLayoutRtl) {\n this.mBasePadding = this.mPaddingLeft;\n }\n else {\n this.mBasePadding = this.mPaddingRight;\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n const checkMarkDrawable = this.mCheckMarkDrawable;\n if (checkMarkDrawable != null) {\n const verticalGravity = this.getGravity() & Gravity.VERTICAL_GRAVITY_MASK;\n const height = checkMarkDrawable.getIntrinsicHeight();\n let y = 0;\n switch (verticalGravity) {\n case Gravity.BOTTOM:\n y = this.getHeight() - height;\n break;\n case Gravity.CENTER_VERTICAL:\n y = (this.getHeight() - height) / 2;\n break;\n }\n const isLayoutRtl = this.isLayoutRtl();\n const width = this.getWidth();\n const top = y;\n const bottom = top + height;\n let left;\n let right;\n if (isLayoutRtl) {\n left = this.mBasePadding;\n right = left + this.mCheckMarkWidth;\n }\n else {\n right = width - this.mBasePadding;\n left = right - this.mCheckMarkWidth;\n }\n checkMarkDrawable.setBounds(this.mScrollX + left, top, this.mScrollX + right, bottom);\n checkMarkDrawable.draw(canvas);\n }\n }\n onCreateDrawableState(extraSpace) {\n const drawableState = super.onCreateDrawableState(extraSpace + 1);\n if (this.isChecked()) {\n CheckedTextView.mergeDrawableStates(drawableState, CheckedTextView.CHECKED_STATE_SET);\n }\n return drawableState;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mCheckMarkDrawable != null) {\n let myDrawableState = this.getDrawableState();\n this.mCheckMarkDrawable.setState(myDrawableState);\n this.invalidate();\n }\n }\n }\n CheckedTextView.CHECKED_STATE_SET = [View.VIEW_STATE_CHECKED];\n widget.CheckedTextView = CheckedTextView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var Integer = java.lang.Integer;\n var ProgressBar = android.widget.ProgressBar;\n class AbsSeekBar extends ProgressBar {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, null);\n this.mThumbOffset = 0;\n this.mTouchProgressOffset = 0;\n this.mIsUserSeekable = true;\n this.mKeyProgressIncrement = 1;\n this.mDisabledAlpha = 0;\n this.mTouchDownX = 0;\n let a = this._attrBinder;\n a.addAttr('thumb', (value) => {\n this.setThumb(a.parseDrawable(value));\n }, () => this.mThumb);\n a.addAttr('thumbOffset', (value) => {\n this.setThumbOffset(a.parseNumberPixelOffset(value));\n }, () => this.mThumbOffset);\n a.addAttr('disabledAlpha', (value) => {\n this.mDisabledAlpha = a.parseFloat(value, 0.5);\n }, () => this.mThumbOffset);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n setThumb(thumb) {\n let needUpdate;\n if (this.mThumb != null && thumb != this.mThumb) {\n this.mThumb.setCallback(null);\n needUpdate = true;\n }\n else {\n needUpdate = false;\n }\n if (thumb != null) {\n thumb.setCallback(this);\n this.mThumbOffset = thumb.getIntrinsicWidth() / 2;\n if (needUpdate && (thumb.getIntrinsicWidth() != this.mThumb.getIntrinsicWidth() || thumb.getIntrinsicHeight() != this.mThumb.getIntrinsicHeight())) {\n this.requestLayout();\n }\n }\n this.mThumb = thumb;\n this.invalidate();\n if (needUpdate) {\n this.updateThumbPos(this.getWidth(), this.getHeight());\n if (thumb != null && thumb.isStateful()) {\n let state = this.getDrawableState();\n thumb.setState(state);\n }\n }\n }\n getThumb() {\n return this.mThumb;\n }\n getThumbOffset() {\n return this.mThumbOffset;\n }\n setThumbOffset(thumbOffset) {\n this.mThumbOffset = thumbOffset;\n this.invalidate();\n }\n setKeyProgressIncrement(increment) {\n this.mKeyProgressIncrement = increment < 0 ? -increment : increment;\n }\n getKeyProgressIncrement() {\n return this.mKeyProgressIncrement;\n }\n setMax(max) {\n super.setMax(max);\n if ((this.mKeyProgressIncrement == 0) || (this.getMax() / this.mKeyProgressIncrement > 20)) {\n this.setKeyProgressIncrement(Math.max(1, Math.round(this.getMax() / 20)));\n }\n }\n verifyDrawable(who) {\n return who == this.mThumb || super.verifyDrawable(who);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mThumb != null)\n this.mThumb.jumpToCurrentState();\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n let progressDrawable = this.getProgressDrawable();\n if (progressDrawable != null) {\n progressDrawable.setAlpha(this.isEnabled() ? AbsSeekBar.NO_ALPHA : Math.floor((AbsSeekBar.NO_ALPHA * this.mDisabledAlpha)));\n }\n if (this.mThumb != null && this.mThumb.isStateful()) {\n let state = this.getDrawableState();\n this.mThumb.setState(state);\n }\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n let thumb = this.mThumb;\n if (thumb != null) {\n this.setThumbPos(this.getWidth(), thumb, scale, Integer.MIN_VALUE);\n this.invalidate();\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n this.updateThumbPos(w, h);\n }\n updateThumbPos(w, h) {\n let d = this.getCurrentDrawable();\n let thumb = this.mThumb;\n let thumbHeight = thumb == null ? 0 : thumb.getIntrinsicHeight();\n let trackHeight = Math.min(this.mMaxHeight, h - this.mPaddingTop - this.mPaddingBottom);\n let max = this.getMax();\n let scale = max > 0 ? this.getProgress() / max : 0;\n if (thumbHeight > trackHeight) {\n if (thumb != null) {\n this.setThumbPos(w, thumb, scale, 0);\n }\n let gapForCenteringTrack = (thumbHeight - trackHeight) / 2;\n if (d != null) {\n d.setBounds(0, gapForCenteringTrack, w - this.mPaddingRight - this.mPaddingLeft, h - this.mPaddingBottom - gapForCenteringTrack - this.mPaddingTop);\n }\n }\n else {\n if (d != null) {\n d.setBounds(0, 0, w - this.mPaddingRight - this.mPaddingLeft, h - this.mPaddingBottom - this.mPaddingTop);\n }\n let gap = (trackHeight - thumbHeight) / 2;\n if (thumb != null) {\n this.setThumbPos(w, thumb, scale, gap);\n }\n }\n }\n setThumbPos(w, thumb, scale, gap) {\n let available = w - this.mPaddingLeft - this.mPaddingRight;\n let thumbWidth = thumb.getIntrinsicWidth();\n let thumbHeight = thumb.getIntrinsicHeight();\n available -= thumbWidth;\n available += this.mThumbOffset * 2;\n let thumbPos = Math.floor((scale * available));\n let topBound, bottomBound;\n if (gap == Integer.MIN_VALUE) {\n let oldBounds = thumb.getBounds();\n topBound = oldBounds.top;\n bottomBound = oldBounds.bottom;\n }\n else {\n topBound = gap;\n bottomBound = gap + thumbHeight;\n }\n const left = (this.isLayoutRtl() && this.mMirrorForRtl) ? available - thumbPos : thumbPos;\n thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mThumb != null) {\n canvas.save();\n canvas.translate(this.mPaddingLeft - this.mThumbOffset, this.mPaddingTop);\n this.mThumb.draw(canvas);\n canvas.restore();\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let d = this.getCurrentDrawable();\n let thumbHeight = this.mThumb == null ? 0 : this.mThumb.getIntrinsicHeight();\n let dw = 0;\n let dh = 0;\n if (d != null) {\n dw = Math.max(this.mMinWidth, Math.min(this.mMaxWidth, d.getIntrinsicWidth()));\n dh = Math.max(this.mMinHeight, Math.min(this.mMaxHeight, d.getIntrinsicHeight()));\n dh = Math.max(thumbHeight, dh);\n }\n dw += this.mPaddingLeft + this.mPaddingRight;\n dh += this.mPaddingTop + this.mPaddingBottom;\n this.setMeasuredDimension(AbsSeekBar.resolveSizeAndState(dw, widthMeasureSpec, 0), AbsSeekBar.resolveSizeAndState(dh, heightMeasureSpec, 0));\n }\n onTouchEvent(event) {\n if (!this.mIsUserSeekable || !this.isEnabled()) {\n return false;\n }\n switch (event.getAction()) {\n case MotionEvent.ACTION_DOWN:\n if (this.isInScrollingContainer()) {\n this.mTouchDownX = event.getX();\n }\n else {\n this.setPressed(true);\n if (this.mThumb != null) {\n this.invalidate(this.mThumb.getBounds());\n }\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.attemptClaimDrag();\n }\n break;\n case MotionEvent.ACTION_MOVE:\n if (this.mIsDragging) {\n this.trackTouchEvent(event);\n }\n else {\n const x = event.getX();\n if (Math.abs(x - this.mTouchDownX) > this.mTouchSlop) {\n this.setPressed(true);\n if (this.mThumb != null) {\n this.invalidate(this.mThumb.getBounds());\n }\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.attemptClaimDrag();\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsDragging) {\n this.trackTouchEvent(event);\n this.onStopTrackingTouch();\n this.setPressed(false);\n }\n else {\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.onStopTrackingTouch();\n }\n this.invalidate();\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsDragging) {\n this.onStopTrackingTouch();\n this.setPressed(false);\n }\n this.invalidate();\n break;\n }\n return true;\n }\n trackTouchEvent(event) {\n const width = this.getWidth();\n const available = width - this.mPaddingLeft - this.mPaddingRight;\n let x = Math.floor(event.getX());\n let scale;\n let progress = 0;\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n if (x > width - this.mPaddingRight) {\n scale = 0.0;\n }\n else if (x < this.mPaddingLeft) {\n scale = 1.0;\n }\n else {\n scale = (available - x + this.mPaddingLeft) / available;\n progress = this.mTouchProgressOffset;\n }\n }\n else {\n if (x < this.mPaddingLeft) {\n scale = 0.0;\n }\n else if (x > width - this.mPaddingRight) {\n scale = 1.0;\n }\n else {\n scale = (x - this.mPaddingLeft) / available;\n progress = this.mTouchProgressOffset;\n }\n }\n const max = this.getMax();\n progress += scale * max;\n this.setProgress(Math.floor(progress), true);\n }\n attemptClaimDrag() {\n if (this.mParent != null) {\n this.mParent.requestDisallowInterceptTouchEvent(true);\n }\n }\n onStartTrackingTouch() {\n this.mIsDragging = true;\n }\n onStopTrackingTouch() {\n this.mIsDragging = false;\n }\n onKeyChange() {\n }\n onKeyDown(keyCode, event) {\n if (this.isEnabled()) {\n let progress = this.getProgress();\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (progress <= 0)\n break;\n this.setProgress(progress - this.mKeyProgressIncrement, true);\n this.onKeyChange();\n return true;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (progress >= this.getMax())\n break;\n this.setProgress(progress + this.mKeyProgressIncrement, true);\n this.onKeyChange();\n return true;\n }\n }\n return super.onKeyDown(keyCode, event);\n }\n }\n AbsSeekBar.NO_ALPHA = 0xFF;\n widget.AbsSeekBar = AbsSeekBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AbsSeekBar = android.widget.AbsSeekBar;\n class SeekBar extends AbsSeekBar {\n constructor(context, bindElement, defStyle = android.R.attr.seekBarStyle) {\n super(context, bindElement, defStyle);\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onProgressChanged(this, this.getProgress(), fromUser);\n }\n }\n setOnSeekBarChangeListener(l) {\n this.mOnSeekBarChangeListener = l;\n }\n onStartTrackingTouch() {\n super.onStartTrackingTouch();\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onStartTrackingTouch(this);\n }\n }\n onStopTrackingTouch() {\n super.onStopTrackingTouch();\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onStopTrackingTouch(this);\n }\n }\n }\n widget.SeekBar = SeekBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AbsSeekBar = android.widget.AbsSeekBar;\n class RatingBar extends AbsSeekBar {\n constructor(context, bindElement, defStyle = android.R.attr.ratingBarStyle) {\n super(context, bindElement, null);\n this.mNumStars = 5;\n this.mProgressOnStartTracking = 0;\n const a = this._attrBinder;\n a.addAttr('numStars', (value) => {\n this.setNumStars(a.parseInt(value, this.mNumStars));\n }, () => this.mNumStars);\n a.addAttr('isIndicator', (value) => {\n this.setIsIndicator(a.parseBoolean(value, !this.mIsUserSeekable));\n }, () => !this.mIsUserSeekable);\n a.addAttr('stepSize', (value) => {\n this.setStepSize(a.parseFloat(value, 0.5));\n }, () => this.getStepSize());\n a.addAttr('rating', (value) => {\n this.setRating(a.parseFloat(value, this.getRating()));\n }, () => this.getRating());\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n this.mTouchProgressOffset = 1.1;\n }\n setOnRatingBarChangeListener(listener) {\n this.mOnRatingBarChangeListener = listener;\n }\n getOnRatingBarChangeListener() {\n return this.mOnRatingBarChangeListener;\n }\n setIsIndicator(isIndicator) {\n this.mIsUserSeekable = !isIndicator;\n this.setFocusable(!isIndicator);\n }\n isIndicator() {\n return !this.mIsUserSeekable;\n }\n setNumStars(numStars) {\n if (numStars <= 0) {\n return;\n }\n let step = this.getStepSize();\n this.mNumStars = numStars;\n this.setStepSize(step);\n this.requestLayout();\n }\n getNumStars() {\n return this.mNumStars;\n }\n setRating(rating) {\n this.setProgress(Math.round(rating * this.getProgressPerStar()));\n }\n getRating() {\n return this.getProgress() / this.getProgressPerStar();\n }\n setStepSize(stepSize) {\n if (Number.isNaN(stepSize) || !Number.isFinite(stepSize) || stepSize <= 0) {\n return;\n }\n const newMax = this.mNumStars / stepSize;\n let newProgress = Math.floor((newMax / this.getMax() * this.getProgress()));\n if (Number.isNaN(newProgress))\n newProgress = 0;\n this.setMax(Math.floor(newMax));\n this.setProgress(newProgress);\n }\n getStepSize() {\n return this.getNumStars() / this.getMax();\n }\n getProgressPerStar() {\n if (this.mNumStars > 0) {\n return 1 * this.getMax() / this.mNumStars;\n }\n else {\n return 1;\n }\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n this.updateSecondaryProgress(this.getProgress());\n if (!fromUser) {\n this.dispatchRatingChange(false);\n }\n }\n updateSecondaryProgress(progress) {\n const ratio = this.getProgressPerStar();\n if (ratio > 0) {\n const progressInStars = progress / ratio;\n const secondaryProgress = Math.floor((Math.ceil(progressInStars) * ratio));\n this.setSecondaryProgress(secondaryProgress);\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (this.mSampleTile != null) {\n const width = this.mSampleTile.getIntrinsicWidth() * this.mNumStars;\n this.setMeasuredDimension(RatingBar.resolveSizeAndState(width, widthMeasureSpec, 0), this.getMeasuredHeight());\n }\n }\n onStartTrackingTouch() {\n this.mProgressOnStartTracking = this.getProgress();\n super.onStartTrackingTouch();\n }\n onStopTrackingTouch() {\n super.onStopTrackingTouch();\n if (this.getProgress() != this.mProgressOnStartTracking) {\n this.dispatchRatingChange(true);\n }\n }\n onKeyChange() {\n super.onKeyChange();\n this.dispatchRatingChange(true);\n }\n dispatchRatingChange(fromUser) {\n if (this.mOnRatingBarChangeListener != null) {\n this.mOnRatingBarChangeListener.onRatingChanged(this, this.getRating(), fromUser);\n }\n }\n setMax(max) {\n if (max <= 0) {\n return;\n }\n super.setMax(max);\n }\n }\n widget.RatingBar = RatingBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayList = java.util.ArrayList;\n var ExpandableListView = android.widget.ExpandableListView;\n class ExpandableListPosition {\n constructor() {\n this.groupPos = 0;\n this.childPos = 0;\n this.flatListPos = 0;\n this.type = 0;\n }\n resetState() {\n this.groupPos = 0;\n this.childPos = 0;\n this.flatListPos = 0;\n this.type = 0;\n }\n getPackedPosition() {\n if (this.type == ExpandableListPosition.CHILD)\n return ExpandableListView.getPackedPositionForChild(this.groupPos, this.childPos);\n else\n return ExpandableListView.getPackedPositionForGroup(this.groupPos);\n }\n static obtainGroupPosition(groupPosition) {\n return ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPosition, 0, 0);\n }\n static obtainChildPosition(groupPosition, childPosition) {\n return ExpandableListPosition.obtain(ExpandableListPosition.CHILD, groupPosition, childPosition, 0);\n }\n static obtainPosition(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL) {\n return null;\n }\n let elp = ExpandableListPosition.getRecycledOrCreate();\n elp.groupPos = ExpandableListView.getPackedPositionGroup(packedPosition);\n if (ExpandableListView.getPackedPositionType(packedPosition) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {\n elp.type = ExpandableListPosition.CHILD;\n elp.childPos = ExpandableListView.getPackedPositionChild(packedPosition);\n }\n else {\n elp.type = ExpandableListPosition.GROUP;\n }\n return elp;\n }\n static obtain(type, groupPos, childPos, flatListPos) {\n let elp = ExpandableListPosition.getRecycledOrCreate();\n elp.type = type;\n elp.groupPos = groupPos;\n elp.childPos = childPos;\n elp.flatListPos = flatListPos;\n return elp;\n }\n static getRecycledOrCreate() {\n let elp;\n {\n if (ExpandableListPosition.sPool.size() > 0) {\n elp = ExpandableListPosition.sPool.remove(0);\n }\n else {\n return new ExpandableListPosition();\n }\n }\n elp.resetState();\n return elp;\n }\n recycle() {\n {\n if (ExpandableListPosition.sPool.size() < ExpandableListPosition.MAX_POOL_SIZE) {\n ExpandableListPosition.sPool.add(this);\n }\n }\n }\n }\n ExpandableListPosition.MAX_POOL_SIZE = 5;\n ExpandableListPosition.sPool = new ArrayList(ExpandableListPosition.MAX_POOL_SIZE);\n ExpandableListPosition.CHILD = 1;\n ExpandableListPosition.GROUP = 2;\n widget.ExpandableListPosition = ExpandableListPosition;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var HeterogeneousExpandableList;\n (function (HeterogeneousExpandableList) {\n function isImpl(obj) {\n return obj && obj['getGroupType'] && obj['getChildType'] && obj['getGroupTypeCount'] && obj['getChildTypeCount'];\n }\n HeterogeneousExpandableList.isImpl = isImpl;\n })(HeterogeneousExpandableList = widget.HeterogeneousExpandableList || (widget.HeterogeneousExpandableList = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var SystemClock = android.os.SystemClock;\n var ArrayList = java.util.ArrayList;\n var Collections = java.util.Collections;\n var Integer = java.lang.Integer;\n var AdapterView = android.widget.AdapterView;\n var BaseAdapter = android.widget.BaseAdapter;\n var ExpandableListPosition = android.widget.ExpandableListPosition;\n var HeterogeneousExpandableList = android.widget.HeterogeneousExpandableList;\n class ExpandableListConnector extends BaseAdapter {\n constructor(expandableListAdapter) {\n super();\n this.mTotalExpChildrenCount = 0;\n this.mMaxExpGroupCount = Integer.MAX_VALUE;\n this.mDataSetObserver = new ExpandableListConnector.MyDataSetObserver(this);\n this.mExpGroupMetadataList = new ArrayList();\n this.setExpandableListAdapter(expandableListAdapter);\n }\n setExpandableListAdapter(expandableListAdapter) {\n if (this.mExpandableListAdapter != null) {\n this.mExpandableListAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.mExpandableListAdapter = expandableListAdapter;\n expandableListAdapter.registerDataSetObserver(this.mDataSetObserver);\n }\n getUnflattenedPos(flPos) {\n const egml = this.mExpGroupMetadataList;\n const numExpGroups = egml.size();\n let leftExpGroupIndex = 0;\n let rightExpGroupIndex = numExpGroups - 1;\n let midExpGroupIndex = 0;\n let midExpGm;\n if (numExpGroups == 0) {\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, flPos, -1, null, 0);\n }\n while (leftExpGroupIndex <= rightExpGroupIndex) {\n midExpGroupIndex = Math.floor((rightExpGroupIndex - leftExpGroupIndex) / 2 + leftExpGroupIndex);\n midExpGm = egml.get(midExpGroupIndex);\n if (flPos > midExpGm.lastChildFlPos) {\n leftExpGroupIndex = midExpGroupIndex + 1;\n }\n else if (flPos < midExpGm.flPos) {\n rightExpGroupIndex = midExpGroupIndex - 1;\n }\n else if (flPos == midExpGm.flPos) {\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, midExpGm.gPos, -1, midExpGm, midExpGroupIndex);\n }\n else if (flPos <= midExpGm.lastChildFlPos) {\n const childPos = flPos - (midExpGm.flPos + 1);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.CHILD, midExpGm.gPos, childPos, midExpGm, midExpGroupIndex);\n }\n }\n let insertPosition = 0;\n let groupPos = 0;\n if (leftExpGroupIndex > midExpGroupIndex) {\n const leftExpGm = egml.get(leftExpGroupIndex - 1);\n insertPosition = leftExpGroupIndex;\n groupPos = (flPos - leftExpGm.lastChildFlPos) + leftExpGm.gPos;\n }\n else if (rightExpGroupIndex < midExpGroupIndex) {\n const rightExpGm = egml.get(++rightExpGroupIndex);\n insertPosition = rightExpGroupIndex;\n groupPos = rightExpGm.gPos - (rightExpGm.flPos - flPos);\n }\n else {\n throw Error(`new RuntimeException(\"Unknown state\")`);\n }\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, groupPos, -1, null, insertPosition);\n }\n getFlattenedPos(pos) {\n const egml = this.mExpGroupMetadataList;\n const numExpGroups = egml.size();\n let leftExpGroupIndex = 0;\n let rightExpGroupIndex = numExpGroups - 1;\n let midExpGroupIndex = 0;\n let midExpGm;\n if (numExpGroups == 0) {\n return ExpandableListConnector.PositionMetadata.obtain(pos.groupPos, pos.type, pos.groupPos, pos.childPos, null, 0);\n }\n while (leftExpGroupIndex <= rightExpGroupIndex) {\n midExpGroupIndex = Math.floor((rightExpGroupIndex - leftExpGroupIndex) / 2 + leftExpGroupIndex);\n midExpGm = egml.get(midExpGroupIndex);\n if (pos.groupPos > midExpGm.gPos) {\n leftExpGroupIndex = midExpGroupIndex + 1;\n }\n else if (pos.groupPos < midExpGm.gPos) {\n rightExpGroupIndex = midExpGroupIndex - 1;\n }\n else if (pos.groupPos == midExpGm.gPos) {\n if (pos.type == ExpandableListPosition.GROUP) {\n return ExpandableListConnector.PositionMetadata.obtain(midExpGm.flPos, pos.type, pos.groupPos, pos.childPos, midExpGm, midExpGroupIndex);\n }\n else if (pos.type == ExpandableListPosition.CHILD) {\n return ExpandableListConnector.PositionMetadata.obtain(midExpGm.flPos + pos.childPos + 1, pos.type, pos.groupPos, pos.childPos, midExpGm, midExpGroupIndex);\n }\n else {\n return null;\n }\n }\n }\n if (pos.type != ExpandableListPosition.GROUP) {\n return null;\n }\n if (leftExpGroupIndex > midExpGroupIndex) {\n const leftExpGm = egml.get(leftExpGroupIndex - 1);\n const flPos = leftExpGm.lastChildFlPos + (pos.groupPos - leftExpGm.gPos);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, pos.type, pos.groupPos, pos.childPos, null, leftExpGroupIndex);\n }\n else if (rightExpGroupIndex < midExpGroupIndex) {\n const rightExpGm = egml.get(++rightExpGroupIndex);\n const flPos = rightExpGm.flPos - (rightExpGm.gPos - pos.groupPos);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, pos.type, pos.groupPos, pos.childPos, null, rightExpGroupIndex);\n }\n else {\n return null;\n }\n }\n areAllItemsEnabled() {\n return this.mExpandableListAdapter.areAllItemsEnabled();\n }\n isEnabled(flatListPos) {\n const metadata = this.getUnflattenedPos(flatListPos);\n const pos = metadata.position;\n let retValue;\n if (pos.type == ExpandableListPosition.CHILD) {\n retValue = this.mExpandableListAdapter.isChildSelectable(pos.groupPos, pos.childPos);\n }\n else {\n retValue = true;\n }\n metadata.recycle();\n return retValue;\n }\n getCount() {\n return this.mExpandableListAdapter.getGroupCount() + this.mTotalExpChildrenCount;\n }\n getItem(flatListPos) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getGroup(posMetadata.position.groupPos);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n retValue = this.mExpandableListAdapter.getChild(posMetadata.position.groupPos, posMetadata.position.childPos);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getItemId(flatListPos) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n const groupId = this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getCombinedGroupId(groupId);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n const childId = this.mExpandableListAdapter.getChildId(posMetadata.position.groupPos, posMetadata.position.childPos);\n retValue = this.mExpandableListAdapter.getCombinedChildId(groupId, childId);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getView(flatListPos, convertView, parent) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getGroupView(posMetadata.position.groupPos, posMetadata.isExpanded(), convertView, parent);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n const isLastChild = posMetadata.groupMetadata.lastChildFlPos == flatListPos;\n retValue = this.mExpandableListAdapter.getChildView(posMetadata.position.groupPos, posMetadata.position.childPos, isLastChild, convertView, parent);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getItemViewType(flatListPos) {\n const metadata = this.getUnflattenedPos(flatListPos);\n const pos = metadata.position;\n let retValue;\n if (HeterogeneousExpandableList.isImpl(this.mExpandableListAdapter)) {\n let adapter = this.mExpandableListAdapter;\n if (pos.type == ExpandableListPosition.GROUP) {\n retValue = adapter.getGroupType(pos.groupPos);\n }\n else {\n const childType = adapter.getChildType(pos.groupPos, pos.childPos);\n retValue = adapter.getGroupTypeCount() + childType;\n }\n }\n else {\n if (pos.type == ExpandableListPosition.GROUP) {\n retValue = 0;\n }\n else {\n retValue = 1;\n }\n }\n metadata.recycle();\n return retValue;\n }\n getViewTypeCount() {\n if (HeterogeneousExpandableList.isImpl(this.mExpandableListAdapter)) {\n let adapter = this.mExpandableListAdapter;\n return adapter.getGroupTypeCount() + adapter.getChildTypeCount();\n }\n else {\n return 2;\n }\n }\n hasStableIds() {\n return this.mExpandableListAdapter.hasStableIds();\n }\n refreshExpGroupMetadataList(forceChildrenCountRefresh, syncGroupPositions) {\n const egml = this.mExpGroupMetadataList;\n let egmlSize = egml.size();\n let curFlPos = 0;\n this.mTotalExpChildrenCount = 0;\n if (syncGroupPositions) {\n let positionsChanged = false;\n for (let i = egmlSize - 1; i >= 0; i--) {\n let curGm = egml.get(i);\n let newGPos = this.findGroupPosition(curGm.gId, curGm.gPos);\n if (newGPos != curGm.gPos) {\n if (newGPos == AdapterView.INVALID_POSITION) {\n egml.remove(i);\n egmlSize--;\n }\n curGm.gPos = newGPos;\n if (!positionsChanged)\n positionsChanged = true;\n }\n }\n if (positionsChanged) {\n Collections.sort(egml);\n }\n }\n let gChildrenCount;\n let lastGPos = 0;\n for (let i = 0; i < egmlSize; i++) {\n let curGm = egml.get(i);\n if ((curGm.lastChildFlPos == ExpandableListConnector.GroupMetadata.REFRESH) || forceChildrenCountRefresh) {\n gChildrenCount = this.mExpandableListAdapter.getChildrenCount(curGm.gPos);\n }\n else {\n gChildrenCount = curGm.lastChildFlPos - curGm.flPos;\n }\n this.mTotalExpChildrenCount += gChildrenCount;\n curFlPos += (curGm.gPos - lastGPos);\n lastGPos = curGm.gPos;\n curGm.flPos = curFlPos;\n curFlPos += gChildrenCount;\n curGm.lastChildFlPos = curFlPos;\n }\n }\n collapseGroup(groupPos) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n if (pm == null)\n return false;\n let retValue = this.collapseGroupWithMeta(pm);\n pm.recycle();\n return retValue;\n }\n collapseGroupWithMeta(posMetadata) {\n if (posMetadata.groupMetadata == null)\n return false;\n this.mExpGroupMetadataList.remove(posMetadata.groupMetadata);\n this.refreshExpGroupMetadataList(false, false);\n this.notifyDataSetChanged();\n this.mExpandableListAdapter.onGroupCollapsed(posMetadata.groupMetadata.gPos);\n return true;\n }\n expandGroup(groupPos) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n let retValue = this.expandGroupWithMeta(pm);\n pm.recycle();\n return retValue;\n }\n expandGroupWithMeta(posMetadata) {\n if (posMetadata.position.groupPos < 0) {\n throw Error(`new RuntimeException(\"Need group\")`);\n }\n if (this.mMaxExpGroupCount == 0)\n return false;\n if (posMetadata.groupMetadata != null)\n return false;\n if (this.mExpGroupMetadataList.size() >= this.mMaxExpGroupCount) {\n let collapsedGm = this.mExpGroupMetadataList.get(0);\n let collapsedIndex = this.mExpGroupMetadataList.indexOf(collapsedGm);\n this.collapseGroup(collapsedGm.gPos);\n if (posMetadata.groupInsertIndex > collapsedIndex) {\n posMetadata.groupInsertIndex--;\n }\n }\n let expandedGm = ExpandableListConnector.GroupMetadata.obtain(ExpandableListConnector.GroupMetadata.REFRESH, ExpandableListConnector.GroupMetadata.REFRESH, posMetadata.position.groupPos, this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos));\n this.mExpGroupMetadataList.add(posMetadata.groupInsertIndex, expandedGm);\n this.refreshExpGroupMetadataList(false, false);\n this.notifyDataSetChanged();\n this.mExpandableListAdapter.onGroupExpanded(expandedGm.gPos);\n return true;\n }\n isGroupExpanded(groupPosition) {\n let groupMetadata;\n for (let i = this.mExpGroupMetadataList.size() - 1; i >= 0; i--) {\n groupMetadata = this.mExpGroupMetadataList.get(i);\n if (groupMetadata.gPos == groupPosition) {\n return true;\n }\n }\n return false;\n }\n setMaxExpGroupCount(maxExpGroupCount) {\n this.mMaxExpGroupCount = maxExpGroupCount;\n }\n getAdapter() {\n return this.mExpandableListAdapter;\n }\n getExpandedGroupMetadataList() {\n return this.mExpGroupMetadataList;\n }\n setExpandedGroupMetadataList(expandedGroupMetadataList) {\n if ((expandedGroupMetadataList == null) || (this.mExpandableListAdapter == null)) {\n return;\n }\n let numGroups = this.mExpandableListAdapter.getGroupCount();\n for (let i = expandedGroupMetadataList.size() - 1; i >= 0; i--) {\n if (expandedGroupMetadataList.get(i).gPos >= numGroups) {\n return;\n }\n }\n this.mExpGroupMetadataList = expandedGroupMetadataList;\n this.refreshExpGroupMetadataList(true, false);\n }\n isEmpty() {\n let adapter = this.getAdapter();\n return adapter != null ? adapter.isEmpty() : true;\n }\n findGroupPosition(groupIdToMatch, seedGroupPosition) {\n let count = this.mExpandableListAdapter.getGroupCount();\n if (count == 0) {\n return AdapterView.INVALID_POSITION;\n }\n if (groupIdToMatch == AdapterView.INVALID_ROW_ID) {\n return AdapterView.INVALID_POSITION;\n }\n seedGroupPosition = Math.max(0, seedGroupPosition);\n seedGroupPosition = Math.min(count - 1, seedGroupPosition);\n let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS;\n let rowId;\n let first = seedGroupPosition;\n let last = seedGroupPosition;\n let next = false;\n let hitFirst;\n let hitLast;\n let adapter = this.getAdapter();\n if (adapter == null) {\n return AdapterView.INVALID_POSITION;\n }\n while (SystemClock.uptimeMillis() <= endTime) {\n rowId = adapter.getGroupId(seedGroupPosition);\n if (rowId == groupIdToMatch) {\n return seedGroupPosition;\n }\n hitLast = last == count - 1;\n hitFirst = first == 0;\n if (hitLast && hitFirst) {\n break;\n }\n if (hitFirst || (next && !hitLast)) {\n last++;\n seedGroupPosition = last;\n next = false;\n }\n else if (hitLast || (!next && !hitFirst)) {\n first--;\n seedGroupPosition = first;\n next = true;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n }\n widget.ExpandableListConnector = ExpandableListConnector;\n (function (ExpandableListConnector) {\n class MyDataSetObserver extends DataSetObserver {\n constructor(arg) {\n super();\n this._ExpandableListConnector_this = arg;\n }\n onChanged() {\n this._ExpandableListConnector_this.refreshExpGroupMetadataList(true, true);\n this._ExpandableListConnector_this.notifyDataSetChanged();\n }\n onInvalidated() {\n this._ExpandableListConnector_this.refreshExpGroupMetadataList(true, true);\n this._ExpandableListConnector_this.notifyDataSetInvalidated();\n }\n }\n ExpandableListConnector.MyDataSetObserver = MyDataSetObserver;\n class GroupMetadata {\n constructor() {\n this.flPos = 0;\n this.lastChildFlPos = 0;\n this.gPos = 0;\n this.gId = 0;\n }\n static obtain(flPos, lastChildFlPos, gPos, gId) {\n let gm = new GroupMetadata();\n gm.flPos = flPos;\n gm.lastChildFlPos = lastChildFlPos;\n gm.gPos = gPos;\n gm.gId = gId;\n return gm;\n }\n compareTo(another) {\n if (another == null) {\n throw Error(`new IllegalArgumentException()`);\n }\n return this.gPos - another.gPos;\n }\n }\n GroupMetadata.REFRESH = -1;\n ExpandableListConnector.GroupMetadata = GroupMetadata;\n class PositionMetadata {\n constructor() {\n this.groupInsertIndex = 0;\n }\n resetState() {\n if (this.position != null) {\n this.position.recycle();\n this.position = null;\n }\n this.groupMetadata = null;\n this.groupInsertIndex = 0;\n }\n static obtain(flatListPos, type, groupPos, childPos, groupMetadata, groupInsertIndex) {\n let pm = PositionMetadata.getRecycledOrCreate();\n pm.position = ExpandableListPosition.obtain(type, groupPos, childPos, flatListPos);\n pm.groupMetadata = groupMetadata;\n pm.groupInsertIndex = groupInsertIndex;\n return pm;\n }\n static getRecycledOrCreate() {\n let pm;\n {\n if (PositionMetadata.sPool.size() > 0) {\n pm = PositionMetadata.sPool.remove(0);\n }\n else {\n return new PositionMetadata();\n }\n }\n pm.resetState();\n return pm;\n }\n recycle() {\n this.resetState();\n {\n if (PositionMetadata.sPool.size() < PositionMetadata.MAX_POOL_SIZE) {\n PositionMetadata.sPool.add(this);\n }\n }\n }\n isExpanded() {\n return this.groupMetadata != null;\n }\n }\n PositionMetadata.MAX_POOL_SIZE = 5;\n PositionMetadata.sPool = new ArrayList(PositionMetadata.MAX_POOL_SIZE);\n ExpandableListConnector.PositionMetadata = PositionMetadata;\n })(ExpandableListConnector = widget.ExpandableListConnector || (widget.ExpandableListConnector = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ExpandableListConnector = android.widget.ExpandableListConnector;\n var ExpandableListPosition = android.widget.ExpandableListPosition;\n var ListView = android.widget.ListView;\n var Long = goog.math.Long;\n class ExpandableListView extends ListView {\n constructor(context, bindElement, defStyle = android.R.attr.expandableListViewStyle) {\n super(context, bindElement, null);\n this.mIndicatorLeft = 0;\n this.mIndicatorRight = 0;\n this.mIndicatorStart = 0;\n this.mIndicatorEnd = 0;\n this.mChildIndicatorLeft = 0;\n this.mChildIndicatorRight = 0;\n this.mChildIndicatorStart = 0;\n this.mChildIndicatorEnd = 0;\n this.mIndicatorRect = new Rect();\n this._attrBinder.addAttr('groupIndicator', (value) => {\n this.setGroupIndicator(this._attrBinder.parseDrawable(value));\n }, () => {\n return this.mGroupIndicator;\n });\n this._attrBinder.addAttr('childIndicator', (value) => {\n this.setChildIndicator(this._attrBinder.parseDrawable(value));\n }, () => {\n return this.mChildIndicator;\n });\n this._attrBinder.addAttr('indicatorLeft', (value) => {\n this.setIndicatorBounds(this._attrBinder.parseNumberPixelOffset(value, 0), this.mIndicatorRight);\n }, () => {\n return this.mIndicatorLeft;\n });\n this._attrBinder.addAttr('indicatorRight', (value) => {\n let num = this._attrBinder.parseNumberPixelOffset(value, 0);\n if (num == 0 && this.mGroupIndicator != null) {\n num = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n this.setIndicatorBounds(this.mIndicatorLeft, num);\n }, () => {\n return this.mIndicatorRight;\n });\n this._attrBinder.addAttr('childIndicatorLeft', (value) => {\n this.setChildIndicatorBounds(this._attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT), this.mChildIndicatorRight);\n }, () => {\n return this.mChildIndicatorLeft;\n });\n this._attrBinder.addAttr('childIndicatorRight', (value) => {\n let num = this._attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT);\n if (num == 0 && this.mChildIndicator != null) {\n num = this.mChildIndicatorLeft + this.mChildIndicator.getIntrinsicWidth();\n }\n this.setIndicatorBounds(this.mChildIndicatorLeft, num);\n }, () => {\n return this.mChildIndicatorRight;\n });\n this._attrBinder.addAttr('childDivider', (value) => {\n this.setChildDivider(this._attrBinder.parseDrawable(value));\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n isRtlCompatibilityMode() {\n return !this.hasRtlSupport();\n }\n hasRtlSupport() {\n return false;\n }\n onRtlPropertiesChanged(layoutDirection) {\n this.resolveIndicator();\n this.resolveChildIndicator();\n }\n resolveIndicator() {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mIndicatorStart >= 0) {\n this.mIndicatorRight = this.mIndicatorStart;\n }\n if (this.mIndicatorEnd >= 0) {\n this.mIndicatorLeft = this.mIndicatorEnd;\n }\n }\n else {\n if (this.mIndicatorStart >= 0) {\n this.mIndicatorLeft = this.mIndicatorStart;\n }\n if (this.mIndicatorEnd >= 0) {\n this.mIndicatorRight = this.mIndicatorEnd;\n }\n }\n if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) {\n this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n }\n resolveChildIndicator() {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mChildIndicatorStart >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorRight = this.mChildIndicatorStart;\n }\n if (this.mChildIndicatorEnd >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorLeft = this.mChildIndicatorEnd;\n }\n }\n else {\n if (this.mChildIndicatorStart >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorLeft = this.mChildIndicatorStart;\n }\n if (this.mChildIndicatorEnd >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorRight = this.mChildIndicatorEnd;\n }\n }\n }\n dispatchDraw(canvas) {\n super.dispatchDraw(canvas);\n if ((this.mChildIndicator == null) && (this.mGroupIndicator == null)) {\n return;\n }\n let saveCount = 0;\n const clipToPadding = (this.mGroupFlags & ExpandableListView.CLIP_TO_PADDING_MASK) == ExpandableListView.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n const headerViewsCount = this.getHeaderViewsCount();\n const lastChildFlPos = this.mItemCount - this.getFooterViewsCount() - headerViewsCount - 1;\n const myB = this.mBottom;\n let pos;\n let item;\n let indicator;\n let t, b;\n let lastItemType = ~(ExpandableListPosition.CHILD | ExpandableListPosition.GROUP);\n const indicatorRect = this.mIndicatorRect;\n const childCount = this.getChildCount();\n for (let i = 0, childFlPos = this.mFirstPosition - headerViewsCount; i < childCount; i++, childFlPos++) {\n if (childFlPos < 0) {\n continue;\n }\n else if (childFlPos > lastChildFlPos) {\n break;\n }\n item = this.getChildAt(i);\n t = item.getTop();\n b = item.getBottom();\n if ((b < 0) || (t > myB))\n continue;\n pos = this.mConnector.getUnflattenedPos(childFlPos);\n const isLayoutRtl = this.isLayoutRtl();\n const width = this.getWidth();\n if (pos.position.type != lastItemType) {\n if (pos.position.type == ExpandableListPosition.CHILD) {\n indicatorRect.left = (this.mChildIndicatorLeft == ExpandableListView.CHILD_INDICATOR_INHERIT) ? this.mIndicatorLeft : this.mChildIndicatorLeft;\n indicatorRect.right = (this.mChildIndicatorRight == ExpandableListView.CHILD_INDICATOR_INHERIT) ? this.mIndicatorRight : this.mChildIndicatorRight;\n }\n else {\n indicatorRect.left = this.mIndicatorLeft;\n indicatorRect.right = this.mIndicatorRight;\n }\n if (isLayoutRtl) {\n const temp = indicatorRect.left;\n indicatorRect.left = width - indicatorRect.right;\n indicatorRect.right = width - temp;\n indicatorRect.left -= this.mPaddingRight;\n indicatorRect.right -= this.mPaddingRight;\n }\n else {\n indicatorRect.left += this.mPaddingLeft;\n indicatorRect.right += this.mPaddingLeft;\n }\n lastItemType = pos.position.type;\n }\n if (indicatorRect.left != indicatorRect.right) {\n if (this.mStackFromBottom) {\n indicatorRect.top = t;\n indicatorRect.bottom = b;\n }\n else {\n indicatorRect.top = t;\n indicatorRect.bottom = b;\n }\n indicator = this.getIndicator(pos);\n if (indicator != null) {\n indicator.setBounds(indicatorRect);\n indicator.draw(canvas);\n }\n }\n pos.recycle();\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n }\n }\n getIndicator(pos) {\n let indicator;\n if (pos.position.type == ExpandableListPosition.GROUP) {\n indicator = this.mGroupIndicator;\n if (indicator != null && indicator.isStateful()) {\n let isEmpty = (pos.groupMetadata == null) || (pos.groupMetadata.lastChildFlPos == pos.groupMetadata.flPos);\n const stateSetIndex = (pos.isExpanded() ? 1 : 0) |\n (isEmpty ? 2 : 0);\n indicator.setState(ExpandableListView.GROUP_STATE_SETS[stateSetIndex]);\n }\n }\n else {\n indicator = this.mChildIndicator;\n if (indicator != null && indicator.isStateful()) {\n const stateSet = pos.position.flatListPos == pos.groupMetadata.lastChildFlPos ? ExpandableListView.CHILD_LAST_STATE_SET : ExpandableListView.EMPTY_STATE_SET;\n indicator.setState(stateSet);\n }\n }\n return indicator;\n }\n setChildDivider(childDivider) {\n this.mChildDivider = childDivider;\n }\n drawDivider(canvas, bounds, childIndex) {\n let flatListPosition = childIndex + this.mFirstPosition;\n if (flatListPosition >= 0) {\n const adjustedPosition = this.getFlatPositionForConnector(flatListPosition);\n let pos = this.mConnector.getUnflattenedPos(adjustedPosition);\n if ((pos.position.type == ExpandableListPosition.CHILD) || (pos.isExpanded() && pos.groupMetadata.lastChildFlPos != pos.groupMetadata.flPos)) {\n const divider = this.mChildDivider;\n divider.setBounds(bounds);\n divider.draw(canvas);\n pos.recycle();\n return;\n }\n pos.recycle();\n }\n super.drawDivider(canvas, bounds, flatListPosition);\n }\n setAdapter(adapter) {\n throw Error(`new RuntimeException(\"For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of \" + \"setAdapter(ListAdapter)\")`);\n }\n getAdapter() {\n return super.getAdapter();\n }\n setOnItemClickListener(l) {\n super.setOnItemClickListener(l);\n }\n setExpandableAdapter(adapter) {\n this.mExpandAdapter = adapter;\n if (adapter != null) {\n this.mConnector = new ExpandableListConnector(adapter);\n }\n else {\n this.mConnector = null;\n }\n super.setAdapter(this.mConnector);\n }\n getExpandableListAdapter() {\n return this.mExpandAdapter;\n }\n isHeaderOrFooterPosition(position) {\n const footerViewsStart = this.mItemCount - this.getFooterViewsCount();\n return (position < this.getHeaderViewsCount() || position >= footerViewsStart);\n }\n getFlatPositionForConnector(flatListPosition) {\n return flatListPosition - this.getHeaderViewsCount();\n }\n getAbsoluteFlatPosition(flatListPosition) {\n return flatListPosition + this.getHeaderViewsCount();\n }\n performItemClick(v, position, id) {\n if (this.isHeaderOrFooterPosition(position)) {\n return super.performItemClick(v, position, id);\n }\n const adjustedPosition = this.getFlatPositionForConnector(position);\n return this.handleItemClick(v, adjustedPosition, id);\n }\n handleItemClick(v, position, id) {\n const posMetadata = this.mConnector.getUnflattenedPos(position);\n id = this.getChildOrGroupId(posMetadata.position);\n let returnValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n if (this.mOnGroupClickListener != null) {\n if (this.mOnGroupClickListener.onGroupClick(this, v, posMetadata.position.groupPos, id)) {\n posMetadata.recycle();\n return true;\n }\n }\n if (posMetadata.isExpanded()) {\n this.mConnector.collapseGroupWithMeta(posMetadata);\n this.playSoundEffect(SoundEffectConstants.CLICK);\n if (this.mOnGroupCollapseListener != null) {\n this.mOnGroupCollapseListener.onGroupCollapse(posMetadata.position.groupPos);\n }\n }\n else {\n this.mConnector.expandGroupWithMeta(posMetadata);\n this.playSoundEffect(SoundEffectConstants.CLICK);\n if (this.mOnGroupExpandListener != null) {\n this.mOnGroupExpandListener.onGroupExpand(posMetadata.position.groupPos);\n }\n const groupPos = posMetadata.position.groupPos;\n const groupFlatPos = posMetadata.position.flatListPos;\n const shiftedGroupPosition = groupFlatPos + this.getHeaderViewsCount();\n this.smoothScrollToPosition(shiftedGroupPosition + this.mExpandAdapter.getChildrenCount(groupPos), shiftedGroupPosition);\n }\n returnValue = true;\n }\n else {\n if (this.mOnChildClickListener != null) {\n this.playSoundEffect(SoundEffectConstants.CLICK);\n return this.mOnChildClickListener.onChildClick(this, v, posMetadata.position.groupPos, posMetadata.position.childPos, id);\n }\n returnValue = false;\n }\n posMetadata.recycle();\n return returnValue;\n }\n expandGroup(groupPos, animate = false) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.mConnector.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n let retValue = this.mConnector.expandGroupWithMeta(pm);\n if (this.mOnGroupExpandListener != null) {\n this.mOnGroupExpandListener.onGroupExpand(groupPos);\n }\n if (animate) {\n const groupFlatPos = pm.position.flatListPos;\n const shiftedGroupPosition = groupFlatPos + this.getHeaderViewsCount();\n this.smoothScrollToPosition(shiftedGroupPosition + this.mExpandAdapter.getChildrenCount(groupPos), shiftedGroupPosition);\n }\n pm.recycle();\n return retValue;\n }\n collapseGroup(groupPos) {\n let retValue = this.mConnector.collapseGroup(groupPos);\n if (this.mOnGroupCollapseListener != null) {\n this.mOnGroupCollapseListener.onGroupCollapse(groupPos);\n }\n return retValue;\n }\n setOnGroupCollapseListener(onGroupCollapseListener) {\n this.mOnGroupCollapseListener = onGroupCollapseListener;\n }\n setOnGroupExpandListener(onGroupExpandListener) {\n this.mOnGroupExpandListener = onGroupExpandListener;\n }\n setOnGroupClickListener(onGroupClickListener) {\n this.mOnGroupClickListener = onGroupClickListener;\n }\n setOnChildClickListener(onChildClickListener) {\n this.mOnChildClickListener = onChildClickListener;\n }\n getExpandableListPosition(flatListPosition) {\n if (this.isHeaderOrFooterPosition(flatListPosition)) {\n return ExpandableListView.PACKED_POSITION_VALUE_NULL;\n }\n const adjustedPosition = this.getFlatPositionForConnector(flatListPosition);\n let pm = this.mConnector.getUnflattenedPos(adjustedPosition);\n let packedPos = pm.position.getPackedPosition();\n pm.recycle();\n return packedPos;\n }\n getFlatListPosition(packedPosition) {\n let elPackedPos = ExpandableListPosition.obtainPosition(packedPosition);\n let pm = this.mConnector.getFlattenedPos(elPackedPos);\n elPackedPos.recycle();\n const flatListPosition = pm.position.flatListPos;\n pm.recycle();\n return this.getAbsoluteFlatPosition(flatListPosition);\n }\n getSelectedPosition() {\n const selectedPos = this.getSelectedItemPosition();\n return this.getExpandableListPosition(selectedPos);\n }\n getSelectedId() {\n let packedPos = this.getSelectedPosition();\n if (packedPos == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n let groupPos = ExpandableListView.getPackedPositionGroup(packedPos);\n if (ExpandableListView.getPackedPositionType(packedPos) == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {\n return this.mExpandAdapter.getGroupId(groupPos);\n }\n else {\n return this.mExpandAdapter.getChildId(groupPos, ExpandableListView.getPackedPositionChild(packedPos));\n }\n }\n setSelectedGroup(groupPosition) {\n let elGroupPos = ExpandableListPosition.obtainGroupPosition(groupPosition);\n let pm = this.mConnector.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n const absoluteFlatPosition = this.getAbsoluteFlatPosition(pm.position.flatListPos);\n super.setSelection(absoluteFlatPosition);\n pm.recycle();\n }\n setSelectedChild(groupPosition, childPosition, shouldExpandGroup) {\n let elChildPos = ExpandableListPosition.obtainChildPosition(groupPosition, childPosition);\n let flatChildPos = this.mConnector.getFlattenedPos(elChildPos);\n if (flatChildPos == null) {\n if (!shouldExpandGroup)\n return false;\n this.expandGroup(groupPosition);\n flatChildPos = this.mConnector.getFlattenedPos(elChildPos);\n if (flatChildPos == null) {\n throw Error(`new IllegalStateException(\"Could not find child\")`);\n }\n }\n let absoluteFlatPosition = this.getAbsoluteFlatPosition(flatChildPos.position.flatListPos);\n super.setSelection(absoluteFlatPosition);\n elChildPos.recycle();\n flatChildPos.recycle();\n return true;\n }\n isGroupExpanded(groupPosition) {\n return this.mConnector.isGroupExpanded(groupPosition);\n }\n static getPackedPositionType(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL) {\n return ExpandableListView.PACKED_POSITION_TYPE_NULL;\n }\n return (Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE)).equals(ExpandableListView.PACKED_POSITION_MASK_TYPE)\n ? ExpandableListView.PACKED_POSITION_TYPE_CHILD : ExpandableListView.PACKED_POSITION_TYPE_GROUP;\n }\n static getPackedPositionGroup(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n return (Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_GROUP))\n .shiftRight(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();\n }\n static getPackedPositionChild(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n if ((Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE)).notEquals(ExpandableListView.PACKED_POSITION_MASK_TYPE))\n return -1;\n return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_CHILD).toNumber();\n }\n static getPackedPositionForChild(groupPosition, childPosition) {\n return Long.fromInt(ExpandableListView.PACKED_POSITION_TYPE_CHILD).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_TYPE)\n .or(Long.fromNumber(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP))\n .or(Long.fromNumber(childPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_CHILD)).toNumber();\n }\n static getPackedPositionForGroup(groupPosition) {\n return Long.fromInt(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP)\n .shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();\n }\n getChildOrGroupId(position) {\n if (position.type == ExpandableListPosition.CHILD) {\n return this.mExpandAdapter.getChildId(position.groupPos, position.childPos);\n }\n else {\n return this.mExpandAdapter.getGroupId(position.groupPos);\n }\n }\n setChildIndicator(childIndicator) {\n this.mChildIndicator = childIndicator;\n }\n setChildIndicatorBounds(left, right) {\n this.mChildIndicatorLeft = left;\n this.mChildIndicatorRight = right;\n this.resolveChildIndicator();\n }\n setChildIndicatorBoundsRelative(start, end) {\n this.mChildIndicatorStart = start;\n this.mChildIndicatorEnd = end;\n this.resolveChildIndicator();\n }\n setGroupIndicator(groupIndicator) {\n this.mGroupIndicator = groupIndicator;\n if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) {\n this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n }\n setIndicatorBounds(left, right) {\n this.mIndicatorLeft = left;\n this.mIndicatorRight = right;\n this.resolveIndicator();\n }\n setIndicatorBoundsRelative(start, end) {\n this.mIndicatorStart = start;\n this.mIndicatorEnd = end;\n this.resolveIndicator();\n }\n }\n ExpandableListView.PACKED_POSITION_TYPE_GROUP = 0;\n ExpandableListView.PACKED_POSITION_TYPE_CHILD = 1;\n ExpandableListView.PACKED_POSITION_TYPE_NULL = 2;\n ExpandableListView.PACKED_POSITION_VALUE_NULL = 0x00000000FFFFFFFF;\n ExpandableListView.PACKED_POSITION_MASK_CHILD = Long.fromNumber(0x00000000FFFFFFFF);\n ExpandableListView.PACKED_POSITION_MASK_GROUP = Long.fromNumber(0x7FFFFFFF00000000);\n ExpandableListView.PACKED_POSITION_MASK_TYPE = Long.fromNumber(0x8000000000000000);\n ExpandableListView.PACKED_POSITION_SHIFT_GROUP = 32;\n ExpandableListView.PACKED_POSITION_SHIFT_TYPE = 63;\n ExpandableListView.PACKED_POSITION_INT_MASK_CHILD = Long.fromNumber(0xFFFFFFFF);\n ExpandableListView.PACKED_POSITION_INT_MASK_GROUP = Long.fromNumber(0x7FFFFFFF);\n ExpandableListView.CHILD_INDICATOR_INHERIT = -1;\n ExpandableListView.INDICATOR_UNDEFINED = -2;\n ExpandableListView.GROUP_EXPANDED_STATE_SET = [View.VIEW_STATE_EXPANDED];\n ExpandableListView.GROUP_EMPTY_STATE_SET = [View.VIEW_STATE_EMPTY];\n ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET = [View.VIEW_STATE_EXPANDED, View.VIEW_STATE_EMPTY];\n ExpandableListView.GROUP_STATE_SETS = [\n ExpandableListView.EMPTY_STATE_SET,\n ExpandableListView.GROUP_EXPANDED_STATE_SET,\n ExpandableListView.GROUP_EMPTY_STATE_SET,\n ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET];\n ExpandableListView.CHILD_LAST_STATE_SET = [View.VIEW_STATE_LAST];\n widget.ExpandableListView = ExpandableListView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObservable = android.database.DataSetObservable;\n var Long = goog.math.Long;\n const _0x8000000000000000 = Long.fromNumber(0x8000000000000000);\n const _0x7FFFFFFF = Long.fromNumber(0x7FFFFFFF);\n const _0xFFFFFFFF = Long.fromNumber(0xFFFFFFFF);\n class BaseExpandableListAdapter {\n constructor() {\n this.mDataSetObservable = new DataSetObservable();\n }\n registerDataSetObserver(observer) {\n this.mDataSetObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mDataSetObservable.unregisterObserver(observer);\n }\n notifyDataSetInvalidated() {\n this.mDataSetObservable.notifyInvalidated();\n }\n notifyDataSetChanged() {\n this.mDataSetObservable.notifyChanged();\n }\n areAllItemsEnabled() {\n return true;\n }\n onGroupCollapsed(groupPosition) {\n }\n onGroupExpanded(groupPosition) {\n }\n getCombinedChildId(groupId, childId) {\n const _groupId = Long.fromNumber(groupId);\n const _childId = Long.fromNumber(childId);\n return _0x8000000000000000.or(_groupId.and(_0x7FFFFFFF).shiftLeft(32)).or(_childId.and(_0xFFFFFFFF)).toNumber();\n }\n getCombinedGroupId(groupId) {\n const _groupId = Long.fromNumber(groupId);\n return _groupId.add(_0x7FFFFFFF).shiftLeft(32).toNumber();\n }\n isEmpty() {\n return this.getGroupCount() == 0;\n }\n getChildType(groupPosition, childPosition) {\n return 0;\n }\n getChildTypeCount() {\n return 1;\n }\n getGroupType(groupPosition) {\n return 0;\n }\n getGroupTypeCount() {\n return 1;\n }\n }\n widget.BaseExpandableListAdapter = BaseExpandableListAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Handler = android.os.Handler;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var WindowManager = android.view.WindowManager;\n var Window = android.view.Window;\n class Toast {\n constructor(context) {\n this.mDuration = 0;\n this.mHandler = new Handler();\n this.mDelayHide = (() => {\n const _this = this;\n return {\n run() {\n _this.mTN.hide();\n }\n };\n })();\n this.mContext = context;\n this.mTN = new Toast.TN();\n this.mTN.mY = context.getResources().getDisplayMetrics().density * 64;\n this.mTN.mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;\n }\n show() {\n if (this.mNextView == null) {\n throw Error(`new RuntimeException(\"setView must have been called\")`);\n }\n let tn = this.mTN;\n tn.mNextView = this.mNextView;\n tn.show();\n this.mHandler.removeCallbacks(this.mDelayHide);\n let showDuration = this.mDuration === Toast.LENGTH_LONG ? 3500 : (this.mDuration === Toast.LENGTH_SHORT ? 2000 : this.mDuration);\n this.mHandler.postDelayed(this.mDelayHide, showDuration);\n }\n cancel() {\n this.mTN.hide();\n }\n setView(view) {\n this.mNextView = view;\n }\n getView() {\n return this.mNextView;\n }\n setDuration(duration) {\n this.mDuration = duration;\n }\n getDuration() {\n return this.mDuration;\n }\n setGravity(gravity, xOffset, yOffset) {\n this.mTN.mGravity = gravity;\n this.mTN.mX = xOffset;\n this.mTN.mY = yOffset;\n }\n getGravity() {\n return this.mTN.mGravity;\n }\n getXOffset() {\n return this.mTN.mX;\n }\n getYOffset() {\n return this.mTN.mY;\n }\n static makeText(context, text, duration) {\n let result = new Toast(context);\n let inflate = context.getLayoutInflater();\n let v = inflate.inflate(android.R.layout.transient_notification, null);\n let tv = v.findViewById(android.R.id.message);\n tv.setMaxWidth(260 * context.getResources().getDisplayMetrics().density);\n tv.setText(text);\n result.mNextView = v;\n result.mDuration = duration;\n return result;\n }\n setText(s) {\n if (this.mNextView == null) {\n throw Error(`new RuntimeException(\"This Toast was not created with Toast.makeText()\")`);\n }\n let tv = this.mNextView.findViewById(android.R.id.message);\n if (tv == null) {\n throw Error(`new RuntimeException(\"This Toast was not created with Toast.makeText()\")`);\n }\n tv.setText(s);\n }\n }\n Toast.TAG = \"Toast\";\n Toast.localLOGV = false;\n Toast.LENGTH_SHORT = 0;\n Toast.LENGTH_LONG = 1;\n widget.Toast = Toast;\n (function (Toast) {\n class TN {\n constructor() {\n this.mShow = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.handleShow();\n }\n }\n return new _Inner();\n })();\n this.mHide = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.handleHide();\n _this.mNextView = null;\n }\n }\n return new _Inner();\n })();\n this.mHandler = new Handler();\n this.mGravity = 0;\n this.mX = 0;\n this.mY = 0;\n }\n show() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"SHOW: \" + this);\n this.mHandler.post(this.mShow);\n }\n hide() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HIDE: \" + this);\n this.mHandler.post(this.mHide);\n }\n handleShow() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HANDLE SHOW: \" + this + \" mView=\" + this.mView + \" mNextView=\" + this.mNextView);\n if (this.mView != this.mNextView) {\n this.handleHide();\n this.mView = this.mNextView;\n if (!this.mWindow) {\n this.mWindow = new Window(this.mView.getContext().getApplicationContext());\n const params = this.mWindow.getAttributes();\n params.height = WindowManager.LayoutParams.WRAP_CONTENT;\n params.width = WindowManager.LayoutParams.WRAP_CONTENT;\n params.dimAmount = 0;\n params.type = WindowManager.LayoutParams.TYPE_TOAST;\n params.setTitle(\"Toast\");\n params.leftMargin = params.rightMargin = 36 * this.mView.getContext().getResources().getDisplayMetrics().density;\n params.flags =\n WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;\n this.mWindow.setFloating(true);\n this.mWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mWindow.setWindowAnimations(android.R.anim.toast_enter, android.R.anim.toast_exit, null, null);\n }\n const params = this.mWindow.getAttributes();\n this.mWindow.setContentView(this.mView);\n let context = this.mView.getContext().getApplicationContext();\n this.mWM = context.getWindowManager();\n const gravity = Gravity.getAbsoluteGravity(this.mGravity);\n params.gravity = gravity;\n params.x = this.mX;\n params.y = this.mY;\n if (this.mWindow.getDecorView().getParent() != null) {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"REMOVE! \" + this.mView + \" in \" + this);\n this.mWM.removeWindow(this.mWindow);\n }\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"ADD! \" + this.mView + \" in \" + this);\n this.mWM.addWindow(this.mWindow);\n }\n }\n handleHide() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HANDLE HIDE: \" + this + \" mView=\" + this.mView);\n if (this.mView != null) {\n if (this.mView.getParent() != null) {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"REMOVE! \" + this.mView + \" in \" + this);\n this.mWM.removeWindow(this.mWindow);\n }\n this.mView = null;\n }\n }\n }\n Toast.TN = TN;\n })(Toast = widget.Toast || (widget.Toast = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var DialogInterface;\n (function (DialogInterface) {\n DialogInterface.BUTTON_POSITIVE = -1;\n DialogInterface.BUTTON_NEGATIVE = -2;\n DialogInterface.BUTTON_NEUTRAL = -3;\n DialogInterface.BUTTON1 = DialogInterface.BUTTON_POSITIVE;\n DialogInterface.BUTTON2 = DialogInterface.BUTTON_NEGATIVE;\n DialogInterface.BUTTON3 = DialogInterface.BUTTON_NEUTRAL;\n })(DialogInterface = content.DialogInterface || (content.DialogInterface = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Handler = android.os.Handler;\n var Message = android.os.Message;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Window = android.view.Window;\n var WindowManager = android.view.WindowManager;\n var WeakReference = java.lang.ref.WeakReference;\n class Dialog {\n constructor(context, cancelable, cancelListener) {\n this.mCancelable = true;\n this.mCreated = false;\n this.mShowing = false;\n this.mCanceled = false;\n this.mHandler = new Handler();\n this.mDismissAction = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.dismissDialog();\n }\n }\n return new _Inner();\n })();\n this.mContext = context;\n this.mWindowManager = context.getWindowManager();\n let w = new Window(context);\n w.setFloating(true);\n w.setDimAmount(0.7);\n w.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mWindow = w;\n let dm = context.getResources().getDisplayMetrics();\n let decor = w.getDecorView();\n decor.setMinimumWidth(dm.density * 280);\n decor.setMinimumHeight(dm.density * 20);\n const onMeasure = decor.onMeasure;\n decor.onMeasure = (widthMeasureSpec, heightMeasureSpec) => {\n onMeasure.call(decor, widthMeasureSpec, heightMeasureSpec);\n let width = decor.getMeasuredWidth();\n if (width > 360 * dm.density) {\n let widthSpec = View.MeasureSpec.makeMeasureSpec(360 * dm.density, View.MeasureSpec.EXACTLY);\n onMeasure.call(decor, widthSpec, heightMeasureSpec);\n }\n };\n let wp = w.getAttributes();\n wp.flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n wp.height = wp.width = ViewGroup.LayoutParams.WRAP_CONTENT;\n wp.leftMargin = wp.rightMargin = wp.topMargin = wp.bottomMargin = dm.density * 16;\n w.setWindowAnimations(android.R.anim.dialog_enter, android.R.anim.dialog_exit, null, null);\n w.setChildWindowManager(this.mWindowManager);\n w.setGravity(Gravity.CENTER);\n w.setCallback(this);\n this.mListenersHandler = new Dialog.ListenersHandler(this);\n this.mCancelable = cancelable;\n this.setOnCancelListener(cancelListener);\n }\n getContext() {\n return this.mContext;\n }\n isShowing() {\n return this.mShowing;\n }\n show() {\n if (this.mShowing) {\n if (this.mDecor != null) {\n this.mDecor.setVisibility(View.VISIBLE);\n }\n return;\n }\n this.mCanceled = false;\n if (!this.mCreated) {\n this.dispatchOnCreate(null);\n }\n this.onStart();\n this.mDecor = this.mWindow.getDecorView();\n try {\n this.mWindowManager.addWindow(this.mWindow);\n this.mShowing = true;\n this.sendShowMessage();\n }\n finally {\n }\n }\n hide() {\n if (this.mDecor != null) {\n this.mDecor.setVisibility(View.GONE);\n }\n }\n dismiss() {\n this.dismissDialog();\n }\n dismissDialog() {\n if (this.mDecor == null || !this.mShowing) {\n return;\n }\n if (this.mWindow.isDestroyed()) {\n Log.e(Dialog.TAG, \"Tried to dismissDialog() but the Dialog's window was already destroyed!\");\n return;\n }\n try {\n this.mWindowManager.removeWindow(this.mWindow);\n }\n finally {\n this.mDecor = null;\n this.onStop();\n this.mShowing = false;\n this.sendDismissMessage();\n }\n }\n sendDismissMessage() {\n if (this.mDismissMessage != null) {\n Message.obtain(this.mDismissMessage).sendToTarget();\n }\n }\n sendShowMessage() {\n if (this.mShowMessage != null) {\n Message.obtain(this.mShowMessage).sendToTarget();\n }\n }\n dispatchOnCreate(savedInstanceState) {\n if (!this.mCreated) {\n this.onCreate(savedInstanceState);\n this.mCreated = true;\n }\n }\n onCreate(savedInstanceState) {\n }\n onStart() {\n }\n onStop() {\n }\n getWindow() {\n return this.mWindow;\n }\n getCurrentFocus() {\n return this.mWindow != null ? this.mWindow.getCurrentFocus() : null;\n }\n findViewById(id) {\n return this.mWindow.findViewById(id);\n }\n setContentView(view, params) {\n this.mWindow.setContentView(view, params);\n }\n addContentView(view, params) {\n this.mWindow.addContentView(view, params);\n }\n setTitle(title) {\n this.mWindow.setTitle(title);\n this.mWindow.getAttributes().setTitle(title);\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n event.startTracking();\n return true;\n }\n return false;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) {\n this.onBackPressed();\n return true;\n }\n return false;\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return false;\n }\n onBackPressed() {\n if (this.mCancelable) {\n this.cancel();\n }\n }\n onTouchEvent(event) {\n if (this.mCancelable && this.mShowing && this.mWindow.shouldCloseOnTouch(this.mContext, event)) {\n this.cancel();\n return true;\n }\n return false;\n }\n onTrackballEvent(event) {\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onWindowAttributesChanged(params) {\n if (this.mDecor != null) {\n this.mWindowManager.updateWindowLayout(this.mWindow, params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n dispatchKeyEvent(event) {\n if ((this.mOnKeyListener != null) && (this.mOnKeyListener.onKey(this, event.getKeyCode(), event))) {\n return true;\n }\n if (this.mWindow.superDispatchKeyEvent(event)) {\n return true;\n }\n return event.dispatch(this, this.mDecor != null ? this.mDecor.getKeyDispatcherState() : null, this);\n }\n dispatchTouchEvent(ev) {\n if (this.mWindow.superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n if (this.mWindow.superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n takeKeyEvents(get) {\n this.mWindow.takeKeyEvents(get);\n }\n getLayoutInflater() {\n return this.getWindow().getLayoutInflater();\n }\n setCancelable(flag) {\n this.mCancelable = flag;\n }\n setCanceledOnTouchOutside(cancel) {\n if (cancel && !this.mCancelable) {\n this.mCancelable = true;\n }\n this.mWindow.setCloseOnTouchOutside(cancel);\n }\n cancel() {\n if (!this.mCanceled && this.mCancelMessage != null) {\n this.mCanceled = true;\n Message.obtain(this.mCancelMessage).sendToTarget();\n }\n this.dismiss();\n }\n setOnCancelListener(listener) {\n if (this.mCancelAndDismissTaken != null) {\n throw Error(`new IllegalStateException(\"OnCancelListener is already taken by \" + this.mCancelAndDismissTaken + \" and can not be replaced.\")`);\n }\n if (listener != null) {\n this.mCancelMessage = this.mListenersHandler.obtainMessage(Dialog.CANCEL, listener);\n }\n else {\n this.mCancelMessage = null;\n }\n }\n setCancelMessage(msg) {\n this.mCancelMessage = msg;\n }\n setOnDismissListener(listener) {\n if (this.mCancelAndDismissTaken != null) {\n throw Error(`new IllegalStateException(\"OnDismissListener is already taken by \" + this.mCancelAndDismissTaken + \" and can not be replaced.\")`);\n }\n if (listener != null) {\n this.mDismissMessage = this.mListenersHandler.obtainMessage(Dialog.DISMISS, listener);\n }\n else {\n this.mDismissMessage = null;\n }\n }\n setOnShowListener(listener) {\n if (listener != null) {\n this.mShowMessage = this.mListenersHandler.obtainMessage(Dialog.SHOW, listener);\n }\n else {\n this.mShowMessage = null;\n }\n }\n setDismissMessage(msg) {\n this.mDismissMessage = msg;\n }\n takeCancelAndDismissListeners(msg, cancel, dismiss) {\n if (this.mCancelAndDismissTaken != null) {\n this.mCancelAndDismissTaken = null;\n }\n else if (this.mCancelMessage != null || this.mDismissMessage != null) {\n return false;\n }\n this.setOnCancelListener(cancel);\n this.setOnDismissListener(dismiss);\n this.mCancelAndDismissTaken = msg;\n return true;\n }\n setOnKeyListener(onKeyListener) {\n this.mOnKeyListener = onKeyListener;\n }\n }\n Dialog.TAG = \"Dialog\";\n Dialog.DISMISS = 0x43;\n Dialog.CANCEL = 0x44;\n Dialog.SHOW = 0x45;\n Dialog.DIALOG_SHOWING_TAG = \"android:dialogShowing\";\n Dialog.DIALOG_HIERARCHY_TAG = \"android:dialogHierarchy\";\n app.Dialog = Dialog;\n (function (Dialog) {\n class ListenersHandler extends Handler {\n constructor(dialog) {\n super();\n this.mDialog = new WeakReference(dialog);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case Dialog.DISMISS:\n msg.obj.onDismiss(this.mDialog.get());\n break;\n case Dialog.CANCEL:\n msg.obj.onCancel(this.mDialog.get());\n break;\n case Dialog.SHOW:\n msg.obj.onShow(this.mDialog.get());\n break;\n }\n }\n }\n Dialog.ListenersHandler = ListenersHandler;\n })(Dialog = app.Dialog || (app.Dialog = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Log = android.util.Log;\n var Arrays = java.util.Arrays;\n var Collections = java.util.Collections;\n var BaseAdapter = android.widget.BaseAdapter;\n class ArrayAdapter extends BaseAdapter {\n constructor(context, resource, textViewResourceId, objects) {\n super();\n this.mNotifyOnChange = true;\n this.init(context, resource, textViewResourceId, objects);\n }\n add(object) {\n {\n this.mObjects.add(object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n addAll(collection) {\n {\n this.mObjects.addAll(collection);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n insert(object, index) {\n {\n this.mObjects.add(index, object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n remove(object) {\n {\n this.mObjects.remove(object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n clear() {\n {\n this.mObjects.clear();\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n sort(comparator) {\n {\n Collections.sort(this.mObjects, comparator);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n notifyDataSetChanged() {\n super.notifyDataSetChanged();\n this.mNotifyOnChange = true;\n }\n setNotifyOnChange(notifyOnChange) {\n this.mNotifyOnChange = notifyOnChange;\n }\n init(context, resource, textViewResourceId, objects) {\n this.mContext = context;\n this.mInflater = context.getLayoutInflater();\n this.mResource = this.mDropDownResource = resource;\n if (objects instanceof Array)\n objects = Arrays.asList(objects);\n this.mObjects = objects;\n this.mFieldId = textViewResourceId;\n }\n getContext() {\n return this.mContext;\n }\n getCount() {\n return this.mObjects.size();\n }\n getItem(position) {\n return this.mObjects.get(position);\n }\n getPosition(item) {\n return this.mObjects.indexOf(item);\n }\n getItemId(position) {\n return position;\n }\n getView(position, convertView, parent) {\n return this.createViewFromResource(position, convertView, parent, this.mResource);\n }\n createViewFromResource(position, convertView, parent, resource) {\n let view;\n let text;\n if (convertView == null) {\n view = this.mInflater.inflate(this.mContext.getResources().getLayout(resource), parent, false);\n }\n else {\n view = convertView;\n }\n try {\n if (this.mFieldId == null) {\n text = view;\n }\n else {\n text = view.findViewById(this.mFieldId);\n }\n }\n catch (e) {\n Log.e(\"ArrayAdapter\", \"You must supply a resource ID for a TextView\");\n throw Error(`new IllegalStateException(\"ArrayAdapter requires the resource ID to be a TextView\", e)`);\n }\n let item = this.getItem(position);\n if (typeof item === 'string') {\n text.setText(item);\n }\n else {\n text.setText(item.toString());\n }\n return view;\n }\n setDropDownViewResource(resource) {\n this.mDropDownResource = resource;\n }\n getDropDownView(position, convertView, parent) {\n return this.createViewFromResource(position, convertView, parent, this.mDropDownResource);\n }\n }\n widget.ArrayAdapter = ArrayAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n const MATCH_PARENT = android.view.ViewGroup.LayoutParams.MATCH_PARENT;\n var R = android.R;\n var DialogInterface = android.content.DialogInterface;\n var Handler = android.os.Handler;\n var Message = android.os.Message;\n var TextUtils = android.text.TextUtils;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n var ArrayAdapter = android.widget.ArrayAdapter;\n var LinearLayout = android.widget.LinearLayout;\n var ListView = android.widget.ListView;\n var WeakReference = java.lang.ref.WeakReference;\n class AlertController {\n constructor(context, di, window) {\n this.mViewSpacingLeft = 0;\n this.mViewSpacingTop = 0;\n this.mViewSpacingRight = 0;\n this.mViewSpacingBottom = 0;\n this.mViewSpacingSpecified = false;\n this.mCheckedItem = -1;\n this.mButtonHandler = (() => {\n const _this = this;\n class _Inner {\n onClick(v) {\n let m = null;\n if (v == _this.mButtonPositive && _this.mButtonPositiveMessage != null) {\n m = Message.obtain(_this.mButtonPositiveMessage);\n }\n else if (v == _this.mButtonNegative && _this.mButtonNegativeMessage != null) {\n m = Message.obtain(_this.mButtonNegativeMessage);\n }\n else if (v == _this.mButtonNeutral && _this.mButtonNeutralMessage != null) {\n m = Message.obtain(_this.mButtonNeutralMessage);\n }\n if (m != null) {\n m.sendToTarget();\n }\n _this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG, _this.mDialogInterface).sendToTarget();\n }\n }\n return new _Inner();\n })();\n this.mContext = context;\n this.mDialogInterface = di;\n this.mWindow = window;\n this.mHandler = new AlertController.ButtonHandler(di);\n this.mAlertDialogLayout = R.layout.alert_dialog;\n this.mListLayout = R.layout.select_dialog;\n this.mMultiChoiceItemLayout = R.layout.select_dialog_multichoice;\n this.mSingleChoiceItemLayout = R.layout.select_dialog_singlechoice;\n this.mListItemLayout = R.layout.select_dialog_item;\n }\n static shouldCenterSingleButton(context) {\n return true;\n }\n installContent() {\n let layout = this.mContext.getLayoutInflater().inflate(this.mAlertDialogLayout, this.mWindow.getContentParent(), false);\n this.mWindow.setContentView(layout);\n this.setupView();\n }\n setTitle(title) {\n this.mTitle = title;\n if (this.mTitleView != null) {\n this.mTitleView.setText(title);\n }\n }\n setCustomTitle(customTitleView) {\n this.mCustomTitleView = customTitleView;\n }\n setMessage(message) {\n this.mMessage = message;\n if (this.mMessageView != null) {\n this.mMessageView.setText(message);\n }\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.mView = view;\n if (!viewSpacingLeft && !viewSpacingTop && !viewSpacingRight && !viewSpacingBottom) {\n this.mViewSpacingSpecified = false;\n }\n else {\n this.mViewSpacingSpecified = true;\n this.mViewSpacingLeft = viewSpacingLeft;\n this.mViewSpacingTop = viewSpacingTop;\n this.mViewSpacingRight = viewSpacingRight;\n this.mViewSpacingBottom = viewSpacingBottom;\n }\n }\n setButton(whichButton, text, listener, msg) {\n if (msg == null && listener != null) {\n msg = this.mHandler.obtainMessage(whichButton, listener);\n }\n switch (whichButton) {\n case DialogInterface.BUTTON_POSITIVE:\n this.mButtonPositiveText = text;\n this.mButtonPositiveMessage = msg;\n break;\n case DialogInterface.BUTTON_NEGATIVE:\n this.mButtonNegativeText = text;\n this.mButtonNegativeMessage = msg;\n break;\n case DialogInterface.BUTTON_NEUTRAL:\n this.mButtonNeutralText = text;\n this.mButtonNeutralMessage = msg;\n break;\n default:\n throw Error(`new IllegalArgumentException(\"Button does not exist\")`);\n }\n }\n setIcon(icon) {\n this.mIcon = icon;\n if ((this.mIconView != null) && (this.mIcon != null)) {\n this.mIconView.setImageDrawable(icon);\n }\n }\n setInverseBackgroundForced(forceInverseBackground) {\n this.mForceInverseBackground = forceInverseBackground;\n }\n getListView() {\n return this.mListView;\n }\n getButton(whichButton) {\n switch (whichButton) {\n case DialogInterface.BUTTON_POSITIVE:\n return this.mButtonPositive;\n case DialogInterface.BUTTON_NEGATIVE:\n return this.mButtonNegative;\n case DialogInterface.BUTTON_NEUTRAL:\n return this.mButtonNeutral;\n default:\n return null;\n }\n }\n onKeyDown(keyCode, event) {\n return this.mScrollView != null && this.mScrollView.executeKeyEvent(event);\n }\n onKeyUp(keyCode, event) {\n return this.mScrollView != null && this.mScrollView.executeKeyEvent(event);\n }\n setupView() {\n let contentPanel = this.mWindow.findViewById(R.id.contentPanel);\n this.setupContent(contentPanel);\n let hasButtons = this.setupButtons();\n let topPanel = this.mWindow.findViewById(R.id.topPanel);\n let hasTitle = this.setupTitle(topPanel);\n let buttonPanel = this.mWindow.findViewById(R.id.buttonPanel);\n if (!hasButtons) {\n buttonPanel.setVisibility(View.GONE);\n this.mWindow.setCloseOnTouchOutsideIfNotSet(true);\n }\n let customPanel = null;\n if (this.mView != null) {\n customPanel = this.mWindow.findViewById(R.id.customPanel);\n let custom = this.mWindow.findViewById(R.id.custom);\n custom.addView(this.mView, new LayoutParams(MATCH_PARENT, MATCH_PARENT));\n if (this.mViewSpacingSpecified) {\n custom.setPadding(this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom);\n }\n if (this.mListView != null) {\n customPanel.getLayoutParams().weight = 0;\n }\n }\n else {\n this.mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);\n }\n if (hasTitle) {\n let divider = null;\n if (this.mMessage != null || this.mView != null || this.mListView != null) {\n divider = this.mWindow.findViewById(R.id.titleDivider);\n }\n else {\n divider = this.mWindow.findViewById(R.id.titleDividerTop);\n }\n if (divider != null) {\n divider.setVisibility(View.VISIBLE);\n }\n }\n this.setBackground(topPanel, contentPanel, customPanel, hasButtons, hasTitle, buttonPanel);\n }\n setupTitle(topPanel) {\n let hasTitle = true;\n if (this.mCustomTitleView != null) {\n let lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n topPanel.addView(this.mCustomTitleView, 0, lp);\n let titleTemplate = this.mWindow.findViewById(R.id.title_template);\n titleTemplate.setVisibility(View.GONE);\n }\n else {\n const hasTextTitle = !TextUtils.isEmpty(this.mTitle);\n this.mIconView = this.mWindow.findViewById(R.id.icon);\n if (hasTextTitle) {\n this.mTitleView = this.mWindow.findViewById(R.id.alertTitle);\n this.mTitleView.setText(this.mTitle);\n if (this.mIcon != null) {\n this.mIconView.setImageDrawable(this.mIcon);\n }\n else {\n this.mTitleView.setPadding(this.mIconView.getPaddingLeft(), this.mIconView.getPaddingTop(), this.mIconView.getPaddingRight(), this.mIconView.getPaddingBottom());\n this.mIconView.setVisibility(View.GONE);\n }\n }\n else {\n let titleTemplate = this.mWindow.findViewById(R.id.title_template);\n titleTemplate.setVisibility(View.GONE);\n this.mIconView.setVisibility(View.GONE);\n topPanel.setVisibility(View.GONE);\n hasTitle = false;\n }\n }\n return hasTitle;\n }\n setupContent(contentPanel) {\n this.mScrollView = this.mWindow.findViewById(R.id.scrollView);\n this.mScrollView.setFocusable(false);\n this.mMessageView = this.mWindow.findViewById(R.id.message);\n if (this.mMessageView == null) {\n return;\n }\n if (this.mMessage != null) {\n this.mMessageView.setText(this.mMessage);\n }\n else {\n this.mMessageView.setVisibility(View.GONE);\n this.mScrollView.removeView(this.mMessageView);\n if (this.mListView != null) {\n contentPanel.removeView(this.mWindow.findViewById(R.id.scrollView));\n contentPanel.addView(this.mListView, new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));\n contentPanel.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, 0, 1.0));\n }\n else {\n contentPanel.setVisibility(View.GONE);\n }\n }\n }\n setupButtons() {\n let BIT_BUTTON_POSITIVE = 1;\n let BIT_BUTTON_NEGATIVE = 2;\n let BIT_BUTTON_NEUTRAL = 4;\n let whichButtons = 0;\n this.mButtonPositive = this.mWindow.findViewById(R.id.button1);\n this.mButtonPositive.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonPositiveText)) {\n this.mButtonPositive.setVisibility(View.GONE);\n }\n else {\n this.mButtonPositive.setText(this.mButtonPositiveText);\n this.mButtonPositive.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_POSITIVE;\n }\n this.mButtonNegative = this.mWindow.findViewById(R.id.button2);\n this.mButtonNegative.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonNegativeText)) {\n this.mButtonNegative.setVisibility(View.GONE);\n }\n else {\n this.mButtonNegative.setText(this.mButtonNegativeText);\n this.mButtonNegative.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_NEGATIVE;\n }\n this.mButtonNeutral = this.mWindow.findViewById(R.id.button3);\n this.mButtonNeutral.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonNeutralText)) {\n this.mButtonNeutral.setVisibility(View.GONE);\n }\n else {\n this.mButtonNeutral.setText(this.mButtonNeutralText);\n this.mButtonNeutral.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_NEUTRAL;\n }\n if (AlertController.shouldCenterSingleButton(this.mContext)) {\n if (whichButtons == BIT_BUTTON_POSITIVE) {\n this.centerButton(this.mButtonPositive);\n }\n else if (whichButtons == BIT_BUTTON_NEGATIVE) {\n this.centerButton(this.mButtonNegative);\n }\n else if (whichButtons == BIT_BUTTON_NEUTRAL) {\n this.centerButton(this.mButtonNeutral);\n }\n }\n return whichButtons != 0;\n }\n centerButton(button) {\n let params = button.getLayoutParams();\n params.gravity = Gravity.CENTER_HORIZONTAL;\n params.weight = 0.5;\n button.setLayoutParams(params);\n let leftSpacer = this.mWindow.findViewById(R.id.leftSpacer);\n if (leftSpacer != null) {\n leftSpacer.setVisibility(View.VISIBLE);\n }\n let rightSpacer = this.mWindow.findViewById(R.id.rightSpacer);\n if (rightSpacer != null) {\n rightSpacer.setVisibility(View.VISIBLE);\n }\n }\n setBackground(topPanel, contentPanel, customPanel, hasButtons, hasTitle, buttonPanel) {\n let fullDark = R.image.popup_full_bright;\n let topDark = R.image.popup_top_bright;\n let centerDark = R.image.popup_center_bright;\n let bottomDark = R.image.popup_bottom_bright;\n let fullBright = R.image.popup_full_bright;\n let topBright = R.image.popup_top_bright;\n let centerBright = R.image.popup_center_bright;\n let bottomBright = R.image.popup_bottom_bright;\n let bottomMedium = R.image.popup_bottom_bright;\n let views = new Array(4);\n let light = new Array(4);\n let lastView = null;\n let lastLight = false;\n let pos = 0;\n if (hasTitle) {\n views[pos] = topPanel;\n light[pos] = false;\n pos++;\n }\n views[pos] = (contentPanel.getVisibility() == View.GONE) ? null : contentPanel;\n light[pos] = this.mListView != null;\n pos++;\n if (customPanel != null) {\n views[pos] = customPanel;\n light[pos] = this.mForceInverseBackground;\n pos++;\n }\n if (hasButtons) {\n views[pos] = buttonPanel;\n light[pos] = true;\n }\n let setView = false;\n for (pos = 0; pos < views.length; pos++) {\n let v = views[pos];\n if (v == null) {\n continue;\n }\n if (lastView != null) {\n if (!setView) {\n lastView.setBackground(lastLight ? topBright : topDark);\n }\n else {\n lastView.setBackground(lastLight ? centerBright : centerDark);\n }\n setView = true;\n }\n lastView = v;\n lastLight = light[pos];\n }\n if (lastView != null) {\n if (setView) {\n lastView.setBackground(lastLight ? (hasButtons ? bottomMedium : bottomBright) : bottomDark);\n }\n else {\n lastView.setBackground(lastLight ? fullBright : fullDark);\n }\n }\n if ((this.mListView != null) && (this.mAdapter != null)) {\n this.mListView.setAdapter(this.mAdapter);\n if (this.mCheckedItem > -1) {\n this.mListView.setItemChecked(this.mCheckedItem, true);\n this.mListView.setSelection(this.mCheckedItem);\n }\n }\n }\n }\n app.AlertController = AlertController;\n (function (AlertController) {\n class ButtonHandler extends Handler {\n constructor(dialog) {\n super();\n this.mDialog = new WeakReference(dialog);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case DialogInterface.BUTTON_POSITIVE:\n case DialogInterface.BUTTON_NEGATIVE:\n case DialogInterface.BUTTON_NEUTRAL:\n msg.obj.onClick(this.mDialog.get(), msg.what);\n break;\n case ButtonHandler.MSG_DISMISS_DIALOG:\n msg.obj.dismiss();\n }\n }\n }\n ButtonHandler.MSG_DISMISS_DIALOG = 1;\n AlertController.ButtonHandler = ButtonHandler;\n class RecycleListView extends ListView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mRecycleOnMeasure = true;\n }\n recycleOnMeasure() {\n return this.mRecycleOnMeasure;\n }\n }\n AlertController.RecycleListView = RecycleListView;\n class AlertParams {\n constructor(context) {\n this.mIconId = 0;\n this.mViewSpacingLeft = 0;\n this.mViewSpacingTop = 0;\n this.mViewSpacingRight = 0;\n this.mViewSpacingBottom = 0;\n this.mViewSpacingSpecified = false;\n this.mCheckedItem = -1;\n this.mRecycleOnMeasure = true;\n this.mContext = context;\n this.mCancelable = true;\n this.mInflater = context.getLayoutInflater();\n }\n apply(dialog) {\n if (this.mCustomTitleView != null) {\n dialog.setCustomTitle(this.mCustomTitleView);\n }\n else {\n if (this.mTitle != null) {\n dialog.setTitle(this.mTitle);\n }\n if (this.mIcon != null) {\n dialog.setIcon(this.mIcon);\n }\n }\n if (this.mMessage != null) {\n dialog.setMessage(this.mMessage);\n }\n if (this.mPositiveButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_POSITIVE, this.mPositiveButtonText, this.mPositiveButtonListener, null);\n }\n if (this.mNegativeButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_NEGATIVE, this.mNegativeButtonText, this.mNegativeButtonListener, null);\n }\n if (this.mNeutralButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_NEUTRAL, this.mNeutralButtonText, this.mNeutralButtonListener, null);\n }\n if (this.mForceInverseBackground) {\n dialog.setInverseBackgroundForced(true);\n }\n if ((this.mItems != null) || (this.mAdapter != null)) {\n this.createListView(dialog);\n }\n if (this.mView != null) {\n if (this.mViewSpacingSpecified) {\n dialog.setView(this.mView, this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom);\n }\n else {\n dialog.setView(this.mView);\n }\n }\n }\n createListView(dialog) {\n const listView = this.mInflater.inflate(dialog.mListLayout, null);\n let adapter;\n if (this.mIsMultiChoice) {\n adapter = (() => {\n const _this = this;\n class _Inner extends ArrayAdapter {\n getView(position, convertView, parent) {\n let view = super.getView(position, convertView, parent);\n if (_this.mCheckedItems != null) {\n let isItemChecked = _this.mCheckedItems[position];\n if (isItemChecked) {\n listView.setItemChecked(position, true);\n }\n }\n return view;\n }\n }\n return new _Inner(this.mContext, dialog.mMultiChoiceItemLayout, R.id.text1, this.mItems);\n })();\n }\n else {\n let layout = this.mIsSingleChoice ? dialog.mSingleChoiceItemLayout : dialog.mListItemLayout;\n adapter = (this.mAdapter != null) ? this.mAdapter : new ArrayAdapter(this.mContext, layout, R.id.text1, this.mItems);\n }\n if (this.mOnPrepareListViewListener != null) {\n this.mOnPrepareListViewListener.onPrepareListView(listView);\n }\n dialog.mAdapter = adapter;\n dialog.mCheckedItem = this.mCheckedItem;\n const _this = this;\n if (this.mOnClickListener != null) {\n listView.setOnItemClickListener({\n onItemClick(parent, v, position, id) {\n _this.mOnClickListener.onClick(dialog.mDialogInterface, position);\n if (!_this.mIsSingleChoice) {\n dialog.mDialogInterface.dismiss();\n }\n }\n });\n }\n else if (this.mOnCheckboxClickListener != null) {\n listView.setOnItemClickListener({\n onItemClick(parent, v, position, id) {\n if (_this.mCheckedItems != null) {\n _this.mCheckedItems[position] = listView.isItemChecked(position);\n }\n _this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface, position, listView.isItemChecked(position));\n }\n });\n }\n if (this.mOnItemSelectedListener != null) {\n listView.setOnItemSelectedListener(this.mOnItemSelectedListener);\n }\n if (this.mIsSingleChoice) {\n listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);\n }\n else if (this.mIsMultiChoice) {\n listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\n }\n listView.mRecycleOnMeasure = this.mRecycleOnMeasure;\n dialog.mListView = listView;\n }\n }\n AlertController.AlertParams = AlertParams;\n })(AlertController = app.AlertController || (app.AlertController = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Dialog = android.app.Dialog;\n class AlertDialog extends Dialog {\n constructor(context, cancelable, cancelListener) {\n super(context);\n this.setCancelable(cancelable);\n this.setOnCancelListener(cancelListener);\n this.mAlert = new app.AlertController(context, this, this.getWindow());\n }\n getButton(whichButton) {\n return this.mAlert.getButton(whichButton);\n }\n getListView() {\n return this.mAlert.getListView();\n }\n setTitle(title) {\n super.setTitle(title);\n this.mAlert.setTitle(title);\n }\n setCustomTitle(customTitleView) {\n this.mAlert.setCustomTitle(customTitleView);\n }\n setMessage(message) {\n this.mAlert.setMessage(message);\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.mAlert.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, viewSpacingBottom);\n }\n setButton(whichButton, text, listener) {\n this.mAlert.setButton(whichButton, text, listener, null);\n }\n setIcon(icon) {\n this.mAlert.setIcon(icon);\n }\n onCreate(savedInstanceState) {\n super.onCreate(savedInstanceState);\n this.mAlert.installContent();\n }\n onKeyDown(keyCode, event) {\n if (this.mAlert.onKeyDown(keyCode, event))\n return true;\n return super.onKeyDown(keyCode, event);\n }\n onKeyUp(keyCode, event) {\n if (this.mAlert.onKeyUp(keyCode, event))\n return true;\n return super.onKeyUp(keyCode, event);\n }\n }\n AlertDialog.THEME_TRADITIONAL = 1;\n AlertDialog.THEME_HOLO_DARK = 2;\n AlertDialog.THEME_HOLO_LIGHT = 3;\n AlertDialog.THEME_DEVICE_DEFAULT_DARK = 4;\n AlertDialog.THEME_DEVICE_DEFAULT_LIGHT = 5;\n app.AlertDialog = AlertDialog;\n (function (AlertDialog) {\n class Builder {\n constructor(context) {\n this.P = new app.AlertController.AlertParams(context);\n }\n getContext() {\n return this.P.mContext;\n }\n setTitle(title) {\n this.P.mTitle = title;\n return this;\n }\n setCustomTitle(customTitleView) {\n this.P.mCustomTitleView = customTitleView;\n return this;\n }\n setMessage(message) {\n this.P.mMessage = message;\n return this;\n }\n setIcon(icon) {\n this.P.mIcon = icon;\n return this;\n }\n setPositiveButton(text, listener) {\n this.P.mPositiveButtonText = text;\n this.P.mPositiveButtonListener = listener;\n return this;\n }\n setNegativeButton(text, listener) {\n this.P.mNegativeButtonText = text;\n this.P.mNegativeButtonListener = listener;\n return this;\n }\n setNeutralButton(text, listener) {\n this.P.mNeutralButtonText = text;\n this.P.mNeutralButtonListener = listener;\n return this;\n }\n setCancelable(cancelable) {\n this.P.mCancelable = cancelable;\n return this;\n }\n setOnCancelListener(onCancelListener) {\n this.P.mOnCancelListener = onCancelListener;\n return this;\n }\n setOnDismissListener(onDismissListener) {\n this.P.mOnDismissListener = onDismissListener;\n return this;\n }\n setOnKeyListener(onKeyListener) {\n this.P.mOnKeyListener = onKeyListener;\n return this;\n }\n setItems(items, listener) {\n this.P.mItems = items;\n this.P.mOnClickListener = listener;\n return this;\n }\n setAdapter(adapter, listener) {\n this.P.mAdapter = adapter;\n this.P.mOnClickListener = listener;\n return this;\n }\n setMultiChoiceItems(items, checkedItems, listener) {\n this.P.mItems = items;\n this.P.mOnCheckboxClickListener = listener;\n this.P.mCheckedItems = checkedItems;\n this.P.mIsMultiChoice = true;\n return this;\n }\n setSingleChoiceItems(items, checkedItem, listener) {\n this.P.mItems = items;\n this.P.mOnClickListener = listener;\n this.P.mCheckedItem = checkedItem;\n this.P.mIsSingleChoice = true;\n return this;\n }\n setSingleChoiceItemsWithAdapter(adapter, checkedItem, listener) {\n this.P.mAdapter = adapter;\n this.P.mOnClickListener = listener;\n this.P.mCheckedItem = checkedItem;\n this.P.mIsSingleChoice = true;\n return this;\n }\n setOnItemSelectedListener(listener) {\n this.P.mOnItemSelectedListener = listener;\n return this;\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.P.mView = view;\n if (!viewSpacingLeft && !viewSpacingTop && !viewSpacingRight && !viewSpacingBottom) {\n this.P.mViewSpacingSpecified = false;\n }\n else {\n this.P.mViewSpacingSpecified = true;\n this.P.mViewSpacingLeft = viewSpacingLeft;\n this.P.mViewSpacingTop = viewSpacingTop;\n this.P.mViewSpacingRight = viewSpacingRight;\n this.P.mViewSpacingBottom = viewSpacingBottom;\n }\n return this;\n }\n setInverseBackgroundForced(useInverseBackground) {\n this.P.mForceInverseBackground = useInverseBackground;\n return this;\n }\n setRecycleOnMeasureEnabled(enabled) {\n this.P.mRecycleOnMeasure = enabled;\n return this;\n }\n create() {\n const dialog = new AlertDialog(this.P.mContext);\n this.P.apply(dialog.mAlert);\n dialog.setCancelable(this.P.mCancelable);\n if (this.P.mCancelable) {\n dialog.setCanceledOnTouchOutside(true);\n }\n dialog.setOnCancelListener(this.P.mOnCancelListener);\n dialog.setOnDismissListener(this.P.mOnDismissListener);\n if (this.P.mOnKeyListener != null) {\n dialog.setOnKeyListener(this.P.mOnKeyListener);\n }\n return dialog;\n }\n show() {\n let dialog = this.create();\n dialog.show();\n return dialog;\n }\n }\n AlertDialog.Builder = Builder;\n })(AlertDialog = app.AlertDialog || (app.AlertDialog = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var SparseArray = android.util.SparseArray;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var AdapterView = android.widget.AdapterView;\n var ArrayAdapter = android.widget.ArrayAdapter;\n class AbsSpinner extends AdapterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, null);\n this.mHeightMeasureSpec = 0;\n this.mWidthMeasureSpec = 0;\n this.mSelectionLeftPadding = 0;\n this.mSelectionTopPadding = 0;\n this.mSelectionRightPadding = 0;\n this.mSelectionBottomPadding = 0;\n this.mSpinnerPadding = new Rect();\n this.mRecycler = new AbsSpinner.RecycleBin(this);\n this.initAbsSpinner();\n let a = this._attrBinder;\n a.addAttr('entries', (value) => {\n let entries = a.parseStringArray(value);\n if (entries != null) {\n let adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, null, entries);\n adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n this.setAdapter(adapter);\n }\n });\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n initAbsSpinner() {\n this.setFocusable(true);\n this.setWillNotDraw(false);\n }\n setAdapter(adapter) {\n if (null != this.mAdapter) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n this.resetList();\n }\n this.mAdapter = adapter;\n this.mOldSelectedPosition = AbsSpinner.INVALID_POSITION;\n this.mOldSelectedRowId = AbsSpinner.INVALID_ROW_ID;\n if (this.mAdapter != null) {\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.checkFocus();\n this.mDataSetObserver = new AdapterView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n let position = this.mItemCount > 0 ? 0 : AbsSpinner.INVALID_POSITION;\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n if (this.mItemCount == 0) {\n this.checkSelectionChanged();\n }\n }\n else {\n this.checkFocus();\n this.resetList();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n resetList() {\n this.mDataChanged = false;\n this.mNeedSync = false;\n this.removeAllViewsInLayout();\n this.mOldSelectedPosition = AbsSpinner.INVALID_POSITION;\n this.mOldSelectedRowId = AbsSpinner.INVALID_ROW_ID;\n this.setSelectedPositionInt(AbsSpinner.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsSpinner.INVALID_POSITION);\n this.invalidate();\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = AbsSpinner.MeasureSpec.getMode(widthMeasureSpec);\n let widthSize;\n let heightSize;\n this.mSpinnerPadding.left = this.mPaddingLeft > this.mSelectionLeftPadding ? this.mPaddingLeft : this.mSelectionLeftPadding;\n this.mSpinnerPadding.top = this.mPaddingTop > this.mSelectionTopPadding ? this.mPaddingTop : this.mSelectionTopPadding;\n this.mSpinnerPadding.right = this.mPaddingRight > this.mSelectionRightPadding ? this.mPaddingRight : this.mSelectionRightPadding;\n this.mSpinnerPadding.bottom = this.mPaddingBottom > this.mSelectionBottomPadding ? this.mPaddingBottom : this.mSelectionBottomPadding;\n if (this.mDataChanged) {\n this.handleDataChanged();\n }\n let preferredHeight = 0;\n let preferredWidth = 0;\n let needsMeasuring = true;\n let selectedPosition = this.getSelectedItemPosition();\n if (selectedPosition >= 0 && this.mAdapter != null && selectedPosition < this.mAdapter.getCount()) {\n let view = this.mRecycler.get(selectedPosition);\n if (view == null) {\n view = this.mAdapter.getView(selectedPosition, null, this);\n }\n if (view != null) {\n this.mRecycler.put(selectedPosition, view);\n if (view.getLayoutParams() == null) {\n this.mBlockLayoutRequests = true;\n view.setLayoutParams(this.generateDefaultLayoutParams());\n this.mBlockLayoutRequests = false;\n }\n this.measureChild(view, widthMeasureSpec, heightMeasureSpec);\n preferredHeight = this.getChildHeight(view) + this.mSpinnerPadding.top + this.mSpinnerPadding.bottom;\n preferredWidth = this.getChildWidth(view) + this.mSpinnerPadding.left + this.mSpinnerPadding.right;\n needsMeasuring = false;\n }\n }\n if (needsMeasuring) {\n preferredHeight = this.mSpinnerPadding.top + this.mSpinnerPadding.bottom;\n if (widthMode == AbsSpinner.MeasureSpec.UNSPECIFIED) {\n preferredWidth = this.mSpinnerPadding.left + this.mSpinnerPadding.right;\n }\n }\n preferredHeight = Math.max(preferredHeight, this.getSuggestedMinimumHeight());\n preferredWidth = Math.max(preferredWidth, this.getSuggestedMinimumWidth());\n heightSize = AbsSpinner.resolveSizeAndState(preferredHeight, heightMeasureSpec, 0);\n widthSize = AbsSpinner.resolveSizeAndState(preferredWidth, widthMeasureSpec, 0);\n this.setMeasuredDimension(widthSize, heightSize);\n this.mHeightMeasureSpec = heightMeasureSpec;\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n getChildHeight(child) {\n return child.getMeasuredHeight();\n }\n getChildWidth(child) {\n return child.getMeasuredWidth();\n }\n generateDefaultLayoutParams() {\n return new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n recycleAllViews() {\n const childCount = this.getChildCount();\n const recycleBin = this.mRecycler;\n const position = this.mFirstPosition;\n for (let i = 0; i < childCount; i++) {\n let v = this.getChildAt(i);\n let index = position + i;\n recycleBin.put(index, v);\n }\n }\n setSelection(position, animate) {\n if (arguments.length === 1) {\n this.setNextSelectedPositionInt(position);\n this.requestLayout();\n this.invalidate();\n }\n else {\n let shouldAnimate = animate && this.mFirstPosition <= position && position <= this.mFirstPosition + this.getChildCount() - 1;\n this.setSelectionInt(position, shouldAnimate);\n }\n }\n setSelectionInt(position, animate) {\n if (position != this.mOldSelectedPosition) {\n this.mBlockLayoutRequests = true;\n let delta = position - this.mSelectedPosition;\n this.setNextSelectedPositionInt(position);\n this.layoutSpinner(delta, animate);\n this.mBlockLayoutRequests = false;\n }\n }\n getSelectedView() {\n if (this.mItemCount > 0 && this.mSelectedPosition >= 0) {\n return this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n }\n else {\n return null;\n }\n }\n requestLayout() {\n if (!this.mBlockLayoutRequests) {\n super.requestLayout();\n }\n }\n getAdapter() {\n return this.mAdapter;\n }\n getCount() {\n return this.mItemCount;\n }\n pointToPosition(x, y) {\n let frame = this.mTouchFrame;\n if (frame == null) {\n this.mTouchFrame = new Rect();\n frame = this.mTouchFrame;\n }\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n child.getHitRect(frame);\n if (frame.contains(x, y)) {\n return this.mFirstPosition + i;\n }\n }\n }\n return AbsSpinner.INVALID_POSITION;\n }\n }\n widget.AbsSpinner = AbsSpinner;\n (function (AbsSpinner) {\n class RecycleBin {\n constructor(arg) {\n this.mScrapHeap = new SparseArray();\n this._AbsSpinner_this = arg;\n }\n put(position, v) {\n this.mScrapHeap.put(position, v);\n }\n get(position) {\n let result = this.mScrapHeap.get(position);\n if (result != null) {\n this.mScrapHeap.delete(position);\n }\n else {\n }\n return result;\n }\n clear() {\n const scrapHeap = this.mScrapHeap;\n const count = scrapHeap.size();\n for (let i = 0; i < count; i++) {\n const view = scrapHeap.valueAt(i);\n if (view != null) {\n this._AbsSpinner_this.removeDetachedView(view, true);\n }\n }\n scrapHeap.clear();\n }\n }\n AbsSpinner.RecycleBin = RecycleBin;\n })(AbsSpinner = widget.AbsSpinner || (widget.AbsSpinner = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var R = android.R;\n var Context = android.content.Context;\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var WindowManager = android.view.WindowManager;\n var Window = android.view.Window;\n var WeakReference = java.lang.ref.WeakReference;\n class PopupWindow {\n constructor(...args) {\n this.mInputMethodMode = PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;\n this.mTouchable = true;\n this.mOutsideTouchable = false;\n this.mSplitTouchEnabled = -1;\n this.mAllowScrollingAnchorParent = true;\n this.mDrawingLocation = [0, 0];\n this.mScreenLocation = [0, 0];\n this.mTempRect = new Rect();\n this.mWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;\n this.mDefaultDropdownAboveEnterAnimation = R.anim.grow_fade_in_from_bottom;\n this.mDefaultDropdownBelowEnterAnimation = R.anim.grow_fade_in;\n this.mDefaultDropdownAboveExitAnimation = R.anim.shrink_fade_out_from_bottom;\n this.mDefaultDropdownBelowExitAnimation = R.anim.shrink_fade_out;\n this.mOnScrollChangedListener = (() => {\n const _this = this;\n class _Inner {\n onScrollChanged() {\n let anchor = _this.mAnchor != null ? _this.mAnchor.get() : null;\n if (anchor != null && _this.mPopupView != null) {\n let p = _this.mPopupView.getLayoutParams();\n _this.updateAboveAnchor(_this.findDropDownPosition(anchor, p, _this.mAnchorXoff, _this.mAnchorYoff, _this.mAnchoredGravity));\n _this.update(p.x, p.y, -1, -1, true);\n }\n }\n }\n return new _Inner();\n })();\n if (args[0] instanceof Context) {\n let context = args[0];\n let styleAttr = args.length == 1 ? R.attr.popupWindowStyle : args[1];\n this.mContext = context;\n this.mWindowManager = context.getWindowManager();\n this.mPopupWindow = new Window(context);\n this.mPopupWindow.setCallback(this);\n this.mBackground = styleAttr.popupBackground;\n this.mEnterAnimation = styleAttr.popupEnterAnimation;\n this.mExitAnimation = styleAttr.popupExitAnimation;\n }\n else {\n let [contentView = null, width = 0, height = 0, focusable = false] = args;\n if (contentView != null) {\n this.mContext = contentView.getContext();\n this.mWindowManager = this.mContext.getWindowManager();\n this.mPopupWindow = new Window(this.mContext);\n this.mPopupWindow.setCallback(this);\n }\n this.setContentView(contentView);\n this.setWidth(width);\n this.setHeight(height);\n this.setFocusable(focusable);\n }\n }\n getBackground() {\n return this.mBackground;\n }\n setBackgroundDrawable(background) {\n this.mBackground = background;\n }\n getEnterAnimation() {\n return this.mEnterAnimation;\n }\n getExitAnimation() {\n return this.mExitAnimation;\n }\n setWindowAnimation(enterAnimation, exitAnimation) {\n this.mEnterAnimation = enterAnimation;\n this.mExitAnimation = exitAnimation;\n }\n getContentView() {\n return this.mContentView;\n }\n setContentView(contentView) {\n if (this.isShowing()) {\n return;\n }\n this.mContentView = contentView;\n if (this.mContext == null && this.mContentView != null) {\n this.mContext = this.mContentView.getContext();\n }\n if (this.mWindowManager == null && this.mContentView != null) {\n this.mWindowManager = this.mContext.getWindowManager();\n }\n if (this.mPopupWindow == null && this.mContext != null) {\n this.mPopupWindow = new Window(this.mContext);\n this.mPopupWindow.setCallback(this);\n }\n }\n setTouchInterceptor(l) {\n this.mTouchInterceptor = l;\n }\n isFocusable() {\n return this.mFocusable;\n }\n setFocusable(focusable) {\n this.mFocusable = focusable;\n }\n getInputMethodMode() {\n return this.mInputMethodMode;\n }\n setInputMethodMode(mode) {\n this.mInputMethodMode = mode;\n }\n isTouchable() {\n return this.mTouchable;\n }\n setTouchable(touchable) {\n this.mTouchable = touchable;\n }\n isOutsideTouchable() {\n return this.mOutsideTouchable;\n }\n setOutsideTouchable(touchable) {\n this.mOutsideTouchable = touchable;\n }\n setClipToScreenEnabled(enabled) {\n this.mClipToScreen = enabled;\n }\n setAllowScrollingAnchorParent(enabled) {\n this.mAllowScrollingAnchorParent = enabled;\n }\n isSplitTouchEnabled() {\n if (this.mSplitTouchEnabled < 0 && this.mContext != null) {\n return true;\n }\n return this.mSplitTouchEnabled == 1;\n }\n setSplitTouchEnabled(enabled) {\n this.mSplitTouchEnabled = enabled ? 1 : 0;\n }\n setWindowLayoutType(layoutType) {\n this.mWindowLayoutType = layoutType;\n }\n getWindowLayoutType() {\n return this.mWindowLayoutType;\n }\n setTouchModal(touchModal) {\n this.mNotTouchModal = !touchModal;\n }\n setWindowLayoutMode(widthSpec, heightSpec) {\n this.mWidthMode = widthSpec;\n this.mHeightMode = heightSpec;\n }\n getHeight() {\n return this.mHeight;\n }\n setHeight(height) {\n this.mHeight = height;\n }\n getWidth() {\n return this.mWidth;\n }\n setWidth(width) {\n this.mWidth = width;\n }\n isShowing() {\n return this.mIsShowing;\n }\n showAtLocation(parent, gravity, x, y) {\n if (this.isShowing() || this.mContentView == null) {\n return;\n }\n this.unregisterForScrollChanged();\n this.mIsShowing = true;\n this.mIsDropdown = false;\n let p = this.createPopupLayout();\n p.enterAnimation = this.computeWindowEnterAnimation();\n p.exitAnimation = this.computeWindowExitAnimation();\n this.preparePopup(p);\n if (gravity == Gravity.NO_GRAVITY) {\n gravity = Gravity.TOP | Gravity.START;\n }\n p.gravity = gravity;\n p.x = x;\n p.y = y;\n if (this.mHeightMode < 0)\n p.height = this.mLastHeight = this.mHeightMode;\n if (this.mWidthMode < 0)\n p.width = this.mLastWidth = this.mWidthMode;\n this.invokePopup(p);\n }\n showAsDropDown(anchor, xoff = 0, yoff = 0, gravity = PopupWindow.DEFAULT_ANCHORED_GRAVITY) {\n if (this.isShowing() || this.mContentView == null) {\n return;\n }\n this.registerForScrollChanged(anchor, xoff, yoff, gravity);\n this.mIsShowing = true;\n this.mIsDropdown = true;\n let p = this.createPopupLayout();\n this.preparePopup(p);\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, xoff, yoff, gravity));\n if (this.mHeightMode < 0)\n p.height = this.mLastHeight = this.mHeightMode;\n if (this.mWidthMode < 0)\n p.width = this.mLastWidth = this.mWidthMode;\n p.enterAnimation = this.computeWindowEnterAnimation();\n p.exitAnimation = this.computeWindowExitAnimation();\n this.invokePopup(p);\n }\n updateAboveAnchor(aboveAnchor) {\n if (aboveAnchor != this.mAboveAnchor) {\n this.mAboveAnchor = aboveAnchor;\n if (this.mBackground != null) {\n if (this.mAboveAnchorBackgroundDrawable != null) {\n if (this.mAboveAnchor) {\n this.mPopupView.setBackgroundDrawable(this.mAboveAnchorBackgroundDrawable);\n }\n else {\n this.mPopupView.setBackgroundDrawable(this.mBelowAnchorBackgroundDrawable);\n }\n }\n else {\n this.mPopupView.refreshDrawableState();\n }\n }\n }\n }\n isAboveAnchor() {\n return this.mAboveAnchor;\n }\n preparePopup(p) {\n if (this.mContentView == null || this.mContext == null || this.mWindowManager == null) {\n throw Error(`new IllegalStateException(\"You must specify a valid content view by \" + \"calling setContentView() before attempting to show the popup.\")`);\n }\n this.mPopupWindow.setContentView(this.mContentView);\n this.mPopupWindow.setFloating(true);\n this.mPopupWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mPopupWindow.setDimAmount(0);\n this.mPopupView = this.mPopupWindow.getDecorView();\n if (this.mBackground != null) {\n this.mPopupView.setBackground(this.mBackground);\n }\n this.mPopupViewInitialLayoutDirectionInherited = false;\n this.mPopupWidth = p.width;\n this.mPopupHeight = p.height;\n }\n invokePopup(p) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.addWindow(this.mPopupWindow);\n }\n setLayoutDirectionFromAnchor() {\n if (this.mAnchor != null) {\n let anchor = this.mAnchor.get();\n if (anchor != null && this.mPopupViewInitialLayoutDirectionInherited) {\n this.mPopupView.setLayoutDirection(anchor.getLayoutDirection());\n }\n }\n }\n createPopupLayout() {\n let p = this.mPopupWindow.getAttributes();\n p.gravity = Gravity.START | Gravity.TOP;\n p.width = this.mLastWidth = this.mWidth;\n p.height = this.mLastHeight = this.mHeight;\n p.flags = this.computeFlags(p.flags);\n p.type = this.mWindowLayoutType;\n p.setTitle(\"PopupWindow\");\n return p;\n }\n computeFlags(curFlags) {\n curFlags &= ~(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |\n WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |\n WindowManager.LayoutParams.FLAG_SPLIT_TOUCH);\n if (!this.mFocusable) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;\n }\n if (!this.mTouchable) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;\n }\n if (this.mOutsideTouchable) {\n curFlags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n }\n if (this.isSplitTouchEnabled()) {\n curFlags |= WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;\n }\n if (this.mNotTouchModal) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;\n }\n return curFlags;\n }\n computeWindowEnterAnimation() {\n if (this.mEnterAnimation == null) {\n if (this.mIsDropdown) {\n return this.mAboveAnchor ? this.mDefaultDropdownAboveEnterAnimation : this.mDefaultDropdownBelowEnterAnimation;\n }\n return null;\n }\n return this.mEnterAnimation;\n }\n computeWindowExitAnimation() {\n if (this.mExitAnimation == null) {\n if (this.mIsDropdown) {\n return this.mAboveAnchor ? this.mDefaultDropdownAboveExitAnimation : this.mDefaultDropdownBelowExitAnimation;\n }\n return null;\n }\n return this.mExitAnimation;\n }\n findDropDownPosition(anchor, p, xoff, yoff, gravity) {\n const anchorHeight = anchor.getHeight();\n anchor.getLocationInWindow(this.mDrawingLocation);\n p.x = this.mDrawingLocation[0] + xoff;\n p.y = this.mDrawingLocation[1] + anchorHeight + yoff;\n const hgrav = Gravity.getAbsoluteGravity(gravity, anchor.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;\n if (hgrav == Gravity.RIGHT) {\n p.x -= this.mPopupWidth - anchor.getWidth();\n }\n let onTop = false;\n p.gravity = Gravity.LEFT | Gravity.TOP;\n anchor.getLocationOnScreen(this.mScreenLocation);\n const displayFrame = new Rect();\n anchor.getWindowVisibleDisplayFrame(displayFrame);\n let screenY = this.mScreenLocation[1] + anchorHeight + yoff;\n const root = anchor.getRootView();\n if (screenY + this.mPopupHeight > displayFrame.bottom || p.x + this.mPopupWidth - root.getWidth() > 0) {\n if (this.mAllowScrollingAnchorParent) {\n let scrollX = anchor.getScrollX();\n let scrollY = anchor.getScrollY();\n let r = new Rect(scrollX, scrollY, scrollX + this.mPopupWidth + xoff, scrollY + this.mPopupHeight + anchor.getHeight() + yoff);\n anchor.requestRectangleOnScreen(r, true);\n }\n anchor.getLocationInWindow(this.mDrawingLocation);\n p.x = this.mDrawingLocation[0] + xoff;\n p.y = this.mDrawingLocation[1] + anchor.getHeight() + yoff;\n if (hgrav == Gravity.RIGHT) {\n p.x -= this.mPopupWidth - anchor.getWidth();\n }\n anchor.getLocationOnScreen(this.mScreenLocation);\n onTop = (displayFrame.bottom - this.mScreenLocation[1] - anchor.getHeight() - yoff) < (this.mScreenLocation[1] - yoff - displayFrame.top);\n if (onTop) {\n p.gravity = Gravity.LEFT | Gravity.BOTTOM;\n p.y = root.getHeight() - this.mDrawingLocation[1] + yoff;\n }\n else {\n p.y = this.mDrawingLocation[1] + anchor.getHeight() + yoff;\n }\n }\n if (this.mClipToScreen) {\n const displayFrameWidth = displayFrame.right - displayFrame.left;\n let right = p.x + p.width;\n if (right > displayFrameWidth) {\n p.x -= right - displayFrameWidth;\n }\n if (p.x < displayFrame.left) {\n p.x = displayFrame.left;\n p.width = Math.min(p.width, displayFrameWidth);\n }\n if (onTop) {\n let popupTop = this.mScreenLocation[1] + yoff - this.mPopupHeight;\n if (popupTop < 0) {\n p.y += popupTop;\n }\n }\n else {\n p.y = Math.max(p.y, displayFrame.top);\n }\n }\n p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL;\n return onTop;\n }\n getMaxAvailableHeight(anchor, yOffset = 0, ignoreBottomDecorations = false) {\n const displayFrame = new Rect();\n anchor.getWindowVisibleDisplayFrame(displayFrame);\n const anchorPos = this.mDrawingLocation;\n anchor.getLocationOnScreen(anchorPos);\n let bottomEdge = displayFrame.bottom;\n if (ignoreBottomDecorations) {\n let res = anchor.getContext().getResources();\n bottomEdge = res.getDisplayMetrics().heightPixels;\n }\n const distanceToBottom = bottomEdge - (anchorPos[1] + anchor.getHeight()) - yOffset;\n const distanceToTop = anchorPos[1] - displayFrame.top + yOffset;\n let returnedHeight = Math.max(distanceToBottom, distanceToTop);\n if (this.mBackground != null) {\n this.mBackground.getPadding(this.mTempRect);\n returnedHeight -= this.mTempRect.top + this.mTempRect.bottom;\n }\n return returnedHeight;\n }\n dismiss() {\n if (this.isShowing() && this.mPopupView != null) {\n this.mIsShowing = false;\n this.unregisterForScrollChanged();\n try {\n this.mWindowManager.removeWindow(this.mPopupWindow);\n }\n finally {\n if (this.mPopupView != this.mContentView && this.mPopupView instanceof ViewGroup) {\n this.mPopupView.removeView(this.mContentView);\n }\n this.mPopupView = null;\n if (this.mOnDismissListener != null) {\n this.mOnDismissListener.onDismiss();\n }\n }\n }\n }\n setOnDismissListener(onDismissListener) {\n this.mOnDismissListener = onDismissListener;\n }\n update(...args) {\n if (args.length == 0) {\n this._update();\n }\n else if (args.length == 2) {\n this._update_w_h(args[0], args[1]);\n }\n else if (args.length == 3) {\n this._update_a_w_h(args[0], args[1], args[2]);\n }\n else if (args.length == 4) {\n this._update_x_y_w_h_f(args[0], args[1], args[2], args[3]);\n }\n else if (args.length == 5) {\n if (args[0] instanceof View)\n this._update_a_x_y_w_h(args[0], args[1], args[2], args[3], args[4]);\n else\n this._update_x_y_w_h_f(args[0], args[1], args[2], args[3], args[4]);\n }\n }\n _update() {\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let p = this.mPopupView.getLayoutParams();\n let update = false;\n const enterAnim = this.computeWindowEnterAnimation();\n const exitAnim = this.computeWindowExitAnimation();\n if (enterAnim != p.enterAnimation) {\n p.enterAnimation = enterAnim;\n update = true;\n }\n if (exitAnim != p.exitAnimation) {\n p.exitAnimation = exitAnim;\n update = true;\n }\n const newFlags = this.computeFlags(p.flags);\n if (newFlags != p.flags) {\n p.flags = newFlags;\n update = true;\n }\n if (update) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, p);\n }\n }\n _update_w_h(width, height) {\n let p = this.mPopupView.getLayoutParams();\n this.update(p.x, p.y, width, height, false);\n }\n _update_x_y_w_h_f(x, y, width, height, force = false) {\n if (width != -1) {\n this.mLastWidth = width;\n this.setWidth(width);\n }\n if (height != -1) {\n this.mLastHeight = height;\n this.setHeight(height);\n }\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let p = this.mPopupView.getLayoutParams();\n let update = force;\n const finalWidth = this.mWidthMode < 0 ? this.mWidthMode : this.mLastWidth;\n if (width != -1 && p.width != finalWidth) {\n p.width = this.mLastWidth = finalWidth;\n update = true;\n }\n const finalHeight = this.mHeightMode < 0 ? this.mHeightMode : this.mLastHeight;\n if (height != -1 && p.height != finalHeight) {\n p.height = this.mLastHeight = finalHeight;\n update = true;\n }\n if (p.x != x) {\n p.x = x;\n update = true;\n }\n if (p.y != y) {\n p.y = y;\n update = true;\n }\n const enterAnim = this.computeWindowEnterAnimation();\n const exitAnim = this.computeWindowExitAnimation();\n if (enterAnim != p.enterAnimation) {\n p.enterAnimation = enterAnim;\n update = true;\n }\n if (exitAnim != p.exitAnimation) {\n p.exitAnimation = exitAnim;\n update = true;\n }\n const newFlags = this.computeFlags(p.flags);\n if (newFlags != p.flags) {\n p.flags = newFlags;\n update = true;\n }\n if (update) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, p);\n }\n }\n _update_a_w_h(anchor, width, height) {\n this._update_all_args(anchor, false, 0, 0, true, width, height, this.mAnchoredGravity);\n }\n _update_a_x_y_w_h(anchor, xoff, yoff, width, height) {\n this._update_all_args(anchor, true, xoff, yoff, true, width, height, this.mAnchoredGravity);\n }\n _update_all_args(anchor, updateLocation, xoff, yoff, updateDimension, width, height, gravity) {\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let oldAnchor = this.mAnchor;\n const needsUpdate = updateLocation && (this.mAnchorXoff != xoff || this.mAnchorYoff != yoff);\n if (oldAnchor == null || oldAnchor.get() != anchor || (needsUpdate && !this.mIsDropdown)) {\n this.registerForScrollChanged(anchor, xoff, yoff, gravity);\n }\n else if (needsUpdate) {\n this.mAnchorXoff = xoff;\n this.mAnchorYoff = yoff;\n this.mAnchoredGravity = gravity;\n }\n let p = this.mPopupView.getLayoutParams();\n if (updateDimension) {\n if (width == -1) {\n width = this.mPopupWidth;\n }\n else {\n this.mPopupWidth = width;\n }\n if (height == -1) {\n height = this.mPopupHeight;\n }\n else {\n this.mPopupHeight = height;\n }\n }\n let x = p.x;\n let y = p.y;\n if (updateLocation) {\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, xoff, yoff, gravity));\n }\n else {\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, this.mAnchorXoff, this.mAnchorYoff, this.mAnchoredGravity));\n }\n this.update(p.x, p.y, width, height, x != p.x || y != p.y);\n }\n unregisterForScrollChanged() {\n let anchorRef = this.mAnchor;\n let anchor = null;\n if (anchorRef != null) {\n anchor = anchorRef.get();\n }\n if (anchor != null) {\n let vto = anchor.getViewTreeObserver();\n vto.removeOnScrollChangedListener(this.mOnScrollChangedListener);\n }\n this.mAnchor = null;\n }\n registerForScrollChanged(anchor, xoff, yoff, gravity) {\n this.unregisterForScrollChanged();\n this.mAnchor = new WeakReference(anchor);\n let vto = anchor.getViewTreeObserver();\n if (vto != null) {\n vto.addOnScrollChangedListener(this.mOnScrollChangedListener);\n }\n this.mAnchorXoff = xoff;\n this.mAnchorYoff = yoff;\n this.mAnchoredGravity = gravity;\n }\n onTouchEvent(event) {\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n if ((event.getAction() == MotionEvent.ACTION_DOWN) && ((x < 0) || (x >= this.mPopupView.getWidth()) || (y < 0) || (y >= this.mPopupView.getHeight()))) {\n this.dismiss();\n return true;\n }\n else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {\n this.dismiss();\n return true;\n }\n else if (this.mPopupView) {\n return this.mPopupView.onTouchEvent(event);\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onWindowAttributesChanged(params) {\n if (this.mPopupWindow != null) {\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n dispatchKeyEvent(event) {\n if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {\n if (this.mPopupView.getKeyDispatcherState() == null) {\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {\n let state = this.mPopupView.getKeyDispatcherState();\n if (state != null) {\n state.startTracking(event, this);\n }\n return true;\n }\n else if (event.getAction() == KeyEvent.ACTION_UP) {\n let state = this.mPopupView.getKeyDispatcherState();\n if (state != null && state.isTracking(event) && !event.isCanceled()) {\n this.dismiss();\n return true;\n }\n }\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n else {\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n }\n dispatchTouchEvent(ev) {\n if (this.mTouchInterceptor != null && this.mTouchInterceptor.onTouch(this.mPopupView, ev)) {\n return true;\n }\n if (this.mPopupWindow.superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n if (this.mPopupWindow.superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n }\n PopupWindow.INPUT_METHOD_FROM_FOCUSABLE = 0;\n PopupWindow.INPUT_METHOD_NEEDED = 1;\n PopupWindow.INPUT_METHOD_NOT_NEEDED = 2;\n PopupWindow.DEFAULT_ANCHORED_GRAVITY = Gravity.TOP | Gravity.START;\n widget.PopupWindow = PopupWindow;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class Scroller extends widget.OverScroller {\n }\n widget.Scroller = Scroller;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var Rect = android.graphics.Rect;\n var Handler = android.os.Handler;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var MeasureSpec = android.view.View.MeasureSpec;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var AbsListView = android.widget.AbsListView;\n var LinearLayout = android.widget.LinearLayout;\n var ListView = android.widget.ListView;\n var PopupWindow = android.widget.PopupWindow;\n var TextView = android.widget.TextView;\n class ListPopupWindow {\n constructor(context, styleAttr = android.R.attr.listPopupWindowStyle) {\n this.mDropDownHeight = ViewGroup.LayoutParams.WRAP_CONTENT;\n this.mDropDownWidth = ViewGroup.LayoutParams.WRAP_CONTENT;\n this.mDropDownHorizontalOffset = 0;\n this.mDropDownVerticalOffset = 0;\n this.mDropDownGravity = Gravity.NO_GRAVITY;\n this.mDropDownAlwaysVisible = false;\n this.mForceIgnoreOutsideTouch = false;\n this.mListItemExpandMaximum = Integer.MAX_VALUE;\n this.mPromptPosition = ListPopupWindow.POSITION_PROMPT_ABOVE;\n this.mResizePopupRunnable = new ListPopupWindow.ResizePopupRunnable(this);\n this.mTouchInterceptor = new ListPopupWindow.PopupTouchInterceptor(this);\n this.mScrollListener = new ListPopupWindow.PopupScrollListener(this);\n this.mHideSelector = new ListPopupWindow.ListSelectorHider(this);\n this.mHandler = new Handler();\n this.mTempRect = new Rect();\n this.mLayoutDirection = 0;\n this.mContext = context;\n this.mPopup = new PopupWindow(context, styleAttr);\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);\n this.mLayoutDirection = View.LAYOUT_DIRECTION_LTR;\n }\n setAdapter(adapter) {\n if (this.mObserver == null) {\n this.mObserver = new ListPopupWindow.PopupDataSetObserver(this);\n }\n else if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(this.mObserver);\n }\n this.mAdapter = adapter;\n if (this.mAdapter != null) {\n adapter.registerDataSetObserver(this.mObserver);\n }\n if (this.mDropDownList != null) {\n this.mDropDownList.setAdapter(this.mAdapter);\n }\n }\n setPromptPosition(position) {\n this.mPromptPosition = position;\n }\n getPromptPosition() {\n return this.mPromptPosition;\n }\n setModal(modal) {\n this.mModal = true;\n this.mPopup.setFocusable(modal);\n }\n isModal() {\n return this.mModal;\n }\n setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch) {\n this.mForceIgnoreOutsideTouch = forceIgnoreOutsideTouch;\n }\n setDropDownAlwaysVisible(dropDownAlwaysVisible) {\n this.mDropDownAlwaysVisible = dropDownAlwaysVisible;\n }\n isDropDownAlwaysVisible() {\n return this.mDropDownAlwaysVisible;\n }\n getBackground() {\n return this.mPopup.getBackground();\n }\n setBackgroundDrawable(d) {\n this.mPopup.setBackgroundDrawable(d);\n }\n setWindowAnimation(enterAnimation, exitAnimation) {\n this.mPopup.setWindowAnimation(enterAnimation, exitAnimation);\n }\n getEnterAnimation() {\n return this.mPopup.mEnterAnimation;\n }\n getExitAnimation() {\n return this.mPopup.mExitAnimation;\n }\n getAnchorView() {\n return this.mDropDownAnchorView;\n }\n setAnchorView(anchor) {\n this.mDropDownAnchorView = anchor;\n }\n getHorizontalOffset() {\n return this.mDropDownHorizontalOffset;\n }\n setHorizontalOffset(offset) {\n this.mDropDownHorizontalOffset = offset;\n }\n getVerticalOffset() {\n if (!this.mDropDownVerticalOffsetSet) {\n return 0;\n }\n return this.mDropDownVerticalOffset;\n }\n setVerticalOffset(offset) {\n this.mDropDownVerticalOffset = offset;\n this.mDropDownVerticalOffsetSet = true;\n }\n setDropDownGravity(gravity) {\n this.mDropDownGravity = gravity;\n }\n getWidth() {\n return this.mDropDownWidth;\n }\n setWidth(width) {\n this.mDropDownWidth = width;\n }\n setContentWidth(width) {\n let popupBackground = this.mPopup.getBackground();\n if (popupBackground != null) {\n popupBackground.getPadding(this.mTempRect);\n this.mDropDownWidth = this.mTempRect.left + this.mTempRect.right + width;\n }\n else {\n this.setWidth(width);\n }\n }\n getHeight() {\n return this.mDropDownHeight;\n }\n setHeight(height) {\n this.mDropDownHeight = height;\n }\n setOnItemClickListener(clickListener) {\n this.mItemClickListener = clickListener;\n }\n setOnItemSelectedListener(selectedListener) {\n this.mItemSelectedListener = selectedListener;\n }\n setPromptView(prompt) {\n let showing = this.isShowing();\n if (showing) {\n this.removePromptView();\n }\n this.mPromptView = prompt;\n if (showing) {\n this.show();\n }\n }\n postShow() {\n this.mHandler.post(this.mShowDropDownRunnable);\n }\n show() {\n let height = this.buildDropDown();\n let widthSpec = 0;\n let heightSpec = 0;\n let noInputMethod = this.isInputMethodNotNeeded();\n this.mPopup.setAllowScrollingAnchorParent(!noInputMethod);\n if (this.mPopup.isShowing()) {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {\n widthSpec = -1;\n }\n else if (this.mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {\n widthSpec = this.getAnchorView().getWidth();\n }\n else {\n widthSpec = this.mDropDownWidth;\n }\n if (this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.MATCH_PARENT;\n if (noInputMethod) {\n this.mPopup.setWindowLayoutMode(this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? ViewGroup.LayoutParams.MATCH_PARENT : 0, 0);\n }\n else {\n this.mPopup.setWindowLayoutMode(this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? ViewGroup.LayoutParams.MATCH_PARENT : 0, ViewGroup.LayoutParams.MATCH_PARENT);\n }\n }\n else if (this.mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {\n heightSpec = height;\n }\n else {\n heightSpec = this.mDropDownHeight;\n }\n this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch && !this.mDropDownAlwaysVisible);\n this.mPopup.update(this.getAnchorView(), this.mDropDownHorizontalOffset, this.mDropDownVerticalOffset, widthSpec, heightSpec);\n }\n else {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {\n widthSpec = ViewGroup.LayoutParams.MATCH_PARENT;\n }\n else {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {\n this.mPopup.setWidth(this.getAnchorView().getWidth());\n }\n else {\n this.mPopup.setWidth(this.mDropDownWidth);\n }\n }\n if (this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n heightSpec = ViewGroup.LayoutParams.MATCH_PARENT;\n }\n else {\n if (this.mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {\n this.mPopup.setHeight(height);\n }\n else {\n this.mPopup.setHeight(this.mDropDownHeight);\n }\n }\n this.mPopup.setWindowLayoutMode(widthSpec, heightSpec);\n this.mPopup.setClipToScreenEnabled(true);\n this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch && !this.mDropDownAlwaysVisible);\n this.mPopup.setTouchInterceptor(this.mTouchInterceptor);\n this.mPopup.showAsDropDown(this.getAnchorView(), this.mDropDownHorizontalOffset, this.mDropDownVerticalOffset, this.mDropDownGravity);\n this.mDropDownList.setSelection(ListView.INVALID_POSITION);\n if (!this.mModal || this.mDropDownList.isInTouchMode()) {\n this.clearListSelection();\n }\n if (!this.mModal) {\n this.mHandler.post(this.mHideSelector);\n }\n }\n }\n dismiss() {\n this.mPopup.dismiss();\n this.removePromptView();\n this.mPopup.setContentView(null);\n this.mDropDownList = null;\n this.mHandler.removeCallbacks(this.mResizePopupRunnable);\n }\n setOnDismissListener(listener) {\n this.mPopup.setOnDismissListener(listener);\n }\n removePromptView() {\n if (this.mPromptView != null) {\n const parent = this.mPromptView.getParent();\n if (parent instanceof ViewGroup) {\n const group = parent;\n group.removeView(this.mPromptView);\n }\n }\n }\n setInputMethodMode(mode) {\n this.mPopup.setInputMethodMode(mode);\n }\n getInputMethodMode() {\n return this.mPopup.getInputMethodMode();\n }\n setSelection(position) {\n let list = this.mDropDownList;\n if (this.isShowing() && list != null) {\n list.mListSelectionHidden = false;\n list.setSelection(position);\n if (list.getChoiceMode() != ListView.CHOICE_MODE_NONE) {\n list.setItemChecked(position, true);\n }\n }\n }\n clearListSelection() {\n const list = this.mDropDownList;\n if (list != null) {\n list.mListSelectionHidden = true;\n list.hideSelector();\n list.requestLayout();\n }\n }\n isShowing() {\n return this.mPopup.isShowing();\n }\n isInputMethodNotNeeded() {\n return this.mPopup.getInputMethodMode() == ListPopupWindow.INPUT_METHOD_NOT_NEEDED;\n }\n performItemClick(position) {\n if (this.isShowing()) {\n if (this.mItemClickListener != null) {\n const list = this.mDropDownList;\n const child = list.getChildAt(position - list.getFirstVisiblePosition());\n const adapter = list.getAdapter();\n this.mItemClickListener.onItemClick(list, child, position, adapter.getItemId(position));\n }\n return true;\n }\n return false;\n }\n getSelectedItem() {\n if (!this.isShowing()) {\n return null;\n }\n return this.mDropDownList.getSelectedItem();\n }\n getSelectedItemPosition() {\n if (!this.isShowing()) {\n return ListView.INVALID_POSITION;\n }\n return this.mDropDownList.getSelectedItemPosition();\n }\n getSelectedItemId() {\n if (!this.isShowing()) {\n return ListView.INVALID_ROW_ID;\n }\n return this.mDropDownList.getSelectedItemId();\n }\n getSelectedView() {\n if (!this.isShowing()) {\n return null;\n }\n return this.mDropDownList.getSelectedView();\n }\n getListView() {\n return this.mDropDownList;\n }\n setListItemExpandMax(max) {\n this.mListItemExpandMaximum = max;\n }\n onKeyDown(keyCode, event) {\n if (this.isShowing()) {\n if (keyCode != KeyEvent.KEYCODE_SPACE && (this.mDropDownList.getSelectedItemPosition() >= 0 || !KeyEvent.isConfirmKey(keyCode))) {\n let curIndex = this.mDropDownList.getSelectedItemPosition();\n let consumed;\n const below = !this.mPopup.isAboveAnchor();\n const adapter = this.mAdapter;\n let allEnabled;\n let firstItem = Integer.MAX_VALUE;\n let lastItem = Integer.MIN_VALUE;\n if (adapter != null) {\n allEnabled = adapter.areAllItemsEnabled();\n firstItem = allEnabled ? 0 : this.mDropDownList.lookForSelectablePosition(0, true);\n lastItem = allEnabled ? adapter.getCount() - 1 : this.mDropDownList.lookForSelectablePosition(adapter.getCount() - 1, false);\n }\n if ((below && keyCode == KeyEvent.KEYCODE_DPAD_UP && curIndex <= firstItem) || (!below && keyCode == KeyEvent.KEYCODE_DPAD_DOWN && curIndex >= lastItem)) {\n this.clearListSelection();\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);\n this.show();\n return true;\n }\n else {\n this.mDropDownList.mListSelectionHidden = false;\n }\n consumed = this.mDropDownList.onKeyDown(keyCode, event);\n if (ListPopupWindow.DEBUG)\n Log.v(ListPopupWindow.TAG, \"Key down: code=\" + keyCode + \" list consumed=\" + consumed);\n if (consumed) {\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this.mDropDownList.requestFocusFromTouch();\n this.show();\n switch (keyCode) {\n case KeyEvent.KEYCODE_ENTER:\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_DPAD_DOWN:\n case KeyEvent.KEYCODE_DPAD_UP:\n return true;\n }\n }\n else {\n if (below && keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {\n if (curIndex == lastItem) {\n return true;\n }\n }\n else if (!below && keyCode == KeyEvent.KEYCODE_DPAD_UP && curIndex == firstItem) {\n return true;\n }\n }\n }\n }\n return false;\n }\n onKeyUp(keyCode, event) {\n if (this.isShowing() && this.mDropDownList.getSelectedItemPosition() >= 0) {\n let consumed = this.mDropDownList.onKeyUp(keyCode, event);\n if (consumed && KeyEvent.isConfirmKey(keyCode)) {\n this.dismiss();\n }\n return consumed;\n }\n return false;\n }\n onKeyPreIme(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && this.isShowing()) {\n const anchorView = this.mDropDownAnchorView;\n if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {\n let state = anchorView.getKeyDispatcherState();\n if (state != null) {\n state.startTracking(event, this);\n }\n return true;\n }\n else if (event.getAction() == KeyEvent.ACTION_UP) {\n let state = anchorView.getKeyDispatcherState();\n if (state != null) {\n state.handleUpEvent(event);\n }\n if (event.isTracking() && !event.isCanceled()) {\n this.dismiss();\n return true;\n }\n }\n }\n return false;\n }\n createDragToOpenListener(src) {\n return (() => {\n const _this = this;\n class _Inner extends ListPopupWindow.ForwardingListener {\n getPopup() {\n return _this;\n }\n }\n return new _Inner(src);\n })();\n }\n buildDropDown() {\n let dropDownView;\n let otherHeights = 0;\n if (this.mDropDownList == null) {\n let context = this.mContext;\n this.mShowDropDownRunnable = (() => {\n const _this = this;\n class _Inner {\n run() {\n let view = _this.getAnchorView();\n if (view != null && view.isAttachedToWindow()) {\n _this.show();\n }\n }\n }\n return new _Inner();\n })();\n this.mDropDownList = new ListPopupWindow.DropDownListView(context, !this.mModal);\n if (this.mDropDownListHighlight != null) {\n this.mDropDownList.setSelector(this.mDropDownListHighlight);\n }\n this.mDropDownList.setAdapter(this.mAdapter);\n this.mDropDownList.setOnItemClickListener(this.mItemClickListener);\n this.mDropDownList.setFocusable(true);\n this.mDropDownList.setFocusableInTouchMode(true);\n this.mDropDownList.setOnItemSelectedListener((() => {\n const _this = this;\n class _Inner {\n onItemSelected(parent, view, position, id) {\n if (position != -1) {\n let dropDownList = _this.mDropDownList;\n if (dropDownList != null) {\n dropDownList.mListSelectionHidden = false;\n }\n }\n }\n onNothingSelected(parent) {\n }\n }\n return new _Inner();\n })());\n this.mDropDownList.setOnScrollListener(this.mScrollListener);\n if (this.mItemSelectedListener != null) {\n this.mDropDownList.setOnItemSelectedListener(this.mItemSelectedListener);\n }\n dropDownView = this.mDropDownList;\n let hintView = this.mPromptView;\n if (hintView != null) {\n let hintContainer = new LinearLayout(context);\n hintContainer.setOrientation(LinearLayout.VERTICAL);\n let hintParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1.0);\n switch (this.mPromptPosition) {\n case ListPopupWindow.POSITION_PROMPT_BELOW:\n hintContainer.addView(dropDownView, hintParams);\n hintContainer.addView(hintView);\n break;\n case ListPopupWindow.POSITION_PROMPT_ABOVE:\n hintContainer.addView(hintView);\n hintContainer.addView(dropDownView, hintParams);\n break;\n default:\n Log.e(ListPopupWindow.TAG, \"Invalid hint position \" + this.mPromptPosition);\n break;\n }\n let widthSpec = MeasureSpec.makeMeasureSpec(this.mDropDownWidth, MeasureSpec.AT_MOST);\n let heightSpec = MeasureSpec.UNSPECIFIED;\n hintView.measure(widthSpec, heightSpec);\n hintParams = hintView.getLayoutParams();\n otherHeights = hintView.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin;\n dropDownView = hintContainer;\n }\n this.mPopup.setContentView(dropDownView);\n }\n else {\n dropDownView = this.mPopup.getContentView();\n const view = this.mPromptView;\n if (view != null) {\n let hintParams = view.getLayoutParams();\n otherHeights = view.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin;\n }\n }\n let padding = 0;\n let background = this.mPopup.getBackground();\n if (background != null) {\n background.getPadding(this.mTempRect);\n padding = this.mTempRect.top + this.mTempRect.bottom;\n if (!this.mDropDownVerticalOffsetSet) {\n this.mDropDownVerticalOffset = -this.mTempRect.top;\n }\n }\n else {\n this.mTempRect.setEmpty();\n }\n let ignoreBottomDecorations = this.mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED;\n const maxHeight = this.mPopup.getMaxAvailableHeight(this.getAnchorView(), this.mDropDownVerticalOffset, ignoreBottomDecorations);\n if (this.mDropDownAlwaysVisible || this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n return maxHeight + padding;\n }\n let childWidthSpec;\n switch (this.mDropDownWidth) {\n case ViewGroup.LayoutParams.WRAP_CONTENT:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels - (this.mTempRect.left + this.mTempRect.right), MeasureSpec.AT_MOST);\n break;\n case ViewGroup.LayoutParams.MATCH_PARENT:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels - (this.mTempRect.left + this.mTempRect.right), MeasureSpec.EXACTLY);\n break;\n default:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mDropDownWidth, MeasureSpec.EXACTLY);\n break;\n }\n const listContent = this.mDropDownList.measureHeightOfChildren(childWidthSpec, 0, ListView.NO_POSITION, maxHeight - otherHeights, -1);\n if (listContent > 0)\n otherHeights += padding;\n return listContent + otherHeights;\n }\n }\n ListPopupWindow.TAG = \"ListPopupWindow\";\n ListPopupWindow.DEBUG = false;\n ListPopupWindow.EXPAND_LIST_TIMEOUT = 250;\n ListPopupWindow.POSITION_PROMPT_ABOVE = 0;\n ListPopupWindow.POSITION_PROMPT_BELOW = 1;\n ListPopupWindow.MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT;\n ListPopupWindow.WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;\n ListPopupWindow.INPUT_METHOD_FROM_FOCUSABLE = PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;\n ListPopupWindow.INPUT_METHOD_NEEDED = PopupWindow.INPUT_METHOD_NEEDED;\n ListPopupWindow.INPUT_METHOD_NOT_NEEDED = PopupWindow.INPUT_METHOD_NOT_NEEDED;\n widget.ListPopupWindow = ListPopupWindow;\n (function (ListPopupWindow) {\n class ForwardingListener {\n constructor(src) {\n this.mScaledTouchSlop = 0;\n this.mTapTimeout = 0;\n this.mActivePointerId = 0;\n this.mSrc = src;\n this.mScaledTouchSlop = ViewConfiguration.get(src.getContext()).getScaledTouchSlop();\n this.mTapTimeout = ViewConfiguration.getTapTimeout();\n src.addOnAttachStateChangeListener(this);\n }\n onTouch(v, event) {\n const wasForwarding = this.mForwarding;\n let forwarding;\n if (wasForwarding) {\n forwarding = this.onTouchForwarded(event) || !this.onForwardingStopped();\n }\n else {\n forwarding = this.onTouchObserved(event) && this.onForwardingStarted();\n }\n this.mForwarding = forwarding;\n return forwarding || wasForwarding;\n }\n onViewAttachedToWindow(v) {\n }\n onViewDetachedFromWindow(v) {\n this.mForwarding = false;\n this.mActivePointerId = MotionEvent.INVALID_POINTER_ID;\n if (this.mDisallowIntercept != null) {\n this.mSrc.removeCallbacks(this.mDisallowIntercept);\n }\n }\n onForwardingStarted() {\n const popup = this.getPopup();\n if (popup != null && !popup.isShowing()) {\n popup.show();\n }\n return true;\n }\n onForwardingStopped() {\n const popup = this.getPopup();\n if (popup != null && popup.isShowing()) {\n popup.dismiss();\n }\n return true;\n }\n onTouchObserved(srcEvent) {\n const src = this.mSrc;\n if (!src.isEnabled()) {\n return false;\n }\n const actionMasked = srcEvent.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_DOWN:\n this.mActivePointerId = srcEvent.getPointerId(0);\n if (this.mDisallowIntercept == null) {\n this.mDisallowIntercept = new ForwardingListener.DisallowIntercept(this);\n }\n src.postDelayed(this.mDisallowIntercept, this.mTapTimeout);\n break;\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = srcEvent.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex >= 0) {\n const x = srcEvent.getX(activePointerIndex);\n const y = srcEvent.getY(activePointerIndex);\n if (!src.pointInView(x, y, this.mScaledTouchSlop)) {\n if (this.mDisallowIntercept != null) {\n src.removeCallbacks(this.mDisallowIntercept);\n }\n src.getParent().requestDisallowInterceptTouchEvent(true);\n return true;\n }\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n if (this.mDisallowIntercept != null) {\n src.removeCallbacks(this.mDisallowIntercept);\n }\n break;\n }\n return false;\n }\n onTouchForwarded(srcEvent) {\n return false;\n }\n }\n ListPopupWindow.ForwardingListener = ForwardingListener;\n (function (ForwardingListener) {\n class DisallowIntercept {\n constructor(arg) {\n this._ForwardingListener_this = arg;\n }\n run() {\n const parent = this._ForwardingListener_this.mSrc.getParent();\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n ForwardingListener.DisallowIntercept = DisallowIntercept;\n })(ForwardingListener = ListPopupWindow.ForwardingListener || (ListPopupWindow.ForwardingListener = {}));\n class DropDownListView extends ListView {\n constructor(context, hijackFocus) {\n super(context, null, android.R.attr.dropDownListViewStyle);\n this.mHijackFocus = hijackFocus;\n this.setCacheColorHint(0);\n }\n onForwardedEvent(event, activePointerId) {\n let handledEvent = true;\n let clearPressedItem = false;\n const actionMasked = event.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_CANCEL:\n handledEvent = false;\n break;\n case MotionEvent.ACTION_UP:\n handledEvent = false;\n case MotionEvent.ACTION_MOVE:\n const activeIndex = event.findPointerIndex(activePointerId);\n if (activeIndex < 0) {\n handledEvent = false;\n break;\n }\n const x = Math.floor(event.getX(activeIndex));\n const y = Math.floor(event.getY(activeIndex));\n const position = this.pointToPosition(x, y);\n if (position == DropDownListView.INVALID_POSITION) {\n clearPressedItem = true;\n break;\n }\n const child = this.getChildAt(position - this.getFirstVisiblePosition());\n this.setPressedItem(child, position);\n handledEvent = true;\n if (actionMasked == MotionEvent.ACTION_UP) {\n this.clickPressedItem(child, position);\n }\n break;\n }\n if (!handledEvent || clearPressedItem) {\n this.clearPressedItem();\n }\n return handledEvent;\n }\n clickPressedItem(child, position) {\n const id = this.getItemIdAtPosition(position);\n this.performItemClick(child, position, id);\n }\n clearPressedItem() {\n this.mDrawsInPressedState = false;\n this.setPressed(false);\n this.updateSelectorState();\n }\n setPressedItem(child, position) {\n this.mDrawsInPressedState = true;\n this.setPressed(true);\n this.layoutChildren();\n this.setSelectedPositionInt(position);\n this.positionSelector(position, child);\n this.refreshDrawableState();\n }\n touchModeDrawsInPressedState() {\n return this.mDrawsInPressedState || super.touchModeDrawsInPressedState();\n }\n obtainView(position, isScrap) {\n let view = super.obtainView(position, isScrap);\n if (view instanceof TextView) {\n view.setHorizontallyScrolling(true);\n }\n return view;\n }\n isInTouchMode() {\n return (this.mHijackFocus && this.mListSelectionHidden) || super.isInTouchMode();\n }\n hasWindowFocus() {\n return this.mHijackFocus || super.hasWindowFocus();\n }\n isFocused() {\n return this.mHijackFocus || super.isFocused();\n }\n hasFocus() {\n return this.mHijackFocus || super.hasFocus();\n }\n }\n DropDownListView.CLICK_ANIM_DURATION = 150;\n DropDownListView.CLICK_ANIM_ALPHA = 0x80;\n ListPopupWindow.DropDownListView = DropDownListView;\n class PopupDataSetObserver extends DataSetObserver {\n constructor(arg) {\n super();\n this._ListPopupWindow_this = arg;\n }\n onChanged() {\n if (this._ListPopupWindow_this.isShowing()) {\n this._ListPopupWindow_this.show();\n }\n }\n onInvalidated() {\n this._ListPopupWindow_this.dismiss();\n }\n }\n ListPopupWindow.PopupDataSetObserver = PopupDataSetObserver;\n class ListSelectorHider {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n run() {\n this._ListPopupWindow_this.clearListSelection();\n }\n }\n ListPopupWindow.ListSelectorHider = ListSelectorHider;\n class ResizePopupRunnable {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n run() {\n if (this._ListPopupWindow_this.mDropDownList != null && this._ListPopupWindow_this.mDropDownList.getCount() > this._ListPopupWindow_this.mDropDownList.getChildCount() && this._ListPopupWindow_this.mDropDownList.getChildCount() <= this._ListPopupWindow_this.mListItemExpandMaximum) {\n this._ListPopupWindow_this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this._ListPopupWindow_this.show();\n }\n }\n }\n ListPopupWindow.ResizePopupRunnable = ResizePopupRunnable;\n class PopupTouchInterceptor {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n onTouch(v, event) {\n const action = event.getAction();\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n if (action == MotionEvent.ACTION_DOWN && this._ListPopupWindow_this.mPopup != null && this._ListPopupWindow_this.mPopup.isShowing() && (x >= 0 && x < this._ListPopupWindow_this.mPopup.getWidth() && y >= 0 && y < this._ListPopupWindow_this.mPopup.getHeight())) {\n this._ListPopupWindow_this.mHandler.postDelayed(this._ListPopupWindow_this.mResizePopupRunnable, ListPopupWindow.EXPAND_LIST_TIMEOUT);\n }\n else if (action == MotionEvent.ACTION_UP) {\n this._ListPopupWindow_this.mHandler.removeCallbacks(this._ListPopupWindow_this.mResizePopupRunnable);\n }\n return false;\n }\n }\n ListPopupWindow.PopupTouchInterceptor = PopupTouchInterceptor;\n class PopupScrollListener {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount) {\n }\n onScrollStateChanged(view, scrollState) {\n if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL\n && !this._ListPopupWindow_this.isInputMethodNotNeeded() && this._ListPopupWindow_this.mPopup.getContentView() != null) {\n this._ListPopupWindow_this.mHandler.removeCallbacks(this._ListPopupWindow_this.mResizePopupRunnable);\n this._ListPopupWindow_this.mResizePopupRunnable.run();\n }\n }\n }\n ListPopupWindow.PopupScrollListener = PopupScrollListener;\n })(ListPopupWindow = widget.ListPopupWindow || (widget.ListPopupWindow = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AlertDialog = android.app.AlertDialog;\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var ViewGroup = android.view.ViewGroup;\n var AbsSpinner = android.widget.AbsSpinner;\n var ListAdapter = android.widget.ListAdapter;\n var ListPopupWindow = android.widget.ListPopupWindow;\n var ListView = android.widget.ListView;\n var R = android.R;\n class Spinner extends AbsSpinner {\n constructor(context, bindElement, defStyle = R.attr.spinnerStyle, mode = Spinner.MODE_THEME) {\n super(context, bindElement, null);\n this.mDropDownWidth = 0;\n this.mGravity = 0;\n this.mTempRect = new Rect();\n let a = this._attrBinder;\n if (mode == Spinner.MODE_THEME) {\n mode = Spinner.MODE_DROPDOWN;\n }\n switch (mode) {\n case Spinner.MODE_DIALOG:\n {\n this.mPopup = new Spinner.DialogPopup(this);\n break;\n }\n case Spinner.MODE_DROPDOWN:\n {\n const popup = new Spinner.DropdownPopup(context, defStyle, this);\n a.addAttr('dropDownWidth', (value) => {\n this.mDropDownWidth = a.parseNumberPixelSize(value, ViewGroup.LayoutParams.WRAP_CONTENT);\n });\n a.addAttr('popupBackground', (value) => {\n popup.setBackgroundDrawable(a.parseDrawable(value));\n });\n a.addAttr('dropDownVerticalOffset', (value) => {\n const verticalOffset = a.parseNumberPixelSize(value, 0);\n if (verticalOffset != 0) {\n popup.setVerticalOffset(verticalOffset);\n }\n });\n a.addAttr('dropDownHorizontalOffset', (value) => {\n const horizontalOffset = a.parseNumberPixelSize(value, 0);\n if (horizontalOffset != 0) {\n popup.setHorizontalOffset(horizontalOffset);\n }\n });\n this.mPopup = popup;\n break;\n }\n }\n a.addAttr('gravity', (value) => {\n this.mGravity = a.parseGravity(value, Gravity.CENTER);\n });\n a.addAttr('prompt', (value) => {\n this.mPopup.setPromptText(a.parseString(value));\n });\n a.addAttr('disableChildrenWhenDisabled', (value) => {\n this.mDisableChildrenWhenDisabled = a.parseBoolean(value, false);\n });\n if (defStyle != null)\n this.applyDefaultAttributes(defStyle);\n if (this.mTempAdapter != null) {\n this.mPopup.setAdapter(this.mTempAdapter);\n this.mTempAdapter = null;\n }\n }\n setPopupBackgroundDrawable(background) {\n if (!(this.mPopup instanceof Spinner.DropdownPopup)) {\n Log.e(Spinner.TAG, \"setPopupBackgroundDrawable: incompatible spinner mode; ignoring...\");\n return;\n }\n this.mPopup.setBackgroundDrawable(background);\n }\n getPopupBackground() {\n return this.mPopup.getBackground();\n }\n setDropDownVerticalOffset(pixels) {\n this.mPopup.setVerticalOffset(pixels);\n }\n getDropDownVerticalOffset() {\n return this.mPopup.getVerticalOffset();\n }\n setDropDownHorizontalOffset(pixels) {\n this.mPopup.setHorizontalOffset(pixels);\n }\n getDropDownHorizontalOffset() {\n return this.mPopup.getHorizontalOffset();\n }\n setDropDownWidth(pixels) {\n if (!(this.mPopup instanceof Spinner.DropdownPopup)) {\n Log.e(Spinner.TAG, \"Cannot set dropdown width for MODE_DIALOG, ignoring\");\n return;\n }\n this.mDropDownWidth = pixels;\n }\n getDropDownWidth() {\n return this.mDropDownWidth;\n }\n setEnabled(enabled) {\n super.setEnabled(enabled);\n if (this.mDisableChildrenWhenDisabled) {\n const count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n this.getChildAt(i).setEnabled(enabled);\n }\n }\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.START;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n getGravity() {\n return this.mGravity;\n }\n setAdapter(adapter) {\n super.setAdapter(adapter);\n this.mRecycler.clear();\n if (this.mPopup != null) {\n this.mPopup.setAdapter(new Spinner.DropDownAdapter(adapter));\n }\n else {\n this.mTempAdapter = new Spinner.DropDownAdapter(adapter);\n }\n }\n getBaseline() {\n let child = null;\n if (this.getChildCount() > 0) {\n child = this.getChildAt(0);\n }\n else if (this.mAdapter != null && this.mAdapter.getCount() > 0) {\n child = this.makeView(0, false);\n this.mRecycler.put(0, child);\n }\n if (child != null) {\n const childBaseline = child.getBaseline();\n return childBaseline >= 0 ? child.getTop() + childBaseline : -1;\n }\n else {\n return -1;\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mPopup != null && this.mPopup.isShowing()) {\n this.mPopup.dismiss();\n }\n }\n setOnItemClickListener(l) {\n throw Error(`new RuntimeException(\"setOnItemClickListener cannot be used with a spinner.\")`);\n }\n setOnItemClickListenerInt(l) {\n super.setOnItemClickListener(l);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (this.mPopup != null && Spinner.MeasureSpec.getMode(widthMeasureSpec) == Spinner.MeasureSpec.AT_MOST) {\n const measuredWidth = this.getMeasuredWidth();\n this.setMeasuredDimension(Math.min(Math.max(measuredWidth, this.measureContentWidth(this.getAdapter(), this.getBackground())), Spinner.MeasureSpec.getSize(widthMeasureSpec)), this.getMeasuredHeight());\n }\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mInLayout = true;\n this.layoutSpinner(0, false);\n this.mInLayout = false;\n }\n layoutSpinner(delta, animate) {\n let childrenLeft = this.mSpinnerPadding.left;\n let childrenWidth = this.mRight - this.mLeft - this.mSpinnerPadding.left - this.mSpinnerPadding.right;\n if (this.mDataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n return;\n }\n if (this.mNextSelectedPosition >= 0) {\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n }\n this.recycleAllViews();\n this.removeAllViewsInLayout();\n this.mFirstPosition = this.mSelectedPosition;\n if (this.mAdapter != null) {\n let sel = this.makeView(this.mSelectedPosition, true);\n let width = sel.getMeasuredWidth();\n let selectedOffset = childrenLeft;\n const layoutDirection = this.getLayoutDirection();\n const absoluteGravity = Gravity.getAbsoluteGravity(this.mGravity, layoutDirection);\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2);\n break;\n case Gravity.RIGHT:\n selectedOffset = childrenLeft + childrenWidth - width;\n break;\n }\n sel.offsetLeftAndRight(selectedOffset);\n }\n this.mRecycler.clear();\n this.invalidate();\n this.checkSelectionChanged();\n this.mDataChanged = false;\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n }\n makeView(position, addChild) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.get(position);\n if (child != null) {\n this.setUpChild(child, addChild);\n return child;\n }\n }\n child = this.mAdapter.getView(position, null, this);\n this.setUpChild(child, addChild);\n return child;\n }\n setUpChild(child, addChild) {\n let lp = child.getLayoutParams();\n if (lp == null) {\n lp = this.generateDefaultLayoutParams();\n }\n if (addChild) {\n this.addViewInLayout(child, 0, lp);\n }\n child.setSelected(this.hasFocus());\n if (this.mDisableChildrenWhenDisabled) {\n child.setEnabled(this.isEnabled());\n }\n let childHeightSpec = ViewGroup.getChildMeasureSpec(this.mHeightMeasureSpec, this.mSpinnerPadding.top + this.mSpinnerPadding.bottom, lp.height);\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mSpinnerPadding.left + this.mSpinnerPadding.right, lp.width);\n child.measure(childWidthSpec, childHeightSpec);\n let childLeft;\n let childRight;\n let childTop = this.mSpinnerPadding.top + ((this.getMeasuredHeight() - this.mSpinnerPadding.bottom - this.mSpinnerPadding.top - child.getMeasuredHeight()) / 2);\n let childBottom = childTop + child.getMeasuredHeight();\n let width = child.getMeasuredWidth();\n childLeft = 0;\n childRight = childLeft + width;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n performClick() {\n let handled = super.performClick();\n if (!handled) {\n handled = true;\n if (!this.mPopup.isShowing()) {\n this.mPopup.showPopup(this.getTextDirection(), this.getTextAlignment());\n }\n }\n return handled;\n }\n onClick(dialog, which) {\n this.setSelection(which);\n dialog.dismiss();\n }\n setPrompt(prompt) {\n this.mPopup.setPromptText(prompt);\n }\n getPrompt() {\n return this.mPopup.getHintText();\n }\n measureContentWidth(adapter, background) {\n if (adapter == null) {\n return 0;\n }\n let width = 0;\n let itemView = null;\n let itemType = 0;\n const widthMeasureSpec = Spinner.MeasureSpec.makeMeasureSpec(0, Spinner.MeasureSpec.UNSPECIFIED);\n const heightMeasureSpec = Spinner.MeasureSpec.makeMeasureSpec(0, Spinner.MeasureSpec.UNSPECIFIED);\n let start = Math.max(0, this.getSelectedItemPosition());\n const end = Math.min(adapter.getCount(), start + Spinner.MAX_ITEMS_MEASURED);\n const count = end - start;\n start = Math.max(0, start - (Spinner.MAX_ITEMS_MEASURED - count));\n for (let i = start; i < end; i++) {\n const positionType = adapter.getItemViewType(i);\n if (positionType != itemType) {\n itemType = positionType;\n itemView = null;\n }\n itemView = adapter.getView(i, itemView, this);\n if (itemView.getLayoutParams() == null) {\n itemView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));\n }\n itemView.measure(widthMeasureSpec, heightMeasureSpec);\n width = Math.max(width, itemView.getMeasuredWidth());\n }\n if (background != null) {\n background.getPadding(this.mTempRect);\n width += this.mTempRect.left + this.mTempRect.right;\n }\n return width;\n }\n }\n Spinner.TAG = \"Spinner\";\n Spinner.MAX_ITEMS_MEASURED = 15;\n Spinner.MODE_DIALOG = 0;\n Spinner.MODE_DROPDOWN = 1;\n Spinner.MODE_THEME = -1;\n widget.Spinner = Spinner;\n (function (Spinner) {\n class DropDownAdapter {\n constructor(adapter) {\n this.mAdapter = adapter;\n if (ListAdapter.isImpl(adapter)) {\n this.mListAdapter = adapter;\n }\n }\n getCount() {\n return this.mAdapter == null ? 0 : this.mAdapter.getCount();\n }\n getItem(position) {\n return this.mAdapter == null ? null : this.mAdapter.getItem(position);\n }\n getItemId(position) {\n return this.mAdapter == null ? -1 : this.mAdapter.getItemId(position);\n }\n getView(position, convertView, parent) {\n return this.getDropDownView(position, convertView, parent);\n }\n getDropDownView(position, convertView, parent) {\n return (this.mAdapter == null) ? null : this.mAdapter.getDropDownView(position, convertView, parent);\n }\n hasStableIds() {\n return this.mAdapter != null && this.mAdapter.hasStableIds();\n }\n registerDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.registerDataSetObserver(observer);\n }\n }\n unregisterDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(observer);\n }\n }\n areAllItemsEnabled() {\n const adapter = this.mListAdapter;\n if (adapter != null) {\n return adapter.areAllItemsEnabled();\n }\n else {\n return true;\n }\n }\n isEnabled(position) {\n const adapter = this.mListAdapter;\n if (adapter != null) {\n return adapter.isEnabled(position);\n }\n else {\n return true;\n }\n }\n getItemViewType(position) {\n return 0;\n }\n getViewTypeCount() {\n return 1;\n }\n isEmpty() {\n return this.getCount() == 0;\n }\n }\n Spinner.DropDownAdapter = DropDownAdapter;\n class DialogPopup {\n constructor(arg) {\n this._Spinner_this = arg;\n }\n dismiss() {\n this.mPopup.dismiss();\n this.mPopup = null;\n }\n isShowing() {\n return this.mPopup != null ? this.mPopup.isShowing() : false;\n }\n setAdapter(adapter) {\n this.mListAdapter = adapter;\n }\n setPromptText(hintText) {\n this.mPrompt = hintText;\n }\n getHintText() {\n return this.mPrompt;\n }\n showPopup(textDirection, textAlignment) {\n if (this.mListAdapter == null) {\n return;\n }\n let builder = new AlertDialog.Builder(this._Spinner_this.getContext());\n if (this.mPrompt != null) {\n builder.setTitle(this.mPrompt);\n }\n this.mPopup = builder.setSingleChoiceItemsWithAdapter(this.mListAdapter, this._Spinner_this.getSelectedItemPosition(), this).create();\n const listView = this.mPopup.getListView();\n listView.setTextDirection(textDirection);\n listView.setTextAlignment(textAlignment);\n this.mPopup.show();\n }\n onClick(dialog, which) {\n this._Spinner_this.setSelection(which);\n if (this._Spinner_this.mOnItemClickListener != null) {\n this._Spinner_this.performItemClick(null, which, this.mListAdapter.getItemId(which));\n }\n this.dismiss();\n }\n setBackgroundDrawable(bg) {\n Log.e(Spinner.TAG, \"Cannot set popup background for MODE_DIALOG, ignoring\");\n }\n setVerticalOffset(px) {\n Log.e(Spinner.TAG, \"Cannot set vertical offset for MODE_DIALOG, ignoring\");\n }\n setHorizontalOffset(px) {\n Log.e(Spinner.TAG, \"Cannot set horizontal offset for MODE_DIALOG, ignoring\");\n }\n getBackground() {\n return null;\n }\n getVerticalOffset() {\n return 0;\n }\n getHorizontalOffset() {\n return 0;\n }\n }\n Spinner.DialogPopup = DialogPopup;\n class DropdownPopup extends ListPopupWindow {\n constructor(context, defStyleRes, arg) {\n super(context, defStyleRes);\n this._Spinner_this = arg;\n this.setAnchorView(this._Spinner_this);\n this.setModal(true);\n this.setPromptPosition(DropdownPopup.POSITION_PROMPT_ABOVE);\n this.setOnItemClickListener((() => {\n const _this = this;\n class _Inner {\n onItemClick(parent, v, position, id) {\n _this._Spinner_this.setSelection(position);\n if (_this._Spinner_this.mOnItemClickListener != null) {\n _this._Spinner_this.performItemClick(v, position, _this.mAdapter.getItemId(position));\n }\n _this.dismiss();\n }\n }\n return new _Inner();\n })());\n }\n setAdapter(adapter) {\n super.setAdapter(adapter);\n }\n getHintText() {\n return this.mHintText;\n }\n setPromptText(hintText) {\n this.mHintText = hintText;\n }\n computeContentWidth() {\n const background = this.getBackground();\n let hOffset = 0;\n if (background != null) {\n background.getPadding(this._Spinner_this.mTempRect);\n hOffset = this._Spinner_this.isLayoutRtl() ? this._Spinner_this.mTempRect.right : -this._Spinner_this.mTempRect.left;\n }\n else {\n this._Spinner_this.mTempRect.left = this._Spinner_this.mTempRect.right = 0;\n }\n const spinnerPaddingLeft = this._Spinner_this.getPaddingLeft();\n const spinnerPaddingRight = this._Spinner_this.getPaddingRight();\n const spinnerWidth = this._Spinner_this.getWidth();\n if (this._Spinner_this.mDropDownWidth == DropdownPopup.WRAP_CONTENT) {\n let contentWidth = this._Spinner_this.measureContentWidth(this.mAdapter, this.getBackground());\n const contentWidthLimit = this._Spinner_this.mContext.getResources().getDisplayMetrics().widthPixels - this._Spinner_this.mTempRect.left - this._Spinner_this.mTempRect.right;\n if (contentWidth > contentWidthLimit) {\n contentWidth = contentWidthLimit;\n }\n this.setContentWidth(Math.max(contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));\n }\n else if (this._Spinner_this.mDropDownWidth == DropdownPopup.MATCH_PARENT) {\n this.setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);\n }\n else {\n this.setContentWidth(this._Spinner_this.mDropDownWidth);\n }\n if (this._Spinner_this.isLayoutRtl()) {\n hOffset += spinnerWidth - spinnerPaddingRight - this.getWidth();\n }\n else {\n hOffset += spinnerPaddingLeft;\n }\n this.setHorizontalOffset(hOffset);\n }\n showPopup(textDirection, textAlignment) {\n const wasShowing = this.isShowing();\n this.computeContentWidth();\n this.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);\n super.show();\n const listView = this.getListView();\n listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);\n listView.setTextDirection(textDirection);\n listView.setTextAlignment(textAlignment);\n this.setSelection(this._Spinner_this.getSelectedItemPosition());\n if (wasShowing) {\n return;\n }\n const vto = this._Spinner_this.getViewTreeObserver();\n if (vto != null) {\n const layoutListener = (() => {\n const _this = this;\n class _Inner {\n onGlobalLayout() {\n if (!_this._Spinner_this.isVisibleToUser()) {\n _this.dismiss();\n }\n else {\n _this.computeContentWidth();\n _this.show();\n }\n }\n }\n return new _Inner();\n })();\n vto.addOnGlobalLayoutListener(layoutListener);\n this.setOnDismissListener((() => {\n const _this = this;\n class _Inner {\n onDismiss() {\n const vto = _this._Spinner_this.getViewTreeObserver();\n if (vto != null) {\n vto.removeOnGlobalLayoutListener(layoutListener);\n }\n }\n }\n return new _Inner();\n })());\n }\n }\n }\n Spinner.DropdownPopup = DropdownPopup;\n })(Spinner = widget.Spinner || (widget.Spinner = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n class HtmlBaseView extends View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHtmlTouchAble = false;\n }\n onTouchEvent(event) {\n if (this.mHtmlTouchAble) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n }\n return super.onTouchEvent(event) || this.mHtmlTouchAble;\n }\n setHtmlTouchAble(enable) {\n this.mHtmlTouchAble = enable;\n }\n isHtmlTouchAble() {\n return this.mHtmlTouchAble;\n }\n dependOnDebugLayout() {\n return true;\n }\n }\n widget.HtmlBaseView = HtmlBaseView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var webkit;\n (function (webkit) {\n class WebViewClient {\n onPageFinished(view, url) {\n }\n onReceivedTitle(view, title) {\n }\n }\n webkit.WebViewClient = WebViewClient;\n })(webkit = android.webkit || (android.webkit = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var webkit;\n (function (webkit) {\n var HtmlBaseView = androidui.widget.HtmlBaseView;\n class WebView extends HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.initIFrameHistoryLength = -1;\n let density = this.getResources().getDisplayMetrics().density;\n this.setMinimumWidth(300 * density);\n this.setMinimumHeight(150 * density);\n }\n initIFrameElement(url) {\n this.iFrameElement = document.createElement('iframe');\n this.iFrameElement.style.border = 'none';\n this.iFrameElement.style.height = '100%';\n this.iFrameElement.style.width = '100%';\n this.iFrameElement.onload = () => {\n this.checkActivityResume();\n if (this.initIFrameHistoryLength < 0)\n this.initIFrameHistoryLength = history.length;\n if (this.mClient) {\n this.mClient.onReceivedTitle(this, this.getTitle());\n this.mClient.onPageFinished(this, this.getUrl());\n }\n };\n this.bindElement.style['webkitOverflowScrolling'] = this.bindElement.style['overflowScrolling'] = 'touch';\n this.bindElement.style.overflowY = 'auto';\n if (url)\n this.iFrameElement.src = url;\n this.bindElement.appendChild(this.iFrameElement);\n let activity = this.getContext();\n let onDestroy = activity.onDestroy;\n activity.onDestroy = () => {\n onDestroy.call(activity);\n PageStack.preClosePageHasIFrame(this.initIFrameHistoryLength);\n };\n }\n checkActivityResume() {\n if (!this.getContext().mResumed) {\n console.error('can\\'t call any webview\\'s methods when host activity was pause');\n }\n }\n goBack() {\n this.checkActivityResume();\n if (this.canGoBack()) {\n history.back();\n }\n }\n canGoBack() {\n this.checkActivityResume();\n if (this.initIFrameHistoryLength < 0)\n return false;\n return history.length > this.initIFrameHistoryLength;\n }\n loadUrl(url) {\n if (this.initIFrameHistoryLength > 0) {\n this.checkActivityResume();\n }\n if (!this.iFrameElement) {\n this.initIFrameElement(url);\n }\n this.iFrameElement.src = url;\n }\n reload() {\n if (!this.iFrameElement)\n return;\n try {\n this.iFrameElement.contentWindow.location.reload();\n }\n catch (e) {\n this.iFrameElement.src = this.iFrameElement.src;\n }\n }\n getUrl() {\n if (!this.iFrameElement)\n return '';\n try {\n return this.iFrameElement.contentWindow.document.URL;\n }\n catch (e) {\n return this.iFrameElement.src;\n }\n }\n getTitle() {\n try {\n return this.iFrameElement.contentWindow.document.title;\n }\n catch (e) {\n console.warn(e);\n return '';\n }\n }\n setWebViewClient(client) {\n this.mClient = client;\n }\n }\n webkit.WebView = WebView;\n })(webkit = android.webkit || (android.webkit = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class RotateAnimation extends Animation {\n constructor(fromDegrees, toDegrees, pivotXType = RotateAnimation.ABSOLUTE, pivotXValue = 0, pivotYType = RotateAnimation.ABSOLUTE, pivotYValue = 0) {\n super();\n this.mFromDegrees = 0;\n this.mToDegrees = 0;\n this.mPivotXType = RotateAnimation.ABSOLUTE;\n this.mPivotYType = RotateAnimation.ABSOLUTE;\n this.mPivotXValue = 0.0;\n this.mPivotYValue = 0.0;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mFromDegrees = fromDegrees;\n this.mToDegrees = toDegrees;\n this.mPivotXValue = pivotXValue;\n this.mPivotXType = pivotXType;\n this.mPivotYValue = pivotYValue;\n this.mPivotYType = pivotYType;\n this.initializePivotPoint();\n }\n initializePivotPoint() {\n if (this.mPivotXType == RotateAnimation.ABSOLUTE) {\n this.mPivotX = this.mPivotXValue;\n }\n if (this.mPivotYType == RotateAnimation.ABSOLUTE) {\n this.mPivotY = this.mPivotYValue;\n }\n }\n applyTransformation(interpolatedTime, t) {\n let degrees = this.mFromDegrees + ((this.mToDegrees - this.mFromDegrees) * interpolatedTime);\n let scale = this.getScaleFactor();\n if (this.mPivotX == 0.0 && this.mPivotY == 0.0) {\n t.getMatrix().setRotate(degrees);\n }\n else {\n t.getMatrix().setRotate(degrees, this.mPivotX * scale, this.mPivotY * scale);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mPivotX = this.resolveSize(this.mPivotXType, this.mPivotXValue, width, parentWidth);\n this.mPivotY = this.resolveSize(this.mPivotYType, this.mPivotYValue, height, parentHeight);\n }\n }\n animation.RotateAnimation = RotateAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_7) {\n class MenuItem {\n constructor(menu, group, id, categoryOrder, ordering, title) {\n this.mId = 0;\n this.mGroup = 0;\n this.mCategoryOrder = 0;\n this.mOrdering = 0;\n this.mVisible = true;\n this.mEnable = true;\n this.mMenu = menu;\n this.mId = id;\n this.mGroup = group;\n this.mCategoryOrder = categoryOrder;\n this.mOrdering = ordering;\n this.mTitle = title;\n }\n getItemId() {\n return this.mId;\n }\n getGroupId() {\n return this.mGroup;\n }\n getOrder() {\n return this.mOrdering;\n }\n setTitle(title) {\n this.mTitle = title;\n return this;\n }\n getTitle() {\n return this.mTitle;\n }\n setIcon(icon) {\n this.mIconDrawable = icon;\n return this;\n }\n getIcon() {\n return this.mIconDrawable;\n }\n setIntent(intent) {\n this.mIntent = intent;\n return this;\n }\n getIntent() {\n return this.mIntent;\n }\n setVisible(visible) {\n this.mVisible = visible;\n return this;\n }\n isVisible() {\n return this.mVisible;\n }\n setEnabled(enabled) {\n this.mEnable = enabled;\n return this;\n }\n isEnabled() {\n return this.mEnable;\n }\n setOnMenuItemClickListener(menuItemClickListener) {\n this.mClickListener = menuItemClickListener;\n return this;\n }\n setActionView(view) {\n this.mActionView = view;\n return this;\n }\n getActionView() {\n return this.mActionView;\n }\n invoke() {\n if (this.mClickListener != null && this.mClickListener.onMenuItemClick(this)) {\n return true;\n }\n if (this.mMenu.dispatchMenuItemSelected(this.mMenu.getRootMenu(), this)) {\n return true;\n }\n if (this.mIntent != null) {\n try {\n this.mMenu.getContext().startActivity(this.mIntent);\n return true;\n }\n catch (e) {\n android.util.Log.e(\"MenuItem\", \"Can't find activity to handle intent; ignoring\", e);\n }\n }\n return false;\n }\n }\n view_7.MenuItem = MenuItem;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var MenuItem = android.view.MenuItem;\n var ArrayList = java.util.ArrayList;\n class Menu {\n constructor(context) {\n this.mItems = new ArrayList();\n this.mVisibleItems = new ArrayList();\n this.mContext = context;\n }\n getContext() {\n return this.mContext;\n }\n add(...args) {\n if (args.length == 1)\n return this.addInternal(0, 0, 0, args[0]);\n return this.addInternal(args[0], args[1], args[2], args[3]);\n }\n addInternal(group, id, categoryOrder, title) {\n const ordering = 0;\n const item = new MenuItem(this, group, id, categoryOrder, ordering, title);\n this.mItems.add(item);\n this.onItemsChanged(true);\n return item;\n }\n removeItem(id) {\n this.removeItemAtInt(this.findItemIndex(id), true);\n }\n removeGroup(groupId) {\n const i = this.findGroupIndex(groupId);\n if (i >= 0) {\n const maxRemovable = this.mItems.size() - i;\n let numRemoved = 0;\n while ((numRemoved++ < maxRemovable) && (this.mItems.get(i).getGroupId() == groupId)) {\n this.removeItemAtInt(i, false);\n }\n this.onItemsChanged(true);\n }\n }\n removeItemAtInt(index, updateChildrenOnMenuViews) {\n if ((index < 0) || (index >= this.mItems.size())) {\n return;\n }\n this.mItems.remove(index);\n if (updateChildrenOnMenuViews) {\n this.onItemsChanged(true);\n }\n }\n clear() {\n this.mItems.clear();\n this.onItemsChanged(true);\n }\n setGroupVisible(group, visible) {\n const N = this.mItems.size();\n let changedAtLeastOneItem = false;\n for (let i = 0; i < N; i++) {\n let item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n if (item.setVisible(visible)) {\n changedAtLeastOneItem = true;\n }\n }\n }\n if (changedAtLeastOneItem) {\n this.onItemsChanged(true);\n }\n }\n setGroupEnabled(group, enabled) {\n const N = this.mItems.size();\n for (let i = 0; i < N; i++) {\n let item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n item.setEnabled(enabled);\n }\n }\n }\n hasVisibleItems() {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.isVisible()) {\n return true;\n }\n }\n return false;\n }\n findItem(id) {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.getItemId() == id) {\n return item;\n }\n }\n return null;\n }\n findItemIndex(id) {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.getItemId() == id) {\n return i;\n }\n }\n return -1;\n }\n findGroupIndex(group, start = 0) {\n const size = this.size();\n if (start < 0) {\n start = 0;\n }\n for (let i = start; i < size; i++) {\n const item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n return i;\n }\n }\n return -1;\n }\n size() {\n return this.mItems.size();\n }\n getItem(index) {\n return this.mItems.get(index);\n }\n onItemsChanged(structureChanged) {\n }\n getRootMenu() {\n return this;\n }\n setCallback(cb) {\n this.mCallback = cb;\n }\n dispatchMenuItemSelected(menu, item) {\n return this.mCallback != null && this.mCallback.onMenuItemSelected(menu, item);\n }\n getVisibleItems() {\n this.mVisibleItems.clear();\n const itemsSize = this.mItems.size();\n let item;\n for (let i = 0; i < itemsSize; i++) {\n item = this.mItems.get(i);\n if (item.isVisible()) {\n this.mVisibleItems.add(item);\n }\n }\n return this.mVisibleItems;\n }\n }\n view.Menu = Menu;\n (function (Menu) {\n Menu.USER_MASK = 0x0000ffff;\n Menu.USER_SHIFT = 0;\n Menu.CATEGORY_MASK = 0xffff0000;\n Menu.CATEGORY_SHIFT = 16;\n Menu.NONE = 0;\n Menu.FIRST = 1;\n Menu.CATEGORY_CONTAINER = 0x00010000;\n Menu.CATEGORY_SYSTEM = 0x00020000;\n Menu.CATEGORY_SECONDARY = 0x00030000;\n Menu.CATEGORY_ALTERNATIVE = 0x00040000;\n Menu.FLAG_APPEND_TO_GROUP = 0x0001;\n Menu.FLAG_PERFORM_NO_CLOSE = 0x0001;\n Menu.FLAG_ALWAYS_PERFORM_CLOSE = 0x0002;\n })(Menu = view.Menu || (view.Menu = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_8) {\n var menu;\n (function (menu_1) {\n var R = android.R;\n var ListPopupWindow = android.widget.ListPopupWindow;\n var KeyEvent = android.view.KeyEvent;\n var LayoutInflater = android.view.LayoutInflater;\n var View = android.view.View;\n var MeasureSpec = android.view.View.MeasureSpec;\n var BaseAdapter = android.widget.BaseAdapter;\n var FrameLayout = android.widget.FrameLayout;\n var PopupWindow = android.widget.PopupWindow;\n class MenuPopupHelper {\n constructor(context, menu, anchorView = null) {\n this.mPopupMaxWidth = 0;\n this.mContext = context;\n this.mInflater = LayoutInflater.from(context);\n this.mMenu = menu;\n const res = context.getResources();\n this.mPopupMaxWidth = Math.max(res.getDisplayMetrics().widthPixels / 2, res.getDisplayMetrics().density * 320);\n this.mAnchorView = anchorView;\n }\n setAnchorView(anchor) {\n this.mAnchorView = anchor;\n }\n show() {\n if (!this.tryShow()) {\n throw Error(`new IllegalStateException(\"MenuPopupHelper cannot be used without an anchor\")`);\n }\n }\n tryShow() {\n this.mPopup = new ListPopupWindow(this.mContext, R.attr.popupMenuStyle);\n this.mPopup.setOnDismissListener(this);\n this.mPopup.setOnItemClickListener(this);\n this.mAdapter = new MenuPopupHelper.MenuAdapter(this.mMenu, this);\n this.mPopup.setAdapter(this.mAdapter);\n this.mPopup.setModal(true);\n let anchor = this.mAnchorView;\n if (anchor != null) {\n const addGlobalListener = this.mTreeObserver == null;\n this.mTreeObserver = anchor.getViewTreeObserver();\n if (addGlobalListener) {\n this.mTreeObserver.addOnGlobalLayoutListener(this);\n }\n this.mPopup.setAnchorView(anchor);\n }\n else {\n return false;\n }\n this.mPopup.setContentWidth(Math.min(this.measureContentWidth(this.mAdapter), this.mPopupMaxWidth));\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this.mPopup.show();\n this.mPopup.getListView().setOnKeyListener(this);\n return true;\n }\n dismiss() {\n if (this.isShowing()) {\n this.mPopup.dismiss();\n }\n }\n onDismiss() {\n this.mPopup = null;\n if (this.mTreeObserver != null) {\n if (!this.mTreeObserver.isAlive()) {\n this.mTreeObserver = this.mAnchorView.getViewTreeObserver();\n }\n this.mTreeObserver.removeGlobalOnLayoutListener(this);\n this.mTreeObserver = null;\n }\n }\n isShowing() {\n return this.mPopup != null && this.mPopup.isShowing();\n }\n onItemClick(parent, view, position, id) {\n let adapter = this.mAdapter;\n let invoked = adapter.getItem(position).invoke();\n if (invoked)\n this.mPopup.dismiss();\n }\n onKey(v, keyCode, event) {\n if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_MENU) {\n this.dismiss();\n return true;\n }\n return false;\n }\n measureContentWidth(adapter) {\n let width = 0;\n let itemView = null;\n let itemType = 0;\n const widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n const heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n const count = adapter.getCount();\n for (let i = 0; i < count; i++) {\n const positionType = adapter.getItemViewType(i);\n if (positionType != itemType) {\n itemType = positionType;\n itemView = null;\n }\n if (this.mMeasureParent == null) {\n this.mMeasureParent = new FrameLayout(this.mContext);\n }\n itemView = adapter.getView(i, itemView, this.mMeasureParent);\n itemView.measure(widthMeasureSpec, heightMeasureSpec);\n width = Math.max(width, itemView.getMeasuredWidth());\n }\n return width;\n }\n onGlobalLayout() {\n if (this.isShowing()) {\n const anchor = this.mAnchorView;\n if (anchor == null || !anchor.isShown()) {\n this.dismiss();\n }\n else if (this.isShowing()) {\n try {\n this.mPopup.setContentWidth(Math.min(this.measureContentWidth(this.mAdapter), this.mPopupMaxWidth));\n }\n catch (e) {\n }\n this.mPopup.show();\n }\n }\n }\n }\n MenuPopupHelper.TAG = \"MenuPopupHelper\";\n MenuPopupHelper.ITEM_LAYOUT = R.layout.popup_menu_item_layout;\n menu_1.MenuPopupHelper = MenuPopupHelper;\n (function (MenuPopupHelper) {\n class MenuAdapter extends BaseAdapter {\n constructor(menu, arg) {\n super();\n this._MenuPopupHelper_this = arg;\n this.mAdapterMenu = menu;\n }\n getCount() {\n let items = this.mAdapterMenu.getVisibleItems();\n return items.size();\n }\n getItem(position) {\n let items = this.mAdapterMenu.getVisibleItems();\n return items.get(position);\n }\n getItemId(position) {\n return position;\n }\n getView(position, convertView, parent) {\n if (convertView == null) {\n convertView = this._MenuPopupHelper_this.mInflater.inflate(MenuPopupHelper.ITEM_LAYOUT, parent, false);\n }\n let itemData = this.getItem(position);\n convertView.setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);\n let titleView = convertView.findViewById('title');\n titleView.setText(itemData.getTitle());\n let iconView = convertView.findViewById('icon');\n let icon = itemData.getIcon();\n iconView.setImageDrawable(icon);\n if (icon != null) {\n iconView.setImageDrawable(icon);\n iconView.setVisibility(View.VISIBLE);\n }\n else {\n iconView.setVisibility(View.GONE);\n }\n convertView.setEnabled(itemData.isEnabled());\n return convertView;\n }\n notifyDataSetChanged() {\n super.notifyDataSetChanged();\n }\n }\n MenuPopupHelper.MenuAdapter = MenuAdapter;\n })(MenuPopupHelper = menu_1.MenuPopupHelper || (menu_1.MenuPopupHelper = {}));\n })(menu = view_8.menu || (view_8.menu = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var view;\n (function (view_9) {\n var DataSetObservable = android.database.DataSetObservable;\n class PagerAdapter {\n constructor() {\n this.mObservable = new DataSetObservable();\n }\n startUpdate(container) {\n }\n instantiateItem(container, position) {\n throw new Error(\"Required method instantiateItem was not overridden\");\n }\n destroyItem(container, position, object) {\n throw new Error(\"Required method destroyItem was not overridden\");\n }\n setPrimaryItem(container, position, object) {\n }\n finishUpdate(container) {\n }\n getItemPosition(object) {\n return PagerAdapter.POSITION_UNCHANGED;\n }\n notifyDataSetChanged() {\n this.mObservable.notifyChanged();\n }\n registerDataSetObserver(observer) {\n this.mObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mObservable.unregisterObserver(observer);\n }\n getPageTitle(position) {\n return null;\n }\n getPageWidth(position) {\n return 1;\n }\n }\n PagerAdapter.POSITION_UNCHANGED = -1;\n PagerAdapter.POSITION_NONE = -2;\n view_9.PagerAdapter = PagerAdapter;\n })(view = v4.view || (v4.view = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var view;\n (function (view_10) {\n var View = android.view.View;\n var Gravity = android.view.Gravity;\n var MeasureSpec = View.MeasureSpec;\n var OverScroller = android.widget.OverScroller;\n var ViewGroup = android.view.ViewGroup;\n var ArrayList = java.util.ArrayList;\n var Rect = android.graphics.Rect;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n var DataSetObserver = android.database.DataSetObserver;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var Resources = android.content.res.Resources;\n var Log = android.util.Log;\n var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n const TAG = \"ViewPager\";\n const DEBUG = false;\n const SymbolDecor = Symbol();\n class ViewPager extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mExpectedAdapterCount = 0;\n this.mItems = new ArrayList();\n this.mTempItem = new ItemInfo();\n this.mTempRect = new Rect();\n this.mCurItem = 0;\n this.mRestoredCurItem = -1;\n this.mPageMargin = 0;\n this.mTopPageBounds = 0;\n this.mBottomPageBounds = 0;\n this.mFirstOffset = -Number.MAX_VALUE;\n this.mLastOffset = Number.MAX_VALUE;\n this.mChildWidthMeasureSpec = 0;\n this.mChildHeightMeasureSpec = 0;\n this.mInLayout = false;\n this.mScrollingCacheEnabled = false;\n this.mPopulatePending = false;\n this.mOffscreenPageLimit = ViewPager.DEFAULT_OFFSCREEN_PAGES;\n this.mIsBeingDragged = false;\n this.mIsUnableToDrag = false;\n this.mDefaultGutterSize = 0;\n this.mGutterSize = 0;\n this.mLastMotionX = 0;\n this.mLastMotionY = 0;\n this.mInitialMotionX = 0;\n this.mInitialMotionY = 0;\n this.mActivePointerId = ViewPager.INVALID_POINTER;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mFlingDistance = 0;\n this.mCloseEnough = 0;\n this.mFakeDragging = false;\n this.mFakeDragBeginTime = 0;\n this.mFirstLayout = true;\n this.mNeedCalculatePageOffsets = false;\n this.mCalledSuper = false;\n this.mDecorChildCount = 0;\n this.mDrawingOrder = 0;\n this.mEndScrollRunnable = (() => {\n let ViewPager_this = this;\n class InnerClass {\n run() {\n ViewPager_this.setScrollState(ViewPager.SCROLL_STATE_IDLE);\n ViewPager_this.populate();\n }\n }\n return new InnerClass();\n })();\n this.mScrollState = ViewPager.SCROLL_STATE_IDLE;\n this.initViewPager();\n }\n initViewPager() {\n this.setWillNotDraw(false);\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n this.setFocusable(true);\n this.mScroller = new OverScroller(ViewPager.sInterpolator);\n let density = Resources.getDisplayMetrics().density;\n this.mTouchSlop = ViewConfiguration.get().getScaledPagingTouchSlop();\n this.mMinimumVelocity = Math.floor(ViewPager.MIN_FLING_VELOCITY * density);\n this.mMaximumVelocity = ViewConfiguration.get().getScaledMaximumFlingVelocity();\n this.mFlingDistance = Math.floor(ViewPager.MIN_DISTANCE_FOR_FLING * density);\n this.mCloseEnough = Math.floor(ViewPager.CLOSE_ENOUGH * density);\n this.mDefaultGutterSize = Math.floor(ViewPager.DEFAULT_GUTTER_SIZE * density);\n }\n onDetachedFromWindow() {\n this.removeCallbacks(this.mEndScrollRunnable);\n super.onDetachedFromWindow();\n }\n setScrollState(newState) {\n if (this.mScrollState == newState) {\n return;\n }\n this.mScrollState = newState;\n if (this.mPageTransformer != null) {\n this.enableLayers(newState != ViewPager.SCROLL_STATE_IDLE);\n }\n this.dispatchOnScrollStateChanged(newState);\n }\n setAdapter(adapter) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(this.mObserver);\n this.mAdapter.startUpdate(this);\n for (let i = 0; i < this.mItems.size(); i++) {\n const ii = this.mItems.get(i);\n this.mAdapter.destroyItem(this, ii.position, ii.object);\n }\n this.mAdapter.finishUpdate(this);\n this.mItems.clear();\n this.removeNonDecorViews();\n this.mCurItem = 0;\n this.scrollTo(0, 0);\n }\n const oldAdapter = this.mAdapter;\n this.mAdapter = adapter;\n this.mExpectedAdapterCount = 0;\n if (this.mAdapter != null) {\n if (this.mObserver == null) {\n this.mObserver = new PagerObserver(this);\n }\n this.mAdapter.registerDataSetObserver(this.mObserver);\n this.mPopulatePending = false;\n const wasFirstLayout = this.mFirstLayout;\n this.mFirstLayout = true;\n this.mExpectedAdapterCount = this.mAdapter.getCount();\n if (this.mRestoredCurItem >= 0) {\n this.setCurrentItemInternal(this.mRestoredCurItem, false, true);\n this.mRestoredCurItem = -1;\n }\n else if (!wasFirstLayout) {\n this.populate();\n }\n else {\n this.requestLayout();\n }\n }\n if (this.mAdapterChangeListener != null && oldAdapter != adapter) {\n this.mAdapterChangeListener.onAdapterChanged(oldAdapter, adapter);\n }\n }\n removeNonDecorViews() {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor) {\n this.removeViewAt(i);\n i--;\n }\n }\n }\n getAdapter() {\n return this.mAdapter;\n }\n setOnAdapterChangeListener(listener) {\n this.mAdapterChangeListener = listener;\n }\n getClientWidth() {\n return this.getMeasuredWidth() - this.getPaddingLeft() - this.getPaddingRight();\n }\n setCurrentItem(item, smoothScroll = !this.mFirstLayout) {\n this.mPopulatePending = false;\n this.setCurrentItemInternal(item, smoothScroll, false);\n }\n getCurrentItem() {\n return this.mCurItem;\n }\n setCurrentItemInternal(item, smoothScroll, always, velocity = 0) {\n if (this.mAdapter == null || this.mAdapter.getCount() <= 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n if (!always && this.mCurItem == item && this.mItems.size() != 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n if (item < 0) {\n item = 0;\n }\n else if (item >= this.mAdapter.getCount()) {\n item = this.mAdapter.getCount() - 1;\n }\n const pageLimit = this.mOffscreenPageLimit;\n if (item > (this.mCurItem + pageLimit) || item < (this.mCurItem - pageLimit)) {\n for (let i = 0; i < this.mItems.size(); i++) {\n this.mItems.get(i).scrolling = true;\n }\n }\n const dispatchSelected = this.mCurItem != item;\n if (this.mFirstLayout) {\n this.mCurItem = item;\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n this.requestLayout();\n }\n else {\n this.populate(item);\n this.scrollToItem(item, smoothScroll, velocity, dispatchSelected);\n }\n }\n scrollToItem(item, smoothScroll, velocity, dispatchSelected) {\n const curInfo = this.infoForPosition(item);\n let destX = 0;\n if (curInfo != null) {\n const width = this.getClientWidth();\n destX = Math.floor(width * Math.max(this.mFirstOffset, Math.min(curInfo.offset, this.mLastOffset)));\n }\n if (smoothScroll) {\n this.smoothScrollTo(destX, 0, velocity);\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n }\n else {\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n this.completeScroll(false);\n this.scrollTo(destX, 0);\n this.pageScrolled(destX);\n }\n }\n setOnPageChangeListener(listener) {\n this.mOnPageChangeListener = listener;\n }\n addOnPageChangeListener(listener) {\n if (this.mOnPageChangeListeners == null) {\n this.mOnPageChangeListeners = new ArrayList();\n }\n this.mOnPageChangeListeners.add(listener);\n }\n removeOnPageChangeListener(listener) {\n if (this.mOnPageChangeListeners != null) {\n this.mOnPageChangeListeners.remove(listener);\n }\n }\n clearOnPageChangeListeners() {\n if (this.mOnPageChangeListeners != null) {\n this.mOnPageChangeListeners.clear();\n }\n }\n setPageTransformer(reverseDrawingOrder, transformer) {\n const hasTransformer = transformer != null;\n const needsPopulate = hasTransformer != (this.mPageTransformer != null);\n this.mPageTransformer = transformer;\n this.setChildrenDrawingOrderEnabledCompat(hasTransformer);\n if (hasTransformer) {\n this.mDrawingOrder = reverseDrawingOrder ? ViewPager.DRAW_ORDER_REVERSE : ViewPager.DRAW_ORDER_FORWARD;\n }\n else {\n this.mDrawingOrder = ViewPager.DRAW_ORDER_DEFAULT;\n }\n if (needsPopulate)\n this.populate();\n }\n setChildrenDrawingOrderEnabledCompat(enable = true) {\n this.setChildrenDrawingOrderEnabled(enable);\n }\n getChildDrawingOrder(childCount, i) {\n const index = this.mDrawingOrder == ViewPager.DRAW_ORDER_REVERSE ? childCount - 1 - i : i;\n const result = this.mDrawingOrderedChildren.get(index).getLayoutParams().childIndex;\n return result;\n }\n setInternalPageChangeListener(listener) {\n let oldListener = this.mInternalPageChangeListener;\n this.mInternalPageChangeListener = listener;\n return oldListener;\n }\n getOffscreenPageLimit() {\n return this.mOffscreenPageLimit;\n }\n setOffscreenPageLimit(limit) {\n if (limit < ViewPager.DEFAULT_OFFSCREEN_PAGES) {\n Log.w(TAG, \"Requested offscreen page limit \" + limit + \" too small; defaulting to \" +\n ViewPager.DEFAULT_OFFSCREEN_PAGES);\n limit = ViewPager.DEFAULT_OFFSCREEN_PAGES;\n }\n if (limit != this.mOffscreenPageLimit) {\n this.mOffscreenPageLimit = limit;\n this.populate();\n }\n }\n setPageMargin(marginPixels) {\n const oldMargin = this.mPageMargin;\n this.mPageMargin = marginPixels;\n const width = this.getWidth();\n this.recomputeScrollPosition(width, width, marginPixels, oldMargin);\n this.requestLayout();\n }\n getPageMargin() {\n return this.mPageMargin;\n }\n setPageMarginDrawable(d) {\n this.mMarginDrawable = d;\n if (d != null)\n this.refreshDrawableState();\n this.setWillNotDraw(d == null);\n this.invalidate();\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || who == this.mMarginDrawable;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n const d = this.mMarginDrawable;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n distanceInfluenceForSnapDuration(f) {\n f -= 0.5;\n f *= 0.3 * Math.PI / 2.0;\n return Math.sin(f);\n }\n smoothScrollTo(x, y, velocity = 0) {\n if (this.getChildCount() == 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n let sx = this.getScrollX();\n let sy = this.getScrollY();\n let dx = x - sx;\n let dy = y - sy;\n if (dx == 0 && dy == 0) {\n this.completeScroll(false);\n this.populate();\n this.setScrollState(ViewPager.SCROLL_STATE_IDLE);\n return;\n }\n this.setScrollingCacheEnabled(true);\n this.setScrollState(ViewPager.SCROLL_STATE_SETTLING);\n const width = this.getClientWidth();\n const halfWidth = width / 2;\n const distanceRatio = Math.min(1, 1.0 * Math.abs(dx) / width);\n const distance = halfWidth + halfWidth *\n this.distanceInfluenceForSnapDuration(distanceRatio);\n let duration = 0;\n velocity = Math.abs(velocity);\n if (velocity > 0) {\n duration = 4 * Math.round(1000 * Math.abs(distance / velocity));\n }\n else {\n const pageWidth = width * this.mAdapter.getPageWidth(this.mCurItem);\n const pageDelta = Math.abs(dx) / (pageWidth + this.mPageMargin);\n duration = Math.floor((pageDelta + 1) * 100);\n }\n duration = Math.min(duration, ViewPager.MAX_SETTLE_DURATION);\n this.mScroller.startScroll(sx, sy, dx, dy, duration);\n this.postInvalidateOnAnimation();\n }\n addNewItem(position, index) {\n let ii = new ItemInfo();\n ii.position = position;\n ii.object = this.mAdapter.instantiateItem(this, position);\n ii.widthFactor = this.mAdapter.getPageWidth(position);\n if (index < 0 || index >= this.mItems.size()) {\n this.mItems.add(ii);\n }\n else {\n this.mItems.add(index, ii);\n }\n return ii;\n }\n dataSetChanged() {\n const adapterCount = this.mAdapter.getCount();\n this.mExpectedAdapterCount = adapterCount;\n let needPopulate = this.mItems.size() < this.mOffscreenPageLimit * 2 + 1 &&\n this.mItems.size() < adapterCount;\n let newCurrItem = this.mCurItem;\n let isUpdating = false;\n for (let i = 0; i < this.mItems.size(); i++) {\n const ii = this.mItems.get(i);\n const newPos = this.mAdapter.getItemPosition(ii.object);\n if (newPos == PagerAdapter.POSITION_UNCHANGED) {\n continue;\n }\n if (newPos == PagerAdapter.POSITION_NONE) {\n this.mItems.remove(i);\n i--;\n if (!isUpdating) {\n this.mAdapter.startUpdate(this);\n isUpdating = true;\n }\n this.mAdapter.destroyItem(this, ii.position, ii.object);\n needPopulate = true;\n if (this.mCurItem == ii.position) {\n newCurrItem = Math.max(0, Math.min(this.mCurItem, adapterCount - 1));\n needPopulate = true;\n }\n continue;\n }\n if (ii.position != newPos) {\n if (ii.position == this.mCurItem) {\n newCurrItem = newPos;\n }\n ii.position = newPos;\n needPopulate = true;\n }\n }\n if (isUpdating) {\n this.mAdapter.finishUpdate(this);\n }\n this.mItems.sort(ViewPager.COMPARATOR);\n if (needPopulate) {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor) {\n lp.widthFactor = 0;\n }\n }\n this.setCurrentItemInternal(newCurrItem, false, true);\n this.requestLayout();\n }\n }\n populate(newCurrentItem = this.mCurItem) {\n let oldCurInfo = null;\n let focusDirection = View.FOCUS_FORWARD;\n if (this.mCurItem != newCurrentItem) {\n focusDirection = this.mCurItem < newCurrentItem ? View.FOCUS_RIGHT : View.FOCUS_LEFT;\n oldCurInfo = this.infoForPosition(this.mCurItem);\n this.mCurItem = newCurrentItem;\n }\n if (this.mAdapter == null) {\n this.sortChildDrawingOrder();\n return;\n }\n if (this.mPopulatePending) {\n if (DEBUG)\n Log.i(TAG, \"populate is pending, skipping for now...\");\n this.sortChildDrawingOrder();\n return;\n }\n if (!this.isAttachedToWindow()) {\n return;\n }\n this.mAdapter.startUpdate(this);\n const pageLimit = this.mOffscreenPageLimit;\n const startPos = Math.max(0, this.mCurItem - pageLimit);\n const N = this.mAdapter.getCount();\n const endPos = Math.min(N - 1, this.mCurItem + pageLimit);\n if (N != this.mExpectedAdapterCount) {\n throw new Error(\"The application's PagerAdapter changed the adapter's\" +\n \" contents without calling PagerAdapter#notifyDataSetChanged!\" +\n \" Expected adapter item count: \" + this.mExpectedAdapterCount + \", found: \" + N +\n \" Pager id: \" + this.getId() +\n \" Pager class: \" + this.constructor.name +\n \" Problematic adapter: \" + this.mAdapter.constructor.name);\n }\n let curIndex = -1;\n let curItem = null;\n for (curIndex = 0; curIndex < this.mItems.size(); curIndex++) {\n const ii = this.mItems.get(curIndex);\n if (ii.position >= this.mCurItem) {\n if (ii.position == this.mCurItem)\n curItem = ii;\n break;\n }\n }\n if (curItem == null && N > 0) {\n curItem = this.addNewItem(this.mCurItem, curIndex);\n }\n if (curItem != null) {\n let extraWidthLeft = 0;\n let itemIndex = curIndex - 1;\n let ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n const clientWidth = this.getClientWidth();\n const leftWidthNeeded = clientWidth <= 0 ? 0 :\n 2 - curItem.widthFactor + this.getPaddingLeft() / clientWidth;\n for (let pos = this.mCurItem - 1; pos >= 0; pos--) {\n if (extraWidthLeft >= leftWidthNeeded && pos < startPos) {\n if (ii == null) {\n break;\n }\n if (pos == ii.position && !ii.scrolling) {\n this.mItems.remove(itemIndex);\n this.mAdapter.destroyItem(this, pos, ii.object);\n if (DEBUG) {\n Log.i(TAG, \"populate() - destroyItem() with pos: \" + pos +\n \" view: \" + ii.object);\n }\n itemIndex--;\n curIndex--;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n }\n else if (ii != null && pos == ii.position) {\n extraWidthLeft += ii.widthFactor;\n itemIndex--;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n else {\n ii = this.addNewItem(pos, itemIndex + 1);\n extraWidthLeft += ii.widthFactor;\n curIndex++;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n }\n let extraWidthRight = curItem.widthFactor;\n itemIndex = curIndex + 1;\n if (extraWidthRight < 2) {\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n const rightWidthNeeded = clientWidth <= 0 ? 0 :\n this.getPaddingRight() / clientWidth + 2;\n for (let pos = this.mCurItem + 1; pos < N; pos++) {\n if (extraWidthRight >= rightWidthNeeded && pos > endPos) {\n if (ii == null) {\n break;\n }\n if (pos == ii.position && !ii.scrolling) {\n this.mItems.remove(itemIndex);\n this.mAdapter.destroyItem(this, pos, ii.object);\n if (DEBUG) {\n Log.i(TAG, \"populate() - destroyItem() with pos: \" + pos +\n \" view: \" + ii.object);\n }\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n }\n else if (ii != null && pos == ii.position) {\n extraWidthRight += ii.widthFactor;\n itemIndex++;\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n else {\n ii = this.addNewItem(pos, itemIndex);\n itemIndex++;\n extraWidthRight += ii.widthFactor;\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n }\n }\n this.calculatePageOffsets(curItem, curIndex, oldCurInfo);\n }\n if (DEBUG) {\n Log.i(TAG, \"Current page list:\");\n for (let i = 0; i < this.mItems.size(); i++) {\n Log.i(TAG, \"#\" + i + \": page \" + this.mItems.get(i).position);\n }\n }\n this.mAdapter.setPrimaryItem(this, this.mCurItem, curItem != null ? curItem.object : null);\n this.mAdapter.finishUpdate(this);\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n lp.childIndex = i;\n if (!lp.isDecor && lp.widthFactor == 0) {\n const ii = this.infoForChild(child);\n if (ii != null) {\n lp.widthFactor = ii.widthFactor;\n lp.position = ii.position;\n }\n }\n }\n this.sortChildDrawingOrder();\n if (this.hasFocus()) {\n let currentFocused = this.findFocus();\n let ii = currentFocused != null ? this.infoForAnyChild(currentFocused) : null;\n if (ii == null || ii.position != this.mCurItem) {\n for (let i = 0; i < this.getChildCount(); i++) {\n let child = this.getChildAt(i);\n ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n if (child.requestFocus(focusDirection)) {\n break;\n }\n }\n }\n }\n }\n }\n sortChildDrawingOrder() {\n if (this.mDrawingOrder != ViewPager.DRAW_ORDER_DEFAULT) {\n if (this.mDrawingOrderedChildren == null) {\n this.mDrawingOrderedChildren = new ArrayList();\n }\n else {\n this.mDrawingOrderedChildren.clear();\n }\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n this.mDrawingOrderedChildren.add(child);\n }\n this.mDrawingOrderedChildren.sort(ViewPager.sPositionComparator);\n }\n }\n calculatePageOffsets(curItem, curIndex, oldCurInfo) {\n const N = this.mAdapter.getCount();\n const width = this.getClientWidth();\n const marginOffset = width > 0 ? this.mPageMargin / width : 0;\n if (oldCurInfo != null) {\n const oldCurPosition = oldCurInfo.position;\n if (oldCurPosition < curItem.position) {\n let itemIndex = 0;\n let ii = null;\n let offset = oldCurInfo.offset + oldCurInfo.widthFactor + marginOffset;\n for (let pos = oldCurPosition + 1; pos <= curItem.position && itemIndex < this.mItems.size(); pos++) {\n ii = this.mItems.get(itemIndex);\n while (pos > ii.position && itemIndex < this.mItems.size() - 1) {\n itemIndex++;\n ii = this.mItems.get(itemIndex);\n }\n while (pos < ii.position) {\n offset += this.mAdapter.getPageWidth(pos) + marginOffset;\n pos++;\n }\n ii.offset = offset;\n offset += ii.widthFactor + marginOffset;\n }\n }\n else if (oldCurPosition > curItem.position) {\n let itemIndex = this.mItems.size() - 1;\n let ii = null;\n let offset = oldCurInfo.offset;\n for (let pos = oldCurPosition - 1; pos >= curItem.position && itemIndex >= 0; pos--) {\n ii = this.mItems.get(itemIndex);\n while (pos < ii.position && itemIndex > 0) {\n itemIndex--;\n ii = this.mItems.get(itemIndex);\n }\n while (pos > ii.position) {\n offset -= this.mAdapter.getPageWidth(pos) + marginOffset;\n pos--;\n }\n offset -= ii.widthFactor + marginOffset;\n ii.offset = offset;\n }\n }\n }\n const itemCount = this.mItems.size();\n let offset = curItem.offset;\n let pos = curItem.position - 1;\n this.mFirstOffset = curItem.position == 0 ? curItem.offset : -Number.MAX_VALUE;\n this.mLastOffset = curItem.position == N - 1 ?\n curItem.offset + curItem.widthFactor - 1 : Number.MAX_VALUE;\n for (let i = curIndex - 1; i >= 0; i--, pos--) {\n const ii = this.mItems.get(i);\n while (pos > ii.position) {\n offset -= this.mAdapter.getPageWidth(pos--) + marginOffset;\n }\n offset -= ii.widthFactor + marginOffset;\n ii.offset = offset;\n if (ii.position == 0)\n this.mFirstOffset = offset;\n }\n offset = curItem.offset + curItem.widthFactor + marginOffset;\n pos = curItem.position + 1;\n for (let i = curIndex + 1; i < itemCount; i++, pos++) {\n const ii = this.mItems.get(i);\n while (pos < ii.position) {\n offset += this.mAdapter.getPageWidth(pos++) + marginOffset;\n }\n if (ii.position == N - 1) {\n this.mLastOffset = offset + ii.widthFactor - 1;\n }\n ii.offset = offset;\n offset += ii.widthFactor + marginOffset;\n }\n this.mNeedCalculatePageOffsets = false;\n }\n addView(...args) {\n if (args.length === 3 && args[2] instanceof ViewGroup.LayoutParams) {\n this._addViewOverride(args[0], args[1], args[2]);\n }\n else {\n super.addView(...args);\n }\n }\n _addViewOverride(child, index, params) {\n if (!this.checkLayoutParams(params)) {\n params = this.generateLayoutParams(params);\n }\n const lp = params;\n lp.isDecor = lp.isDecor || ViewPager.isImplDecor(child);\n if (this.mInLayout) {\n if (lp != null && lp.isDecor) {\n throw new Error(\"Cannot add pager decor view during layout\");\n }\n lp.needsMeasure = true;\n this.addViewInLayout(child, index, params);\n }\n else {\n super.addView(child, index, params);\n }\n if (ViewPager.USE_CACHE) {\n if (child.getVisibility() != View.GONE) {\n child.setDrawingCacheEnabled(this.mScrollingCacheEnabled);\n }\n else {\n child.setDrawingCacheEnabled(false);\n }\n }\n }\n removeView(view) {\n if (this.mInLayout) {\n this.removeViewInLayout(view);\n }\n else {\n super.removeView(view);\n }\n }\n infoForChild(child) {\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (this.mAdapter.isViewFromObject(child, ii.object)) {\n return ii;\n }\n }\n return null;\n }\n infoForAnyChild(child) {\n let parent;\n while ((parent = child.getParent()) != this) {\n if (parent == null || !(parent instanceof View)) {\n return null;\n }\n child = parent;\n }\n return this.infoForChild(child);\n }\n infoForPosition(position) {\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (ii.position == position) {\n return ii;\n }\n }\n return null;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mFirstLayout = true;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.setMeasuredDimension(ViewPager.getDefaultSize(0, widthMeasureSpec), ViewPager.getDefaultSize(0, heightMeasureSpec));\n const measuredWidth = this.getMeasuredWidth();\n const maxGutterSize = measuredWidth / 10;\n this.mGutterSize = Math.min(maxGutterSize, this.mDefaultGutterSize);\n let childWidthSize = measuredWidth - this.getPaddingLeft() - this.getPaddingRight();\n let childHeightSize = this.getMeasuredHeight() - this.getPaddingTop() - this.getPaddingBottom();\n let size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n if (lp != null && lp.isDecor) {\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n let widthMode = MeasureSpec.AT_MOST;\n let heightMode = MeasureSpec.AT_MOST;\n let consumeVertical = vgrav == Gravity.TOP || vgrav == Gravity.BOTTOM;\n let consumeHorizontal = hgrav == Gravity.LEFT || hgrav == Gravity.RIGHT;\n if (consumeVertical) {\n widthMode = MeasureSpec.EXACTLY;\n }\n else if (consumeHorizontal) {\n heightMode = MeasureSpec.EXACTLY;\n }\n let widthSize = childWidthSize;\n let heightSize = childHeightSize;\n if (lp.width != ViewPager.LayoutParams.WRAP_CONTENT) {\n widthMode = MeasureSpec.EXACTLY;\n if (lp.width != ViewPager.LayoutParams.FILL_PARENT) {\n widthSize = lp.width;\n }\n }\n if (lp.height != ViewPager.LayoutParams.WRAP_CONTENT) {\n heightMode = MeasureSpec.EXACTLY;\n if (lp.height != ViewPager.LayoutParams.FILL_PARENT) {\n heightSize = lp.height;\n }\n }\n const widthSpec = MeasureSpec.makeMeasureSpec(widthSize, widthMode);\n const heightSpec = MeasureSpec.makeMeasureSpec(heightSize, heightMode);\n child.measure(widthSpec, heightSpec);\n if (consumeVertical) {\n childHeightSize -= child.getMeasuredHeight();\n }\n else if (consumeHorizontal) {\n childWidthSize -= child.getMeasuredWidth();\n }\n }\n }\n }\n this.mChildWidthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);\n this.mChildHeightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeightSize, MeasureSpec.EXACTLY);\n this.mInLayout = true;\n this.populate();\n this.mInLayout = false;\n size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n if (DEBUG)\n Log.v(TAG, \"Measuring #\" + i + \" \" + child\n + \": \" + this.mChildWidthMeasureSpec);\n const lp = child.getLayoutParams();\n if (lp == null || !lp.isDecor) {\n const widthSpec = MeasureSpec.makeMeasureSpec((childWidthSize * lp.widthFactor), MeasureSpec.EXACTLY);\n child.measure(widthSpec, this.mChildHeightMeasureSpec);\n }\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n if (w != oldw) {\n this.recomputeScrollPosition(w, oldw, this.mPageMargin, this.mPageMargin);\n }\n }\n recomputeScrollPosition(width, oldWidth, margin, oldMargin) {\n if (oldWidth > 0 && !this.mItems.isEmpty()) {\n const widthWithMargin = width - this.getPaddingLeft() - this.getPaddingRight() + margin;\n const oldWidthWithMargin = oldWidth - this.getPaddingLeft() - this.getPaddingRight()\n + oldMargin;\n const xpos = this.getScrollX();\n const pageOffset = xpos / oldWidthWithMargin;\n const newOffsetPixels = Math.floor(pageOffset * widthWithMargin);\n this.scrollTo(newOffsetPixels, this.getScrollY());\n if (!this.mScroller.isFinished()) {\n const newDuration = this.mScroller.getDuration() - this.mScroller.timePassed();\n let targetInfo = this.infoForPosition(this.mCurItem);\n this.mScroller.startScroll(newOffsetPixels, 0, Math.floor(targetInfo.offset * width), 0, newDuration);\n }\n }\n else {\n const ii = this.infoForPosition(this.mCurItem);\n const scrollOffset = ii != null ? Math.min(ii.offset, this.mLastOffset) : 0;\n const scrollPos = Math.floor(scrollOffset *\n (width - this.getPaddingLeft() - this.getPaddingRight()));\n if (scrollPos != this.getScrollX()) {\n this.completeScroll(false);\n this.scrollTo(scrollPos, this.getScrollY());\n }\n }\n }\n onLayout(changed, l, t, r, b) {\n const count = this.getChildCount();\n let width = r - l;\n let height = b - t;\n let paddingLeft = this.getPaddingLeft();\n let paddingTop = this.getPaddingTop();\n let paddingRight = this.getPaddingRight();\n let paddingBottom = this.getPaddingBottom();\n const scrollX = this.getScrollX();\n let decorCount = 0;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n let childLeft = 0;\n let childTop = 0;\n if (lp.isDecor) {\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (hgrav) {\n default:\n childLeft = paddingLeft;\n break;\n case Gravity.LEFT:\n childLeft = paddingLeft;\n paddingLeft += child.getMeasuredWidth();\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = Math.max((width - child.getMeasuredWidth()) / 2, paddingLeft);\n break;\n case Gravity.RIGHT:\n childLeft = width - paddingRight - child.getMeasuredWidth();\n paddingRight += child.getMeasuredWidth();\n break;\n }\n switch (vgrav) {\n default:\n childTop = paddingTop;\n break;\n case Gravity.TOP:\n childTop = paddingTop;\n paddingTop += child.getMeasuredHeight();\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = Math.max((height - child.getMeasuredHeight()) / 2, paddingTop);\n break;\n case Gravity.BOTTOM:\n childTop = height - paddingBottom - child.getMeasuredHeight();\n paddingBottom += child.getMeasuredHeight();\n break;\n }\n childLeft += scrollX;\n child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(), childTop + child.getMeasuredHeight());\n decorCount++;\n }\n }\n }\n const childWidth = width - paddingLeft - paddingRight;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n let ii;\n if (!lp.isDecor && (ii = this.infoForChild(child)) != null) {\n let loff = Math.floor(childWidth * ii.offset);\n let childLeft = paddingLeft + loff;\n let childTop = paddingTop;\n if (lp.needsMeasure) {\n lp.needsMeasure = false;\n const widthSpec = MeasureSpec.makeMeasureSpec(Math.floor(childWidth * lp.widthFactor), MeasureSpec.EXACTLY);\n const heightSpec = MeasureSpec.makeMeasureSpec(Math.floor(height - paddingTop - paddingBottom), MeasureSpec.EXACTLY);\n child.measure(widthSpec, heightSpec);\n }\n if (DEBUG)\n Log.v(TAG, \"Positioning #\" + i + \" \" + child + \" f=\" + ii.object\n + \":\" + childLeft + \",\" + childTop + \" \" + child.getMeasuredWidth()\n + \"x\" + child.getMeasuredHeight());\n child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(), childTop + child.getMeasuredHeight());\n }\n }\n }\n this.mTopPageBounds = paddingTop;\n this.mBottomPageBounds = height - paddingBottom;\n this.mDecorChildCount = decorCount;\n if (this.mFirstLayout) {\n this.scrollToItem(this.mCurItem, false, 0, false);\n }\n this.mFirstLayout = false;\n }\n computeScroll() {\n if (!this.mScroller.isFinished() && this.mScroller.computeScrollOffset()) {\n let oldX = this.getScrollX();\n let oldY = this.getScrollY();\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n this.scrollTo(x, y);\n if (!this.pageScrolled(x)) {\n this.mScroller.abortAnimation();\n this.scrollTo(0, y);\n }\n }\n this.postInvalidateOnAnimation();\n return;\n }\n this.completeScroll(true);\n }\n pageScrolled(xpos) {\n if (this.mItems.size() == 0) {\n this.mCalledSuper = false;\n this.onPageScrolled(0, 0, 0);\n if (!this.mCalledSuper) {\n throw new Error(\"onPageScrolled did not call superclass implementation\");\n }\n return false;\n }\n const ii = this.infoForCurrentScrollPosition();\n const width = this.getClientWidth();\n const widthWithMargin = width + this.mPageMargin;\n const marginOffset = this.mPageMargin / width;\n const currentPage = ii.position;\n const pageOffset = ((xpos / width) - ii.offset) / (ii.widthFactor + marginOffset);\n const offsetPixels = Math.floor(pageOffset * widthWithMargin);\n this.mCalledSuper = false;\n this.onPageScrolled(currentPage, pageOffset, offsetPixels);\n if (!this.mCalledSuper) {\n throw new Error(\"onPageScrolled did not call superclass implementation\");\n }\n return true;\n }\n onPageScrolled(position, offset, offsetPixels) {\n if (this.mDecorChildCount > 0) {\n const scrollX = this.getScrollX();\n let paddingLeft = this.getPaddingLeft();\n let paddingRight = this.getPaddingRight();\n const width = this.getWidth();\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor)\n continue;\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n let childLeft = 0;\n switch (hgrav) {\n default:\n childLeft = paddingLeft;\n break;\n case Gravity.LEFT:\n childLeft = paddingLeft;\n paddingLeft += child.getWidth();\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = Math.max((width - child.getMeasuredWidth()) / 2, paddingLeft);\n break;\n case Gravity.RIGHT:\n childLeft = width - paddingRight - child.getMeasuredWidth();\n paddingRight += child.getMeasuredWidth();\n break;\n }\n childLeft += scrollX;\n const childOffset = childLeft - child.getLeft();\n if (childOffset != 0) {\n child.offsetLeftAndRight(childOffset);\n }\n }\n }\n this.dispatchOnPageScrolled(position, offset, offsetPixels);\n if (this.mPageTransformer != null) {\n const scrollX = this.getScrollX();\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (lp.isDecor)\n continue;\n const transformPos = (child.getLeft() - scrollX) / this.getClientWidth();\n this.mPageTransformer.transformPage(child, transformPos);\n }\n }\n this.mCalledSuper = true;\n }\n dispatchOnPageScrolled(position, offset, offsetPixels) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageScrolled(position, offset, offsetPixels);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageScrolled(position, offset, offsetPixels);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageScrolled(position, offset, offsetPixels);\n }\n }\n dispatchOnPageSelected(position) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageSelected(position);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageSelected(position);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageSelected(position);\n }\n }\n dispatchOnScrollStateChanged(state) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageScrollStateChanged(state);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageScrollStateChanged(state);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageScrollStateChanged(state);\n }\n }\n completeScroll(postEvents) {\n let needPopulate = this.mScrollState == ViewPager.SCROLL_STATE_SETTLING;\n if (needPopulate) {\n this.setScrollingCacheEnabled(false);\n this.mScroller.abortAnimation();\n let oldX = this.getScrollX();\n let oldY = this.getScrollY();\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n this.scrollTo(x, y);\n if (x != oldX) {\n this.pageScrolled(x);\n }\n }\n }\n this.mPopulatePending = false;\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (ii.scrolling) {\n needPopulate = true;\n ii.scrolling = false;\n }\n }\n if (needPopulate) {\n if (postEvents) {\n this.postOnAnimation(this.mEndScrollRunnable);\n }\n else {\n this.mEndScrollRunnable.run();\n }\n }\n }\n isGutterDrag(x, dx) {\n return (x < this.mGutterSize && dx > 0) || (x > this.getWidth() - this.mGutterSize && dx < 0);\n }\n enableLayers(enable) {\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction() & MotionEvent.ACTION_MASK;\n if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {\n if (DEBUG)\n Log.v(TAG, \"Intercept done!\");\n this.resetTouch();\n return false;\n }\n if (action != MotionEvent.ACTION_DOWN) {\n if (this.mIsBeingDragged) {\n if (DEBUG)\n Log.v(TAG, \"Intercept returning true!\");\n return true;\n }\n if (this.mIsUnableToDrag) {\n if (DEBUG)\n Log.v(TAG, \"Intercept returning false!\");\n return false;\n }\n }\n switch (action) {\n case MotionEvent.ACTION_MOVE: {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == ViewPager.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n const x = ev.getX(pointerIndex);\n const dx = x - this.mLastMotionX;\n const xDiff = Math.abs(dx);\n const y = ev.getY(pointerIndex);\n const yDiff = Math.abs(y - this.mInitialMotionY);\n if (DEBUG)\n Log.v(TAG, \"Moved x to \" + x + \",\" + y + \" diff=\" + xDiff + \",\" + yDiff);\n if (dx != 0 && !this.isGutterDrag(this.mLastMotionX, dx) &&\n this.canScroll(this, false, Math.floor(dx), Math.floor(x), Math.floor(y))) {\n this.mLastMotionX = x;\n this.mLastMotionY = y;\n this.mIsUnableToDrag = true;\n return false;\n }\n if (xDiff > this.mTouchSlop && xDiff * 0.5 > yDiff) {\n if (DEBUG)\n Log.v(TAG, \"Starting drag!\");\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.mLastMotionX = dx > 0 ? this.mInitialMotionX + this.mTouchSlop :\n this.mInitialMotionX - this.mTouchSlop;\n this.mLastMotionY = y;\n this.setScrollingCacheEnabled(true);\n }\n else if (yDiff > this.mTouchSlop) {\n if (DEBUG)\n Log.v(TAG, \"Starting unable to drag!\");\n this.mIsUnableToDrag = true;\n }\n if (this.mIsBeingDragged) {\n if (this.performDrag(x)) {\n this.postInvalidateOnAnimation();\n }\n }\n break;\n }\n case MotionEvent.ACTION_DOWN: {\n this.mLastMotionX = this.mInitialMotionX = ev.getX();\n this.mLastMotionY = this.mInitialMotionY = ev.getY();\n this.mActivePointerId = ev.getPointerId(0);\n this.mIsUnableToDrag = false;\n this.mScroller.computeScrollOffset();\n if (this.mScrollState == ViewPager.SCROLL_STATE_SETTLING &&\n Math.abs(this.mScroller.getFinalX() - this.mScroller.getCurrX()) > this.mCloseEnough) {\n this.mScroller.abortAnimation();\n this.mPopulatePending = false;\n this.populate();\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n }\n else {\n this.completeScroll(false);\n this.mIsBeingDragged = false;\n }\n if (DEBUG)\n Log.v(TAG, \"Down at \" + this.mLastMotionX + \",\" + this.mLastMotionY\n + \" mIsBeingDragged=\" + this.mIsBeingDragged\n + \"mIsUnableToDrag=\" + this.mIsUnableToDrag);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n if (this.mFakeDragging) {\n return true;\n }\n if (ev.getAction() == MotionEvent.ACTION_DOWN && ev.getEdgeFlags() != 0) {\n return false;\n }\n if (this.mAdapter == null || this.mAdapter.getCount() == 0) {\n return false;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n let needsInvalidate = false;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN: {\n this.mScroller.abortAnimation();\n this.mPopulatePending = false;\n this.populate();\n this.mLastMotionX = this.mInitialMotionX = ev.getX();\n this.mLastMotionY = this.mInitialMotionY = ev.getY();\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n if (!this.mIsBeingDragged) {\n const pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n needsInvalidate = this.resetTouch();\n break;\n }\n const x = ev.getX(pointerIndex);\n const xDiff = Math.abs(x - this.mLastMotionX);\n const y = ev.getY(pointerIndex);\n const yDiff = Math.abs(y - this.mLastMotionY);\n if (DEBUG)\n Log.v(TAG, \"Moved x to \" + x + \",\" + y + \" diff=\" + xDiff + \",\" + yDiff);\n if (xDiff > this.mTouchSlop && xDiff > yDiff) {\n if (DEBUG)\n Log.v(TAG, \"Starting drag!\");\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.mLastMotionX = x - this.mInitialMotionX > 0 ? this.mInitialMotionX + this.mTouchSlop :\n this.mInitialMotionX - this.mTouchSlop;\n this.mLastMotionY = y;\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.setScrollingCacheEnabled(true);\n let parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n }\n if (this.mIsBeingDragged) {\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(activePointerIndex);\n needsInvalidate = needsInvalidate || this.performDrag(x);\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = velocityTracker.getXVelocity(this.mActivePointerId);\n this.mPopulatePending = true;\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n const ii = this.infoForCurrentScrollPosition();\n const currentPage = ii.position;\n const pageOffset = ((scrollX / width) - ii.offset) / ii.widthFactor;\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(activePointerIndex);\n const totalDelta = (x - this.mInitialMotionX);\n let nextPage = this.determineTargetPage(currentPage, pageOffset, initialVelocity, totalDelta);\n this.setCurrentItemInternal(nextPage, true, true, initialVelocity);\n needsInvalidate = this.resetTouch();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged) {\n this.scrollToItem(this.mCurItem, true, 0, false);\n needsInvalidate = this.resetTouch();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN: {\n const index = ev.getActionIndex();\n const x = ev.getX(index);\n this.mLastMotionX = x;\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionX = ev.getX(ev.findPointerIndex(this.mActivePointerId));\n break;\n }\n if (needsInvalidate) {\n this.postInvalidateOnAnimation();\n }\n return true;\n }\n resetTouch() {\n let needsInvalidate = false;\n this.mActivePointerId = ViewPager.INVALID_POINTER;\n this.endDrag();\n return needsInvalidate;\n }\n requestParentDisallowInterceptTouchEvent(disallowIntercept) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n }\n performDrag(x) {\n let needsInvalidate = false;\n const deltaX = this.mLastMotionX - x;\n this.mLastMotionX = x;\n let oldScrollX = this.getScrollX();\n let scrollX = oldScrollX + deltaX;\n const width = this.getClientWidth();\n let leftBound = width * this.mFirstOffset;\n let rightBound = width * this.mLastOffset;\n let leftAbsolute = true;\n let rightAbsolute = true;\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n if (firstItem.position != 0) {\n leftAbsolute = false;\n leftBound = firstItem.offset * width;\n }\n if (lastItem.position != this.mAdapter.getCount() - 1) {\n rightAbsolute = false;\n rightBound = lastItem.offset * width;\n }\n if (scrollX < leftBound) {\n if (leftAbsolute) {\n let over = leftBound - scrollX;\n needsInvalidate = false;\n }\n scrollX -= deltaX / 2;\n }\n else if (scrollX > rightBound) {\n if (rightAbsolute) {\n let over = scrollX - rightBound;\n needsInvalidate = false;\n }\n scrollX -= deltaX / 2;\n }\n this.mLastMotionX += scrollX - Math.floor(scrollX);\n this.scrollTo(scrollX, this.getScrollY());\n this.pageScrolled(scrollX);\n return needsInvalidate;\n }\n infoForCurrentScrollPosition() {\n const width = this.getClientWidth();\n const scrollOffset = width > 0 ? this.getScrollX() / width : 0;\n const marginOffset = width > 0 ? this.mPageMargin / width : 0;\n let lastPos = -1;\n let lastOffset = 0;\n let lastWidth = 0;\n let first = true;\n let lastItem = null;\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n let offset;\n if (!first && ii.position != lastPos + 1) {\n ii = this.mTempItem;\n ii.offset = lastOffset + lastWidth + marginOffset;\n ii.position = lastPos + 1;\n ii.widthFactor = this.mAdapter.getPageWidth(ii.position);\n i--;\n }\n offset = ii.offset;\n const leftBound = offset;\n const rightBound = offset + ii.widthFactor + marginOffset;\n if (first || scrollOffset >= leftBound) {\n if (scrollOffset < rightBound || i == this.mItems.size() - 1) {\n return ii;\n }\n }\n else {\n return lastItem;\n }\n first = false;\n lastPos = ii.position;\n lastOffset = offset;\n lastWidth = ii.widthFactor;\n lastItem = ii;\n }\n return lastItem;\n }\n determineTargetPage(currentPage, pageOffset, velocity, deltaX) {\n let targetPage;\n if (Math.abs(deltaX) > this.mFlingDistance && Math.abs(velocity) > this.mMinimumVelocity) {\n targetPage = velocity > 0 ? currentPage : currentPage + 1;\n }\n else {\n const truncator = currentPage >= this.mCurItem ? 0.4 : 0.6;\n targetPage = Math.floor(currentPage + pageOffset + truncator);\n }\n if (this.mItems.size() > 0) {\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n targetPage = Math.max(firstItem.position, Math.min(targetPage, lastItem.position));\n }\n return targetPage;\n }\n draw(canvas) {\n super.draw(canvas);\n let needsInvalidate = false;\n if (needsInvalidate) {\n this.postInvalidateOnAnimation();\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mPageMargin > 0 && this.mMarginDrawable != null && this.mItems.size() > 0 && this.mAdapter != null) {\n const scrollX = this.getScrollX();\n const width = this.getWidth();\n const marginOffset = this.mPageMargin / width;\n let itemIndex = 0;\n let ii = this.mItems.get(0);\n let offset = ii.offset;\n const itemCount = this.mItems.size();\n const firstPos = ii.position;\n const lastPos = this.mItems.get(itemCount - 1).position;\n for (let pos = firstPos; pos < lastPos; pos++) {\n while (pos > ii.position && itemIndex < itemCount) {\n ii = this.mItems.get(++itemIndex);\n }\n let drawAt;\n if (pos == ii.position) {\n drawAt = (ii.offset + ii.widthFactor) * width;\n offset = ii.offset + ii.widthFactor + marginOffset;\n }\n else {\n let widthFactor = this.mAdapter.getPageWidth(pos);\n drawAt = (offset + widthFactor) * width;\n offset += widthFactor + marginOffset;\n }\n if (drawAt + this.mPageMargin > scrollX) {\n this.mMarginDrawable.setBounds(drawAt, this.mTopPageBounds, drawAt + this.mPageMargin, this.mBottomPageBounds);\n this.mMarginDrawable.draw(canvas);\n }\n if (drawAt > scrollX + width) {\n break;\n }\n }\n }\n }\n beginFakeDrag() {\n if (this.mIsBeingDragged) {\n return false;\n }\n this.mFakeDragging = true;\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.mInitialMotionX = this.mLastMotionX = 0;\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n const time = android.os.SystemClock.uptimeMillis();\n const ev = MotionEvent.obtainWithAction(time, time, MotionEvent.ACTION_DOWN, 0, 0, 0);\n this.mVelocityTracker.addMovement(ev);\n ev.recycle();\n this.mFakeDragBeginTime = time;\n return true;\n }\n endFakeDrag() {\n if (!this.mFakeDragging) {\n throw new Error(\"No fake drag in progress. Call beginFakeDrag first.\");\n }\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));\n this.mPopulatePending = true;\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n const ii = this.infoForCurrentScrollPosition();\n const currentPage = ii.position;\n const pageOffset = ((scrollX / width) - ii.offset) / ii.widthFactor;\n const totalDelta = Math.floor(this.mLastMotionX - this.mInitialMotionX);\n let nextPage = this.determineTargetPage(currentPage, pageOffset, initialVelocity, totalDelta);\n this.setCurrentItemInternal(nextPage, true, true, initialVelocity);\n this.endDrag();\n this.mFakeDragging = false;\n }\n fakeDragBy(xOffset) {\n if (!this.mFakeDragging) {\n throw new Error(\"No fake drag in progress. Call beginFakeDrag first.\");\n }\n this.mLastMotionX += xOffset;\n let oldScrollX = this.getScrollX();\n let scrollX = oldScrollX - xOffset;\n const width = this.getClientWidth();\n let leftBound = width * this.mFirstOffset;\n let rightBound = width * this.mLastOffset;\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n if (firstItem.position != 0) {\n leftBound = firstItem.offset * width;\n }\n if (lastItem.position != this.mAdapter.getCount() - 1) {\n rightBound = lastItem.offset * width;\n }\n if (scrollX < leftBound) {\n scrollX = leftBound;\n }\n else if (scrollX > rightBound) {\n scrollX = rightBound;\n }\n this.mLastMotionX += scrollX - Math.floor(scrollX);\n this.scrollTo(Math.floor(scrollX), this.getScrollY());\n this.pageScrolled(Math.floor(scrollX));\n const time = android.os.SystemClock.uptimeMillis();\n const ev = MotionEvent.obtainWithAction(this.mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE, this.mLastMotionX, 0, 0);\n this.mVelocityTracker.addMovement(ev);\n ev.recycle();\n }\n isFakeDragging() {\n return this.mFakeDragging;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = ev.getActionIndex();\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionX = ev.getX(newPointerIndex);\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n endDrag() {\n this.mIsBeingDragged = false;\n this.mIsUnableToDrag = false;\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n setScrollingCacheEnabled(enabled) {\n if (this.mScrollingCacheEnabled != enabled) {\n this.mScrollingCacheEnabled = enabled;\n if (ViewPager.USE_CACHE) {\n const size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n child.setDrawingCacheEnabled(enabled);\n }\n }\n }\n }\n }\n canScrollHorizontally(direction) {\n if (this.mAdapter == null) {\n return false;\n }\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n if (direction < 0) {\n return (scrollX > (width * this.mFirstOffset));\n }\n else if (direction > 0) {\n return (scrollX < (width * this.mLastOffset));\n }\n else {\n return false;\n }\n }\n canScroll(v, checkV, dx, x, y) {\n if (v instanceof ViewGroup) {\n const group = v;\n const scrollX = v.getScrollX();\n const scrollY = v.getScrollY();\n const count = group.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = group.getChildAt(i);\n if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&\n y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&\n this.canScroll(child, true, dx, x + scrollX - child.getLeft(), y + scrollY - child.getTop())) {\n return true;\n }\n }\n }\n return checkV && v.canScrollHorizontally(-dx);\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n handled = this.arrowScroll(View.FOCUS_LEFT);\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n handled = this.arrowScroll(View.FOCUS_RIGHT);\n break;\n case KeyEvent.KEYCODE_TAB:\n if (event.isShiftPressed()) {\n handled = this.arrowScroll(View.FOCUS_BACKWARD);\n }\n else {\n handled = this.arrowScroll(View.FOCUS_FORWARD);\n }\n break;\n }\n }\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this) {\n currentFocused = null;\n }\n else if (currentFocused != null) {\n let isChild = false;\n for (let parent = currentFocused.getParent(); parent instanceof ViewGroup; parent = parent.getParent()) {\n if (parent == this) {\n isChild = true;\n break;\n }\n }\n if (!isChild) {\n const sb = new java.lang.StringBuilder();\n sb.append(currentFocused.toString());\n for (let parent = currentFocused.getParent(); parent instanceof ViewGroup; parent = parent.getParent()) {\n sb.append(\" => \").append(parent.toString());\n }\n Log.e(TAG, \"arrowScroll tried to find focus based on non-child \" +\n \"current focused view \" + sb.toString());\n currentFocused = null;\n }\n }\n let handled = false;\n let nextFocused = android.view.FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n if (nextFocused != null && nextFocused != currentFocused) {\n if (direction == View.FOCUS_LEFT) {\n const nextLeft = this.getChildRectInPagerCoordinates(this.mTempRect, nextFocused).left;\n const currLeft = this.getChildRectInPagerCoordinates(this.mTempRect, currentFocused).left;\n if (currentFocused != null && nextLeft >= currLeft) {\n handled = this.pageLeft();\n }\n else {\n handled = nextFocused.requestFocus();\n }\n }\n else if (direction == View.FOCUS_RIGHT) {\n const nextLeft = this.getChildRectInPagerCoordinates(this.mTempRect, nextFocused).left;\n const currLeft = this.getChildRectInPagerCoordinates(this.mTempRect, currentFocused).left;\n if (currentFocused != null && nextLeft <= currLeft) {\n handled = this.pageRight();\n }\n else {\n handled = nextFocused.requestFocus();\n }\n }\n }\n else if (direction == View.FOCUS_LEFT || direction == View.FOCUS_BACKWARD) {\n handled = this.pageLeft();\n }\n else if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_FORWARD) {\n handled = this.pageRight();\n }\n return handled;\n }\n getChildRectInPagerCoordinates(outRect, child) {\n if (outRect == null) {\n outRect = new Rect();\n }\n if (child == null) {\n outRect.set(0, 0, 0, 0);\n return outRect;\n }\n outRect.left = child.getLeft();\n outRect.right = child.getRight();\n outRect.top = child.getTop();\n outRect.bottom = child.getBottom();\n let parent = child.getParent();\n while (parent instanceof ViewGroup && parent != this) {\n const group = parent;\n outRect.left += group.getLeft();\n outRect.right += group.getRight();\n outRect.top += group.getTop();\n outRect.bottom += group.getBottom();\n parent = group.getParent();\n }\n return outRect;\n }\n pageLeft() {\n if (this.mCurItem > 0) {\n this.setCurrentItem(this.mCurItem - 1, true);\n return true;\n }\n return false;\n }\n pageRight() {\n if (this.mAdapter != null && this.mCurItem < (this.mAdapter.getCount() - 1)) {\n this.setCurrentItem(this.mCurItem + 1, true);\n return true;\n }\n return false;\n }\n addFocusables(views, direction, focusableMode) {\n const focusableCount = views.size();\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n child.addFocusables(views, direction, focusableMode);\n }\n }\n }\n }\n if (descendantFocusability != ViewGroup.FOCUS_AFTER_DESCENDANTS ||\n (focusableCount == views.size())) {\n if (!this.isFocusable()) {\n return;\n }\n if ((focusableMode & ViewGroup.FOCUSABLES_TOUCH_MODE) == ViewGroup.FOCUSABLES_TOUCH_MODE &&\n this.isInTouchMode() && !this.isFocusableInTouchMode()) {\n return;\n }\n if (views != null) {\n views.add(this);\n }\n }\n }\n addTouchables(views) {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n child.addTouchables(views);\n }\n }\n }\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n let index;\n let increment;\n let end;\n let count = this.getChildCount();\n if ((direction & View.FOCUS_FORWARD) != 0) {\n index = 0;\n increment = 1;\n end = count;\n }\n else {\n index = count - 1;\n increment = -1;\n end = -1;\n }\n for (let i = index; i != end; i += increment) {\n let child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n if (child.requestFocus(direction, previouslyFocusedRect)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n generateDefaultLayoutParams() {\n return new ViewPager.LayoutParams();\n }\n generateLayoutParams(p) {\n return this.generateDefaultLayoutParams();\n }\n checkLayoutParams(p) {\n return p instanceof ViewPager.LayoutParams && super.checkLayoutParams(p);\n }\n static isImplDecor(view) {\n return view[SymbolDecor] || view.constructor[SymbolDecor];\n }\n static setClassImplDecor(clazz) {\n clazz[SymbolDecor] = true;\n }\n }\n ViewPager.COMPARATOR = (lhs, rhs) => {\n return lhs.position - rhs.position;\n };\n ViewPager.USE_CACHE = false;\n ViewPager.DEFAULT_OFFSCREEN_PAGES = 1;\n ViewPager.MAX_SETTLE_DURATION = 600;\n ViewPager.MIN_DISTANCE_FOR_FLING = 25;\n ViewPager.DEFAULT_GUTTER_SIZE = 16;\n ViewPager.MIN_FLING_VELOCITY = 400;\n ViewPager.sInterpolator = {\n getInterpolation(t) {\n t -= 1.0;\n return t * t * t * t * t + 1.0;\n }\n };\n ViewPager.INVALID_POINTER = -1;\n ViewPager.CLOSE_ENOUGH = 2;\n ViewPager.DRAW_ORDER_DEFAULT = 0;\n ViewPager.DRAW_ORDER_FORWARD = 1;\n ViewPager.DRAW_ORDER_REVERSE = 2;\n ViewPager.sPositionComparator = (lhs, rhs) => {\n let llp = lhs.getLayoutParams();\n let rlp = rhs.getLayoutParams();\n if (llp.isDecor != rlp.isDecor) {\n return llp.isDecor ? 1 : -1;\n }\n return llp.position - rlp.position;\n };\n ViewPager.SCROLL_STATE_IDLE = 0;\n ViewPager.SCROLL_STATE_DRAGGING = 1;\n ViewPager.SCROLL_STATE_SETTLING = 2;\n view_10.ViewPager = ViewPager;\n (function (ViewPager) {\n class SimpleOnPageChangeListener {\n onPageScrolled(position, positionOffset, positionOffsetPixels) {\n }\n onPageSelected(position) {\n }\n onPageScrollStateChanged(state) {\n }\n }\n ViewPager.SimpleOnPageChangeListener = SimpleOnPageChangeListener;\n class LayoutParams extends ViewGroup.LayoutParams {\n constructor() {\n super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);\n this.isDecor = false;\n this.gravity = 0;\n this.widthFactor = 0;\n this.needsMeasure = false;\n this.position = 0;\n this.childIndex = 0;\n this._attrBinder.addAttr('gravity', (value) => {\n this.gravity = this._attrBinder.parseGravity(value, this.gravity);\n }, () => {\n return this.gravity;\n });\n }\n }\n ViewPager.LayoutParams = LayoutParams;\n })(ViewPager = view_10.ViewPager || (view_10.ViewPager = {}));\n class ItemInfo {\n constructor() {\n this.position = 0;\n this.scrolling = false;\n this.widthFactor = 0;\n this.offset = 0;\n }\n }\n class PagerObserver extends DataSetObserver {\n constructor(viewPager) {\n super();\n this.ViewPager_this = viewPager;\n }\n onChanged() {\n this.ViewPager_this.dataSetChanged();\n }\n onInvalidated() {\n this.ViewPager_this.dataSetChanged();\n }\n }\n })(view = v4.view || (v4.view = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var widget;\n (function (widget) {\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var OverScroller = android.widget.OverScroller;\n var System = java.lang.System;\n class ViewDragHelper {\n constructor(forParent, cb) {\n this.mDragState = 0;\n this.mTouchSlop = 0;\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n this.mPointersDown = 0;\n this.mMaxVelocity = 0;\n this.mMinVelocity = 0;\n this.mEdgeSize = 0;\n this.mTrackingEdges = 0;\n this.mSetIdleRunnable = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n return new _Inner();\n })();\n if (forParent == null) {\n throw Error(`new IllegalArgumentException(\"Parent view may not be null\")`);\n }\n if (cb == null) {\n throw Error(`new IllegalArgumentException(\"Callback may not be null\")`);\n }\n this.mParentView = forParent;\n this.mCallback = cb;\n const vc = ViewConfiguration.get();\n const density = android.content.res.Resources.getDisplayMetrics().density;\n this.mEdgeSize = Math.floor((ViewDragHelper.EDGE_SIZE * density + 0.5));\n this.mTouchSlop = vc.getScaledTouchSlop();\n this.mMaxVelocity = vc.getScaledMaximumFlingVelocity();\n this.mMinVelocity = vc.getScaledMinimumFlingVelocity();\n this.mScroller = new OverScroller(ViewDragHelper.sInterpolator);\n }\n static create(...args) {\n if (args.length === 2)\n return new ViewDragHelper(args[0], args[1]);\n else if (args.length === 3) {\n let [forParent, sensitivity, cb] = args;\n const helper = ViewDragHelper.create(forParent, cb);\n helper.mTouchSlop = Math.floor((helper.mTouchSlop * (1 / sensitivity)));\n return helper;\n }\n }\n setMinVelocity(minVel) {\n this.mMinVelocity = minVel;\n }\n getMinVelocity() {\n return this.mMinVelocity;\n }\n getViewDragState() {\n return this.mDragState;\n }\n setEdgeTrackingEnabled(edgeFlags) {\n this.mTrackingEdges = edgeFlags;\n }\n getEdgeSize() {\n return this.mEdgeSize;\n }\n captureChildView(childView, activePointerId) {\n if (childView.getParent() != this.mParentView) {\n throw Error(`new IllegalArgumentException(\"captureChildView: parameter must be a descendant \" + \"of the ViewDragHelper's tracked parent view (\" + this.mParentView + \")\")`);\n }\n this.mCapturedView = childView;\n this.mActivePointerId = activePointerId;\n this.mCallback.onViewCaptured(childView, activePointerId);\n this.setDragState(ViewDragHelper.STATE_DRAGGING);\n }\n getCapturedView() {\n return this.mCapturedView;\n }\n getActivePointerId() {\n return this.mActivePointerId;\n }\n getTouchSlop() {\n return this.mTouchSlop;\n }\n cancel() {\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n this.clearMotionHistory();\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n abort() {\n this.cancel();\n if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n const oldX = this.mScroller.getCurrX();\n const oldY = this.mScroller.getCurrY();\n this.mScroller.abortAnimation();\n const newX = this.mScroller.getCurrX();\n const newY = this.mScroller.getCurrY();\n this.mCallback.onViewPositionChanged(this.mCapturedView, newX, newY, newX - oldX, newY - oldY);\n }\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n smoothSlideViewTo(child, finalLeft, finalTop) {\n this.mCapturedView = child;\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n return this.forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0);\n }\n settleCapturedViewAt(finalLeft, finalTop) {\n if (!this.mReleaseInProgress) {\n throw Error(`new IllegalStateException(\"Cannot settleCapturedViewAt outside of a call to \" + \"Callback#onViewReleased\")`);\n }\n return this.forceSettleCapturedViewAt(finalLeft, finalTop, Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)), Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)));\n }\n forceSettleCapturedViewAt(finalLeft, finalTop, xvel, yvel) {\n const startLeft = this.mCapturedView.getLeft();\n const startTop = this.mCapturedView.getTop();\n const dx = finalLeft - startLeft;\n const dy = finalTop - startTop;\n if (dx == 0 && dy == 0) {\n this.mScroller.abortAnimation();\n this.setDragState(ViewDragHelper.STATE_IDLE);\n return false;\n }\n const duration = this.computeSettleDuration(this.mCapturedView, dx, dy, xvel, yvel);\n this.mScroller.startScroll(startLeft, startTop, dx, dy, duration);\n this.setDragState(ViewDragHelper.STATE_SETTLING);\n return true;\n }\n computeSettleDuration(child, dx, dy, xvel, yvel) {\n xvel = this.clampMag(xvel, Math.floor(this.mMinVelocity), Math.floor(this.mMaxVelocity));\n yvel = this.clampMag(yvel, Math.floor(this.mMinVelocity), Math.floor(this.mMaxVelocity));\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n const absXVel = Math.abs(xvel);\n const absYVel = Math.abs(yvel);\n const addedVel = absXVel + absYVel;\n const addedDistance = absDx + absDy;\n const xweight = xvel != 0 ? absXVel / addedVel : absDx / addedDistance;\n const yweight = yvel != 0 ? absYVel / addedVel : absDy / addedDistance;\n let xduration = this.computeAxisDuration(dx, xvel, this.mCallback.getViewHorizontalDragRange(child));\n let yduration = this.computeAxisDuration(dy, yvel, this.mCallback.getViewVerticalDragRange(child));\n return Math.floor((xduration * xweight + yduration * yweight));\n }\n computeAxisDuration(delta, velocity, motionRange) {\n if (delta == 0) {\n return 0;\n }\n const width = this.mParentView.getWidth();\n const halfWidth = width / 2;\n const distanceRatio = Math.min(1, Math.abs(delta) / width);\n const distance = halfWidth + halfWidth * this.distanceInfluenceForSnapDuration(distanceRatio);\n let duration;\n velocity = Math.abs(velocity);\n if (velocity > 0) {\n duration = 4 * Math.round(1000 * Math.abs(distance / velocity));\n }\n else {\n const range = Math.abs(delta) / motionRange;\n duration = Math.floor(((range + 1) * ViewDragHelper.BASE_SETTLE_DURATION));\n }\n return Math.min(duration, ViewDragHelper.MAX_SETTLE_DURATION);\n }\n clampMag(value, absMin, absMax) {\n const absValue = Math.abs(value);\n if (absValue < absMin)\n return 0;\n if (absValue > absMax)\n return value > 0 ? absMax : -absMax;\n return value;\n }\n distanceInfluenceForSnapDuration(f) {\n f -= 0.5;\n f *= 0.3 * Math.PI / 2.0;\n return Math.sin(f);\n }\n flingCapturedView(minLeft, minTop, maxLeft, maxTop) {\n if (!this.mReleaseInProgress) {\n throw Error(`new IllegalStateException(\"Cannot flingCapturedView outside of a call to \" + \"Callback#onViewReleased\")`);\n }\n this.mScroller.fling(this.mCapturedView.getLeft(), this.mCapturedView.getTop(), Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)), Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)), minLeft, maxLeft, minTop, maxTop);\n this.setDragState(ViewDragHelper.STATE_SETTLING);\n }\n continueSettling(deferCallbacks) {\n if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n let keepGoing = this.mScroller.computeScrollOffset();\n const x = this.mScroller.getCurrX();\n const y = this.mScroller.getCurrY();\n const dx = x - this.mCapturedView.getLeft();\n const dy = y - this.mCapturedView.getTop();\n if (dx != 0) {\n this.mCapturedView.offsetLeftAndRight(dx);\n }\n if (dy != 0) {\n this.mCapturedView.offsetTopAndBottom(dy);\n }\n if (dx != 0 || dy != 0) {\n this.mCallback.onViewPositionChanged(this.mCapturedView, x, y, dx, dy);\n }\n if (keepGoing && x == this.mScroller.getFinalX() && y == this.mScroller.getFinalY()) {\n this.mScroller.abortAnimation();\n keepGoing = this.mScroller.isFinished();\n }\n if (!keepGoing) {\n if (deferCallbacks) {\n this.mParentView.post(this.mSetIdleRunnable);\n }\n else {\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n }\n return this.mDragState == ViewDragHelper.STATE_SETTLING;\n }\n dispatchViewReleased(xvel, yvel) {\n this.mReleaseInProgress = true;\n this.mCallback.onViewReleased(this.mCapturedView, xvel, yvel);\n this.mReleaseInProgress = false;\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n clearMotionHistory(pointerId) {\n if (this.mInitialMotionX == null) {\n return;\n }\n if (pointerId == null) {\n this.mInitialMotionX = [];\n this.mInitialMotionY = [];\n this.mLastMotionX = [];\n this.mLastMotionY = [];\n this.mInitialEdgesTouched = [];\n this.mEdgeDragsInProgress = [];\n this.mEdgeDragsLocked = [];\n this.mPointersDown = 0;\n }\n else {\n this.mInitialMotionX[pointerId] = 0;\n this.mInitialMotionY[pointerId] = 0;\n this.mLastMotionX[pointerId] = 0;\n this.mLastMotionY[pointerId] = 0;\n this.mInitialEdgesTouched[pointerId] = 0;\n this.mEdgeDragsInProgress[pointerId] = 0;\n this.mEdgeDragsLocked[pointerId] = 0;\n this.mPointersDown &= ~(1 << pointerId);\n }\n }\n ensureMotionHistorySizeForId(pointerId) {\n if (this.mInitialMotionX == null || this.mInitialMotionX.length <= pointerId) {\n let imx = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let imy = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let lmx = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let lmy = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let iit = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let edip = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let edl = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n if (this.mInitialMotionX != null) {\n System.arraycopy(this.mInitialMotionX, 0, imx, 0, this.mInitialMotionX.length);\n System.arraycopy(this.mInitialMotionY, 0, imy, 0, this.mInitialMotionY.length);\n System.arraycopy(this.mLastMotionX, 0, lmx, 0, this.mLastMotionX.length);\n System.arraycopy(this.mLastMotionY, 0, lmy, 0, this.mLastMotionY.length);\n System.arraycopy(this.mInitialEdgesTouched, 0, iit, 0, this.mInitialEdgesTouched.length);\n System.arraycopy(this.mEdgeDragsInProgress, 0, edip, 0, this.mEdgeDragsInProgress.length);\n System.arraycopy(this.mEdgeDragsLocked, 0, edl, 0, this.mEdgeDragsLocked.length);\n }\n this.mInitialMotionX = imx;\n this.mInitialMotionY = imy;\n this.mLastMotionX = lmx;\n this.mLastMotionY = lmy;\n this.mInitialEdgesTouched = iit;\n this.mEdgeDragsInProgress = edip;\n this.mEdgeDragsLocked = edl;\n }\n }\n saveInitialMotion(x, y, pointerId) {\n this.ensureMotionHistorySizeForId(pointerId);\n this.mInitialMotionX[pointerId] = this.mLastMotionX[pointerId] = x;\n this.mInitialMotionY[pointerId] = this.mLastMotionY[pointerId] = y;\n this.mInitialEdgesTouched[pointerId] = this.getEdgesTouched(Math.floor(x), Math.floor(y));\n this.mPointersDown |= 1 << pointerId;\n }\n saveLastMotion(ev) {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n this.mLastMotionX[pointerId] = x;\n this.mLastMotionY[pointerId] = y;\n }\n }\n isPointerDown(pointerId) {\n return (this.mPointersDown & 1 << pointerId) != 0;\n }\n setDragState(state) {\n if (this.mDragState != state) {\n this.mDragState = state;\n this.mCallback.onViewDragStateChanged(state);\n if (state == ViewDragHelper.STATE_IDLE) {\n this.mCapturedView = null;\n }\n }\n }\n tryCaptureViewForDrag(toCapture, pointerId) {\n if (toCapture == this.mCapturedView && this.mActivePointerId == pointerId) {\n return true;\n }\n if (toCapture != null && this.mCallback.tryCaptureView(toCapture, pointerId)) {\n this.mActivePointerId = pointerId;\n this.captureChildView(toCapture, pointerId);\n return true;\n }\n return false;\n }\n canScroll(v, checkV, dx, dy, x, y) {\n if (v instanceof ViewGroup) {\n const group = v;\n const scrollX = v.getScrollX();\n const scrollY = v.getScrollY();\n const count = group.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = group.getChildAt(i);\n if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight()\n && y + scrollY >= child.getTop() && y + scrollY < child.getBottom()\n && this.canScroll(child, true, dx, dy, x + scrollX - child.getLeft(), y + scrollY - child.getTop())) {\n return true;\n }\n }\n }\n return checkV && (v.canScrollHorizontally(-dx) || v.canScrollVertically(-dy));\n }\n shouldInterceptTouchEvent(ev) {\n const action = ev.getActionMasked();\n const actionIndex = ev.getActionIndex();\n if (action == MotionEvent.ACTION_DOWN) {\n this.cancel();\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n const pointerId = ev.getPointerId(0);\n this.saveInitialMotion(x, y, pointerId);\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture == this.mCapturedView && this.mDragState == ViewDragHelper.STATE_SETTLING) {\n this.tryCaptureViewForDrag(toCapture, pointerId);\n }\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const pointerId = ev.getPointerId(actionIndex);\n const x = ev.getX(actionIndex);\n const y = ev.getY(actionIndex);\n this.saveInitialMotion(x, y, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_IDLE) {\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n }\n else if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture == this.mCapturedView) {\n this.tryCaptureViewForDrag(toCapture, pointerId);\n }\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n const dx = x - this.mInitialMotionX[pointerId];\n const dy = y - this.mInitialMotionY[pointerId];\n this.reportNewEdgeDrags(dx, dy, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n break;\n }\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture != null && this.checkTouchSlop(toCapture, dx, dy) && this.tryCaptureViewForDrag(toCapture, pointerId)) {\n break;\n }\n }\n this.saveLastMotion(ev);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n const pointerId = ev.getPointerId(actionIndex);\n this.clearMotionHistory(pointerId);\n break;\n }\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_CANCEL:\n {\n this.cancel();\n break;\n }\n }\n return this.mDragState == ViewDragHelper.STATE_DRAGGING;\n }\n processTouchEvent(ev) {\n const action = ev.getActionMasked();\n const actionIndex = ev.getActionIndex();\n if (action == MotionEvent.ACTION_DOWN) {\n this.cancel();\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n const pointerId = ev.getPointerId(0);\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n this.saveInitialMotion(x, y, pointerId);\n this.tryCaptureViewForDrag(toCapture, pointerId);\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const pointerId = ev.getPointerId(actionIndex);\n const x = ev.getX(actionIndex);\n const y = ev.getY(actionIndex);\n this.saveInitialMotion(x, y, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_IDLE) {\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n this.tryCaptureViewForDrag(toCapture, pointerId);\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n }\n else if (this.isCapturedViewUnder(Math.floor(x), Math.floor(y))) {\n this.tryCaptureViewForDrag(this.mCapturedView, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n const index = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(index);\n const y = ev.getY(index);\n const idx = Math.floor((x - this.mLastMotionX[this.mActivePointerId]));\n const idy = Math.floor((y - this.mLastMotionY[this.mActivePointerId]));\n this.dragTo(this.mCapturedView.getLeft() + idx, this.mCapturedView.getTop() + idy, idx, idy);\n this.saveLastMotion(ev);\n }\n else {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n const dx = x - this.mInitialMotionX[pointerId];\n const dy = y - this.mInitialMotionY[pointerId];\n this.reportNewEdgeDrags(dx, dy, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n break;\n }\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (this.checkTouchSlop(toCapture, dx, dy) && this.tryCaptureViewForDrag(toCapture, pointerId)) {\n break;\n }\n }\n this.saveLastMotion(ev);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n const pointerId = ev.getPointerId(actionIndex);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING && pointerId == this.mActivePointerId) {\n let newActivePointer = ViewDragHelper.INVALID_POINTER;\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const id = ev.getPointerId(i);\n if (id == this.mActivePointerId) {\n continue;\n }\n const x = ev.getX(i);\n const y = ev.getY(i);\n if (this.findTopChildUnder(Math.floor(x), Math.floor(y)) == this.mCapturedView && this.tryCaptureViewForDrag(this.mCapturedView, id)) {\n newActivePointer = this.mActivePointerId;\n break;\n }\n }\n if (newActivePointer == ViewDragHelper.INVALID_POINTER) {\n this.releaseViewForPointerUp();\n }\n }\n this.clearMotionHistory(pointerId);\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.releaseViewForPointerUp();\n }\n this.cancel();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.dispatchViewReleased(0, 0);\n }\n this.cancel();\n break;\n }\n }\n }\n reportNewEdgeDrags(dx, dy, pointerId) {\n let dragsStarted = 0;\n if (this.checkNewEdgeDrag(dx, dy, pointerId, ViewDragHelper.EDGE_LEFT)) {\n dragsStarted |= ViewDragHelper.EDGE_LEFT;\n }\n if (this.checkNewEdgeDrag(dy, dx, pointerId, ViewDragHelper.EDGE_TOP)) {\n dragsStarted |= ViewDragHelper.EDGE_TOP;\n }\n if (this.checkNewEdgeDrag(dx, dy, pointerId, ViewDragHelper.EDGE_RIGHT)) {\n dragsStarted |= ViewDragHelper.EDGE_RIGHT;\n }\n if (this.checkNewEdgeDrag(dy, dx, pointerId, ViewDragHelper.EDGE_BOTTOM)) {\n dragsStarted |= ViewDragHelper.EDGE_BOTTOM;\n }\n if (dragsStarted != 0) {\n this.mEdgeDragsInProgress[pointerId] |= dragsStarted;\n this.mCallback.onEdgeDragStarted(dragsStarted, pointerId);\n }\n }\n checkNewEdgeDrag(delta, odelta, pointerId, edge) {\n const absDelta = Math.abs(delta);\n const absODelta = Math.abs(odelta);\n if ((this.mInitialEdgesTouched[pointerId] & edge) != edge || (this.mTrackingEdges & edge) == 0 || (this.mEdgeDragsLocked[pointerId] & edge) == edge || (this.mEdgeDragsInProgress[pointerId] & edge) == edge || (absDelta <= this.mTouchSlop && absODelta <= this.mTouchSlop)) {\n return false;\n }\n if (absDelta < absODelta * 0.5 && this.mCallback.onEdgeLock(edge)) {\n this.mEdgeDragsLocked[pointerId] |= edge;\n return false;\n }\n return (this.mEdgeDragsInProgress[pointerId] & edge) == 0 && absDelta > this.mTouchSlop;\n }\n checkTouchSlop(...args) {\n if (args.length === 1)\n return this._checkTouchSlop_1(args[0]);\n if (args.length === 2)\n return this._checkTouchSlop_2(args[0], args[1]);\n if (args.length === 3)\n return this._checkTouchSlop_3(args[0], args[1], args[2]);\n return false;\n }\n _checkTouchSlop_3(child, dx, dy) {\n if (child == null) {\n return false;\n }\n const checkHorizontal = this.mCallback.getViewHorizontalDragRange(child) > 0;\n const checkVertical = this.mCallback.getViewVerticalDragRange(child) > 0;\n if (checkHorizontal && checkVertical) {\n return dx * dx + dy * dy > this.mTouchSlop * this.mTouchSlop;\n }\n else if (checkHorizontal) {\n return Math.abs(dx) > this.mTouchSlop;\n }\n else if (checkVertical) {\n return Math.abs(dy) > this.mTouchSlop;\n }\n return false;\n }\n _checkTouchSlop_1(directions) {\n const count = this.mInitialMotionX.length;\n for (let i = 0; i < count; i++) {\n if (this.checkTouchSlop(directions, i)) {\n return true;\n }\n }\n return false;\n }\n _checkTouchSlop_2(directions, pointerId) {\n if (!this.isPointerDown(pointerId)) {\n return false;\n }\n const checkHorizontal = (directions & ViewDragHelper.DIRECTION_HORIZONTAL) == ViewDragHelper.DIRECTION_HORIZONTAL;\n const checkVertical = (directions & ViewDragHelper.DIRECTION_VERTICAL) == ViewDragHelper.DIRECTION_VERTICAL;\n const dx = this.mLastMotionX[pointerId] - this.mInitialMotionX[pointerId];\n const dy = this.mLastMotionY[pointerId] - this.mInitialMotionY[pointerId];\n if (checkHorizontal && checkVertical) {\n return dx * dx + dy * dy > this.mTouchSlop * this.mTouchSlop;\n }\n else if (checkHorizontal) {\n return Math.abs(dx) > this.mTouchSlop;\n }\n else if (checkVertical) {\n return Math.abs(dy) > this.mTouchSlop;\n }\n return false;\n }\n isEdgeTouched(edges, pointerId) {\n if (pointerId == null) {\n const count = this.mInitialEdgesTouched.length;\n for (let i = 0; i < count; i++) {\n if (this.isEdgeTouched(edges, i)) {\n return true;\n }\n }\n }\n return this.isPointerDown(pointerId) && (this.mInitialEdgesTouched[pointerId] & edges) != 0;\n }\n releaseViewForPointerUp() {\n this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaxVelocity);\n const xvel = this.clampMag(this.mVelocityTracker.getXVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity);\n const yvel = this.clampMag(this.mVelocityTracker.getYVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity);\n this.dispatchViewReleased(xvel, yvel);\n }\n dragTo(left, top, dx, dy) {\n let clampedX = left;\n let clampedY = top;\n const oldLeft = this.mCapturedView.getLeft();\n const oldTop = this.mCapturedView.getTop();\n if (dx != 0) {\n clampedX = this.mCallback.clampViewPositionHorizontal(this.mCapturedView, left, dx);\n this.mCapturedView.offsetLeftAndRight(clampedX - oldLeft);\n }\n if (dy != 0) {\n clampedY = this.mCallback.clampViewPositionVertical(this.mCapturedView, top, dy);\n this.mCapturedView.offsetTopAndBottom(clampedY - oldTop);\n }\n if (dx != 0 || dy != 0) {\n const clampedDx = clampedX - oldLeft;\n const clampedDy = clampedY - oldTop;\n this.mCallback.onViewPositionChanged(this.mCapturedView, clampedX, clampedY, clampedDx, clampedDy);\n }\n }\n isCapturedViewUnder(x, y) {\n return this.isViewUnder(this.mCapturedView, x, y);\n }\n isViewUnder(view, x, y) {\n if (view == null) {\n return false;\n }\n return x >= view.getLeft() && x < view.getRight() && y >= view.getTop() && y < view.getBottom();\n }\n findTopChildUnder(x, y) {\n const childCount = this.mParentView.getChildCount();\n for (let i = childCount - 1; i >= 0; i--) {\n const child = this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(i));\n if (x >= child.getLeft() && x < child.getRight() && y >= child.getTop() && y < child.getBottom()) {\n return child;\n }\n }\n return null;\n }\n getEdgesTouched(x, y) {\n let result = 0;\n if (x < this.mParentView.getLeft() + this.mEdgeSize)\n result |= ViewDragHelper.EDGE_LEFT;\n if (y < this.mParentView.getTop() + this.mEdgeSize)\n result |= ViewDragHelper.EDGE_TOP;\n if (x > this.mParentView.getRight() - this.mEdgeSize)\n result |= ViewDragHelper.EDGE_RIGHT;\n if (y > this.mParentView.getBottom() - this.mEdgeSize)\n result |= ViewDragHelper.EDGE_BOTTOM;\n return result;\n }\n }\n ViewDragHelper.TAG = \"ViewDragHelper\";\n ViewDragHelper.INVALID_POINTER = -1;\n ViewDragHelper.STATE_IDLE = 0;\n ViewDragHelper.STATE_DRAGGING = 1;\n ViewDragHelper.STATE_SETTLING = 2;\n ViewDragHelper.EDGE_LEFT = 1 << 0;\n ViewDragHelper.EDGE_RIGHT = 1 << 1;\n ViewDragHelper.EDGE_TOP = 1 << 2;\n ViewDragHelper.EDGE_BOTTOM = 1 << 3;\n ViewDragHelper.EDGE_ALL = ViewDragHelper.EDGE_LEFT | ViewDragHelper.EDGE_TOP | ViewDragHelper.EDGE_RIGHT | ViewDragHelper.EDGE_BOTTOM;\n ViewDragHelper.DIRECTION_HORIZONTAL = 1 << 0;\n ViewDragHelper.DIRECTION_VERTICAL = 1 << 1;\n ViewDragHelper.DIRECTION_ALL = ViewDragHelper.DIRECTION_HORIZONTAL | ViewDragHelper.DIRECTION_VERTICAL;\n ViewDragHelper.EDGE_SIZE = 20;\n ViewDragHelper.BASE_SETTLE_DURATION = 256;\n ViewDragHelper.MAX_SETTLE_DURATION = 600;\n ViewDragHelper.sInterpolator = (() => {\n class _Inner {\n getInterpolation(t) {\n t -= 1.0;\n return t * t * t * t * t + 1.0;\n }\n }\n return new _Inner();\n })();\n widget.ViewDragHelper = ViewDragHelper;\n (function (ViewDragHelper) {\n class Callback {\n onViewDragStateChanged(state) {\n }\n onViewPositionChanged(changedView, left, top, dx, dy) {\n }\n onViewCaptured(capturedChild, activePointerId) {\n }\n onViewReleased(releasedChild, xvel, yvel) {\n }\n onEdgeTouched(edgeFlags, pointerId) {\n }\n onEdgeLock(edgeFlags) {\n return false;\n }\n onEdgeDragStarted(edgeFlags, pointerId) {\n }\n getOrderedChildIndex(index) {\n return index;\n }\n getViewHorizontalDragRange(child) {\n return 0;\n }\n getViewVerticalDragRange(child) {\n return 0;\n }\n clampViewPositionHorizontal(child, left, dx) {\n return 0;\n }\n clampViewPositionVertical(child, top, dy) {\n return 0;\n }\n }\n ViewDragHelper.Callback = Callback;\n })(ViewDragHelper = widget.ViewDragHelper || (widget.ViewDragHelper = {}));\n })(widget = v4.widget || (v4.widget = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var widget;\n (function (widget) {\n var Paint = android.graphics.Paint;\n var PixelFormat = android.graphics.PixelFormat;\n var SystemClock = android.os.SystemClock;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var ViewDragHelper = android.support.v4.widget.ViewDragHelper;\n class DrawerLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mMinDrawerMargin = 0;\n this.mScrimColor = DrawerLayout.DEFAULT_SCRIM_COLOR;\n this.mScrimOpacity = 0;\n this.mScrimPaint = new Paint();\n this.mDrawerState = 0;\n this.mFirstLayout = true;\n this.mLockModeLeft = 0;\n this.mLockModeRight = 0;\n this.mInitialMotionX = 0;\n this.mInitialMotionY = 0;\n const density = this.getResources().getDisplayMetrics().density;\n this.mMinDrawerMargin = Math.floor((DrawerLayout.MIN_DRAWER_MARGIN * density + 0.5));\n const minVel = DrawerLayout.MIN_FLING_VELOCITY * density;\n this.mLeftCallback = new DrawerLayout.ViewDragCallback(this, Gravity.LEFT);\n this.mRightCallback = new DrawerLayout.ViewDragCallback(this, Gravity.RIGHT);\n this.mLeftDragger = ViewDragHelper.create(this, DrawerLayout.TOUCH_SLOP_SENSITIVITY, this.mLeftCallback);\n this.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);\n this.mLeftDragger.setMinVelocity(minVel);\n this.mLeftCallback.setDragger(this.mLeftDragger);\n this.mRightDragger = ViewDragHelper.create(this, DrawerLayout.TOUCH_SLOP_SENSITIVITY, this.mRightCallback);\n this.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);\n this.mRightDragger.setMinVelocity(minVel);\n this.mRightCallback.setDragger(this.mRightDragger);\n this.setFocusableInTouchMode(true);\n this.setMotionEventSplittingEnabled(false);\n }\n setDrawerShadow(shadowDrawable, gravity) {\n const absGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection());\n if ((absGravity & Gravity.LEFT) == Gravity.LEFT) {\n this.mShadowLeft = shadowDrawable;\n this.invalidate();\n }\n if ((absGravity & Gravity.RIGHT) == Gravity.RIGHT) {\n this.mShadowRight = shadowDrawable;\n this.invalidate();\n }\n }\n setScrimColor(color) {\n this.mScrimColor = color;\n this.invalidate();\n }\n setDrawerListener(listener) {\n this.mListener = listener;\n }\n setDrawerLockMode(lockMode, edgeGravityOrView) {\n if (edgeGravityOrView == null) {\n this.setDrawerLockMode(lockMode, Gravity.LEFT);\n this.setDrawerLockMode(lockMode, Gravity.RIGHT);\n return;\n }\n if (edgeGravityOrView instanceof View) {\n if (!this.isDrawerView(edgeGravityOrView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a \" + \"drawer with appropriate layout_gravity\")`);\n }\n const gravity = edgeGravityOrView.getLayoutParams().gravity;\n this.setDrawerLockMode(lockMode, gravity);\n return;\n }\n let edgeGravity = edgeGravityOrView;\n const absGravity = Gravity.getAbsoluteGravity(edgeGravity, this.getLayoutDirection());\n if (absGravity == Gravity.LEFT) {\n this.mLockModeLeft = lockMode;\n }\n else if (absGravity == Gravity.RIGHT) {\n this.mLockModeRight = lockMode;\n }\n if (lockMode != DrawerLayout.LOCK_MODE_UNLOCKED) {\n const helper = absGravity == Gravity.LEFT ? this.mLeftDragger : this.mRightDragger;\n helper.cancel();\n }\n switch (lockMode) {\n case DrawerLayout.LOCK_MODE_LOCKED_OPEN:\n const toOpen = this.findDrawerWithGravity(absGravity);\n if (toOpen != null) {\n this.openDrawer(toOpen);\n }\n break;\n case DrawerLayout.LOCK_MODE_LOCKED_CLOSED:\n const toClose = this.findDrawerWithGravity(absGravity);\n if (toClose != null) {\n this.closeDrawer(toClose);\n }\n break;\n }\n }\n getDrawerLockMode(edgeGravityOrView) {\n if (edgeGravityOrView instanceof View) {\n let drawerView = edgeGravityOrView;\n const absGravity = this.getDrawerViewAbsoluteGravity(drawerView);\n if (absGravity == Gravity.LEFT) {\n return this.mLockModeLeft;\n }\n else if (absGravity == Gravity.RIGHT) {\n return this.mLockModeRight;\n }\n return DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n else {\n let edgeGravity = edgeGravityOrView;\n const absGravity = Gravity.getAbsoluteGravity(edgeGravity, this.getLayoutDirection());\n if (absGravity == Gravity.LEFT) {\n return this.mLockModeLeft;\n }\n else if (absGravity == Gravity.RIGHT) {\n return this.mLockModeRight;\n }\n return DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n }\n updateDrawerState(forGravity, activeState, activeDrawer) {\n const leftState = this.mLeftDragger.getViewDragState();\n const rightState = this.mRightDragger.getViewDragState();\n let state;\n if (leftState == DrawerLayout.STATE_DRAGGING || rightState == DrawerLayout.STATE_DRAGGING) {\n state = DrawerLayout.STATE_DRAGGING;\n }\n else if (leftState == DrawerLayout.STATE_SETTLING || rightState == DrawerLayout.STATE_SETTLING) {\n state = DrawerLayout.STATE_SETTLING;\n }\n else {\n state = DrawerLayout.STATE_IDLE;\n }\n if (activeDrawer != null && activeState == DrawerLayout.STATE_IDLE) {\n const lp = activeDrawer.getLayoutParams();\n if (lp.onScreen == 0) {\n this.dispatchOnDrawerClosed(activeDrawer);\n }\n else if (lp.onScreen == 1) {\n this.dispatchOnDrawerOpened(activeDrawer);\n }\n }\n if (state != this.mDrawerState) {\n this.mDrawerState = state;\n if (this.mListener != null) {\n this.mListener.onDrawerStateChanged(state);\n }\n }\n }\n dispatchOnDrawerClosed(drawerView) {\n const lp = drawerView.getLayoutParams();\n if (lp.knownOpen) {\n lp.knownOpen = false;\n if (this.mListener != null) {\n this.mListener.onDrawerClosed(drawerView);\n }\n }\n }\n dispatchOnDrawerOpened(drawerView) {\n const lp = drawerView.getLayoutParams();\n if (!lp.knownOpen) {\n lp.knownOpen = true;\n if (this.mListener != null) {\n this.mListener.onDrawerOpened(drawerView);\n }\n }\n }\n dispatchOnDrawerSlide(drawerView, slideOffset) {\n if (this.mListener != null) {\n this.mListener.onDrawerSlide(drawerView, slideOffset);\n }\n }\n setDrawerViewOffset(drawerView, slideOffset) {\n const lp = drawerView.getLayoutParams();\n if (slideOffset == lp.onScreen) {\n return;\n }\n lp.onScreen = slideOffset;\n this.dispatchOnDrawerSlide(drawerView, slideOffset);\n }\n getDrawerViewOffset(drawerView) {\n return drawerView.getLayoutParams().onScreen;\n }\n getDrawerViewAbsoluteGravity(drawerView) {\n const gravity = drawerView.getLayoutParams().gravity;\n return Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection());\n }\n checkDrawerViewAbsoluteGravity(drawerView, checkFor) {\n const absGravity = this.getDrawerViewAbsoluteGravity(drawerView);\n return (absGravity & checkFor) == checkFor;\n }\n findOpenDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getLayoutParams().knownOpen) {\n return child;\n }\n }\n return null;\n }\n moveDrawerToOffset(drawerView, slideOffset) {\n const oldOffset = this.getDrawerViewOffset(drawerView);\n const width = drawerView.getWidth();\n const oldPos = Math.floor((width * oldOffset));\n const newPos = Math.floor((width * slideOffset));\n const dx = newPos - oldPos;\n drawerView.offsetLeftAndRight(this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT) ? dx : -dx);\n this.setDrawerViewOffset(drawerView, slideOffset);\n }\n findDrawerWithGravity(gravity) {\n const absHorizGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const childAbsGravity = this.getDrawerViewAbsoluteGravity(child);\n if ((childAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == absHorizGravity) {\n return child;\n }\n }\n return null;\n }\n static gravityToString(gravity) {\n if ((gravity & Gravity.LEFT) == Gravity.LEFT) {\n return \"LEFT\";\n }\n if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) {\n return \"RIGHT\";\n }\n return '' + gravity;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.mFirstLayout = true;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mFirstLayout = true;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = DrawerLayout.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = DrawerLayout.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = DrawerLayout.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = DrawerLayout.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode != DrawerLayout.MeasureSpec.EXACTLY || heightMode != DrawerLayout.MeasureSpec.EXACTLY) {\n if (this.isInEditMode()) {\n if (widthMode == DrawerLayout.MeasureSpec.AT_MOST) {\n widthMode = DrawerLayout.MeasureSpec.EXACTLY;\n }\n else if (widthMode == DrawerLayout.MeasureSpec.UNSPECIFIED) {\n widthMode = DrawerLayout.MeasureSpec.EXACTLY;\n widthSize = 300;\n }\n if (heightMode == DrawerLayout.MeasureSpec.AT_MOST) {\n heightMode = DrawerLayout.MeasureSpec.EXACTLY;\n }\n else if (heightMode == DrawerLayout.MeasureSpec.UNSPECIFIED) {\n heightMode = DrawerLayout.MeasureSpec.EXACTLY;\n heightSize = 300;\n }\n }\n else {\n throw Error(`new IllegalArgumentException(\"DrawerLayout must be measured with MeasureSpec.EXACTLY.\")`);\n }\n }\n this.setMeasuredDimension(widthSize, heightSize);\n let foundDrawers = 0;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == DrawerLayout.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n if (this.isContentView(child)) {\n const contentWidthSpec = DrawerLayout.MeasureSpec.makeMeasureSpec(widthSize - lp.leftMargin - lp.rightMargin, DrawerLayout.MeasureSpec.EXACTLY);\n const contentHeightSpec = DrawerLayout.MeasureSpec.makeMeasureSpec(heightSize - lp.topMargin - lp.bottomMargin, DrawerLayout.MeasureSpec.EXACTLY);\n child.measure(contentWidthSpec, contentHeightSpec);\n }\n else if (this.isDrawerView(child)) {\n const childGravity = this.getDrawerViewAbsoluteGravity(child) & Gravity.HORIZONTAL_GRAVITY_MASK;\n if ((foundDrawers & childGravity) != 0) {\n throw Error(`new IllegalStateException(\"Child drawer has absolute gravity \" + DrawerLayout.gravityToString(childGravity) + \" but this \" + DrawerLayout.TAG + \" already has a \" + \"drawer view along that edge\")`);\n }\n const drawerWidthSpec = DrawerLayout.getChildMeasureSpec(widthMeasureSpec, this.mMinDrawerMargin + lp.leftMargin + lp.rightMargin, lp.width);\n const drawerHeightSpec = DrawerLayout.getChildMeasureSpec(heightMeasureSpec, lp.topMargin + lp.bottomMargin, lp.height);\n child.measure(drawerWidthSpec, drawerHeightSpec);\n }\n else {\n throw Error(`new IllegalStateException(\"Child \" + child + \" at index \" + i + \" does not have a valid layout_gravity - must be Gravity.LEFT, \" + \"Gravity.RIGHT or Gravity.NO_GRAVITY\")`);\n }\n }\n }\n onLayout(changed, l, t, r, b) {\n this.mInLayout = true;\n const width = r - l;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == DrawerLayout.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n if (this.isContentView(child)) {\n child.layout(lp.leftMargin, lp.topMargin, lp.leftMargin + child.getMeasuredWidth(), lp.topMargin + child.getMeasuredHeight());\n }\n else {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n let childLeft;\n let newOffset;\n if (this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n childLeft = -childWidth + Math.floor((childWidth * lp.onScreen));\n newOffset = (childWidth + childLeft) / childWidth;\n }\n else {\n childLeft = width - Math.floor((childWidth * lp.onScreen));\n newOffset = (width - childLeft) / childWidth;\n }\n const changeOffset = newOffset != lp.onScreen;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (vgrav) {\n default:\n case Gravity.TOP:\n {\n child.layout(childLeft, lp.topMargin, childLeft + childWidth, lp.topMargin + childHeight);\n break;\n }\n case Gravity.BOTTOM:\n {\n const height = b - t;\n child.layout(childLeft, height - lp.bottomMargin - child.getMeasuredHeight(), childLeft + childWidth, height - lp.bottomMargin);\n break;\n }\n case Gravity.CENTER_VERTICAL:\n {\n const height = b - t;\n let childTop = (height - childHeight) / 2;\n if (childTop < lp.topMargin) {\n childTop = lp.topMargin;\n }\n else if (childTop + childHeight > height - lp.bottomMargin) {\n childTop = height - lp.bottomMargin - childHeight;\n }\n child.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);\n break;\n }\n }\n if (changeOffset) {\n this.setDrawerViewOffset(child, newOffset);\n }\n const newVisibility = lp.onScreen > 0 ? DrawerLayout.VISIBLE : DrawerLayout.INVISIBLE;\n if (child.getVisibility() != newVisibility) {\n child.setVisibility(newVisibility);\n }\n }\n }\n this.mInLayout = false;\n this.mFirstLayout = false;\n }\n requestLayout() {\n if (!this.mInLayout) {\n super.requestLayout();\n }\n }\n computeScroll() {\n const childCount = this.getChildCount();\n let scrimOpacity = 0;\n for (let i = 0; i < childCount; i++) {\n const onscreen = this.getChildAt(i).getLayoutParams().onScreen;\n scrimOpacity = Math.max(scrimOpacity, onscreen);\n }\n this.mScrimOpacity = scrimOpacity;\n let leftContinue = this.mLeftDragger.continueSettling(true);\n let rightContinue = this.mRightDragger.continueSettling(true);\n if (leftContinue || rightContinue) {\n this.postInvalidateOnAnimation();\n }\n }\n static hasOpaqueBackground(v) {\n const bg = v.getBackground();\n if (bg != null) {\n return bg.getOpacity() == PixelFormat.OPAQUE;\n }\n return false;\n }\n drawChild(canvas, child, drawingTime) {\n const height = this.getHeight();\n const drawingContent = this.isContentView(child);\n let clipLeft = 0, clipRight = this.getWidth();\n const restoreCount = canvas.save();\n if (drawingContent) {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const v = this.getChildAt(i);\n if (v == child || v.getVisibility() != DrawerLayout.VISIBLE || !DrawerLayout.hasOpaqueBackground(v) || !this.isDrawerView(v) || v.getHeight() < height) {\n continue;\n }\n if (this.checkDrawerViewAbsoluteGravity(v, Gravity.LEFT)) {\n const vright = v.getRight();\n if (vright > clipLeft)\n clipLeft = vright;\n }\n else {\n const vleft = v.getLeft();\n if (vleft < clipRight)\n clipRight = vleft;\n }\n }\n canvas.clipRect(clipLeft, 0, clipRight, this.getHeight());\n }\n const result = super.drawChild(canvas, child, drawingTime);\n canvas.restoreToCount(restoreCount);\n if (this.mScrimOpacity > 0 && drawingContent) {\n const baseAlpha = (this.mScrimColor & 0xff000000) >>> 24;\n const imag = Math.floor((baseAlpha * this.mScrimOpacity));\n const color = imag << 24 | (this.mScrimColor & 0xffffff);\n this.mScrimPaint.setColor(color);\n canvas.drawRect(clipLeft, 0, clipRight, this.getHeight(), this.mScrimPaint);\n }\n else if (this.mShadowLeft != null && this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n const shadowWidth = this.mShadowLeft.getIntrinsicWidth();\n const childRight = child.getRight();\n const drawerPeekDistance = this.mLeftDragger.getEdgeSize();\n const alpha = Math.max(0, Math.min(childRight / drawerPeekDistance, 1.));\n this.mShadowLeft.setBounds(childRight, child.getTop(), childRight + shadowWidth, child.getBottom());\n this.mShadowLeft.setAlpha(Math.floor((0xff * alpha)));\n this.mShadowLeft.draw(canvas);\n }\n else if (this.mShadowRight != null && this.checkDrawerViewAbsoluteGravity(child, Gravity.RIGHT)) {\n const shadowWidth = this.mShadowRight.getIntrinsicWidth();\n const childLeft = child.getLeft();\n const showing = this.getWidth() - childLeft;\n const drawerPeekDistance = this.mRightDragger.getEdgeSize();\n const alpha = Math.max(0, Math.min(showing / drawerPeekDistance, 1.));\n this.mShadowRight.setBounds(childLeft - shadowWidth, child.getTop(), childLeft, child.getBottom());\n this.mShadowRight.setAlpha(Math.floor((0xff * alpha)));\n this.mShadowRight.draw(canvas);\n }\n return result;\n }\n isContentView(child) {\n return child.getLayoutParams().gravity == Gravity.NO_GRAVITY;\n }\n isDrawerView(child) {\n const gravity = child.getLayoutParams().gravity;\n const absGravity = Gravity.getAbsoluteGravity(gravity, child.getLayoutDirection());\n return (absGravity & (Gravity.LEFT | Gravity.RIGHT)) != 0;\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getActionMasked();\n const leftIntercept = this.mLeftDragger.shouldInterceptTouchEvent(ev);\n const rightIntercept = this.mRightDragger.shouldInterceptTouchEvent(ev);\n const interceptForDrag = leftIntercept || rightIntercept;\n let interceptForTap = false;\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n this.mInitialMotionX = x;\n this.mInitialMotionY = y;\n if (this.mScrimOpacity > 0 && this.isContentView(this.mLeftDragger.findTopChildUnder(Math.floor(x), Math.floor(y)))) {\n interceptForTap = true;\n }\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mLeftDragger.checkTouchSlop(ViewDragHelper.DIRECTION_ALL)) {\n this.mLeftCallback.removeCallbacks();\n this.mRightCallback.removeCallbacks();\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n {\n this.closeDrawers(true);\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n }\n }\n return interceptForDrag || interceptForTap || this.hasPeekingDrawer() || this.mChildrenCanceledTouch;\n }\n onTouchEvent(ev) {\n this.mLeftDragger.processTouchEvent(ev);\n this.mRightDragger.processTouchEvent(ev);\n const action = ev.getAction();\n let wantTouchEvents = true;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n this.mInitialMotionX = x;\n this.mInitialMotionY = y;\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n const x = ev.getX();\n const y = ev.getY();\n let peekingOnly = true;\n const touchedView = this.mLeftDragger.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (touchedView != null && this.isContentView(touchedView)) {\n const dx = x - this.mInitialMotionX;\n const dy = y - this.mInitialMotionY;\n const slop = this.mLeftDragger.getTouchSlop();\n if (dx * dx + dy * dy < slop * slop) {\n const openDrawer = this.findOpenDrawer();\n if (openDrawer != null) {\n peekingOnly = this.getDrawerLockMode(openDrawer) == DrawerLayout.LOCK_MODE_LOCKED_OPEN;\n }\n }\n }\n this.closeDrawers(peekingOnly);\n this.mDisallowInterceptRequested = false;\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n this.closeDrawers(true);\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n }\n return wantTouchEvents;\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (DrawerLayout.CHILDREN_DISALLOW_INTERCEPT || (!this.mLeftDragger.isEdgeTouched(ViewDragHelper.EDGE_LEFT) && !this.mRightDragger.isEdgeTouched(ViewDragHelper.EDGE_RIGHT))) {\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n this.mDisallowInterceptRequested = disallowIntercept;\n if (disallowIntercept) {\n this.closeDrawers(true);\n }\n }\n closeDrawers(peekingOnly = false) {\n let needsInvalidate = false;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!this.isDrawerView(child) || (peekingOnly && !lp.isPeeking)) {\n continue;\n }\n const childWidth = child.getWidth();\n if (this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n needsInvalidate = this.mLeftDragger.smoothSlideViewTo(child, -childWidth, child.getTop()) || needsInvalidate;\n }\n else {\n needsInvalidate = this.mRightDragger.smoothSlideViewTo(child, this.getWidth(), child.getTop()) || needsInvalidate;\n }\n lp.isPeeking = false;\n }\n this.mLeftCallback.removeCallbacks();\n this.mRightCallback.removeCallbacks();\n if (needsInvalidate) {\n this.invalidate();\n }\n }\n openDrawer(arg) {\n if (arg instanceof View) {\n this._openDrawer_view(arg);\n }\n else {\n this._openDrawer_gravity(arg);\n }\n }\n _openDrawer_view(drawerView) {\n if (!this.isDrawerView(drawerView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a sliding drawer\")`);\n }\n if (this.mFirstLayout) {\n const lp = drawerView.getLayoutParams();\n lp.onScreen = 1.;\n lp.knownOpen = true;\n }\n else {\n if (this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT)) {\n this.mLeftDragger.smoothSlideViewTo(drawerView, 0, drawerView.getTop());\n }\n else {\n this.mRightDragger.smoothSlideViewTo(drawerView, this.getWidth() - drawerView.getWidth(), drawerView.getTop());\n }\n }\n this.invalidate();\n }\n _openDrawer_gravity(gravity) {\n const drawerView = this.findDrawerWithGravity(gravity);\n if (drawerView == null) {\n throw Error(`new IllegalArgumentException(\"No drawer view found with gravity \" + DrawerLayout.gravityToString(gravity))`);\n }\n this.openDrawer(drawerView);\n }\n closeDrawer(arg) {\n if (arg instanceof View) {\n this._closeDrawer_view(arg);\n }\n else {\n this._closeDrawer_gravity(arg);\n }\n }\n _closeDrawer_view(drawerView) {\n if (!this.isDrawerView(drawerView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a sliding drawer\")`);\n }\n if (this.mFirstLayout) {\n const lp = drawerView.getLayoutParams();\n lp.onScreen = 0.;\n lp.knownOpen = false;\n }\n else {\n if (this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT)) {\n this.mLeftDragger.smoothSlideViewTo(drawerView, -drawerView.getWidth(), drawerView.getTop());\n }\n else {\n this.mRightDragger.smoothSlideViewTo(drawerView, this.getWidth(), drawerView.getTop());\n }\n }\n this.invalidate();\n }\n _closeDrawer_gravity(gravity) {\n const drawerView = this.findDrawerWithGravity(gravity);\n if (drawerView == null) {\n throw Error(`new IllegalArgumentException(\"No drawer view found with gravity \" + DrawerLayout.gravityToString(gravity))`);\n }\n this.closeDrawer(drawerView);\n }\n isDrawerOpen(arg) {\n if (arg instanceof View) {\n return this._isDrawerOpen_view(arg);\n }\n else {\n return this._isDrawerOpen_gravity(arg);\n }\n }\n _isDrawerOpen_view(drawer) {\n if (!this.isDrawerView(drawer)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawer + \" is not a drawer\")`);\n }\n return drawer.getLayoutParams().knownOpen;\n }\n _isDrawerOpen_gravity(drawerGravity) {\n const drawerView = this.findDrawerWithGravity(drawerGravity);\n if (drawerView != null) {\n return this.isDrawerOpen(drawerView);\n }\n return false;\n }\n isDrawerVisible(arg) {\n if (arg instanceof View) {\n return this._isDrawerVisible_view(arg);\n }\n else {\n return this._isDrawerVisible_gravity(arg);\n }\n }\n _isDrawerVisible_view(drawer) {\n if (!this.isDrawerView(drawer)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawer + \" is not a drawer\")`);\n }\n return drawer.getLayoutParams().onScreen > 0;\n }\n _isDrawerVisible_gravity(drawerGravity) {\n const drawerView = this.findDrawerWithGravity(drawerGravity);\n if (drawerView != null) {\n return this.isDrawerVisible(drawerView);\n }\n return false;\n }\n hasPeekingDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const lp = this.getChildAt(i).getLayoutParams();\n if (lp.isPeeking) {\n return true;\n }\n }\n return false;\n }\n generateDefaultLayoutParams() {\n return new DrawerLayout.LayoutParams(DrawerLayout.LayoutParams.FILL_PARENT, DrawerLayout.LayoutParams.FILL_PARENT);\n }\n generateLayoutParams(p) {\n return p instanceof DrawerLayout.LayoutParams ? new DrawerLayout.LayoutParams(p)\n : p instanceof ViewGroup.MarginLayoutParams ? new DrawerLayout.LayoutParams(p)\n : new DrawerLayout.LayoutParams(p);\n }\n checkLayoutParams(p) {\n return p instanceof DrawerLayout.LayoutParams && super.checkLayoutParams(p);\n }\n hasVisibleDrawer() {\n return this.findVisibleDrawer() != null;\n }\n findVisibleDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (this.isDrawerView(child) && this.isDrawerVisible(child)) {\n return child;\n }\n }\n return null;\n }\n cancelChildViewTouch() {\n if (!this.mChildrenCanceledTouch) {\n const now = SystemClock.uptimeMillis();\n const cancelEvent = MotionEvent.obtainWithAction(now, now, MotionEvent.ACTION_CANCEL, 0.0, 0.0, 0);\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n this.getChildAt(i).dispatchTouchEvent(cancelEvent);\n }\n cancelEvent.recycle();\n this.mChildrenCanceledTouch = true;\n }\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && this.hasVisibleDrawer()) {\n event.startTracking();\n return true;\n }\n return super.onKeyDown(keyCode, event);\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n const visibleDrawer = this.findVisibleDrawer();\n if (visibleDrawer != null && this.getDrawerLockMode(visibleDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n this.closeDrawers();\n }\n return visibleDrawer != null;\n }\n return super.onKeyUp(keyCode, event);\n }\n }\n DrawerLayout.TAG = \"DrawerLayout\";\n DrawerLayout.STATE_IDLE = ViewDragHelper.STATE_IDLE;\n DrawerLayout.STATE_DRAGGING = ViewDragHelper.STATE_DRAGGING;\n DrawerLayout.STATE_SETTLING = ViewDragHelper.STATE_SETTLING;\n DrawerLayout.LOCK_MODE_UNLOCKED = 0;\n DrawerLayout.LOCK_MODE_LOCKED_CLOSED = 1;\n DrawerLayout.LOCK_MODE_LOCKED_OPEN = 2;\n DrawerLayout.MIN_DRAWER_MARGIN = 64;\n DrawerLayout.DEFAULT_SCRIM_COLOR = 0x99000000;\n DrawerLayout.PEEK_DELAY = 160;\n DrawerLayout.MIN_FLING_VELOCITY = 400;\n DrawerLayout.ALLOW_EDGE_LOCK = false;\n DrawerLayout.CHILDREN_DISALLOW_INTERCEPT = true;\n DrawerLayout.TOUCH_SLOP_SENSITIVITY = 1.;\n widget.DrawerLayout = DrawerLayout;\n (function (DrawerLayout) {\n class SimpleDrawerListener {\n onDrawerSlide(drawerView, slideOffset) {\n }\n onDrawerOpened(drawerView) {\n }\n onDrawerClosed(drawerView) {\n }\n onDrawerStateChanged(newState) {\n }\n }\n DrawerLayout.SimpleDrawerListener = SimpleDrawerListener;\n class ViewDragCallback extends ViewDragHelper.Callback {\n constructor(arg, gravity) {\n super();\n this.mAbsGravity = 0;\n this.mPeekRunnable = (() => {\n const _this = this;\n class _Inner {\n run() {\n _this.peekDrawer();\n }\n }\n return new _Inner();\n })();\n this._DrawerLayout_this = arg;\n this.mAbsGravity = gravity;\n }\n setDragger(dragger) {\n this.mDragger = dragger;\n }\n removeCallbacks() {\n this._DrawerLayout_this.removeCallbacks(this.mPeekRunnable);\n }\n tryCaptureView(child, pointerId) {\n return this._DrawerLayout_this.isDrawerView(child) && this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child, this.mAbsGravity) && this._DrawerLayout_this.getDrawerLockMode(child) == DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n onViewDragStateChanged(state) {\n this._DrawerLayout_this.updateDrawerState(this.mAbsGravity, state, this.mDragger.getCapturedView());\n }\n onViewPositionChanged(changedView, left, top, dx, dy) {\n let offset;\n const childWidth = changedView.getWidth();\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(changedView, Gravity.LEFT)) {\n offset = (childWidth + left) / childWidth;\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n offset = (width - left) / childWidth;\n }\n this._DrawerLayout_this.setDrawerViewOffset(changedView, offset);\n changedView.setVisibility(offset == 0 ? DrawerLayout.INVISIBLE : DrawerLayout.VISIBLE);\n this._DrawerLayout_this.invalidate();\n }\n onViewCaptured(capturedChild, activePointerId) {\n const lp = capturedChild.getLayoutParams();\n lp.isPeeking = false;\n this.closeOtherDrawer();\n }\n closeOtherDrawer() {\n const otherGrav = this.mAbsGravity == Gravity.LEFT ? Gravity.RIGHT : Gravity.LEFT;\n const toClose = this._DrawerLayout_this.findDrawerWithGravity(otherGrav);\n if (toClose != null) {\n this._DrawerLayout_this.closeDrawer(toClose);\n }\n }\n onViewReleased(releasedChild, xvel, yvel) {\n const offset = this._DrawerLayout_this.getDrawerViewOffset(releasedChild);\n const childWidth = releasedChild.getWidth();\n let left;\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(releasedChild, Gravity.LEFT)) {\n left = xvel > 0 || xvel == 0 && offset > 0.5 ? 0 : -childWidth;\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n left = xvel < 0 || xvel == 0 && offset > 0.5 ? width - childWidth : width;\n }\n this.mDragger.settleCapturedViewAt(left, releasedChild.getTop());\n this._DrawerLayout_this.invalidate();\n }\n onEdgeTouched(edgeFlags, pointerId) {\n this._DrawerLayout_this.postDelayed(this.mPeekRunnable, DrawerLayout.PEEK_DELAY);\n }\n peekDrawer() {\n let toCapture;\n let childLeft;\n const peekDistance = this.mDragger.getEdgeSize();\n const leftEdge = this.mAbsGravity == Gravity.LEFT;\n if (leftEdge) {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);\n childLeft = (toCapture != null ? -toCapture.getWidth() : 0) + peekDistance;\n }\n else {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);\n childLeft = this._DrawerLayout_this.getWidth() - peekDistance;\n }\n if (toCapture != null && ((leftEdge && toCapture.getLeft() < childLeft) || (!leftEdge && toCapture.getLeft() > childLeft)) && this._DrawerLayout_this.getDrawerLockMode(toCapture) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n const lp = toCapture.getLayoutParams();\n this.mDragger.smoothSlideViewTo(toCapture, childLeft, toCapture.getTop());\n lp.isPeeking = true;\n this._DrawerLayout_this.invalidate();\n this.closeOtherDrawer();\n this._DrawerLayout_this.cancelChildViewTouch();\n }\n }\n onEdgeLock(edgeFlags) {\n if (DrawerLayout.ALLOW_EDGE_LOCK) {\n const drawer = this._DrawerLayout_this.findDrawerWithGravity(this.mAbsGravity);\n if (drawer != null && !this._DrawerLayout_this.isDrawerOpen(drawer)) {\n this._DrawerLayout_this.closeDrawer(drawer);\n }\n return true;\n }\n return false;\n }\n onEdgeDragStarted(edgeFlags, pointerId) {\n let toCapture;\n if ((edgeFlags & ViewDragHelper.EDGE_LEFT) == ViewDragHelper.EDGE_LEFT) {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);\n }\n else {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);\n }\n if (toCapture != null && this._DrawerLayout_this.getDrawerLockMode(toCapture) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n this.mDragger.captureChildView(toCapture, pointerId);\n }\n }\n getViewHorizontalDragRange(child) {\n return child.getWidth();\n }\n clampViewPositionHorizontal(child, left, dx) {\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n return Math.max(-child.getWidth(), Math.min(left, 0));\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n return Math.max(width - child.getWidth(), Math.min(left, width));\n }\n }\n clampViewPositionVertical(child, top, dy) {\n return child.getTop();\n }\n }\n DrawerLayout.ViewDragCallback = ViewDragCallback;\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(args.length == 3 ? [args[0], args[1]] : args));\n this.gravity = Gravity.NO_GRAVITY;\n this.onScreen = 0;\n this._attrBinder.addAttr('gravity', (value) => {\n this.gravity = this._attrBinder.parseGravity(value, this.gravity);\n });\n }\n }\n DrawerLayout.LayoutParams = LayoutParams;\n })(DrawerLayout = widget.DrawerLayout || (widget.DrawerLayout = {}));\n })(widget = v4.widget || (v4.widget = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar com;\n(function (com) {\n var jakewharton;\n (function (jakewharton) {\n var salvage;\n (function (salvage) {\n var SparseArray = android.util.SparseArray;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n class RecyclingPagerAdapter extends PagerAdapter {\n constructor() {\n super();\n this.recycleBin = new RecycleBin();\n this.recycleBin.setViewTypeCount(this.getViewTypeCount());\n }\n notifyDataSetChanged() {\n this.recycleBin.scrapActiveViews();\n super.notifyDataSetChanged();\n }\n instantiateItem(container, position) {\n let viewType = this.getItemViewType(position);\n let view = null;\n if (viewType != RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE) {\n view = this.recycleBin.getScrapView(position, viewType);\n }\n view = this.getView(position, view, container);\n container.addView(view);\n return view;\n }\n destroyItem(container, position, object) {\n let view = object;\n container.removeView(view);\n let viewType = this.getItemViewType(position);\n if (viewType != RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE) {\n this.recycleBin.addScrapView(view, position, viewType);\n }\n }\n isViewFromObject(view, object) {\n return view === object;\n }\n getViewTypeCount() {\n return 1;\n }\n getItemViewType(position) {\n return 0;\n }\n }\n RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE = -1;\n salvage.RecyclingPagerAdapter = RecyclingPagerAdapter;\n class RecycleBin {\n constructor() {\n this.activeViews = [];\n this.activeViewTypes = [];\n this.viewTypeCount = 0;\n }\n setViewTypeCount(viewTypeCount) {\n if (viewTypeCount < 1) {\n throw new Error(\"Can't have a viewTypeCount < 1\");\n }\n let scrapViews = new Array(viewTypeCount);\n for (let i = 0; i < viewTypeCount; i++) {\n scrapViews[i] = new SparseArray();\n }\n this.viewTypeCount = viewTypeCount;\n this.currentScrapViews = scrapViews[0];\n this.scrapViews = scrapViews;\n }\n shouldRecycleViewType(viewType) {\n return viewType >= 0;\n }\n getScrapView(position, viewType) {\n if (this.viewTypeCount == 1) {\n return this.retrieveFromScrap(this.currentScrapViews, position);\n }\n else if (viewType >= 0 && viewType < this.scrapViews.length) {\n return this.retrieveFromScrap(this.scrapViews[viewType], position);\n }\n return null;\n }\n addScrapView(scrap, position, viewType) {\n if (this.viewTypeCount == 1) {\n this.currentScrapViews.put(position, scrap);\n }\n else {\n this.scrapViews[viewType].put(position, scrap);\n }\n }\n scrapActiveViews() {\n const activeViews = this.activeViews;\n const activeViewTypes = this.activeViewTypes;\n const multipleScraps = this.viewTypeCount > 1;\n let scrapViews = this.currentScrapViews;\n const count = activeViews.length;\n for (let i = count - 1; i >= 0; i--) {\n const victim = activeViews[i];\n if (victim != null) {\n let whichScrap = activeViewTypes[i];\n activeViews[i] = null;\n activeViewTypes[i] = -1;\n if (!this.shouldRecycleViewType(whichScrap)) {\n continue;\n }\n if (multipleScraps) {\n scrapViews = this.scrapViews[whichScrap];\n }\n scrapViews.put(i, victim);\n }\n }\n this.pruneScrapViews();\n }\n pruneScrapViews() {\n const maxViews = this.activeViews.length;\n const viewTypeCount = this.viewTypeCount;\n const scrapViews = this.scrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n let size = scrapPile.size();\n const extras = size - maxViews;\n size--;\n for (let j = 0; j < extras; j++) {\n scrapPile.remove(scrapPile.keyAt(size--));\n }\n }\n }\n retrieveFromScrap(scrapViews, position) {\n let size = scrapViews.size();\n if (size > 0) {\n for (let i = 0; i < size; i++) {\n let fromPosition = scrapViews.keyAt(i);\n let view = scrapViews.get(fromPosition);\n if (fromPosition == position) {\n scrapViews.remove(fromPosition);\n return view;\n }\n }\n let index = size - 1;\n let r = scrapViews.valueAt(index);\n scrapViews.remove(scrapViews.keyAt(index));\n return r;\n }\n else {\n return null;\n }\n }\n }\n })(salvage = jakewharton.salvage || (jakewharton.salvage = {}));\n })(jakewharton = com.jakewharton || (com.jakewharton = {}));\n})(com || (com = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var Log = android.util.Log;\n var MotionEvent = android.view.MotionEvent;\n var ScaleGestureDetector = android.view.ScaleGestureDetector;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n class GestureDetector {\n constructor() {\n this.mActivePointerId = GestureDetector.INVALID_POINTER_ID;\n this.mActivePointerIndex = 0;\n this.mLastTouchX = 0;\n this.mLastTouchY = 0;\n this.mTouchSlop = 0;\n this.mMinimumVelocity = 0;\n const configuration = ViewConfiguration.get();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n const _this = this;\n let scaleListener = {\n onScale(detector) {\n let scaleFactor = detector.getScaleFactor();\n if (Number.isNaN(scaleFactor) || !Number.isFinite(scaleFactor))\n return false;\n _this.mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY());\n return true;\n },\n onScaleBegin(detector) {\n return true;\n },\n onScaleEnd(detector) {\n }\n };\n this.mScaleDetector = new ScaleGestureDetector(scaleListener);\n }\n setOnGestureListener(listener) {\n this.mListener = listener;\n }\n getActiveX(ev) {\n return ev.getX(this.mActivePointerIndex < 0 ? 0 : this.mActivePointerIndex);\n }\n getActiveY(ev) {\n return ev.getY(this.mActivePointerIndex < 0 ? 0 : this.mActivePointerIndex);\n }\n isScaling() {\n return this.mScaleDetector.isInProgress();\n }\n isDragging() {\n return this.mIsDragging;\n }\n onTouchEvent(ev) {\n this.mScaleDetector.onTouchEvent(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n this.mActivePointerId = ev.getPointerId(0);\n break;\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mActivePointerId = GestureDetector.INVALID_POINTER_ID;\n break;\n case MotionEvent.ACTION_POINTER_UP:\n const pointerIndex = ev.getActionIndex();\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n this.mLastTouchX = ev.getX(newPointerIndex);\n this.mLastTouchY = ev.getY(newPointerIndex);\n }\n break;\n }\n this.mActivePointerIndex = ev.findPointerIndex(this.mActivePointerId != GestureDetector.INVALID_POINTER_ID ? this.mActivePointerId : 0);\n switch (ev.getAction()) {\n case MotionEvent.ACTION_DOWN:\n {\n this.mVelocityTracker = VelocityTracker.obtain();\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.addMovement(ev);\n }\n else {\n Log.i(GestureDetector.LOG_TAG, \"Velocity tracker is null\");\n }\n this.mLastTouchX = this.getActiveX(ev);\n this.mLastTouchY = this.getActiveY(ev);\n this.mIsDragging = false;\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n const x = this.getActiveX(ev);\n const y = this.getActiveY(ev);\n const dx = x - this.mLastTouchX, dy = y - this.mLastTouchY;\n if (!this.mIsDragging) {\n this.mIsDragging = Math.sqrt((dx * dx) + (dy * dy)) >= this.mTouchSlop;\n }\n if (this.mIsDragging) {\n this.mListener.onDrag(dx, dy);\n this.mLastTouchX = x;\n this.mLastTouchY = y;\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.addMovement(ev);\n }\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n if (this.mIsDragging) {\n if (null != this.mVelocityTracker) {\n this.mLastTouchX = this.getActiveX(ev);\n this.mLastTouchY = this.getActiveY(ev);\n this.mVelocityTracker.addMovement(ev);\n this.mVelocityTracker.computeCurrentVelocity(1000);\n const vX = this.mVelocityTracker.getXVelocity(), vY = this.mVelocityTracker.getYVelocity();\n if (Math.max(Math.abs(vX), Math.abs(vY)) >= this.mMinimumVelocity) {\n this.mListener.onFling(this.mLastTouchX, this.mLastTouchY, -vX, -vY);\n }\n }\n }\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n }\n return true;\n }\n }\n GestureDetector.LOG_TAG = \"CupcakeGestureDetector\";\n GestureDetector.INVALID_POINTER_ID = -1;\n photoview.GestureDetector = GestureDetector;\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var IPhotoView;\n (function (IPhotoView) {\n IPhotoView.DEFAULT_MAX_SCALE = 3.0;\n IPhotoView.DEFAULT_MID_SCALE = 1.75;\n IPhotoView.DEFAULT_MIN_SCALE = 1.0;\n IPhotoView.DEFAULT_ZOOM_DURATION = 200;\n function isImpl(obj) {\n if (!obj)\n return false;\n return obj['canZoom'] &&\n obj['getDisplayRect'] &&\n obj['setDisplayMatrix'] &&\n obj['getDisplayMatrix'] &&\n obj['getMinScale'] &&\n obj['getMinimumScale'] &&\n obj['getMidScale'] &&\n obj['getMediumScale'] &&\n obj['getMaxScale'] &&\n obj['getMaximumScale'] &&\n obj['getScale'] &&\n obj['getScaleType'] &&\n obj['setAllowParentInterceptOnEdge'] &&\n obj['setMinScale'] &&\n obj['setMinimumScale'] &&\n obj['setMidScale'] &&\n obj['setMediumScale'] &&\n obj['setMaxScale'] &&\n obj['setMaximumScale'] &&\n obj['setScaleLevels'] &&\n obj['setOnLongClickListener'] &&\n obj['setOnMatrixChangeListener'] &&\n obj['setOnPhotoTapListener'] &&\n obj['getOnPhotoTapListener'] &&\n obj['setOnViewTapListener'] &&\n obj['setRotationTo'] &&\n obj['setRotationBy'] &&\n obj['getOnViewTapListener'] &&\n obj['setScale'] &&\n obj['setScale'] &&\n obj['setScale'] &&\n obj['setScaleType'] &&\n obj['setZoomable'] &&\n obj['setPhotoViewRotation'] &&\n obj['getVisibleRectangleBitmap'] &&\n obj['setZoomTransitionDuration'] &&\n obj['getIPhotoViewImplementation'] &&\n obj['setOnDoubleTapListener'] &&\n obj['setOnScaleChangeListener'];\n }\n IPhotoView.isImpl = isImpl;\n })(IPhotoView = photoview.IPhotoView || (photoview.IPhotoView = {}));\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var Matrix = android.graphics.Matrix;\n var ScaleToFit = android.graphics.Matrix.ScaleToFit;\n var RectF = android.graphics.RectF;\n var Log = android.util.Log;\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var ScaleType = android.widget.ImageView.ScaleType;\n var OverScroller = android.widget.OverScroller;\n var WeakReference = java.lang.ref.WeakReference;\n var MotionEvent = android.view.MotionEvent;\n const ACTION_CANCEL = MotionEvent.ACTION_CANCEL;\n const ACTION_DOWN = MotionEvent.ACTION_DOWN;\n const ACTION_UP = MotionEvent.ACTION_UP;\n var System = java.lang.System;\n var GestureDetector = uk.co.senab.photoview.GestureDetector;\n var IPhotoView = uk.co.senab.photoview.IPhotoView;\n class PhotoViewAttacher {\n constructor(imageView, zoomable = true) {\n this.ZOOM_DURATION = IPhotoView.DEFAULT_ZOOM_DURATION;\n this.mMinScale = IPhotoView.DEFAULT_MIN_SCALE;\n this.mMidScale = IPhotoView.DEFAULT_MID_SCALE;\n this.mMaxScale = IPhotoView.DEFAULT_MAX_SCALE;\n this.mAllowParentInterceptOnEdge = true;\n this.mBlockParentIntercept = false;\n this.mBaseMatrix = new Matrix();\n this.mDrawMatrix = new Matrix();\n this.mSuppMatrix = new Matrix();\n this.mDisplayRect = new RectF();\n this.mMatrixValues = androidui.util.ArrayCreator.newNumberArray(9);\n this.mIvTop = 0;\n this.mIvRight = 0;\n this.mIvBottom = 0;\n this.mIvLeft = 0;\n this.mScrollEdge = PhotoViewAttacher.EDGE_BOTH;\n this.mScaleType = ScaleType.FIT_CENTER;\n this.mImageView = new WeakReference(imageView);\n imageView.setOnTouchListener(this);\n let observer = imageView.getViewTreeObserver();\n if (null != observer)\n observer.addOnGlobalLayoutListener(this);\n PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);\n this.mScaleDragDetector = new GestureDetector();\n this.mScaleDragDetector.setOnGestureListener(this);\n this.mGestureDetector = new android.view.GestureDetector((() => {\n const _this = this;\n class _Inner extends android.view.GestureDetector.SimpleOnGestureListener {\n onLongPress(e) {\n if (null != _this.mLongClickListener) {\n _this.mLongClickListener.onLongClick(_this.getImageView());\n }\n }\n }\n return new _Inner();\n })());\n this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));\n this.setZoomable(zoomable);\n }\n static checkZoomLevels(minZoom, midZoom, maxZoom) {\n if (minZoom >= midZoom) {\n throw Error(`new IllegalArgumentException(\"MinZoom has to be less than MidZoom\")`);\n }\n else if (midZoom >= maxZoom) {\n throw Error(`new IllegalArgumentException(\"MidZoom has to be less than MaxZoom\")`);\n }\n }\n static hasDrawable(imageView) {\n return null != imageView && null != imageView.getDrawable();\n }\n static isSupportedScaleType(scaleType) {\n if (null == scaleType) {\n return false;\n }\n switch (scaleType) {\n case ScaleType.MATRIX:\n throw Error(`new IllegalArgumentException(ScaleType.MATRIX is not supported in PhotoView)`);\n default:\n return true;\n }\n }\n static setImageViewScaleTypeMatrix(imageView) {\n if (null != imageView && !(IPhotoView.isImpl(imageView))) {\n if (ScaleType.MATRIX != (imageView.getScaleType())) {\n imageView.setScaleType(ScaleType.MATRIX);\n }\n }\n }\n setOnDoubleTapListener(newOnDoubleTapListener) {\n if (newOnDoubleTapListener != null) {\n this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener);\n }\n else {\n this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));\n }\n }\n setOnScaleChangeListener(onScaleChangeListener) {\n this.mScaleChangeListener = onScaleChangeListener;\n }\n canZoom() {\n return this.mZoomEnabled;\n }\n cleanup() {\n if (null == this.mImageView) {\n return;\n }\n const imageView = this.mImageView.get();\n if (null != imageView) {\n let observer = imageView.getViewTreeObserver();\n if (null != observer && observer.isAlive()) {\n observer.removeGlobalOnLayoutListener(this);\n }\n imageView.setOnTouchListener(null);\n this.cancelFling();\n }\n if (null != this.mGestureDetector) {\n this.mGestureDetector.setOnDoubleTapListener(null);\n }\n this.mMatrixChangeListener = null;\n this.mPhotoTapListener = null;\n this.mViewTapListener = null;\n this.mImageView = null;\n }\n getDisplayRect() {\n this.checkMatrixBounds();\n return this._getDisplayRect(this.getDrawMatrix());\n }\n setDisplayMatrix(finalMatrix) {\n if (finalMatrix == null)\n throw Error(`new IllegalArgumentException(\"Matrix cannot be null\")`);\n let imageView = this.getImageView();\n if (null == imageView)\n return false;\n if (null == imageView.getDrawable())\n return false;\n this.mSuppMatrix.set(finalMatrix);\n this.setImageViewMatrix(this.getDrawMatrix());\n this.checkMatrixBounds();\n return true;\n }\n setPhotoViewRotation(degrees) {\n this.mSuppMatrix.setRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n setRotationTo(degrees) {\n this.mSuppMatrix.setRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n setRotationBy(degrees) {\n this.mSuppMatrix.postRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n getImageView() {\n let imageView = null;\n if (null != this.mImageView) {\n imageView = this.mImageView.get();\n }\n if (null == imageView) {\n this.cleanup();\n if (PhotoViewAttacher.DEBUG)\n Log.i(PhotoViewAttacher.LOG_TAG, \"ImageView no longer exists. You should not use this PhotoViewAttacher any more.\");\n }\n return imageView;\n }\n getMinScale() {\n return this.getMinimumScale();\n }\n getMinimumScale() {\n return this.mMinScale;\n }\n getMidScale() {\n return this.getMediumScale();\n }\n getMediumScale() {\n return this.mMidScale;\n }\n getMaxScale() {\n return this.getMaximumScale();\n }\n getMaximumScale() {\n return this.mMaxScale;\n }\n getScale() {\n return Math.sqrt(Math.pow(this.getValue(this.mSuppMatrix, Matrix.MSCALE_X), 2) + Math.pow(this.getValue(this.mSuppMatrix, Matrix.MSKEW_Y), 2));\n }\n getScaleType() {\n return this.mScaleType;\n }\n onDrag(dx, dy) {\n if (this.mScaleDragDetector.isScaling()) {\n return;\n }\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, `onDrag: dx: ${dx.toFixed(2)}. dy: ${dy.toFixed(2)}`);\n }\n let imageView = this.getImageView();\n this.mSuppMatrix.postTranslate(dx, dy);\n this.checkAndDisplayMatrix();\n let parent = imageView.getParent();\n if (this.mAllowParentInterceptOnEdge && !this.mScaleDragDetector.isScaling() && !this.mBlockParentIntercept) {\n if (this.mScrollEdge == PhotoViewAttacher.EDGE_BOTH || (this.mScrollEdge == PhotoViewAttacher.EDGE_LEFT && dx >= 1) || (this.mScrollEdge == PhotoViewAttacher.EDGE_RIGHT && dx <= -1)) {\n if (null != parent)\n parent.requestDisallowInterceptTouchEvent(false);\n }\n }\n else {\n if (null != parent) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n }\n onFling(startX, startY, velocityX, velocityY) {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"onFling. sX: \" + startX + \" sY: \" + startY + \" Vx: \" + velocityX + \" Vy: \" + velocityY);\n }\n let imageView = this.getImageView();\n this.mCurrentFlingRunnable = new PhotoViewAttacher.FlingRunnable(this);\n this.mCurrentFlingRunnable.fling(this.getImageViewWidth(imageView), this.getImageViewHeight(imageView), Math.floor(velocityX), Math.floor(velocityY));\n imageView.post(this.mCurrentFlingRunnable);\n }\n onGlobalLayout() {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (this.mZoomEnabled) {\n const top = imageView.getTop();\n const right = imageView.getRight();\n const bottom = imageView.getBottom();\n const left = imageView.getLeft();\n if (top != this.mIvTop || bottom != this.mIvBottom || left != this.mIvLeft || right != this.mIvRight) {\n this.updateBaseMatrix(imageView.getDrawable());\n this.mIvTop = top;\n this.mIvRight = right;\n this.mIvBottom = bottom;\n this.mIvLeft = left;\n }\n }\n else {\n this.updateBaseMatrix(imageView.getDrawable());\n }\n }\n }\n onScale(scaleFactor, focusX, focusY) {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, `onScale: scale: ${scaleFactor.toFixed(2)}. fX: ${focusX.toFixed(2)}. fY: ${focusY.toFixed(2)}f`);\n }\n if (this.getScale() < this.mMaxScale || scaleFactor < 1) {\n if (null != this.mScaleChangeListener) {\n this.mScaleChangeListener.onScaleChange(scaleFactor, focusX, focusY);\n }\n this.mSuppMatrix.postScale(scaleFactor, scaleFactor, focusX, focusY);\n this.checkAndDisplayMatrix();\n }\n }\n onTouch(v, ev) {\n let handled = false;\n if (this.mZoomEnabled && PhotoViewAttacher.hasDrawable(v)) {\n let parent = v.getParent();\n switch (ev.getAction()) {\n case ACTION_DOWN:\n if (null != parent) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n else {\n Log.i(PhotoViewAttacher.LOG_TAG, \"onTouch getParent() returned null\");\n }\n this.cancelFling();\n break;\n case ACTION_CANCEL:\n case ACTION_UP:\n if (this.getScale() < this.mMinScale) {\n let rect = this.getDisplayRect();\n if (null != rect) {\n v.post(new PhotoViewAttacher.AnimatedZoomRunnable(this, this.getScale(), this.mMinScale, rect.centerX(), rect.centerY()));\n handled = true;\n }\n }\n break;\n }\n if (null != this.mScaleDragDetector) {\n let wasScaling = this.mScaleDragDetector.isScaling();\n let wasDragging = this.mScaleDragDetector.isDragging();\n handled = this.mScaleDragDetector.onTouchEvent(ev);\n let didntScale = !wasScaling && !this.mScaleDragDetector.isScaling();\n let didntDrag = !wasDragging && !this.mScaleDragDetector.isDragging();\n this.mBlockParentIntercept = didntScale && didntDrag;\n }\n if (null != this.mGestureDetector && this.mGestureDetector.onTouchEvent(ev)) {\n handled = true;\n }\n }\n return handled;\n }\n setAllowParentInterceptOnEdge(allow) {\n this.mAllowParentInterceptOnEdge = allow;\n }\n setMinScale(minScale) {\n this.setMinimumScale(minScale);\n }\n setMinimumScale(minimumScale) {\n PhotoViewAttacher.checkZoomLevels(minimumScale, this.mMidScale, this.mMaxScale);\n this.mMinScale = minimumScale;\n }\n setMidScale(midScale) {\n this.setMediumScale(midScale);\n }\n setMediumScale(mediumScale) {\n PhotoViewAttacher.checkZoomLevels(this.mMinScale, mediumScale, this.mMaxScale);\n this.mMidScale = mediumScale;\n }\n setMaxScale(maxScale) {\n this.setMaximumScale(maxScale);\n }\n setMaximumScale(maximumScale) {\n PhotoViewAttacher.checkZoomLevels(this.mMinScale, this.mMidScale, maximumScale);\n this.mMaxScale = maximumScale;\n }\n setScaleLevels(minimumScale, mediumScale, maximumScale) {\n PhotoViewAttacher.checkZoomLevels(minimumScale, mediumScale, maximumScale);\n this.mMinScale = minimumScale;\n this.mMidScale = mediumScale;\n this.mMaxScale = maximumScale;\n }\n setOnLongClickListener(listener) {\n this.mLongClickListener = listener;\n }\n setOnMatrixChangeListener(listener) {\n this.mMatrixChangeListener = listener;\n }\n setOnPhotoTapListener(listener) {\n this.mPhotoTapListener = listener;\n }\n getOnPhotoTapListener() {\n return this.mPhotoTapListener;\n }\n setOnViewTapListener(listener) {\n this.mViewTapListener = listener;\n }\n getOnViewTapListener() {\n return this.mViewTapListener;\n }\n setScale(...args) {\n if (args.length >= 3) {\n this.setScale_4(...args);\n }\n else {\n this.setScale_2(...args);\n }\n }\n setScale_2(scale, animate = false) {\n let imageView = this.getImageView();\n if (null != imageView) {\n this.setScale(scale, (imageView.getRight()) / 2, (imageView.getBottom()) / 2, animate);\n }\n }\n setScale_4(scale, focalX, focalY, animate = false) {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (scale < this.mMinScale || scale > this.mMaxScale) {\n Log.i(PhotoViewAttacher.LOG_TAG, \"Scale must be within the range of minScale and maxScale\");\n return;\n }\n if (animate) {\n imageView.post(new PhotoViewAttacher.AnimatedZoomRunnable(this, this.getScale(), scale, focalX, focalY));\n }\n else {\n this.mSuppMatrix.setScale(scale, scale, focalX, focalY);\n this.checkAndDisplayMatrix();\n }\n }\n }\n setScaleType(scaleType) {\n if (PhotoViewAttacher.isSupportedScaleType(scaleType) && scaleType != this.mScaleType) {\n this.mScaleType = scaleType;\n this.update();\n }\n }\n setZoomable(zoomable) {\n this.mZoomEnabled = zoomable;\n this.update();\n }\n update() {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (this.mZoomEnabled) {\n PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);\n this.updateBaseMatrix(imageView.getDrawable());\n }\n else {\n this.resetMatrix();\n }\n }\n }\n getDisplayMatrix() {\n return new Matrix(this.getDrawMatrix());\n }\n getDrawMatrix() {\n this.mDrawMatrix.set(this.mBaseMatrix);\n this.mDrawMatrix.postConcat(this.mSuppMatrix);\n return this.mDrawMatrix;\n }\n cancelFling() {\n if (null != this.mCurrentFlingRunnable) {\n this.mCurrentFlingRunnable.cancelFling();\n this.mCurrentFlingRunnable = null;\n }\n }\n checkAndDisplayMatrix() {\n if (this.checkMatrixBounds()) {\n this.setImageViewMatrix(this.getDrawMatrix());\n }\n }\n checkImageViewScaleType() {\n let imageView = this.getImageView();\n if (null != imageView && !(IPhotoView.isImpl(imageView))) {\n if (ScaleType.MATRIX != (imageView.getScaleType())) {\n throw Error(`new IllegalStateException(\"The ImageView's ScaleType has been changed since attaching a PhotoViewAttacher\")`);\n }\n }\n }\n checkMatrixBounds() {\n const imageView = this.getImageView();\n if (null == imageView) {\n return false;\n }\n const rect = this._getDisplayRect(this.getDrawMatrix());\n if (null == rect) {\n return false;\n }\n const height = rect.height(), width = rect.width();\n let deltaX = 0, deltaY = 0;\n const viewHeight = this.getImageViewHeight(imageView);\n if (height <= viewHeight) {\n switch (this.mScaleType) {\n case ScaleType.FIT_START:\n deltaY = -rect.top;\n break;\n case ScaleType.FIT_END:\n deltaY = viewHeight - height - rect.top;\n break;\n default:\n deltaY = (viewHeight - height) / 2 - rect.top;\n break;\n }\n }\n else if (rect.top > 0) {\n deltaY = -rect.top;\n }\n else if (rect.bottom < viewHeight) {\n deltaY = viewHeight - rect.bottom;\n }\n const viewWidth = this.getImageViewWidth(imageView);\n if (width <= viewWidth) {\n switch (this.mScaleType) {\n case ScaleType.FIT_START:\n deltaX = -rect.left;\n break;\n case ScaleType.FIT_END:\n deltaX = viewWidth - width - rect.left;\n break;\n default:\n deltaX = (viewWidth - width) / 2 - rect.left;\n break;\n }\n this.mScrollEdge = PhotoViewAttacher.EDGE_BOTH;\n }\n else if (rect.left > 0) {\n this.mScrollEdge = PhotoViewAttacher.EDGE_LEFT;\n deltaX = -rect.left;\n }\n else if (rect.right < viewWidth) {\n deltaX = viewWidth - rect.right;\n this.mScrollEdge = PhotoViewAttacher.EDGE_RIGHT;\n }\n else {\n this.mScrollEdge = PhotoViewAttacher.EDGE_NONE;\n }\n this.mSuppMatrix.postTranslate(deltaX, deltaY);\n return true;\n }\n _getDisplayRect(matrix) {\n let imageView = this.getImageView();\n if (null != imageView) {\n let d = imageView.getDrawable();\n if (null != d) {\n this.mDisplayRect.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());\n matrix.mapRect(this.mDisplayRect);\n return this.mDisplayRect;\n }\n }\n return null;\n }\n getVisibleRectangleBitmap() {\n let imageView = this.getImageView();\n return imageView == null ? null : imageView.getDrawingCache();\n }\n setZoomTransitionDuration(milliseconds) {\n if (milliseconds < 0)\n milliseconds = IPhotoView.DEFAULT_ZOOM_DURATION;\n this.ZOOM_DURATION = milliseconds;\n }\n getIPhotoViewImplementation() {\n return this;\n }\n getValue(matrix, whichValue) {\n matrix.getValues(this.mMatrixValues);\n return this.mMatrixValues[whichValue];\n }\n resetMatrix() {\n this.mSuppMatrix.reset();\n this.setImageViewMatrix(this.getDrawMatrix());\n this.checkMatrixBounds();\n }\n setImageViewMatrix(matrix) {\n let imageView = this.getImageView();\n if (null != imageView) {\n this.checkImageViewScaleType();\n imageView.setImageMatrix(matrix);\n if (null != this.mMatrixChangeListener) {\n let displayRect = this._getDisplayRect(matrix);\n if (null != displayRect) {\n this.mMatrixChangeListener.onMatrixChanged(displayRect);\n }\n }\n }\n }\n updateBaseMatrix(d) {\n let imageView = this.getImageView();\n if (null == imageView || null == d) {\n return;\n }\n const viewWidth = this.getImageViewWidth(imageView);\n const viewHeight = this.getImageViewHeight(imageView);\n const drawableWidth = d.getIntrinsicWidth();\n const drawableHeight = d.getIntrinsicHeight();\n this.mBaseMatrix.reset();\n const widthScale = viewWidth / drawableWidth;\n const heightScale = viewHeight / drawableHeight;\n if (this.mScaleType == ScaleType.CENTER) {\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth) / 2, (viewHeight - drawableHeight) / 2);\n }\n else if (this.mScaleType == ScaleType.CENTER_CROP) {\n let scale = Math.max(widthScale, heightScale);\n this.mBaseMatrix.postScale(scale, scale);\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight * scale) / 2);\n }\n else if (this.mScaleType == ScaleType.CENTER_INSIDE) {\n let scale = Math.min(1.0, Math.min(widthScale, heightScale));\n this.mBaseMatrix.postScale(scale, scale);\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight * scale) / 2);\n }\n else {\n let mTempSrc = new RectF(0, 0, drawableWidth, drawableHeight);\n let mTempDst = new RectF(0, 0, viewWidth, viewHeight);\n switch (this.mScaleType) {\n case ScaleType.FIT_CENTER:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.CENTER);\n break;\n case ScaleType.FIT_START:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.START);\n break;\n case ScaleType.FIT_END:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.END);\n break;\n case ScaleType.FIT_XY:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.FILL);\n break;\n default:\n break;\n }\n }\n this.resetMatrix();\n }\n getImageViewWidth(imageView) {\n if (null == imageView)\n return 0;\n return imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight();\n }\n getImageViewHeight(imageView) {\n if (null == imageView)\n return 0;\n return imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom();\n }\n }\n PhotoViewAttacher.LOG_TAG = \"PhotoViewAttacher\";\n PhotoViewAttacher.DEBUG = Log.View_DBG;\n PhotoViewAttacher.sInterpolator = new AccelerateDecelerateInterpolator();\n PhotoViewAttacher.EDGE_NONE = -1;\n PhotoViewAttacher.EDGE_LEFT = 0;\n PhotoViewAttacher.EDGE_RIGHT = 1;\n PhotoViewAttacher.EDGE_BOTH = 2;\n photoview.PhotoViewAttacher = PhotoViewAttacher;\n (function (PhotoViewAttacher) {\n class AnimatedZoomRunnable {\n constructor(arg, currentZoom, targetZoom, focalX, focalY) {\n this.mFocalX = 0;\n this.mFocalY = 0;\n this.mStartTime = 0;\n this.mZoomStart = 0;\n this.mZoomEnd = 0;\n this._PhotoViewAttacher_this = arg;\n this.mFocalX = focalX;\n this.mFocalY = focalY;\n this.mStartTime = System.currentTimeMillis();\n this.mZoomStart = currentZoom;\n this.mZoomEnd = targetZoom;\n }\n run() {\n let imageView = this._PhotoViewAttacher_this.getImageView();\n if (imageView == null) {\n return;\n }\n let t = this.interpolate();\n let scale = this.mZoomStart + t * (this.mZoomEnd - this.mZoomStart);\n let deltaScale = scale / this._PhotoViewAttacher_this.getScale();\n this._PhotoViewAttacher_this.onScale(deltaScale, this.mFocalX, this.mFocalY);\n if (t < 1) {\n imageView.postOnAnimation(this);\n }\n }\n interpolate() {\n let t = 1 * (System.currentTimeMillis() - this.mStartTime) / this._PhotoViewAttacher_this.ZOOM_DURATION;\n t = Math.min(1, t);\n t = PhotoViewAttacher.sInterpolator.getInterpolation(t);\n return t;\n }\n }\n PhotoViewAttacher.AnimatedZoomRunnable = AnimatedZoomRunnable;\n class FlingRunnable {\n constructor(arg) {\n this.mCurrentX = 0;\n this.mCurrentY = 0;\n this._PhotoViewAttacher_this = arg;\n this.mScroller = new OverScroller();\n }\n cancelFling() {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"Cancel Fling\");\n }\n this.mScroller.forceFinished(true);\n }\n fling(viewWidth, viewHeight, velocityX, velocityY) {\n const rect = this._PhotoViewAttacher_this.getDisplayRect();\n if (null == rect) {\n return;\n }\n const startX = Math.round(-rect.left);\n let minX, maxX, minY, maxY;\n if (viewWidth < rect.width()) {\n minX = 0;\n maxX = Math.round(rect.width() - viewWidth);\n }\n else {\n minX = maxX = startX;\n }\n const startY = Math.round(-rect.top);\n if (viewHeight < rect.height()) {\n minY = 0;\n maxY = Math.round(rect.height() - viewHeight);\n }\n else {\n minY = maxY = startY;\n }\n this.mCurrentX = startX;\n this.mCurrentY = startY;\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"fling. StartX:\" + startX + \" StartY:\" + startY + \" MaxX:\" + maxX + \" MaxY:\" + maxY);\n }\n if (startX != maxX || startY != maxY) {\n this.mScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, 0, 0);\n }\n }\n run() {\n if (this.mScroller.isFinished()) {\n return;\n }\n let imageView = this._PhotoViewAttacher_this.getImageView();\n if (null != imageView && this.mScroller.computeScrollOffset()) {\n const newX = this.mScroller.getCurrX();\n const newY = this.mScroller.getCurrY();\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"fling run(). CurrentX:\" + this.mCurrentX + \" CurrentY:\" + this.mCurrentY + \" NewX:\" + newX + \" NewY:\" + newY);\n }\n this._PhotoViewAttacher_this.mSuppMatrix.postTranslate(this.mCurrentX - newX, this.mCurrentY - newY);\n this._PhotoViewAttacher_this.setImageViewMatrix(this._PhotoViewAttacher_this.getDrawMatrix());\n this.mCurrentX = newX;\n this.mCurrentY = newY;\n imageView.postOnAnimation(this);\n }\n }\n }\n PhotoViewAttacher.FlingRunnable = FlingRunnable;\n class DefaultOnDoubleTapListener {\n constructor(photoViewAttacher) {\n this.setPhotoViewAttacher(photoViewAttacher);\n }\n setPhotoViewAttacher(newPhotoViewAttacher) {\n this.photoViewAttacher = newPhotoViewAttacher;\n }\n onSingleTapConfirmed(e) {\n if (this.photoViewAttacher == null)\n return false;\n let imageView = this.photoViewAttacher.getImageView();\n if (null != this.photoViewAttacher.getOnPhotoTapListener()) {\n const displayRect = this.photoViewAttacher.getDisplayRect();\n if (null != displayRect) {\n const x = e.getX(), y = e.getY();\n if (displayRect.contains(x, y)) {\n let xResult = (x - displayRect.left) / displayRect.width();\n let yResult = (y - displayRect.top) / displayRect.height();\n this.photoViewAttacher.getOnPhotoTapListener().onPhotoTap(imageView, xResult, yResult);\n return true;\n }\n }\n }\n if (null != this.photoViewAttacher.getOnViewTapListener()) {\n this.photoViewAttacher.getOnViewTapListener().onViewTap(imageView, e.getX(), e.getY());\n }\n return false;\n }\n onDoubleTap(ev) {\n if (this.photoViewAttacher == null)\n return false;\n try {\n let scale = this.photoViewAttacher.getScale();\n let x = ev.getX();\n let y = ev.getY();\n if (scale < this.photoViewAttacher.getMediumScale()) {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMediumScale(), x, y, true);\n }\n else if (scale >= this.photoViewAttacher.getMediumScale() && scale < this.photoViewAttacher.getMaximumScale()) {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMaximumScale(), x, y, true);\n }\n else {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMinimumScale(), x, y, true);\n }\n }\n catch (e) {\n }\n return true;\n }\n onDoubleTapEvent(e) {\n return false;\n }\n }\n PhotoViewAttacher.DefaultOnDoubleTapListener = DefaultOnDoubleTapListener;\n })(PhotoViewAttacher = photoview.PhotoViewAttacher || (photoview.PhotoViewAttacher = {}));\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var ImageView = android.widget.ImageView;\n var PhotoViewAttacher = uk.co.senab.photoview.PhotoViewAttacher;\n var ScaleType = ImageView.ScaleType;\n class PhotoView extends ImageView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n super.setScaleType(ScaleType.MATRIX);\n this.init();\n }\n init() {\n if (null == this.mAttacher || null == this.mAttacher.getImageView()) {\n this.mAttacher = new PhotoViewAttacher(this);\n }\n if (null != this.mPendingScaleType) {\n this.setScaleType(this.mPendingScaleType);\n this.mPendingScaleType = null;\n }\n }\n setPhotoViewRotation(rotationDegree) {\n this.mAttacher.setRotationTo(rotationDegree);\n }\n setRotationTo(rotationDegree) {\n this.mAttacher.setRotationTo(rotationDegree);\n }\n setRotationBy(rotationDegree) {\n this.mAttacher.setRotationBy(rotationDegree);\n }\n canZoom() {\n return this.mAttacher.canZoom();\n }\n getDisplayRect() {\n return this.mAttacher.getDisplayRect();\n }\n getDisplayMatrix() {\n return this.mAttacher.getDisplayMatrix();\n }\n setDisplayMatrix(finalRectangle) {\n return this.mAttacher.setDisplayMatrix(finalRectangle);\n }\n getMinScale() {\n return this.getMinimumScale();\n }\n getMinimumScale() {\n return this.mAttacher.getMinimumScale();\n }\n getMidScale() {\n return this.getMediumScale();\n }\n getMediumScale() {\n return this.mAttacher.getMediumScale();\n }\n getMaxScale() {\n return this.getMaximumScale();\n }\n getMaximumScale() {\n return this.mAttacher.getMaximumScale();\n }\n getScale() {\n return this.mAttacher.getScale();\n }\n getScaleType() {\n return this.mAttacher.getScaleType();\n }\n setAllowParentInterceptOnEdge(allow) {\n this.mAttacher.setAllowParentInterceptOnEdge(allow);\n }\n setMinScale(minScale) {\n this.setMinimumScale(minScale);\n }\n setMinimumScale(minimumScale) {\n this.mAttacher.setMinimumScale(minimumScale);\n }\n setMidScale(midScale) {\n this.setMediumScale(midScale);\n }\n setMediumScale(mediumScale) {\n this.mAttacher.setMediumScale(mediumScale);\n }\n setMaxScale(maxScale) {\n this.setMaximumScale(maxScale);\n }\n setMaximumScale(maximumScale) {\n this.mAttacher.setMaximumScale(maximumScale);\n }\n setScaleLevels(minimumScale, mediumScale, maximumScale) {\n this.mAttacher.setScaleLevels(minimumScale, mediumScale, maximumScale);\n }\n setImageDrawable(drawable) {\n super.setImageDrawable(drawable);\n if (null != this.mAttacher) {\n this.mAttacher.update();\n }\n }\n setImageURI(uri) {\n super.setImageURI(uri);\n }\n resizeFromDrawable() {\n let change = super.resizeFromDrawable();\n if (change && null != this.mAttacher) {\n this.mAttacher.update();\n }\n return change;\n }\n setOnMatrixChangeListener(listener) {\n this.mAttacher.setOnMatrixChangeListener(listener);\n }\n setOnLongClickListener(l) {\n this.mAttacher.setOnLongClickListener(l);\n }\n setOnPhotoTapListener(listener) {\n this.mAttacher.setOnPhotoTapListener(listener);\n }\n getOnPhotoTapListener() {\n return this.mAttacher.getOnPhotoTapListener();\n }\n setOnViewTapListener(listener) {\n this.mAttacher.setOnViewTapListener(listener);\n }\n getOnViewTapListener() {\n return this.mAttacher.getOnViewTapListener();\n }\n setScale(...args) {\n this.mAttacher.setScale(...args);\n }\n setScaleType(scaleType) {\n if (null != this.mAttacher) {\n this.mAttacher.setScaleType(scaleType);\n }\n else {\n this.mPendingScaleType = scaleType;\n }\n }\n setZoomable(zoomable) {\n this.mAttacher.setZoomable(zoomable);\n }\n getVisibleRectangleBitmap() {\n return this.mAttacher.getVisibleRectangleBitmap();\n }\n setZoomTransitionDuration(milliseconds) {\n this.mAttacher.setZoomTransitionDuration(milliseconds);\n }\n getIPhotoViewImplementation() {\n return this.mAttacher;\n }\n setOnDoubleTapListener(newOnDoubleTapListener) {\n this.mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);\n }\n setOnScaleChangeListener(onScaleChangeListener) {\n this.mAttacher.setOnScaleChangeListener(onScaleChangeListener);\n }\n onDetachedFromWindow() {\n this.mAttacher.cleanup();\n super.onDetachedFromWindow();\n }\n onAttachedToWindow() {\n this.init();\n super.onAttachedToWindow();\n }\n }\n photoview.PhotoView = PhotoView;\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var View = android.view.View;\n var FrameLayout = android.widget.FrameLayout;\n class ActionBar extends FrameLayout {\n constructor(context, bindElement, defStyle = android.R.attr.actionBarStyle) {\n super(context, bindElement, defStyle);\n context.getLayoutInflater().inflate(android.R.layout.action_bar, this);\n this.mCenterLayout = this.findViewById('action_bar_center_layout');\n this.mTitleView = this.findViewById('action_bar_title');\n this.mSubTitleView = this.findViewById('action_bar_sub_title');\n this.mActionLeft = this.findViewById('action_bar_left');\n this.mActionRight = this.findViewById('action_bar_right');\n }\n setCustomView(view, layoutParams) {\n this.mCenterLayout.removeAllViews();\n this.mCustomView = view;\n if (layoutParams)\n this.mCenterLayout.addView(view, layoutParams);\n else\n this.mCenterLayout.addView(view);\n }\n setIcon(icon) {\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n let drawables = this.mTitleView.getCompoundDrawables();\n this.mTitleView.setCompoundDrawables(icon, drawables[1], drawables[2], drawables[3]);\n }\n setLogo(logo) {\n this.setIcon(logo);\n }\n setTitle(title) {\n this.mTitleView.setText(title);\n }\n setSubtitle(subtitle) {\n this.mSubTitleView.setText(subtitle);\n let empty = subtitle == null || subtitle.length == 0;\n this.mSubTitleView.setVisibility(empty ? View.GONE : View.VISIBLE);\n }\n getCustomView() {\n return this.mCustomView;\n }\n getTitle() {\n return this.mTitleView.getText().toString();\n }\n getSubtitle() {\n return this.mSubTitleView.getText().toString();\n }\n show() {\n this.setVisibility(View.VISIBLE);\n }\n hide() {\n this.setVisibility(View.GONE);\n }\n isShowing() {\n return this.isShown();\n }\n setActionLeft(name, icon, listener) {\n this.mActionLeft.setText(name);\n this.mActionLeft.setVisibility(View.VISIBLE);\n let drawables = this.mActionLeft.getCompoundDrawables();\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n this.mActionLeft.setCompoundDrawables(icon, drawables[1], drawables[2], drawables[3]);\n this.mActionLeft.setOnClickListener(listener);\n }\n hideActionLeft() {\n this.mActionLeft.setVisibility(View.GONE);\n }\n setActionRight(name, icon, listener) {\n this.mActionRight.setText(name);\n this.mActionRight.setVisibility(View.VISIBLE);\n let drawables = this.mActionRight.getCompoundDrawables();\n if (icon)\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n this.mActionRight.setCompoundDrawables(drawables[0], drawables[1], icon, drawables[3]);\n this.mActionRight.setOnClickListener(listener);\n }\n hideActionRight() {\n this.mActionRight.setVisibility(View.GONE);\n }\n }\n app.ActionBar = ActionBar;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n class ActionBarActivity extends app.Activity {\n onCreate(savedInstanceState) {\n super.onCreate(savedInstanceState);\n this.initActionBar();\n }\n initActionBar() {\n this.setActionBar(new app.ActionBar(this));\n this.initDefaultBackFinish();\n }\n initDefaultBackFinish() {\n if (this.androidUI.mActivityThread.mLaunchedActivities.size === 0)\n return;\n const activity = this;\n this.mActionBar.setActionLeft(android.R.string_.back, android.R.image.actionbar_ic_back_white, {\n onClick(view) {\n activity.finish();\n }\n });\n }\n setActionBar(actionBar) {\n const activity = this;\n let w = this.getWindow();\n let decorView = w.mDecor;\n this.mActionBar = actionBar;\n decorView.addView(actionBar, -1, -2);\n const onMeasure = decorView.onMeasure;\n decorView.onMeasure = (widthMeasureSpec, heightMeasureSpec) => {\n onMeasure.call(decorView, widthMeasureSpec, heightMeasureSpec);\n if (activity.mActionBar === actionBar) {\n let params = w.mContentParent.getLayoutParams();\n if (params.topMargin != actionBar.getMeasuredHeight()) {\n params.topMargin = actionBar.getMeasuredHeight();\n onMeasure.call(decorView, widthMeasureSpec, heightMeasureSpec);\n }\n }\n };\n }\n invalidateOptionsMenuPopupHelper(menu) {\n let menuPopuoHelper = new android.view.menu.MenuPopupHelper(this, menu, this.getActionBar().mActionRight);\n if (menu.hasVisibleItems()) {\n this.getActionBar().setActionRight('', android.R.image.ic_menu_moreoverflow_normal_holo_dark, {\n onClick: function (view) {\n menuPopuoHelper.show();\n }\n });\n }\n return menuPopuoHelper;\n }\n getActionBar() {\n return this.mActionBar;\n }\n onTitleChanged(title, color) {\n super.onTitleChanged(title, color);\n this.mActionBar.setTitle(title);\n }\n }\n app.ActionBarActivity = ActionBarActivity;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n class HtmlView extends widget.HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = MeasureSpec.getSize(heightMeasureSpec);\n let width, height;\n const density = this.getResources().getDisplayMetrics().density;\n if (widthMode == MeasureSpec.EXACTLY) {\n width = widthSize;\n }\n else {\n let sWidth = this.bindElement.style.width, sLeft = this.bindElement.style.left;\n this.bindElement.style.width = '';\n this.bindElement.style.left = '';\n width = this.bindElement.offsetWidth * density + 2;\n this.bindElement.style.width = sWidth;\n this.bindElement.style.left = sLeft;\n width = Math.max(width, this.getSuggestedMinimumWidth());\n if (widthMode == MeasureSpec.AT_MOST) {\n width = Math.min(widthSize, width);\n }\n }\n if (heightMode == MeasureSpec.EXACTLY) {\n height = heightSize;\n }\n else {\n let sWidth = this.bindElement.style.width;\n this.bindElement.style.width = width / density + \"px\";\n this.bindElement.style.height = '';\n height = this.bindElement.offsetHeight * density;\n this.bindElement.style.width = sWidth;\n height = Math.max(height, this.getSuggestedMinimumHeight());\n if (heightMode == MeasureSpec.AT_MOST) {\n height = Math.min(height, heightSize);\n }\n }\n this.setMeasuredDimension(width, height);\n }\n setHtml(html) {\n this.bindElement.innerHTML = html;\n this.requestLayout();\n }\n getHtml() {\n return this.bindElement.innerHTML;\n }\n }\n widget.HtmlView = HtmlView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n var ImageView = android.widget.ImageView;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval('ImageView = android.widget.ImageView;');\n });\n class HtmlImageView extends widget.HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHaveFrame = false;\n this.mAdjustViewBounds = false;\n this.mMaxWidth = Number.MAX_SAFE_INTEGER;\n this.mMaxHeight = Number.MAX_SAFE_INTEGER;\n this.mAlpha = 255;\n this.mDrawableWidth = 0;\n this.mDrawableHeight = 0;\n this.mAdjustViewBoundsCompat = false;\n this.initImageView();\n this._attrBinder.addAttr('src', (value) => {\n this.setImageURI(value);\n }, () => {\n return this.mImgElement.src;\n });\n this._attrBinder.addAttr('adjustViewBounds', (value) => {\n this.setAdjustViewBounds(this._attrBinder.parseBoolean(value, false));\n });\n this._attrBinder.addAttr('maxWidth', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getWidth() : 0;\n this.setMaxWidth(this._attrBinder.parseNumberPixelSize(value, this.mMaxWidth, baseValue));\n }, () => {\n return this.mMaxWidth;\n });\n this._attrBinder.addAttr('maxHeight', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getHeight() : 0;\n this.setMaxHeight(this._attrBinder.parseNumberPixelSize(value, this.mMaxHeight, baseValue));\n }, () => {\n return this.mMaxHeight;\n });\n this._attrBinder.addAttr('scaleType', (value) => {\n this.setScaleType(ImageView.parseScaleType(value, this.mScaleType));\n }, () => {\n return this.mScaleType.toString();\n });\n }\n initImageView() {\n this.mScaleType = ImageView.ScaleType.FIT_CENTER;\n this.mImgElement = document.createElement('img');\n this.mImgElement.style.position = \"absolute\";\n this.mImgElement.onload = (() => {\n this.mImgElement.style.left = 0 + 'px';\n this.mImgElement.style.top = 0 + 'px';\n this.mImgElement.style.width = '';\n this.mImgElement.style.height = '';\n this.mDrawableWidth = this.mImgElement.width;\n this.mDrawableHeight = this.mImgElement.height;\n this.mImgElement.style.display = 'none';\n this.mImgElement.style.opacity = '';\n this.requestLayout();\n });\n this.bindElement.appendChild(this.mImgElement);\n }\n getAdjustViewBounds() {\n return this.mAdjustViewBounds;\n }\n setAdjustViewBounds(adjustViewBounds) {\n this.mAdjustViewBounds = adjustViewBounds;\n if (adjustViewBounds) {\n this.setScaleType(ImageView.ScaleType.FIT_CENTER);\n }\n }\n getMaxWidth() {\n return this.mMaxWidth;\n }\n setMaxWidth(maxWidth) {\n this.mMaxWidth = maxWidth;\n }\n getMaxHeight() {\n return this.mMaxHeight;\n }\n setMaxHeight(maxHeight) {\n this.mMaxHeight = maxHeight;\n }\n setImageURI(uri) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n this.mImgElement.style.opacity = '0';\n this.mImgElement.src = uri;\n }\n setScaleType(scaleType) {\n if (scaleType == null) {\n throw new Error('NullPointerException');\n }\n if (this.mScaleType != scaleType) {\n this.mScaleType = scaleType;\n this.setWillNotCacheDrawing(scaleType == ImageView.ScaleType.CENTER);\n this.requestLayout();\n this.invalidate();\n }\n }\n getScaleType() {\n return this.mScaleType;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let w;\n let h;\n let desiredAspect = 0.0;\n let resizeWidth = false;\n let resizeHeight = false;\n const widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);\n if (!this.mImgElement.src || !this.mImgElement.complete) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n w = h = 0;\n }\n else {\n w = this.mDrawableWidth;\n h = this.mDrawableHeight;\n if (w <= 0)\n w = 1;\n if (h <= 0)\n h = 1;\n if (this.mAdjustViewBounds) {\n resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;\n resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;\n desiredAspect = w / h;\n }\n }\n let pleft = this.mPaddingLeft;\n let pright = this.mPaddingRight;\n let ptop = this.mPaddingTop;\n let pbottom = this.mPaddingBottom;\n let widthSize;\n let heightSize;\n if (resizeWidth || resizeHeight) {\n widthSize = this.resolveAdjustedSize(w + pleft + pright, this.mMaxWidth, widthMeasureSpec);\n heightSize = this.resolveAdjustedSize(h + ptop + pbottom, this.mMaxHeight, heightMeasureSpec);\n if (desiredAspect != 0) {\n let actualAspect = (widthSize - pleft - pright) / (heightSize - ptop - pbottom);\n if (Math.abs(actualAspect - desiredAspect) > 0.0000001) {\n let done = false;\n if (resizeWidth) {\n let newWidth = Math.floor(desiredAspect * (heightSize - ptop - pbottom)) +\n pleft + pright;\n if (!resizeHeight && !this.mAdjustViewBoundsCompat) {\n widthSize = this.resolveAdjustedSize(newWidth, this.mMaxWidth, widthMeasureSpec);\n }\n if (newWidth <= widthSize) {\n widthSize = newWidth;\n done = true;\n }\n }\n if (!done && resizeHeight) {\n let newHeight = Math.floor((widthSize - pleft - pright) / desiredAspect) +\n ptop + pbottom;\n if (!resizeWidth && !this.mAdjustViewBoundsCompat) {\n heightSize = this.resolveAdjustedSize(newHeight, this.mMaxHeight, heightMeasureSpec);\n }\n if (newHeight <= heightSize) {\n heightSize = newHeight;\n }\n }\n }\n }\n }\n else {\n w += pleft + pright;\n h += ptop + pbottom;\n w = Math.max(w, this.getSuggestedMinimumWidth());\n h = Math.max(h, this.getSuggestedMinimumHeight());\n widthSize = HtmlImageView.resolveSizeAndState(w, widthMeasureSpec, 0);\n heightSize = HtmlImageView.resolveSizeAndState(h, heightMeasureSpec, 0);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n }\n resolveAdjustedSize(desiredSize, maxSize, measureSpec) {\n let result = desiredSize;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = Math.min(desiredSize, maxSize);\n break;\n case MeasureSpec.AT_MOST:\n result = Math.min(Math.min(desiredSize, specSize), maxSize);\n break;\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n setFrame(left, top, right, bottom) {\n let changed = super.setFrame(left, top, right, bottom);\n this.mHaveFrame = true;\n this.configureBounds();\n this.mImgElement.style.display = '';\n return changed;\n }\n configureBounds() {\n let dwidth = this.mDrawableWidth;\n let dheight = this.mDrawableHeight;\n let vwidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n let vheight = this.getHeight() - this.mPaddingTop - this.mPaddingBottom;\n let fits = (dwidth < 0 || vwidth == dwidth) && (dheight < 0 || vheight == dheight);\n this.mImgElement.style.left = 0 + 'px';\n this.mImgElement.style.top = 0 + 'px';\n this.mImgElement.style.width = '';\n this.mImgElement.style.height = '';\n if (dwidth <= 0 || dheight <= 0) {\n return;\n }\n if (this.mScaleType === ImageView.ScaleType.FIT_XY) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = vheight + 'px';\n return;\n }\n this.mImgElement.style.width = dwidth + 'px';\n this.mImgElement.style.height = dheight + 'px';\n if (ImageView.ScaleType.MATRIX === this.mScaleType) {\n }\n else if (fits) {\n }\n else if (ImageView.ScaleType.CENTER === this.mScaleType) {\n let left = Math.round((vwidth - dwidth) * 0.5);\n let top = Math.round((vheight - dheight) * 0.5);\n this.mImgElement.style.left = left + 'px';\n this.mImgElement.style.top = top + 'px';\n }\n else if (ImageView.ScaleType.CENTER_CROP === this.mScaleType) {\n let scale;\n let dx = 0, dy = 0;\n if (dwidth * vheight > vwidth * dheight) {\n scale = vheight / dheight;\n dx = (vwidth - dwidth * scale) * 0.5;\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n this.mImgElement.style.left = Math.round(dx) + 'px';\n this.mImgElement.style.top = '0px';\n }\n else {\n scale = vwidth / dwidth;\n dy = (vheight - dheight * scale) * 0.5;\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n this.mImgElement.style.left = '0px';\n this.mImgElement.style.top = Math.round(dy) + 'px';\n }\n }\n else if (ImageView.ScaleType.CENTER_INSIDE === this.mScaleType) {\n let scale = 1;\n if (dwidth <= vwidth && dheight <= vheight) {\n }\n else {\n let wScale = vwidth / dwidth;\n let hScale = vheight / dheight;\n if (wScale < hScale) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n }\n else {\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n }\n scale = Math.min(wScale, hScale);\n }\n let dx = Math.round((vwidth - dwidth * scale) * 0.5);\n let dy = Math.round((vheight - dheight * scale) * 0.5);\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else {\n let wScale = vwidth / dwidth;\n let hScale = vheight / dheight;\n if (wScale < hScale) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n }\n else {\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n }\n let scale = Math.min(wScale, hScale);\n if (ImageView.ScaleType.FIT_CENTER === this.mScaleType) {\n let dx = Math.round((vwidth - dwidth * scale) * 0.5);\n let dy = Math.round((vheight - dheight * scale) * 0.5);\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else if (ImageView.ScaleType.FIT_END === this.mScaleType) {\n let dx = Math.round((vwidth - dwidth * scale));\n let dy = Math.round((vheight - dheight * scale));\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else if (ImageView.ScaleType.FIT_START === this.mScaleType) {\n }\n }\n }\n getImageAlpha() {\n return this.mAlpha;\n }\n setImageAlpha(alpha) {\n this.setAlpha(alpha);\n }\n }\n widget.HtmlImageView = HtmlImageView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var AbsListView = android.widget.AbsListView;\n var BaseAdapter = android.widget.BaseAdapter;\n var AdapterView = android.widget.AdapterView;\n class HtmlDataListAdapter extends BaseAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n this.mContext = context;\n if (parent instanceof AbsListView) {\n parent.setAdapter(this);\n }\n bindElement[HtmlDataListAdapter.BindAdapterProperty] = this;\n this.registerHtmlDataObserver();\n }\n registerHtmlDataObserver() {\n if (!window['MutationObserver'])\n return;\n const adapter = this;\n function callBack(arr, observer) {\n adapter.notifyDataSetChanged();\n }\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n getItemViewType(position) {\n return AdapterView.ITEM_VIEW_TYPE_IGNORE;\n }\n getView(position, convertView, parent) {\n let element = this.getItem(position);\n let view = element[View.AndroidViewProperty];\n this.checkReplaceWithRef(element);\n if (!view) {\n view = View.inflate(this.mContext, element);\n element[View.AndroidViewProperty] = view;\n }\n return view;\n }\n getCount() {\n return this.bindElementData.children.length;\n }\n getItem(position) {\n let element = this.bindElementData.children[position];\n if (element.tagName === HtmlDataListAdapter.RefElementTag) {\n element = element[HtmlDataListAdapter.RefElementProperty];\n if (!element)\n throw Error('Reference element is ' + element);\n }\n return element;\n }\n checkReplaceWithRef(element) {\n let refElement = element[HtmlDataListAdapter.RefElementProperty] || document.createElement(HtmlDataListAdapter.RefElementTag);\n refElement[HtmlDataListAdapter.RefElementProperty] = element;\n element[HtmlDataListAdapter.RefElementProperty] = refElement;\n if (element.parentNode === this.bindElementData) {\n this.bindElementData.insertBefore(refElement, element);\n this.bindElementData.removeChild(element);\n }\n return refElement;\n }\n removeElementRefAndRestoreToAdapter(childElement) {\n if (childElement.tagName === HtmlDataListAdapter.RefElementTag) {\n let element = childElement[HtmlDataListAdapter.RefElementProperty];\n this.bindElementData.insertBefore(element, childElement);\n this.bindElementData.removeChild(childElement);\n }\n }\n notifyDataSizeWillChange() {\n for (let i = 0, count = this.bindElementData.children.length; i < count; i++) {\n this.removeElementRefAndRestoreToAdapter(this.bindElementData.children[i]);\n }\n this.notifyDataSetChanged();\n }\n getItemId(position) {\n let id = this.getItem(position).id;\n let idNumber = Number.parseInt(id);\n if (Number.isInteger(idNumber))\n return idNumber;\n return -1;\n }\n }\n HtmlDataListAdapter.RefElementTag = \"ref-element\".toUpperCase();\n HtmlDataListAdapter.RefElementProperty = \"RefElement\";\n HtmlDataListAdapter.BindAdapterProperty = \"BindAdapter\";\n widget.HtmlDataListAdapter = HtmlDataListAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var ViewPager = android.support.v4.view.ViewPager;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n class HtmlDataPagerAdapter extends PagerAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n this.mContext = context;\n if (parent instanceof ViewPager) {\n parent.setAdapter(this);\n }\n bindElement[HtmlDataPagerAdapter.BindAdapterProperty] = this;\n this.registerHtmlDataObserver();\n }\n registerHtmlDataObserver() {\n if (!window['MutationObserver'])\n return;\n const adapter = this;\n function callBack(arr, observer) {\n adapter.notifyDataSetChanged();\n }\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n getCount() {\n return this.bindElementData.children.length;\n }\n instantiateItem(container, position) {\n let element = this.getItem(position);\n let view = element[View.AndroidViewProperty];\n this.checkReplaceWithRef(element);\n if (!view) {\n view = View.inflate(this.mContext, element);\n element[View.AndroidViewProperty] = view;\n }\n container.addView(view);\n return view;\n }\n getItem(position) {\n let element = this.bindElementData.children[position];\n if (element.tagName === HtmlDataPagerAdapter.RefElementTag) {\n element = element[HtmlDataPagerAdapter.RefElementProperty];\n if (!element)\n throw Error('Reference element is ' + element);\n }\n return element;\n }\n checkReplaceWithRef(element) {\n let refElement = element[HtmlDataPagerAdapter.RefElementProperty] || document.createElement(HtmlDataPagerAdapter.RefElementTag);\n refElement[HtmlDataPagerAdapter.RefElementProperty] = element;\n element[HtmlDataPagerAdapter.RefElementProperty] = refElement;\n if (element.parentNode === this.bindElementData) {\n this.bindElementData.insertBefore(refElement, element);\n this.bindElementData.removeChild(element);\n }\n return refElement;\n }\n removeElementRefAndRestoreToAdapter(childElement) {\n if (childElement.tagName === HtmlDataPagerAdapter.RefElementTag) {\n let element = childElement[HtmlDataPagerAdapter.RefElementProperty];\n this.bindElementData.insertBefore(element, childElement);\n this.bindElementData.removeChild(childElement);\n }\n }\n notifyDataSizeWillChange() {\n for (let i = 0, count = this.bindElementData.children.length; i < count; i++) {\n this.removeElementRefAndRestoreToAdapter(this.bindElementData.children[i]);\n }\n this.notifyDataSetChanged();\n }\n destroyItem(container, position, object) {\n let view = object;\n container.removeView(view);\n }\n isViewFromObject(view, object) {\n return view === object;\n }\n getItemPosition(object) {\n let position = PagerAdapter.POSITION_NONE;\n if (object == null)\n return position;\n for (let i = 0, count = this.getCount(); i < count; i++) {\n if (object === this.getItem(i)[View.AndroidViewProperty]) {\n position = i;\n break;\n }\n }\n return position;\n }\n }\n HtmlDataPagerAdapter.RefElementTag = \"ref-element\".toUpperCase();\n HtmlDataPagerAdapter.RefElementProperty = \"RefElement\";\n HtmlDataPagerAdapter.BindAdapterProperty = \"BindAdapter\";\n widget.HtmlDataPagerAdapter = HtmlDataPagerAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var NumberPicker = android.widget.NumberPicker;\n class HtmlDataPickerAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n if (parent instanceof NumberPicker) {\n if (!window['MutationObserver'])\n return;\n const callBack = (arr, observer) => {\n const values = [];\n for (let child of Array.from(this.bindElementData.children)) {\n values.push(child.innerText);\n }\n parent.setDisplayedValues(values);\n };\n callBack.call(this);\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n }\n }\n widget.HtmlDataPickerAdapter = HtmlDataPickerAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var MotionEvent = android.view.MotionEvent;\n var AbsListView = android.widget.AbsListView;\n var ScrollView = android.widget.ScrollView;\n var Integer = java.lang.Integer;\n var OverScrollLocker;\n (function (OverScrollLocker) {\n const InstanceMap = new WeakMap();\n function getFrom(view) {\n let scrollLocker = InstanceMap.get(view);\n if (!scrollLocker) {\n if (view instanceof AbsListView) {\n scrollLocker = new ListViewOverScrollLocker(view);\n }\n else if (view instanceof ScrollView) {\n scrollLocker = new ScrollViewScrollLocker(view);\n }\n if (scrollLocker)\n InstanceMap.set(view, scrollLocker);\n }\n return scrollLocker;\n }\n OverScrollLocker.getFrom = getFrom;\n class BaseOverScrollLocker {\n constructor(view) {\n this.view = view;\n const onTouchEventFunc = view.onTouchEvent;\n view.onTouchEvent = (event) => {\n let result = onTouchEventFunc.call(view, event);\n switch (event.getAction()) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_MOVE:\n this.isInTouch = true;\n break;\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_CANCEL:\n this.isInTouch = false;\n break;\n }\n return result;\n };\n }\n lockOverScrollTop(lockTop) {\n this.lockTop = lockTop;\n if (!this.isInTouch && this.getOverScrollY() < -lockTop) {\n this.springBackToLockTop();\n }\n }\n lockOverScrollBottom(lockBottom) {\n this.lockBottom = lockBottom;\n if (!this.isInTouch && this.getOverScrollY() > lockBottom) {\n this.springBackToLockBottom();\n }\n }\n }\n class ListViewOverScrollLocker extends BaseOverScrollLocker {\n constructor(listView) {\n super(listView);\n this.listView = listView;\n this.configListView();\n }\n configListView() {\n let listView = this.listView;\n if (!listView.mFlingRunnable)\n listView.mFlingRunnable = new AbsListView.FlingRunnable(listView);\n const scroller = listView.mFlingRunnable.mScroller;\n listView.mFlingRunnable.startOverfling = (initialVelocity) => {\n scroller.setInterpolator(null);\n let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE;\n if (listView.mScrollY < 0)\n minY = -this.lockTop;\n else if (listView.mScrollY > 0)\n maxY = this.lockBottom;\n scroller.fling(0, listView.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, listView._mOverflingDistance);\n listView.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n listView.invalidate();\n listView.postOnAnimation(listView.mFlingRunnable);\n };\n const layoutChildrenFunc = listView.layoutChildren;\n listView.layoutChildren = () => {\n const overScrollY = this.getOverScrollY();\n layoutChildrenFunc.call(listView);\n if (overScrollY !== 0) {\n listView.overScrollBy(0, -overScrollY, 0, listView.mScrollY, 0, 0, 0, listView.mOverscrollDistance, false);\n const atEdge = listView.trackMotionScroll(-overScrollY, -overScrollY);\n if (atEdge) {\n listView.overScrollBy(0, overScrollY, 0, listView.mScrollY, 0, 0, 0, listView.mOverscrollDistance, false);\n }\n else {\n listView.mFlingRunnable.mScroller.abortAnimation();\n }\n }\n };\n listView.checkOverScrollStartScrollIfNeeded = () => {\n return listView.mScrollY > this.lockBottom || listView.mScrollY < this.lockTop;\n };\n listView.mFlingRunnable.edgeReached = (delta) => {\n let initialVelocity = listView.mFlingRunnable.mScroller.getCurrVelocity();\n if (delta > 0)\n initialVelocity = -initialVelocity;\n listView.mFlingRunnable.startOverfling(initialVelocity);\n };\n const oldSpringBack = scroller.springBack;\n scroller.springBack = (startX, startY, minX, maxX, minY, maxY) => {\n minY = -this.lockTop;\n maxY = this.lockBottom;\n return oldSpringBack.call(scroller, startX, startY, minX, maxX, minY, maxY);\n };\n const oldFling = scroller.fling;\n scroller.fling = (startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) => {\n if (velocityY > 0)\n overY += this.lockBottom;\n else\n overY += this.lockTop;\n oldFling.call(scroller, startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n };\n }\n getScrollContentBottom() {\n let childCount = this.listView.getChildCount();\n let maxBottom = 0;\n let minTop = 0;\n for (let i = 0; i < childCount; i++) {\n let child = this.listView.getChildAt(i);\n let childBottom = child.getBottom();\n let childTop = child.getTop();\n if (childBottom > maxBottom) {\n maxBottom = childBottom;\n }\n if (childTop < minTop) {\n minTop = childTop;\n }\n }\n if (minTop > 0)\n minTop = 0;\n if (this.listView.getAdapter() && childCount > 0) {\n return (maxBottom - minTop) * this.listView.getAdapter().getCount() / childCount;\n }\n return 0;\n }\n getOverScrollY() {\n return this.listView.mScrollY;\n }\n startSpringBack() {\n this.listView.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.listView.mFlingRunnable.mScroller.springBack(0, this.listView.mScrollY, 0, 0, 0, 0);\n this.listView.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this.listView.postOnAnimation(this.listView.mFlingRunnable);\n }\n springBackToLockTop() {\n this.startSpringBack();\n }\n springBackToLockBottom() {\n this.startSpringBack();\n }\n }\n class ScrollViewScrollLocker extends BaseOverScrollLocker {\n constructor(scrollView) {\n super(scrollView);\n this.scrollView = scrollView;\n const scroller = scrollView.mScroller;\n const oldSpringBack = scroller.springBack;\n scroller.springBack = (startX, startY, minX, maxX, minY, maxY) => {\n minY = -this.lockTop;\n maxY = this.scrollView.getScrollRange() + this.lockBottom;\n return oldSpringBack.call(scroller, startX, startY, minX, maxX, minY, maxY);\n };\n const oldFling = scroller.fling;\n scroller.fling = (startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) => {\n if (velocityY > 0)\n overY += this.lockBottom;\n else\n overY += this.lockTop;\n minY -= this.lockTop;\n maxY += this.lockBottom;\n oldFling.call(scroller, startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n };\n this.listenScrollContentHeightChange();\n }\n listenScrollContentHeightChange() {\n const listenHeightChange = (v) => {\n const onSizeChangedFunc = v.onSizeChanged;\n v.onSizeChanged = (w, h, oldw, oldh) => {\n onSizeChangedFunc.call(v, w, h, oldw, oldh);\n this.scrollView.overScrollBy(0, 0, 0, this.scrollView.mScrollY, 0, this.scrollView.getScrollRange(), 0, this.scrollView.mOverscrollDistance, false);\n };\n };\n if (this.scrollView.getChildCount() > 0) {\n listenHeightChange(this.scrollView.getChildAt(0));\n }\n else {\n const onViewAddedFunc = this.scrollView.onViewAdded;\n this.scrollView.onViewAdded = (v) => {\n onViewAddedFunc.call(this.scrollView, v);\n listenHeightChange(v);\n };\n }\n }\n getScrollContentBottom() {\n if (this.scrollView.getChildCount() > 0) {\n return this.scrollView.getChildAt(0).getBottom();\n }\n return this.scrollView.getPaddingTop();\n }\n getOverScrollY() {\n let scrollY = this.scrollView.getScrollY();\n if (scrollY < 0)\n return scrollY;\n let scrollRange = this.scrollView.getScrollRange();\n if (scrollY > scrollRange) {\n return scrollY - scrollRange;\n }\n return 0;\n }\n startSpringBack() {\n if (this.scrollView.mScroller.springBack(this.scrollView.mScrollX, this.scrollView.mScrollY, 0, 0, 0, this.scrollView.getScrollRange())) {\n this.scrollView.postInvalidateOnAnimation();\n }\n }\n springBackToLockTop() {\n this.startSpringBack();\n }\n springBackToLockBottom() {\n this.startSpringBack();\n }\n }\n })(OverScrollLocker = widget.OverScrollLocker || (widget.OverScrollLocker = {}));\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var Gravity = android.view.Gravity;\n var ViewGroup = android.view.ViewGroup;\n var FrameLayout = android.widget.FrameLayout;\n var TextView = android.widget.TextView;\n var LinearLayout = android.widget.LinearLayout;\n var ProgressBar = android.widget.ProgressBar;\n var R = android.R;\n class PullRefreshLoadLayout extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.autoLoadScrollAtBottom = true;\n this.footerViewReadyDistance = 36 * android.content.res.Resources.getDisplayMetrics().density;\n this.contentOverY = 0;\n this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(context));\n this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(context));\n this._attrBinder.addAttr('refreshEnable', (value) => {\n this.setRefreshEnable(this._attrBinder.parseBoolean(value, true));\n });\n this._attrBinder.addAttr('loadEnable', (value) => {\n this.setLoadEnable(this._attrBinder.parseBoolean(value, true));\n });\n }\n onViewAdded(child) {\n super.onViewAdded(child);\n if (child instanceof PullRefreshLoadLayout.HeaderView) {\n if (child != this.headerView)\n this.setHeaderView(child);\n }\n else if (child instanceof PullRefreshLoadLayout.FooterView) {\n if (child != this.footerView)\n this.setFooterView(child);\n }\n else {\n if (child != this.contentView)\n this.setContentView(child);\n }\n if (this.footerView != null) {\n this.bringChildToFront(this.footerView);\n }\n }\n configHeaderView() {\n let headerView = this.headerView;\n let params = headerView.getLayoutParams();\n params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;\n params.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n params.width = ViewGroup.LayoutParams.MATCH_PARENT;\n headerView.setLayoutParams(params);\n }\n configFooterView() {\n let footerView = this.footerView;\n let params = footerView.getLayoutParams();\n params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;\n params.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n params.width = ViewGroup.LayoutParams.WRAP_CONTENT;\n footerView.setLayoutParams(params);\n }\n configContentView() {\n let contentView = this.contentView;\n let params = contentView.getLayoutParams();\n params.height = ViewGroup.LayoutParams.MATCH_PARENT;\n params.width = ViewGroup.LayoutParams.MATCH_PARENT;\n contentView.setLayoutParams(params);\n this.overScrollLocker = widget.OverScrollLocker.getFrom(contentView);\n const overScrollByFunc = contentView.overScrollBy;\n contentView.overScrollBy = (deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent) => {\n let result = overScrollByFunc.call(contentView, deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);\n if (contentView === this.contentView) {\n this.onContentOverScroll(scrollRangeY, maxOverScrollY, isTouchEvent);\n }\n return result;\n };\n }\n onContentOverScroll(scrollRangeY, maxOverScrollY, isTouchEvent) {\n let newScrollY = this.contentView.mScrollY;\n const top = 0;\n const bottom = scrollRangeY;\n if (newScrollY > bottom) {\n this.contentOverY = newScrollY - bottom;\n }\n else if (newScrollY < top) {\n this.contentOverY = newScrollY - top;\n }\n else {\n this.contentOverY = 0;\n }\n this.checkHeaderFooterPosition();\n if (this.headerView) {\n if (this.contentOverY < -this.headerView.getHeight()) {\n if (isTouchEvent) {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_ReadyToRefresh);\n }\n else if (this.headerView.state === PullRefreshLoadLayout.State_Header_ReadyToRefresh) {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);\n }\n }\n else if (this.headerView.state === PullRefreshLoadLayout.State_Header_ReadyToRefresh) {\n this.setHeaderState(this.headerView.stateBeforeReady);\n }\n }\n if (this.footerView) {\n const footerState = this.footerView.state;\n if (this.contentOverY > this.footerView.getHeight() + this.footerViewReadyDistance) {\n if (isTouchEvent) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_ReadyToLoad);\n }\n else if (footerState === PullRefreshLoadLayout.State_Footer_ReadyToLoad) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n else if (footerState === PullRefreshLoadLayout.State_Footer_ReadyToLoad) {\n this.setFooterState(this.footerView.stateBeforeReady);\n }\n if (this.contentOverY > 0 && this.autoLoadScrollAtBottom\n && footerState === PullRefreshLoadLayout.State_Footer_Normal) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n }\n setHeaderView(headerView) {\n if (this.headerView) {\n this.removeView(this.headerView);\n }\n this.headerView = headerView;\n if (headerView.getParent() == null)\n this.addView(headerView);\n this.configHeaderView();\n }\n setFooterView(footerView) {\n if (this.footerView) {\n this.removeView(this.footerView);\n }\n this.footerView = footerView;\n if (footerView.getParent() == null)\n this.addView(footerView);\n this.configFooterView();\n }\n setContentView(contentView) {\n if (this.contentView) {\n this.removeView(this.contentView);\n }\n this.contentView = contentView;\n if (contentView.getParent() == null)\n this.addView(contentView);\n this.configContentView();\n }\n setHeaderState(newState) {\n if (!this.headerView)\n return;\n if (this.headerView.state === newState)\n return;\n const changeLimit = PullRefreshLoadLayout.StateChangeLimit[this.headerView.state];\n if (changeLimit && changeLimit.indexOf(newState) !== -1)\n return;\n this.headerView.setStateInner(this, newState);\n this.checkLockOverScroll();\n if (newState === PullRefreshLoadLayout.State_Header_Refreshing && this.refreshLoadListener) {\n this.refreshLoadListener.onRefresh(this);\n }\n }\n getHeaderState() {\n if (!this.headerView)\n return PullRefreshLoadLayout.State_Disable;\n return this.headerView.state;\n }\n setFooterState(newState) {\n if (!this.footerView)\n return;\n if (this.footerView.state === newState)\n return;\n const changeLimit = PullRefreshLoadLayout.StateChangeLimit[this.footerView.state];\n if (changeLimit && changeLimit.indexOf(newState) !== -1)\n return;\n this.footerView.setStateInner(this, newState);\n this.checkLockOverScroll();\n if (newState === PullRefreshLoadLayout.State_Footer_Loading && this.refreshLoadListener) {\n this.refreshLoadListener.onLoadMore(this);\n }\n }\n getFooterState() {\n if (!this.footerView)\n return PullRefreshLoadLayout.State_Disable;\n return this.footerView.state;\n }\n checkLockOverScroll() {\n if (!this.overScrollLocker)\n return;\n if (this.headerView) {\n switch (this.headerView.state) {\n case PullRefreshLoadLayout.State_Header_Normal:\n this.overScrollLocker.lockOverScrollTop(0);\n break;\n case PullRefreshLoadLayout.State_Header_Refreshing:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n }\n }\n else {\n this.overScrollLocker.lockOverScrollTop(0);\n }\n this.overScrollLocker.lockOverScrollBottom(this.footerView ? this.footerView.getHeight() : 0);\n }\n checkHeaderFooterPosition() {\n if (this.contentOverY > 0) {\n this.setHeaderViewAppearDistance(0);\n this.setFooterViewAppearDistance(this.contentOverY);\n }\n else if (this.contentOverY < 0) {\n this.setHeaderViewAppearDistance(-this.contentOverY);\n this.setFooterViewAppearDistance(0);\n }\n else {\n this.setHeaderViewAppearDistance(0);\n this.setFooterViewAppearDistance(0);\n }\n }\n setHeaderViewAppearDistance(distance) {\n if (!this.headerView)\n return;\n let offset = -this.headerView.getHeight() - this.headerView.getTop() + distance;\n this.headerView.offsetTopAndBottom(offset);\n }\n setFooterViewAppearDistance(distance) {\n if (!this.contentView || !this.footerView)\n return;\n let bottomToParentBottom = Math.min(this.overScrollLocker.getScrollContentBottom(), this.contentView.getHeight()) - this.footerView.getBottom();\n if (this.contentOverY < 0)\n bottomToParentBottom -= this.contentOverY;\n let offset = this.footerView.getHeight() + bottomToParentBottom - distance;\n this.footerView.offsetTopAndBottom(offset);\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n this.checkHeaderFooterPosition();\n this.checkLockOverScroll();\n if (!this.isLaidOut()) {\n if (this.autoLoadScrollAtBottom && this.footerView != null\n && this.footerView.getGlobalVisibleRect(new android.graphics.Rect())) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n }\n setAutoLoadMoreWhenScrollBottom(autoLoad) {\n this.autoLoadScrollAtBottom = autoLoad;\n }\n setRefreshEnable(enable) {\n const oldEnable = this.headerView != null;\n if (enable === oldEnable)\n return;\n if (!enable) {\n this.removeView(this.headerView);\n this.headerView = null;\n if (this.overScrollLocker)\n this.overScrollLocker.lockOverScrollTop(0);\n }\n else {\n this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView());\n }\n }\n setLoadEnable(enable) {\n const oldEnable = this.footerView != null;\n if (enable === oldEnable)\n return;\n if (!enable) {\n this.removeView(this.footerView);\n this.footerView = null;\n if (this.overScrollLocker)\n this.overScrollLocker.lockOverScrollBottom(0);\n }\n else {\n this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView());\n }\n }\n setRefreshLoadListener(refreshLoadListener) {\n this.refreshLoadListener = refreshLoadListener;\n }\n startRefresh() {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);\n }\n startLoadMore() {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n PullRefreshLoadLayout.State_Disable = -1;\n PullRefreshLoadLayout.State_Header_Normal = 0;\n PullRefreshLoadLayout.State_Header_Refreshing = 1;\n PullRefreshLoadLayout.State_Header_ReadyToRefresh = 2;\n PullRefreshLoadLayout.State_Header_RefreshFail = 3;\n PullRefreshLoadLayout.State_Footer_Normal = 4;\n PullRefreshLoadLayout.State_Footer_Loading = 5;\n PullRefreshLoadLayout.State_Footer_ReadyToLoad = 6;\n PullRefreshLoadLayout.State_Footer_LoadFail = 7;\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad = 8;\n PullRefreshLoadLayout.StateChangeLimit = {\n [PullRefreshLoadLayout.State_Header_Refreshing]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Footer_Loading,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Footer_LoadFail,\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad,],\n [PullRefreshLoadLayout.State_Header_RefreshFail]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Footer_Loading,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Footer_LoadFail,\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad,],\n [PullRefreshLoadLayout.State_Footer_Loading]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Header_Refreshing,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Header_RefreshFail],\n [PullRefreshLoadLayout.State_Footer_NoMoreToLoad]: [PullRefreshLoadLayout.State_Footer_ReadyToLoad]\n };\n widget.PullRefreshLoadLayout = PullRefreshLoadLayout;\n (function (PullRefreshLoadLayout) {\n class HeaderView extends FrameLayout {\n constructor(...args) {\n super(...args);\n this.state = PullRefreshLoadLayout.State_Header_Normal;\n this.stateBeforeReady = PullRefreshLoadLayout.State_Header_Normal;\n }\n setStateInner(prll, state) {\n const oldState = this.state;\n this.state = state;\n this.onStateChange(state, oldState);\n const _this = this;\n switch (state) {\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.postDelayed({\n run() {\n if (state === _this.state) {\n prll.setHeaderState(PullRefreshLoadLayout.State_Header_Normal);\n }\n }\n }, 1000);\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.stateBeforeReady = oldState;\n break;\n }\n }\n }\n PullRefreshLoadLayout.HeaderView = HeaderView;\n class FooterView extends FrameLayout {\n constructor(...args) {\n super(...args);\n this.state = PullRefreshLoadLayout.State_Footer_Normal;\n this.stateBeforeReady = PullRefreshLoadLayout.State_Footer_Normal;\n }\n setStateInner(prll, state) {\n const oldState = this.state;\n this.state = state;\n this.onStateChange(state, oldState);\n switch (state) {\n case PullRefreshLoadLayout.State_Footer_ReadyToLoad:\n this.stateBeforeReady = oldState;\n break;\n }\n }\n }\n PullRefreshLoadLayout.FooterView = FooterView;\n class DefaultHeaderView extends HeaderView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.progressBar = new ProgressBar();\n this.progressBar.setVisibility(View.GONE);\n this.textView = new TextView();\n let density = android.content.res.Resources.getDisplayMetrics().density;\n const pad = 16 * density;\n this.textView.setPadding(pad / 2, pad, pad / 2, pad);\n this.textView.setGravity(Gravity.CENTER);\n let linear = new LinearLayout();\n linear.addView(this.progressBar, 32 * density, 32 * density);\n linear.addView(this.textView);\n linear.setGravity(Gravity.CENTER);\n this.addView(linear, -1, -2);\n this.onStateChange(PullRefreshLoadLayout.State_Header_Normal, PullRefreshLoadLayout.State_Disable);\n }\n onStateChange(newState, oldState) {\n switch (newState) {\n case PullRefreshLoadLayout.State_Header_Refreshing:\n this.textView.setText(R.string_.prll_header_state_loading);\n this.progressBar.setVisibility(View.VISIBLE);\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.textView.setText(R.string_.prll_header_state_ready);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.textView.setText(R.string_.prll_header_state_fail);\n this.progressBar.setVisibility(View.GONE);\n break;\n default:\n this.textView.setText(R.string_.prll_header_state_normal);\n this.progressBar.setVisibility(View.GONE);\n }\n }\n }\n PullRefreshLoadLayout.DefaultHeaderView = DefaultHeaderView;\n class DefaultFooterView extends FooterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.progressBar = new ProgressBar();\n this.progressBar.setVisibility(View.GONE);\n this.textView = new TextView();\n let density = android.content.res.Resources.getDisplayMetrics().density;\n const pad = 16 * density;\n this.textView.setPadding(pad / 2, pad, pad / 2, pad);\n this.textView.setGravity(Gravity.CENTER);\n let linear = new LinearLayout();\n linear.addView(this.progressBar);\n linear.addView(this.textView);\n linear.setGravity(Gravity.CENTER);\n this.addView(linear, -1, -2);\n this.onStateChange(PullRefreshLoadLayout.State_Footer_Normal, PullRefreshLoadLayout.State_Disable);\n this.setOnClickListener({\n onClick(v) {\n let parent = v.getParent();\n if (parent instanceof PullRefreshLoadLayout) {\n parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n });\n }\n onStateChange(newState, oldState) {\n switch (newState) {\n case PullRefreshLoadLayout.State_Footer_Loading:\n this.textView.setText(R.string_.prll_footer_state_loading);\n this.progressBar.setVisibility(View.VISIBLE);\n break;\n case PullRefreshLoadLayout.State_Footer_ReadyToLoad:\n this.textView.setText(R.string_.prll_footer_state_ready);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Footer_LoadFail:\n this.textView.setText(R.string_.prll_footer_state_fail);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Footer_NoMoreToLoad:\n this.textView.setText(R.string_.prll_footer_state_no_more);\n this.progressBar.setVisibility(View.GONE);\n break;\n default:\n this.textView.setText(R.string_.prll_footer_state_normal);\n this.progressBar.setVisibility(View.GONE);\n }\n }\n }\n PullRefreshLoadLayout.DefaultFooterView = DefaultFooterView;\n })(PullRefreshLoadLayout = widget.PullRefreshLoadLayout || (widget.PullRefreshLoadLayout = {}));\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Canvas = android.graphics.Canvas;\n let sNextID = 0;\n class NativeCanvas extends Canvas {\n initCanvasImpl() {\n this.canvasId = ++sNextID;\n this.createCanvasImpl();\n }\n createCanvasImpl() {\n native.NativeApi.canvas.createCanvas(this.canvasId, this.mWidth, this.mHeight);\n this.save();\n }\n recycleImpl() {\n native.NativeApi.canvas.recycleCanvas(this.canvasId);\n }\n isNativeAccelerated() {\n return true;\n }\n translateImpl(dx, dy) {\n native.NativeApi.canvas.translate(this.canvasId, dx, dy);\n }\n scaleImpl(sx, sy) {\n native.NativeApi.canvas.scale(this.canvasId, sx, sy);\n }\n rotateImpl(degrees) {\n native.NativeApi.canvas.rotate(this.canvasId, degrees);\n }\n concatImpl(MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y, MPERSP_0, MPERSP_1, MPERSP_2) {\n native.NativeApi.canvas.concat(this.canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y);\n }\n drawARGBImpl(a, r, g, b) {\n native.NativeApi.canvas.drawColor(this.canvasId, android.graphics.Color.argb(a, r, g, b));\n }\n clearColorImpl() {\n native.NativeApi.canvas.clearColor(this.canvasId);\n }\n saveImpl() {\n native.NativeApi.canvas.save(this.canvasId);\n }\n restoreImpl() {\n native.NativeApi.canvas.restore(this.canvasId);\n }\n clipRectImpl(left, top, width, height) {\n native.NativeApi.canvas.clipRect(this.canvasId, left, top, width, height);\n }\n clipRoundRectImpl(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n native.NativeApi.canvas.clipRoundRectImpl(this.canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n }\n drawCanvasImpl(canvas, offsetX, offsetY) {\n if (canvas instanceof NativeCanvas) {\n native.NativeApi.canvas.drawCanvas(this.canvasId, canvas.canvasId, offsetX, offsetY);\n }\n else {\n throw Error('canvas should be NativeCanvas');\n }\n }\n drawImageImpl(image, srcRect, dstRect) {\n if (image instanceof native.NativeImage) {\n if (srcRect && dstRect) {\n native.NativeApi.canvas.drawImage8args(this.canvasId, image.imageId, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom, dstRect.left, dstRect.top, dstRect.right, dstRect.bottom);\n }\n else if (dstRect) {\n native.NativeApi.canvas.drawImage4args(this.canvasId, image.imageId, dstRect.left, dstRect.top, dstRect.right, dstRect.bottom);\n }\n else {\n native.NativeApi.canvas.drawImage2args(this.canvasId, image.imageId, 0, 0);\n }\n }\n else {\n throw Error('image should be NativeImage');\n }\n }\n drawRectImpl(left, top, width, height, style) {\n native.NativeApi.canvas.drawRect(this.canvasId, left, top, width, height, style);\n }\n drawOvalImpl(oval, style) {\n native.NativeApi.canvas.drawOval(this.canvasId, oval.left, oval.top, oval.right, oval.bottom, style);\n }\n drawCircleImpl(cx, cy, radius, style) {\n native.NativeApi.canvas.drawCircle(this.canvasId, cx, cy, radius, style);\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n native.NativeApi.canvas.drawArc(this.canvasId, oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle, useCenter, style);\n }\n drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n native.NativeApi.canvas.drawRoundRectImpl(this.canvasId, rect.left, rect.top, rect.width(), rect.height(), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style);\n }\n drawTextImpl(text, x, y, style) {\n native.NativeApi.canvas.drawText(this.canvasId, text, x, y, style);\n }\n setColorImpl(color, style) {\n native.NativeApi.canvas.setFillColor(this.canvasId, color, style);\n }\n multiplyGlobalAlphaImpl(alpha) {\n native.NativeApi.canvas.multiplyGlobalAlpha(this.canvasId, alpha);\n }\n setGlobalAlphaImpl(alpha) {\n native.NativeApi.canvas.setGlobalAlpha(this.canvasId, alpha);\n }\n setTextAlignImpl(align) {\n native.NativeApi.canvas.setTextAlign(this.canvasId, align);\n }\n setLineWidthImpl(width) {\n native.NativeApi.canvas.setLineWidth(this.canvasId, width);\n }\n setLineCapImpl(lineCap) {\n native.NativeApi.canvas.setLineCap(this.canvasId, lineCap);\n }\n setLineJoinImpl(lineJoin) {\n native.NativeApi.canvas.setLineJoin(this.canvasId, lineJoin);\n }\n setShadowImpl(radius, dx, dy, color) {\n native.NativeApi.canvas.setShadow(this.canvasId, radius, dx, dy, color);\n }\n setFontSizeImpl(size) {\n native.NativeApi.canvas.setFontSize(this.canvasId, size);\n }\n setFontImpl(fontName) {\n native.NativeApi.canvas.setFont(this.canvasId, fontName);\n }\n isImageSmoothingEnabledImpl() {\n return false;\n }\n setImageSmoothingEnabledImpl(enable) {\n }\n static applyTextMeasure(cacheMeasureTextSize, defaultWidth, widths) {\n android.graphics.Canvas.measureTextImpl = function (text, textSize) {\n let width = 0;\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.charCodeAt(i);\n let cWidth = widths[c] || defaultWidth;\n width += cWidth * textSize / cacheMeasureTextSize;\n }\n return width;\n };\n }\n }\n native.NativeCanvas = NativeCanvas;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Surface = android.view.Surface;\n let sNextSurfaceID = 0;\n const SurfaceInstances = new Map();\n class NativeSurface extends Surface {\n initImpl() {\n this.initCanvasBound();\n this.surfaceId = ++sNextSurfaceID;\n SurfaceInstances.set(this.surfaceId, this);\n let bound = this.mCanvasBound;\n native.NativeApi.surface.createSurface(this.surfaceId, bound.left, bound.top, bound.right, bound.bottom);\n }\n notifyBoundChange() {\n this.initCanvasBound();\n let bound = this.mCanvasBound;\n native.NativeApi.surface.onSurfaceBoundChange(this.surfaceId, bound.left, bound.top, bound.right, bound.bottom);\n }\n lockCanvasImpl(left, top, width, height) {\n if (!this.lockedCanvas) {\n this.lockedCanvas = new NativeSurfaceLockCanvas(width, height);\n }\n native.NativeApi.surface.lockCanvas(this.surfaceId, this.lockedCanvas.canvasId, left, top, left + width, top + height);\n return this.lockedCanvas;\n }\n unlockCanvasAndPost(canvas) {\n if (canvas instanceof native.NativeCanvas) {\n native.NativeApi.surface.unlockCanvasAndPost(this.surfaceId, canvas.canvasId);\n }\n else {\n throw Error('canvas is not NativeCanvas');\n }\n }\n showFps(fps) {\n native.NativeApi.surface.showFps(fps);\n }\n static notifySurfaceReady(surfaceId) {\n let surface = SurfaceInstances.get(surfaceId);\n surface.viewRoot.scheduleTraversals();\n }\n static notifySurfaceSupportDirtyDraw(surfaceId, dirtyDrawSupport) {\n let surface = SurfaceInstances.get(surfaceId);\n surface.mSupportDirtyDraw = dirtyDrawSupport;\n surface.viewRoot.scheduleTraversals();\n }\n }\n native.NativeSurface = NativeSurface;\n class NativeSurfaceLockCanvas extends native.NativeCanvas {\n createCanvasImpl() {\n }\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var NetImage = androidui.image.NetImage;\n var Rect = android.graphics.Rect;\n let sNextId = 0;\n const NativeImageInstances = new Map();\n class NativeImage extends NetImage {\n createImage() {\n this.imageId = sNextId++;\n NativeImageInstances.set(this.imageId, this);\n native.NativeApi.image.createImage(this.imageId);\n }\n loadImage() {\n native.NativeApi.image.loadImage(this.imageId, this.src);\n }\n recycle() {\n native.NativeApi.image.recycleImage(this.imageId);\n NativeImageInstances.delete(this.imageId);\n }\n getPixels(bound, callBack) {\n if (!callBack)\n return;\n if (!bound)\n bound = new Rect(0, 0, this.width, this.height);\n if (bound.isEmpty()) {\n callBack([]);\n return;\n }\n if (!this.getPixelsCallbacks)\n this.getPixelsCallbacks = [];\n this.getPixelsCallbacks.push(callBack);\n let callBackIndex = this.getPixelsCallbacks.length - 1;\n native.NativeApi.image.getPixels(this.imageId, callBackIndex, bound.left, bound.top, bound.right, bound.bottom);\n }\n getBorderPixels(callBack) {\n if (!callBack)\n return;\n if (this.leftBorder && this.topBorder && this.rightBorder && this.bottomBorder) {\n callBack(this.leftBorder, this.topBorder, this.rightBorder, this.bottomBorder);\n }\n else {\n super.getBorderPixels(callBack);\n }\n }\n static notifyLoadFinish(imageId, width, height, leftBorder, topBorder, rightBorder, bottomBorder) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = width;\n image.mImageHeight = height;\n image.leftBorder = leftBorder;\n image.topBorder = topBorder;\n image.rightBorder = rightBorder;\n image.bottomBorder = bottomBorder;\n image.fireOnLoad();\n }\n static notifyLoadError(imageId) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = image.mImageHeight = 0;\n image.fireOnError();\n }\n static notifyGetPixels(imageId, callBackIndex, data) {\n let image = NativeImageInstances.get(imageId);\n let callBack = image.getPixelsCallbacks[callBackIndex];\n image.getPixelsCallbacks[callBackIndex] = null;\n callBack(data);\n }\n }\n native.NativeImage = NativeImage;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Rect = android.graphics.Rect;\n class NativeEditText extends android.widget.EditText {\n constructor(...args) {\n super(...args);\n this.mRectTmp = new Rect();\n }\n computeTextArea() {\n this.getGlobalVisibleRect(this.mRectTmp);\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n this.mRectTmp.left += this.getTotalPaddingLeft();\n this.mRectTmp.top += this.getTotalPaddingTop();\n this.mRectTmp.right -= (this.getTotalPaddingRight());\n this.mRectTmp.bottom -= (this.getTotalPaddingBottom());\n }\n onInputElementFocusChanged(focused) {\n if (focused) {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n }\n else {\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n return super.onInputElementFocusChanged(focused);\n }\n tryShowInputElement() {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n return super.tryShowInputElement();\n }\n tryDismissInputElement() {\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n return super.tryDismissInputElement();\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n if (this.isInputElementShowed() && this.isFocused() && this.getText().length > 0) {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n }\n native.NativeEditText = NativeEditText;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var WebView = android.webkit.WebView;\n var Rect = android.graphics.Rect;\n const anchor = document.createElement('a');\n const webViewMap = new Map();\n class NativeWebView extends WebView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBoundRect = new Rect();\n this.mRectTmp = new Rect();\n this.mLocationTmp = androidui.util.ArrayCreator.newNumberArray(2);\n native.NativeApi.webView.createWebView(this.hashCode());\n webViewMap.set(this.hashCode(), this);\n let activity = this.getContext();\n let onDestroy = activity.onDestroy;\n activity.onDestroy = () => {\n onDestroy.call(activity);\n webViewMap.delete(this.hashCode());\n native.NativeApi.webView.destroyWebView(this.hashCode());\n };\n }\n goBack() {\n native.NativeApi.webView.webViewGoBack(this.hashCode());\n }\n canGoBack() {\n return this.mCanGoBack;\n }\n loadUrl(url) {\n anchor.href = url;\n url = anchor.href;\n this.mUrl = url;\n native.NativeApi.webView.webViewLoadUrl(this.hashCode(), url);\n }\n reload() {\n native.NativeApi.webView.webViewReload(this.hashCode());\n }\n getUrl() {\n return this.mUrl;\n }\n getTitle() {\n return this.mTitle || this.getUrl();\n }\n setWebViewClient(client) {\n super.setWebViewClient(client);\n }\n dependOnDebugLayout() {\n return false;\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n this.getLocationOnScreen(this.mLocationTmp);\n this.mRectTmp.set(this.mLocationTmp[0], this.mLocationTmp[1], this.mLocationTmp[0] + this.getWidth(), this.mLocationTmp[1] + this.getHeight());\n if (!this.mRectTmp.equals(this.mBoundRect)) {\n this.mBoundRect.set(this.mRectTmp);\n native.NativeApi.webView.webViewBoundChange(this.hashCode(), this.mBoundRect.left, this.mBoundRect.top, this.mBoundRect.right, this.mBoundRect.bottom);\n }\n }\n static notifyLoadFinish(viewHash, url, title) {\n let nativeWebView = webViewMap.get(viewHash);\n if (nativeWebView == null)\n return;\n nativeWebView.mUrl = url;\n nativeWebView.mTitle = title;\n if (nativeWebView.mClient != null) {\n nativeWebView.mClient.onReceivedTitle(nativeWebView, title);\n nativeWebView.mClient.onPageFinished(nativeWebView, url);\n }\n }\n static notifyWebViewHistoryChange(viewHash, currentHistoryIndex, historySize) {\n let nativeWebView = webViewMap.get(viewHash);\n if (nativeWebView == null)\n return;\n nativeWebView.mCanGoBack = currentHistoryIndex > 0;\n }\n }\n native.NativeWebView = NativeWebView;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var HtmlView = androidui.widget.HtmlView;\n var Rect = android.graphics.Rect;\n class NativeHtmlView extends HtmlView {\n constructor(...args) {\n super(...args);\n this.mRectDrawHTMLBoundTmp = new Rect();\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n this.getGlobalVisibleRect(this.mRectDrawHTMLBoundTmp);\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectDrawHTMLBoundTmp.left, this.mRectDrawHTMLBoundTmp.top, this.mRectDrawHTMLBoundTmp.right, this.mRectDrawHTMLBoundTmp.bottom);\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n }\n native.NativeHtmlView = NativeHtmlView;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n const AndroidJsBridgeProperty = 'AndroidUIRuntime';\n const JSBridge = window[AndroidJsBridgeProperty];\n class NativeApi {\n }\n native.NativeApi = NativeApi;\n (function (NativeApi) {\n class BatchCall {\n constructor() {\n this.calls = [];\n }\n pushCall(method, methodArgs) {\n this.calls.push(method);\n this.calls.push(...methodArgs);\n this.calls.push(null);\n }\n clear() {\n this.calls = [];\n }\n toString() {\n return this.calls.join('\\n');\n }\n }\n let batchCall = new BatchCall();\n class SurfaceApi {\n createSurface(surfaceId, left, top, right, bottom) {\n JSBridge.createSurface(surfaceId, left, top, right, bottom);\n }\n onSurfaceBoundChange(surfaceId, left, top, right, bottom) {\n JSBridge.onSurfaceBoundChange(surfaceId, left, top, right, bottom);\n }\n lockCanvas(surfaceId, canvasId, left, top, right, bottom) {\n batchCall.pushCall('31', [surfaceId, canvasId, left, top, right, bottom]);\n }\n unlockCanvasAndPost(surfaceId, canvasId) {\n batchCall.pushCall('32', [surfaceId, canvasId]);\n JSBridge.batchCall(batchCall.toString());\n batchCall.clear();\n }\n showFps(fps) {\n JSBridge.showJSFps(fps);\n }\n }\n NativeApi.SurfaceApi = SurfaceApi;\n class CanvasApi {\n createCanvas(canvasId, width, height) {\n batchCall.pushCall('33', [canvasId, width, height]);\n }\n recycleCanvas(canvasId) {\n batchCall.pushCall('34', [canvasId]);\n }\n translate(canvasId, dx, dy) {\n batchCall.pushCall('35', [canvasId, dx, dy]);\n }\n scale(canvasId, sx, sy) {\n batchCall.pushCall('36', [canvasId, sx, sy]);\n }\n rotate(canvasId, degrees) {\n batchCall.pushCall('37', [canvasId, degrees]);\n }\n concat(canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y) {\n batchCall.pushCall('38', [canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y]);\n }\n drawColor(canvasId, color) {\n batchCall.pushCall('39', [canvasId, color]);\n }\n clearColor(canvasId) {\n batchCall.pushCall('40', [canvasId]);\n }\n drawRect(canvasId, left, top, width, height, style) {\n batchCall.pushCall('41', [canvasId, left, top, width, height, style || android.graphics.Paint.Style.FILL]);\n }\n clipRect(canvasId, left, top, width, height) {\n batchCall.pushCall('42', [canvasId, left, top, width, height]);\n }\n save(canvasId) {\n batchCall.pushCall('43', [canvasId]);\n }\n restore(canvasId) {\n batchCall.pushCall('44', [canvasId]);\n }\n drawCanvas(canvasId, drawCanvasId, offsetX, offsetY) {\n batchCall.pushCall('45', [canvasId, drawCanvasId, offsetX, offsetY]);\n }\n drawText(canvasId, text, x, y, fillStyle) {\n text = '\"' + text.replace(/(\\n)+|(\\r\\n)+/g, \"\\\\n\") + '\"';\n batchCall.pushCall('47', [canvasId, text, x, y, fillStyle || android.graphics.Paint.Style.FILL]);\n }\n setFillColor(canvasId, color, style) {\n batchCall.pushCall('49', [canvasId, color, style || android.graphics.Paint.Style.FILL]);\n }\n multiplyGlobalAlpha(canvasId, alpha) {\n batchCall.pushCall('50', [canvasId, alpha]);\n }\n setGlobalAlpha(canvasId, alpha) {\n batchCall.pushCall('51', [canvasId, alpha]);\n }\n setTextAlign(canvasId, align) {\n batchCall.pushCall('52', [canvasId, align]);\n }\n setLineWidth(canvasId, width) {\n batchCall.pushCall('53', [canvasId, width]);\n }\n setLineCap(canvasId, lineCap) {\n batchCall.pushCall('54', [canvasId, lineCap]);\n }\n setLineJoin(canvasId, lineJoin) {\n batchCall.pushCall('55', [canvasId, lineJoin]);\n }\n setShadow(canvasId, radius, dx, dy, color) {\n batchCall.pushCall('56', [canvasId, radius, dx, dy, color]);\n }\n setFontSize(canvasId, size) {\n batchCall.pushCall('57', [canvasId, size]);\n }\n setFont(canvasId, fontName) {\n batchCall.pushCall('58', [canvasId, fontName]);\n }\n drawOval(canvasId, left, top, right, bottom, style) {\n batchCall.pushCall('59', [canvasId, left, top, right, bottom, style || android.graphics.Paint.Style.FILL]);\n }\n drawCircle(canvasId, cx, cy, radius, style) {\n batchCall.pushCall('60', [canvasId, cx, cy, radius, style || android.graphics.Paint.Style.FILL]);\n }\n drawArc(canvasId, left, top, right, bottom, startAngle, sweepAngle, useCenter, style) {\n batchCall.pushCall('61', [canvasId, left, top, right, bottom, startAngle, sweepAngle, useCenter, style || android.graphics.Paint.Style.FILL]);\n }\n drawRoundRectImpl(canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n batchCall.pushCall('62', [canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style || android.graphics.Paint.Style.FILL]);\n }\n clipRoundRectImpl(canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n batchCall.pushCall('63', [canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft]);\n }\n drawImage2args(canvasId, drawImageId, left, top) {\n batchCall.pushCall('70', [canvasId, drawImageId, left, top]);\n }\n drawImage4args(canvasId, drawImageId, dstLeft, dstTop, dstRight, dstBottom) {\n batchCall.pushCall('71', [canvasId, drawImageId, dstLeft, dstTop, dstRight, dstBottom]);\n }\n drawImage8args(canvasId, drawImageId, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom) {\n batchCall.pushCall('72', [canvasId, drawImageId, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom]);\n }\n }\n NativeApi.CanvasApi = CanvasApi;\n })(NativeApi = native.NativeApi || (native.NativeApi = {}));\n if (JSBridge) {\n android.view.Surface.prototype = native.NativeSurface.prototype;\n android.graphics.Canvas.prototype = native.NativeCanvas.prototype;\n androidui.image.NetImage.prototype = native.NativeImage.prototype;\n android.widget.EditText = native.NativeEditText;\n android.webkit.WebView = native.NativeWebView;\n androidui.widget.HtmlView = native.NativeHtmlView;\n NativeApi.surface = new NativeApi.SurfaceApi();\n NativeApi.canvas = new NativeApi.CanvasApi();\n NativeApi.image = JSBridge;\n NativeApi.drawHTML = JSBridge;\n NativeApi.webView = JSBridge;\n android.os.MessageQueue.requestNextLoop = () => {\n setTimeout(android.os.MessageQueue.loop, 0);\n };\n androidui.AndroidUI.showAppClosed = () => {\n JSBridge.closeApp();\n };\n JSBridge.initRuntime();\n window.addEventListener('load', () => {\n setInterval(() => {\n JSBridge.pageAlive(1500);\n }, 800);\n });\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nwindow[`android`] = android;\nwindow[`java`] = java;\nwindow[`AndroidUI`] = androidui.AndroidUI;\n(function () {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"AndroidUILoadFinish\", true, true, null);\n document.dispatchEvent(event);\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["android-ui.js"],"names":[],"mappings":"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","file":"android-ui.es5.js","sourcesContent":["/**\n * AndroidUIX v0.7.0\n * https://github.com/linfaxin/AndroidUIX\n */\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class ArrayList {\n constructor(initialCapacity = 0) {\n this.array = [];\n }\n size() {\n return this.array.length;\n }\n isEmpty() {\n return this.size() <= 0;\n }\n contains(o) {\n return this.indexOf(o) >= 0;\n }\n indexOf(o) {\n return this.array.indexOf(o);\n }\n lastIndexOf(o) {\n return this.array.lastIndexOf(o);\n }\n clone() {\n let arrayList = new ArrayList();\n arrayList.array.push(...this.array);\n return arrayList;\n }\n toArray(a = new Array(this.size())) {\n let size = this.size();\n for (let i = 0; i < size; i++) {\n a[i] = this.array[i];\n }\n return a;\n }\n getArray() {\n return this.array;\n }\n get(index) {\n index = Math.floor(index);\n return this.array[index];\n }\n set(index, element) {\n index = Math.floor(index);\n let old = this.array[index];\n this.array[index] = element;\n return old;\n }\n add(...args) {\n let index, t;\n if (args.length === 1)\n t = args[0];\n else if (args.length === 2) {\n index = Math.floor(args[0]);\n t = args[1];\n }\n if (index === undefined)\n this.array.push(t);\n else\n this.array.splice(index, 0, t);\n }\n remove(o) {\n let index;\n if (Number.isInteger(o)) {\n index = o;\n }\n else {\n index = this.array.indexOf(o);\n }\n let old = this.array[index];\n this.array.splice(index, 1);\n return old;\n }\n clear() {\n this.array = [];\n }\n addAll(...args) {\n let index, list;\n if (args.length === 1) {\n list = args[0];\n }\n else if (args.length === 2) {\n index = Math.floor(args[0]);\n list = args[1];\n }\n if (index === undefined) {\n this.array.push(...list.array);\n }\n else {\n this.array.splice(index, 0, ...list.array);\n }\n }\n removeAll(list) {\n let oldSize = this.size();\n list.array.forEach((item) => {\n let index = this.array.indexOf(item);\n this.array.splice(index, 1);\n });\n return this.size() === oldSize;\n }\n [Symbol.iterator]() {\n return this.array[Symbol.iterator];\n }\n subList(fromIndex, toIndex) {\n let list = new ArrayList();\n fromIndex = Math.floor(fromIndex);\n toIndex = Math.floor(toIndex);\n for (var i = fromIndex; i < toIndex; i++) {\n list.array.push(this.array[i]);\n }\n return list;\n }\n toString() {\n return this.array.toString();\n }\n sort(compareFn) {\n this.array.sort(compareFn);\n }\n }\n util.ArrayList = ArrayList;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Bundle {\n constructor(copy) {\n if (copy)\n Object.assign(this, copy);\n }\n get(key, defaultValue) {\n if (this.containsKey(key)) {\n return this[key];\n }\n return defaultValue;\n }\n put(key, value) {\n this[key] = value;\n }\n containsKey(key) {\n return key in this;\n }\n }\n os.Bundle = Bundle;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class StringBuilder {\n constructor(arg) {\n this.array = [];\n if (!Number.isInteger(arg) && arg) {\n this.append(arg);\n }\n }\n length() {\n return this.array.length;\n }\n append(a) {\n let str = a + '';\n this.array.push(...str.split(''));\n return this;\n }\n deleteCharAt(index) {\n this.array.splice(index, 1);\n return this;\n }\n replace(start, end, str) {\n this.array.splice(start, end - start, ...str.split(''));\n return this;\n }\n setLength(length) {\n let arrayLength = this.array.length;\n if (length === arrayLength)\n return;\n if (length < arrayLength) {\n this.array = this.array.splice(length, arrayLength - length);\n }\n else {\n for (let i = 0; i < arrayLength - length; i++) {\n this.array.push('\\0');\n }\n }\n }\n toString() {\n return this.array.join('');\n }\n }\n lang.StringBuilder = StringBuilder;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var StringBuilder = java.lang.StringBuilder;\n class Rect {\n constructor(...args) {\n this.left = 0;\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n if (args.length === 1) {\n let rect = args[0];\n this.left = rect.left;\n this.top = rect.top;\n this.right = rect.right;\n this.bottom = rect.bottom;\n }\n else if (args.length === 4 || args.length === 0) {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n this.left = left || 0;\n this.top = t || 0;\n this.right = right || 0;\n this.bottom = bottom || 0;\n }\n }\n equals(r) {\n if (this === r)\n return true;\n if (!r || !(r instanceof Rect))\n return false;\n return this.left === r.left && this.top === r.top\n && this.right === r.right && this.bottom === r.bottom;\n }\n toString() {\n let sb = new StringBuilder();\n sb.append(\"Rect(\");\n sb.append(this.left);\n sb.append(\", \");\n sb.append(this.top);\n sb.append(\" - \");\n sb.append(this.right);\n sb.append(\", \");\n sb.append(this.bottom);\n sb.append(\")\");\n return sb.toString();\n }\n toShortString(sb = new StringBuilder()) {\n sb.setLength(0);\n sb.append('[');\n sb.append(this.left);\n sb.append(',');\n sb.append(this.top);\n sb.append(\"][\");\n sb.append(this.right);\n sb.append(',');\n sb.append(this.bottom);\n sb.append(']');\n return sb.toString();\n }\n flattenToString() {\n let sb = new StringBuilder(32);\n sb.append(this.left);\n sb.append(' ');\n sb.append(this.top);\n sb.append(' ');\n sb.append(this.right);\n sb.append(' ');\n sb.append(this.bottom);\n return sb.toString();\n }\n static unflattenFromString(str) {\n let parts = str.split(\" \");\n return new Rect(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]), Number.parseInt(parts[3]));\n }\n isEmpty() {\n return this.left >= this.right || this.top >= this.bottom;\n }\n width() {\n return this.right - this.left;\n }\n height() {\n return this.bottom - this.top;\n }\n centerX() {\n return (this.left + this.right) >> 1;\n }\n centerY() {\n return (this.top + this.bottom) >> 1;\n }\n exactCenterX() {\n return (this.left + this.right) * 0.5;\n }\n exactCenterY() {\n return (this.top + this.bottom) * 0.5;\n }\n setEmpty() {\n this.left = this.right = this.top = this.bottom = 0;\n }\n set(...args) {\n if (args.length === 1) {\n let rect = args[0];\n [this.left, this.top, this.right, this.bottom] = [rect.left, rect.top, rect.right, rect.bottom];\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n this.left = left || 0;\n this.top = t || 0;\n this.right = right || 0;\n this.bottom = bottom || 0;\n }\n }\n offset(dx, dy) {\n this.left += dx;\n this.top += dy;\n this.right += dx;\n this.bottom += dy;\n }\n offsetTo(newLeft, newTop) {\n this.right += newLeft - this.left;\n this.bottom += newTop - this.top;\n this.left = newLeft;\n this.top = newTop;\n }\n inset(dx, dy) {\n this.left += dx;\n this.top += dy;\n this.right -= dx;\n this.bottom -= dy;\n }\n contains(...args) {\n if (args.length === 1) {\n let r = args[0];\n return this.left < this.right && this.top < this.bottom\n && this.left <= r.left && this.top <= r.top && this.right >= r.right && this.bottom >= r.bottom;\n }\n else if (args.length === 2) {\n let [x, y] = args;\n return this.left < this.right && this.top < this.bottom\n && x >= this.left && x < this.right && y >= this.top && y < this.bottom;\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return this.left < this.right && this.top < this.bottom\n && this.left <= left && this.top <= t\n && this.right >= right && this.bottom >= bottom;\n }\n }\n intersect(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.intersect(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n if (this.left < right && left < this.right && this.top < bottom && t < this.bottom) {\n if (this.left < left)\n this.left = left;\n if (this.top < t)\n this.top = t;\n if (this.right > right)\n this.right = right;\n if (this.bottom > bottom)\n this.bottom = bottom;\n return true;\n }\n return false;\n }\n }\n setIntersect(a, b) {\n if (a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom) {\n this.left = Math.max(a.left, b.left);\n this.top = Math.max(a.top, b.top);\n this.right = Math.min(a.right, b.right);\n this.bottom = Math.min(a.bottom, b.bottom);\n return true;\n }\n return false;\n }\n intersects(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.intersects(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return this.left < right && left < this.right && this.top < bottom && t < this.bottom;\n }\n }\n static intersects(a, b) {\n return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;\n }\n union(...args) {\n if (arguments.length === 1) {\n let rect = args[0];\n this.union(rect.left, rect.top, rect.right, rect.bottom);\n }\n else if (arguments.length === 2) {\n let [x = 0, y = 0] = args;\n if (x < this.left) {\n this.left = x;\n }\n else if (x > this.right) {\n this.right = x;\n }\n if (y < this.top) {\n this.top = y;\n }\n else if (y > this.bottom) {\n this.bottom = y;\n }\n }\n else {\n let left = args[0];\n let top = args[1];\n let right = args[2];\n let bottom = args[3];\n if ((left < right) && (top < bottom)) {\n if ((this.left < this.right) && (this.top < this.bottom)) {\n if (this.left > left)\n this.left = left;\n if (this.top > top)\n this.top = top;\n if (this.right < right)\n this.right = right;\n if (this.bottom < bottom)\n this.bottom = bottom;\n }\n else {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n }\n }\n }\n sort() {\n if (this.left > this.right) {\n [this.left, this.right] = [this.right, this.left];\n }\n if (this.top > this.bottom) {\n [this.top, this.bottom] = [this.bottom, this.top];\n }\n }\n scale(scale) {\n if (scale != 1) {\n this.left = this.left * scale;\n this.top = this.top * scale;\n this.right = this.right * scale;\n this.bottom = this.bottom * scale;\n }\n }\n }\n graphics.Rect = Rect;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class Gravity {\n static apply(gravity, w, h, container, outRect, layoutDirection) {\n let xAdj = 0, yAdj = 0;\n if (layoutDirection != null)\n gravity = Gravity.getAbsoluteGravity(gravity, layoutDirection);\n switch (gravity & ((Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_X_SHIFT)) {\n case 0:\n outRect.left = container.left + ((container.right - container.left - w) / 2) + xAdj;\n outRect.right = outRect.left + w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.left < container.left) {\n outRect.left = container.left;\n }\n if (outRect.right > container.right) {\n outRect.right = container.right;\n }\n }\n break;\n case Gravity.AXIS_PULL_BEFORE << Gravity.AXIS_X_SHIFT:\n outRect.left = container.left + xAdj;\n outRect.right = outRect.left + w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.right > container.right) {\n outRect.right = container.right;\n }\n }\n break;\n case Gravity.AXIS_PULL_AFTER << Gravity.AXIS_X_SHIFT:\n outRect.right = container.right - xAdj;\n outRect.left = outRect.right - w;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT)) {\n if (outRect.left < container.left) {\n outRect.left = container.left;\n }\n }\n break;\n default:\n outRect.left = container.left + xAdj;\n outRect.right = container.right + xAdj;\n break;\n }\n switch (gravity & ((Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_Y_SHIFT)) {\n case 0:\n outRect.top = container.top + ((container.bottom - container.top - h) / 2) + yAdj;\n outRect.bottom = outRect.top + h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.top < container.top) {\n outRect.top = container.top;\n }\n if (outRect.bottom > container.bottom) {\n outRect.bottom = container.bottom;\n }\n }\n break;\n case Gravity.AXIS_PULL_BEFORE << Gravity.AXIS_Y_SHIFT:\n outRect.top = container.top + yAdj;\n outRect.bottom = outRect.top + h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.bottom > container.bottom) {\n outRect.bottom = container.bottom;\n }\n }\n break;\n case Gravity.AXIS_PULL_AFTER << Gravity.AXIS_Y_SHIFT:\n outRect.bottom = container.bottom - yAdj;\n outRect.top = outRect.bottom - h;\n if ((gravity & (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) == (Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT)) {\n if (outRect.top < container.top) {\n outRect.top = container.top;\n }\n }\n break;\n default:\n outRect.top = container.top + yAdj;\n outRect.bottom = container.bottom + yAdj;\n break;\n }\n }\n static getAbsoluteGravity(gravity, layoutDirection) {\n return gravity;\n }\n static parseGravity(gravityStr, defaultGravity = Gravity.NO_GRAVITY) {\n if (!gravityStr)\n return defaultGravity;\n let gravity = null;\n try {\n let parts = gravityStr.split(\"|\");\n for (let part of parts) {\n let g = Gravity[part.toUpperCase()];\n if (Number.isInteger(g))\n gravity |= g;\n }\n }\n catch (e) {\n console.error(e);\n }\n if (Number.isNaN(gravity))\n return defaultGravity;\n return gravity;\n }\n }\n Gravity.NO_GRAVITY = 0x0000;\n Gravity.AXIS_SPECIFIED = 0x0001;\n Gravity.AXIS_PULL_BEFORE = 0x0002;\n Gravity.AXIS_PULL_AFTER = 0x0004;\n Gravity.AXIS_CLIP = 0x0008;\n Gravity.AXIS_X_SHIFT = 0;\n Gravity.AXIS_Y_SHIFT = 4;\n Gravity.TOP = (Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_Y_SHIFT;\n Gravity.BOTTOM = (Gravity.AXIS_PULL_AFTER | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_Y_SHIFT;\n Gravity.LEFT = (Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_X_SHIFT;\n Gravity.RIGHT = (Gravity.AXIS_PULL_AFTER | Gravity.AXIS_SPECIFIED) << Gravity.AXIS_X_SHIFT;\n Gravity.START = Gravity.LEFT;\n Gravity.END = Gravity.RIGHT;\n Gravity.CENTER_VERTICAL = Gravity.AXIS_SPECIFIED << Gravity.AXIS_Y_SHIFT;\n Gravity.FILL_VERTICAL = Gravity.TOP | Gravity.BOTTOM;\n Gravity.CENTER_HORIZONTAL = Gravity.AXIS_SPECIFIED << Gravity.AXIS_X_SHIFT;\n Gravity.FILL_HORIZONTAL = Gravity.LEFT | Gravity.RIGHT;\n Gravity.CENTER = Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL;\n Gravity.FILL = Gravity.FILL_VERTICAL | Gravity.FILL_HORIZONTAL;\n Gravity.CLIP_VERTICAL = Gravity.AXIS_CLIP << Gravity.AXIS_Y_SHIFT;\n Gravity.CLIP_HORIZONTAL = Gravity.AXIS_CLIP << Gravity.AXIS_X_SHIFT;\n Gravity.HORIZONTAL_GRAVITY_MASK = (Gravity.AXIS_SPECIFIED |\n Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_X_SHIFT;\n Gravity.VERTICAL_GRAVITY_MASK = (Gravity.AXIS_SPECIFIED |\n Gravity.AXIS_PULL_BEFORE | Gravity.AXIS_PULL_AFTER) << Gravity.AXIS_Y_SHIFT;\n Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK = Gravity.HORIZONTAL_GRAVITY_MASK;\n Gravity.DISPLAY_CLIP_VERTICAL = 0x10000000;\n Gravity.DISPLAY_CLIP_HORIZONTAL = 0x01000000;\n view.Gravity = Gravity;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseMap {\n constructor(initialCapacity) {\n this.map = new Map();\n }\n clone() {\n let clone = new SparseMap();\n clone.map = new Map(this.map);\n return clone;\n }\n get(key, valueIfKeyNotFound = null) {\n let value = this.map.get(key);\n if (value === undefined)\n return valueIfKeyNotFound;\n return value;\n }\n delete(key) {\n this.map.delete(key);\n }\n remove(key) {\n this.delete(key);\n }\n removeAt(index) {\n this.removeAtRange(index);\n }\n removeAtRange(index, size = 1) {\n let keys = [...this.map.keys()];\n let end = Math.min(this.map.size, index + size);\n for (let i = index; i < end; i++) {\n this.map.delete(keys[i]);\n }\n }\n put(key, value) {\n this.map.set(key, value);\n }\n size() {\n return this.map.size;\n }\n keyAt(index) {\n return [...this.map.keys()][index];\n }\n valueAt(index) {\n return [...this.map.values()][index];\n }\n setValueAt(index, value) {\n let key = this.keyAt(index);\n this.map.set(key, value);\n }\n indexOfKey(key) {\n return [...this.map.keys()].indexOf(key);\n }\n indexOfValue(value) {\n return [...this.map.values()].indexOf(value);\n }\n clear() {\n this.map.clear();\n }\n append(key, value) {\n this.put(key, value);\n }\n }\n util.SparseMap = SparseMap;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseArray extends util.SparseMap {\n }\n util.SparseArray = SparseArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Log {\n static getPriorityString(priority) {\n if (priority > Log.PriorityString.length)\n return \"\";\n return Log.PriorityString[priority - 2];\n }\n static v(tag, msg, tr) {\n console.log(Log.getLogMsg(Log.VERBOSE, tag, msg));\n if (tr)\n console.log(tr);\n }\n static d(tag, msg) {\n console.debug(Log.getLogMsg(Log.DEBUG, tag, msg));\n }\n static i(tag, msg, tr) {\n console.info(Log.getLogMsg(Log.INFO, tag, msg));\n if (tr)\n console.info(tr);\n }\n static w(tag, msg, tr) {\n console.warn(Log.getLogMsg(Log.WARN, tag, msg));\n if (tr)\n console.warn(tr);\n }\n static e(tag, msg, tr) {\n console.error(Log.getLogMsg(Log.ERROR, tag, msg));\n if (tr)\n console.error(tr);\n }\n static getLogMsg(priority, tag, msg) {\n let d = new Date();\n let dateFormat = d.toLocaleTimeString() + '.' + d.getUTCMilliseconds();\n return \"[\" + Log.getPriorityString(priority) + \"] \" + dateFormat + \" \\t \" + tag + \" \\t \" + msg;\n }\n }\n Log.View_DBG = false;\n Log.VelocityTracker_DBG = false;\n Log.DBG_DrawableContainer = false;\n Log.DBG_StateListDrawable = false;\n Log.VERBOSE = 2;\n Log.DEBUG = 3;\n Log.INFO = 4;\n Log.WARN = 5;\n Log.ERROR = 6;\n Log.ASSERT = 7;\n Log.PriorityString = [\"VERBOSE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\", \"ASSERT\"];\n util.Log = Log;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class PixelFormat {\n }\n PixelFormat.UNKNOWN = 0;\n PixelFormat.TRANSLUCENT = -3;\n PixelFormat.TRANSPARENT = -2;\n PixelFormat.OPAQUE = -1;\n PixelFormat.RGBA_8888 = 1;\n PixelFormat.RGBX_8888 = 2;\n PixelFormat.RGB_888 = 3;\n PixelFormat.RGB_565 = 4;\n graphics.PixelFormat = PixelFormat;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var ref;\n (function (ref) {\n class WeakReference {\n constructor(referent) {\n this.weakMap = new WeakMap();\n this.weakMap.set(this, referent);\n }\n get() {\n return this.weakMap.get(this);\n }\n set(value) {\n this.weakMap.set(this, value);\n }\n clear() {\n this.weakMap.delete(this);\n }\n }\n ref.WeakReference = WeakReference;\n })(ref = lang.ref || (lang.ref = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var Runnable;\n (function (Runnable) {\n function of(func) {\n return {\n run: func\n };\n }\n Runnable.of = of;\n })(Runnable = lang.Runnable || (lang.Runnable = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class System {\n static currentTimeMillis() {\n return new Date().getTime();\n }\n static arraycopy(src, srcPos, dest, destPos, length) {\n let srcLength = src.length;\n let destLength = dest.length;\n for (let i = 0; i < length; i++) {\n let srcIndex = i + srcPos;\n if (srcIndex >= srcLength)\n return;\n let destIndex = i + destPos;\n if (destIndex >= destLength)\n return;\n dest[destIndex] = src[srcIndex];\n }\n }\n }\n System.out = {\n println(any) {\n console.log('\\n');\n console.log(any);\n },\n print(any) {\n console.log(any);\n }\n };\n lang.System = System;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class ArrayCreator {\n static newNumberArray(size) {\n let array = new Array(size);\n if (size > 0)\n ArrayCreator.fillArray(array, 0);\n return array;\n }\n static newBooleanArray(size) {\n let array = new Array(size);\n ArrayCreator.fillArray(array, false);\n return array;\n }\n static fillArray(array, value) {\n for (var i = 0, length = array.length; i < length; i++) {\n array[i] = value;\n }\n }\n }\n util.ArrayCreator = ArrayCreator;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n var System = java.lang.System;\n class StateSet {\n static isWildCard(stateSetOrSpec) {\n return stateSetOrSpec.length == 0 || stateSetOrSpec[0] == 0;\n }\n static stateSetMatches(stateSpec, stateSetOrState) {\n if (Number.isInteger(stateSetOrState)) {\n return StateSet._stateSetMatches_single(stateSpec, stateSetOrState);\n }\n let stateSet = stateSetOrState;\n if (stateSet == null) {\n return (stateSpec == null || this.isWildCard(stateSpec));\n }\n let stateSpecSize = stateSpec.length;\n let stateSetSize = stateSet.length;\n for (let i = 0; i < stateSpecSize; i++) {\n let stateSpecState = stateSpec[i];\n if (stateSpecState == 0) {\n return true;\n }\n let mustMatch;\n if (stateSpecState > 0) {\n mustMatch = true;\n }\n else {\n mustMatch = false;\n stateSpecState = -stateSpecState;\n }\n let found = false;\n for (let j = 0; j < stateSetSize; j++) {\n const state = stateSet[j];\n if (state == 0) {\n if (mustMatch) {\n return false;\n }\n else {\n break;\n }\n }\n if (state == stateSpecState) {\n if (mustMatch) {\n found = true;\n break;\n }\n else {\n return false;\n }\n }\n }\n if (mustMatch && !found) {\n return false;\n }\n }\n return true;\n }\n static _stateSetMatches_single(stateSpec, state) {\n let stateSpecSize = stateSpec.length;\n for (let i = 0; i < stateSpecSize; i++) {\n let stateSpecState = stateSpec[i];\n if (stateSpecState == 0) {\n return true;\n }\n if (stateSpecState > 0) {\n if (state != stateSpecState) {\n return false;\n }\n }\n else {\n if (state == -stateSpecState) {\n return false;\n }\n }\n }\n return true;\n }\n static trimStateSet(states, newSize) {\n if (states.length == newSize) {\n return states;\n }\n let trimmedStates = androidui.util.ArrayCreator.newNumberArray(newSize);\n System.arraycopy(states, 0, trimmedStates, 0, newSize);\n return trimmedStates;\n }\n }\n StateSet.WILD_CARD = [];\n StateSet.NOTHING = [0];\n util.StateSet = StateSet;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Pools {\n }\n util.Pools = Pools;\n (function (Pools) {\n class SimplePool {\n constructor(maxPoolSize) {\n this.mPoolSize = 0;\n if (maxPoolSize <= 0) {\n throw new Error(\"The max pool size must be > 0\");\n }\n this.mPool = new Array(maxPoolSize);\n }\n acquire() {\n if (this.mPoolSize > 0) {\n const lastPooledIndex = this.mPoolSize - 1;\n let instance = this.mPool[lastPooledIndex];\n this.mPool[lastPooledIndex] = null;\n this.mPoolSize--;\n return instance;\n }\n return null;\n }\n release(instance) {\n if (this.isInPool(instance)) {\n throw new Error(\"Already in the pool!\");\n }\n if (this.mPoolSize < this.mPool.length) {\n this.mPool[this.mPoolSize] = instance;\n this.mPoolSize++;\n return true;\n }\n return false;\n }\n isInPool(instance) {\n for (let i = 0; i < this.mPoolSize; i++) {\n if (this.mPool[i] == instance) {\n return true;\n }\n }\n return false;\n }\n }\n Pools.SimplePool = SimplePool;\n class SynchronizedPool extends SimplePool {\n }\n Pools.SynchronizedPool = SynchronizedPool;\n })(Pools = util.Pools || (util.Pools = {}));\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Color {\n static alpha(color) {\n return color >>> 24;\n }\n static red(color) {\n return (color >> 16) & 0xFF;\n }\n static green(color) {\n return (color >> 8) & 0xFF;\n }\n static blue(color) {\n return color & 0xFF;\n }\n static rgb(red, green, blue) {\n return (0xFF << 24) | (red << 16) | (green << 8) | blue;\n }\n static argb(alpha, red, green, blue) {\n return (alpha << 24) | (red << 16) | (green << 8) | blue;\n }\n static rgba(red, green, blue, alpha) {\n return (alpha << 24) | (red << 16) | (green << 8) | blue;\n }\n static parseColor(colorString, defaultColor) {\n if (colorString.charAt(0) == '#') {\n if (colorString.length === 4) {\n colorString = '#' + colorString[1] + colorString[1] + colorString[2] + colorString[2] + colorString[3] + colorString[3];\n }\n let color = parseInt(colorString.substring(1), 16);\n if (colorString.length == 7) {\n color |= 0x00000000ff000000;\n }\n else if (colorString.length != 9) {\n if (defaultColor != null)\n return defaultColor;\n throw new Error(\"Unknown color : \" + colorString);\n }\n return color;\n }\n else if (colorString.startsWith('rgb(')) {\n colorString = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')'));\n let parts = colorString.split(',');\n return Color.rgb(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]));\n }\n else if (colorString.startsWith('rgba(')) {\n colorString = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')'));\n let parts = colorString.split(',');\n return Color.rgba(Number.parseInt(parts[0]), Number.parseInt(parts[1]), Number.parseInt(parts[2]), Number.parseFloat(parts[3]) * 255);\n }\n else {\n let color = Color.sColorNameMap.get(colorString.toLowerCase());\n if (color != null) {\n return color;\n }\n }\n if (defaultColor != null)\n return defaultColor;\n throw new Error(\"Unknown color : \" + colorString);\n }\n static toARGBHex(color) {\n let r = Color.red(color);\n let g = Color.green(color);\n let b = Color.blue(color);\n let a = Color.alpha(color);\n let hR = r < 16 ? '0' + r.toString(16) : r.toString(16);\n let hG = g < 16 ? '0' + g.toString(16) : g.toString(16);\n let hB = b < 16 ? '0' + b.toString(16) : b.toString(16);\n let hA = a < 16 ? '0' + a.toString(16) : a.toString(16);\n return \"#\" + hA + hR + hG + hB;\n }\n static toRGBAFunc(color) {\n let r = Color.red(color);\n let g = Color.green(color);\n let b = Color.blue(color);\n let a = Color.alpha(color);\n return `rgba(${r},${g},${b},${a / 255})`;\n }\n static getHtmlColor(color) {\n let i = Color.sColorNameMap.get(color.toLowerCase());\n return i;\n }\n }\n Color.BLACK = 0xFF000000;\n Color.DKGRAY = 0xFF444444;\n Color.GRAY = 0xFF888888;\n Color.LTGRAY = 0xFFCCCCCC;\n Color.WHITE = 0xFFFFFFFF;\n Color.RED = 0xFFFF0000;\n Color.GREEN = 0xFF00FF00;\n Color.BLUE = 0xFF0000FF;\n Color.YELLOW = 0xFFFFFF00;\n Color.CYAN = 0xFF00FFFF;\n Color.MAGENTA = 0xFFFF00FF;\n Color.TRANSPARENT = 0;\n Color.sColorNameMap = new Map();\n graphics.Color = Color;\n Color.sColorNameMap = new Map();\n Color.sColorNameMap.set(\"black\", Color.BLACK);\n Color.sColorNameMap.set(\"darkgray\", Color.DKGRAY);\n Color.sColorNameMap.set(\"gray\", Color.GRAY);\n Color.sColorNameMap.set(\"lightgray\", Color.LTGRAY);\n Color.sColorNameMap.set(\"white\", Color.WHITE);\n Color.sColorNameMap.set(\"red\", Color.RED);\n Color.sColorNameMap.set(\"green\", Color.GREEN);\n Color.sColorNameMap.set(\"blue\", Color.BLUE);\n Color.sColorNameMap.set(\"yellow\", Color.YELLOW);\n Color.sColorNameMap.set(\"cyan\", Color.CYAN);\n Color.sColorNameMap.set(\"magenta\", Color.MAGENTA);\n Color.sColorNameMap.set(\"aqua\", 0xFF00FFFF);\n Color.sColorNameMap.set(\"fuchsia\", 0xFFFF00FF);\n Color.sColorNameMap.set(\"darkgrey\", Color.DKGRAY);\n Color.sColorNameMap.set(\"grey\", Color.GRAY);\n Color.sColorNameMap.set(\"lightgrey\", Color.LTGRAY);\n Color.sColorNameMap.set(\"lime\", 0xFF00FF00);\n Color.sColorNameMap.set(\"maroon\", 0xFF800000);\n Color.sColorNameMap.set(\"navy\", 0xFF000080);\n Color.sColorNameMap.set(\"olive\", 0xFF808000);\n Color.sColorNameMap.set(\"purple\", 0xFF800080);\n Color.sColorNameMap.set(\"silver\", 0xFFC0C0C0);\n Color.sColorNameMap.set(\"teal\", 0xFF008080);\n Color.sColorNameMap.set(\"transparent\", Color.TRANSPARENT);\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Paint {\n constructor(flag = 0) {\n this.mTextStyle = Paint.Style.FILL;\n this.textScaleX = 1;\n this.mFlag = 0;\n this.shadowDx = 0;\n this.shadowDy = 0;\n this.shadowRadius = 0;\n this.shadowColor = 0;\n this.mFlag = flag;\n }\n set(src) {\n if (this != src) {\n this.setClassVariablesFrom(src);\n }\n }\n setClassVariablesFrom(paint) {\n this.mTextStyle = paint.mTextStyle;\n this.mColor = paint.mColor;\n this.mStrokeWidth = paint.mStrokeWidth;\n this.align = paint.align;\n this.mStrokeCap = paint.mStrokeCap;\n this.mStrokeJoin = paint.mStrokeJoin;\n this.textSize = paint.textSize;\n this.textScaleX = paint.textScaleX;\n this.mFlag = paint.mFlag;\n this.hasShadow = paint.hasShadow;\n this.shadowDx = paint.shadowDx;\n this.shadowDy = paint.shadowDy;\n this.shadowRadius = paint.shadowRadius;\n this.shadowColor = paint.shadowColor;\n this.drawableState = paint.drawableState;\n }\n getStyle() {\n return this.mTextStyle;\n }\n setStyle(style) {\n this.mTextStyle = style;\n }\n getFlags() {\n return this.mFlag;\n }\n setFlags(flags) {\n this.mFlag = flags;\n }\n getTextScaleX() {\n return this.textScaleX;\n }\n setTextScaleX(scaleX) {\n this.textScaleX = scaleX;\n }\n getColor() {\n return this.mColor;\n }\n setColor(color) {\n this.mColor = color;\n }\n setARGB(a, r, g, b) {\n this.setColor((a << 24) | (r << 16) | (g << 8) | b);\n }\n getAlpha() {\n return graphics.Color.alpha(this.mColor);\n }\n setAlpha(alpha) {\n this.setColor(graphics.Color.argb(alpha, graphics.Color.red(this.mColor), graphics.Color.green(this.mColor), graphics.Color.blue(this.mColor)));\n }\n getStrokeWidth() {\n return this.mStrokeWidth;\n }\n setStrokeWidth(width) {\n this.mStrokeWidth = width;\n }\n getStrokeCap() {\n return this.mStrokeCap;\n }\n setStrokeCap(cap) {\n this.mStrokeCap = cap;\n }\n getStrokeJoin() {\n return this.mStrokeJoin;\n }\n setStrokeJoin(join) {\n this.mStrokeJoin = join;\n }\n setAntiAlias(enable) {\n }\n isAntiAlias() {\n return true;\n }\n setShadowLayer(radius, dx, dy, color) {\n this.hasShadow = radius > 0.0;\n this.shadowRadius = radius;\n this.shadowDx = dx;\n this.shadowDy = dy;\n this.shadowColor = color;\n }\n clearShadowLayer() {\n this.hasShadow = false;\n }\n getTextAlign() {\n return this.align;\n }\n setTextAlign(align) {\n this.align = align;\n }\n getTextSize() {\n return this.textSize;\n }\n setTextSize(textSize) {\n this.textSize = textSize;\n }\n ascent() {\n return this.textSize * Paint.FontMetrics_Size_Ascent;\n }\n descent() {\n return this.textSize * Paint.FontMetrics_Size_Descent;\n }\n getFontMetricsInt(fmi) {\n if (this.textSize == null) {\n console.warn('call Paint.getFontMetricsInt but textSize not init');\n return 0;\n }\n if (fmi == null) {\n return Math.floor((Paint.FontMetrics_Size_Descent - Paint.FontMetrics_Size_Ascent) * this.textSize);\n }\n fmi.ascent = Math.floor(Paint.FontMetrics_Size_Ascent * this.textSize);\n fmi.bottom = Math.floor(Paint.FontMetrics_Size_Bottom * this.textSize);\n fmi.descent = Math.floor(Paint.FontMetrics_Size_Descent * this.textSize);\n fmi.leading = Math.floor(Paint.FontMetrics_Size_Leading * this.textSize);\n fmi.top = Math.floor(Paint.FontMetrics_Size_Top * this.textSize);\n return fmi.descent - fmi.ascent;\n }\n getFontMetrics(metrics) {\n if (this.textSize == null) {\n console.warn('call Paint.getFontMetrics but textSize not init');\n return 0;\n }\n if (metrics == null) {\n return (Paint.FontMetrics_Size_Descent - Paint.FontMetrics_Size_Ascent) * this.textSize;\n }\n metrics.ascent = Paint.FontMetrics_Size_Ascent * this.textSize;\n metrics.bottom = Paint.FontMetrics_Size_Bottom * this.textSize;\n metrics.descent = Paint.FontMetrics_Size_Descent * this.textSize;\n metrics.leading = Paint.FontMetrics_Size_Leading * this.textSize;\n metrics.top = Paint.FontMetrics_Size_Top * this.textSize;\n return metrics.descent - metrics.ascent;\n }\n measureText(text, index = 0, count = text.length) {\n return graphics.Canvas.measureText(text.substr(index, count), this.textSize) * this.textScaleX;\n }\n getTextWidths_count(text, index, count, widths) {\n return this.getTextWidths_end(text, index, index + count, widths);\n }\n getTextWidths_end(text, start, end, widths) {\n if (text == null) {\n throw Error(`new IllegalArgumentException(\"text cannot be null\")`);\n }\n if ((start | end | (end - start) | (text.length - end)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n if (end - start > widths.length) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n if (text.length == 0 || start == end) {\n return 0;\n }\n for (let i = start; i < end; i++) {\n widths[i - start] = this.measureText(text[i]);\n }\n return end - start;\n }\n getTextWidths_2(text, widths) {\n return this.getTextWidths_end(text, 0, text.length, widths);\n }\n getTextRunAdvances_count(chars, index, count, contextIndex, contextCount, flags, advances, advancesIndex) {\n return this.getTextRunAdvances_end(chars, index, index + count, contextIndex, contextCount, flags, advances, advancesIndex);\n }\n getTextRunAdvances_end(text, start, end, contextStart, contextEnd, flags, advances, advancesIndex) {\n if (text == null) {\n throw Error(`new IllegalArgumentException(\"text cannot be null\")`);\n }\n if (flags != Paint.DIRECTION_LTR && flags != Paint.DIRECTION_RTL) {\n throw Error(`new IllegalArgumentException(\"unknown flags value: \" + flags)`);\n }\n if ((start | end | contextStart | contextEnd | advancesIndex | (end - start)\n | (start - contextStart) | (contextEnd - end) | (text.length - contextEnd)\n | (advances == null ? 0 : (advances.length - advancesIndex - (end - start)))) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n if (text.length == 0 || start == end) {\n return 0;\n }\n let totalAdvance = 0;\n for (let i = start; i < end; i++) {\n let width = this.measureText(text[i]);\n if (advances)\n advances[i - start + advancesIndex] = width;\n totalAdvance += width;\n }\n return totalAdvance;\n }\n getTextRunCursor_len(text, contextStart, contextLength, flags, offset, cursorOpt) {\n let contextEnd = contextStart + contextLength;\n if (((contextStart | contextEnd | offset | (contextEnd - contextStart) | (offset - contextStart) | (contextEnd - offset)\n | (text.length - contextEnd) | cursorOpt) < 0) || cursorOpt > Paint.CURSOR_OPT_MAX_VALUE) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n const scalarArray = androidui.util.ArrayCreator.newNumberArray(contextLength);\n this.getTextRunAdvances_count(text, contextStart, contextLength, contextStart, contextLength, flags, scalarArray, 0);\n let pos = offset - contextStart;\n switch (cursorOpt) {\n case Paint.CURSOR_AFTER:\n if (pos < contextLength) {\n pos += 1;\n }\n case Paint.CURSOR_AT_OR_AFTER:\n while (pos < contextLength && scalarArray[pos] == 0) {\n ++pos;\n }\n break;\n case Paint.CURSOR_BEFORE:\n if (pos > 0) {\n --pos;\n }\n case Paint.CURSOR_AT_OR_BEFORE:\n while (pos > 0 && scalarArray[pos] == 0) {\n --pos;\n }\n break;\n case Paint.CURSOR_AT:\n default:\n if (scalarArray[pos] == 0) {\n pos = -1;\n }\n break;\n }\n if (pos != -1) {\n pos += contextStart;\n }\n return pos;\n }\n getTextRunCursor_end(text, contextStart, contextEnd, flags, offset, cursorOpt) {\n if (((contextStart | contextEnd | offset | (contextEnd - contextStart) | (offset - contextStart) | (contextEnd - offset)\n | (text.length - contextEnd) | cursorOpt) < 0) || cursorOpt > Paint.CURSOR_OPT_MAX_VALUE) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n let contextLen = contextEnd - contextStart;\n return this.getTextRunCursor_len(text, 0, contextLen, flags, offset - contextStart, cursorOpt);\n }\n isEmpty() {\n return this.mColor == null\n && this.align == null\n && this.mStrokeWidth == null\n && this.mStrokeCap == null\n && this.mStrokeJoin == null\n && !this.hasShadow\n && this.textSize == null;\n }\n applyToCanvas(canvas) {\n if (this.mColor != null) {\n canvas.setColor(this.mColor, this.getStyle());\n }\n if (this.align != null) {\n canvas.setTextAlign(Paint.Align[this.align].toLowerCase());\n }\n if (this.mStrokeWidth != null) {\n canvas.setLineWidth(this.mStrokeWidth);\n }\n if (this.mStrokeCap != null) {\n canvas.setLineCap(Paint.Cap[this.mStrokeCap].toLowerCase());\n }\n if (this.mStrokeJoin != null) {\n canvas.setLineJoin(Paint.Join[this.mStrokeJoin].toLowerCase());\n }\n if (this.hasShadow) {\n canvas.setShadow(this.shadowRadius, this.shadowDx, this.shadowDy, this.shadowColor);\n }\n if (this.textSize != null) {\n canvas.setFontSize(this.textSize);\n }\n if (this.textScaleX != 1) {\n canvas.scale(this.textScaleX, 1);\n }\n }\n }\n Paint.FontMetrics_Size_Ascent = -0.9277344;\n Paint.FontMetrics_Size_Bottom = 0.2709961;\n Paint.FontMetrics_Size_Descent = 0.24414062;\n Paint.FontMetrics_Size_Leading = 0;\n Paint.FontMetrics_Size_Top = -1.05615234;\n Paint.DIRECTION_LTR = 0;\n Paint.DIRECTION_RTL = 1;\n Paint.CURSOR_AFTER = 0;\n Paint.CURSOR_AT_OR_AFTER = 1;\n Paint.CURSOR_BEFORE = 2;\n Paint.CURSOR_AT_OR_BEFORE = 3;\n Paint.CURSOR_AT = 4;\n Paint.CURSOR_OPT_MAX_VALUE = Paint.CURSOR_AT;\n Paint.ANTI_ALIAS_FLAG = 0x01;\n Paint.FILTER_BITMAP_FLAG = 0x02;\n Paint.DITHER_FLAG = 0x04;\n Paint.UNDERLINE_TEXT_FLAG = 0x08;\n Paint.STRIKE_THRU_TEXT_FLAG = 0x10;\n Paint.FAKE_BOLD_TEXT_FLAG = 0x20;\n Paint.LINEAR_TEXT_FLAG = 0x40;\n Paint.SUBPIXEL_TEXT_FLAG = 0x80;\n Paint.DEV_KERN_TEXT_FLAG = 0x100;\n Paint.LCD_RENDER_TEXT_FLAG = 0x200;\n Paint.EMBEDDED_BITMAP_TEXT_FLAG = 0x400;\n Paint.AUTO_HINTING_TEXT_FLAG = 0x800;\n Paint.VERTICAL_TEXT_FLAG = 0x1000;\n Paint.DEFAULT_PAINT_FLAGS = Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG;\n graphics.Paint = Paint;\n (function (Paint) {\n var Align;\n (function (Align) {\n Align[Align[\"LEFT\"] = 0] = \"LEFT\";\n Align[Align[\"CENTER\"] = 1] = \"CENTER\";\n Align[Align[\"RIGHT\"] = 2] = \"RIGHT\";\n })(Align = Paint.Align || (Paint.Align = {}));\n class FontMetrics {\n constructor() {\n this.top = 0;\n this.ascent = 0;\n this.descent = 0;\n this.bottom = 0;\n this.leading = 0;\n }\n }\n Paint.FontMetrics = FontMetrics;\n class FontMetricsInt {\n constructor() {\n this.top = 0;\n this.ascent = 0;\n this.descent = 0;\n this.bottom = 0;\n this.leading = 0;\n }\n toString() {\n return \"FontMetricsInt: top=\" + this.top + \" ascent=\" + this.ascent + \" descent=\" + this.descent + \" bottom=\" + this.bottom + \" leading=\" + this.leading;\n }\n }\n Paint.FontMetricsInt = FontMetricsInt;\n var Style;\n (function (Style) {\n Style[Style[\"FILL\"] = 0] = \"FILL\";\n Style[Style[\"STROKE\"] = 1] = \"STROKE\";\n Style[Style[\"FILL_AND_STROKE\"] = 2] = \"FILL_AND_STROKE\";\n })(Style = Paint.Style || (Paint.Style = {}));\n var Cap;\n (function (Cap) {\n Cap[Cap[\"BUTT\"] = 0] = \"BUTT\";\n Cap[Cap[\"ROUND\"] = 1] = \"ROUND\";\n Cap[Cap[\"SQUARE\"] = 2] = \"SQUARE\";\n })(Cap = Paint.Cap || (Paint.Cap = {}));\n var Join;\n (function (Join) {\n Join[Join[\"MITER\"] = 0] = \"MITER\";\n Join[Join[\"ROUND\"] = 1] = \"ROUND\";\n Join[Join[\"BEVEL\"] = 2] = \"BEVEL\";\n })(Join = Paint.Join || (Paint.Join = {}));\n })(Paint = graphics.Paint || (graphics.Paint = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Path {\n reset() {\n }\n }\n graphics.Path = Path;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class Point {\n constructor(...args) {\n this.x = 0;\n this.y = 0;\n if (args.length === 1) {\n let src = args[0];\n this.x = src.x;\n this.y = src.y;\n }\n else {\n let [x = 0, y = 0] = args;\n this.x = x;\n this.y = y;\n }\n }\n set(x, y) {\n this.x = x;\n this.y = y;\n }\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n }\n offset(dx, dy) {\n this.x += dx;\n this.y += dy;\n }\n equals(...args) {\n if (args.length === 2) {\n let [x = 0, y = 0] = args;\n return this.x == x && this.y == y;\n }\n else {\n let o = args[0];\n if (this === o)\n return true;\n if (!o || !(o instanceof Point))\n return false;\n let point = o;\n if (this.x != point.x)\n return false;\n if (this.y != point.y)\n return false;\n return true;\n }\n }\n toString() {\n return \"Point(\" + this.x + \", \" + this.y + \")\";\n }\n }\n graphics.Point = Point;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n class RectF extends graphics.Rect {\n }\n graphics.RectF = RectF;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var System = java.lang.System;\n var StringBuilder = java.lang.StringBuilder;\n class Matrix {\n constructor(values) {\n this.mValues = androidui.util.ArrayCreator.newNumberArray(Matrix.MATRIX_SIZE);\n if (values instanceof Matrix)\n this.set(values);\n else if (values instanceof Array) {\n System.arraycopy(values, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n else {\n Matrix.reset(this.mValues);\n }\n }\n isIdentity() {\n for (let i = 0, k = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++, k++) {\n if (this.mValues[k] != ((i == j) ? 1 : 0)) {\n return false;\n }\n }\n }\n return true;\n }\n hasPerspective() {\n return (this.mValues[6] != 0 || this.mValues[7] != 0 || this.mValues[8] != 1);\n }\n rectStaysRect() {\n return (this.computeTypeMask() & Matrix.kRectStaysRect_Mask) != 0;\n }\n set(src) {\n if (src == null) {\n this.reset();\n }\n else {\n System.arraycopy(src.mValues, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n }\n equals(obj) {\n if (!(obj instanceof Matrix))\n return false;\n let another = obj;\n for (let i = 0; i < Matrix.MATRIX_SIZE; i++) {\n if (this.mValues[i] != another.mValues[i]) {\n return false;\n }\n }\n return true;\n }\n hashCode() {\n return 44;\n }\n reset() {\n Matrix.reset(this.mValues);\n }\n setTranslate(dx, dy) {\n Matrix.setTranslate(this.mValues, dx, dy);\n }\n setScale(sx, sy, px, py) {\n if (px == null || py == null) {\n this.mValues[0] = sx;\n this.mValues[1] = 0;\n this.mValues[2] = 0;\n this.mValues[3] = 0;\n this.mValues[4] = sy;\n this.mValues[5] = 0;\n this.mValues[6] = 0;\n this.mValues[7] = 0;\n this.mValues[8] = 1;\n }\n else {\n this.mValues = Matrix.getScale(sx, sy, px, py);\n }\n }\n setRotate(degrees, px, py) {\n if (px == null || py == null) {\n Matrix.setRotate_1(this.mValues, degrees);\n }\n else {\n this.mValues = Matrix.getRotate_3(degrees, px, py);\n }\n }\n setSinCos(sinValue, cosValue, px, py) {\n if (px == null || py == null) {\n Matrix.setRotate_2(this.mValues, sinValue, cosValue);\n }\n else {\n Matrix.setTranslate(this.mValues, -px, -py);\n this.postTransform(Matrix.getRotate_2(sinValue, cosValue));\n this.postTransform(Matrix.getTranslate(px, py));\n }\n }\n setSkew(kx, ky, px, py) {\n if (px == null || py == null) {\n this.mValues[0] = 1;\n this.mValues[1] = kx;\n this.mValues[2] = -0;\n this.mValues[3] = ky;\n this.mValues[4] = 1;\n this.mValues[5] = 0;\n this.mValues[6] = 0;\n this.mValues[7] = 0;\n this.mValues[8] = 1;\n }\n else {\n this.mValues = Matrix.getSkew(kx, ky, px, py);\n }\n }\n setConcat(a, b) {\n Matrix.multiply(this.mValues, a.mValues, b.mValues);\n return true;\n }\n preTranslate(dx, dy) {\n this.preTransform(Matrix.getTranslate(dx, dy));\n return true;\n }\n preScale(sx, sy, px, py) {\n this.preTransform(Matrix.getScale(sx, sy, px, py));\n return true;\n }\n preRotate(degrees, px, py) {\n if (px == null || py == null) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n this.preTransform(Matrix.getRotate_2(sin, cos));\n return true;\n }\n this.preTransform(Matrix.getRotate_3(degrees, px, py));\n return true;\n }\n preSkew(kx, ky, px, py) {\n this.preTransform(Matrix.getSkew(kx, ky, px, py));\n return true;\n }\n preConcat(other) {\n this.preTransform(other.mValues);\n return true;\n }\n postTranslate(dx, dy) {\n this.postTransform(Matrix.getTranslate(dx, dy));\n return true;\n }\n postScale(sx, sy, px, py) {\n this.postTransform(Matrix.getScale(sx, sy, px, py));\n return true;\n }\n postRotate(degrees, px, py) {\n this.postTransform(Matrix.getRotate_3(degrees, px, py));\n return true;\n }\n postSkew(kx, ky, px, py) {\n this.postTransform(Matrix.getSkew(kx, ky, px, py));\n return true;\n }\n postConcat(other) {\n this.postTransform(other.mValues);\n return true;\n }\n setRectToRect(src, dst, stf) {\n if (dst == null || src == null) {\n throw Error(`new NullPointerException()`);\n }\n let d = this;\n if (src.isEmpty()) {\n Matrix.reset(d.mValues);\n return false;\n }\n if (dst.isEmpty()) {\n d.mValues[0] = d.mValues[1] = d.mValues[2] = d.mValues[3] = d.mValues[4] = d.mValues[5] = d.mValues[6] = d.mValues[7] = 0;\n d.mValues[8] = 1;\n }\n else {\n let tx, sx = dst.width() / src.width();\n let ty, sy = dst.height() / src.height();\n let xLarger = false;\n if (stf != Matrix.ScaleToFit.FILL) {\n if (sx > sy) {\n xLarger = true;\n sx = sy;\n }\n else {\n sy = sx;\n }\n }\n tx = dst.left - src.left * sx;\n ty = dst.top - src.top * sy;\n if (stf == Matrix.ScaleToFit.CENTER || stf == Matrix.ScaleToFit.END) {\n let diff;\n if (xLarger) {\n diff = dst.width() - src.width() * sy;\n }\n else {\n diff = dst.height() - src.height() * sy;\n }\n if (stf == Matrix.ScaleToFit.CENTER) {\n diff = diff / 2;\n }\n if (xLarger) {\n tx += diff;\n }\n else {\n ty += diff;\n }\n }\n d.mValues[0] = sx;\n d.mValues[4] = sy;\n d.mValues[2] = tx;\n d.mValues[5] = ty;\n d.mValues[1] = d.mValues[3] = d.mValues[6] = d.mValues[7] = 0;\n }\n d.mValues[8] = 1;\n return true;\n }\n static checkPointArrays(src, srcIndex, dst, dstIndex, pointCount) {\n let srcStop = srcIndex + (pointCount << 1);\n let dstStop = dstIndex + (pointCount << 1);\n if ((pointCount | srcIndex | dstIndex | srcStop | dstStop) < 0 || srcStop > src.length || dstStop > dst.length) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n }\n mapPoints(dst, dstIndex = 0, src = dst, srcIndex = 0, pointCount = dst.length >> 1) {\n Matrix.checkPointArrays(src, srcIndex, dst, dstIndex, pointCount);\n const count = pointCount * 2;\n let tmpDest = dst;\n let inPlace = dst == src;\n if (inPlace) {\n tmpDest = androidui.util.ArrayCreator.newNumberArray(dstIndex + count);\n }\n for (let i = 0; i < count; i += 2) {\n let x = this.mValues[0] * src[i + srcIndex] + this.mValues[1] * src[i + srcIndex + 1] + this.mValues[2];\n let y = this.mValues[3] * src[i + srcIndex] + this.mValues[4] * src[i + srcIndex + 1] + this.mValues[5];\n tmpDest[i + dstIndex] = x;\n tmpDest[i + dstIndex + 1] = y;\n }\n if (inPlace) {\n System.arraycopy(tmpDest, dstIndex, dst, dstIndex, count);\n }\n }\n mapVectors(dst, dstIndex = 0, src = dst, srcIndex = 0, ptCount = dst.length >> 1) {\n Matrix.checkPointArrays(src, srcIndex, dst, dstIndex, ptCount);\n if (this.hasPerspective()) {\n let origin = [0., 0.];\n this.mapPoints(origin);\n this.mapPoints(dst, dstIndex, src, srcIndex, ptCount);\n const count = ptCount * 2;\n for (let i = 0; i < count; i += 2) {\n dst[dstIndex + i] = dst[dstIndex + i] - origin[0];\n dst[dstIndex + i + 1] = dst[dstIndex + i + 1] - origin[1];\n }\n }\n else {\n let copy = new Matrix(this.mValues);\n Matrix.setTranslate(copy.mValues, 0, 0);\n copy.mapPoints(dst, dstIndex, src, srcIndex, ptCount);\n }\n }\n mapRect(dst, src = dst) {\n if (dst == null || src == null) {\n throw Error(`new NullPointerException()`);\n }\n let corners = [src.left, src.top, src.right, src.top, src.right, src.bottom, src.left, src.bottom];\n this.mapPoints(corners);\n dst.left = Math.min(Math.min(corners[0], corners[2]), Math.min(corners[4], corners[6]));\n dst.right = Math.max(Math.max(corners[0], corners[2]), Math.max(corners[4], corners[6]));\n dst.top = Math.min(Math.min(corners[1], corners[3]), Math.min(corners[5], corners[7]));\n dst.bottom = Math.max(Math.max(corners[1], corners[3]), Math.max(corners[5], corners[7]));\n return (this.computeTypeMask() & Matrix.kRectStaysRect_Mask) != 0;\n }\n mapRadius(radius) {\n let src = [radius, 0., 0., radius];\n this.mapVectors(src, 0, src, 0, 2);\n let l1 = Matrix.getPointLength(src, 0);\n let l2 = Matrix.getPointLength(src, 2);\n return Math.sqrt(l1 * l2);\n }\n getValues(values) {\n if (values.length < 9) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n System.arraycopy(this.mValues, 0, values, 0, Matrix.MATRIX_SIZE);\n }\n setValues(values) {\n if (values.length < 9) {\n throw Error(`new ArrayIndexOutOfBoundsException()`);\n }\n System.arraycopy(values, 0, this.mValues, 0, Matrix.MATRIX_SIZE);\n }\n toString() {\n let sb = new StringBuilder(64);\n sb.append(\"Matrix{\");\n this.toShortString(sb);\n sb.append('}');\n return sb.toString();\n }\n toShortString(sb) {\n let values = androidui.util.ArrayCreator.newNumberArray(9);\n this.getValues(values);\n sb.append('[');\n sb.append(values[0]);\n sb.append(\", \");\n sb.append(values[1]);\n sb.append(\", \");\n sb.append(values[2]);\n sb.append(\"][\");\n sb.append(values[3]);\n sb.append(\", \");\n sb.append(values[4]);\n sb.append(\", \");\n sb.append(values[5]);\n sb.append(\"][\");\n sb.append(values[6]);\n sb.append(\", \");\n sb.append(values[7]);\n sb.append(\", \");\n sb.append(values[8]);\n sb.append(']');\n }\n postTransform(matrix) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n Matrix.multiply(tmp, this.mValues, matrix);\n this.mValues = tmp;\n }\n preTransform(matrix) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n Matrix.multiply(tmp, matrix, this.mValues);\n this.mValues = tmp;\n }\n static getPointLength(src, index) {\n return Math.sqrt(src[index] * src[index] + src[index + 1] * src[index + 1]);\n }\n static multiply(dest, a, b) {\n dest[0] = b[0] * a[0] + b[1] * a[3] + b[2] * a[6];\n dest[1] = b[0] * a[1] + b[1] * a[4] + b[2] * a[7];\n dest[2] = b[0] * a[2] + b[1] * a[5] + b[2] * a[8];\n dest[3] = b[3] * a[0] + b[4] * a[3] + b[5] * a[6];\n dest[4] = b[3] * a[1] + b[4] * a[4] + b[5] * a[7];\n dest[5] = b[3] * a[2] + b[4] * a[5] + b[5] * a[8];\n dest[6] = b[6] * a[0] + b[7] * a[3] + b[8] * a[6];\n dest[7] = b[6] * a[1] + b[7] * a[4] + b[8] * a[7];\n dest[8] = b[6] * a[2] + b[7] * a[5] + b[8] * a[8];\n }\n static getTranslate(dx, dy) {\n return this.setTranslate(androidui.util.ArrayCreator.newNumberArray(9), dx, dy);\n }\n static setTranslate(dest, dx, dy) {\n dest[0] = 1;\n dest[1] = 0;\n dest[2] = dx;\n dest[3] = 0;\n dest[4] = 1;\n dest[5] = dy;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = 1;\n return dest;\n }\n static getScale(sx, sy, px, py) {\n if (px == null || py == null) {\n return [sx, 0, 0, 0, sy, 0, 0, 0, 1];\n }\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n Matrix.multiply(tmp2, tmp, Matrix.getScale(sx, sy));\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static getRotate_1(degrees) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n return Matrix.getRotate_2(sin, cos);\n }\n static getRotate_2(sin, cos) {\n return this.setRotate_2(androidui.util.ArrayCreator.newNumberArray(9), sin, cos);\n }\n static setRotate_1(dest, degrees) {\n let rad = Math_toRadians(degrees);\n let sin = Math.sin(rad);\n let cos = Math.cos(rad);\n return Matrix.setRotate_2(dest, sin, cos);\n }\n static setRotate_2(dest, sin, cos) {\n dest[0] = cos;\n dest[1] = -sin;\n dest[2] = 0;\n dest[3] = sin;\n dest[4] = cos;\n dest[5] = 0;\n dest[6] = 0;\n dest[7] = 0;\n dest[8] = 1;\n return dest;\n }\n static getRotate_3(degrees, px, py) {\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n let rad = Math_toRadians(degrees);\n let cos = Math.cos(rad);\n let sin = Math.sin(rad);\n Matrix.multiply(tmp2, tmp, Matrix.getRotate_2(sin, cos));\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static getSkew(kx, ky, px, py) {\n if (px == null || py == null) {\n return [1, kx, 0, ky, 1, 0, 0, 0, 1];\n }\n let tmp = androidui.util.ArrayCreator.newNumberArray(9);\n let tmp2 = androidui.util.ArrayCreator.newNumberArray(9);\n this.setTranslate(tmp, -px, -py);\n Matrix.multiply(tmp2, tmp, [1, kx, 0, ky, 1, 0, 0, 0, 1]);\n Matrix.multiply(tmp, tmp2, Matrix.getTranslate(px, py));\n return tmp;\n }\n static reset(mtx) {\n mtx[0] = 1;\n mtx[1] = 0;\n mtx[2] = 0;\n mtx[3] = 0;\n mtx[4] = 1;\n mtx[5] = 0;\n mtx[6] = 0;\n mtx[7] = 0;\n mtx[8] = 1;\n }\n computeTypeMask() {\n let mask = 0;\n if (this.mValues[6] != 0. || this.mValues[7] != 0. || this.mValues[8] != 1.) {\n mask |= Matrix.kPerspective_Mask;\n }\n if (this.mValues[2] != 0. || this.mValues[5] != 0.) {\n mask |= Matrix.kTranslate_Mask;\n }\n let m00 = this.mValues[0];\n let m01 = this.mValues[1];\n let m10 = this.mValues[3];\n let m11 = this.mValues[4];\n if (m01 != 0. || m10 != 0.) {\n mask |= Matrix.kAffine_Mask;\n }\n if (m00 != 1. || m11 != 1.) {\n mask |= Matrix.kScale_Mask;\n }\n if ((mask & Matrix.kPerspective_Mask) == 0) {\n let im00 = m00 != 0 ? 1 : 0;\n let im01 = m01 != 0 ? 1 : 0;\n let im10 = m10 != 0 ? 1 : 0;\n let im11 = m11 != 0 ? 1 : 0;\n let dp0 = (im00 | im11) ^ 1;\n let dp1 = im00 & im11;\n let ds0 = (im01 | im10) ^ 1;\n let ds1 = im01 & im10;\n mask |= ((dp0 & ds1) | (dp1 & ds0)) << Matrix.kRectStaysRect_Shift;\n }\n return mask;\n }\n }\n Matrix.MSCALE_X = 0;\n Matrix.MSKEW_X = 1;\n Matrix.MTRANS_X = 2;\n Matrix.MSKEW_Y = 3;\n Matrix.MSCALE_Y = 4;\n Matrix.MTRANS_Y = 5;\n Matrix.MPERSP_0 = 6;\n Matrix.MPERSP_1 = 7;\n Matrix.MPERSP_2 = 8;\n Matrix.MATRIX_SIZE = 9;\n Matrix.IDENTITY_MATRIX = (() => {\n class _Inner extends Matrix {\n oops() {\n throw Error(`new IllegalStateException(\"Matrix can not be modified\")`);\n }\n set(src) {\n this.oops();\n }\n reset() {\n this.oops();\n }\n setTranslate(dx, dy) {\n this.oops();\n }\n setScale(sx, sy, px, py) {\n this.oops();\n }\n setRotate(degrees, px, py) {\n this.oops();\n }\n setSinCos(sinValue, cosValue, px, py) {\n this.oops();\n }\n setSkew(kx, ky, px, py) {\n this.oops();\n }\n setConcat(a, b) {\n this.oops();\n return false;\n }\n preTranslate(dx, dy) {\n this.oops();\n return false;\n }\n preScale(sx, sy, px, py) {\n this.oops();\n return false;\n }\n preRotate(degrees, px, py) {\n this.oops();\n return false;\n }\n preSkew(kx, ky, px, py) {\n this.oops();\n return false;\n }\n preConcat(other) {\n this.oops();\n return false;\n }\n postTranslate(dx, dy) {\n this.oops();\n return false;\n }\n postScale(sx, sy, px, py) {\n this.oops();\n return false;\n }\n postRotate(degrees, px, py) {\n this.oops();\n return false;\n }\n postSkew(kx, ky, px, py) {\n this.oops();\n return false;\n }\n postConcat(other) {\n this.oops();\n return false;\n }\n setRectToRect(src, dst, stf) {\n this.oops();\n return false;\n }\n setPolyToPoly(src, srcIndex, dst, dstIndex, pointCount) {\n this.oops();\n return false;\n }\n setValues(values) {\n this.oops();\n }\n }\n return new _Inner();\n })();\n Matrix.kIdentity_Mask = 0;\n Matrix.kTranslate_Mask = 0x01;\n Matrix.kScale_Mask = 0x02;\n Matrix.kAffine_Mask = 0x04;\n Matrix.kPerspective_Mask = 0x08;\n Matrix.kRectStaysRect_Mask = 0x10;\n Matrix.kUnknown_Mask = 0x80;\n Matrix.kAllMasks = Matrix.kTranslate_Mask | Matrix.kScale_Mask | Matrix.kAffine_Mask | Matrix.kPerspective_Mask | Matrix.kRectStaysRect_Mask;\n Matrix.kTranslate_Shift = 0;\n Matrix.kScale_Shift = 1;\n Matrix.kAffine_Shift = 2;\n Matrix.kPerspective_Shift = 3;\n Matrix.kRectStaysRect_Shift = 4;\n graphics.Matrix = Matrix;\n (function (Matrix) {\n var ScaleToFit;\n (function (ScaleToFit) {\n ScaleToFit[ScaleToFit[\"FILL\"] = 0] = \"FILL\";\n ScaleToFit[ScaleToFit[\"START\"] = 1] = \"START\";\n ScaleToFit[ScaleToFit[\"CENTER\"] = 2] = \"CENTER\";\n ScaleToFit[ScaleToFit[\"END\"] = 3] = \"END\";\n })(ScaleToFit = Matrix.ScaleToFit || (Matrix.ScaleToFit = {}));\n })(Matrix = graphics.Matrix || (graphics.Matrix = {}));\n function Math_toRadians(angdeg) {\n return angdeg / 180.0 * Math.PI;\n }\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image) {\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n class NetImage {\n constructor(src, overrideImageRatio) {\n this.mImageWidth = 0;\n this.mImageHeight = 0;\n this.mOnLoads = new Set();\n this.mOnErrors = new Set();\n this.mImageLoaded = false;\n this.init(src);\n this.mOverrideImageRatio = overrideImageRatio;\n }\n init(src) {\n this.createImage();\n this.src = src;\n }\n createImage() {\n this.browserImage = new Image();\n }\n loadImage() {\n this.browserImage.src = this.mSrc;\n this.browserImage.onload = () => {\n this.mImageWidth = this.browserImage.width;\n this.mImageHeight = this.browserImage.height;\n this.fireOnLoad();\n };\n this.browserImage.onerror = () => {\n this.mImageWidth = this.mImageHeight = 0;\n this.fireOnError();\n };\n }\n get src() {\n return this.mSrc;\n }\n set src(value) {\n value = convertToAbsUrl(value);\n if (value !== this.mSrc) {\n this.mSrc = value;\n this.loadImage();\n }\n }\n get width() {\n return this.mImageWidth;\n }\n get height() {\n return this.mImageHeight;\n }\n getImageRatio() {\n if (this.mOverrideImageRatio)\n return this.mOverrideImageRatio;\n let url = this.src;\n if (!url)\n return 1;\n if (url.startsWith('data:'))\n return 1;\n const match = url.match(/@(\\d)x(\\.9)?\\.\\w*$/);\n if (match) {\n return parseInt(match[1]);\n }\n return 1;\n }\n isImageLoaded() {\n return this.mImageLoaded;\n }\n fireOnLoad() {\n this.mImageLoaded = true;\n for (let load of [...this.mOnLoads]) {\n load();\n }\n }\n fireOnError() {\n this.mImageLoaded = false;\n for (let error of [...this.mOnErrors]) {\n error();\n }\n }\n addLoadListener(onload, onerror) {\n if (onload) {\n this.mOnLoads.add(onload);\n }\n if (onerror) {\n this.mOnErrors.add(onerror);\n }\n }\n removeLoadListener(onload, onerror) {\n if (onload) {\n this.mOnLoads.delete(onload);\n }\n if (onerror) {\n this.mOnErrors.delete(onerror);\n }\n }\n recycle() {\n }\n getBorderPixels(callBack) {\n if (!callBack)\n return;\n let mTmpRect = new Rect();\n mTmpRect.set(0, 1, 1, this.height - 1);\n this.getPixels(mTmpRect, (leftBorder) => {\n mTmpRect.set(1, 0, this.width - 1, 1);\n this.getPixels(mTmpRect, (topBorder) => {\n mTmpRect.set(this.width - 1, 1, this.width, this.height - 1);\n this.getPixels(mTmpRect, (rightBorder) => {\n mTmpRect.set(1, this.height - 1, this.width - 1, this.height);\n this.getPixels(mTmpRect, (bottomBorder) => {\n callBack(leftBorder, topBorder, rightBorder, bottomBorder);\n });\n });\n });\n });\n }\n getPixels(bound, callBack) {\n if (!callBack)\n return;\n let canvasEle = document.createElement('canvas');\n if (!bound)\n bound = new Rect(0, 0, this.width, this.height);\n if (bound.isEmpty()) {\n callBack([]);\n return;\n }\n let w = bound.width();\n let h = bound.height();\n canvasEle.width = w;\n canvasEle.height = h;\n let canvas = canvasEle.getContext('2d');\n canvas.drawImage(this.browserImage, bound.left, bound.top, w, h, 0, 0, w, h);\n let data = canvas.getImageData(0, 0, w, h).data;\n let colorData = [];\n for (let i = 0; i < data.length; i += 4) {\n colorData.push(Color.rgba(data[i], data[i + 1], data[i + 2], data[i + 3]));\n }\n callBack(colorData);\n canvasEle.width = 0;\n canvasEle.height = 0;\n }\n }\n image.NetImage = NetImage;\n let convertA = document.createElement('a');\n function convertToAbsUrl(url) {\n convertA.href = url;\n return convertA.href;\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var Pools = android.util.Pools;\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n class Canvas {\n constructor(width, height) {\n this.mWidth = 0;\n this.mHeight = 0;\n this._saveCount = 0;\n this.mClipStateMap = new Map();\n this.mWidth = width;\n this.mHeight = height;\n this.mCurrentClip = Canvas.obtainRect();\n this.mCurrentClip.set(0, 0, this.mWidth, this.mHeight);\n this.initCanvasImpl();\n }\n static obtainRect(copy) {\n let rect = Canvas.sRectPool.acquire();\n if (!rect)\n rect = new Rect();\n if (copy)\n rect.set(copy);\n return rect;\n }\n static recycleRect(rect) {\n rect.setEmpty();\n Canvas.sRectPool.release(rect);\n }\n initCanvasImpl() {\n this.mCanvasElement = document.createElement(\"canvas\");\n this.mCanvasElement.width = this.mWidth;\n this.mCanvasElement.height = this.mHeight;\n this._mCanvasContent = this.mCanvasElement.getContext(\"2d\");\n this.save();\n }\n recycle() {\n Canvas.recycleRect(this.mCurrentClip);\n for (let rect of this.mClipStateMap.values()) {\n Canvas.recycleRect(rect);\n }\n this.recycleImpl();\n }\n recycleImpl() {\n if (this.mCanvasElement)\n this.mCanvasElement.width = this.mCanvasElement.height = 0;\n }\n getHeight() {\n return this.mHeight;\n }\n getWidth() {\n return this.mWidth;\n }\n isNativeAccelerated() {\n return false;\n }\n translate(dx, dy) {\n if (dx == 0 && dy == 0)\n return;\n if (this.mCurrentClip)\n this.mCurrentClip.offset(-dx, -dy);\n this.translateImpl(dx, dy);\n }\n translateImpl(dx, dy) {\n this._mCanvasContent.translate(dx, dy);\n }\n scale(sx, sy, px, py) {\n if (px || py)\n this.translate(px, py);\n this.scaleImpl(sx, sy);\n if (px || py)\n this.translate(-px, -py);\n }\n scaleImpl(sx, sy) {\n this._mCanvasContent.scale(sx, sy);\n }\n rotate(degrees, px, py) {\n if (px || py)\n this.translate(px, py);\n this.rotateImpl(degrees);\n if (px || py)\n this.translate(-px, -py);\n }\n rotateImpl(degrees) {\n this._mCanvasContent.rotate(degrees * Math.PI / 180);\n }\n concat(m) {\n let v = Canvas.TempMatrixValue;\n m.getValues(v);\n this.concatImpl(v[graphics.Matrix.MSCALE_X], v[graphics.Matrix.MSKEW_X], v[graphics.Matrix.MTRANS_X], v[graphics.Matrix.MSKEW_Y], v[graphics.Matrix.MSCALE_Y], v[graphics.Matrix.MTRANS_Y], v[graphics.Matrix.MPERSP_0], v[graphics.Matrix.MPERSP_1], v[graphics.Matrix.MPERSP_2]);\n }\n concatImpl(MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y, MPERSP_0, MPERSP_1, MPERSP_2) {\n this._mCanvasContent.transform(MSCALE_X, -MSKEW_X, -MSKEW_Y, MSCALE_Y, MTRANS_X, MTRANS_Y);\n }\n drawRGB(r, g, b) {\n this.drawARGB(255, r, g, b);\n }\n drawARGB(a, r, g, b) {\n this.drawARGBImpl(a, r, g, b);\n }\n drawColor(color) {\n this.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));\n }\n drawARGBImpl(a, r, g, b) {\n let preStyle = this._mCanvasContent.fillStyle;\n this._mCanvasContent.fillStyle = `rgba(${r},${g},${b},${a / 255})`;\n this._mCanvasContent.fillRect(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n this._mCanvasContent.fillStyle = preStyle;\n }\n clearColor() {\n this.clearColorImpl();\n }\n clearColorImpl() {\n this._mCanvasContent.clearRect(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n }\n save() {\n this.saveImpl();\n if (this.mCurrentClip)\n this.mClipStateMap.set(this._saveCount, Canvas.obtainRect(this.mCurrentClip));\n this._saveCount++;\n return this._saveCount;\n }\n saveImpl() {\n this._mCanvasContent.save();\n }\n restore() {\n this._saveCount--;\n this.restoreImpl();\n let savedClip = this.mClipStateMap.get(this._saveCount);\n if (savedClip) {\n this.mClipStateMap.delete(this._saveCount);\n this.mCurrentClip.set(savedClip);\n Canvas.recycleRect(savedClip);\n }\n }\n restoreImpl() {\n this._mCanvasContent.restore();\n }\n restoreToCount(saveCount) {\n if (saveCount <= 0)\n throw Error('saveCount can\\'t <= 0');\n while (saveCount <= this._saveCount) {\n this.restore();\n }\n }\n getSaveCount() {\n return this._saveCount;\n }\n clipRect(...args) {\n let rect = Canvas.obtainRect();\n if (args.length === 1) {\n rect.set(args[0]);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n rect.set(left, t, right, bottom);\n }\n if (args.length === 4 || (!args[4] && !args[5] && !args[6] && !args[7])) {\n this.clipRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()));\n }\n else if (args.length === 8 && (args[4] != 0 || args[5] != 0 || args[6] != 0 || args[7] != 0)) {\n this.clipRoundRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()), args[4], args[5], args[6], args[7]);\n }\n this.mCurrentClip.intersect(rect);\n let r = rect.isEmpty();\n Canvas.recycleRect(rect);\n return r;\n }\n clipRectImpl(left, top, width, height) {\n this._mCanvasContent.beginPath();\n this._mCanvasContent.rect(left, top, width, height);\n this._mCanvasContent.clip();\n }\n clipRoundRect(r, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n let rect = Canvas.obtainRect(r);\n this.clipRoundRectImpl(Math.floor(rect.left), Math.floor(rect.top), Math.ceil(rect.width()), Math.ceil(rect.height()), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this.mCurrentClip.intersect(rect);\n let empty = rect.isEmpty();\n Canvas.recycleRect(rect);\n return empty;\n }\n clipRoundRectImpl(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n this.doRoundRectPath(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this._mCanvasContent.clip();\n }\n doRoundRectPath(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n let scale1 = height / (radiusTopLeft + radiusBottomLeft);\n let scale2 = height / (radiusTopRight + radiusBottomRight);\n let scale3 = width / (radiusTopLeft + radiusTopRight);\n let scale4 = width / (radiusBottomLeft + radiusBottomRight);\n let scale = Math.min(scale1, scale2, scale3, scale4);\n if (scale < 1) {\n radiusTopLeft *= scale;\n radiusTopRight *= scale;\n radiusBottomRight *= scale;\n radiusBottomLeft *= scale;\n }\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n ctx.moveTo(left + radiusTopLeft, top);\n ctx.arcTo(left + width, top, left + width, top + radiusTopRight, radiusTopRight);\n ctx.arcTo(left + width, top + height, left + width - radiusBottomRight, top + height, radiusBottomRight);\n ctx.arcTo(left, top + height, left, top + height - radiusBottomLeft, radiusBottomLeft);\n ctx.arcTo(left, top, left + radiusTopLeft, top, radiusTopLeft);\n ctx.closePath();\n }\n getClipBounds(bounds) {\n if (!this.mCurrentClip)\n this.mCurrentClip = Canvas.obtainRect();\n let rect = bounds || Canvas.obtainRect();\n rect.set(this.mCurrentClip);\n return rect;\n }\n quickReject(...args) {\n if (!this.mCurrentClip)\n return false;\n if (args.length == 1) {\n return !this.mCurrentClip.intersects(args[0]);\n }\n else {\n let [left = 0, t = 0, right = 0, bottom = 0] = args;\n return !this.mCurrentClip.intersects(left, t, right, bottom);\n }\n }\n drawCanvas(canvas, offsetX = 0, offsetY = 0) {\n this.drawCanvasImpl(canvas, offsetX, offsetY);\n }\n drawCanvasImpl(canvas, offsetX, offsetY) {\n this._mCanvasContent.drawImage(canvas.mCanvasElement, offsetX, offsetY);\n }\n drawImage(image, srcRect, dstRect, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n this.drawImageImpl(image, srcRect, dstRect);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawImageImpl(image, srcRect, dstRect) {\n if (!dstRect) {\n if (!srcRect) {\n this._mCanvasContent.drawImage(image.browserImage, 0, 0);\n }\n else {\n this._mCanvasContent.drawImage(image.browserImage, srcRect.left, srcRect.top, srcRect.width(), srcRect.height(), 0, 0, srcRect.width(), srcRect.height());\n }\n }\n else {\n if (dstRect.isEmpty())\n return;\n if (!srcRect) {\n this._mCanvasContent.drawImage(image.browserImage, dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\n }\n else {\n this._mCanvasContent.drawImage(image.browserImage, srcRect.left, srcRect.top, srcRect.width(), srcRect.height(), dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\n }\n }\n }\n drawRect(...args) {\n if (args.length == 2) {\n let rect = args[0];\n this.drawRect(rect.left, rect.top, rect.right, rect.bottom, args[1]);\n }\n else {\n let [left, top, right, bottom, paint] = args;\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawRectImpl(left, top, right - left, bottom - top, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n }\n drawRectImpl(left, top, width, height, style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.strokeRect(left, top, width, height);\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.fillRect(left, top, width, height);\n this._mCanvasContent.strokeRect(left, top, width, height);\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fillRect(left, top, width, height);\n break;\n }\n }\n applyFillOrStrokeToContent(style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.stroke();\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.fill();\n this._mCanvasContent.stroke();\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fill();\n break;\n }\n }\n drawOval(oval, paint) {\n if (oval == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawOvalImpl(oval, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawOvalImpl(oval, style) {\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n let cx = oval.centerX();\n let cy = oval.centerY();\n let rx = oval.width() / 2;\n let ry = oval.height() / 2;\n ctx.save();\n ctx.translate(cx - rx, cy - ry);\n ctx.scale(rx, ry);\n ctx.arc(1, 1, 1, 0, 2 * Math.PI, false);\n ctx.restore();\n this.applyFillOrStrokeToContent(style);\n }\n drawCircle(cx, cy, radius, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawCircleImpl(cx, cy, radius, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawCircleImpl(cx, cy, radius, style) {\n let ctx = this._mCanvasContent;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, 2 * Math.PI, false);\n this.applyFillOrStrokeToContent(style);\n }\n drawArc(oval, startAngle, sweepAngle, useCenter, paint) {\n if (oval == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawArcImpl(oval, startAngle, sweepAngle, useCenter, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n let ctx = this._mCanvasContent;\n ctx.save();\n ctx.beginPath();\n let cx = oval.centerX();\n let cy = oval.centerY();\n let rx = oval.width() / 2;\n let ry = oval.height() / 2;\n ctx.translate(cx - rx, cy - ry);\n ctx.scale(rx, ry);\n ctx.arc(1, 1, 1, startAngle / 180 * Math.PI, (sweepAngle + startAngle) / 180 * Math.PI, false);\n if (useCenter) {\n ctx.lineTo(1, 1);\n ctx.closePath();\n }\n ctx.restore();\n this.applyFillOrStrokeToContent(style);\n }\n drawRoundRect(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, paint) {\n if (rect == null) {\n throw Error(`new NullPointerException()`);\n }\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n let style = paint ? paint.getStyle() : graphics.Paint.Style.FILL;\n this.drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n this.doRoundRectPath(rect.left, rect.top, rect.width(), rect.height(), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n this.applyFillOrStrokeToContent(style);\n }\n drawPath(path, paint) {\n }\n drawText_count(text, index, count, x, y, paint) {\n if ((index | count | (index + count) | (text.length - index - count)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n this.drawText(text.substr(index, count), x, y, paint);\n }\n drawText_end(text, start, end, x, y, paint) {\n if ((start | end | (end - start) | (text.length - end)) < 0) {\n throw Error(`new IndexOutOfBoundsException()`);\n }\n this.drawText(text.substring(start, end), x, y, paint);\n }\n drawText(text, x, y, paint) {\n let paintEmpty = !paint || paint.isEmpty();\n if (!paintEmpty) {\n this.saveImpl();\n paint.applyToCanvas(this);\n }\n this.drawTextImpl(text, x, y, paint ? paint.getStyle() : null);\n if (!paintEmpty)\n this.restoreImpl();\n }\n drawTextImpl(text, x, y, style) {\n switch (style) {\n case graphics.Paint.Style.STROKE:\n this._mCanvasContent.strokeText(text, x, y);\n break;\n case graphics.Paint.Style.FILL_AND_STROKE:\n this._mCanvasContent.strokeText(text, x, y);\n this._mCanvasContent.fillText(text, x, y);\n break;\n case graphics.Paint.Style.FILL:\n default:\n this._mCanvasContent.fillText(text, x, y);\n break;\n }\n }\n drawTextRun_count(text, index, count, contextIndex, contextCount, x, y, dir, paint) {\n this.drawText_count(text, index, count, x, y, paint);\n }\n drawTextRun_end(text, start, end, contextStart, contextEnd, x, y, dir, paint) {\n this.drawText_end(text, start, end, x, y, paint);\n }\n static measureText(text, textSize) {\n if (textSize == null || textSize === 0)\n return 0;\n return Canvas.measureTextImpl(text, textSize);\n }\n static measureTextImpl(text, textSize) {\n let width = 0;\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.charCodeAt(i);\n let cWidth = Canvas._measureCacheMap.get(c);\n if (cWidth == null) {\n cWidth = Canvas._measureTextContext.measureText(text[i]).width;\n Canvas._measureCacheMap.set(c, cWidth);\n }\n width += (cWidth * textSize / Canvas._measureCacheTextSize);\n }\n return width;\n }\n static getMeasureTextFontFamily() {\n let fontParts = Canvas._measureTextContext.font.split(' ');\n return fontParts[fontParts.length - 1];\n }\n setColor(color, style) {\n if (color != null) {\n this.setColorImpl(color, style);\n }\n }\n setColorImpl(color, style) {\n let colorS = Color.toRGBAFunc(color);\n switch (style) {\n case graphics.Paint.Style.STROKE:\n if (Color.parseColor(this._mCanvasContent.strokeStyle + '', 0) != color) {\n this._mCanvasContent.strokeStyle = colorS;\n }\n break;\n case graphics.Paint.Style.FILL:\n if (Color.parseColor(this._mCanvasContent.fillStyle + '', 0) != color) {\n this._mCanvasContent.fillStyle = colorS;\n }\n break;\n default:\n case graphics.Paint.Style.FILL_AND_STROKE:\n if (Color.parseColor(this._mCanvasContent.fillStyle + '', 0) != color) {\n this._mCanvasContent.fillStyle = colorS;\n }\n if (Color.parseColor(this._mCanvasContent.strokeStyle + '', 0) != color) {\n this._mCanvasContent.strokeStyle = colorS;\n }\n break;\n }\n }\n multiplyGlobalAlpha(alpha) {\n if (typeof alpha === 'number' && alpha < 1) {\n this.multiplyGlobalAlphaImpl(alpha);\n }\n }\n multiplyGlobalAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha *= alpha;\n }\n setGlobalAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.setGlobalAlphaImpl(alpha);\n }\n }\n setGlobalAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha = alpha;\n }\n setTextAlign(align) {\n if (align != null)\n this.setTextAlignImpl(align);\n }\n setTextAlignImpl(align) {\n this._mCanvasContent.textAlign = align;\n }\n setLineWidth(width) {\n if (width != null)\n this.setLineWidthImpl(width);\n }\n setLineWidthImpl(width) {\n this._mCanvasContent.lineWidth = width;\n }\n setLineCap(lineCap) {\n if (lineCap != null)\n this.setLineCapImpl(lineCap);\n }\n setLineCapImpl(lineCap) {\n this._mCanvasContent.lineCap = lineCap;\n }\n setLineJoin(lineJoin) {\n if (lineJoin != null)\n this.setLineJoinImpl(lineJoin);\n }\n setLineJoinImpl(lineJoin) {\n this._mCanvasContent.lineJoin = lineJoin;\n }\n setShadow(radius, dx, dy, color) {\n if (radius > 0) {\n this.setShadowImpl(radius, dx, dy, color);\n }\n }\n setShadowImpl(radius, dx, dy, color) {\n this._mCanvasContent.shadowBlur = radius;\n this._mCanvasContent.shadowOffsetX = dx;\n this._mCanvasContent.shadowOffsetY = dy;\n this._mCanvasContent.shadowColor = Color.toRGBAFunc(color);\n }\n setFontSize(size) {\n if (size != null) {\n this.setFontSizeImpl(size);\n }\n }\n setFontSizeImpl(size) {\n let cFont = this._mCanvasContent.font;\n let fontParts = cFont.split(' ');\n if (Number.parseFloat(fontParts[fontParts.length - 2]) == size)\n return;\n fontParts[fontParts.length - 2] = size + 'px';\n this._mCanvasContent.font = fontParts.join(' ');\n }\n setFont(fontName) {\n if (fontName != null) {\n this.setFontImpl(fontName);\n }\n }\n setFontImpl(fontName) {\n let cFont = this._mCanvasContent.font;\n let fontParts = cFont.split(' ');\n fontParts[fontParts.length - 1] = fontName;\n let font = fontParts.join(' ');\n if (font != cFont)\n this._mCanvasContent.font = font;\n }\n isImageSmoothingEnabled() {\n return this.isImageSmoothingEnabledImpl();\n }\n isImageSmoothingEnabledImpl() {\n return this._mCanvasContent['imageSmoothingEnabled'] || this._mCanvasContent['webkitImageSmoothingEnabled'];\n }\n setImageSmoothingEnabled(enable) {\n this.setImageSmoothingEnabledImpl(enable);\n }\n setImageSmoothingEnabledImpl(enable) {\n if ('imageSmoothingEnabled' in this._mCanvasContent) {\n this._mCanvasContent['imageSmoothingEnabled'] = enable;\n }\n else if ('webkitImageSmoothingEnabled' in this._mCanvasContent) {\n this._mCanvasContent['webkitImageSmoothingEnabled'] = enable;\n }\n }\n }\n Canvas.TempMatrixValue = androidui.util.ArrayCreator.newNumberArray(9);\n Canvas.DIRECTION_LTR = 0;\n Canvas.DIRECTION_RTL = 1;\n Canvas.sRectPool = new Pools.SynchronizedPool(20);\n Canvas._measureTextContext = document.createElement('canvas').getContext('2d');\n Canvas._measureCacheTextSize = 1000;\n Canvas._static = (() => {\n Canvas._measureTextContext.font = Canvas._measureCacheTextSize + 'px ' + Canvas.getMeasureTextFontFamily();\n })();\n Canvas._measureCacheMap = new Map();\n graphics.Canvas = Canvas;\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_1) {\n var Rect = android.graphics.Rect;\n var PixelFormat = android.graphics.PixelFormat;\n var WeakReference = java.lang.ref.WeakReference;\n var StateSet = android.util.StateSet;\n class Drawable {\n constructor() {\n this.mBounds = Drawable.ZERO_BOUNDS_RECT;\n this.mStateSet = StateSet.WILD_CARD;\n this.mLevel = 0;\n this.mVisible = true;\n this.mIgnoreNotifySizeChange = false;\n }\n setBounds(...args) {\n if (args.length === 1) {\n let rect = args[0];\n return this.setBounds(rect.left, rect.top, rect.right, rect.bottom);\n }\n else {\n let [left = 0, top = 0, right = 0, bottom = 0] = args;\n let oldBounds = this.mBounds;\n if (oldBounds == Drawable.ZERO_BOUNDS_RECT) {\n oldBounds = this.mBounds = new Rect();\n }\n if (oldBounds.left != left || oldBounds.top != top ||\n oldBounds.right != right || oldBounds.bottom != bottom) {\n if (!oldBounds.isEmpty()) {\n this.invalidateSelf();\n }\n this.mBounds.set(left, top, right, bottom);\n this.onBoundsChange(this.mBounds);\n }\n }\n }\n copyBounds(bounds = new Rect()) {\n bounds.set(this.mBounds);\n return bounds;\n }\n getBounds() {\n if (this.mBounds == Drawable.ZERO_BOUNDS_RECT) {\n this.mBounds = new Rect();\n }\n return this.mBounds;\n }\n setDither(dither) { }\n setCallback(cb) {\n this.mCallback = new WeakReference(cb);\n }\n getCallback() {\n if (this.mCallback != null) {\n return this.mCallback.get();\n }\n return null;\n }\n setIgnoreNotifySizeChange(isIgnore) {\n this.mIgnoreNotifySizeChange = isIgnore;\n }\n notifySizeChangeSelf() {\n if (this.mIgnoreNotifySizeChange)\n return;\n let callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateSelf() {\n let callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleSelf(what, when) {\n let callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleSelf(what) {\n let callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getAlpha() {\n return 0xFF;\n }\n isStateful() {\n return false;\n }\n setState(stateSet) {\n if (this.mStateSet + '' !== stateSet + '') {\n this.mStateSet = stateSet;\n return this.onStateChange(stateSet);\n }\n return false;\n }\n getState() {\n return this.mStateSet;\n }\n jumpToCurrentState() {\n }\n getCurrent() {\n return this;\n }\n setLevel(level) {\n if (this.mLevel != level) {\n this.mLevel = level;\n return this.onLevelChange(level);\n }\n return false;\n }\n getLevel() {\n return this.mLevel;\n }\n setVisible(visible, restart) {\n let changed = this.mVisible != visible;\n if (changed) {\n this.mVisible = visible;\n this.invalidateSelf();\n }\n return changed;\n }\n isVisible() {\n return this.mVisible;\n }\n setAutoMirrored(mirrored) {\n }\n isAutoMirrored() {\n return false;\n }\n getOpacity() {\n return PixelFormat.TRANSLUCENT;\n }\n static resolveOpacity(op1, op2) {\n if (op1 == op2) {\n return op1;\n }\n if (op1 == PixelFormat.UNKNOWN || op2 == PixelFormat.UNKNOWN) {\n return PixelFormat.UNKNOWN;\n }\n if (op1 == PixelFormat.TRANSLUCENT || op2 == PixelFormat.TRANSLUCENT) {\n return PixelFormat.TRANSLUCENT;\n }\n if (op1 == PixelFormat.TRANSPARENT || op2 == PixelFormat.TRANSPARENT) {\n return PixelFormat.TRANSPARENT;\n }\n return PixelFormat.OPAQUE;\n }\n onStateChange(state) {\n return false;\n }\n onLevelChange(level) {\n return false;\n }\n onBoundsChange(bounds) {\n }\n getIntrinsicWidth() {\n return -1;\n }\n getIntrinsicHeight() {\n return -1;\n }\n getMinimumWidth() {\n let intrinsicWidth = this.getIntrinsicWidth();\n return intrinsicWidth > 0 ? intrinsicWidth : 0;\n }\n getMinimumHeight() {\n let intrinsicHeight = this.getIntrinsicHeight();\n return intrinsicHeight > 0 ? intrinsicHeight : 0;\n }\n getPadding(padding) {\n padding.set(0, 0, 0, 0);\n return false;\n }\n mutate() {\n return this;\n }\n getConstantState() {\n return null;\n }\n static createFromXml(r, parser) {\n let drawable;\n let name = parser.tagName.toLowerCase();\n switch (name) {\n case \"selector\":\n drawable = new drawable_1.StateListDrawable();\n break;\n case \"layer-list\":\n drawable = new drawable_1.LayerDrawable(null);\n break;\n case \"color\":\n drawable = new drawable_1.ColorDrawable();\n break;\n case \"scale\":\n drawable = new drawable_1.ScaleDrawable();\n break;\n case \"clip\":\n drawable = new drawable_1.ClipDrawable();\n break;\n case \"rotate\":\n drawable = new drawable_1.RotateDrawable();\n break;\n case \"animation-list\":\n drawable = new drawable_1.AnimationDrawable();\n break;\n case \"inset\":\n drawable = new drawable_1.InsetDrawable(null, 0);\n break;\n case \"bitmap\":\n let srcAttr = parser.getAttribute('src');\n if (!srcAttr)\n throw Error(\"XmlPullParserException: bitmap tag must have 'src' attribute\");\n drawable = r.getDrawable(srcAttr);\n break;\n default:\n throw Error(\"XmlPullParserException: invalid drawable tag \" + name);\n }\n drawable.inflate(r, parser);\n return drawable;\n }\n inflate(r, parser) {\n this.mVisible = (parser.getAttribute('android:visible') !== 'false');\n }\n }\n Drawable.ZERO_BOUNDS_RECT = new Rect();\n drawable_1.Drawable = Drawable;\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n class ColorDrawable extends drawable.Drawable {\n constructor(color) {\n super();\n this.mMutated = false;\n this.mPaint = new graphics.Paint();\n this.mState = new ColorState();\n if (color !== undefined) {\n this.setColor(color);\n }\n }\n _setStateCopyFrom(state) {\n this.mState = new ColorState(state);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState = new ColorState(this.mState);\n this.mMutated = true;\n }\n return this;\n }\n draw(canvas) {\n if ((this.mState.mUseColor >>> 24) != 0) {\n this.mPaint.setColor(this.mState.mUseColor);\n canvas.drawRect(this.getBounds(), this.mPaint);\n }\n }\n getColor() {\n return this.mState.mUseColor;\n }\n setColor(color) {\n if (this.mState.mBaseColor != color || this.mState.mUseColor != color) {\n this.invalidateSelf();\n this.mState.mBaseColor = this.mState.mUseColor = color;\n }\n }\n getAlpha() {\n return this.mState.mUseColor >>> 24;\n }\n setAlpha(alpha) {\n alpha += alpha >> 7;\n let baseAlpha = this.mState.mBaseColor >>> 24;\n let useAlpha = baseAlpha * alpha >> 8;\n let oldUseColor = this.mState.mUseColor;\n this.mState.mUseColor = (this.mState.mBaseColor << 8 >>> 8) | (useAlpha << 24);\n if (oldUseColor != this.mState.mUseColor) {\n this.invalidateSelf();\n }\n }\n getOpacity() {\n switch (this.mState.mUseColor >>> 24) {\n case 255:\n return graphics.PixelFormat.OPAQUE;\n case 0:\n return graphics.PixelFormat.TRANSPARENT;\n }\n return graphics.PixelFormat.TRANSLUCENT;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let state = this.mState;\n state.mBaseColor = androidui.attr.AttrValueParser.parseColor(r, parser.innerText, state.mBaseColor);\n state.mUseColor = state.mBaseColor;\n }\n getConstantState() {\n return this.mState;\n }\n }\n drawable.ColorDrawable = ColorDrawable;\n class ColorState {\n constructor(state) {\n this.mBaseColor = 0;\n this.mUseColor = 0;\n if (state != null) {\n this.mBaseColor = state.mBaseColor;\n this.mUseColor = state.mUseColor;\n }\n }\n newDrawable() {\n let c = new ColorDrawable();\n c._setStateCopyFrom(this);\n return c;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Drawable = android.graphics.drawable.Drawable;\n class ScrollBarDrawable extends Drawable {\n constructor() {\n super(...arguments);\n this.mRange = 0;\n this.mOffset = 0;\n this.mExtent = 0;\n this.mVertical = false;\n this.mChanged = false;\n this.mRangeChanged = false;\n this.mTempBounds = new graphics.Rect();\n this.mAlwaysDrawHorizontalTrack = false;\n this.mAlwaysDrawVerticalTrack = false;\n }\n setAlwaysDrawHorizontalTrack(alwaysDrawTrack) {\n this.mAlwaysDrawHorizontalTrack = alwaysDrawTrack;\n }\n setAlwaysDrawVerticalTrack(alwaysDrawTrack) {\n this.mAlwaysDrawVerticalTrack = alwaysDrawTrack;\n }\n getAlwaysDrawVerticalTrack() {\n return this.mAlwaysDrawVerticalTrack;\n }\n getAlwaysDrawHorizontalTrack() {\n return this.mAlwaysDrawHorizontalTrack;\n }\n setParameters(range, offset, extent, vertical) {\n if (this.mVertical != vertical) {\n this.mChanged = true;\n }\n if (this.mRange != range || this.mOffset != offset || this.mExtent != extent) {\n this.mRangeChanged = true;\n }\n this.mRange = range;\n this.mOffset = offset;\n this.mExtent = extent;\n this.mVertical = vertical;\n }\n draw(canvas) {\n const vertical = this.mVertical;\n const extent = this.mExtent;\n const range = this.mRange;\n let drawTrack = true;\n let drawThumb = true;\n if (extent <= 0 || range <= extent) {\n drawTrack = vertical ? this.mAlwaysDrawVerticalTrack : this.mAlwaysDrawHorizontalTrack;\n drawThumb = false;\n }\n let r = this.getBounds();\n if (drawTrack) {\n this.drawTrack(canvas, r, vertical);\n }\n if (drawThumb) {\n let size = vertical ? r.height() : r.width();\n let thickness = vertical ? r.width() : r.height();\n let length = Math.round(size * extent / range);\n let offset = Math.round((size - length) * this.mOffset / (range - extent));\n let minLength = thickness * 2;\n if (length < minLength) {\n length = minLength;\n }\n if (offset + length > size) {\n offset = size - length;\n }\n this.drawThumb(canvas, r, offset, length, vertical);\n }\n }\n onBoundsChange(bounds) {\n super.onBoundsChange(bounds);\n this.mChanged = true;\n }\n drawTrack(canvas, bounds, vertical) {\n let track;\n if (vertical) {\n track = this.mVerticalTrack;\n }\n else {\n track = this.mHorizontalTrack;\n }\n if (track != null) {\n if (this.mChanged) {\n track.setBounds(bounds);\n }\n track.draw(canvas);\n }\n }\n drawThumb(canvas, bounds, offset, length, vertical) {\n const thumbRect = this.mTempBounds;\n const changed = this.mRangeChanged || this.mChanged;\n if (changed) {\n if (vertical) {\n thumbRect.set(bounds.left, bounds.top + offset, bounds.right, bounds.top + offset + length);\n }\n else {\n thumbRect.set(bounds.left + offset, bounds.top, bounds.left + offset + length, bounds.bottom);\n }\n }\n if (vertical) {\n const thumb = this.mVerticalThumb;\n if (changed)\n thumb.setBounds(thumbRect);\n thumb.draw(canvas);\n }\n else {\n const thumb = this.mHorizontalThumb;\n if (changed)\n thumb.setBounds(thumbRect);\n thumb.draw(canvas);\n }\n }\n setVerticalThumbDrawable(thumb) {\n if (thumb != null) {\n this.mVerticalThumb = thumb;\n }\n }\n setVerticalTrackDrawable(track) {\n this.mVerticalTrack = track;\n }\n setHorizontalThumbDrawable(thumb) {\n if (thumb != null) {\n this.mHorizontalThumb = thumb;\n }\n }\n setHorizontalTrackDrawable(track) {\n this.mHorizontalTrack = track;\n }\n getSize(vertical) {\n if (vertical) {\n return (this.mVerticalTrack != null ?\n this.mVerticalTrack : this.mVerticalThumb).getIntrinsicWidth();\n }\n else {\n return (this.mHorizontalTrack != null ?\n this.mHorizontalTrack : this.mHorizontalThumb).getIntrinsicHeight();\n }\n }\n setAlpha(alpha) {\n if (this.mVerticalTrack != null) {\n this.mVerticalTrack.setAlpha(alpha);\n }\n this.mVerticalThumb.setAlpha(alpha);\n if (this.mHorizontalTrack != null) {\n this.mHorizontalTrack.setAlpha(alpha);\n }\n this.mHorizontalThumb.setAlpha(alpha);\n }\n getAlpha() {\n return this.mVerticalThumb.getAlpha();\n }\n getOpacity() {\n return graphics.PixelFormat.TRANSLUCENT;\n }\n toString() {\n return \"ScrollBarDrawable: range=\" + this.mRange + \" offset=\" + this.mOffset +\n \" extent=\" + this.mExtent + (this.mVertical ? \" V\" : \" H\");\n }\n }\n drawable.ScrollBarDrawable = ScrollBarDrawable;\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_2) {\n var Integer = java.lang.Integer;\n class InsetDrawable extends drawable_2.Drawable {\n constructor(drawable, insetLeft, insetTop = insetLeft, insetRight = insetTop, insetBottom = insetRight) {\n super();\n this.mTmpRect = new graphics.Rect();\n this.mMutated = false;\n this.mInsetState = new InsetState(null, this);\n this.mInsetState.mDrawable = drawable;\n this.mInsetState.mInsetLeft = insetLeft;\n this.mInsetState.mInsetTop = insetTop;\n this.mInsetState.mInsetRight = insetRight;\n this.mInsetState.mInsetBottom = insetBottom;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n this.mInsetState.mDrawable = null;\n let state = this.mInsetState;\n let a = r.obtainAttributes(parser);\n let dr = a.getDrawable(\"android:drawable\");\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = drawable_2.Drawable.createFromXml(r, parser.children[0]);\n }\n if (!dr) {\n throw Error(\" tag requires a 'drawable' attribute or child tag defining a drawable\");\n }\n let inset = a.getDimensionPixelOffset(\"android:inset\", Integer.MIN_VALUE);\n if (inset != Integer.MIN_VALUE) {\n state.mInsetLeft = inset;\n state.mInsetTop = inset;\n state.mInsetRight = inset;\n state.mInsetBottom = inset;\n }\n state.mInsetLeft = a.getDimensionPixelOffset(\"android:insetLeft\", state.mInsetLeft);\n state.mInsetTop = a.getDimensionPixelOffset(\"android:insetTop\", state.mInsetTop);\n state.mInsetRight = a.getDimensionPixelOffset(\"android:insetRight\", state.mInsetRight);\n state.mInsetBottom = a.getDimensionPixelOffset(\"android:insetBottom\", state.mInsetBottom);\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n this.mInsetState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n let pad = this.mInsetState.mDrawable.getPadding(padding);\n padding.left += this.mInsetState.mInsetLeft;\n padding.right += this.mInsetState.mInsetRight;\n padding.top += this.mInsetState.mInsetTop;\n padding.bottom += this.mInsetState.mInsetBottom;\n if (pad || (this.mInsetState.mInsetLeft | this.mInsetState.mInsetRight |\n this.mInsetState.mInsetTop | this.mInsetState.mInsetBottom) != 0) {\n return true;\n }\n else {\n return false;\n }\n }\n setVisible(visible, restart) {\n this.mInsetState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mInsetState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mInsetState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mInsetState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mInsetState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mInsetState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(bounds) {\n const r = this.mTmpRect;\n r.set(bounds);\n r.left += this.mInsetState.mInsetLeft;\n r.top += this.mInsetState.mInsetTop;\n r.right -= this.mInsetState.mInsetRight;\n r.bottom -= this.mInsetState.mInsetBottom;\n this.mInsetState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n getIntrinsicWidth() {\n return this.mInsetState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mInsetState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mInsetState.canConstantState()) {\n return this.mInsetState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mInsetState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mInsetState.mDrawable;\n }\n }\n drawable_2.InsetDrawable = InsetDrawable;\n class InsetState {\n constructor(orig, owner) {\n this.mInsetLeft = 0;\n this.mInsetTop = 0;\n this.mInsetRight = 0;\n this.mInsetBottom = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mInsetLeft = orig.mInsetLeft;\n this.mInsetTop = orig.mInsetTop;\n this.mInsetRight = orig.mInsetRight;\n this.mInsetBottom = orig.mInsetBottom;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n let drawable = new InsetDrawable(null, 0);\n drawable.mInsetState = new InsetState(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_3) {\n class ShadowDrawable extends drawable_3.Drawable {\n constructor(drawable, radius, dx, dy, color) {\n super();\n this.mMutated = false;\n this.mState = new DrawableState(null, this);\n this.mState.mDrawable = drawable;\n this.mState.shadowDx = dx;\n this.mState.shadowDy = dy;\n this.mState.shadowRadius = radius;\n this.mState.shadowColor = color;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n setShadow(radius, dx, dy, color) {\n this.mState.shadowDx = dx;\n this.mState.shadowDy = dy;\n this.mState.shadowRadius = radius;\n this.mState.shadowColor = color;\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n if (!this.mState.shadowRadius || graphics.Color.alpha(this.mState.shadowColor) === 0) {\n this.mState.mDrawable.draw(canvas);\n return;\n }\n let saveCount = canvas.save();\n canvas.setShadow(this.mState.shadowRadius, this.mState.shadowDx, this.mState.shadowDy, this.mState.shadowColor);\n this.mState.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return graphics.PixelFormat.TRANSPARENT;\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(bounds) {\n this.mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n }\n drawable_3.ShadowDrawable = ShadowDrawable;\n class DrawableState {\n constructor(orig, owner) {\n this.shadowDx = 0;\n this.shadowDy = 0;\n this.shadowRadius = 0;\n this.shadowColor = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.shadowDx = orig.shadowDx;\n this.shadowDy = orig.shadowDy;\n this.shadowRadius = orig.shadowRadius;\n this.shadowColor = orig.shadowColor;\n }\n }\n newDrawable() {\n let drawable = new ShadowDrawable(null, 0, 0, 0, 0);\n drawable.mState = new DrawableState(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n class RoundRectDrawable extends drawable.Drawable {\n constructor(color, radiusTopLeft, radiusTopRight = radiusTopLeft, radiusBottomRight = radiusTopRight, radiusBottomLeft = radiusBottomRight) {\n super();\n this.mMutated = false;\n this.mPaint = new graphics.Paint();\n this.mState = new State();\n this.setColor(color);\n this.mState.mRadiusTopLeft = radiusTopLeft;\n this.mState.mRadiusTopRight = radiusTopRight;\n this.mState.mRadiusBottomRight = radiusBottomRight;\n this.mState.mRadiusBottomLeft = radiusBottomLeft;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState = new State(this.mState);\n this.mMutated = true;\n }\n return this;\n }\n draw(canvas) {\n if ((this.mState.mUseColor >>> 24) != 0) {\n this.mPaint.setColor(this.mState.mUseColor);\n canvas.drawRoundRect(this.getBounds(), this.mState.mRadiusTopLeft, this.mState.mRadiusTopRight, this.mState.mRadiusBottomRight, this.mState.mRadiusBottomLeft, this.mPaint);\n }\n }\n getColor() {\n return this.mState.mUseColor;\n }\n setColor(color) {\n if (this.mState.mBaseColor != color || this.mState.mUseColor != color) {\n this.invalidateSelf();\n this.mState.mBaseColor = this.mState.mUseColor = color;\n }\n }\n getAlpha() {\n return this.mState.mUseColor >>> 24;\n }\n setAlpha(alpha) {\n alpha += alpha >> 7;\n let baseAlpha = this.mState.mBaseColor >>> 24;\n let useAlpha = baseAlpha * alpha >> 8;\n let oldUseColor = this.mState.mUseColor;\n this.mState.mUseColor = (this.mState.mBaseColor << 8 >>> 8) | (useAlpha << 24);\n if (oldUseColor != this.mState.mUseColor) {\n this.invalidateSelf();\n }\n }\n getOpacity() {\n switch (this.mState.mUseColor >>> 24) {\n case 255:\n return graphics.PixelFormat.OPAQUE;\n case 0:\n return graphics.PixelFormat.TRANSPARENT;\n }\n return graphics.PixelFormat.TRANSLUCENT;\n }\n getConstantState() {\n return this.mState;\n }\n }\n drawable.RoundRectDrawable = RoundRectDrawable;\n class State {\n constructor(state) {\n this.mBaseColor = 0;\n this.mUseColor = 0;\n this.mRadiusTopLeft = 0;\n this.mRadiusTopRight = 0;\n this.mRadiusBottomRight = 0;\n this.mRadiusBottomLeft = 0;\n if (state != null) {\n this.mBaseColor = state.mBaseColor;\n this.mUseColor = state.mUseColor;\n this.mRadiusTopLeft = state.mRadiusTopLeft;\n this.mRadiusTopRight = state.mRadiusTopRight;\n this.mRadiusBottomRight = state.mRadiusBottomRight;\n this.mRadiusBottomLeft = state.mRadiusBottomLeft;\n }\n }\n newDrawable() {\n let c = new RoundRectDrawable(0, 0, 0, 0, 0);\n c.mState = new State(this);\n return c;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n let hashCodeGenerator = 0;\n class JavaObject {\n constructor() {\n this.hash = hashCodeGenerator++;\n }\n static get class() {\n return Class.getClass(this);\n }\n hashCode() {\n return this.hash;\n }\n getClass() {\n return Class.getClass(this.constructor);\n }\n equals(o) {\n return this === o;\n }\n }\n lang.JavaObject = JavaObject;\n class Class {\n constructor(clazz) {\n this.clazz = clazz;\n }\n static getClass(clazz) {\n let c = Class.classCache.get(clazz);\n if (!c) {\n c = new Class(clazz);\n Class.classCache.set(clazz, c);\n }\n return c;\n }\n getName() {\n return this.clazz.name;\n }\n getSimpleName() {\n return this.clazz.name;\n }\n }\n Class.classCache = new Map();\n lang.Class = Class;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var util;\n (function (util) {\n var concurrent;\n (function (concurrent) {\n class CopyOnWriteArrayList {\n constructor() {\n this.mData = [];\n this.isDataNew = true;\n }\n iterator() {\n this.isDataNew = false;\n return this.mData;\n }\n [Symbol.iterator]() {\n this.isDataNew = false;\n return this.mData[Symbol.iterator]();\n }\n checkNewData() {\n if (!this.isDataNew) {\n this.isDataNew = true;\n this.mData = [...this.mData];\n }\n }\n size() {\n return this.mData.length;\n }\n add(...items) {\n this.checkNewData();\n this.mData.push(...items);\n }\n addAll(array) {\n this.checkNewData();\n this.mData.push(...array.mData);\n }\n remove(item) {\n this.checkNewData();\n this.mData.splice(this.mData.indexOf(item), 1);\n }\n }\n concurrent.CopyOnWriteArrayList = CopyOnWriteArrayList;\n })(concurrent = util.concurrent || (util.concurrent = {}));\n })(util = lang.util || (lang.util = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class Access {\n get(index) {\n return this.mData[index];\n }\n size() {\n return this.mSize;\n }\n }\n class CopyOnWriteArray {\n constructor() {\n this.mData = [];\n this.mAccess = new Access();\n }\n getArray() {\n if (this.mStart) {\n if (this.mDataCopy == null)\n this.mDataCopy = [...this.mData];\n return this.mDataCopy;\n }\n return this.mData;\n }\n start() {\n if (this.mStart)\n throw new Error(\"Iteration already started\");\n this.mStart = true;\n this.mDataCopy = null;\n this.mAccess.mData = this.mData;\n this.mAccess.mSize = this.mData.length;\n return this.mAccess.mData;\n }\n end() {\n if (!this.mStart)\n throw new Error(\"Iteration not started\");\n this.mStart = false;\n if (this.mDataCopy != null) {\n this.mData = this.mDataCopy;\n this.mAccess.mData = [];\n this.mAccess.mSize = 0;\n }\n this.mDataCopy = null;\n }\n size() {\n return this.getArray().length;\n }\n add(...items) {\n this.getArray().push(...items);\n }\n addAll(array) {\n this.getArray().push(...array.mData);\n }\n remove(item) {\n this.getArray().splice(this.getArray().indexOf(item), 1);\n }\n }\n util.CopyOnWriteArray = CopyOnWriteArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var CopyOnWriteArrayList = java.lang.util.concurrent.CopyOnWriteArrayList;\n var CopyOnWriteArray = android.util.CopyOnWriteArray;\n class ViewTreeObserver {\n constructor() {\n this.mAlive = true;\n }\n addOnGlobalLayoutListener(listener) {\n this.checkIsAlive();\n if (this.mOnGlobalLayoutListeners == null) {\n this.mOnGlobalLayoutListeners = new CopyOnWriteArray();\n }\n this.mOnGlobalLayoutListeners.add(listener);\n }\n removeGlobalOnLayoutListener(victim) {\n this.removeOnGlobalLayoutListener(victim);\n }\n removeOnGlobalLayoutListener(victim) {\n this.checkIsAlive();\n if (this.mOnGlobalLayoutListeners == null) {\n return;\n }\n this.mOnGlobalLayoutListeners.remove(victim);\n }\n dispatchOnGlobalLayout() {\n let listeners = this.mOnGlobalLayoutListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n access[i].onGlobalLayout();\n }\n }\n finally {\n listeners.end();\n }\n }\n }\n addOnPreDrawListener(listener) {\n this.checkIsAlive();\n if (this.mOnPreDrawListeners == null) {\n this.mOnPreDrawListeners = new CopyOnWriteArray();\n }\n this.mOnPreDrawListeners.add(listener);\n }\n removeOnPreDrawListener(victim) {\n this.checkIsAlive();\n if (this.mOnPreDrawListeners == null) {\n return;\n }\n this.mOnPreDrawListeners.remove(victim);\n }\n dispatchOnPreDraw() {\n let cancelDraw = false;\n const listeners = this.mOnPreDrawListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n cancelDraw = cancelDraw || !(access[i].onPreDraw());\n }\n }\n finally {\n listeners.end();\n }\n }\n return cancelDraw;\n }\n addOnTouchModeChangeListener(listener) {\n this.checkIsAlive();\n if (this.mOnTouchModeChangeListeners == null) {\n this.mOnTouchModeChangeListeners = new CopyOnWriteArrayList();\n }\n this.mOnTouchModeChangeListeners.add(listener);\n }\n removeOnTouchModeChangeListener(victim) {\n this.checkIsAlive();\n if (this.mOnTouchModeChangeListeners == null) {\n return;\n }\n this.mOnTouchModeChangeListeners.remove(victim);\n }\n dispatchOnTouchModeChanged(inTouchMode) {\n const listeners = this.mOnTouchModeChangeListeners;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onTouchModeChanged(inTouchMode);\n }\n }\n }\n addOnScrollChangedListener(listener) {\n this.checkIsAlive();\n if (this.mOnScrollChangedListeners == null) {\n this.mOnScrollChangedListeners = new CopyOnWriteArray();\n }\n this.mOnScrollChangedListeners.add(listener);\n }\n removeOnScrollChangedListener(victim) {\n this.checkIsAlive();\n if (this.mOnScrollChangedListeners == null) {\n return;\n }\n this.mOnScrollChangedListeners.remove(victim);\n }\n dispatchOnScrollChanged() {\n let listeners = this.mOnScrollChangedListeners;\n if (listeners != null && listeners.size() > 0) {\n let access = listeners.start();\n try {\n let count = access.length;\n for (let i = 0; i < count; i++) {\n access[i].onScrollChanged();\n }\n }\n finally {\n listeners.end();\n }\n }\n }\n addOnDrawListener(listener) {\n this.checkIsAlive();\n if (this.mOnDrawListeners == null) {\n this.mOnDrawListeners = new CopyOnWriteArrayList();\n }\n this.mOnDrawListeners.add(listener);\n }\n removeOnDrawListener(victim) {\n this.checkIsAlive();\n if (this.mOnDrawListeners == null) {\n return;\n }\n this.mOnDrawListeners.remove(victim);\n }\n dispatchOnDraw() {\n if (this.mOnDrawListeners != null) {\n for (let listener of this.mOnDrawListeners) {\n listener.onDraw();\n }\n }\n }\n merge(observer) {\n if (observer.mOnGlobalLayoutListeners != null) {\n if (this.mOnGlobalLayoutListeners != null) {\n this.mOnGlobalLayoutListeners.addAll(observer.mOnGlobalLayoutListeners);\n }\n else {\n this.mOnGlobalLayoutListeners = observer.mOnGlobalLayoutListeners;\n }\n }\n if (observer.mOnPreDrawListeners != null) {\n if (this.mOnPreDrawListeners != null) {\n this.mOnPreDrawListeners.addAll(observer.mOnPreDrawListeners);\n }\n else {\n this.mOnPreDrawListeners = observer.mOnPreDrawListeners;\n }\n }\n if (observer.mOnScrollChangedListeners != null) {\n if (this.mOnScrollChangedListeners != null) {\n this.mOnScrollChangedListeners.addAll(observer.mOnScrollChangedListeners);\n }\n else {\n this.mOnScrollChangedListeners = observer.mOnScrollChangedListeners;\n }\n }\n observer.kill();\n }\n checkIsAlive() {\n if (!this.mAlive) {\n throw new Error(\"This ViewTreeObserver is not alive, call \"\n + \"getViewTreeObserver() again\");\n }\n }\n isAlive() {\n return this.mAlive;\n }\n kill() {\n this.mAlive = false;\n }\n }\n view.ViewTreeObserver = ViewTreeObserver;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class DisplayMetrics {\n }\n DisplayMetrics.DENSITY_LOW = 120;\n DisplayMetrics.DENSITY_MEDIUM = 160;\n DisplayMetrics.DENSITY_HIGH = 240;\n DisplayMetrics.DENSITY_XHIGH = 320;\n DisplayMetrics.DENSITY_XXHIGH = 480;\n DisplayMetrics.DENSITY_XXXHIGH = 640;\n DisplayMetrics.DENSITY_DEFAULT = DisplayMetrics.DENSITY_MEDIUM;\n util.DisplayMetrics = DisplayMetrics;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var Bundle = android.os.Bundle;\n class Intent {\n constructor(activityName) {\n this.mRequestCode = -1;\n this.mFlags = 0;\n this.activityName = activityName;\n }\n getBooleanExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getIntExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getLongExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getFloatExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getDoubleExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getStringExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getStringArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getIntegerArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getLongArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getFloatArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getDoubleArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n getBooleanArrayExtra(name, defaultValue) {\n return this.mExtras == null ? defaultValue : this.mExtras.get(name, defaultValue);\n }\n hasExtra(name) {\n return this.mExtras != null && this.mExtras.containsKey(name);\n }\n putExtra(name, value) {\n if (this.mExtras == null) {\n this.mExtras = new Bundle();\n }\n this.mExtras.put(name, value);\n return this;\n }\n getExtras() {\n return (this.mExtras != null) ? new Bundle(this.mExtras) : null;\n }\n getFlags() {\n return this.mFlags;\n }\n setFlags(flags) {\n this.mFlags = flags;\n return this;\n }\n addFlags(flags) {\n this.mFlags |= flags;\n return this;\n }\n }\n Intent.FLAG_ACTIVITY_CLEAR_TOP = 0x04000000;\n content.Intent = Intent;\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class ClassFinder {\n static findClass(classFullName, findInRoot = window) {\n let nameParts = classFullName.split('.');\n let finding = findInRoot;\n for (let part of nameParts) {\n let quickFind = finding[part.toLowerCase()];\n if (quickFind) {\n finding = quickFind;\n continue;\n }\n let found = false;\n for (let key in finding) {\n if (key.toUpperCase() === part.toUpperCase()) {\n finding = finding[key];\n found = true;\n break;\n }\n }\n if (!found)\n return null;\n }\n if (finding === findInRoot) {\n return null;\n }\n return finding;\n }\n static findViewClass(className) {\n let rootViewClass = ClassFinder._findViewClassCache[className];\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, android.view);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, android['widget']);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className, androidui['widget']);\n if (!rootViewClass)\n rootViewClass = ClassFinder.findClass(className);\n if (!rootViewClass) {\n if (document.createElement(className) instanceof HTMLUnknownElement) {\n console.warn('inflate: not find class ' + className);\n }\n return null;\n }\n ClassFinder._findViewClassCache[className] = rootViewClass;\n return rootViewClass;\n }\n }\n ClassFinder._findViewClassCache = {};\n util.ClassFinder = ClassFinder;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var ClassFinder = androidui.util.ClassFinder;\n class LayoutInflater {\n constructor(context) {\n this.mContext = context;\n }\n static from(context) {\n return context.getLayoutInflater();\n }\n getContext() {\n return this.mContext;\n }\n inflate(layout, viewParent, attachToRoot = (viewParent != null)) {\n let domtree = layout instanceof HTMLElement ? layout : this.mContext.getResources().getLayout(layout);\n if (!domtree) {\n console.error('not find layout: ' + layout);\n return null;\n }\n let className = domtree.tagName;\n if (className.startsWith('ANDROID-')) {\n className = className.substring('ANDROID-'.length);\n }\n if (className === 'LAYOUT') {\n domtree = domtree.firstElementChild;\n }\n if (className === 'INCLUDE') {\n let refLayoutId = domtree.getAttribute('layout');\n if (!refLayoutId)\n return null;\n let refEle = this.mContext.getResources().getLayout(refLayoutId);\n for (let attr of Array.from(domtree.attributes)) {\n let name = attr.name;\n if (name === 'layout')\n continue;\n refEle.setAttribute(name, attr.value);\n }\n return this.inflate(refEle, viewParent);\n }\n else if (className === 'MERGE') {\n if (!viewParent)\n throw Error('merge tag need ViewParent');\n Array.from(domtree.children).forEach((item) => {\n if (item instanceof HTMLElement) {\n this.inflate(item, viewParent);\n }\n });\n return viewParent;\n }\n else if (className === 'VIEW') {\n let overrideClass = domtree.className || domtree.getAttribute('android:class');\n if (overrideClass)\n className = overrideClass;\n }\n let rootViewClass = ClassFinder.findViewClass(className);\n if (!rootViewClass) {\n return null;\n }\n let children = Array.from(domtree.children);\n let defStyle;\n let styleAttrValue = domtree.getAttribute('style');\n if (styleAttrValue) {\n defStyle = this.mContext.getResources().getDefStyle(styleAttrValue);\n }\n let rootView;\n if (defStyle)\n rootView = new rootViewClass(this.mContext, domtree, defStyle);\n else\n rootView = new rootViewClass(this.mContext, domtree);\n if (rootView['onInflateAdapter']) {\n rootView.onInflateAdapter(domtree, this.mContext, viewParent);\n domtree.parentNode.removeChild(domtree);\n }\n if (!(rootView instanceof view.View)) {\n return rootView;\n }\n let params;\n if (viewParent) {\n params = viewParent.generateLayoutParamsFromAttr(domtree);\n rootView.setLayoutParams(params);\n }\n if (rootView instanceof view.ViewGroup) {\n let parent = rootView;\n children.forEach((item) => {\n if (item instanceof HTMLElement) {\n this.inflate(item, parent);\n }\n });\n }\n rootView.onFinishInflate();\n if (attachToRoot && viewParent) {\n if (params) {\n viewParent.addView(rootView, params);\n }\n else {\n viewParent.addView(rootView);\n }\n }\n return rootView;\n }\n }\n view.LayoutInflater = LayoutInflater;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var LayoutInflater = android.view.LayoutInflater;\n class Context {\n constructor(androidUI) {\n this.androidUI = androidUI;\n this.mLayoutInflater = new LayoutInflater(this);\n this.mResources = new android.content.res.Resources(this);\n }\n getApplicationContext() {\n return this.androidUI.mApplication;\n }\n getResources() {\n return this.mResources;\n }\n getLayoutInflater() {\n return this.mLayoutInflater;\n }\n obtainStyledAttributes(attrs, defStyleAttr) {\n return content.res.TypedArray.obtain(this.mResources, attrs, defStyleAttr);\n }\n }\n content.Context = Context;\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n const _layout_data = {\n \"action_bar\": \"\\n \\n \\n \\n \\n \\n \\n\",\n \"alert_dialog\": \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n\",\n \"alert_dialog_progress\": \"\\n \\n \\n \\n\",\n \"popup_menu_item_layout\": \"\\n\\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n\",\n \"select_dialog\": \"\",\n \"select_dialog_item\": \"\",\n \"select_dialog_multichoice\": \"\",\n \"select_dialog_singlechoice\": \"\",\n \"simple_spinner_dropdown_item\": \"\",\n \"simple_spinner_item\": \"\",\n \"transient_notification\": \"\\n\\n \\n\\n\"\n };\n const _tempDiv = document.createElement('div');\n class layout {\n static getLayoutData(layoutName) {\n if (!layoutName)\n return null;\n if (!_layout_data[layoutName])\n return null;\n _tempDiv.innerHTML = _layout_data[layoutName];\n let data = _tempDiv.firstElementChild;\n _tempDiv.removeChild(data);\n return data;\n }\n }\n layout.action_bar = '@android:layout/action_bar';\n layout.alert_dialog = '@android:layout/alert_dialog';\n layout.alert_dialog_progress = '@android:layout/alert_dialog_progress';\n layout.popup_menu_item_layout = '@android:layout/popup_menu_item_layout';\n layout.select_dialog = '@android:layout/select_dialog';\n layout.select_dialog_item = '@android:layout/select_dialog_item';\n layout.select_dialog_multichoice = '@android:layout/select_dialog_multichoice';\n layout.select_dialog_singlechoice = '@android:layout/select_dialog_singlechoice';\n layout.simple_spinner_dropdown_item = '@android:layout/simple_spinner_dropdown_item';\n layout.simple_spinner_item = '@android:layout/simple_spinner_item';\n layout.transient_notification = '@android:layout/transient_notification';\n R.layout = layout;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n class AttrValueParser {\n static parseString(r, value, defValue = value) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getString(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n return defValue;\n }\n static parseBoolean(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getBoolean(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n if (value === 'false' || value === '0')\n return false;\n else if (value === 'true' || value === '1' || value === '')\n return true;\n return defValue;\n }\n static parseInt(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getInteger(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n let v = parseInt(value);\n if (isNaN(v))\n return defValue;\n return v;\n }\n static parseFloat(r, value, defValue) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getFloat(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n let v = parseFloat(value);\n if (isNaN(v))\n return defValue;\n if (value.endsWith('%'))\n v /= 100;\n return v;\n }\n static parseColor(r, value, defValue) {\n if (value == null)\n return defValue;\n try {\n if (value.startsWith('@')) {\n return r.getColor(value);\n }\n else {\n return android.graphics.Color.parseColor(value);\n }\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseColorStateList(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n return r.getColorStateList(value);\n }\n else {\n try {\n let color = android.graphics.Color.parseColor(value);\n return android.content.res.ColorStateList.valueOf(color);\n }\n catch (e) {\n console.warn(e);\n }\n }\n return null;\n }\n static parseDimension(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimension(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimension(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDimensionPixelOffset(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimensionPixelOffset(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimensionPixelOffset(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDimensionPixelSize(r, value, defValue, baseValue = 0) {\n if (value == null)\n return defValue;\n if (value.startsWith('@')) {\n try {\n return r.getDimensionPixelSize(value);\n }\n catch (e) {\n console.warn(e);\n return defValue;\n }\n }\n try {\n return android.util.TypedValue.complexToDimensionPixelSize(value, baseValue);\n }\n catch (e) {\n console.warn(e);\n }\n return defValue;\n }\n static parseDrawable(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n try {\n return r.getDrawable(value);\n }\n catch (e) {\n console.warn(e);\n }\n }\n else if (value.startsWith('url(')) {\n value = value.substring('url('.length);\n if (value.endsWith(')'))\n value = value.substring(0, value.length - 1);\n return new androidui.image.NetDrawable(value);\n }\n else {\n try {\n let color = android.graphics.Color.parseColor(value);\n return new android.graphics.drawable.ColorDrawable(color);\n }\n catch (e) {\n }\n }\n return null;\n }\n static parseTextArray(r, value) {\n if (value == null)\n return null;\n if (value.startsWith('@')) {\n return r.getStringArray(value);\n }\n else {\n try {\n let json = JSON.parse(value);\n if (json instanceof Array)\n return json;\n }\n catch (e) {\n }\n }\n return null;\n }\n }\n attr.AttrValueParser = AttrValueParser;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res_1) {\n var AttrValueParser = androidui.attr.AttrValueParser;\n class TypedArray {\n constructor(res, attrMap) {\n this.mResources = res;\n this.attrMap = attrMap;\n }\n static obtain(res, xml, defStyleAttr) {\n const attrMap = new Map();\n if (defStyleAttr) {\n for (let [key, value] of defStyleAttr.entries()) {\n attrMap.set(key.toLowerCase(), value);\n }\n }\n if (xml) {\n const refStyleString = xml.getAttribute('android:style');\n if (refStyleString) {\n const map = res.getStyleAsMap(refStyleString);\n if (map) {\n for (let [key, value] of map.entries()) {\n attrMap.set(key.toLowerCase(), value);\n }\n }\n }\n for (let attr of Array.from(xml.attributes)) {\n const name = attr.name;\n if (name === 'android:style' || name === 'style')\n continue;\n attrMap.set(name, attr.value);\n }\n }\n const attrs = res.mTypedArrayPool.acquire();\n if (attrs != null) {\n attrs.mRecycled = false;\n attrs.attrMap = attrMap;\n attrs.attrMapKeysCache = [];\n return attrs;\n }\n return new TypedArray(res, attrMap);\n }\n checkRecycled() {\n if (this.mRecycled) {\n throw new Error(\"RuntimeException : Cannot make calls to a recycled instance!\");\n }\n }\n length() {\n this.checkRecycled();\n if (!this.attrMap)\n return 0;\n return this.attrMap.size;\n }\n getIndex(keyIndex) {\n if (!this.attrMapKeysCache) {\n this.attrMapKeysCache = Array.from(this.attrMap.keys());\n }\n return this.attrMapKeysCache[keyIndex];\n }\n getLowerCaseNoNamespaceAttrNames() {\n const keys = [];\n for (let key of this.attrMap.keys()) {\n keys.push(key.split(':').pop());\n }\n return keys;\n }\n getResources() {\n return this.mResources;\n }\n getAttrValue(attrName) {\n const name = attrName.toLowerCase();\n return this.attrMap && (this.attrMap.get(name) || this.attrMap.get('android:' + name));\n }\n getResourceId(attrName, defaultResourceId) {\n if (this.hasValueOrEmpty(attrName)) {\n return this.getAttrValue(attrName);\n }\n return defaultResourceId;\n }\n getText(attrName) {\n return this.getString(attrName);\n }\n getString(attrName) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseString(this.mResources, value, value);\n }\n getBoolean(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseBoolean(this.mResources, value, defValue);\n }\n getInt(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseInt(this.mResources, value, defValue);\n }\n getFloat(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseFloat(this.mResources, value, defValue);\n }\n getColor(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseColor(this.mResources, value, defValue);\n }\n getColorStateList(attrName) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseColorStateList(this.mResources, value);\n }\n getInteger(attrName, defValue) {\n return this.getInt(attrName, defValue);\n }\n getLayoutDimension(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n if (value === 'wrap_content')\n return -2;\n if (value === 'fill_parent' || value === 'match_parent')\n return -1;\n return AttrValueParser.parseDimension(this.mResources, value, defValue);\n }\n getDimension(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseDimension(this.mResources, value, defValue);\n }\n getDimensionPixelOffset(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseDimensionPixelOffset(this.mResources, value, defValue);\n }\n getDimensionPixelSize(attrName, defValue) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseDimensionPixelSize(this.mResources, value, defValue);\n }\n getDrawable(attrName) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseDrawable(this.mResources, value);\n }\n getTextArray(attrName) {\n this.checkRecycled();\n let value = this.getAttrValue(attrName);\n return AttrValueParser.parseTextArray(this.mResources, value);\n }\n hasValue(attrName) {\n this.checkRecycled();\n return this.getAttrValue(attrName) != null;\n }\n hasValueOrEmpty(attrName) {\n this.checkRecycled();\n const name = attrName.toLowerCase();\n return this.attrMap && (this.attrMap.has(name) || this.attrMap.has('android:' + name));\n }\n recycle() {\n this.mRecycled = true;\n this.attrMap = null;\n this.attrMapKeysCache = null;\n this.mResources.mTypedArrayPool.release(this);\n }\n }\n res_1.TypedArray = TypedArray;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var DisplayMetrics = android.util.DisplayMetrics;\n var Drawable = android.graphics.drawable.Drawable;\n var Color = android.graphics.Color;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n class Resources {\n constructor(context) {\n this.mTypedArrayPool = new SynchronizedPool(5);\n this.context = context;\n window.addEventListener('resize', () => {\n if (this.displayMetrics) {\n this.fillDisplayMetrics(this.displayMetrics);\n }\n });\n }\n static getSystem() {\n return Resources.instance;\n }\n static from(context) {\n return context.getResources();\n }\n static getDisplayMetrics() {\n return Resources.instance.getDisplayMetrics();\n }\n getDisplayMetrics() {\n if (this.displayMetrics)\n return this.displayMetrics;\n this.displayMetrics = new DisplayMetrics();\n this.fillDisplayMetrics(this.displayMetrics);\n return this.displayMetrics;\n }\n fillDisplayMetrics(displayMetrics) {\n let density = window.devicePixelRatio;\n displayMetrics.xdpi = window.screen.deviceXDPI || DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.ydpi = window.screen.deviceYDPI || DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.density = density;\n displayMetrics.densityDpi = density * DisplayMetrics.DENSITY_DEFAULT;\n displayMetrics.scaledDensity = density;\n let contentEle = this.context ? this.context.androidUI.androidUIElement : document.documentElement;\n displayMetrics.widthPixels = contentEle.offsetWidth * density;\n displayMetrics.heightPixels = contentEle.offsetHeight * density;\n }\n getDefStyle(refString) {\n if (refString === '@null')\n return null;\n if (refString.startsWith('@android:attr/')) {\n refString = refString.substring('@android:attr/'.length);\n return android.R.attr[refString];\n }\n }\n getDrawable(refString) {\n if (refString === '@null')\n return null;\n if (refString.startsWith('@android:drawable/')) {\n refString = refString.substring('@android:drawable/'.length);\n return android.R.drawable[refString] || android.R.image[refString];\n }\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (color instanceof res.ColorStateList) {\n color = color.getDefaultColor();\n }\n return new ColorDrawable(color);\n }\n if (Resources._AppBuildImageFileFinder) {\n let drawable = Resources._AppBuildImageFileFinder(refString);\n if (drawable)\n return drawable;\n }\n if (!refString.startsWith('@')) {\n refString = '@drawable/' + refString;\n }\n let ele = this.getXml(refString);\n if (ele) {\n return Drawable.createFromXml(this, ele);\n }\n ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:drawable/') || text.startsWith('@drawable/')) {\n return this.getDrawable(text);\n }\n if (text.startsWith('@android:color/') || text.startsWith('@color/')) {\n let color = this.getColor(text);\n return new ColorDrawable(color);\n }\n return Drawable.createFromXml(this, ele);\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getColor(refString) {\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (color instanceof res.ColorStateList) {\n color = color.getDefaultColor();\n }\n return color;\n }\n else {\n if (!refString.startsWith('@color/')) {\n refString = '@color/' + refString;\n }\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:color/') || text.startsWith('@color/')) {\n return this.getColor(text);\n }\n return Color.parseColor(text);\n }\n ele = this.getXml(refString);\n if (ele) {\n let colorList = res.ColorStateList.createFromXml(this, ele);\n if (colorList)\n return colorList.getDefaultColor();\n }\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getColorStateList(refString) {\n if (refString === '@null')\n return null;\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n let color = android.R.color[refString];\n if (typeof color === \"number\") {\n color = res.ColorStateList.valueOf(color);\n }\n return color;\n }\n else {\n if (!refString.startsWith('@color/')) {\n refString = '@color/' + refString;\n }\n let ele = this.getXml(refString);\n if (ele) {\n return res.ColorStateList.createFromXml(this, ele);\n }\n ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n if (text.startsWith('@android:color/') || text.startsWith('@color/')) {\n return this.getColorStateList(text);\n }\n return res.ColorStateList.valueOf(Color.parseColor(text));\n }\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimension(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimension(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimensionPixelOffset(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimensionPixelOffset(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getDimensionPixelSize(refString, baseValue = 0) {\n if (!refString.startsWith('@dimen/'))\n refString = '@dimen/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return android.util.TypedValue.complexToDimensionPixelSize(text, baseValue, this.getDisplayMetrics());\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getBoolean(refString) {\n if (!refString.startsWith('@bool/'))\n refString = '@bool/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let text = ele.innerText;\n return text == 'true';\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getInteger(refString) {\n if (!refString.startsWith('@integer/'))\n refString = '@integer/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n return parseInt(ele.innerText);\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getIntArray(refString) {\n if (!refString.startsWith('@array/'))\n refString = '@array/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let intArray = [];\n for (let child of Array.from(ele.children)) {\n intArray.push(parseInt(child.innerText));\n }\n return intArray;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getFloat(refString) {\n return this.getDimension(refString);\n }\n getString(refString) {\n if (refString.startsWith('@android:string/')) {\n refString = refString.substring('@android:string/'.length);\n return android.R.string_[refString];\n }\n if (!refString.startsWith('@string/'))\n refString = '@string/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n return ele.innerText;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getStringArray(refString) {\n if (!refString.startsWith('@array/'))\n refString = '@array/' + refString;\n let ele = this.getValue(refString);\n if (ele) {\n let stringArray = [];\n for (let child of Array.from(ele.children)) {\n stringArray.push(child.innerText);\n }\n return stringArray;\n }\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getLayout(refString) {\n if (!refString || !refString.trim().startsWith('@'))\n return null;\n if (refString === '@null')\n return null;\n if (refString.startsWith('@android:layout/')) {\n refString = refString.substring('@android:layout/'.length);\n return android.R.layout.getLayoutData(refString);\n }\n if (!refString.startsWith('@layout/'))\n refString = '@layout/' + refString;\n let ele = this.getXml(refString);\n if (ele)\n return ele;\n throw new Error(\"NotFoundException: Resource \" + refString + \" is not found\");\n }\n getAnimation(refString) {\n if (refString === '@null')\n return null;\n if (!refString || !refString.trim().startsWith('@'))\n return null;\n if (refString.startsWith('@android:anim/')) {\n refString = refString.substring('@android:anim/'.length);\n return android.R.anim[refString];\n }\n }\n getStyleAsMap(refString) {\n if (refString === '@null')\n return null;\n if (!refString.startsWith('@style/')) {\n refString = '@style/' + refString;\n }\n let styleMap = new Map();\n const parseStyle = (refString) => {\n let styleXml = this.getValue(refString);\n if (!styleXml)\n return;\n let parent = styleXml.getAttribute('parent');\n if (parent) {\n if (!parent.startsWith('@style/')) {\n parent = '@style/' + parent;\n }\n parseStyle(parent);\n }\n let styleName = refString.substring('@style/'.length);\n if (styleName.includes('.')) {\n let parts = styleName.split('.');\n parts.shift();\n let nameParent = parts.join('.');\n parseStyle('@style/' + nameParent);\n }\n for (let item of Array.from(styleXml.children)) {\n let name = item.getAttribute('name');\n if (name) {\n styleMap.set(name, item.innerText);\n }\n }\n };\n parseStyle(refString);\n return styleMap;\n }\n getXml(refString) {\n if (refString === '@null')\n return null;\n if (Resources._AppBuildXmlFinder)\n return Resources._AppBuildXmlFinder(refString);\n }\n getValue(refString, resolveRefs = true) {\n if (refString === '@null')\n return null;\n if (Resources._AppBuildValueFinder) {\n let ele = Resources._AppBuildValueFinder(refString);\n if (!ele)\n return null;\n if (resolveRefs && ele.children.length == 0) {\n let str = ele.innerText;\n if (str.startsWith('@')) {\n return this.getValue(refString, true) || ele;\n }\n }\n return ele;\n }\n }\n obtainAttributes(attrs) {\n return res.TypedArray.obtain(this, attrs);\n }\n obtainStyledAttributes(attrs, defStyleAttr) {\n return res.TypedArray.obtain(this, attrs, defStyleAttr);\n }\n }\n Resources.instance = new Resources();\n Resources._AppBuildImageFileFinder = null;\n Resources._AppBuildXmlFinder = null;\n Resources._AppBuildValueFinder = null;\n res.Resources = Resources;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class ViewConfiguration {\n constructor() {\n this.density = android.content.res.Resources.getDisplayMetrics().density;\n this.sizeAndDensity = this.density;\n this.mEdgeSlop = this.sizeAndDensity * ViewConfiguration.EDGE_SLOP;\n this.mFadingEdgeLength = this.sizeAndDensity * ViewConfiguration.FADING_EDGE_LENGTH;\n this.mMinimumFlingVelocity = this.density * ViewConfiguration.MINIMUM_FLING_VELOCITY;\n this.mMaximumFlingVelocity = this.density * ViewConfiguration.MAXIMUM_FLING_VELOCITY;\n this.mScrollbarSize = this.density * ViewConfiguration.SCROLL_BAR_SIZE;\n this.mTouchSlop = this.density * ViewConfiguration.TOUCH_SLOP;\n this.mDoubleTapTouchSlop = this.sizeAndDensity * ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP;\n this.mPagingTouchSlop = this.density * ViewConfiguration.PAGING_TOUCH_SLOP;\n this.mDoubleTapSlop = this.density * ViewConfiguration.DOUBLE_TAP_SLOP;\n this.mWindowTouchSlop = this.sizeAndDensity * ViewConfiguration.WINDOW_TOUCH_SLOP;\n this.mOverscrollDistance = this.sizeAndDensity * ViewConfiguration.OVERSCROLL_DISTANCE;\n this.mOverflingDistance = this.sizeAndDensity * ViewConfiguration.OVERFLING_DISTANCE;\n this.mMaximumDrawingCacheSize = android.content.res.Resources.getDisplayMetrics().widthPixels\n * android.content.res.Resources.getDisplayMetrics().heightPixels * 4 * 2;\n }\n static get(arg) {\n if (!ViewConfiguration.instance) {\n ViewConfiguration.instance = new ViewConfiguration();\n }\n return ViewConfiguration.instance;\n }\n getScaledScrollBarSize() {\n return this.mScrollbarSize;\n }\n static getScrollBarFadeDuration() {\n return ViewConfiguration.SCROLL_BAR_FADE_DURATION;\n }\n static getScrollDefaultDelay() {\n return ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY;\n }\n getScaledFadingEdgeLength() {\n return this.mFadingEdgeLength;\n }\n static getPressedStateDuration() {\n return ViewConfiguration.PRESSED_STATE_DURATION;\n }\n static getLongPressTimeout() {\n return ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;\n }\n static getKeyRepeatDelay() {\n return ViewConfiguration.KEY_REPEAT_DELAY;\n }\n static getTapTimeout() {\n return ViewConfiguration.TAP_TIMEOUT;\n }\n static getJumpTapTimeout() {\n return ViewConfiguration.JUMP_TAP_TIMEOUT;\n }\n static getDoubleTapTimeout() {\n return ViewConfiguration.DOUBLE_TAP_TIMEOUT;\n }\n static getDoubleTapMinTime() {\n return ViewConfiguration.DOUBLE_TAP_MIN_TIME;\n }\n getScaledEdgeSlop() {\n return this.mEdgeSlop;\n }\n getScaledTouchSlop() {\n return this.mTouchSlop;\n }\n getScaledDoubleTapTouchSlop() {\n return this.mDoubleTapTouchSlop;\n }\n getScaledPagingTouchSlop() {\n return this.mPagingTouchSlop;\n }\n getScaledDoubleTapSlop() {\n return this.mDoubleTapSlop;\n }\n getScaledWindowTouchSlop() {\n return this.mWindowTouchSlop;\n }\n getScaledMinimumFlingVelocity() {\n return this.mMinimumFlingVelocity;\n }\n getScaledMaximumFlingVelocity() {\n return this.mMaximumFlingVelocity;\n }\n getScaledMaximumDrawingCacheSize() {\n return this.mMaximumDrawingCacheSize;\n }\n getScaledOverscrollDistance() {\n return this.mOverscrollDistance;\n }\n getScaledOverflingDistance() {\n return this.mOverflingDistance;\n }\n static getScrollFriction() {\n return ViewConfiguration.SCROLL_FRICTION;\n }\n }\n ViewConfiguration.SCROLL_BAR_SIZE = 8;\n ViewConfiguration.SCROLL_BAR_FADE_DURATION = 250;\n ViewConfiguration.SCROLL_BAR_DEFAULT_DELAY = 300;\n ViewConfiguration.FADING_EDGE_LENGTH = 12;\n ViewConfiguration.PRESSED_STATE_DURATION = 64;\n ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT = 500;\n ViewConfiguration.KEY_REPEAT_DELAY = 50;\n ViewConfiguration.GLOBAL_ACTIONS_KEY_TIMEOUT = 500;\n ViewConfiguration.TAP_TIMEOUT = 180;\n ViewConfiguration.JUMP_TAP_TIMEOUT = 500;\n ViewConfiguration.DOUBLE_TAP_TIMEOUT = 300;\n ViewConfiguration.DOUBLE_TAP_MIN_TIME = 40;\n ViewConfiguration.HOVER_TAP_TIMEOUT = 150;\n ViewConfiguration.HOVER_TAP_SLOP = 20;\n ViewConfiguration.ZOOM_CONTROLS_TIMEOUT = 3000;\n ViewConfiguration.EDGE_SLOP = 12;\n ViewConfiguration.TOUCH_SLOP = 8;\n ViewConfiguration.DOUBLE_TAP_TOUCH_SLOP = ViewConfiguration.TOUCH_SLOP;\n ViewConfiguration.PAGING_TOUCH_SLOP = ViewConfiguration.TOUCH_SLOP * 2;\n ViewConfiguration.DOUBLE_TAP_SLOP = 100;\n ViewConfiguration.WINDOW_TOUCH_SLOP = 16;\n ViewConfiguration.MINIMUM_FLING_VELOCITY = 50;\n ViewConfiguration.MAXIMUM_FLING_VELOCITY = 8000;\n ViewConfiguration.SCROLL_FRICTION = 0.015;\n ViewConfiguration.OVERSCROLL_DISTANCE = 800;\n ViewConfiguration.OVERFLING_DISTANCE = 100;\n view.ViewConfiguration = ViewConfiguration;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class SystemClock {\n static uptimeMillis() {\n return new Date().getTime();\n }\n }\n os.SystemClock = SystemClock;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n var ViewConfiguration = android.view.ViewConfiguration;\n const tempBound = new Rect();\n const ID_FixID_Cache = [];\n const tmpTouchEvent = {\n touches: null,\n changedTouches: null,\n type: null\n };\n function fixEventId(e) {\n for (let i = 0, length = e.changedTouches.length; i < length; i++) {\n fixTouchId(e.changedTouches[i]);\n }\n for (let i = 0, length = e.touches.length; i < length; i++) {\n fixTouchId(e.touches[i]);\n }\n if (e.type == 'touchend' || e.type == 'touchcancel') {\n ID_FixID_Cache[e.changedTouches[0].id_fix] = null;\n }\n tmpTouchEvent.type = e.type;\n tmpTouchEvent.changedTouches = Array.from(e.changedTouches).map((touch) => fixTouchId(touch));\n tmpTouchEvent.touches = Array.from(e.touches).map((touch) => fixTouchId(touch));\n return tmpTouchEvent;\n }\n function fixTouchId(touch) {\n let originID = touch['identifier'];\n let fix_id = ID_FixID_Cache.indexOf(originID);\n if (fix_id < 0) {\n for (let i = 0, length = ID_FixID_Cache.length + 1; i < length; i++) {\n if (ID_FixID_Cache[i] == null) {\n ID_FixID_Cache[i] = originID;\n fix_id = i;\n break;\n }\n }\n }\n return {\n id_fix: fix_id,\n target: touch.target,\n screenX: touch.screenX,\n screenY: touch.screenY,\n clientX: touch.clientX,\n clientY: touch.clientY,\n pageX: touch.pageX,\n pageY: touch.pageY,\n mEventTime: touch.mEventTime,\n };\n }\n class MotionEvent {\n constructor() {\n this.mAction = 0;\n this.mEdgeFlags = 0;\n this.mDownTime = 0;\n this.mEventTime = 0;\n this.mActivePointerId = 0;\n this.mXOffset = 0;\n this.mYOffset = 0;\n this._axisValues = new Map();\n }\n static obtainWithTouchEvent(e, action) {\n let event = new MotionEvent();\n event.initWithTouch(e, action);\n return event;\n }\n static obtain(event) {\n let newEv = new MotionEvent();\n Object.assign(newEv, event);\n return newEv;\n }\n static obtainWithAction(downTime, eventTime, action, x, y, metaState = 0) {\n let newEv = new MotionEvent();\n newEv.mAction = action;\n newEv.mDownTime = downTime;\n newEv.mEventTime = eventTime;\n let touch = {\n id_fix: 0,\n target: null,\n screenX: x,\n screenY: y,\n clientX: x,\n clientY: y,\n pageX: x,\n pageY: y\n };\n newEv.mTouchingPointers = [touch];\n return newEv;\n }\n initWithTouch(event, baseAction, windowBound = new Rect()) {\n let e = fixEventId(event);\n let now = android.os.SystemClock.uptimeMillis();\n let action = baseAction;\n let actionIndex = -1;\n let activeTouch = e.changedTouches[0];\n this._activeTouch = activeTouch;\n let activePointerId = activeTouch.id_fix;\n if (activePointerId == null)\n console.warn('activePointerId null, activeTouch.identifier: ' + activeTouch['identifier']);\n for (let i = 0, length = e.touches.length; i < length; i++) {\n if (e.touches[i].id_fix === activePointerId) {\n actionIndex = i;\n MotionEvent.IdIndexCache.set(activePointerId, i);\n break;\n }\n }\n if (actionIndex < 0 && (baseAction === MotionEvent.ACTION_UP || baseAction === MotionEvent.ACTION_CANCEL)) {\n actionIndex = MotionEvent.IdIndexCache.get(activePointerId);\n }\n if (actionIndex < 0)\n throw Error('not find action index');\n switch (baseAction) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_UP:\n MotionEvent.TouchMoveRecord.set(activePointerId, []);\n break;\n case MotionEvent.ACTION_MOVE:\n let moveHistory = MotionEvent.TouchMoveRecord.get(activePointerId);\n if (moveHistory) {\n activeTouch.mEventTime = now;\n moveHistory.push(activeTouch);\n if (moveHistory.length > MotionEvent.HistoryMaxSize)\n moveHistory.shift();\n }\n break;\n }\n this.mTouchingPointers = Array.from(e.touches);\n if (baseAction === MotionEvent.ACTION_UP || baseAction === MotionEvent.ACTION_CANCEL) {\n this.mTouchingPointers.splice(actionIndex, 0, activeTouch);\n }\n if (this.mTouchingPointers.length > 1) {\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n action = MotionEvent.ACTION_POINTER_DOWN;\n action = actionIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT | action;\n break;\n case MotionEvent.ACTION_UP:\n action = MotionEvent.ACTION_POINTER_UP;\n action = actionIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT | action;\n break;\n }\n }\n this.mAction = action;\n this.mActivePointerId = activePointerId;\n if (action == MotionEvent.ACTION_DOWN) {\n this.mDownTime = now;\n }\n this.mEventTime = now;\n const density = android.content.res.Resources.getSystem().getDisplayMetrics().density;\n this.mXOffset = this.mYOffset = 0;\n let edgeFlag = 0;\n let unScaledX = activeTouch.pageX;\n let unScaledY = activeTouch.pageY;\n let edgeSlop = ViewConfiguration.EDGE_SLOP;\n tempBound.set(windowBound);\n tempBound.right = tempBound.left + edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_LEFT;\n }\n tempBound.set(windowBound);\n tempBound.bottom = tempBound.top + edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_TOP;\n }\n tempBound.set(windowBound);\n tempBound.left = tempBound.right - edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_RIGHT;\n }\n tempBound.set(windowBound);\n tempBound.top = tempBound.bottom - edgeSlop;\n if (tempBound.contains(unScaledX, unScaledY)) {\n edgeFlag |= MotionEvent.EDGE_BOTTOM;\n }\n this.mEdgeFlags = edgeFlag;\n }\n initWithMouseWheel(e) {\n this.mAction = MotionEvent.ACTION_SCROLL;\n this.mActivePointerId = 0;\n let touch = {\n id_fix: 0,\n target: null,\n screenX: e.screenX,\n screenY: e.screenY,\n clientX: e.clientX,\n clientY: e.clientY,\n pageX: e.pageX,\n pageY: e.pageY\n };\n this.mTouchingPointers = [touch];\n this.mDownTime = this.mEventTime = android.os.SystemClock.uptimeMillis();\n this.mXOffset = this.mYOffset = 0;\n this._axisValues.clear();\n this._axisValues.set(MotionEvent.AXIS_VSCROLL, -e.deltaY);\n this._axisValues.set(MotionEvent.AXIS_HSCROLL, -e.deltaX);\n }\n recycle() {\n }\n getAction() {\n return this.mAction;\n }\n getActionMasked() {\n return this.mAction & MotionEvent.ACTION_MASK;\n }\n getActionIndex() {\n return (this.mAction & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n }\n getDownTime() {\n return this.mDownTime;\n }\n getEventTime() {\n return this.mEventTime;\n }\n getX(pointerIndex = 0) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[pointerIndex].pageX) * density + this.mXOffset;\n }\n getY(pointerIndex = 0) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[pointerIndex].pageY) * density + this.mYOffset;\n }\n getPointerCount() {\n return this.mTouchingPointers.length;\n }\n getPointerId(pointerIndex) {\n return this.mTouchingPointers[pointerIndex].id_fix;\n }\n findPointerIndex(pointerId) {\n for (let i = 0, length = this.mTouchingPointers.length; i < length; i++) {\n if (this.mTouchingPointers[i].id_fix === pointerId) {\n return i;\n }\n }\n return -1;\n }\n getRawX() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[0].pageX) * density;\n }\n getRawY() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n return (this.mTouchingPointers[0].pageY) * density;\n }\n getHistorySize(id = this.mActivePointerId) {\n let moveHistory = MotionEvent.TouchMoveRecord.get(id);\n return moveHistory ? moveHistory.length : 0;\n }\n getHistoricalX(pointerIndex, pos) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let moveHistory = MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);\n return (moveHistory[pos].pageX) * density + this.mXOffset;\n }\n getHistoricalY(pointerIndex, pos) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let moveHistory = MotionEvent.TouchMoveRecord.get(this.mTouchingPointers[pointerIndex].id_fix);\n return (moveHistory[pos].pageY) * density + this.mYOffset;\n }\n getHistoricalEventTime(...args) {\n let pos, activePointerId;\n if (args.length === 1) {\n pos = args[0];\n activePointerId = this.mActivePointerId;\n }\n else {\n pos = args[1];\n activePointerId = this.getPointerId(args[0]);\n }\n let moveHistory = MotionEvent.TouchMoveRecord.get(activePointerId);\n return moveHistory[pos].mEventTime;\n }\n getTouchMajor(pointerIndex) {\n return Math.floor(android.content.res.Resources.getDisplayMetrics().density);\n }\n getHistoricalTouchMajor(pointerIndex, pos) {\n return Math.floor(android.content.res.Resources.getDisplayMetrics().density);\n }\n getEdgeFlags() {\n return this.mEdgeFlags;\n }\n setEdgeFlags(flags) {\n this.mEdgeFlags = flags;\n }\n setAction(action) {\n this.mAction = action;\n }\n isTouchEvent() {\n let action = this.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_MOVE:\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_OUTSIDE:\n case MotionEvent.ACTION_POINTER_DOWN:\n case MotionEvent.ACTION_POINTER_UP:\n return true;\n }\n return false;\n }\n isPointerEvent() {\n return true;\n }\n offsetLocation(deltaX, deltaY) {\n this.mXOffset += deltaX;\n this.mYOffset += deltaY;\n }\n setLocation(x, y) {\n this.mXOffset = x - this.getRawX();\n this.mYOffset = y - this.getRawY();\n }\n getPointerIdBits() {\n let idBits = 0;\n let pointerCount = this.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n idBits |= 1 << this.getPointerId(i);\n }\n return idBits;\n }\n split(idBits) {\n let ev = MotionEvent.obtain(this);\n let oldPointerCount = this.getPointerCount();\n const oldAction = this.getAction();\n const oldActionMasked = oldAction & MotionEvent.ACTION_MASK;\n let newPointerIds = [];\n for (let i = 0; i < oldPointerCount; i++) {\n let pointerId = this.getPointerId(i);\n let idBit = 1 << pointerId;\n if ((idBit & idBits) != 0) {\n newPointerIds.push(pointerId);\n }\n }\n let newActionPointerIndex = newPointerIds.indexOf(this.mActivePointerId);\n let newPointerCount = newPointerIds.length;\n let newAction;\n if (oldActionMasked == MotionEvent.ACTION_POINTER_DOWN || oldActionMasked == MotionEvent.ACTION_POINTER_UP) {\n if (newActionPointerIndex < 0) {\n newAction = MotionEvent.ACTION_MOVE;\n }\n else if (newPointerCount == 1) {\n newAction = oldActionMasked == MotionEvent.ACTION_POINTER_DOWN\n ? MotionEvent.ACTION_DOWN : MotionEvent.ACTION_UP;\n }\n else {\n newAction = oldActionMasked | (newActionPointerIndex << MotionEvent.ACTION_POINTER_INDEX_SHIFT);\n }\n }\n else {\n newAction = oldAction;\n }\n ev.mAction = newAction;\n ev.mTouchingPointers = this.mTouchingPointers.filter((item) => {\n return newPointerIds.indexOf(item.id_fix) >= 0;\n });\n return ev;\n }\n getAxisValue(axis) {\n let value = this._axisValues.get(axis);\n return value ? value : 0;\n }\n toString() {\n return \"MotionEvent{action=\" + this.getAction() + \" x=\" + this.getX()\n + \" y=\" + this.getY() + \"}\";\n }\n }\n MotionEvent.INVALID_POINTER_ID = -1;\n MotionEvent.ACTION_MASK = 0xff;\n MotionEvent.ACTION_DOWN = 0;\n MotionEvent.ACTION_UP = 1;\n MotionEvent.ACTION_MOVE = 2;\n MotionEvent.ACTION_CANCEL = 3;\n MotionEvent.ACTION_OUTSIDE = 4;\n MotionEvent.ACTION_POINTER_DOWN = 5;\n MotionEvent.ACTION_POINTER_UP = 6;\n MotionEvent.ACTION_HOVER_MOVE = 7;\n MotionEvent.ACTION_SCROLL = 8;\n MotionEvent.ACTION_HOVER_ENTER = 9;\n MotionEvent.ACTION_HOVER_EXIT = 10;\n MotionEvent.EDGE_TOP = 0x00000001;\n MotionEvent.EDGE_BOTTOM = 0x00000002;\n MotionEvent.EDGE_LEFT = 0x00000004;\n MotionEvent.EDGE_RIGHT = 0x00000008;\n MotionEvent.ACTION_POINTER_INDEX_MASK = 0xff00;\n MotionEvent.ACTION_POINTER_INDEX_SHIFT = 8;\n MotionEvent.AXIS_VSCROLL = 9;\n MotionEvent.AXIS_HSCROLL = 10;\n MotionEvent.HistoryMaxSize = 10;\n MotionEvent.TouchMoveRecord = new Map();\n MotionEvent.IdIndexCache = new Map();\n view.MotionEvent = MotionEvent;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n class TouchDelegate {\n constructor(bounds, delegateView) {\n this.mDelegateTargeted = false;\n this.mSlop = 0;\n this.mBounds = bounds;\n this.mSlop = view.ViewConfiguration.get().getScaledTouchSlop();\n this.mSlopBounds = new Rect(bounds);\n this.mSlopBounds.inset(-this.mSlop, -this.mSlop);\n this.mDelegateView = delegateView;\n }\n onTouchEvent(event) {\n let x = event.getX();\n let y = event.getY();\n let sendToDelegate = false;\n let hit = true;\n let handled = false;\n switch (event.getAction()) {\n case view.MotionEvent.ACTION_DOWN:\n let bounds = this.mBounds;\n if (bounds.contains(x, y)) {\n this.mDelegateTargeted = true;\n sendToDelegate = true;\n }\n break;\n case view.MotionEvent.ACTION_UP:\n case view.MotionEvent.ACTION_MOVE:\n sendToDelegate = this.mDelegateTargeted;\n if (sendToDelegate) {\n let slopBounds = this.mSlopBounds;\n if (!slopBounds.contains(x, y)) {\n hit = false;\n }\n }\n break;\n case view.MotionEvent.ACTION_CANCEL:\n sendToDelegate = this.mDelegateTargeted;\n this.mDelegateTargeted = false;\n break;\n }\n if (sendToDelegate) {\n let delegateView = this.mDelegateView;\n if (hit) {\n event.setLocation(delegateView.getWidth() / 2, delegateView.getHeight() / 2);\n }\n else {\n let slop = this.mSlop;\n event.setLocation(-(slop * 2), -(slop * 2));\n }\n handled = delegateView.dispatchTouchEvent(event);\n }\n return handled;\n }\n }\n view.TouchDelegate = TouchDelegate;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n var StringBuilder = java.lang.StringBuilder;\n var Pools = android.util.Pools;\n class Message {\n constructor() {\n this.mType = Message.Type_Normal;\n this.what = 0;\n this.arg1 = 0;\n this.arg2 = 0;\n this.when = 0;\n }\n static obtain(...args) {\n let m = Message.sPool.acquire();\n m = m || new Message();\n if (args.length === 1) {\n if (args[0] instanceof Message) {\n let orig = args[0];\n [m.target, m.what, m.arg1, m.arg2, m.obj, m.callback] =\n [orig.target, orig.what, orig.arg1, orig.arg2, orig.obj, orig.callback];\n }\n else if (args[0] instanceof os.Handler) {\n m.target = args[0];\n }\n else {\n throw new Error('unknown args');\n }\n }\n else if (args.length === 2) {\n m.target = args[0];\n if (typeof args[1] === 'number')\n m.what = args[1];\n else\n m.callback = args[1];\n }\n else if (args.length === 3) {\n [m.target, m.what, m.obj] = args;\n }\n else if (args.length === 4) {\n [m.target, m.what, m.arg1, m.arg2] = args;\n }\n else {\n [m.target, m.what, m.arg1 = 0, m.arg2, m.obj, m.callback] = args;\n }\n return m;\n }\n recycle() {\n this.clearForRecycle();\n Message.sPool.release(this);\n }\n copyFrom(o) {\n this.mType = o.mType;\n this.what = o.what;\n this.arg1 = o.arg1;\n this.arg2 = o.arg2;\n this.obj = o.obj;\n }\n setTarget(target) {\n this.target = target;\n }\n getTarget() {\n return this.target;\n }\n sendToTarget() {\n this.target.sendMessage(this);\n }\n clearForRecycle() {\n this.mType = Message.Type_Normal;\n this.what = 0;\n this.arg1 = 0;\n this.arg2 = 0;\n this.obj = null;\n this.when = 0;\n this.target = null;\n this.callback = null;\n }\n toString(now = os.SystemClock.uptimeMillis()) {\n let b = new StringBuilder();\n b.append(\"{ what=\");\n b.append(this.what);\n b.append(\" when=\");\n b.append(this.when - now).append(\"ms\");\n if (this.arg1 != 0) {\n b.append(\" arg1=\");\n b.append(this.arg1);\n }\n if (this.arg2 != 0) {\n b.append(\" arg2=\");\n b.append(this.arg2);\n }\n if (this.obj != null) {\n b.append(\" obj=\");\n b.append(this.obj);\n }\n b.append(\" }\");\n return b.toString();\n }\n }\n Message.Type_Normal = 0;\n Message.Type_Traversal = 1;\n Message.sPool = new Pools.SynchronizedPool(10);\n os.Message = Message;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n var requestAnimationFrame = window[\"requestAnimationFrame\"] ||\n window[\"webkitRequestAnimationFrame\"] ||\n window[\"mozRequestAnimationFrame\"] ||\n window[\"oRequestAnimationFrame\"] ||\n window[\"msRequestAnimationFrame\"];\n if (!requestAnimationFrame) {\n requestAnimationFrame = function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n };\n }\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = requestAnimationFrame;\n class MessageQueue {\n static getMessages(h, args, object) {\n let msgs = [];\n if (h == null) {\n return msgs;\n }\n if (typeof args === \"number\") {\n let what = args;\n for (let p of MessageQueue.messages) {\n if (p.target == h && p.what == what && (object == null || p.obj == object)) {\n msgs.push(p);\n }\n }\n }\n else {\n let r = args;\n for (let p of MessageQueue.messages) {\n if (p.target == h && p.callback == r && (object == null || p.obj == object)) {\n msgs.push(p);\n }\n }\n }\n return msgs;\n }\n static hasMessages(h, args, object) {\n return MessageQueue.getMessages(h, args, object).length > 0;\n }\n static enqueueMessage(msg, when) {\n if (msg.target == null) {\n throw new Error(\"Message must have a target.\");\n }\n msg.when = when;\n MessageQueue.messages.add(msg);\n MessageQueue.checkLoop();\n return true;\n }\n static recycleMessage(handler, message) {\n message.recycle();\n MessageQueue.messages.delete(message);\n }\n static removeMessages(h, args, object) {\n let p = MessageQueue.getMessages(h, args, object);\n if (p && p.length > 0) {\n for (let item of p) {\n MessageQueue.recycleMessage(h, item);\n }\n }\n }\n static removeCallbacksAndMessages(h, object) {\n if (h == null) {\n return;\n }\n for (let p of MessageQueue.messages) {\n if (p != null && p.target == h && (object == null || p.obj == object)) {\n MessageQueue.recycleMessage(h, p);\n }\n }\n }\n static checkLoop() {\n if (!MessageQueue._loopActive) {\n MessageQueue._loopActive = true;\n MessageQueue.requestNextLoop();\n }\n }\n static requestNextLoop() {\n requestAnimationFrame(MessageQueue.loop);\n }\n static loop() {\n let normalMessages = [];\n let traversalMessages = [];\n const now = os.SystemClock.uptimeMillis();\n for (let msg of MessageQueue.messages) {\n if (msg.when <= now) {\n if (msg.mType === os.Message.Type_Traversal)\n traversalMessages.push(msg);\n else\n normalMessages.push(msg);\n }\n }\n for (let i = 0, length = normalMessages.length; i < length; i++) {\n MessageQueue.dispatchMessage(normalMessages[i]);\n }\n for (let i = 0, length = traversalMessages.length; i < length; i++) {\n MessageQueue.dispatchMessage(traversalMessages[i]);\n }\n if (MessageQueue.messages.size > 0)\n MessageQueue.requestNextLoop();\n else\n MessageQueue._loopActive = false;\n }\n static dispatchMessage(msg) {\n if (MessageQueue.messages.has(msg)) {\n MessageQueue.messages.delete(msg);\n msg.target.dispatchMessage(msg);\n MessageQueue.recycleMessage(msg.target, msg);\n }\n }\n }\n MessageQueue.messages = new Set();\n MessageQueue._loopActive = false;\n os.MessageQueue = MessageQueue;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Handler {\n constructor(callback) {\n this.mCallback = callback;\n }\n handleMessage(msg) {\n }\n dispatchMessage(msg) {\n if (msg.callback != null) {\n msg.callback.run();\n }\n else {\n if (this.mCallback != null) {\n if (this.mCallback.handleMessage(msg)) {\n return;\n }\n }\n this.handleMessage(msg);\n }\n }\n obtainMessage(...args) {\n if (args.length === 2) {\n let [what, obj] = args;\n return os.Message.obtain(this, what, obj);\n }\n else {\n let [what, arg1, arg2, obj] = args;\n return os.Message.obtain(this, what, arg1, arg2, obj);\n }\n }\n post(r) {\n return this.sendMessageDelayed(Handler.getPostMessage(r), 0);\n }\n postAsTraversal(r) {\n let msg = Handler.getPostMessage(r);\n msg.mType = os.Message.Type_Traversal;\n return this.sendMessageDelayed(msg, 0);\n }\n postAtTime(...args) {\n if (args.length === 2) {\n let [r, uptimeMillis] = args;\n return this.sendMessageAtTime(Handler.getPostMessage(r), uptimeMillis);\n }\n else {\n let [r, token, uptimeMillis] = args;\n return this.sendMessageAtTime(Handler.getPostMessage(r, token), uptimeMillis);\n }\n }\n postDelayed(r, delayMillis) {\n return this.sendMessageDelayed(Handler.getPostMessage(r), delayMillis);\n }\n postAtFrontOfQueue(r) {\n return this.post(r);\n }\n removeCallbacks(r, token) {\n os.MessageQueue.removeMessages(this, r, token);\n }\n sendMessage(msg) {\n return this.sendMessageDelayed(msg, 0);\n }\n sendEmptyMessage(what) {\n return this.sendEmptyMessageDelayed(what, 0);\n }\n sendEmptyMessageDelayed(what, delayMillis) {\n let msg = os.Message.obtain();\n msg.what = what;\n return this.sendMessageDelayed(msg, delayMillis);\n }\n sendEmptyMessageAtTime(what, uptimeMillis) {\n let msg = os.Message.obtain();\n msg.what = what;\n return this.sendMessageAtTime(msg, uptimeMillis);\n }\n sendMessageDelayed(msg, delayMillis) {\n if (delayMillis < 0) {\n delayMillis = 0;\n }\n return this.sendMessageAtTime(msg, os.SystemClock.uptimeMillis() + delayMillis);\n }\n sendMessageAtTime(msg, uptimeMillis) {\n msg.target = this;\n return os.MessageQueue.enqueueMessage(msg, uptimeMillis);\n }\n sendMessageAtFrontOfQueue(msg) {\n return this.sendMessage(msg);\n }\n removeMessages(what, object) {\n os.MessageQueue.removeMessages(this, what, object);\n }\n removeCallbacksAndMessages(token) {\n os.MessageQueue.removeCallbacksAndMessages(this, token);\n }\n hasMessages(what, object) {\n return os.MessageQueue.hasMessages(this, what, object);\n }\n static getPostMessage(r, token) {\n let m = os.Message.obtain();\n m.obj = token;\n m.callback = r;\n return m;\n }\n }\n os.Handler = Handler;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var SparseArray = android.util.SparseArray;\n var StateSet = android.util.StateSet;\n var WeakReference = java.lang.ref.WeakReference;\n var Color = android.graphics.Color;\n class ColorStateList {\n constructor(states, colors) {\n this.mDefaultColor = 0xffff0000;\n this.mStateSpecs = states;\n this.mColors = colors;\n if (states && states.length > 0) {\n this.mDefaultColor = colors[0];\n for (let i = 0; i < states.length; i++) {\n if (states[i].length == 0) {\n this.mDefaultColor = colors[i];\n }\n }\n }\n }\n static valueOf(color) {\n let ref = ColorStateList.sCache.get(color);\n let csl = ref != null ? ref.get() : null;\n if (csl != null) {\n return csl;\n }\n csl = new ColorStateList(ColorStateList.EMPTY, [color]);\n ColorStateList.sCache.put(color, new WeakReference(csl));\n return csl;\n }\n static createFromXml(r, parser) {\n let colorStateList;\n let name = parser.tagName.toLowerCase();\n if (name == \"selector\") {\n const stateSpecList = [];\n const colorList = [];\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n let alpha = 1.0;\n let color = 0xffff0000;\n let haveColor = false;\n let stateSpec = [];\n let typedArray = r.obtainAttributes(item);\n for (let attr of Array.from(item.attributes)) {\n let attrName = attr.name;\n if (attrName === 'android:alpha') {\n alpha = typedArray.getFloat(attrName, alpha);\n }\n else if (attrName === 'android:color') {\n color = typedArray.getColor(attrName, color);\n haveColor = true;\n }\n else if (attrName.startsWith('android:state_')) {\n let state = attrName.substring('android:state_'.length);\n let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()];\n if (typeof stateValue === \"number\") {\n stateSpec.push(typedArray.getBoolean(attrName, true) ? stateValue : -stateValue);\n }\n }\n }\n if (!haveColor) {\n throw new Error(` tag requires a 'android:color' attribute.`);\n }\n let alphaMod = Math.floor(Color.alpha(color) * alpha);\n alphaMod = Math.min(alphaMod, 255);\n alphaMod = Math.max(alphaMod, 0);\n color = (color & 0xFFFFFF) | (alphaMod << 24);\n colorList.push(color);\n stateSpecList.push(stateSpec);\n }\n colorStateList = new ColorStateList(stateSpecList, colorList);\n }\n else {\n throw new Error(`XmlPullParserException(invalid drawable tag: ${name}`);\n }\n return colorStateList;\n }\n withAlpha(alpha) {\n let colors = androidui.util.ArrayCreator.newNumberArray(this.mColors.length);\n let len = colors.length;\n for (let i = 0; i < len; i++) {\n colors[i] = (this.mColors[i] & 0xFFFFFF) | (alpha << 24);\n }\n return new ColorStateList(this.mStateSpecs, colors);\n }\n isStateful() {\n return this.mStateSpecs.length > 1;\n }\n getColorForState(stateSet, defaultColor) {\n const setLength = this.mStateSpecs.length;\n for (let i = 0; i < setLength; i++) {\n let stateSpec = this.mStateSpecs[i];\n if (StateSet.stateSetMatches(stateSpec, stateSet)) {\n return this.mColors[i];\n }\n }\n return defaultColor;\n }\n getDefaultColor() {\n return this.mDefaultColor;\n }\n toString() {\n return \"ColorStateList{\" +\n \"mStateSpecs=\" + JSON.stringify(this.mStateSpecs) +\n \"mColors=\" + JSON.stringify(this.mColors) +\n \"mDefaultColor=\" + this.mDefaultColor + '}';\n }\n }\n ColorStateList.EMPTY = [[]];\n ColorStateList.sCache = new SparseArray();\n res.ColorStateList = ColorStateList;\n })(res = content.res || (content.res = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class TypedValue {\n static initUnit() {\n this.initUnit = null;\n let temp = document.createElement('div');\n document.body.appendChild(temp);\n temp.style.height = 100 + TypedValue.COMPLEX_UNIT_PT;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_PT, temp.offsetHeight / 100);\n temp.style.height = 1 + TypedValue.COMPLEX_UNIT_IN;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_IN, temp.offsetHeight);\n temp.style.height = 100 + TypedValue.COMPLEX_UNIT_MM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_MM, temp.offsetHeight / 100);\n temp.style.height = 10 + TypedValue.COMPLEX_UNIT_EM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_EM, temp.offsetHeight / 10);\n temp.style.height = 10 + TypedValue.COMPLEX_UNIT_REM;\n TypedValue.UNIT_SCALE_MAP.set(TypedValue.COMPLEX_UNIT_REM, temp.offsetHeight / 10);\n document.body.removeChild(temp);\n }\n static applyDimension(unit, size, dm) {\n let scale = 1;\n if (unit === TypedValue.COMPLEX_UNIT_DP || unit === TypedValue.COMPLEX_UNIT_DIP || unit === TypedValue.COMPLEX_UNIT_SP) {\n scale = dm.density;\n }\n else {\n scale = TypedValue.UNIT_SCALE_MAP.get(unit) || 1;\n }\n return size * scale;\n }\n static isDynamicUnitValue(valueWithUnit) {\n if (typeof valueWithUnit != \"string\")\n return false;\n return valueWithUnit.match(`${TypedValue.COMPLEX_UNIT_VH}$|${TypedValue.COMPLEX_UNIT_VW}$|${TypedValue.COMPLEX_UNIT_FRACTION}$`) != null;\n }\n static complexToDimension(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n if (this.initUnit)\n this.initUnit();\n if (valueWithUnit === undefined || valueWithUnit === null) {\n throw Error('complexToDimensionPixelSize error: valueWithUnit is ' + valueWithUnit);\n }\n if (valueWithUnit === '' + (Number.parseFloat(valueWithUnit)))\n return Number.parseFloat(valueWithUnit);\n if (typeof valueWithUnit !== 'string')\n valueWithUnit = valueWithUnit + \"\";\n let scale = 1;\n if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PX)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PX, \"\");\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DP, \"\");\n scale = metrics.density;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_DIP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_DIP, \"\");\n scale = metrics.density;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_SP)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_SP, \"\");\n scale = metrics.density * (TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_SP) || 1);\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_PT)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_PT, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_PT) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_IN)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_IN, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_IN) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_MM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_MM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_MM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_EM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_EM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_EM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_REM)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_REM, \"\");\n scale = TypedValue.UNIT_SCALE_MAP.get(TypedValue.COMPLEX_UNIT_REM) || 1;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VH)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VH, \"\");\n scale = metrics.heightPixels / 100;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_VW)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_VW, \"\");\n scale = metrics.widthPixels / 100;\n }\n else if (valueWithUnit.endsWith(TypedValue.COMPLEX_UNIT_FRACTION)) {\n valueWithUnit = valueWithUnit.replace(TypedValue.COMPLEX_UNIT_FRACTION, \"\");\n scale = Number.parseFloat(valueWithUnit) / 100;\n if (Number.isNaN(scale))\n return 0;\n valueWithUnit = baseValue;\n }\n let value = Number.parseFloat(valueWithUnit);\n if (Number.isNaN(value))\n throw Error('complexToDimensionPixelSize error: ' + valueWithUnit);\n return value * scale;\n }\n static complexToDimensionPixelOffset(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n let value = this.complexToDimension(valueWithUnit, baseValue, metrics);\n return Math.floor(value);\n }\n static complexToDimensionPixelSize(valueWithUnit, baseValue = 0, metrics = android.content.res.Resources.getDisplayMetrics()) {\n let value = this.complexToDimension(valueWithUnit, baseValue, metrics);\n let res = Math.ceil(value);\n if (res != 0)\n return res;\n if (value == 0)\n return 0;\n if (value > 0)\n return 1;\n return -1;\n }\n }\n TypedValue.COMPLEX_UNIT_PX = 'px';\n TypedValue.COMPLEX_UNIT_DP = 'dp';\n TypedValue.COMPLEX_UNIT_DIP = 'dip';\n TypedValue.COMPLEX_UNIT_SP = 'sp';\n TypedValue.COMPLEX_UNIT_PT = 'pt';\n TypedValue.COMPLEX_UNIT_IN = 'in';\n TypedValue.COMPLEX_UNIT_MM = 'mm';\n TypedValue.COMPLEX_UNIT_EM = 'em';\n TypedValue.COMPLEX_UNIT_REM = 'rem';\n TypedValue.COMPLEX_UNIT_VH = 'vh';\n TypedValue.COMPLEX_UNIT_VW = 'vw';\n TypedValue.COMPLEX_UNIT_FRACTION = '%';\n TypedValue.UNIT_SCALE_MAP = new Map();\n util.TypedValue = TypedValue;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class LinearInterpolator {\n getInterpolation(input) {\n return input;\n }\n }\n animation.LinearInterpolator = LinearInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var SystemClock = android.os.SystemClock;\n class AnimationUtils {\n static currentAnimationTimeMillis() {\n return SystemClock.uptimeMillis();\n }\n static loadAnimation(context, id) {\n return context.getResources().getAnimation(id);\n }\n }\n animation.AnimationUtils = AnimationUtils;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class LayoutDirection {\n }\n LayoutDirection.LTR = 0;\n LayoutDirection.RTL = 1;\n LayoutDirection.INHERIT = 2;\n LayoutDirection.LOCALE = 3;\n util.LayoutDirection = LayoutDirection;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class Arrays {\n static sort(a, fromIndex, toIndex) {\n Arrays.rangeCheck(a.length, fromIndex, toIndex);\n var sort = androidui.util.ArrayCreator.newNumberArray(toIndex - fromIndex);\n for (let i = fromIndex; i < toIndex; i++) {\n sort[i - fromIndex] = a[i];\n }\n sort.sort((a, b) => {\n return a > b ? 1 : -1;\n });\n for (let i = fromIndex; i < toIndex; i++) {\n a[i] = sort[i - fromIndex];\n }\n }\n static rangeCheck(arrayLength, fromIndex, toIndex) {\n if (fromIndex > toIndex) {\n throw new Error(\"ArrayIndexOutOfBoundsException:fromIndex(\" + fromIndex + \") > toIndex(\" + toIndex + \")\");\n }\n if (fromIndex < 0) {\n throw new Error('ArrayIndexOutOfBoundsException:' + fromIndex);\n }\n if (toIndex > arrayLength) {\n throw new Error('ArrayIndexOutOfBoundsException:' + toIndex);\n }\n }\n static asList(array) {\n let list = new util.ArrayList();\n list.array.push(...array);\n return list;\n }\n static equals(a, a2) {\n if (a == a2)\n return true;\n if (a == null || a2 == null)\n return false;\n let length = a.length;\n if (a2.length != length)\n return false;\n for (let i = 0; i < length; i++) {\n if (a[i] != a2[i])\n return false;\n }\n return true;\n }\n }\n util.Arrays = Arrays;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n class StateAttr {\n constructor(state) {\n this.attributes = new Map();\n this.stateSpec = state.concat().sort();\n }\n clone() {\n let stateAttr = new StateAttr(this.stateSpec);\n stateAttr.attributes = new Map(this.attributes);\n return stateAttr;\n }\n setAttr(name, value) {\n this.attributes.set(name, value);\n }\n hasAttr(name) {\n return this.attributes.has(name);\n }\n getAttrMap() {\n return this.attributes;\n }\n putAll(stateAttr) {\n for (let [key, value] of stateAttr.attributes.entries()) {\n this.attributes.set(key, value);\n }\n }\n isDefaultState() {\n return this.stateSpec.length === 0;\n }\n isStateEquals(state) {\n if (!state)\n return false;\n return java.util.Arrays.equals(this.stateSpec, state.concat().sort());\n }\n isStateMatch(state) {\n return android.util.StateSet.stateSetMatches(this.stateSpec, state);\n }\n createDiffKeyAsNullValueAttrMap(another) {\n if (!another)\n return this.attributes;\n let removed = new Map(another.attributes);\n for (let key of this.attributes.keys())\n removed.delete(key);\n let merge = new Map(this.attributes);\n for (let key of removed.keys())\n merge.set(key, null);\n return merge;\n }\n }\n attr.StateAttr = StateAttr;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nlet STATE_MAP;\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n class StateAttrList {\n constructor(view) {\n this.originStateAttrList = [];\n this.matchedStateAttrList = [];\n this.mView = view;\n this.getOrCreateStateAttr([]);\n }\n static getViewStateValue(attrName) {\n if (!STATE_MAP) {\n STATE_MAP = new Map()\n .set('state_window_focused', android.view.View.VIEW_STATE_WINDOW_FOCUSED)\n .set('state_selected', android.view.View.VIEW_STATE_SELECTED)\n .set('state_focused', android.view.View.VIEW_STATE_FOCUSED)\n .set('state_enabled', android.view.View.VIEW_STATE_ENABLED)\n .set('state_disabled', -android.view.View.VIEW_STATE_ENABLED)\n .set('state_pressed', android.view.View.VIEW_STATE_PRESSED)\n .set('state_activated', android.view.View.VIEW_STATE_ACTIVATED)\n .set('state_hovered', android.view.View.VIEW_STATE_HOVERED)\n .set('state_checked', android.view.View.VIEW_STATE_CHECKED);\n }\n return STATE_MAP.get(attrName.split(':').pop());\n }\n addStatedAttr(attrName, attrValue) {\n this.addStatedAttrImpl(attrName, attrValue, []);\n }\n addStatedAttrImpl(attrName, attrValue, inParseState) {\n const stateValue = StateAttrList.getViewStateValue(attrName);\n if (stateValue != null) {\n const newInParseState = inParseState.concat(stateValue).sort();\n let _stateAttr = this.getOrCreateStateAttr(newInParseState);\n if (attrValue.startsWith('@')) {\n let styleMap = this.mView.getResources().getStyleAsMap(attrValue);\n if (styleMap && styleMap.size > 0) {\n const statedEntries = [];\n for (let entry of styleMap.entries()) {\n const [key, value] = entry;\n if (key.startsWith('android:state_')) {\n statedEntries.push(entry);\n }\n else {\n _stateAttr.setAttr(key.toLowerCase(), value);\n }\n }\n for (let entry of statedEntries) {\n const [key, value] = entry;\n this.addStatedAttrImpl(key, value, newInParseState);\n }\n }\n }\n else {\n for (let part of attrValue.split(';')) {\n let [name, value] = part.split(':');\n name = name.trim();\n if (name) {\n _stateAttr.setAttr('android:' + name.toLowerCase(), value.trim());\n }\n }\n }\n }\n }\n getStateAttr(state) {\n for (let stateAttr of this.originStateAttrList) {\n if (stateAttr.isStateEquals(state))\n return stateAttr;\n }\n }\n getOrCreateStateAttr(state) {\n let stateAttr = this.getStateAttr(state);\n if (!stateAttr) {\n stateAttr = new attr.StateAttr(state);\n this.originStateAttrList.push(stateAttr);\n }\n return stateAttr;\n }\n getMatchedStateAttr(state) {\n if (state == null)\n return null;\n for (let stateAttr of this.matchedStateAttrList) {\n if (stateAttr.isStateEquals(state))\n return stateAttr;\n }\n let matchedAttr = new attr.StateAttr(state);\n for (let stateAttr of this.originStateAttrList) {\n if (stateAttr.isDefaultState())\n continue;\n if (stateAttr.isStateMatch(state)) {\n matchedAttr.putAll(stateAttr);\n }\n }\n this.matchedStateAttrList.push(matchedAttr);\n return matchedAttr;\n }\n removeAttrAllState(attrName) {\n for (let stateAttr of this.originStateAttrList) {\n stateAttr.getAttrMap().delete(attrName);\n }\n for (let stateAttr of this.matchedStateAttrList) {\n stateAttr.getAttrMap().delete(attrName);\n }\n }\n }\n attr.StateAttrList = StateAttrList;\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nfunction fixDefaultNamespaceAndLowerCase(key) {\n key = key.toLowerCase();\n if (!key.includes(':'))\n key = 'android:' + key;\n return key;\n}\nvar androidui;\n(function (androidui) {\n var attr;\n (function (attr) {\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n var Color = android.graphics.Color;\n var ColorStateList = android.content.res.ColorStateList;\n var Resources = android.content.res.Resources;\n class AttrBinder {\n constructor(host) {\n this.objectRefs = [];\n this.host = host;\n }\n setClassAttrBind(classAttrBind) {\n if (classAttrBind) {\n this.classAttrBindMap = classAttrBind;\n }\n }\n addAttr(attrName, onAttrChange, stashAttrValueWhenStateChange) {\n if (!attrName)\n return;\n attrName = fixDefaultNamespaceAndLowerCase(attrName);\n if (onAttrChange) {\n if (!this.attrChangeMap) {\n this.attrChangeMap = new Map();\n }\n this.attrChangeMap.set(attrName, onAttrChange);\n }\n if (stashAttrValueWhenStateChange) {\n this.attrStashMap = new Map();\n this.attrStashMap.set(attrName, stashAttrValueWhenStateChange);\n }\n }\n onAttrChange(attrName, attrValue, context) {\n this.mContext = context;\n if (!attrName)\n return;\n attrName = fixDefaultNamespaceAndLowerCase(attrName);\n let onAttrChangeCall = this.attrChangeMap && this.attrChangeMap.get(attrName);\n if (onAttrChangeCall) {\n onAttrChangeCall.call(this.host, attrValue, this.host);\n }\n if (this.classAttrBindMap) {\n this.classAttrBindMap.callSetter(attrName, this.host, attrValue, this);\n }\n }\n getAttrValue(attrName) {\n if (!attrName)\n return undefined;\n attrName = fixDefaultNamespaceAndLowerCase(attrName);\n let getAttrCall = this.attrStashMap && this.attrStashMap.get(attrName);\n let value;\n if (getAttrCall) {\n value = getAttrCall.call(this.host);\n }\n else if (this.classAttrBindMap) {\n value = this.classAttrBindMap.callGetter(attrName, this.host);\n }\n if (value == null)\n return null;\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"string\")\n return value + '';\n return this.setRefObject(value);\n }\n getRefObject(ref) {\n if (ref && ref.startsWith('@ref/')) {\n ref = ref.substring('@ref/'.length);\n let index = Number.parseInt(ref);\n if (Number.isInteger(index)) {\n return this.objectRefs[index];\n }\n }\n }\n setRefObject(obj) {\n let index = this.objectRefs.indexOf(obj);\n if (index >= 0)\n return '@ref/' + index;\n this.objectRefs.push(obj);\n return '@ref/' + (this.objectRefs.length - 1);\n }\n parsePaddingMarginTRBL(value) {\n value = (value + '');\n let parts = [];\n for (let part of value.split(' ')) {\n if (part)\n parts.push(part);\n }\n let trbl;\n switch (parts.length) {\n case 1:\n trbl = [parts[0], parts[0], parts[0], parts[0]];\n break;\n case 2:\n trbl = [parts[0], parts[1], parts[0], parts[1]];\n break;\n case 3:\n trbl = [parts[0], parts[1], parts[2], parts[1]];\n break;\n case 4:\n trbl = [parts[0], parts[1], parts[2], parts[3]];\n break;\n }\n if (trbl) {\n return trbl.map((v) => this.parseDimension(v));\n }\n throw Error('not a padding or margin value : ' + value);\n }\n parseEnum(value, enumMap, defaultValue) {\n if (Number.isInteger(value)) {\n return value;\n }\n if (enumMap.has(value)) {\n return enumMap.get(value);\n }\n return defaultValue;\n }\n parseBoolean(value, defaultValue = true) {\n if (value === false)\n return false;\n else if (value === true)\n return true;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n if (typeof value === \"string\") {\n return attr.AttrValueParser.parseBoolean(res, value, defaultValue);\n }\n return defaultValue;\n }\n parseGravity(s, defaultValue = Gravity.NO_GRAVITY) {\n let gravity = Number.parseInt(s);\n if (Number.isInteger(gravity))\n return gravity;\n return Gravity.parseGravity(s, defaultValue);\n }\n parseDrawable(s) {\n if (!s)\n return null;\n if (s instanceof Drawable)\n return s;\n if (s.startsWith('@ref/')) {\n let refObj = this.getRefObject(s);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n s = (s + '').trim();\n return attr.AttrValueParser.parseDrawable(res, s);\n }\n parseColor(value, defaultValue) {\n let color = Number.parseInt(value);\n if (Number.isInteger(color))\n return color;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n color = attr.AttrValueParser.parseColor(res, value, defaultValue);\n if (isNaN(color)) {\n return Color.BLACK;\n }\n return color;\n }\n parseColorList(value) {\n if (!value)\n return null;\n if (value instanceof ColorStateList)\n return value;\n if (typeof value == 'number')\n return ColorStateList.valueOf(value);\n if (value.startsWith('@ref/')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseColorStateList(res, value);\n }\n parseInt(value, defaultValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseInt(res, value, defaultValue);\n }\n parseFloat(value, defaultValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseFloat(res, value, defaultValue);\n }\n parseDimension(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimension(res, value, defaultValue, baseValue);\n }\n parseNumberPixelOffset(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimensionPixelOffset(res, value, defaultValue, baseValue);\n }\n parseNumberPixelSize(value, defaultValue = 0, baseValue = 0) {\n if (typeof value == 'number')\n return value;\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseDimensionPixelSize(res, value, defaultValue, baseValue);\n }\n parseString(value, defaultValue) {\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n if (typeof value === 'string') {\n return attr.AttrValueParser.parseString(res, value, defaultValue);\n }\n return defaultValue;\n }\n parseStringArray(value) {\n if (typeof value === 'string') {\n if (value.startsWith('@ref/')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n }\n let res = this.mContext ? this.mContext.getResources() : Resources.getSystem();\n return attr.AttrValueParser.parseTextArray(res, value);\n }\n return null;\n }\n }\n attr.AttrBinder = AttrBinder;\n (function (AttrBinder) {\n class ClassBinderMap {\n constructor(copyBinderMap) {\n this.binderMap = new Map(copyBinderMap);\n }\n set(key, value) {\n key = fixDefaultNamespaceAndLowerCase(key);\n this.binderMap.set(key, value);\n return this;\n }\n get(key) {\n key = fixDefaultNamespaceAndLowerCase(key);\n return this.binderMap.get(key);\n }\n callSetter(attrName, host, attrValue, attrBinder) {\n if (!attrName)\n return;\n let value = this.get(attrName);\n if (value) {\n value.setter.call(host, host, attrValue, attrBinder);\n }\n }\n callGetter(attrName, host) {\n if (!attrName)\n return;\n let value = this.get(attrName);\n if (value) {\n return value.getter.call(host, host);\n }\n }\n }\n AttrBinder.ClassBinderMap = ClassBinderMap;\n })(AttrBinder = attr.AttrBinder || (attr.AttrBinder = {}));\n })(attr = androidui.attr || (androidui.attr = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\n class PerformanceAdjuster {\n static noCanvasMode() {\n android.graphics.Canvas.prototype = HackCanvas.prototype;\n android.view.View.prototype.onDrawVerticalScrollBar =\n function (canvas, scrollBar, l, t, r, b) {\n let scrollBarEl = this.bindElement['VerticalScrollBar'];\n if (!scrollBarEl) {\n scrollBarEl = document.createElement('div');\n this.bindElement['VerticalScrollBar'] = scrollBarEl;\n scrollBarEl.style.zIndex = '9';\n scrollBarEl.style.position = 'absolute';\n scrollBarEl.style.background = 'black';\n scrollBarEl.style.left = '0px';\n scrollBarEl.style.top = '0px';\n this.bindElement.appendChild(scrollBarEl);\n }\n let height = b - t;\n let width = r - l;\n let size = height;\n let thickness = width;\n let extent = this.mScrollCache.scrollBar.mExtent;\n let range = this.mScrollCache.scrollBar.mRange;\n let length = Math.round(size * extent / range);\n let offset = Math.round((size - length) * this.mScrollCache.scrollBar.mOffset / (range - extent));\n if (t < 0)\n t = 0;\n if (offset < 0)\n offset = 0;\n scrollBarEl.style.transform = scrollBarEl.style.webkitTransform = `translate(${l}px, ${t + offset}px)`;\n scrollBarEl.style.width = (r - l) / 2 + 'px';\n scrollBarEl.style.height = length + 'px';\n scrollBarEl.style.opacity = this.mScrollCache.scrollBar.mVerticalThumb.getAlpha() / 255 + '';\n };\n const oldSetBackground = android.view.View.prototype.setBackground;\n android.view.View.prototype.setBackground = function (drawable) {\n oldSetBackground.call(this, drawable);\n if (drawable instanceof ColorDrawable) {\n this.bindElement.style.background = Color.toRGBAFunc(this.mBackground.getColor());\n }\n };\n }\n }\n util.PerformanceAdjuster = PerformanceAdjuster;\n class HackCanvas extends android.graphics.Canvas {\n init() {\n }\n recycle() {\n }\n translate(dx, dy) {\n }\n scale(sx, sy, px, py) {\n }\n rotate(degrees, px, py) {\n }\n drawRGB(r, g, b) {\n }\n drawARGB(a, r, g, b) {\n }\n drawColor(color) {\n }\n clearColor() {\n }\n save() {\n return 1;\n }\n restore() {\n }\n restoreToCount(saveCount) {\n }\n getSaveCount() {\n return 1;\n }\n clipRect(...args) {\n return false;\n }\n getClipBounds(bounds) {\n return null;\n }\n quickReject(...args) {\n return false;\n }\n drawCanvas(canvas, offsetX, offsetY) {\n }\n drawRect(...args) {\n }\n drawText(text, x, y, paint) {\n }\n }\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image_1) {\n var Paint = android.graphics.Paint;\n var Rect = android.graphics.Rect;\n var Drawable = android.graphics.drawable.Drawable;\n class NetDrawable extends Drawable {\n constructor(src, paint, overrideImageRatio) {\n super();\n this.mImageWidth = 0;\n this.mImageHeight = 0;\n let image;\n if (src instanceof image_1.NetImage) {\n image = src;\n if (overrideImageRatio)\n image.mOverrideImageRatio = overrideImageRatio;\n }\n else {\n image = new image_1.NetImage(src, overrideImageRatio);\n }\n image.addLoadListener(() => this.onLoad(), () => this.onError());\n this.mState = new State(image, paint);\n if (image.isImageLoaded())\n this.initBoundWithLoadedImage(image);\n }\n initBoundWithLoadedImage(image) {\n let imageRatio = image.getImageRatio();\n this.mImageWidth = Math.floor(image.width / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.mImageHeight = Math.floor(image.height / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n }\n setURL(url, hiddenWhenLoading = true) {\n if (hiddenWhenLoading) {\n this.mImageWidth = this.mImageHeight = 0;\n }\n this.mState.mImage.src = url;\n }\n draw(canvas) {\n if (!this.isImageSizeEmpty()) {\n let emptyTileX = this.mTileModeX == null || this.mTileModeX == NetDrawable.TileMode.DEFAULT;\n let emptyTileY = this.mTileModeY == null || this.mTileModeY == NetDrawable.TileMode.DEFAULT;\n if (emptyTileX && emptyTileY) {\n canvas.drawImage(this.mState.mImage, null, this.getBounds(), this.mState.paint);\n }\n else {\n this.drawTile(canvas);\n }\n }\n }\n drawTile(canvas) {\n let imageWidth = this.mImageWidth;\n let imageHeight = this.mImageHeight;\n if (imageHeight <= 0 || imageWidth <= 0)\n return;\n let tileX = this.mTileModeX;\n let tileY = this.mTileModeY;\n let bound = this.getBounds();\n if (this.mTmpTileBound == null)\n this.mTmpTileBound = new Rect();\n let tmpBound = this.mTmpTileBound;\n tmpBound.setEmpty();\n function drawColumn() {\n if (tileY === NetDrawable.TileMode.REPEAT) {\n tmpBound.bottom = imageHeight;\n while (tmpBound.isEmpty() || tmpBound.intersects(bound)) {\n canvas.drawImage(this.mState.mImage, null, tmpBound, this.mState.paint);\n tmpBound.offset(0, imageHeight);\n }\n }\n else {\n tmpBound.bottom = bound.height();\n canvas.drawImage(this.mState.mImage, null, tmpBound, this.mState.paint);\n }\n }\n if (tileX === NetDrawable.TileMode.REPEAT) {\n tmpBound.right = imageWidth;\n while (tmpBound.isEmpty() || tmpBound.intersects(bound)) {\n drawColumn.call(this);\n tmpBound.offset(imageWidth, -tmpBound.top);\n }\n }\n else {\n tmpBound.right = bound.width();\n drawColumn.call(this);\n }\n }\n setAlpha(alpha) {\n this.mState.paint.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.paint.getAlpha();\n }\n getIntrinsicWidth() {\n return this.mImageWidth;\n }\n getIntrinsicHeight() {\n return this.mImageHeight;\n }\n onLoad() {\n this.initBoundWithLoadedImage(this.mState.mImage);\n if (this.mLoadListener)\n this.mLoadListener.onLoad(this);\n this.invalidateSelf();\n this.notifySizeChangeSelf();\n }\n onError() {\n this.mImageWidth = this.mImageHeight = 0;\n if (this.mLoadListener)\n this.mLoadListener.onError(this);\n this.invalidateSelf();\n this.notifySizeChangeSelf();\n }\n isImageSizeEmpty() {\n return this.mImageWidth <= 0 || this.mImageHeight <= 0;\n }\n getImage() {\n return this.mState.mImage;\n }\n setLoadListener(loadListener) {\n this.mLoadListener = loadListener;\n }\n setTileMode(tileX, tileY) {\n this.mTileModeX = tileX;\n this.mTileModeY = tileY;\n this.invalidateSelf();\n }\n getConstantState() {\n return this.mState;\n }\n }\n image_1.NetDrawable = NetDrawable;\n (function (NetDrawable) {\n var TileMode;\n (function (TileMode) {\n TileMode[TileMode[\"DEFAULT\"] = 0] = \"DEFAULT\";\n TileMode[TileMode[\"REPEAT\"] = 1] = \"REPEAT\";\n })(TileMode = NetDrawable.TileMode || (NetDrawable.TileMode = {}));\n })(NetDrawable = image_1.NetDrawable || (image_1.NetDrawable = {}));\n class State {\n constructor(image, paint = new Paint()) {\n this.mImage = image;\n this.paint = new Paint();\n if (paint != null)\n this.paint.set(paint);\n }\n newDrawable() {\n return new NetDrawable(this.mImage.src, this.paint);\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class Platform {\n }\n Platform.isIOS = navigator.userAgent.match(/(iPhone|iPad|iPod|ios)/i) ? true : false;\n Platform.isAndroid = navigator.userAgent.match('Android') ? true : false;\n Platform.isWeChat = navigator.userAgent.match(/MicroMessenger/i) ? true : false;\n util.Platform = Platform;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var Platform = androidui.util.Platform;\n const DEBUG = false;\n const TAG = \"KeyEvent\";\n class KeyEvent {\n constructor() {\n this._downingKeyEventMap = new Map();\n }\n static obtain(action, code) {\n let ev = new KeyEvent();\n ev.mDownTime = SystemClock.uptimeMillis();\n ev.mEventTime = SystemClock.uptimeMillis();\n ev.mAction = action;\n ev.mKeyCode = code;\n return ev;\n }\n initKeyEvent(keyEvent, action) {\n this.mEventTime = SystemClock.uptimeMillis();\n this.mKeyCode = keyEvent.keyCode;\n this.mAltKey = keyEvent.altKey;\n this.mShiftKey = keyEvent.shiftKey;\n this.mCtrlKey = keyEvent.ctrlKey;\n this.mMetaKey = keyEvent.metaKey;\n let keyIdentifier = keyEvent['keyIdentifier'] + '';\n if (keyIdentifier) {\n this.mIsTypingKey = keyIdentifier.startsWith('U+');\n if (this.mIsTypingKey) {\n this.mKeyCode = Number.parseInt(keyIdentifier.substr(2), 16) || this.mKeyCode;\n }\n }\n if (this.mKeyCode >= KeyEvent.KEYCODE_Key_a && this.mKeyCode <= KeyEvent.KEYCODE_Key_z\n && this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode -= 32;\n }\n if (this.mKeyCode >= KeyEvent.KEYCODE_KeyA && this.mKeyCode <= KeyEvent.KEYCODE_KeyZ\n && !this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode += 32;\n }\n if (Platform.isAndroid) {\n if (!this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.noMeta[this.mKeyCode] || this.mKeyCode;\n }\n else if (this.mShiftKey && !this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.shift[this.mKeyCode] || this.mKeyCode;\n }\n else if (!this.mShiftKey && this.mCtrlKey && !this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.ctrl[this.mKeyCode] || this.mKeyCode;\n }\n else if (!this.mShiftKey && !this.mCtrlKey && this.mAltKey && !this.mMetaKey) {\n this.mKeyCode = KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME.alt[this.mKeyCode] || this.mKeyCode;\n }\n }\n this.mKeyCode = KeyEvent.FIX_MAP_KEYCODE[this.mKeyCode] || this.mKeyCode;\n if (action === KeyEvent.ACTION_DOWN) {\n this.mDownTime = SystemClock.uptimeMillis();\n let keyEvents = this._downingKeyEventMap.get(keyEvent.keyCode);\n if (keyEvents == null) {\n keyEvents = [];\n this._downingKeyEventMap.set(keyEvent.keyCode, keyEvents);\n }\n keyEvents.push(keyEvent);\n }\n else if (action === KeyEvent.ACTION_UP) {\n this._downingKeyEventMap.delete(keyEvent.keyCode);\n }\n this.mAction = action;\n }\n static isConfirmKey(keyCode) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n return true;\n default:\n return false;\n }\n }\n isAltPressed() {\n return this.mAltKey;\n }\n isShiftPressed() {\n return this.mShiftKey;\n }\n isCtrlPressed() {\n return this.mCtrlKey;\n }\n isMetaPressed() {\n return this.mMetaKey;\n }\n getAction() {\n return this.mAction;\n }\n startTracking() {\n this.mFlags |= KeyEvent.FLAG_START_TRACKING;\n }\n isTracking() {\n return (this.mFlags & KeyEvent.FLAG_TRACKING) != 0;\n }\n isLongPress() {\n return this.getRepeatCount() === 1;\n }\n getKeyCode() {\n return this.mKeyCode;\n }\n getRepeatCount() {\n let downArray = this._downingKeyEventMap.get(this.mKeyCode);\n return downArray ? downArray.length - 1 : 0;\n }\n getDownTime() {\n return this.mDownTime;\n }\n getEventTime() {\n return this.mEventTime;\n }\n dispatch(receiver, state, target) {\n switch (this.mAction) {\n case KeyEvent.ACTION_DOWN: {\n this.mFlags &= ~KeyEvent.FLAG_START_TRACKING;\n if (DEBUG)\n Log.v(TAG, \"Key down to \" + target + \" in \" + state\n + \": \" + this);\n let res = receiver.onKeyDown(this.getKeyCode(), this);\n if (state != null) {\n if (res && this.getRepeatCount() == 0 && (this.mFlags & KeyEvent.FLAG_START_TRACKING) != 0) {\n if (DEBUG)\n Log.v(TAG, \" Start tracking!\");\n state.startTracking(this, target);\n }\n else if (this.isLongPress() && state.isTracking(this)) {\n if (receiver.onKeyLongPress(this.getKeyCode(), this)) {\n if (DEBUG)\n Log.v(TAG, \" Clear from long press!\");\n state.performedLongPress(this);\n res = true;\n }\n }\n }\n return res;\n }\n case KeyEvent.ACTION_UP:\n if (DEBUG)\n Log.v(TAG, \"Key up to \" + target + \" in \" + state\n + \": \" + this);\n if (state != null) {\n state.handleUpEvent(this);\n }\n return receiver.onKeyUp(this.getKeyCode(), this);\n }\n return false;\n }\n hasNoModifiers() {\n if (this.isAltPressed())\n return false;\n if (this.isShiftPressed())\n return false;\n if (this.isCtrlPressed())\n return false;\n if (this.isMetaPressed())\n return false;\n return true;\n }\n hasModifiers(modifiers) {\n if ((modifiers & KeyEvent.META_ALT_ON) === KeyEvent.META_ALT_ON && this.isAltPressed())\n return true;\n if ((modifiers & KeyEvent.META_SHIFT_ON) === KeyEvent.META_SHIFT_ON && this.isShiftPressed())\n return true;\n if ((modifiers & KeyEvent.META_META_ON) === KeyEvent.META_META_ON && this.isMetaPressed())\n return true;\n if ((modifiers & KeyEvent.META_CTRL_ON) === KeyEvent.META_CTRL_ON && this.isCtrlPressed())\n return true;\n }\n getMetaState() {\n let meta = 0;\n if (this.isAltPressed())\n meta |= KeyEvent.META_ALT_ON;\n if (this.isShiftPressed())\n meta |= KeyEvent.META_SHIFT_ON;\n if (this.isCtrlPressed())\n meta |= KeyEvent.META_CTRL_ON;\n if (this.isMetaPressed())\n meta |= KeyEvent.META_META_ON;\n return meta;\n }\n toString() {\n return JSON.stringify(this);\n }\n isCanceled() {\n return false;\n }\n static actionToString(action) {\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return \"ACTION_DOWN\";\n case KeyEvent.ACTION_UP:\n return \"ACTION_UP\";\n default:\n return '' + (action);\n }\n }\n static keyCodeToString(keyCode) {\n return String.fromCharCode(keyCode);\n }\n }\n KeyEvent.KEYCODE_DPAD_UP = 38;\n KeyEvent.KEYCODE_DPAD_DOWN = 40;\n KeyEvent.KEYCODE_DPAD_LEFT = 37;\n KeyEvent.KEYCODE_DPAD_RIGHT = 39;\n KeyEvent.KEYCODE_DPAD_CENTER = 13;\n KeyEvent.KEYCODE_ENTER = 13;\n KeyEvent.KEYCODE_TAB = 9;\n KeyEvent.KEYCODE_SPACE = 32;\n KeyEvent.KEYCODE_ESCAPE = 27;\n KeyEvent.KEYCODE_Backspace = 8;\n KeyEvent.KEYCODE_PAGE_UP = 33;\n KeyEvent.KEYCODE_PAGE_DOWN = 34;\n KeyEvent.KEYCODE_MOVE_HOME = 36;\n KeyEvent.KEYCODE_MOVE_END = 35;\n KeyEvent.KEYCODE_Digit0 = 48;\n KeyEvent.KEYCODE_Digit1 = 49;\n KeyEvent.KEYCODE_Digit2 = 50;\n KeyEvent.KEYCODE_Digit3 = 51;\n KeyEvent.KEYCODE_Digit4 = 52;\n KeyEvent.KEYCODE_Digit5 = 53;\n KeyEvent.KEYCODE_Digit6 = 54;\n KeyEvent.KEYCODE_Digit7 = 55;\n KeyEvent.KEYCODE_Digit8 = 56;\n KeyEvent.KEYCODE_Digit9 = 57;\n KeyEvent.KEYCODE_Key_a = 65;\n KeyEvent.KEYCODE_Key_b = 66;\n KeyEvent.KEYCODE_Key_c = 67;\n KeyEvent.KEYCODE_Key_d = 68;\n KeyEvent.KEYCODE_Key_e = 69;\n KeyEvent.KEYCODE_Key_f = 70;\n KeyEvent.KEYCODE_Key_g = 71;\n KeyEvent.KEYCODE_Key_h = 72;\n KeyEvent.KEYCODE_Key_i = 73;\n KeyEvent.KEYCODE_Key_j = 74;\n KeyEvent.KEYCODE_Key_k = 75;\n KeyEvent.KEYCODE_Key_l = 76;\n KeyEvent.KEYCODE_Key_m = 77;\n KeyEvent.KEYCODE_Key_n = 78;\n KeyEvent.KEYCODE_Key_o = 79;\n KeyEvent.KEYCODE_Key_p = 80;\n KeyEvent.KEYCODE_Key_q = 81;\n KeyEvent.KEYCODE_Key_r = 82;\n KeyEvent.KEYCODE_Key_s = 83;\n KeyEvent.KEYCODE_Key_t = 84;\n KeyEvent.KEYCODE_Key_u = 85;\n KeyEvent.KEYCODE_Key_v = 86;\n KeyEvent.KEYCODE_Key_w = 87;\n KeyEvent.KEYCODE_Key_x = 88;\n KeyEvent.KEYCODE_Key_y = 89;\n KeyEvent.KEYCODE_Key_z = 90;\n KeyEvent.KEYCODE_KeyA = 0x41;\n KeyEvent.KEYCODE_KeyB = 0x42;\n KeyEvent.KEYCODE_KeyC = 0x43;\n KeyEvent.KEYCODE_KeyD = 0x44;\n KeyEvent.KEYCODE_KeyE = 0x45;\n KeyEvent.KEYCODE_KeyF = 0x46;\n KeyEvent.KEYCODE_KeyG = 0x47;\n KeyEvent.KEYCODE_KeyH = 0x48;\n KeyEvent.KEYCODE_KeyI = 0x49;\n KeyEvent.KEYCODE_KeyJ = 0x4a;\n KeyEvent.KEYCODE_KeyK = 0x4b;\n KeyEvent.KEYCODE_KeyL = 0x4c;\n KeyEvent.KEYCODE_KeyM = 0x4d;\n KeyEvent.KEYCODE_KeyN = 0x4e;\n KeyEvent.KEYCODE_KeyO = 0x4f;\n KeyEvent.KEYCODE_KeyP = 0x50;\n KeyEvent.KEYCODE_KeyQ = 0x51;\n KeyEvent.KEYCODE_KeyR = 0x52;\n KeyEvent.KEYCODE_KeyS = 0x53;\n KeyEvent.KEYCODE_KeyT = 0x54;\n KeyEvent.KEYCODE_KeyU = 0x55;\n KeyEvent.KEYCODE_KeyV = 0x56;\n KeyEvent.KEYCODE_KeyW = 0x57;\n KeyEvent.KEYCODE_KeyX = 0x58;\n KeyEvent.KEYCODE_KeyY = 0x59;\n KeyEvent.KEYCODE_KeyZ = 0x5a;\n KeyEvent.KEYCODE_Semicolon = 0x3b;\n KeyEvent.KEYCODE_LessThan = 0x3c;\n KeyEvent.KEYCODE_Equal = 0x3d;\n KeyEvent.KEYCODE_MoreThan = 0x3e;\n KeyEvent.KEYCODE_Question = 0x3f;\n KeyEvent.KEYCODE_Comma = 0x2c;\n KeyEvent.KEYCODE_Period = 0x2e;\n KeyEvent.KEYCODE_Slash = 0x2f;\n KeyEvent.KEYCODE_Quotation = 0x27;\n KeyEvent.KEYCODE_LeftBracket = 0x5b;\n KeyEvent.KEYCODE_Backslash = 0x5c;\n KeyEvent.KEYCODE_RightBracket = 0x5d;\n KeyEvent.KEYCODE_Minus = 0x2d;\n KeyEvent.KEYCODE_Colon = 0x3a;\n KeyEvent.KEYCODE_Double_Quotation = 0x22;\n KeyEvent.KEYCODE_Backquote = 0x60;\n KeyEvent.KEYCODE_Tilde = 0x7e;\n KeyEvent.KEYCODE_Left_Brace = 0x7b;\n KeyEvent.KEYCODE_Or = 0x7c;\n KeyEvent.KEYCODE_Right_Brace = 0x7d;\n KeyEvent.KEYCODE_Del = 0x7f;\n KeyEvent.KEYCODE_Exclamation = 0x21;\n KeyEvent.KEYCODE_Right_Parenthesis = 0x29;\n KeyEvent.KEYCODE_AT = 0x40;\n KeyEvent.KEYCODE_Sharp = 0x23;\n KeyEvent.KEYCODE_Dollar = 0x24;\n KeyEvent.KEYCODE_Percent = 0x25;\n KeyEvent.KEYCODE_Power = 0x5e;\n KeyEvent.KEYCODE_And = 0x26;\n KeyEvent.KEYCODE_Asterisk = 0x2a;\n KeyEvent.KEYCODE_Left_Parenthesis = 0x28;\n KeyEvent.KEYCODE_Underline = 0x5f;\n KeyEvent.KEYCODE_Add = 0x2b;\n KeyEvent.KEYCODE_BACK = -1;\n KeyEvent.KEYCODE_MENU = -2;\n KeyEvent.KEYCODE_CHANGE_ANDROID_CHROME = {\n noMeta: {\n 186: KeyEvent.KEYCODE_Semicolon,\n 187: KeyEvent.KEYCODE_Equal,\n 188: KeyEvent.KEYCODE_Comma,\n 189: KeyEvent.KEYCODE_Minus,\n 190: KeyEvent.KEYCODE_Period,\n 191: KeyEvent.KEYCODE_Slash,\n 192: KeyEvent.KEYCODE_Quotation,\n 219: KeyEvent.KEYCODE_LeftBracket,\n 220: KeyEvent.KEYCODE_Backslash,\n 221: KeyEvent.KEYCODE_RightBracket,\n },\n shift: {\n 186: KeyEvent.KEYCODE_Colon,\n 187: KeyEvent.KEYCODE_Add,\n 188: KeyEvent.KEYCODE_LessThan,\n 189: KeyEvent.KEYCODE_Underline,\n 190: KeyEvent.KEYCODE_MoreThan,\n 191: KeyEvent.KEYCODE_Question,\n 192: KeyEvent.KEYCODE_Double_Quotation,\n 219: KeyEvent.KEYCODE_Left_Brace,\n 220: KeyEvent.KEYCODE_Or,\n 221: KeyEvent.KEYCODE_Right_Brace,\n },\n ctrl: {},\n alt: {}\n };\n KeyEvent.FIX_MAP_KEYCODE = {\n 186: KeyEvent.KEYCODE_Semicolon,\n 187: KeyEvent.KEYCODE_Equal,\n 188: KeyEvent.KEYCODE_Comma,\n 189: KeyEvent.KEYCODE_Minus,\n 190: KeyEvent.KEYCODE_Period,\n 191: KeyEvent.KEYCODE_Slash,\n 192: KeyEvent.KEYCODE_Backquote,\n 219: KeyEvent.KEYCODE_LeftBracket,\n 220: KeyEvent.KEYCODE_Backslash,\n 221: KeyEvent.KEYCODE_RightBracket,\n 222: KeyEvent.KEYCODE_Quotation,\n 96: KeyEvent.KEYCODE_Digit0,\n 97: KeyEvent.KEYCODE_Digit1,\n 98: KeyEvent.KEYCODE_Digit2,\n 99: KeyEvent.KEYCODE_Digit3,\n 100: KeyEvent.KEYCODE_Digit4,\n 101: KeyEvent.KEYCODE_Digit5,\n 102: KeyEvent.KEYCODE_Digit6,\n 103: KeyEvent.KEYCODE_Digit7,\n 104: KeyEvent.KEYCODE_Digit8,\n 105: KeyEvent.KEYCODE_Digit9\n };\n KeyEvent.ACTION_DOWN = 0;\n KeyEvent.ACTION_UP = 1;\n KeyEvent.META_MASK_SHIFT = 16;\n KeyEvent.META_ALT_ON = 0x02;\n KeyEvent.META_SHIFT_ON = 0x1;\n KeyEvent.META_CTRL_ON = 0x1000;\n KeyEvent.META_META_ON = 0x10000;\n KeyEvent.FLAG_CANCELED = 0x20;\n KeyEvent.FLAG_CANCELED_LONG_PRESS = 0x100;\n KeyEvent.FLAG_LONG_PRESS = 0x80;\n KeyEvent.FLAG_TRACKING = 0x200;\n KeyEvent.FLAG_START_TRACKING = 0x40000000;\n view.KeyEvent = KeyEvent;\n (function (KeyEvent) {\n class DispatcherState {\n constructor() {\n this.mActiveLongPresses = new android.util.SparseArray();\n }\n reset(target) {\n if (target == null) {\n if (DEBUG)\n Log.v(TAG, \"Reset: \" + this);\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n this.mActiveLongPresses.clear();\n }\n else {\n if (this.mDownTarget == target) {\n if (DEBUG)\n Log.v(TAG, \"Reset in \" + target + \": \" + this);\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n }\n }\n }\n startTracking(event, target) {\n if (event.getAction() != KeyEvent.ACTION_DOWN) {\n throw new Error(\"Can only start tracking on a down event\");\n }\n if (DEBUG)\n Log.v(TAG, \"Start trackingt in \" + target + \": \" + this);\n this.mDownKeyCode = event.getKeyCode();\n this.mDownTarget = target;\n }\n isTracking(event) {\n return this.mDownKeyCode == event.getKeyCode();\n }\n performedLongPress(event) {\n this.mActiveLongPresses.put(event.getKeyCode(), 1);\n }\n handleUpEvent(event) {\n const keyCode = event.getKeyCode();\n if (DEBUG)\n Log.v(TAG, \"Handle key up \" + event + \": \" + this);\n let index = this.mActiveLongPresses.indexOfKey(keyCode);\n if (index >= 0) {\n if (DEBUG)\n Log.v(TAG, \" Index: \" + index);\n event.mFlags |= KeyEvent.FLAG_CANCELED | KeyEvent.FLAG_CANCELED_LONG_PRESS;\n this.mActiveLongPresses.removeAt(index);\n }\n if (this.mDownKeyCode == keyCode) {\n if (DEBUG)\n Log.v(TAG, \" Tracking!\");\n event.mFlags |= KeyEvent.FLAG_TRACKING;\n this.mDownKeyCode = 0;\n this.mDownTarget = null;\n }\n }\n }\n KeyEvent.DispatcherState = DispatcherState;\n })(KeyEvent = view.KeyEvent || (view.KeyEvent = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_4) {\n var PixelFormat = android.graphics.PixelFormat;\n var Rect = android.graphics.Rect;\n var System = java.lang.System;\n var Drawable = android.graphics.drawable.Drawable;\n class LayerDrawable extends Drawable {\n constructor(layers, state = null) {\n super();\n this.mOpacityOverride = PixelFormat.UNKNOWN;\n this.mTmpRect = new Rect();\n let _as = this.createConstantState(state);\n this.mLayerState = _as;\n if (_as.mNum > 0) {\n this.ensurePadding();\n }\n if (layers != null) {\n let length = layers.length;\n let r = new Array(length);\n for (let i = 0; i < length; i++) {\n r[i] = new LayerDrawable.ChildDrawable();\n r[i].mDrawable = layers[i];\n layers[i].setCallback(this);\n }\n this.mLayerState.mNum = length;\n this.mLayerState.mChildren = r;\n this.ensurePadding();\n }\n }\n createConstantState(state) {\n return new LayerDrawable.LayerState(state, this);\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n this.mOpacityOverride = a.getInt(\"android:opacity\", PixelFormat.UNKNOWN);\n this.setAutoMirrored(a.getBoolean(\"android:autoMirrored\", false));\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n a = r.obtainAttributes(item);\n let left = a.getDimensionPixelOffset(\"android:left\", 0);\n let top = a.getDimensionPixelOffset(\"android:top\", 0);\n let right = a.getDimensionPixelOffset(\"android:right\", 0);\n let bottom = a.getDimensionPixelOffset(\"android:bottom\", 0);\n let dr = a.getDrawable(\"android:drawable\");\n let id = a.getString(\"android:id\");\n a.recycle();\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw Error(`new XmlPullParserException( tag requires a 'drawable' attribute or child tag defining a drawable)`);\n }\n this.addLayer(dr, id, left, top, right, bottom);\n }\n this.ensurePadding();\n this.onStateChange(this.getState());\n }\n addLayer(layer, id, left = 0, top = 0, right = 0, bottom = 0) {\n const st = this.mLayerState;\n let N = st.mChildren != null ? st.mChildren.length : 0;\n let i = st.mNum;\n if (i >= N) {\n let nu = new Array(N + 10);\n if (i > 0) {\n System.arraycopy(st.mChildren, 0, nu, 0, i);\n }\n st.mChildren = nu;\n }\n let childDrawable = new LayerDrawable.ChildDrawable();\n st.mChildren[i] = childDrawable;\n childDrawable.mId = id;\n childDrawable.mDrawable = layer;\n childDrawable.mDrawable.setAutoMirrored(this.isAutoMirrored());\n childDrawable.mInsetL = left;\n childDrawable.mInsetT = top;\n childDrawable.mInsetR = right;\n childDrawable.mInsetB = bottom;\n st.mNum++;\n layer.setCallback(this);\n }\n findDrawableByLayerId(id) {\n const layers = this.mLayerState.mChildren;\n for (let i = this.mLayerState.mNum - 1; i >= 0; i--) {\n if (layers[i].mId == id) {\n return layers[i].mDrawable;\n }\n }\n return null;\n }\n setId(index, id) {\n this.mLayerState.mChildren[index].mId = id;\n }\n getNumberOfLayers() {\n return this.mLayerState.mNum;\n }\n getDrawable(index) {\n return this.mLayerState.mChildren[index].mDrawable;\n }\n getId(index) {\n return this.mLayerState.mChildren[index].mId;\n }\n setDrawableByLayerId(id, drawable) {\n const layers = this.mLayerState.mChildren;\n for (let i = this.mLayerState.mNum - 1; i >= 0; i--) {\n if (layers[i].mId == id) {\n if (layers[i].mDrawable != null) {\n if (drawable != null) {\n let bounds = layers[i].mDrawable.getBounds();\n drawable.setBounds(bounds);\n }\n layers[i].mDrawable.setCallback(null);\n }\n if (drawable != null) {\n drawable.setCallback(this);\n }\n layers[i].mDrawable = drawable;\n return true;\n }\n }\n return false;\n }\n setLayerInset(index, l, t, r, b) {\n let childDrawable = this.mLayerState.mChildren[index];\n childDrawable.mInsetL = l;\n childDrawable.mInsetT = t;\n childDrawable.mInsetR = r;\n childDrawable.mInsetB = b;\n }\n drawableSizeChange(who) {\n let callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.draw(canvas);\n }\n }\n getPadding(padding) {\n padding.left = 0;\n padding.top = 0;\n padding.right = 0;\n padding.bottom = 0;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n this.reapplyPadding(i, array[i]);\n padding.left += this.mPaddingL[i];\n padding.top += this.mPaddingT[i];\n padding.right += this.mPaddingR[i];\n padding.bottom += this.mPaddingB[i];\n }\n return true;\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setVisible(visible, restart);\n }\n return changed;\n }\n setDither(dither) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setDither(dither);\n }\n }\n setAlpha(alpha) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setAlpha(alpha);\n }\n }\n getAlpha() {\n const array = this.mLayerState.mChildren;\n if (this.mLayerState.mNum > 0) {\n return array[0].mDrawable.getAlpha();\n }\n else {\n return super.getAlpha();\n }\n }\n setOpacity(opacity) {\n this.mOpacityOverride = opacity;\n }\n getOpacity() {\n if (this.mOpacityOverride != PixelFormat.UNKNOWN) {\n return this.mOpacityOverride;\n }\n return this.mLayerState.getOpacity();\n }\n setAutoMirrored(mirrored) {\n this.mLayerState.mAutoMirrored = mirrored;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.setAutoMirrored(mirrored);\n }\n }\n isAutoMirrored() {\n return this.mLayerState.mAutoMirrored;\n }\n isStateful() {\n return this.mLayerState.isStateful();\n }\n onStateChange(state) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let paddingChanged = false;\n let changed = false;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n if (r.mDrawable.setState(state)) {\n changed = true;\n }\n if (this.reapplyPadding(i, r)) {\n paddingChanged = true;\n }\n }\n if (paddingChanged) {\n this.onBoundsChange(this.getBounds());\n }\n return changed;\n }\n onLevelChange(level) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let paddingChanged = false;\n let changed = false;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n if (r.mDrawable.setLevel(level)) {\n changed = true;\n }\n if (this.reapplyPadding(i, r)) {\n paddingChanged = true;\n }\n }\n if (paddingChanged) {\n this.onBoundsChange(this.getBounds());\n }\n return changed;\n }\n onBoundsChange(bounds) {\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padL = 0, padT = 0, padR = 0, padB = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n r.mDrawable.setBounds(bounds.left + r.mInsetL + padL, bounds.top + r.mInsetT + padT, bounds.right - r.mInsetR - padR, bounds.bottom - r.mInsetB - padB);\n padL += this.mPaddingL[i];\n padR += this.mPaddingR[i];\n padT += this.mPaddingT[i];\n padB += this.mPaddingB[i];\n }\n }\n getIntrinsicWidth() {\n let width = -1;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padL = 0, padR = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n let w = r.mDrawable.getIntrinsicWidth() + r.mInsetL + r.mInsetR + padL + padR;\n if (w > width) {\n width = w;\n }\n padL += this.mPaddingL[i];\n padR += this.mPaddingR[i];\n }\n return width;\n }\n getIntrinsicHeight() {\n let height = -1;\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n let padT = 0, padB = 0;\n for (let i = 0; i < N; i++) {\n const r = array[i];\n let h = r.mDrawable.getIntrinsicHeight() + r.mInsetT + r.mInsetB + padT + padB;\n if (h > height) {\n height = h;\n }\n padT += this.mPaddingT[i];\n padB += this.mPaddingB[i];\n }\n return height;\n }\n reapplyPadding(i, r) {\n const rect = this.mTmpRect;\n r.mDrawable.getPadding(rect);\n if (rect.left != this.mPaddingL[i] || rect.top != this.mPaddingT[i] || rect.right != this.mPaddingR[i] || rect.bottom != this.mPaddingB[i]) {\n this.mPaddingL[i] = rect.left;\n this.mPaddingT[i] = rect.top;\n this.mPaddingR[i] = rect.right;\n this.mPaddingB[i] = rect.bottom;\n return true;\n }\n return false;\n }\n ensurePadding() {\n const N = this.mLayerState.mNum;\n if (this.mPaddingL != null && this.mPaddingL.length >= N) {\n return;\n }\n this.mPaddingL = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingT = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingR = androidui.util.ArrayCreator.newNumberArray(N);\n this.mPaddingB = androidui.util.ArrayCreator.newNumberArray(N);\n for (var i = 0; i < N; i++) {\n this.mPaddingL[i] = 0;\n this.mPaddingT[i] = 0;\n this.mPaddingR[i] = 0;\n this.mPaddingB[i] = 0;\n }\n }\n getConstantState() {\n if (this.mLayerState.canConstantState()) {\n return this.mLayerState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mLayerState = this.createConstantState(this.mLayerState);\n const array = this.mLayerState.mChildren;\n const N = this.mLayerState.mNum;\n for (let i = 0; i < N; i++) {\n array[i].mDrawable.mutate();\n }\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_4.LayerDrawable = LayerDrawable;\n (function (LayerDrawable) {\n class ChildDrawable {\n constructor() {\n this.mInsetL = 0;\n this.mInsetT = 0;\n this.mInsetR = 0;\n this.mInsetB = 0;\n }\n }\n LayerDrawable.ChildDrawable = ChildDrawable;\n class LayerState {\n constructor(orig, owner) {\n this.mNum = 0;\n this.mHaveOpacity = false;\n this.mOpacity = 0;\n this.mHaveStateful = false;\n if (orig != null) {\n const origChildDrawable = orig.mChildren;\n const N = orig.mNum;\n this.mNum = N;\n this.mChildren = new Array(N);\n for (let i = 0; i < N; i++) {\n const r = this.mChildren[i] = new LayerDrawable.ChildDrawable();\n const or = origChildDrawable[i];\n r.mDrawable = or.mDrawable.getConstantState().newDrawable();\n r.mDrawable.setCallback(owner);\n r.mInsetL = or.mInsetL;\n r.mInsetT = or.mInsetT;\n r.mInsetR = or.mInsetR;\n r.mInsetB = or.mInsetB;\n r.mId = or.mId;\n }\n this.mHaveOpacity = orig.mHaveOpacity;\n this.mOpacity = orig.mOpacity;\n this.mHaveStateful = orig.mHaveStateful;\n this.mStateful = orig.mStateful;\n this.mCheckedConstantState = this.mCanConstantState = true;\n this.mAutoMirrored = orig.mAutoMirrored;\n }\n else {\n this.mNum = 0;\n this.mChildren = null;\n }\n }\n newDrawable() {\n return new LayerDrawable(null, this);\n }\n getOpacity() {\n if (this.mHaveOpacity) {\n return this.mOpacity;\n }\n const N = this.mNum;\n let op = N > 0 ? this.mChildren[0].mDrawable.getOpacity() : PixelFormat.TRANSPARENT;\n for (let i = 1; i < N; i++) {\n op = Drawable.resolveOpacity(op, this.mChildren[i].mDrawable.getOpacity());\n }\n this.mOpacity = op;\n this.mHaveOpacity = true;\n return op;\n }\n isStateful() {\n if (this.mHaveStateful) {\n return this.mStateful;\n }\n let stateful = false;\n const N = this.mNum;\n for (let i = 0; i < N; i++) {\n if (this.mChildren[i].mDrawable.isStateful()) {\n stateful = true;\n break;\n }\n }\n this.mStateful = stateful;\n this.mHaveStateful = true;\n return stateful;\n }\n canConstantState() {\n if (!this.mCheckedConstantState && this.mChildren != null) {\n this.mCanConstantState = true;\n const N = this.mNum;\n for (let i = 0; i < N; i++) {\n if (this.mChildren[i].mDrawable.getConstantState() == null) {\n this.mCanConstantState = false;\n break;\n }\n }\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n LayerDrawable.LayerState = LayerState;\n })(LayerDrawable = drawable_4.LayerDrawable || (drawable_4.LayerDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_5) {\n var Log = android.util.Log;\n var Drawable = android.graphics.drawable.Drawable;\n class RotateDrawable extends Drawable {\n constructor(rotateState) {\n super();\n this.mState = new RotateDrawable.RotateState(rotateState, this);\n }\n draw(canvas) {\n let saveCount = canvas.save();\n let bounds = this.mState.mDrawable.getBounds();\n let w = bounds.right - bounds.left;\n let h = bounds.bottom - bounds.top;\n const st = this.mState;\n let px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;\n let py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY;\n canvas.rotate(st.mCurrentDegrees, px + bounds.left, py + bounds.top);\n st.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mState.mDrawable.getOpacity();\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onLevelChange(level) {\n this.mState.mDrawable.setLevel(level);\n this.onBoundsChange(this.getBounds());\n this.mState.mCurrentDegrees = this.mState.mFromDegrees + (this.mState.mToDegrees - this.mState.mFromDegrees) * (level / RotateDrawable.MAX_LEVEL);\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n this.mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let tv = a.getString(\"android:pivotX\");\n let pivotXRel;\n let pivotX;\n if (tv == null) {\n pivotXRel = true;\n pivotX = 0.5;\n }\n else {\n pivotXRel = tv.endsWith('%');\n pivotX = a.getFloat('android:pivotX', 0.5);\n }\n tv = a.getString(\"android:pivotY\");\n let pivotYRel;\n let pivotY;\n if (tv == null) {\n pivotYRel = true;\n pivotY = 0.5;\n }\n else {\n pivotYRel = tv.endsWith('%');\n pivotY = a.getFloat('android:pivotY', 0.5);\n }\n let fromDegrees = a.getFloat(\"android:fromDegrees\", 0.0);\n let toDegrees = a.getFloat(\"android:toDegrees\", 360.0);\n let drawable = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!drawable && parser.children[0] instanceof HTMLElement) {\n drawable = Drawable.createFromXml(r, parser.children[0]);\n }\n if (drawable == null) {\n Log.w(\"drawable\", \"No drawable specified for \");\n }\n this.mState.mDrawable = drawable;\n this.mState.mPivotXRel = pivotXRel;\n this.mState.mPivotX = pivotX;\n this.mState.mPivotYRel = pivotYRel;\n this.mState.mPivotY = pivotY;\n this.mState.mFromDegrees = this.mState.mCurrentDegrees = fromDegrees;\n this.mState.mToDegrees = toDegrees;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n }\n RotateDrawable.MAX_LEVEL = 10000.0;\n drawable_5.RotateDrawable = RotateDrawable;\n (function (RotateDrawable) {\n class RotateState {\n constructor(source, owner) {\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mFromDegrees = 0;\n this.mToDegrees = 0;\n this.mCurrentDegrees = 0;\n if (source != null) {\n this.mDrawable = source.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mPivotXRel = source.mPivotXRel;\n this.mPivotX = source.mPivotX;\n this.mPivotYRel = source.mPivotYRel;\n this.mPivotY = source.mPivotY;\n this.mFromDegrees = this.mCurrentDegrees = source.mFromDegrees;\n this.mToDegrees = source.mToDegrees;\n this.mCanConstantState = this.mCheckedConstantState = true;\n }\n }\n newDrawable() {\n return new RotateDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n RotateDrawable.RotateState = RotateState;\n })(RotateDrawable = drawable_5.RotateDrawable || (drawable_5.RotateDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Float {\n static parseFloat(value) {\n return Number.parseFloat(value);\n }\n }\n Float.MIN_VALUE = Number.MIN_VALUE;\n Float.MAX_VALUE = Number.MAX_VALUE;\n lang.Float = Float;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_6) {\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n class ScaleDrawable extends Drawable {\n constructor(...args) {\n super();\n this.mTmpRect = new Rect();\n if (args.length <= 1) {\n this.mScaleState = new ScaleDrawable.ScaleState(args[0], this);\n return;\n }\n let drawable = args[0];\n let gravity = args[1];\n let scaleWidth = args[2];\n let scaleHeight = args[3];\n this.mScaleState = new ScaleDrawable.ScaleState(null, this);\n this.mScaleState.mDrawable = drawable;\n this.mScaleState.mGravity = gravity;\n this.mScaleState.mScaleWidth = scaleWidth;\n this.mScaleState.mScaleHeight = scaleHeight;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n getDrawable() {\n return this.mScaleState.mDrawable;\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let sw = a.getFloat(\"android:scaleWidth\", 1);\n let sh = a.getFloat(\"android:scaleHeight\", 1);\n let gStr = a.getString(\"android:scaleGravity\");\n let g = Gravity.parseGravity(gStr, Gravity.LEFT);\n let min = a.getBoolean(\"android:useIntrinsicSizeAsMinimum\", false);\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, parser.children[0]);\n }\n if (dr == null) {\n throw Error(`new IllegalArgumentException(\"No drawable specified for \")`);\n }\n this.mScaleState.mDrawable = dr;\n this.mScaleState.mScaleWidth = sw;\n this.mScaleState.mScaleHeight = sh;\n this.mScaleState.mGravity = g;\n this.mScaleState.mUseIntrinsicSizeAsMin = min;\n if (dr != null) {\n dr.setCallback(this);\n }\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n if (this.getCallback() != null) {\n this.getCallback().invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n if (this.getCallback() != null) {\n this.getCallback().scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n if (this.getCallback() != null) {\n this.getCallback().unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n if (this.mScaleState.mDrawable.getLevel() != 0)\n this.mScaleState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n return this.mScaleState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mScaleState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mScaleState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mScaleState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mScaleState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mScaleState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mScaleState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onLevelChange(level) {\n this.mScaleState.mDrawable.setLevel(level);\n this.onBoundsChange(this.getBounds());\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n const r = this.mTmpRect;\n const min = this.mScaleState.mUseIntrinsicSizeAsMin;\n let level = this.getLevel();\n let w = bounds.width();\n if (this.mScaleState.mScaleWidth > 0) {\n const iw = min ? this.mScaleState.mDrawable.getIntrinsicWidth() : 0;\n w -= Math.floor(((w - iw) * (10000 - level) * this.mScaleState.mScaleWidth / 10000));\n }\n let h = bounds.height();\n if (this.mScaleState.mScaleHeight > 0) {\n const ih = min ? this.mScaleState.mDrawable.getIntrinsicHeight() : 0;\n h -= Math.floor(((h - ih) * (10000 - level) * this.mScaleState.mScaleHeight / 10000));\n }\n Gravity.apply(this.mScaleState.mGravity, w, h, bounds, r);\n if (w > 0 && h > 0) {\n this.mScaleState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n }\n getIntrinsicWidth() {\n return this.mScaleState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mScaleState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mScaleState.canConstantState()) {\n return this.mScaleState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mScaleState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_6.ScaleDrawable = ScaleDrawable;\n (function (ScaleDrawable) {\n class ScaleState {\n constructor(orig, owner) {\n this.mScaleWidth = 0;\n this.mScaleHeight = 0;\n this.mGravity = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mScaleWidth = orig.mScaleWidth;\n this.mScaleHeight = orig.mScaleHeight;\n this.mGravity = orig.mGravity;\n this.mUseIntrinsicSizeAsMin = orig.mUseIntrinsicSizeAsMin;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n return new ScaleDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n ScaleDrawable.ScaleState = ScaleState;\n })(ScaleDrawable = drawable_6.ScaleDrawable || (drawable_6.ScaleDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Animatable;\n (function (Animatable) {\n function isImpl(obj) {\n return obj && obj['start'] && obj['stop'] && obj['isRunning'];\n }\n Animatable.isImpl = isImpl;\n })(Animatable = drawable.Animatable || (drawable.Animatable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var Rect = android.graphics.Rect;\n var PixelFormat = android.graphics.PixelFormat;\n var Log = android.util.Log;\n var SparseArray = android.util.SparseArray;\n var SystemClock = android.os.SystemClock;\n class DrawableContainer extends drawable.Drawable {\n constructor() {\n super(...arguments);\n this.mAlpha = 0xFF;\n this.mCurIndex = -1;\n this.mMutated = false;\n this.mEnterAnimationEnd = 0;\n this.mExitAnimationEnd = 0;\n }\n draw(canvas) {\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.draw(canvas);\n }\n if (this.mLastDrawable != null) {\n this.mLastDrawable.draw(canvas);\n }\n }\n needsMirroring() {\n return false && this.isAutoMirrored();\n }\n getPadding(padding) {\n const r = this.mDrawableContainerState.getConstantPadding();\n let result;\n if (r != null) {\n padding.set(r);\n result = (r.left | r.top | r.bottom | r.right) != 0;\n }\n else {\n if (this.mCurrDrawable != null) {\n result = this.mCurrDrawable.getPadding(padding);\n }\n else {\n result = super.getPadding(padding);\n }\n }\n if (this.needsMirroring()) {\n const left = padding.left;\n const right = padding.right;\n padding.left = right;\n padding.right = left;\n }\n return result;\n }\n setAlpha(alpha) {\n if (this.mAlpha != alpha) {\n this.mAlpha = alpha;\n if (this.mCurrDrawable != null) {\n if (this.mEnterAnimationEnd == 0) {\n this.mCurrDrawable.mutate().setAlpha(alpha);\n }\n else {\n this.animate(false);\n }\n }\n }\n }\n getAlpha() {\n return this.mAlpha;\n }\n setDither(dither) {\n if (this.mDrawableContainerState.mDither != dither) {\n this.mDrawableContainerState.mDither = dither;\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.mutate().setDither(this.mDrawableContainerState.mDither);\n }\n }\n }\n setEnterFadeDuration(ms) {\n this.mDrawableContainerState.mEnterFadeDuration = ms;\n }\n setExitFadeDuration(ms) {\n this.mDrawableContainerState.mExitFadeDuration = ms;\n }\n onBoundsChange(bounds) {\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setBounds(bounds);\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setBounds(bounds);\n }\n }\n isStateful() {\n return this.mDrawableContainerState.isStateful();\n }\n setAutoMirrored(mirrored) {\n this.mDrawableContainerState.mAutoMirrored = mirrored;\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.mutate().setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);\n }\n }\n isAutoMirrored() {\n return this.mDrawableContainerState.mAutoMirrored;\n }\n jumpToCurrentState() {\n let changed = false;\n if (this.mLastDrawable != null) {\n this.mLastDrawable.jumpToCurrentState();\n this.mLastDrawable = null;\n changed = true;\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.jumpToCurrentState();\n this.mCurrDrawable.mutate().setAlpha(this.mAlpha);\n }\n if (this.mExitAnimationEnd != 0) {\n this.mExitAnimationEnd = 0;\n changed = true;\n }\n if (this.mEnterAnimationEnd != 0) {\n this.mEnterAnimationEnd = 0;\n changed = true;\n }\n if (changed) {\n this.invalidateSelf();\n }\n }\n onStateChange(state) {\n if (this.mLastDrawable != null) {\n return this.mLastDrawable.setState(state);\n }\n if (this.mCurrDrawable != null) {\n return this.mCurrDrawable.setState(state);\n }\n return false;\n }\n onLevelChange(level) {\n if (this.mLastDrawable != null) {\n return this.mLastDrawable.setLevel(level);\n }\n if (this.mCurrDrawable != null) {\n return this.mCurrDrawable.setLevel(level);\n }\n return false;\n }\n getIntrinsicWidth() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantWidth();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getIntrinsicWidth() : -1;\n }\n getIntrinsicHeight() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantHeight();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getIntrinsicHeight() : -1;\n }\n getMinimumWidth() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantMinimumWidth();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getMinimumWidth() : 0;\n }\n getMinimumHeight() {\n if (this.mDrawableContainerState.isConstantSize()) {\n return this.mDrawableContainerState.getConstantMinimumHeight();\n }\n return this.mCurrDrawable != null ? this.mCurrDrawable.getMinimumHeight() : 0;\n }\n drawableSizeChange(who) {\n let callback = this.getCallback();\n if (who == this.mCurrDrawable && callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n if (who == this.mCurrDrawable && this.getCallback() != null) {\n this.getCallback().unscheduleDrawable(this, what);\n }\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setVisible(visible, restart);\n }\n if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setVisible(visible, restart);\n }\n return changed;\n }\n getOpacity() {\n return this.mCurrDrawable == null || !this.mCurrDrawable.isVisible() ? PixelFormat.TRANSPARENT :\n this.mDrawableContainerState.getOpacity();\n }\n selectDrawable(idx) {\n if (idx == this.mCurIndex) {\n return false;\n }\n const now = SystemClock.uptimeMillis();\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" from \" + this.mCurIndex + \" to \" + idx\n + \": exit=\" + this.mDrawableContainerState.mExitFadeDuration\n + \" enter=\" + this.mDrawableContainerState.mEnterFadeDuration);\n if (this.mDrawableContainerState.mExitFadeDuration > 0) {\n if (this.mLastDrawable != null) {\n this.mLastDrawable.setVisible(false, false);\n }\n if (this.mCurrDrawable != null) {\n this.mLastDrawable = this.mCurrDrawable;\n this.mExitAnimationEnd = now + this.mDrawableContainerState.mExitFadeDuration;\n }\n else {\n this.mLastDrawable = null;\n this.mExitAnimationEnd = 0;\n }\n }\n else if (this.mCurrDrawable != null) {\n this.mCurrDrawable.setVisible(false, false);\n }\n if (idx >= 0 && idx < this.mDrawableContainerState.mNumChildren) {\n const d = this.mDrawableContainerState.getChild(idx);\n this.mCurrDrawable = d;\n this.mCurIndex = idx;\n if (d != null) {\n d.mutate();\n if (this.mDrawableContainerState.mEnterFadeDuration > 0) {\n this.mEnterAnimationEnd = now + this.mDrawableContainerState.mEnterFadeDuration;\n }\n else {\n d.setAlpha(this.mAlpha);\n }\n d.setVisible(this.isVisible(), true);\n d.setDither(this.mDrawableContainerState.mDither);\n d.setState(this.getState());\n d.setLevel(this.getLevel());\n d.setBounds(this.getBounds());\n d.setAutoMirrored(this.mDrawableContainerState.mAutoMirrored);\n }\n else {\n }\n }\n else {\n this.mCurrDrawable = null;\n this.mCurIndex = -1;\n }\n if (this.mEnterAnimationEnd != 0 || this.mExitAnimationEnd != 0) {\n if (this.mAnimationRunnable == null) {\n let t = this;\n this.mAnimationRunnable = {\n run() {\n t.animate(true);\n t.invalidateSelf();\n }\n };\n }\n else {\n this.unscheduleSelf(this.mAnimationRunnable);\n }\n this.animate(true);\n }\n this.invalidateSelf();\n return true;\n }\n animate(schedule) {\n const now = SystemClock.uptimeMillis();\n let animating = false;\n if (this.mCurrDrawable != null) {\n if (this.mEnterAnimationEnd != 0) {\n if (this.mEnterAnimationEnd <= now) {\n this.mCurrDrawable.mutate().setAlpha(this.mAlpha);\n this.mEnterAnimationEnd = 0;\n }\n else {\n let animAlpha = ((this.mEnterAnimationEnd - now) * 255)\n / this.mDrawableContainerState.mEnterFadeDuration;\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" cur alpha \" + animAlpha);\n this.mCurrDrawable.mutate().setAlpha(((255 - animAlpha) * this.mAlpha) / 255);\n animating = true;\n }\n }\n }\n else {\n this.mEnterAnimationEnd = 0;\n }\n if (this.mLastDrawable != null) {\n if (this.mExitAnimationEnd != 0) {\n if (this.mExitAnimationEnd <= now) {\n this.mLastDrawable.setVisible(false, false);\n this.mLastDrawable = null;\n this.mExitAnimationEnd = 0;\n }\n else {\n let animAlpha = ((this.mExitAnimationEnd - now) * 255)\n / this.mDrawableContainerState.mExitFadeDuration;\n if (DrawableContainer.DEBUG)\n android.util.Log.i(DrawableContainer.TAG, toString() + \" last alpha \" + animAlpha);\n this.mLastDrawable.mutate().setAlpha((animAlpha * this.mAlpha) / 255);\n animating = true;\n }\n }\n }\n else {\n this.mExitAnimationEnd = 0;\n }\n if (schedule && animating) {\n this.scheduleSelf(this.mAnimationRunnable, now + 1000 / 60);\n }\n }\n getCurrent() {\n return this.mCurrDrawable;\n }\n getConstantState() {\n if (this.mDrawableContainerState.canConstantState()) {\n return this.mDrawableContainerState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mDrawableContainerState.mutate();\n this.mMutated = true;\n }\n return this;\n }\n setConstantState(state) {\n this.mDrawableContainerState = state;\n }\n }\n DrawableContainer.DEBUG = Log.DBG_DrawableContainer;\n DrawableContainer.TAG = \"DrawableContainer\";\n DrawableContainer.DEFAULT_DITHER = true;\n drawable.DrawableContainer = DrawableContainer;\n (function (DrawableContainer) {\n class DrawableContainerState {\n constructor(orig, owner) {\n this.mVariablePadding = false;\n this.mPaddingChecked = false;\n this.mConstantSize = false;\n this.mComputedConstantSize = false;\n this.mConstantWidth = 0;\n this.mConstantHeight = 0;\n this.mConstantMinimumWidth = 0;\n this.mConstantMinimumHeight = 0;\n this.mCheckedOpacity = false;\n this.mOpacity = 0;\n this.mCheckedStateful = false;\n this.mStateful = false;\n this.mCheckedConstantState = false;\n this.mCanConstantState = false;\n this.mDither = DrawableContainer.DEFAULT_DITHER;\n this.mMutated = false;\n this.mEnterFadeDuration = 0;\n this.mExitFadeDuration = 0;\n this.mAutoMirrored = false;\n this.mOwner = owner;\n if (orig != null) {\n this.mCheckedConstantState = true;\n this.mCanConstantState = true;\n this.mVariablePadding = orig.mVariablePadding;\n this.mConstantSize = orig.mConstantSize;\n this.mDither = orig.mDither;\n this.mMutated = orig.mMutated;\n this.mEnterFadeDuration = orig.mEnterFadeDuration;\n this.mExitFadeDuration = orig.mExitFadeDuration;\n this.mAutoMirrored = orig.mAutoMirrored;\n this.mConstantPadding = orig.getConstantPadding();\n this.mPaddingChecked = true;\n this.mConstantWidth = orig.getConstantWidth();\n this.mConstantHeight = orig.getConstantHeight();\n this.mConstantMinimumWidth = orig.getConstantMinimumWidth();\n this.mConstantMinimumHeight = orig.getConstantMinimumHeight();\n this.mComputedConstantSize = true;\n this.mOpacity = orig.getOpacity();\n this.mCheckedOpacity = true;\n this.mStateful = orig.isStateful();\n this.mCheckedStateful = true;\n const origDr = orig.mDrawables;\n this.mDrawables = new Array(0);\n const origDf = orig.mDrawableFutures;\n if (origDf != null) {\n this.mDrawableFutures = origDf.clone();\n }\n else {\n this.mDrawableFutures = new SparseArray(this.mNumChildren);\n }\n const N = this.mNumChildren;\n for (let i = 0; i < N; i++) {\n if (origDr[i] != null) {\n this.mDrawableFutures.put(i, new ConstantStateFuture(origDr[i]));\n }\n }\n }\n else {\n this.mDrawables = new Array(0);\n }\n }\n get mNumChildren() {\n return this.mDrawables.length;\n }\n addChild(dr) {\n const pos = this.mNumChildren;\n dr.setVisible(false, true);\n dr.setCallback(this.mOwner);\n this.mDrawables.push(dr);\n this.mCheckedStateful = false;\n this.mCheckedOpacity = false;\n this.mConstantPadding = null;\n this.mPaddingChecked = false;\n this.mComputedConstantSize = false;\n return pos;\n }\n getCapacity() {\n return this.mDrawables.length;\n }\n createAllFutures() {\n if (this.mDrawableFutures != null) {\n const futureCount = this.mDrawableFutures.size();\n for (let keyIndex = 0; keyIndex < futureCount; keyIndex++) {\n const index = this.mDrawableFutures.keyAt(keyIndex);\n this.mDrawables[index] = this.mDrawableFutures.valueAt(keyIndex).get(this);\n }\n this.mDrawableFutures = null;\n }\n }\n getChildCount() {\n return this.mNumChildren;\n }\n getChildren() {\n this.createAllFutures();\n return this.mDrawables;\n }\n getChild(index) {\n const result = this.mDrawables[index];\n if (result != null) {\n return result;\n }\n if (this.mDrawableFutures != null) {\n const keyIndex = this.mDrawableFutures.indexOfKey(index);\n if (keyIndex >= 0) {\n const prepared = this.mDrawableFutures.valueAt(keyIndex).get(this);\n this.mDrawables[index] = prepared;\n this.mDrawableFutures.removeAt(keyIndex);\n return prepared;\n }\n }\n return null;\n }\n mutate() {\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i] != null) {\n drawables[i].mutate();\n }\n }\n this.mMutated = true;\n }\n setVariablePadding(variable) {\n this.mVariablePadding = variable;\n }\n getConstantPadding() {\n if (this.mVariablePadding) {\n return null;\n }\n if ((this.mConstantPadding != null) || this.mPaddingChecked) {\n return this.mConstantPadding;\n }\n this.createAllFutures();\n let r = null;\n const t = new Rect();\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].getPadding(t)) {\n if (r == null)\n r = new Rect(0, 0, 0, 0);\n if (t.left > r.left)\n r.left = t.left;\n if (t.top > r.top)\n r.top = t.top;\n if (t.right > r.right)\n r.right = t.right;\n if (t.bottom > r.bottom)\n r.bottom = t.bottom;\n }\n }\n this.mPaddingChecked = true;\n return (this.mConstantPadding = r);\n }\n setConstantSize(constant) {\n this.mConstantSize = constant;\n }\n isConstantSize() {\n return this.mConstantSize;\n }\n getConstantWidth() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantWidth;\n }\n getConstantHeight() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantHeight;\n }\n getConstantMinimumWidth() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantMinimumWidth;\n }\n getConstantMinimumHeight() {\n if (!this.mComputedConstantSize) {\n this.computeConstantSize();\n }\n return this.mConstantMinimumHeight;\n }\n computeConstantSize() {\n this.mComputedConstantSize = true;\n this.createAllFutures();\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n this.mConstantWidth = this.mConstantHeight = -1;\n this.mConstantMinimumWidth = this.mConstantMinimumHeight = 0;\n for (let i = 0; i < N; i++) {\n const dr = drawables[i];\n let s = dr.getIntrinsicWidth();\n if (s > this.mConstantWidth)\n this.mConstantWidth = s;\n s = dr.getIntrinsicHeight();\n if (s > this.mConstantHeight)\n this.mConstantHeight = s;\n s = dr.getMinimumWidth();\n if (s > this.mConstantMinimumWidth)\n this.mConstantMinimumWidth = s;\n s = dr.getMinimumHeight();\n if (s > this.mConstantMinimumHeight)\n this.mConstantMinimumHeight = s;\n }\n }\n setEnterFadeDuration(duration) {\n this.mEnterFadeDuration = duration;\n }\n getEnterFadeDuration() {\n return this.mEnterFadeDuration;\n }\n setExitFadeDuration(duration) {\n this.mExitFadeDuration = duration;\n }\n getExitFadeDuration() {\n return this.mExitFadeDuration;\n }\n getOpacity() {\n if (this.mCheckedOpacity) {\n return this.mOpacity;\n }\n this.createAllFutures();\n this.mCheckedOpacity = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n let op = (N > 0) ? drawables[0].getOpacity() : PixelFormat.TRANSPARENT;\n for (let i = 1; i < N; i++) {\n op = drawable.Drawable.resolveOpacity(op, drawables[i].getOpacity());\n }\n this.mOpacity = op;\n return op;\n }\n isStateful() {\n if (this.mCheckedStateful) {\n return this.mStateful;\n }\n this.createAllFutures();\n this.mCheckedStateful = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].isStateful()) {\n this.mStateful = true;\n return true;\n }\n }\n this.mStateful = false;\n return false;\n }\n canConstantState() {\n if (this.mCheckedConstantState) {\n return this.mCanConstantState;\n }\n this.createAllFutures();\n this.mCheckedConstantState = true;\n const N = this.mNumChildren;\n const drawables = this.mDrawables;\n for (let i = 0; i < N; i++) {\n if (drawables[i].getConstantState() == null) {\n this.mCanConstantState = false;\n return false;\n }\n }\n this.mCanConstantState = true;\n return true;\n }\n newDrawable() {\n return undefined;\n }\n }\n DrawableContainer.DrawableContainerState = DrawableContainerState;\n class ConstantStateFuture {\n constructor(source) {\n this.mConstantState = source.getConstantState();\n }\n get(state) {\n const result = this.mConstantState.newDrawable();\n result.setCallback(state.mOwner);\n if (state.mMutated) {\n result.mutate();\n }\n return result;\n }\n }\n })(DrawableContainer = drawable.DrawableContainer || (drawable.DrawableContainer = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable) {\n var SystemClock = android.os.SystemClock;\n var Drawable = android.graphics.drawable.Drawable;\n var DrawableContainer = android.graphics.drawable.DrawableContainer;\n class AnimationDrawable extends DrawableContainer {\n constructor(state) {\n super();\n this.mCurFrame = -1;\n let _as = new AnimationDrawable.AnimationState(state, this);\n this.mAnimationState = _as;\n this.setConstantState(_as);\n if (state != null) {\n this.setFrame(0, true, false);\n }\n }\n setVisible(visible, restart) {\n let changed = super.setVisible(visible, restart);\n if (visible) {\n if (changed || restart) {\n this.setFrame(0, true, true);\n }\n }\n else {\n this.unscheduleSelf(this);\n }\n return changed;\n }\n start() {\n if (!this.isRunning()) {\n this.run();\n }\n }\n stop() {\n if (this.isRunning()) {\n this.unscheduleSelf(this);\n }\n }\n isRunning() {\n return this.mCurFrame > -1;\n }\n run() {\n this.nextFrame(false);\n }\n unscheduleSelf(what) {\n this.mCurFrame = -1;\n super.unscheduleSelf(what);\n }\n getNumberOfFrames() {\n return this.mAnimationState.getChildCount();\n }\n getFrame(index) {\n return this.mAnimationState.getChild(index);\n }\n getDuration(i) {\n return this.mAnimationState.mDurations[i];\n }\n isOneShot() {\n return this.mAnimationState.mOneShot;\n }\n setOneShot(oneShot) {\n this.mAnimationState.mOneShot = oneShot;\n }\n addFrame(frame, duration) {\n this.mAnimationState.addFrame(frame, duration);\n if (this.mCurFrame < 0) {\n this.setFrame(0, true, false);\n }\n }\n nextFrame(unschedule) {\n let next = this.mCurFrame + 1;\n const N = this.mAnimationState.getChildCount();\n if (next >= N) {\n next = 0;\n }\n this.setFrame(next, unschedule, !this.mAnimationState.mOneShot || next < (N - 1));\n }\n setFrame(frame, unschedule, animate) {\n if (frame >= this.mAnimationState.getChildCount()) {\n return;\n }\n this.mCurFrame = frame;\n this.selectDrawable(frame);\n if (unschedule) {\n this.unscheduleSelf(this);\n }\n if (animate) {\n this.mCurFrame = frame;\n this.scheduleSelf(this, SystemClock.uptimeMillis() + this.mAnimationState.mDurations[frame]);\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n this.mAnimationState.setVariablePadding(a.getBoolean(\"android:variablePadding\", false));\n this.mAnimationState.mOneShot = a.getBoolean(\"android:oneshot\", false);\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n a = r.obtainAttributes(item);\n let duration = a.getInt(\"android:duration\", -1);\n if (duration < 0) {\n throw Error(`new XmlPullParserException(parser.getPositionDescription() + \": tag requires a 'duration' attribute\")`);\n }\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw Error(`new XmlPullParserException( tag requires a 'drawable' attribute or child tag defining a drawable)`);\n }\n this.mAnimationState.addFrame(dr, duration);\n if (dr != null) {\n dr.setCallback(this);\n }\n }\n this.setFrame(0, true, false);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mAnimationState.mDurations = [...this.mAnimationState.mDurations];\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable.AnimationDrawable = AnimationDrawable;\n (function (AnimationDrawable) {\n class AnimationState extends DrawableContainer.DrawableContainerState {\n constructor(orig, owner) {\n super(orig, owner);\n if (orig != null) {\n this.mDurations = orig.mDurations;\n this.mOneShot = orig.mOneShot;\n }\n else {\n this.mDurations = androidui.util.ArrayCreator.newNumberArray(this.getCapacity());\n this.mOneShot = true;\n }\n }\n newDrawable() {\n return new AnimationDrawable(this);\n }\n addFrame(dr, dur) {\n let pos = super.addChild(dr);\n this.mDurations[pos] = dur;\n }\n }\n AnimationDrawable.AnimationState = AnimationState;\n })(AnimationDrawable = drawable.AnimationDrawable || (drawable.AnimationDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_7) {\n const DEBUG = android.util.Log.DBG_StateListDrawable;\n const TAG = \"StateListDrawable\";\n const DEFAULT_DITHER = true;\n class StateListDrawable extends drawable_7.DrawableContainer {\n constructor() {\n super();\n this.initWithState(null);\n }\n initWithState(state) {\n let _as = new StateListState(state, this);\n this.mStateListState = _as;\n this.setConstantState(_as);\n this.onStateChange(this.getState());\n }\n addState(stateSet, drawable) {\n if (drawable != null) {\n this.mStateListState.addStateSet(stateSet, drawable);\n this.onStateChange(this.getState());\n }\n }\n isStateful() {\n return true;\n }\n onStateChange(stateSet) {\n let idx = this.mStateListState.indexOfStateSet(stateSet);\n if (DEBUG)\n android.util.Log.i(TAG, \"onStateChange \" + this + \" states \"\n + stateSet + \" found \" + idx);\n if (idx < 0) {\n idx = this.mStateListState.indexOfStateSet(android.util.StateSet.WILD_CARD);\n }\n if (this.selectDrawable(idx)) {\n return true;\n }\n return super.onStateChange(stateSet);\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n const state = this.mStateListState;\n state.mVariablePadding = a.getBoolean(\"android:variablePadding\", state.mVariablePadding);\n state.mConstantSize = a.getBoolean(\"android:constantSize\", state.mConstantSize);\n state.mEnterFadeDuration = a.getInt(\"android:enterFadeDuration\", state.mEnterFadeDuration);\n state.mExitFadeDuration = a.getInt(\"android:exitFadeDuration\", state.mExitFadeDuration);\n state.mDither = a.getBoolean(\"android:dither\", state.mDither);\n state.mAutoMirrored = a.getBoolean(\"android:autoMirrored\", state.mAutoMirrored);\n a.recycle();\n for (let child of Array.from(parser.children)) {\n let item = child;\n if (item.tagName.toLowerCase() !== 'item') {\n continue;\n }\n let dr;\n let stateSpec = [];\n let typedArray = r.obtainAttributes(item);\n for (let attrName of typedArray.getLowerCaseNoNamespaceAttrNames()) {\n if (attrName === 'drawable') {\n dr = typedArray.getDrawable(attrName);\n }\n else if (attrName.startsWith('state_')) {\n let state = attrName.substring('state_'.length);\n let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()];\n if (typeof stateValue === \"number\") {\n stateSpec.push(typedArray.getBoolean(attrName, true) ? stateValue : -stateValue);\n }\n }\n }\n if (!dr && item.children[0] instanceof HTMLElement) {\n dr = drawable_7.Drawable.createFromXml(r, item.children[0]);\n }\n if (!dr) {\n throw new Error(\": tag requires a 'drawable' attribute or child tag defining a drawable\");\n }\n state.addStateSet(stateSpec, dr);\n }\n this.onStateChange(this.getState());\n }\n getStateListState() {\n return this.mStateListState;\n }\n getStateCount() {\n return this.mStateListState.getChildCount();\n }\n getStateSet(index) {\n return this.mStateListState.mStateSets[index];\n }\n getStateDrawable(index) {\n return this.mStateListState.getChild(index);\n }\n getStateDrawableIndex(stateSet) {\n return this.mStateListState.indexOfStateSet(stateSet);\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n const sets = this.mStateListState.mStateSets;\n const count = sets.length;\n this.mStateListState.mStateSets = new Array(count);\n for (let i = 0; i < count; i++) {\n const _set = sets[i];\n if (_set != null) {\n this.mStateListState.mStateSets[i] = _set.concat();\n }\n }\n this.mMutated = true;\n }\n return this;\n }\n }\n drawable_7.StateListDrawable = StateListDrawable;\n class StateListState extends drawable_7.DrawableContainer.DrawableContainerState {\n constructor(orig, owner) {\n super(orig, owner);\n if (orig != null) {\n this.mStateSets = orig.mStateSets.concat();\n }\n else {\n this.mStateSets = new Array(this.getCapacity());\n }\n }\n addStateSet(stateSet, drawable) {\n let pos = this.addChild(drawable);\n this.mStateSets[pos] = stateSet;\n return pos;\n }\n indexOfStateSet(stateSet) {\n const stateSets = this.mStateSets;\n const N = this.getChildCount();\n for (let i = 0; i < N; i++) {\n if (android.util.StateSet.stateSetMatches(stateSets[i], stateSet)) {\n return i;\n }\n }\n return -1;\n }\n newDrawable() {\n let drawable = new StateListDrawable();\n drawable.initWithState(this);\n return drawable;\n }\n }\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n R.id = {\n \"content\": \"content\",\n \"background\": \"background\",\n \"secondaryProgress\": \"secondaryProgress\",\n \"progress\": \"progress\",\n \"contentPanel\": \"contentPanel\",\n \"topPanel\": \"topPanel\",\n \"buttonPanel\": \"buttonPanel\",\n \"customPanel\": \"customPanel\",\n \"custom\": \"custom\",\n \"titleDivider\": \"titleDivider\",\n \"titleDividerTop\": \"titleDividerTop\",\n \"title_template\": \"title_template\",\n \"icon\": \"icon\",\n \"alertTitle\": \"alertTitle\",\n \"scrollView\": \"scrollView\",\n \"message\": \"message\",\n \"button1\": \"button1\",\n \"button2\": \"button2\",\n \"button3\": \"button3\",\n \"leftSpacer\": \"leftSpacer\",\n \"rightSpacer\": \"rightSpacer\",\n \"text1\": \"text1\",\n \"action_bar_center_layout\": \"action_bar_center_layout\",\n \"action_bar_title\": \"action_bar_title\",\n \"action_bar_sub_title\": \"action_bar_sub_title\",\n \"action_bar_left\": \"action_bar_left\",\n \"action_bar_right\": \"action_bar_right\",\n \"parentPanel\": \"parentPanel\",\n \"progress_percent\": \"progress_percent\",\n \"progress_number\": \"progress_number\",\n \"title\": \"title\",\n \"shortcut\": \"shortcut\",\n \"select_dialog_listview\": \"select_dialog_listview\"\n };\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var Resources = android.content.res.Resources;\n var Color = android.graphics.Color;\n var InsetDrawable = android.graphics.drawable.InsetDrawable;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var LayerDrawable = android.graphics.drawable.LayerDrawable;\n var RotateDrawable = android.graphics.drawable.RotateDrawable;\n var ScaleDrawable = android.graphics.drawable.ScaleDrawable;\n var AnimationDrawable = android.graphics.drawable.AnimationDrawable;\n var StateListDrawable = android.graphics.drawable.StateListDrawable;\n var RoundRectDrawable = android.graphics.drawable.RoundRectDrawable;\n var ShadowDrawable = android.graphics.drawable.ShadowDrawable;\n var Gravity = android.view.Gravity;\n const density = Resources.getDisplayMetrics().density;\n class drawable {\n static get btn_default() {\n let stateList = new StateListDrawable();\n stateList.addState([-android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_WINDOW_FOCUSED, -android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_disabled_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_PRESSED], R.image.btn_default_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_focused_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED], R.image.btn_default_disabled_focused_holo_light);\n stateList.addState([], R.image.btn_default_disabled_holo_light);\n return stateList;\n }\n static get editbox_background() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED], R.image.editbox_background_focus_yellow);\n stateList.addState([], R.image.editbox_background_normal);\n return stateList;\n }\n static get btn_check() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_pressed_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_focused_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_on_disabled_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_off_disabled_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_check_on_disabled_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_check_off_disabled_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED], R.image.btn_check_off_disabled_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED], R.image.btn_check_on_disabled_holo_light);\n return stateList;\n }\n static get btn_radio() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_pressed_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_focused_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_on_disabled_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_off_disabled_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_radio_on_disabled_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_radio_off_disabled_focused_holo_light);\n stateList.addState([-android.view.View.VIEW_STATE_CHECKED], R.image.btn_radio_off_disabled_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_CHECKED], R.image.btn_radio_on_disabled_holo_light);\n return stateList;\n }\n static get progress_small_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_16_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_16_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_medium_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_48_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_48_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_large_holo() {\n let rotate1 = new RotateDrawable(null);\n rotate1.mState.mDrawable = R.image.spinner_76_outer_holo;\n rotate1.mState.mPivotXRel = true;\n rotate1.mState.mPivotX = 0.5;\n rotate1.mState.mPivotYRel = true;\n rotate1.mState.mPivotY = 0.5;\n rotate1.mState.mFromDegrees = 0;\n rotate1.mState.mToDegrees = 1080;\n let rotate2 = new RotateDrawable(null);\n rotate2.mState.mDrawable = R.image.spinner_76_inner_holo;\n rotate2.mState.mPivotXRel = true;\n rotate2.mState.mPivotX = 0.5;\n rotate2.mState.mPivotYRel = true;\n rotate2.mState.mPivotY = 0.5;\n rotate2.mState.mFromDegrees = 720;\n rotate2.mState.mToDegrees = 0;\n return new LayerDrawable([rotate1, rotate2]);\n }\n static get progress_horizontal_holo() {\n let layerDrawable = new LayerDrawable(null);\n let returnHeight = () => 3 * density;\n let insetTopBottom = Math.floor(8 * density);\n let bg = new ColorDrawable(0x4c000000);\n bg.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(bg, R.id.background, 0, insetTopBottom, 0, insetTopBottom);\n let secondary = new ScaleDrawable(new ColorDrawable(0x4c33b5e5), Gravity.LEFT, 1, -1);\n secondary.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(secondary, R.id.secondaryProgress, 0, insetTopBottom, 0, insetTopBottom);\n let progress = new ScaleDrawable(new ColorDrawable(0xcc33b5e5), Gravity.LEFT, 1, -1);\n progress.getIntrinsicHeight = returnHeight;\n layerDrawable.addLayer(progress, R.id.progress, 0, insetTopBottom, 0, insetTopBottom);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get progress_indeterminate_horizontal_holo() {\n let animDrawable = new AnimationDrawable();\n animDrawable.setOneShot(false);\n let frame = R.image.progressbar_indeterminate_holo1;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo2;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo3;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo4;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo5;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo6;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo7;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n frame = R.image.progressbar_indeterminate_holo8;\n frame.setCallback(animDrawable);\n animDrawable.addFrame(frame, 50);\n return animDrawable;\n }\n static get ratingbar_full_empty_holo_light() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_SELECTED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light);\n stateList.addState([], R.image.btn_rating_star_off_normal_holo_light);\n return stateList;\n }\n static get ratingbar_full_filled_holo_light() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([android.view.View.VIEW_STATE_SELECTED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light);\n stateList.addState([], R.image.btn_rating_star_on_normal_holo_light);\n return stateList;\n }\n static get ratingbar_full_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.drawable.ratingbar_full_empty_holo_light, R.id.background);\n layerDrawable.addLayer(R.drawable.ratingbar_full_empty_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.drawable.ratingbar_full_filled_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get ratingbar_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.image.rate_star_big_off_holo_light, R.id.background);\n layerDrawable.addLayer(R.image.rate_star_big_half_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.image.rate_star_big_on_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get ratingbar_small_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.image.rate_star_small_off_holo_light, R.id.background);\n layerDrawable.addLayer(R.image.rate_star_small_half_holo_light, R.id.secondaryProgress);\n layerDrawable.addLayer(R.image.rate_star_small_on_holo_light, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get scrubber_control_selector_holo() {\n let stateList = new StateListDrawable();\n stateList.addState([-android.view.View.VIEW_STATE_ENABLED], R.image.scrubber_control_disabled_holo);\n stateList.addState([android.view.View.VIEW_STATE_PRESSED], R.image.scrubber_control_pressed_holo);\n stateList.addState([android.view.View.VIEW_STATE_SELECTED], R.image.scrubber_control_focused_holo);\n stateList.addState([], R.image.scrubber_control_normal_holo);\n return stateList;\n }\n static get scrubber_progress_horizontal_holo_light() {\n let layerDrawable = new LayerDrawable(null);\n layerDrawable.addLayer(R.drawable.scrubber_track_holo_light, R.id.background);\n let secondary = new ScaleDrawable(R.drawable.scrubber_secondary_holo, Gravity.LEFT, 1, -1);\n layerDrawable.addLayer(secondary, R.id.secondaryProgress);\n let progress = new ScaleDrawable(R.drawable.scrubber_primary_holo, Gravity.LEFT, 1, -1);\n layerDrawable.addLayer(progress, R.id.progress);\n layerDrawable.ensurePadding();\n layerDrawable.onStateChange(layerDrawable.getState());\n return layerDrawable;\n }\n static get scrubber_primary_holo() {\n let line = new ColorDrawable(0xff33b5e5);\n line.getIntrinsicHeight = () => 3 * density;\n return new InsetDrawable(line, 0, 5 * density, 0, 5 * density);\n }\n static get scrubber_secondary_holo() {\n let line = new ColorDrawable(0x4c33b5e5);\n line.getIntrinsicHeight = () => 3 * density;\n return new InsetDrawable(line, 0, 5 * density, 0, 5 * density);\n }\n static get scrubber_track_holo_light() {\n let line = new ColorDrawable(0x66666666);\n line.getIntrinsicHeight = () => 1 * density;\n return new InsetDrawable(line, 0, 6 * density, 0, 6 * density);\n }\n static get list_selector_background() {\n return this.item_background;\n }\n static get list_divider() {\n let divider = new ColorDrawable(0xffcccccc);\n return divider;\n }\n static get divider_vertical() {\n return this.divider_horizontal;\n }\n static get divider_horizontal() {\n let divider = new ColorDrawable(0xffdddddd);\n divider.getIntrinsicWidth = () => 1;\n divider.getIntrinsicHeight = () => 1;\n return divider;\n }\n static get item_background() {\n let stateList = new StateListDrawable();\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED, -android.view.View.VIEW_STATE_ENABLED], new ColorDrawable(0xffebebeb));\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888));\n stateList.addState([-android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888));\n stateList.addState([android.view.View.VIEW_STATE_FOCUSED], new ColorDrawable(0xffaaaaaa));\n stateList.addState([], new ColorDrawable(Color.TRANSPARENT));\n return stateList;\n }\n static get toast_frame() {\n let bg = new RoundRectDrawable(0xff333333, 2 * density, 2 * density, 2 * density, 2 * density);\n bg.getIntrinsicHeight = () => 32 * density;\n bg.getPadding = (rect) => {\n rect.set(12 * density, 6 * density, 12 * density, 6 * density);\n return true;\n };\n let shadow = new ShadowDrawable(bg, 5 * density, 0, 2 * density, 0x44000000);\n return new InsetDrawable(shadow, 7 * density);\n }\n }\n R.drawable = drawable;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image_2) {\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n var Canvas = android.graphics.Canvas;\n class NinePatchDrawable extends image_2.NetDrawable {\n constructor() {\n super(...arguments);\n this.mTmpRect = new Rect();\n this.mTmpRect2 = new Rect();\n }\n initBoundWithLoadedImage(image) {\n let imageRatio = image.getImageRatio();\n this.mImageWidth = Math.floor((image.width - 2) / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.mImageHeight = Math.floor((image.height - 2) / imageRatio * android.content.res.Resources.getDisplayMetrics().density);\n this.initNinePatchBorderInfo(image);\n }\n initNinePatchBorderInfo(image) {\n this.mNinePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(image.src);\n if (!this.mNinePatchBorderInfo) {\n image.getBorderPixels((leftBorder, topBorder, rightBorder, bottomBorder) => {\n this.mNinePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, this.mNinePatchBorderInfo);\n });\n }\n }\n onLoad() {\n let image = this.getImage();\n let ninePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(image.src);\n if (ninePatchBorderInfo) {\n this.mNinePatchBorderInfo = ninePatchBorderInfo;\n super.onLoad();\n return;\n }\n image.getBorderPixels((leftBorder, topBorder, rightBorder, bottomBorder) => {\n ninePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, ninePatchBorderInfo);\n super.onLoad();\n });\n }\n draw(canvas) {\n if (!this.mNinePatchBorderInfo)\n return;\n if (!this.isImageSizeEmpty()) {\n let cache = this.getNinePatchCache();\n if (cache) {\n canvas.drawCanvas(cache);\n }\n else {\n this.drawNinePatch(canvas);\n }\n }\n }\n getNinePatchCache() {\n let bound = this.getBounds();\n let width = bound.width();\n let height = bound.height();\n let cache = this.mNinePatchDrawCache;\n if (cache) {\n if (cache.getWidth() === width && cache.getHeight() === height) {\n return cache;\n }\n cache.recycle();\n }\n const cachePixelSize = width * height * 4;\n const drawingCacheSize = android.view.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();\n if (cachePixelSize > drawingCacheSize)\n return null;\n cache = this.mNinePatchDrawCache = new Canvas(bound.width(), bound.height());\n this.drawNinePatch(cache);\n return cache;\n }\n drawNinePatch(canvas) {\n let smoothEnableBak = canvas.isImageSmoothingEnabled();\n canvas.setImageSmoothingEnabled(false);\n let imageWidth = this.mImageWidth;\n let imageHeight = this.mImageHeight;\n if (imageHeight <= 0 || imageWidth <= 0)\n return;\n let image = this.getImage();\n let bound = this.getBounds();\n const staticRatioScale = android.content.res.Resources.getDisplayMetrics().density / image.getImageRatio();\n const staticWidthSum = this.mNinePatchBorderInfo.getHorizontalStaticLengthSum();\n const staticHeightSum = this.mNinePatchBorderInfo.getVerticalStaticLengthSum();\n let extraWidth = bound.width() - Math.floor(staticWidthSum * staticRatioScale);\n let extraHeight = bound.height() - Math.floor(staticHeightSum * staticRatioScale);\n let staticWidthPartScale = (extraWidth >= 0 || staticWidthSum == 0) ? 1 : bound.width() / staticWidthSum;\n let staticHeightPartScale = (extraHeight >= 0 || staticHeightSum == 0) ? 1 : bound.height() / staticHeightSum;\n staticWidthPartScale *= staticRatioScale;\n staticHeightPartScale *= staticRatioScale;\n const scaleHorizontalWeightSum = this.mNinePatchBorderInfo.getHorizontalScaleLengthSum();\n const scaleVerticalWeightSum = this.mNinePatchBorderInfo.getVerticalScaleLengthSum();\n const drawColumn = (srcFromX, srcToX, dstFromX, dstToX) => {\n const heightParts = this.mNinePatchBorderInfo.getVerticalTypedValues();\n let srcFromY = 1;\n let dstFromY = 0;\n for (let i = 0, size = heightParts.length; i < size; i++) {\n let typedValue = heightParts[i];\n let isScalePart = NinePatchBorderInfo.isScaleType(typedValue);\n let srcHeight = NinePatchBorderInfo.getValueUnpack(typedValue);\n if (srcHeight <= 0)\n continue;\n let dstHeight;\n if (isScalePart) {\n if (scaleVerticalWeightSum == 0)\n continue;\n dstHeight = extraHeight * srcHeight / scaleVerticalWeightSum;\n if (dstHeight <= 0)\n continue;\n }\n else {\n dstHeight = srcHeight * staticHeightPartScale;\n }\n let srcRect = this.mTmpRect;\n let dstRect = this.mTmpRect2;\n srcRect.set(srcFromX, srcFromY, srcToX, srcFromY + srcHeight);\n dstRect.set(dstFromX, dstFromY, dstToX, dstFromY + dstHeight);\n if (srcRect.bottom === image.height - 1)\n srcRect.bottom -= 0.5;\n if (srcRect.right === image.width - 1)\n srcRect.right -= 0.5;\n canvas.drawImage(image, srcRect, dstRect);\n srcFromY += srcHeight;\n dstFromY += dstHeight;\n }\n };\n const widthParts = this.mNinePatchBorderInfo.getHorizontalTypedValues();\n let srcFromX = 1;\n let dstFromX = 0;\n for (let i = 0, size = widthParts.length; i < size; i++) {\n let typedValue = widthParts[i];\n let isScalePart = NinePatchBorderInfo.isScaleType(typedValue);\n let srcWidth = NinePatchBorderInfo.getValueUnpack(typedValue);\n let dstWidth;\n if (isScalePart) {\n dstWidth = extraWidth * srcWidth / scaleHorizontalWeightSum;\n }\n else {\n dstWidth = srcWidth * staticWidthPartScale;\n }\n if (dstWidth <= 0)\n continue;\n drawColumn(srcFromX, srcFromX + srcWidth, dstFromX, dstFromX + dstWidth);\n srcFromX += srcWidth;\n dstFromX += dstWidth;\n }\n canvas.setImageSmoothingEnabled(smoothEnableBak);\n }\n getPadding(padding) {\n let info = this.mNinePatchBorderInfo;\n if (!info)\n return false;\n let imageRatio = this.getImage() && this.getImage().getImageRatio() || 1;\n const staticRatioScale = android.content.res.Resources.getDisplayMetrics().density / imageRatio;\n padding.set(Math.floor(info.getPaddingLeft() * staticRatioScale), Math.floor(info.getPaddingTop() * staticRatioScale), Math.floor(info.getPaddingRight() * staticRatioScale), Math.floor(info.getPaddingBottom() * staticRatioScale));\n return true;\n }\n }\n NinePatchDrawable.GlobalBorderInfoCache = new Map();\n image_2.NinePatchDrawable = NinePatchDrawable;\n class NinePatchBorderInfo {\n constructor(leftBorder, topBorder, rightBorder, bottomBorder) {\n this.horizontalStaticLengthSum = 0;\n this.horizontalScaleLengthSum = 0;\n this.verticalStaticLengthSum = 0;\n this.verticalScaleLengthSum = 0;\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n this.horizontalTypedValues = [];\n this.verticalTypedValues = [];\n let tmpLength = 0;\n let currentStatic = true;\n for (let color of leftBorder) {\n let isScaleColor = NinePatchBorderInfo.isScaleColor(color);\n let typeChange = (isScaleColor && currentStatic) || (!isScaleColor && !currentStatic);\n if (typeChange) {\n let lengthValue = currentStatic ? tmpLength : -tmpLength;\n if (currentStatic)\n this.verticalStaticLengthSum += tmpLength;\n this.verticalTypedValues.push(lengthValue);\n tmpLength = 1;\n }\n else {\n tmpLength++;\n }\n currentStatic = !isScaleColor;\n }\n if (currentStatic)\n this.verticalStaticLengthSum += tmpLength;\n this.verticalScaleLengthSum = leftBorder.length - this.verticalStaticLengthSum;\n this.verticalTypedValues.push(currentStatic ? tmpLength : -tmpLength);\n tmpLength = 0;\n currentStatic = true;\n for (let color of topBorder) {\n let isScaleColor = NinePatchBorderInfo.isScaleColor(color);\n let typeChange = (isScaleColor && currentStatic) || (!isScaleColor && !currentStatic);\n if (typeChange) {\n let lengthValue = currentStatic ? tmpLength : -tmpLength;\n if (currentStatic)\n this.horizontalStaticLengthSum += tmpLength;\n this.horizontalTypedValues.push(lengthValue);\n tmpLength = 1;\n }\n else {\n tmpLength++;\n }\n currentStatic = !isScaleColor;\n }\n if (currentStatic)\n this.horizontalStaticLengthSum += tmpLength;\n this.horizontalScaleLengthSum = topBorder.length - this.horizontalStaticLengthSum;\n this.horizontalTypedValues.push(currentStatic ? tmpLength : -tmpLength);\n if (this.horizontalTypedValues.length >= 3) {\n this.paddingLeft = Math.max(0, this.horizontalTypedValues[0]);\n this.paddingRight = Math.max(0, this.horizontalTypedValues[this.horizontalTypedValues.length - 1]);\n }\n if (this.verticalTypedValues.length >= 3) {\n this.paddingTop = Math.max(0, this.verticalTypedValues[0]);\n this.paddingBottom = Math.max(0, this.verticalTypedValues[this.verticalTypedValues.length - 1]);\n }\n for (let i = 0, length = rightBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(rightBorder[i])) {\n this.paddingTop = i;\n break;\n }\n }\n for (let i = 0, length = rightBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(rightBorder[length - 1 - i])) {\n this.paddingBottom = i;\n break;\n }\n }\n for (let i = 0, length = bottomBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(bottomBorder[i])) {\n this.paddingLeft = i;\n break;\n }\n }\n for (let i = 0, length = bottomBorder.length; i < length; i++) {\n if (NinePatchBorderInfo.isScaleColor(bottomBorder[length - 1 - i])) {\n this.paddingRight = i;\n break;\n }\n }\n }\n static isScaleColor(color) {\n return Color.alpha(color) > 200 && Color.red(color) < 50 && Color.green(color) < 50 && Color.blue(color) < 50;\n }\n static isScaleType(typedValue) {\n return typedValue < 0;\n }\n static getValueUnpack(typedValue) {\n return Math.abs(typedValue);\n }\n getHorizontalTypedValues() {\n return this.horizontalTypedValues;\n }\n getHorizontalStaticLengthSum() {\n return this.horizontalStaticLengthSum;\n }\n getHorizontalScaleLengthSum() {\n return this.horizontalScaleLengthSum;\n }\n getVerticalTypedValues() {\n return this.verticalTypedValues;\n }\n getVerticalStaticLengthSum() {\n return this.verticalStaticLengthSum;\n }\n getVerticalScaleLengthSum() {\n return this.verticalScaleLengthSum;\n }\n getPaddingLeft() {\n return this.paddingLeft;\n }\n getPaddingTop() {\n return this.paddingTop;\n }\n getPaddingRight() {\n return this.paddingRight;\n }\n getPaddingBottom() {\n return this.paddingBottom;\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var image;\n (function (image) {\n var Drawable = android.graphics.drawable.Drawable;\n var Rect = android.graphics.Rect;\n class ChangeImageSizeDrawable extends Drawable {\n constructor(drawable, overrideWidth, overrideHeight = overrideWidth) {\n super();\n this.mTmpRect = new Rect();\n this.mMutated = false;\n this.mState = new State(null, this);\n this.mState.mDrawable = drawable;\n this.mState.mOverrideWidth = overrideWidth;\n this.mState.mOverrideHeight = overrideHeight;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n draw(canvas) {\n this.mState.mDrawable.draw(canvas);\n }\n getPadding(padding) {\n return this.mState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mState.mDrawable.isStateful();\n }\n onStateChange(state) {\n let changed = this.mState.mDrawable.setState(state);\n this.onBoundsChange(this.getBounds());\n return changed;\n }\n onBoundsChange(r) {\n this.mState.mDrawable.setBounds(r.left, r.top, r.right, r.bottom);\n }\n getIntrinsicWidth() {\n return this.mState.mOverrideWidth;\n }\n getIntrinsicHeight() {\n return this.mState.mOverrideHeight;\n }\n getConstantState() {\n if (this.mState.canConstantState()) {\n return this.mState;\n }\n return null;\n }\n mutate() {\n if (!this.mMutated && super.mutate() == this) {\n this.mState.mDrawable.mutate();\n this.mMutated = true;\n }\n return this;\n }\n getDrawable() {\n return this.mState.mDrawable;\n }\n }\n image.ChangeImageSizeDrawable = ChangeImageSizeDrawable;\n class State {\n constructor(orig, owner) {\n this.mOverrideWidth = 0;\n this.mOverrideHeight = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mOverrideWidth = orig.mOverrideWidth;\n this.mOverrideHeight = orig.mOverrideHeight;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n let drawable = new ChangeImageSizeDrawable(null, 0);\n drawable.mState = new State(this, drawable);\n return drawable;\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n })(image = androidui.image || (androidui.image = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var NetImage = androidui.image.NetImage;\n var data = {\n \"actionbar_ic_back_white\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAzCAMAAABR9YM8AAAAclBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9eWEHEAAAAJXRSTlMA+wjy9g/JaUDVsqZONr6IFePdmHhbJBzr6c4tVEm9o5OCcF0v6lgICQAAALZJREFUOMu11EcSgzAQRFEZRBbZJjtb97+iS1PFrpuV+Nu3UphRpFq3KSNr7cLJdpCu1pVweiNKhGpOL0S3i6Me0Sb0RGSECkR3oRxRqoUCShWiMqT0E4ojQOtEaRDKGkQtpVGoGxF1lJrMUTtQmhFFi6NpRRQ7ChGpQqhUKHkVo2DZfmh6+0t0gLFvTLVgcICVBwTf9oHRCOa+cdtHhQ9m4Ru/9gATwf4crBVfdlpxnBXpE87mD+wlJVcMMSJcAAAAAElFTkSuQmCC\"\n ],\n \"btn_check_off_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAFVBMVEUAAAAAmcwzMzMAmcwAmcwAmcwAmcySYuXAAAAAB3RSTlMAZk1gRhAMJ+/C7AAAAGhJREFUWMPt1rEJgFAMBuE02gedwA0EtRcXEFxAcP8dXCDvb14gzV3/9WdEVNJwebPtDsDnoiMApwJzAFYFpgC4WzP3JLA0SgQWBgAAAAAAANAJ8m+m5Mj0JGZs6KPAHoBRrfRrRFTRD3MwONmn2VynAAAAAElFTkSuQmCC\"\n ],\n \"btn_check_off_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMATX7+8BUAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII=\"\n ],\n \"btn_check_off_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcwAmcwAmcwxNTcAmcwAmcwAmcwAmcwAmcwAmcwvOT0AmcwAmcwAmcwAmczmhCwqAAAAEHRSTlMAmRIfzgUJGg4WJtCScyQtx2HoRgAAAORJREFUWMNjGAWjYEgC1lAcIACr8tDQNJwgNBSL8WEdSjhBR2oApgVN04uNcQDzSo1QDAsi9O8I4gRnP7ViaEj6I4gHnFcLQNfQeRGfBtkZ6BpC2w/i0yBTga6BTV1QcNVj7H62WyUoWJSApiFMWVBwcSX2QJ1uJSholIpFw/PdLljB7jocGiy3YNfgPRmHBiMX7GnMRXlUw6iGUQ2jGkY1jGoY1TCqgRINhBsnlDd/CDewKG3CsRJqJJLeDKW0ocsQpoWvKb0oFbOxnoSvsa4WSn53AKEDX4cjgNQuzSgYBUMRAABvBwmfTLNSCwAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAnRSTlMAzORBQ6MAAAAhSURBVDjLYxgFZIP/YICNcwBEMI9yRjkkcPCkqlFALgAAVYo5bSUJskUAAAAASUVORK5CYII=\"\n ],\n \"btn_check_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAGFBMVEVPT080NDQ0NDRHR0cAAABPT09PT09PT0+86ZyxAAAACHRSTlMm1MgyABYeBtShLDEAAAB4SURBVFjD7dixDYAwEATBSzAxLdACLbxzAkukLoGE/qEAXmIlZ9ym1uTvU8TV9bFyRCiqQO0BnYASqkI1nQzM2hmY1Bkocs4Nak1KwZKUg+21HCQvBgYGBgYGBv8A+HRI4uePc25M+IuPRwQ8U+AhhE4tfMzBc9ENzCYkZWqWtP8AAAAASUVORK5CYII=\"\n ],\n \"btn_check_on_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAAmcw9PT09PT09PT09PT09PT0AmcwAmcwAmcw9PT09PT09PT09PT0Amcw9PT1vR1UqAAAAEHRSTlMAZoBNQTg7Xj8IR0pEMVYjBJa89wAAASlJREFUWMPt1rFJBEEYhuENVsE7DSbS+GfPyEC4BhYrGKxA7OBCQxsQM/MrQazgSrAKQ7ECXZnzRdmd7x84OIT50uWZN5mFaerq6vayo4cwuknwFArBfSlYlYLMp1lfCNbdBFiO7PIrYNYXgY1ZNwGasR2bkfCAzQAu/KC17727wZUNO/cVCNwIIAIAFdDgloALHBIQQAQAIqDANQEXOEgBBV5cAcDc+r+BEHLg2brfAQHm6fYTEGCdTiWQB7PtsSc/gWUWfGzPfbVhiyYLuJ4xBWIe8AMsCGQBiRRQgAQBCVpAlIAEAQlIRA1IEFCARHQAEgQEIBE9gEQKSEAiugAJAj7QRidgFfwjML4dgqntCKxCZqe+Zyg78z102Z3rKc3eHpu6urp97BNIunQiihmctwAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_on_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAG1BMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT1gyl+KAAAACXRSTlMAgE05QT1HMyNi/YIlAAAA6ElEQVRYw+3TwQ2CQBRFUaOo6x/AtRILGDvADrQESrAD7VwxQ+4G/I/EhSb/bcmZGzKwiMVise9v084EXTXxoBnZ/hUwa2eBzqyaAONvYEZCAV0Pdjoo7L27DM7Wr9YKBC4yuBKQwJqAAghIgECSAIFyoYIVAQ2cCLjADwCOUgCwtFYJAA5WCwHAcrjYbQ54oBtu9pYDDtgM3w6B5iN45HMJOKDIBxNwQP7DSgIeyIkc8AAJAi4oAMkFJAi4gETyAQkCLuAuBECCgANIJAWQyAEXkEgSIEFAA0USAQvwR2Bi80EsFov98J52GzL3vLeyTQAAAABJRU5ErkJggg==\"\n ],\n \"btn_check_on_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_check_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_check_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAANlBMVEVPT08+Pj4+Pj5KSkpAQEAAAAA/Pz9PT08/Pz9PT09PT08/Pz9AQEBAQEBPT09PT09CQkI9PT36oQq5AAAAEXRSTlMm1MgyiACTFp4eAZeNggYHXQY8LIYAAAExSURBVGje7drBbsJAFENRtx0YJlAg//+zTaRWruQNU+NFxfMa3SOxSBZ5OGy79oGnb/Tb3t6ApSO0vuzAMhDbWDagI7h+wBXR3dARXcdAdAO1Wq1We6mdjojutK6Twtuj++lTCABbn8LDwNT/I4IPaH/bOQGc11+7PxXQfoMBGH0DOErfBPw+gVCfgNv3gYv2fcDvE7D6PtCk7wCns99XQN8mfl8Bvk3svgLsU3D7CvBpf8H3Pu0+AfYpaJ+/ngfuUpO+AejzRvomoIL0PUAF6dsABe3bgAra9wEK2vcBCtr3ARG07wMUpO8DIrCfACg0JAAKDQmAQkMCoNCQACg0ZACugAJeC/iY2F+Auc0D75NDrVar1Wqz+0/fxEf8aCB+9pA+3IifnuSPZ5LnP9e9/QXc5ydUPu9cjgAAAABJRU5ErkJggg==\"\n ],\n \"btn_default_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAM1BMVEUAAAAzteUAmcwAAAAAAAAAkMAAmcwAjbwAmMsAM0UAAAAAgq4AfqgAbpMAgawAAAD/AAA0FdE+AAAAD3RSTlMAHz4TD0I5PSkZCjIyDQj2gUbVAAAAn0lEQVRYw+3ZSw6DMAxFUZq2zodP2P9qKzGqGFjYqkoC9y7gjDLJ83CoujWc0QoICHgJcN+SJJiStGjeLMGczAqYgqOkgOIBRQGDq/+Dj8MBdgFWQEBAQEBAQD9YAW8Atv8OAQEBAQE3sPkPOGAvYMvrnPwaHD3eqIA52r2YFbDkKb5NxSkXbRh/OtKX9vIyVnq7BQAC+sD1K8/Beid8AI8uHiWs1BycAAAAAElFTkSuQmCC\"\n ],\n \"btn_default_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAbFBMVEUAAACZmZl5eXl0dHQAAAAAAACHh4dsbGyWlpZbW1uNjY1kZGQjIyOWlpZwcHAAAAAAAAB4eHhubm6Li4teXl5aWlqUlJSIiIhzc3NgYGBTU1N6enqMjIyXl5eIiIiXl5eMjIwAAAAAAAD/AADhocx4AAAAInRSTlMAJ4CAJh6AgICAgIAwJxUUAnp6eHh2dGNjX15cWjIxMDADER06CAAAAMlJREFUWMPt2TkOgzAQhWHALIltMPu+Be5/x0hUUYoRQxOjvP8An1y4mRnnVNuR84t2gAAB2gAmY/1gVY8J5SeFlCErKQtKHMJmcllNTTgQYOYtLrPFywhQeC47TwAEaBu4AQQIECBAgACvgxvAPwDt/4cAAQIECPAArR/AAd4BjLleTIK5WLngKnIC7KJ2jlnvm9uoI0BdKhWxUqrUBOjrvnqyqnrtE6DxL2SIxfgr4HtBSoBOagJmJr35cQEgwHPg/tGVg/WX8AZv3Su8QPHBAAAAAABJRU5ErkJggg==\"\n ],\n \"btn_default_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAS1BMVEUAAAAzteUAmcwAAAAAiLUAAAAAmcwAHigAmcwAAAAAgasAhLEAk8QAksIAa44AcpgAmcwAAAAAAAAAAAAAAAAAmcwAmcwAAAD/AAAMZPkMAAAAF3RSTlMAZsyA5mbAiYgH3NvUy8S8tm5fSz8gFpzXpUMAAACoSURBVFjD7dk5DsMwDABBR0l0+L7l/780gKsgBWGxiGV49wFTsSFZHCruFWe0AQIC5gCuvjdJ9X6V/MWa5OwigN4o8gJoNaAVQKPq/+DjcID3BCMgICAgICCgHoyANwDzn0NAQEBAwB3MfgEH1IGXvs41Gq8RwE4DdgLoqjqVqysngJNry1dSZesmAQzDM7khSIfxMI/vpMY5XPwXAAh4Erh9pXlY/wgfdZAio63fx68AAAAASUVORK5CYII=\"\n ],\n \"btn_default_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAflBMVEUAAACZmZkAAAB3d3eTk5MsLCzb29sAAABZWVnAwMAAAAAAAACYmJijo6OLi4sAAAAAAAA0NDRSUlLIyMhvb28WFhagoKAAAAAqKirY2NhISEjNzc0mJibDw8NfX1+5ubmzs7NBQUF+fn7R0dGRkZGioqIAAAAAAAAAAAD/AAAgdn43AAAAKHRSTlMAZhB2aLOnMIiEBAFnbWwOCqONino4FxOolZWTi4d+fXlzcW1kVSwjhumNDwAAAOlJREFUWMPt2ckOgjAUhWEFnFpoC4I4Mo/v/4ISVsakxIsaMJ5/3y9p0k3vXbxU07eYohYgQIAzAPkhP61JnfID19i9t7/sbztCt+7AgMjKOHGWpJwkLpkWVIXTeUTRKZQWlNlyRJnUgoZp0T3LNAACfA9sAAIECBAgQIDjwQbgH4Dzf4cAAQIECLAHZ/8BB/gF0P4s6AsyaAt/AIxMYVM9M9KDMvV8Qbm1bQnfS6UWVIHrnr0tIe/suoHSgiwMrscVqeM1CJkW5Cysqw2pqg4ZHxiMMyUNUlIx/tO7AIAApwLbh8YsrJ+EOyFWMqRTaWfwAAAAAElFTkSuQmCC\"\n ],\n \"btn_default_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABiCAMAAADwfaQ5AAAAclBMVEUAAABmZmYAAABkZGRaWlo3NzcAAAC7u7tNTU2Xl5cAAAAAAABycnIAAAA8PDyioqJISEiJiYlXV1eGhoYAAABcXFy6urqnp6eamppPT08uLi6xsbE9PT0VFRUaGhoAAABiYmJiYmJ4eHh3d3cAAAD/AAABlB2hAAAAJHRSTlMAZg9nbowwmnd+BAFrCoSCe3ZwFxRskomAcXFoYzkyI2RjU1NCIACPAAAA10lEQVRYw+3ZyQ6DIBSF4Sp2AlFRtM520Pd/xRpXTROI1400Pf+eLyzYcO9hVePSYY8mgAABOgCKrCnOpIomE2ZeZPEtLq+EyvmAReQvpUKPVKjUkxtB+QhnjyiGd2kE/dzbUO5bQEb3WGABA4AAV4AjQIAAAQIECHA7OAL8A9D9dwgQIECAABfQ+Q84QPfBlDGyx1ILWAV0MKgsYJukjBHvl7RmUPZRlFxIJVHUSyPIdVcfidWd5kZQcD2ciA2aC8tgnEufmOTip3cBAAHuBU4fbVlYfwlvr34uoI6kYcYAAAAASUVORK5CYII=\"\n ],\n \"btn_radio_off_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAAzteU9PT0zteU9PT09PT0zteUzteUzteU9PT0zteUzteU9PT09PT0zteU9PT0zteUzteU9PT0zteU9PT0zteUzteU9PT09PT09PT09PT0zteUzteUzteU9PT0zteUzteUzteU9PT3dmb2uAAAAI3RSTlMAZkxgRwQ4EkgOBiARPFMuWyYXTTYyLEAgCioMFkMyGxg/J0SE03YAAAMlSURBVGje7VnXltsgEEUDqlbv1Wv7/z8yoS2J4zVgmc0+6D75mIEpd4YyQgcOHDhw4DuxVMGW557n4TzfumpBb8VpK707lNcTehPCK/YeAgch2o9L5D1BtO61Xi3fBH0Ysv/WPmiUij1sJIEMRlQld0NVJMe6183P+RL5KXmo/iTGmxedqDi3ZfVEpOROvJRQHZ/bI4FpLNoMAEjWFuMkvei4FT2yRsApFMGJZwJ/gcyxUMG56F5YXxlWU8uhHevYR8iP67GF38hqPtoLDfbxwR/c+gyAnGv/z3G/PhOAjHvxga2jdGLrh2ypAgBuanWlYwaAmQ2sTIMF0yH+XD8eAAr/sdhUAGTTpwa8GNcXy28Wn5TAEH8tmQ5A0k+XGyuCe8YuQOs/E/VboaG3IHqhshszEKDQCPtnAKYhMg9SQ8s3ofEndH0dzkAmGldKQ4QM8EEdqKhxA7SIQxOljIaxovNCEwckXQUMPjLRQODGJpq5cKGGrJyAFOnBJWPput6Fq3RggBkZooBMuhBoawCLEqiBqADpg5SKYsAaUUZVSX9kMCJj3Hg6YIMNYxNupswBCxdiUaFXjSgWFM+cAXMWbiJBSs02J8NIo2qBFAZJ4PNq7kUux0CQFQjQco60JARiyxrhjKzQwqimP4E0oaDyNrjBLBJ1eyqXi2LMoEZWqFmirtpTgd5zEhFSK8QwiJ0+12Yp58xHVphYViTaPPWEAgBkBx+ImI//rwJMOXATIkXyspNk52nqptBGVWgut4qOTne+2Zlu17GL7VodOIWjAwdFzo5M94e++2uLunhFOy5eDq+OF7Oro7rDFkAmwwDNaqLd9T3zLa/vq+0D5Gz+ACmFA3qETp9Q9o9A0D0C9z9jJXH5j3mIi3d1ucpWAtG0Ei68lWDfLKoQd0LTDKlkZ8a+nRPctXPYgnftHCnqrCHVqHbR7pZaNjDLM9VSQ71oqf3EpuCfbc0vck2OL7sbs2Vw+WdPDLAY7NAOhI0ngKOgEq3lsA8iLP+Pwr3N8cZRc1xh/bK9fw3Re5A8+kCxndBbEcpPLF6eb0G1oAMHDhw48I34BUmSKxG/3YRpAAAAAElFTkSuQmCC\"\n ],\n \"btn_radio_off_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1STLyxAAAAEHRSTlMATAUMRyoWMBA7P0MhNh49I5b3UAAAAXZJREFUWMNjGAWjYBSMAsoB8/NZgiJr6wyIVW/qKAgGIsHEqc8UFLyTwcDUdlZQcBox6u0F3ZMgLLUSwcmE1asKiirA2EyBggEE/btQXAHBYyqUIuTzFmkUFRwbPfCrZxO8hCqgK5iAV0OjOLpIoQReHzgWoAuxi+DzBZcsptjFBXg0BG7CFNMWxeMiwQZMQQ5B3G7iFMVq7QScGhKdsImqiOHUMPEANlEeSZxeEFHAJszkiMsTrKI4wg5XCuSWwBH9G3BoMHTALs4ijEPDwwLs4uxyuOL5AHZxHlFcoZqAI83L4tCw0QBHcEvj0OCogF2cSQSHBkEGXBKUaiDsJAo9TThYJSmNOMJJg9LERzh5U5qBCGdRcgsByosZfuwF2QfKi0qEYU5YXCSKr7iXUsAIo4ULSKtQeEUMyKqyKK8UEdVuA1q1S1nFTrjpEMRAEHQhN05WENv8SWZgMIM3fyhvYGH6/PgsQcGVNQYMo2AUjIJRQDEAAKdsRGG19ZMWAAAAAElFTkSuQmCC\"\n ],\n \"btn_radio_off_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAwFBMVEUAAAAzteU9PT0zteUzteUzteU9PT0zteUzteUzteUzteUzteUzteU9PT0zteUzteUzteUzteU9PT09PT09PT0zteUzteU9PT09PT09PT0zteU9PT0zteU9PT09PT0zteU9PT09PT0zteUzteU9PT09PT09PT09PT09PT09PT0zteUzteU9PT09PT09PT09PT09PT0zteU9PT09PT09PT0zteUzteU9PT0zteUzteU9PT09PT0zteU9PT09PT09PT2npJ6rAAAAQHRSTlMAmcwElCDAN48ValInxnBLPVclpJCHMQy1nnorizK6dGo6CYB9VhkKhHBkQz8eBwV5X6yYdR0PXSwaKRR3TCKGCl/ORQAAA8lJREFUaN7tWNl6qjAQxmErIIq74r4r7kvtqT3tef+3OkwCtLYWEii94r9Rv0xmnCWTyS9kyJAhQ4bfhKYajm1LuZxk205R1X5UuVh3arlPqB3q4g+plw8Pubt4KD0LyZEv5EKgy0kj/66+YFiyLLrxkmWr1H83oSWJvSFRLZKuXm6XLpburxVj50KzqQr7fjpH6piu/43phCrRclG/F7FqNNv1OPpXdO/K//eb6f5UMQGUymn/OvODuKIVZvHrL9EUjuiv8rIJN2gOyl4ydCJYjKVfWtEfwxYAmNXp8LoThO11OK2aANAaeq5KMSwUif48+X6tACiL9fbj+ny9UFwT1Is/EneUVNzRIYdoewYwB42vMo2lCbDckbNOEvGHoz4lTO8jSW0FYPJyX2w2AajMiAWygblaxXEQn64Cx/L3ku0m9NpBlPqsJ84IQjo0oToPE21UQekGRV3kCJBD/r8Jkwjh3QJM4oOOXl+YDGAjq40w/grqj8ICepiHESZaZ+rP6KyK9VOBKoP87gStnV95LN27gK0Zv5yh2RAY0GjCwPdcZ3RAxgoBaAtM6IJZ9ndG33EH34EKLAVG7OHku1CKPAOSdybX0JuzGmgogLVax+MvMjSJmkgceBKYMSAuiB13c9TV4LgyBsmAgg6wu7DBFhwdI/HBS/EZzgIHJjDw0lwLF3zEpoUR6vklxFpIRz+B4S3P8mq5DIrABQVm3hlSI/ocbVlT+MdnoAqvwfYw6F4d7LGGePAES68GD6FyeBPgRdOCIZ+BNelbMk5JoXJYyReS4w2fgTLJ8sXdPg6VwzIQSc7mfAZeoIk9O7JOcy7wE0DgQwMUb/9DmgZENBAZolHCEKWT5DeSZA2TnHqZMh20CUxjHzTGVrGI0yqKuD31Zsfarq987boZtGvWC2eZyoUj6EmvzEMql/5T+KWffGzp3YwtzIPXgH3wagWDF/vo2GUeHdsAHKOj0P8w/L5wD79c4/sRWluG8b3KOb6/P0DeFFiwP0A6xAEWPMd/QmlpPAJNrkcg/zNWaZPEode2yPcQJxW3OQLsOR/i/FSCMpjfic4goBLylErgJ0PUgAzpTW7JkO1HMsSiZEgcusigUV37dA5RWL6lc0RPNB4hVYgkpEYFfkKKoviVUmtVwIVLqU1DKDVuUnCshojEJQUptLFPa37DaPu0pxafmM1RdEr5z0v5UicZMUvxGHDIElLLhASTZcsoSAHjnJQgz/dzISjI6dL7VH1yiKrT+ay95tRF4SehWYZuk7KybcdQNSFDhgwZMvwi/gPvHkn+qOIQ7AAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAaVBMVEUAAAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1Pag0XAAAAI3RSTlMAzL8LJcV8OyqQpLpwhGsbtp0zFwcFsZd3VFovqkEfoWEPTH3CfAwAAAGvSURBVGje7ZjpboMwEIR3bHxwhisQyJ33f8hKVSo1akS8hkRU8veXEWgZH7tDgUAgEAgEAh9mM+g+UYBIen3b0MJEWYkHyiKi5TAVABUPxm6JWmvGWAGoDC2DTQCRm5Z+IY+5AKolqmh3gCok/UFmCsi2NJNTAuiGntJoIJlp916giyYed0jtLHcVYjklkDFETd7UCvqFZJtDeddwEtCvVTlSTx/aA2IH2bbH2W8t7dBJF921ROG1gADrqlQR8UmQudfaE5sjUumqvQrUHgWM7uILvwQLId3VUuBEPDJkHLlmL6QUlrXn0RGLCIJYCDQs/YCcWMS4sfQaI7G4IGPpKxhiYRAzPd5wTTswPZPEokHJ0gPEQ0Ks6wM+v2hdJvss03VttNHjqFjXYff245p27AtnbVcm+9J/b9uSovZpvAp3wyq/1nHv6hciv+a3bHjNL799P7cO7Xvs275TJJC7DSBrHaHchkBV0wzq6THWdhB25iB+4A/i/ChBPI0SiokogR2GpNq0D591CEMYHM/3OOf7hZEZ7nHO/wmkfiK1KgGApNfDhgKBQCAQCAQ+yxdkJhHOkHWlWgAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAb1BMVEVPT08AAAA+Pj5PT09PT09PT09PT09PT09PT09KSkpPT09PT08+Pj5EREQ+Pj5GRkY+Pj5PT08+Pj5AQEBAQEBBQUE+Pj4+Pj4/Pz9FRUVMTExAQEBAQEA/Pz9DQ0M/Pz9HR0dDQ0NEREQ+Pj5DQ0Mt5iyXAAAAJXRSTlMmANQNAyQiHxswCRfIS8NBvhHMhYxtsayTRiuJdp9XpDxaULhc1kjPGwAAAu5JREFUaN7M1cmS4jAQRdFHavY8gDHGjF3//41NrWiilLJU9qLPmuDaSmUYuygya3NrtFaA0trYvM3kLkpEQIrcwMPkQq4PyNYiwAq5KiCswgJlxa8DrUYUE0og4e95WiQHhEYSkyUFpEUyK+MDQoGRfk7gHz9dHhWQBr9m5HIg01hBZ0sBobCKEuGAwFpKhAICGxB8QGALKuMCmcJGBX9AKmxES2/AYDPWF8ixofZnQGBT4h1gBrDNGN4BiyX1YX9rOqKuue0PNZbkn4EMYae+og9Nf0JY9hEwCHkciai4zNfaAa5+zON37nhFiPk30CKgHIiKvsSH8ly8EqfwnN8BDdZ0Jqpmhx/cXBH1E1j6HWjBqgei3sHLvdrDfeEVEH6BZ0FNCVbZUFGGp4Dgjl07ujgEuBt11+BFQmgHnh2NCJtG6srQLiCwxHVBeywaqeLmoOQrwI94GuiCCBcaJn7M4JdsT41DBNdQDz/7HZDwKz2Hy/2STuwZgb1DA/WItKcje0bgPjRfVDlEcgU9uHsEbssGOiDaTEdu1yC5cy0mRHMFN4UdMu5Yz0gwcgPL0MKrohIJntTASyCHT00VkhRUw6eFhc+BRiS5MHfCwjAjOCDJTGcmoOFzpCuSfNENPgYKPg3dkaSmP/DR7MwcktyZW6HgR4Q0jrr/K/C3WTNKQRgGgmg1oQlN8KPgRxUEzf3vqCD+yXR182gv0EDa7s7Mm35XhL9k/DPFfzR8VODDDh/X+MKhVya+9HHZ0kd4XYXwktJx8UtHWvxq+d46yfc4cAbEb6EGZaHyqgm8O03guo291WNbtI19CBtrMeLNYcTtUcL54ogS4DDEHuecPHEOH0gdii1Sq/Nc/4jU+FCQjzXFwHDClkGgFQdq+R6Oj0Q4zsf7AuA4ns8iFhoS0ZiLBnXbo8bXCQWFpZpWa9zLAusSf0PuqSty997TGPZYe7AWN8rkq56ErGshce/lmc8hUyg5pXf9J+VcgrX+8wRytCpX/RrehwAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_on_disabled_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_disabled_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAsVBMVEUAAAAzMzP///////89PT3///////89PT09PT09PT0+Pj49PT09PT1aWlo6OjoaGhogICA9PT09PT09PT04ODhFRUU9PT09PT1NTU09PT0uLi4dHR09PT1jY2NYWFg9PT08PDy6urpDQ0MxMTEmJiZoaGgUFBQYGBgjIyMlJSV3d3eYmJjr6+tfX19CQkJpaWlhYWEoKCgvLy8hISEWFhYrKysuLi5WVlZBQUEnJydHR0eJLZnuAAAAO3RSTlMAgAIFTQkMSSoDLw4WJDVSSCALPoAsOxGAf3hiQwV/RjIRgH1iH1lURUIcFQ54CICAbWdnVz48eHdubc5A5usAAAMCSURBVGje7VjZcuIwEIRkEskHMsY2+MQO933m/v8PWxGfIng3ltlUUqV+g3J1qzUjaWYaAgICAgICAgLfjI4udw0EgAwi651rsys4BAYhVq5Ir3YBABFdVaRGQ1JUnQBFV73W6g3KHqmU+yYBVVEjRCWu4ULClB4HN58QYCqBpdqhNQDkzc1FbGQAo2a4ewh8JWO8TZD9ofiAerWii4AELDurERBAaq31ywX2uwwFDbmGh07GH7PfZ6A/MoUIQs44SAaQnJ/SL8eWRYhljZcnicwEAYMvlzD4QU6/GsvPbU2bTDSt/SyPV/eZicAHzHW+AHoJP139wppNR+/r9Xa7Xr+PpjNrQV0kCj0AnhPXBRzvD+V/aM21w3q76/dtu9/fbdcHbd56yBQwdDkyFEIp52+PXnZ9e+CYzabpDOz+7mXUPinEAlIIKocBvchP1+40MzjUR1FBr25BASSlATjx2wOzWYA5sE8K6SZJqHIUMODUwGI+svPl5ybs0XyRWsCVE8mHXsx/t7K015SfVXjVrNVdrNADv+IhBtRIDIxnh0G6P+wuDQ6zcWKhgaDacdYhSgXkqZPzswrOVE4FItCrhSDOIcq/fPIcp3kRjuM9LalCnEe4YpKqiYFWe2+alwVMc99uJRZUIBVj3EkELM0tF3A1KxHoVIwyAikRiB6HDD+jMHyMEgEJUCUBgDTGZNL8CyYkjTLA/xWQAPi3qJw/36IAEH+QywWYIHOn6Vu5wFshTbv8B61cID5ot/FB478q3NIdYq4K/svuWCZwzC+7EDo1rmu3xEB+XSvg13lwvOHFHPWYB6fWk+ldjDD7ZNZ79D97GHrso1+3bPHO4uB6dcuWhnFWeB0LJobHs8LLuErp6O1d6sN19x5/6cgmUrj5SvG7CQHzlu9GwJTvLUsmRLZaTPke0M8k7gYk+ncDQgB1fmoLxTSBt2coNIE/uY39SiP+00cJ6TBEPh+GyJTeUK4+zvkQVHWCPsY5v2cglY/UgMLonkZqAgICAgICAgLfiz+OHkqDTzvSAwAAAABJRU5ErkJggg==\"\n ],\n \"btn_radio_on_focused_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_radio_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAkFBMVEVPT08AAAA+Pj5OTk5PT09PT09PT09PT09PT09PT09PT09GRkY+Pj5PT09KSkpPT08+Pj5FRUVAQEBAQEBDQ0M+Pj4+Pj5EREREREQ9PT0+Pj5PT08+Pj4+Pj4/Pz8+Pj4/Pz8/Pz9AQEBBQUFMTEw9PT1DQ0NBQUE9PT0/Pz9KSko+Pj5AQEBCQkJCQkI9PT27eu1wAAAAL3RSTlMmANQnDQMiHwkPGT/RATAVykWLhlrHvkpO9sMcsayQzp+ZeGor7Fdx4aQyuHxeYgwIBCAAAANrSURBVGjezJTJkuIwEESTkiUveGOxjcHsO9M9/v+/G0dMRMt0q4QBH/rdOKCnUmYZg05Iz08CVyk0KOUGie/JQSc6CKSTuDDgJo58XyD9BSwsfPmWwAnwkMB5VRD5Cp1w/cgq4I/vjOIUvMBReArXe0ogAzxNILsLHLyCchjBu9fXJFEXgXTxMq58LPAU3kB5jwQO3sSxC3ygZwOY+/dmQO/nAx4n8NATnlkg0RdKmgSRi95YRAZBgh5JtIAJuLcqgQmgpxi0IMAjhvvxNU+J0vw63g87PxK6NXQ0mdMd+WTUravo0CAxXRJRtj2fhjchbsPpeZsR0fIEG25b4MNCURFlk0LcOWfjtFFYp3C0IFJgOYxDmu9i/CDeZRRODmBR0ZfAt0RbNafEMBI37mr4YATYB5hllBdgmeWUFfYUYN2x05o2MSzcrrQ+WYsE2w7M1rQSsCJWtGZnCP4LJPv+qT7fZsjYHGQj4CM+VLQReIjYUHXgY24E3JKNKY/RgVtOE5hZNAL2hYowLL4t9DY9luUx3U7FfVRhOGLfCFyHRHV/L7G71F9cPsT9rEv2jcB1aErzGJpRWN9BI2jijKbcNxUDBSMV7aH5W9bfOH5Cs6Mlt2uQzApQdmiNU9Y/KPetEVJiUojgcRUatxbiWBsoWx1YcUXy4JsjnlOhf4S1ERKtgXMY8ZHAxIjmrReuGT70HVIamlPGAibOtNV/vnCCix5hQ3uYCODCxIrOOuGa5VNPyYSwgIKJJemP8JYXbFprc4UJF2by1pOmvGDdCu0PTCiYSUmv8ZEXHHWTaY5noFYFy5pHrxqlv0vwr1lzWUEYhoKoSmoUKihYtO1CwdciiP//dwpdBCEhtzecNtl1VUib3JkzA2wR9ZHx3xQ/aPhVgV929HVtRAPn0OoHjmxkvkNvkI1M9dBvb6Khr5ctJ6ls4YVX5R/jgtBLx8/jch0lHXnxG5fvLlu+b6cxIMses1BJE3jMNIFpG/vcr1zCxp7jNlZkxF2GEZejhNc9hBK6FEqgYYgK5ywGnNMJcA4OpFRIranrRoHUWCjIY02/SQyYjUcr+mV3QTi+BuA4hPfpgIKOWOiQiI656KBu/qgRDUt9Wq2Le8sJrH/LWEXkDpYGTIG1B3lxY4NWT0xVennmr/5jh/qP7UfUf77mb6LnjEYeBwAAAABJRU5ErkJggg==\"\n ],\n \"btn_rating_star_off_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_rating_star_off_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACRCAMAAAAbxMEvAAABAlBMVEUAAAAzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUebIgzteUpkbgJIis7OzszteUzteUzteUzteVoaGgzteUEDhIzteUto84USFwzteUzteUgdJMGFhwzteUzteUmJiYFCgsrm8QzteUzteWXl5eJiYkysuEkgaMzteUzteWlpaUWT2QRPU4MKjYzteUzteUxrtwaX3kOMj+goKCGhoYnjbOtra2cnJyBgYEXFxeysrIyMjIvqdaioqJsbGyPj497e3tjY2M/Pz+SkpJDQ0MiepsYVGt0dHReXl4ZWG8TQ1WoqKhPT0+3t7doGm77AAAAVXRSTlMAgIAFCg4SGCY2MmYVQxwfIz+AToCAmFZ1XSqzboBKgIBHO4CAYlKPgYAuctrNgIB7aemAgIB5WoCAgOPKgPPfxYj5lIDmttLBr5vVnICAu6yAgO2jRlOc3AAACadJREFUeNrtnNd62kAQhbOzqiB6qMb0Djbghnu3k7jFKXr/VwmLnSy7KyFLMiIX/i9yh7/JnGkaDXz64IMPPnAPlhRVVRUJf/ofwLKqhRKlVCkR0lR59TZJaqjUzCFCrlnSYys2CStatY8ouVZIlT6tDmyEJohlnIiuziJs6GHEsxdZnUVyKIxE9hLqiuJI0rLIinFI/rQKcLSKrJnEVyEaVvQcsqG6CtEkLY/sKK5ANGxEkD2tWOAukgphZE9OD9hFooPKiCEbtIskjXVQHSqrdZGSQPN0OwB1NoqigboIx9kUOwSAxj6aox9soim1EZpjCIQDNE8pyFqEY2zTSAN8BVi/ZhpIIcByLYdynIM6pxmAbTRPxPgUFFgt8RH01RwAdBgX5ePBaCYWxc8AcGmaGS6KRgFlvpjzPwFuTZO4qLGJ5kgFlfk4PmFqNABsmVPaXC0q9gIKa5mdO34A3JmEY4DdwMNaDOnNdYAzcwYAnAQd1mJIPwJcmS98B6isIKyVBJ/zx+YLv0jmBxvWYpXuAoD5lwxAMvBqLfWKaI4ngG/mX74ApNE8CeXT0jEifEgfmf+4ADgJbk6jg4cY0jZh3Q8tXTNZ37MMaRrW+8GVIrEIlV/aGCUDUA+0FGF2lj4AeDDn2QA4ZB70l12KlBo/mQ1MBgAoL3twxC9IkiTL8Sw3eFyYLA/cEDIOKfL0k/gFHzZIsqwYhqpGo7G4Rij0QqGQnmJm6W0yeLAM+FI0qU0/1ysUtCnxWDSqqoahKPLUxDebohjRuNbTa4lItZRqZSf5ZnjKuNjP5UaIL0I3JoWWIoZcLlcch6c085NsK1WqRhI1PVSIR1VFxnixMbIR1UKJaisf7o+QI0NahJhStI0cGfXH+WwpoRdixtRZdvvdqKZHWuEceis7AOcmzxbA+iZ6I3vhbLVWiFmtuLEc01PhEXLBdQfg1BS4AnhEbhhnE5rBWyQZvVQOuSMJkDFFzgF2kEuatSjrJCmaGCO37AJ8MUVOAeAauWSvFJfxvD0Rl+6hk5DIHZmKXNPS5LllTyKHXHNAJyGWezLsuydFV6Vyb4zckybDPYVvH+6J/O0yOJpCrqFtQ+SZtA/3jHsyHUrd88S0DbF9eKCq0scI9zSY2VVoH13kFjo8OSl2/XnGMPnKQWXKDkDbtGMNYLcy5Sn5yuPnGYuspAMv1pqIp/y5ntyu7KTTabCHFiGxfdgz/ZuHlUoyeUKt4x5SpFCfsSVZ2V2HN/DdtOcY3kK6cnDCrQFfxnY0RwUELjIzfq+98nVjyv2puZCzjSnna688Z2a0QWD3mlndzgyqsR2c0M58Wzve+HJzc2O+N1s3N4ONjdu1uysgMCullPoiWW5esXWAzpkZBFt3ADBk8t6weJD4TAIoAIuIPXzTqyl0e8BZNDCXzU0G6DMcu3IzIki0aMNcLmcXgj1oEsfi1pnQbQBZ9C6TAVB7uBCimlHKpB4+m8vjHADWTyybK0HR+4hln2R/5sZcEmsk37vW4wcBq1WrZg6d5YT2DUmvQ2HKbc29y5biWcRT7wBZtbw/A/KHtzeFOb9ABKMzo9hgTxogDqn+OQawmrmLuoLZl/BhseUfAsDV0RLC50ScPGoqdr4r2dyGKffm+3F0RfppWbSH3osIFomB9N18L74ADR/RP+ItUBMJdNMk/99HtksiV6eOBIqsPTSOehMksP+TDof+OGqTmayLBMK6im3WH1oK2ci2Zvplg8rFkg8Z2PbgLl7ds5LNf7ZdfiPNYohEsgWFs4dbOhQtZNsGn/3/rE2yy0KuUUmT8eI9tN5EIo/rpEhe+pLryUKufiQmOd4p9bLIRra2t0Hy9NlOrqa+6MiQhnZphGyK5IZnucpW4dNT8JsuW2MkkASGRLbnS0+964eFXKMUDR8HJFXPI5HyLpHNpUVrdnIVEzEJv/3grZBCIps/XI+2W2T0sZIr7+5GFcuxiKVsAL/dCWaztU5pNHz8yHYC8OB2eH6ykCvCXBX7kG3bbe8/AmgslMunbA0Al5N/G+Czd7lE2cL8XrFtuuOW1ywXYbLLrWy1PXGv6FazNOufmOTrJX2f2wS7bvoX3I444vlVvrg7KtNNsCPijpjugHygMol24OX5esDt9Zua1wgS96G7nh5B6LsY9j21/6uBawAw3fMAUOd2HJ4xqsxwTcq0e46592eTmPesj024feixl/kMYH1f3JP5v8zZp2803XEFMHyfGx4lwXX6jNftVIW9u3qfpK8AnC8QZuFM1BAT33/SN8i5og33bWifXy5usP4TX9ZzDo2VrsQIVwP7BnvwHkdFRoQr07cLdhoN8s/3S/ti7f8QDEezXJkeWEbIA0w52Jw9S16d2RZr/8d7WAtzSX9p5540CZHrHbB7BnjgEr8mewuh0YKkp+6hT10zJ2XOnBO/angLIcekv++8uueVMnWSkPhc9/AdQmkx6U+/iQ+ldeokLvG7noOIhtDi2ez+grjnxGJ1KzpzjdsE67Lf0aMO8Gzhnm3aNTknHfGhv+M3iBQmhH5ynX5wwe6bRScd8x3fbyWKtri+8WvuoHONcY9AssNH0hXbPcIa9tfIukzf+NJh3SPSPeQK9y1A0ns7E18N1+feehxlRPeIJEkktQdzJzw7/h6GlARXhTZokaPJJcLVpIetf0HU8DcTqSXLKjRoA0DnYBO9gWGDBjepRGX27sTPOL0PADO1ZnPGYRc5QtfJr7r9Bhiyg7WfsngCcDd1+1eY0qi7uXrahSl306I0/eyBn9IohfpcTF+ed2adwjqYJ9VWDllRn+l2u+U3quUa9+WWrxcL1CpG4mpMz1vr9gSEW24LUjL8JNlPmJEeIkuyIVXCWNFK1k7qvn58nd05+DHocGbOI7Jzj4xn++2o3rQJpVkJ6PgxSK5xZWi3juzdQ9eSpZy9SQ32dslPoe4mu2ixewgzJ9WadoXyceg9qMXDNGf3UCf10QJoM3Pf7B0ZU/fMO0mfIGt8tXsl4vifbPUMyeaXLoqOro26NUgOOXg+X7PdxktqKDtCC0kovr61JVKsLtp+YzmeaC5UzMOUT294REYtUgodXkyUig6Hwf5/I8JZLQqe6taijwniZY57pHjL2t0RqpbDuxKbfMsXZG/rGM3ConG1YDBqLdQtXstbvbtz+g8tuCvoc96pFhYHj1gCEvkR96q14MEemr/0ux6jcCvBm+OMpMT1VDP3LzuzNP5cQ78Nkw/nWxG9EFUk7PUXk1L5cHNSqvViHtwjfl8orsWjhoyxn9+UimtazPfPSlGr8Hv8jdX/ntQHH6yCPxAVpRFrKWRlAAAAAElFTkSuQmCC\"\n ],\n \"btn_rating_star_on_normal_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"btn_rating_star_on_pressed_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"dropdown_background_dark\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAA2CAMAAACiEHRJAAAAflBMVEVAQEAAAABBQUEAAAAAAAATExMlJSU+Pj5BQUEAAAAAAAA4ODggICAvLy8WFhYAAAAAAAAAAAAAAAAfHx8NDQ0AAAAvLy8kJCQgICAQEBAAAAA3NzcWFhYkJCQXFxcAAAASEhIAAAAjIyMAAAAwMDAjIyMAAAAAAAAAAAAAAACu+DqjAAAAKXRSTlPmCekADkqr4e4qFcCA2KhEYwUShjwb1K5/Nge9pZ2YXUxALSTIrGZVSewvjJ0AAAC8SURBVEjH7da3EsIwEEVRr5AjJig4Z5uk//9BJNFBw+zQMLO339Ns84Lde+abPq6cs6q6rnN0avWOAD10e3zdoEFYB/hcsQQfq2YO3gmjmAXYWByFHAw55JBDDjk/dgw5f/UvcsghhxyUEyQMm3f8nofweinL8oCtCsE5LTS5Gsf+iKxXDbTWETzb9OM+nXHdpjTjwjkgi7TRywnZUkhwjoeKLUXnGOs4iEuZoQPhHQeJFvBZxTk+g+8FPAE5Rz/0d6kkJAAAAABJRU5ErkJggg==\"\n ],\n \"editbox_background_focus_yellow\": [\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"editbox_background_normal\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAA3CAMAAADT7y+MAAAA0lBMVEUAAAAAAACzs7Oenp7+/v6xsbGmpqYAAAAAAAAAAAAAAAAAAAD9/f36+vqvr6/+/v6Xl5fw8PBUVFTs7OypqampqamEhIQdHR3c3Nzz8/Pd3d3x8fHu7u7S0tLHx8fa2tqenp6+vr6ampqioqKgoKCBgYGSkpIAAAA3NzdSUlIAAAD39/fr6+v39/f09PTo6Ojb29vX19fk5OTf39+srKycnJympqaSkpKMjIyUlJSPj48sLCxoaGhqamoAAAD///8AAAD8/Pzz8/Pm5ub39/fl5eUurhQ7AAAAP3RSTlMAEX19/nZzGAIGCQ34/nT7avwk+GpiTCvn2tfTy7i1qX53cXBjRkMlJB8V+Ozi39/MzLezgXl4aV5ZSSgjIhntDpQOAAABGklEQVRYw+3Yx27CQBCAYTtskm3ujd5DgPTeszGB93+lHIwi2cvFYofT/C/waS4jzVi7+tk3C8PqR7mwDSc43QWxMPWfhg2DDRt+GjKqj/Tx0m9ufo22afbHmTYYO3++i4KV4YKo/ZixihT6t9HayQ3nrIP2OCyPxc96QU6U8Ui+6qW8RInXS0eB5NxMxRYpVqPtA0mKXLh2AW2p5SRXQDkV6vSEKKDy4yqloCJIIYUUUkghhRRSSNWkvg9HLScKKs8tU8JXUMl/qki8XREFknediMp9dS8VTA/vvETRr7gLYslO/Emrt/CoKz3TkCc7o4xpF/58OmhJw1JrEM851f8Wi1niHhnNTWaLYiYNM/+NYdTCsBpBfqT/AK7giup/9WGpAAAAAElFTkSuQmCC\"\n ],\n \"ic_menu_moreoverflow_normal_holo_dark\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAD///+l2Z/dAAAAAnRSTlMAgJsrThgAAAAdSURBVDjLYxhhoP7/kOcgwGjoEB06o0EF44wsAABBWUMn9krmtgAAAABJRU5ErkJggg==\"\n ],\n \"menu_panel_holo_dark\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAAw1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwVFRU0NDQgICA1NTUfHx9OTk5DQ0NEREQ8PDwwMDAAAAAsLCw4ODj/AAAqKiogICAiIiIkJCRKSkpMTExHR0dFRUVOTk46OjoxMTEiZHnYAAAAMXRSTlMABA0CJBAIChgTGyAqNlAWSWc8X3aJfI8eLidAMkU5TFtWPW9Ug3nti2Dt29rj4srKKLM+WwAAA8dJREFUaN7t2dlW2zAQBuAsTqLIK06gtmRbjhPC2oUlFFoovP9TdUZGh0SmoaeVwBf5H0D6jmacyOPOq7m0lE47s+p8eHaEHWFHeJPQX0vXQNbX+xvClp0NWbYT1ObDOiNjGdZREI3QBKjdewajHE3ESgfg7rj3ADI2GFwPJehQiCZBCRCA24fPIf8VtQoyEKEMDYICjOrtQ0IpTTCugSQYWJCENWOkEE2CrMEzQG7uGIuEPCNkNV4joEACnJMv9w9a7vX8eC0/G/ml5/OJgwhpeCZcvgi6KBiE4cm3x8drY3ncyMPD15MwHKABS6EIqgzyDEJKz66fni5s5enxjNIQz0GWokGAMyA0ObImQML1UUIJnMM6QSL60Ai9HpxB4rCrC6u5Yk4C59DrQTs0CNAHics82wSPuQn0g0aoyzAm1GVpZpuQpcylZFyXYp2AvUigDJlvm+BnUAqCHblJGI6wE1wv9WPbhNhPPRe7YTRsEhIgFJVtQlUAIWkSsBmJ66RZldsm5FWWOi7Bhnwh9GsCNqPP7RO4jw1ZE/oaAZqxyCPbhCgvoCEbhCEQCHU8IAjbBAEEz6EECEOdkDDPj6PANiGIYt9jySuEMUVC9R6ECgl0rBFGAySkBRcL24SF4EWKhMGoXYSuJLgeEma2CTMkeK4kdJuEmAf2CQGPd4TWEvqKULwPAduxfQ9lKwgt+IH+0L8piPZnbdnQ/LPuaFcWcXRzYTFXR6JxZcFsXNyOz+9utufqn3Nzc368cXHrrBN69fWV5+Xx6e33t3K7NXd/zOlxmfP6+tp7IWiXeC6CcrI3ny4PDvf39z8ZCSx0eLCczvcmZSC4dolfqemCIsBjKWblXm04BIWJwEJSsFfOBDySitDdJNQ/TvBMQDcEi3ICiPl0ulweGMhyOZ3OATApFwF0AjwP9Q+TIsio11qHpVnFo2BWThABCiOZS8CknAURr7KUOeq1Vs2aXl7uiSxFwXMhFrMSGWaC25ezhRA5L2QZiHq51whyxMGgFDHPIxEgAhgGUpYICESU8xjKwOSIo0Hoq1ETnAMgiorneRQJIQIDgWWiKM95VQAAzkANm/qKoM+aoB9S348rDgpwGEgO4byKfT+FPtBnTSt97Ij94DAvTbPM94uiiA0ElvH9LEtTjznYB5uDx1Vz7kjRwDypAIeBZJnc32MooNrcUR8A4zkAAhQ4/GUgMRJYSA6BEwqA+gzaOYNGg0SoWXxICDUYQkI1h1eD+BZ+j1CfZWoFngVKjEV9HML9JaDfsm9TKy2XlqPv1/kNylczeSvTmjMAAAAASUVORK5CYII=\"\n ],\n \"menu_panel_holo_light\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABCCAMAAACsNf57AAAA5FBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd3d0AAADJycnMzMy6urrs7Ozu7u51dXV8fHwkJCRjY2PQ0NDb29vt7e3s7Oz39/fy8vLv7+8AAADx8fHk5OT/AAD39/f19fXm5ubr6+vo6OjHx8fKysrNzc3Pz8/R0dHT09Pz8/P5+flMDi8tAAAAOnRSTlMAAwkNFwYkEBMgHDsqNlBJGnaJfF+PZycwLUEzPk1HW1ZEb1JkgWCGaP1qY+ff3c6KiVsm+vf09OvngRpQJAAAA7pJREFUaN7t2Wl3mkAUBmBsCJEdY1qWYVUkLtnTVY1ZuqQ1////9F6QAKOx51Qm8YNvPod5zp0ZmLlyKzNhFG47M+PePDvCjrAj/JPQYJi1BHr8/ZpTKNYSirHfMUghoQg0oBh+r8YUjBKCJhTj49gHkGaNweehpFC8SMgB8F98rUHGAkERaAAOj6MbhgQRa4oEMQx0ICNH0IS8BBkgG16oLRkjQ+SFoAkoyADXo2/zu7W5/c88Pd1+HV0jAg05YVIqAgoOeH50Pp8yynx+dz7i+QM0PJdhUhU0YQrOpmOGmZ7BdDTLhkl5GrAGkvh5zDLTL6KEdSimYgJ/GQH2AtZAML+PmebBFLAOsC8oAk5DWgNTYU1QTKxDNhUFoYEEXAiiaRPWBGKbIi4HJDTKBFyLOA2WypqgWjgVsCKrhH0gNGEaFFuVWRNk1VZgKppA2F9FsGSXNcGVrZUEXIyGKNjEjVgTIpfYgmjggiwIjZwAK8HxWRN8B1ZDTmhQBMEkaqSzJuiRSkxhNUESFCL7HmuC58tEEaRVBEMyFVXWNdYETZdVxZSMZUITCLbqvgbBVW0gNKsEfDciQXa9LmtC13NlJOD7kSaIQHBeg+AAQVxNUCwghKwJIRAsZQ1BY0/QdoQdoULY1k35Bq+m7XpBlz9T9+PlsP1McfTH+hNTw8Ng+WPNVY4scqSfDMYMc3OiRzJ1ZMFUDm4Xp4+Dmw1z/0JuBqeXlYMbVybs5cfXq4vTH6vzcym/qDyW8ruUP4t8PLm8yo+vewWBPsTrWpAMO61Wr3d8eHj4vobAY457vVarM0wCTacP8TOKANvS98Ig7nda7TYgQLF5jgHQbrc6/TgIPR+2JE0o7pQG7glYDVo3OAIEVAIcdaQFFQDAUdDVYCXgfjCKOyUQMBmBxzslcR1dC4Mk7g87oKgl8KBhP06CUNMdl+Cdks8IXInQyC/3eKt0It3rhkGQJHH8oYbEcZIEQdj19MjBG2V+uW/khGqLw1QsVXYj39MAATmqIUGAAM3zI1dWLcXMWxw0AQxphwHqQADhRL6v656n1RDP03XfjxwAEKhB2l0AQUGge02CaVsqIpwIGODYND4MHzkIUC3bFOhe04xuO/IGIhTbsogKkJoCjyKWZSsIyGqQC5BA9x0zAyBQQYhaQwjB8QGQCqi+I9V9RUTW/k2bvyZIagk8KG0CSwjIO8Db2INODYjIe/HgWETaKMYifNGHBwAKtvD3CDQ8I1IHSmpL8eMQAjBb9tvUjMqEcejxuL9XNZodPDUZeAAAAABJRU5ErkJggg==\"\n ],\n \"popup_bottom_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAjVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0BAQEAAAAAAAAAAAAAAABaWloAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAaGhpoaGhQUFAeHh5ZWVlaWlr///8AAABqampXV1fx8fGbm5tSUlJgYGBRUVH5+fljY2MLHkH2AAAAJHRSTlMAAwYME1IpDwpBITgvThvHSx0WJDP1RW48Oi0ZPUlm4pBe9LzqzGhUAAACDklEQVRYw+3S3VLbMBCG4YQkwrJsodjGjSwrP6X8lAD3f3nd3dkwTIMSK+aEQe+xNc98kifR3WPxx/jIdHo1u57rXBRKmsXi5vHh6U98Tw+PN4uFkaoQuZ5fz66mU1aSk5zkJCc5yUlOcpKTnOQkJznJ+ZlOBo77QseBkwX2uKXolPQjHS9VJ5YudG8ZO70vRzml79nJwk7dNeCUI5wSnKarTzizeUVOO9Jpyanms1OOaKw0ZoRjjLSNOOfQD+f9CMd7+t3+dyh2Dg/UtuC8XuC8gtO2h+dhhzt2rJR3b/u/l7R/u5PSnnI+Xlwvt5v988vLc1R4YL/Zyv7DtbFzPEjnMEj15XZz+/s2Mjix2Za9gjm5PswJODgIb87sduv1+ldM8P1uZ/DWaE7YQaiCFxJFY63tZeuNKYdmjG9lD+eaQsDrVMh87vAgTZBayQscuVLEaJ5DzvEghvJadCDBIrAGBgasAaUTdQ5MaA4Pel+EUqOUxVbnsphSDSrva3jOscODCMprogrABlYUhNQ5MTgn5DCEixxISMVECCgO1xCDTmAQQyQtwQJsYDkYS1KYCczBEKI3QqlyTgM2OK2dq0DBOyOGlfDV4SSkAIsICERwzIlLY4gloNBCbVAkoIEIKcyEIZaQii9jhZkBEJXFRWfOMwwhxVpMLDDCzDlrVEFjvDpJpVKp79R9fJNg/wAgGweRXaclSwAAAABJRU5ErkJggg==\"\n ],\n \"popup_center_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAAALCAMAAABVqWPqAAAAS1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVlEREQODg4AAAAAAAAAAAAAAAD///8AAABbW1vd3d2VlZVSUlKKX/cCAAAAE3RSTlMAUAcDQjkoIRoUDwvvsGdNSTEu3NAXBQAAAEtJREFUOMtjIBWIQAHJ+iAUMzMTNxcnBzubECuLACMjr6iomDAZQFyCh4+Rn4VVkI2dg5OLm4mJGWrLqD2j9ozaQ749+HIwyQCPaQAIoTUzantFuwAAAABJRU5ErkJggg==\"\n ],\n \"popup_full_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABnCAMAAAAqn6zLAAAAq1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSk8PDw2NjYuLi4AAAA+Pj44ODgqKio5OTlEREQwMDBhYWE0NDQTExNra2tqamppaWlFRUVqampqamr///9cXFwAAABTU1NWVlbBwcHHx8fLy8u9vb1jY2PT09OioqKZmZkZwWr6AAAALHRSTlMABgoOTSMTTxY9Kx0ZETMvHydIRkA2ODqBn5WJRJqQe3iFgf1qUOrf2pTl5E4lyI0AAAMkSURBVGje7drbctMwEAbghDhO5Pgoy1YBA06bHji0TYEA7/9k7Frd2jOtHEnN9DT6M8MNcr/5Vd9kt5OxXFlm8vIzhY/ZqanbD586xgYk5J1lzCWq0hMzw/SYkaQQAhKrKM5A6rugEYbh0irwAFokjYWUBI04jlcWgeNgAbWv0pSYBBAg8nxulTwHDCiSxtugAkXAKIoisggcBwukMEQIC2nqEIMKEFmWpRaB42ApaTZWiJhOAaOqaymZYaSs6ypFak4QFtLWUQwikgnRNE1pFDgoBJN1ilAeLxMFPRBi4nweZWnNRFNyHgTBwihwkPOyEQwkbBQmmkJYB2+tYyopJUFmIUZKBdHNaeus8NKkON20x8fHRx8tcgQPtBsOjaIip0IPBBysU0SpZKfr77tLh+wuWi7rLFKFdH1mSVenYnL97WR77ZDtycVGSlUIL+6+MumuLV7NoY5gX3fbvzcO+bfdtUzU8BuKl3RxmmuDOo34dLn988MhN9eXX0QjU+3FTTtniU4teAPOLxfnNzhNw+DiVvHQuYKPinLUtQXlY5ySiyorco2Dr0GonCbgj3E4F/U+B99qVgb8vbtzxINGwosw5qjXoFwEj3GC4PZFeCIHX+wxR/DX4pRP4yyMnPoADvOOd7zjHe94xzve8Y53vOOdV+BUB3De1vfGwffgl/C9/mDO889dDjlHeqa52B1z6xxozqd1Dj+31PS5N4f96RDNHFY/Vz5znSufbyTTzZXJGc7Jz9zm5OctZzQn3zv3r6Q4bdefIR8sgufXLRdy39x/uMdgbnsMCQ8O9xij658CIWRAWRgnCGgvE82xDl6bfjuX3EIpSqLbMnGDwDG1aKqgDTDaOlSo35ul3UpLRbCR0H/KukqhzJCZji/oYoAKWgNWRlGLwAgUtZ6jOppCg4UjUl0yg9BmE3eoPTMdX6Aqida08LDJB4NIbLCnpYUwrZ1XmNwoeBIRUEYZyv01emyUfpHer7dNFvbKgoSGwbMzRKjMvpBEmFmIIGUf1NV1+asNMowUsvAfx9w9byTRMUuBAKtgf4cnfHx8fF58ruwz0eY/HRQD4ERyIRoAAAAASUVORK5CYII=\"\n ],\n \"popup_top_bright\": [\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABOCAMAAAAKPPg1AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYAAAAAAAAAAAA5OTlpaWlYWFgjIyNWVlZFRUX///8AAABqampXV1fx8fFcXFxUVFTHx8e+vr5kZGQwQJg3AAAAIXRSTlMAA1IGChNMIRovKA9BOMcNF0g0JSw+HpUcOkWN9aVcv4I+EWOzAAAB1klEQVRYw+3YUU/CMBQFYJxattGpA1q3qqgIKPz/H+i5vUsmiYV2I8aHe567fDmnfdrkZNYpmSTnalzSmOshiYd64yY9vRWnsHGfGrYipE5hYzab3aYE59nqpBNMrzDxkBLGfkjnGChE5HneIDYmDYLzwFhi6AxDCgw7nU4X8cFpC4ukkxBN6stAAQKjLMtlfHB6QRRJvtIVEqrTMXa6AFEU85QUxXIJynZQqBDXIaYhBUZVta2JTdtWFSySGkAoFHT83TBTzKvWaO2cq+OCk1qbtpoXDM0YCtVhBmWggFBKZXHBSWCQUImhQCG6HVott2AwGEOQIlMzg/kA2ZyWu/6tUF+nRBu9entCHlNCH7ytNBqVXaGQQ3WwGkZbvTzvhuT5ZYXpsBwVIicwm69TGQPmc0gAGVNxIR4uMJulOlq/7g77r/TsD7tXramQDQwHhx517us4d7f5eB+Sj82dc75QjqcdcDCbd3Rdw9kOYLZw6lp7xw/XO+sjp6HZnFIjHKUcDdccOesjh6/HjHYMHHveqVU2wslUfdbpricb5WTdBQUdPDd7McfiwYWci/b5P44a6ShxxBFHHHHEEUccccQRRxxxxBFHHHHEEedv//OFs07PJJhvB2dQcPxwm8wAAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo1\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAKlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWZdn3rAAAADXRSTlMABRAKFywhOfYnMR3v8BlJngAAAUFJREFUaN7s0D1qAlEUxfE7hBRJNc9ZgZk0IU3GZAXGzsZG0A1o4QIEewsFQURBtLHyoxURXIS9he7F8jRPEN6c7vzaPxwu10RERERERESe4R5ACYExmtgi+oXolvx6ZXGEEgBjLM4c+0L0zEofXmkcoQTAGEtmCftC9NQ+K17lnxeUABhjSa3EvhC9bNWW1yFLUAJgjKTz7/6O5AvR93aqey2LBZQAGCNp7t33jHwh+tTaXa9dsbDo5gBjJL2J+9qQL0Rf2/nmdRm/jW45wBjLwObsC9GvD/9Ve8VAAIyx9K1BvBBd/8r1X6t3DATAGMvQtsQL0fUv/evenh3bAACDMBDcf2tW4CUapLsRKBKwzevNvLz3/seDedlX277qHmr3kHu73dvynJbnyAtbXiiPbnm0vqP1Hfq02KcBAADAwgBwBEHj/3RdFwAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo2\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAALVBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUW/iK7AAAADnRSTlMABQoQITkYLCcz9hTw7fhFXIgAAAF4SURBVGje7dmxSgNBEAbgOUE03e5aWm0C9l7ExtJDlDRpUtgmcgg+QCS1KGqTQkHyAmIjKEF8Ct8iRQrvGcRrdCN7e4ObsBf+rzpuYJYZuGN3lgAAAAAAAADKkAUERdKnmdUCyy0ockdJ1e0kybpHWkTGaoHlliSdUU2Npp0m1fQoFpGxWmC5NSlnNKbd1C4WjbfUn55W5mpec6/spQzcas9i+o72aJzYvcqtxKOWVifJL4HlLq62m0dbdNq3Ot+XO1d9fy62Nw6NF0Hlzqt1RS/pqGN1fCvf7zv+PLxsXhsvgsqdV+uK3tFHZjelm8ynYS2bm+H6c8bArvYxj34W9mtCg8r0q73G6Re/2icaLLxf7dWf56r1a4p+saqdlOrXqDr9qv2/X6PiKPrF6xe+R873iP9X8P/7Zd9PYL/6Z7+K8xDvPITzNvO8PXbMMDw6mJm5BJa7W2aeg3khb16IeTRvHo37Dt59B+7TmPdpAAAAAAAAACV8AcebDMLiSs2oAAAAAElFTkSuQmCC\"\n ],\n \"progressbar_indeterminate_holo3\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABQIKDyEsGDkm9TMU8fft+mrRFgAAAchJREFUeNrs0ttuwyAQBNBZLsYY4vL/X1sbq/CKKky16pyHJJZWuyNnQERERERERERERERERP+BaT/mQ2UUgarIA2nXH+t9uj9E7m9jZLq2WRFdiVem7cfGBw3EWrkfxb5ABBCxiogARk3ilWl7TcYHBda56/l6ctO1zYroSrwybT82PmjhQnbWGOtymO/ZHBT5eRc6LEzbajI2KHXQIXsfrIgN/gX52axItmL0JF6aNtRjo4O55kOI0TsR5+M2Xdushq7EK9P2Y+ODMcCnFLNIjmmfrm1WQ1filWn7sfHB5PEp5YhAPMobEpCKKqm+Cy1Wpj23sWO1T/5TLl+1XhuwsV6PHdj01Gtl2jONHat9ikvqtQN7UYX1mlKvjfX68z9MV9pz/2W9EpBYr5Y4qarXsrTn6LEjsV7f7dsxCoAwEATAMlb+/7m2WlgYONjFmRccKCRcdhM+WNe0H34vh2PCcdM17Xm4e1V9sK5pA6/2FhMP1dPuLCasVa1VB9eqHoWKJy54FPKk3TtxwZP2aCBn1QVyVlUgZ8UHcsQJb8QJ32zGCYWhmyfOD0OrcqhyzFU5FNGaJ84voqnRqtGO1WgBAAAAAAD4gwuJzBUuUw2jkAAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo4\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMAAwoGDyEsGDkmMxT39O9TQliZAAABzElEQVRo3u3ZP0sCcRgH8MehoCZ/6hvwDzSfNzZlRoOrIubiJAi1hHFEi6O01GJBEbgEBULQH6I3IOLSFjT5ElxFtOvH1XYafPGODvx+lpueh+89cMfvjxARERERES0tpVRYP0IK4dT5woniMecFF84hWliUaZqGEhU1EUrX+cOJ4jUjHFIL51C6iZJ0QjMkmgBgBQHonAyH0niOGU2SkspqSZXOArCCAHTOGNEUnmNGk4zsWpZ1klGpVwuhCyx/OFG8Vo9HchZg5kie49FcXV4K2qHaKEAegYIAdC7HI0dgiXskRd2kLMfVarWWVzsXVUAtbwIFWGfDh86t7Vhp4RytrVjpUvaazebptfl21wRgBf/f+f5p82rRHE6TWxna2qfc2JCxPNj+GOso3muvDWxM15Vjer4y/PqZ14ccBGVeIx3Fe41VdF59V45pZW3wO6+u7KNvdWb7YwREQeb1js7LlWNSWeW85ur9Na++dIIzr47tvcY6PC9Xjkmb88Lmxe9xvh7/Xx7877meANcTXK9i61Xuh7D9EPfb4H4bP89BCwLQuejZeQ7PC2eZf17I82jsPJr3Hdh9B+/TsPs03teC97VERERERERL6hv2rPU7MZ28hgAAAABJRU5ErkJggg==\"\n ],\n \"progressbar_indeterminate_holo5\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAANlBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteV6AHYNAAAAEXRSTlMABQoQFyw5ITIm9R889PfwHc7yYP0AAAGqSURBVHja7NLbbsQgDARQc12T7KbL//9scfqQSyshdYWFpTmPEbFHMAQAAAAAAAAAAAAAAAAA8An3y/5VwbHMIBu5Tyn1Z5Nw/ka+O+cVHMvMsZH7lFJ/9k+/fLjx8p8PCo5l5tjIfUqpPlsONCHeBC+dizpaCNeWmSOXN3/ucSn7NZEDTVwfF2uUF29fFRzLjLGR+5RSf7YcIKJ3SRdlDc6FtSQFxzJjbOQembK8O7NlORE9OF9wkf8KZw1conOxLTNmzx1mzz0wZb8mcoCIvurNqxCVV1XCRFwN4v2SZjcw5ZY6s6VHf9RrSURpqUoyUa4G5f2SZjcw5cad2UtCvWZ8OBsp/10vJmK1m3sSPatBLTfPX6+BKbfcmb0w6jXjw9lIiXp9t2/HNgDDMAzA/v+6szcDHSIZ5AUCkqGN5aHn4DpSul5Dz8F1pFxcL5/2iR/NHSn9OQ49B9eRcnO9PKsGPlh2pNw8qxoK5Y1bOlJuhkJG2qdzJ4y0FXLO5k4o5KgTphX1OlIu6oTK0LdzB5ShrXLczR2wymER7XDu94toAAAAAAAAAD98BS4GIUUirlsAAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo6\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwCAMAAAD3noS3AAAAM1BMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteXQS9SJAAAAEHRSTlMABAoXECA5LAb1JjENTd7cUtpBCwAAAcdJREFUeNrt291ygyAQhuFdQCVgk9z/1ZbGtkfgTH/QVd+HQ2bYb8IeGEEBAAAAAAAAAAAAgL9Q1VgZqvXJ/uOrcjzcWIJbTt4h4LJmcyq6uo8sGl1P5iqfPfgSsMeazSkXqmanIurm0JG1ymcP3iHgsmZ0c3Uqisy+LjgRF/wOglMtlY+nBBfTwXsEDFHUhWYL+aHOO1Xnh57MVT578B4Bg1Odfauc+DTVpCGohiFNPRmrfPbgPQImP2ssazbKyTBW5RRiDCmPm8vJx+hL5aN5BQ+Gg/cImIegjd3KKajcnnW3JJLK5A6ySH4eUX79ZIZ1CPgIIm/NFmq31yQy7fNbjSLj84hK8Ml0e3UI+PDt9ppoL+O7Zz7g/ZftlUUy7fXT4Nl6e/13wPvQbq9MexnfPfMBaa82+7tnPiDt1WZ/98wHXG0vHu2NPzmbD3jnn2OT/d0zH3D9xQSvVW2/tTQfcP21KodCps9czAdcPxTiSPtCwXc40uZCzoWC9wjoVy/kcJ3Q9m098wHnteuEXIa+UPDtL0PzKceVgu/wKYe2SKE9Gax89uBSbLimvGhlfNPNxyc93LCffLHVkgAAAAAAAAAAALiGdyuD+5ssDOz3AAAAAElFTkSuQmCC\"\n ],\n \"progressbar_indeterminate_holo7\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQIKEBcsOSEm9jMd+vBmaXrxAAABc0lEQVRo3u2Zv0rDUBjFPzNEShZN4p7aJ4j6AkF9AFG3Dp0Et2wdfAFBBwe3OgtOydpdB1/A1UdwFy7xZvLDofY09HJpzm9qPw4/woGE+0cIIYQQQgghpLfsa9RgZTKRAIjjdnHq0in7c7iribPADmAAh0/21oWlMkkONXkW2EE38p0twIHbg8StS3cSy9GJ5jge2gEM4PDJ3rqwVC6nl5qLg5EdwAAOn+ytC0sVMr7VvOWJGuDgDtw+Gjt16dT9ubxfaZ6K1A5gAIdP9tYFpa5f5W6qmRfpbNqR+dke4MDt6cypS3dy8yhfjeb7YVA1HTF19AnEYfugcusyk9/Uy9++JmH3p6mjZo2UYeXWZepwvX2V2/rfRvX1zL7+xZQL+qoj7/uKKrcuo1If7Avri+/jEn3x++XV975P6wmuVxevV7kfwvZD3G9j+22e52DnOTwvhFIFz6OhVM77Duy+g/dpUCrjfS12X0sIIYQQQgghfeUH+E4C2CXdn30AAAAASUVORK5CYII=\"\n ],\n \"progressbar_indeterminate_holo8\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl4AAAAwBAMAAAAybmm2AAAAMFBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteWkAkYNAAAAD3RSTlMABQMQFwksOSEy9h4L8O0G0W7OAAABgElEQVRo3u3ZsU7CUBQG4GMHlc0WuzG0TdxcDJCY6GJgKwuSvoFhwIWtcXZpZWGT8ABGpg4Y4kr0PXgMw2Jd1Jv0NjbXHG5K+L/xkvzDP9B7zyEAAAAAAICd5WU5RGR4HBy1IPV00pTz2wiRa0o88kwWlmO4Zo5ypRfniEYssgOJRW7Aonu0ZwfsRLph68kRjXSpV5csvVqdxaXlvuWdlyu9OEc00qRGW9L0em0WreuTRt55udKLc0QjLfKjrFHHfH+NOLwsa37ETqSf+npyRh3ru5E5LfqSuXnRZ3F7Vl3knZcrvThHNHJDcZh1d2+eP4YcJlfHcchOpFdjPTmikQmtUskzPaQ8xpV0g8aHiaacp59GPmmV9+sg5TE8SDdouJ9oypnRAH0p5Kz/7GtG0+3oq5JoyvmgKfpCX+hrK/rC/33WGt/Hf94ncF9Vu6/iPaT2HsJ7W+29jXmO2jwH80K1eSHm0WrzaOw71PYd2Kep7dOwr1Xb1wIAAAAAAOyqL3DZCqyBVRiEAAAAAElFTkSuQmCC\"\n ],\n \"rate_star_big_half_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"rate_star_big_off_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAyVBMVEUAAAAAAAA8PDwAAAAAAAAAAAAAAABoaGhBQUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJiYkAAAAAAAAAAAA1NTUJCQkAAAAAAAAAAAChoaGPj48kJCQAAAAAAAAAAACmpqajo6Ofn5+WlpaUlJR1dXUVFRUAAACrq6uampqYmJhwcHBgYGAAAAAAAAAAAAC0tLSxsbF/f394eHgAAAAAAACMjIyFhYV9fX1tbW0sLCwAAAAAAACioqIAAACvr69YWFhUVFS3t7eP8DjqAAAAQnRSTlMAgJkyeRpOs5x+BQNzDmEWOsxaaAmVg29TLuTSjkQlHurn4tjXvIg18d3aua5kPhH7+MS+ZijPycK2klZJ5mz1qadtR87CAAAEB0lEQVRo3u2ZiVbaQBSG5wshhbCGTdZKVVQExIXW3bbz/g/VTMSGJUgWxp6ew/cA5Myd//73/oPYs2fPv2Ba/S4+g1wVcyo+gTOgKfRjm7ikhXbKUIei0E0uD8fAodBMCx7l4BNuqQqOPIdsQWjlEE6llBnoCa1U4Nb90BGYttBIIQvn0qUOKaGRS8hIRQdmQh9K20Pp0dDatF+Vtt8YgSW08QQ38o2+TjkoKfyUcwyNcigrKbzzQ6PhVeFE/gXQNJZKyhV8xnAptPAMD9JnCAdCB6qJ2nKBro5h4TeRz0BTKzXhXnrobaWaqfx0iTpoWLxSYMhl7qAidk4RfshlriFbE4od249cJQNnQqHHfnw6Gmxopuxnjd0vKVNoyHUyUE5kAmmPVmrOs1WEsVznGA4sq5yak/bYpg/3dy8tqzKbZQmkLQPoEsjrbGJZPffL9qq9NKts4U4GcdzlY/KVVG5BuyzTMDzGX+Y4zpHcRN9xRl/mZAzFKcu0ln0M93dvHWf48nIlE9N/aTvOjftl4GDxzuwiau/YNUNVu5IQq18ayd3SWf2Owq4Av+UuuVXfma73jgUY3+SuuPoFVAsb7IzTodwN7TrwZG9Ic1n8WZCMC/hoSTrMozad5NwB5kfTtzABMokvarQmt2BJNI5lEr6pNi1uHR+pLGrdic9JA7ByYivpg0TlU92TDTfga5X45Wsbyt1KoRcEVb7buGXzuydk+Yy2jMgAMKPFM/tJle8ketleSyIiZ2bE8p3g0rRj5K5o5RvNyxYDu4nLRbgm9csWh5QJXRkGZQaWnSC25lVWCQFkW0mDeF+GoAuFRBlCBfEwjKGcMEOMw2q7mCh9hVJd8lxRU+lrO8kz2Rlkwu9wlUQvqB0ZjuskbwG2CdcyJAZ8TfBWYsiw3CR4R3mOsvj3wczFf2Xqy9DUY79BHW5y1OAANYj9ut+DQVCaNDCCtHgE1diGup4ozx9QGAFZ8zSmsdaCDPX4FDCDw/M4pjm04NdqV3rHseyU6U/55ObQBGcli3SBAyWtaZH1hHMdT+C51YfAqwEL87ps+otzMoGnob6UsB+BvO8ypYl3qOQCLy+n9HtcmrXFI19mVw51FGv6VRZn3lFdHWce4VYO1VmafnacK7p+vx3vOE/+cVYO9eJPv+gOfug794kSm9kK3seqiz11A70YVzTwgyKVwqaT99ShHi/eL2kS44q8KOageuejgF0q4vKlr2oco5Py3n9SF0oE2Z69xUPyQKPzNmbTkTfHrjwf4VIsbbfFZ1zqQ/kQ2e6+w+97fBFsI+2JIuOAFVkLDVysWth2UJ6kKEZdFxSTdJRqW1mI/OeVBcyiNt+0qWotInGZt77GyVO914nYs2fPf88fm/2TZoiTETIAAAAASUVORK5CYII=\"\n ],\n \"rate_star_big_on_holo_light\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAMAAAAqwkWTAAAAvVBMVEUAAAAAAAAAAAAAAAARPEwdZ4ISQFIAAAAAAAAtoMsAAAAAAAAAAAAAAAAmia0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqlLwONEICCQwupNAsncYnjbMjfZ4hdZMKJC0AAAAqlr4GFRoAAAAAAAAvqtcebYobX3kAAAAAAAAAAAAysuErmcIpkrklhakfcY8AAAAMLDgAAAAxr94xrtwieZkYVWwQOUkkgqQAAAAzteXrvX7WAAAAPnRSTlMAgBkzmbOcfAXmA2FzTc14Og9uVC1pWiUUfmXYlYPq4tLDvY5E24g1C/G3rlA+CPve18u6HZJJ+PbAqJjHIJaA4UwAAAP2SURBVGje7dkHduIwEAZg/YaAwdh0FkyvIfSEtE2Z+x9rPQ5ZAzbgpuzb9/gOgKPRzEijiKurq3+hXq2In5CtIl0XP+AWQFnIp+ZhUYR0BaAFaEK2bA5oAngUklWAJ9r+wC5VAYPugEZRSPUJTIgoBYyEVDVgQERdIK8KiYoN4I4sLSAhJFoCKWI9wBTycG5vyNaWWrS/OLe/zABdSFMG+vSlIzMdpg3glXbeJaZDgVPhmyGx4VWBe/oLgKTuoHBXcMyBpZDiGZiRYwOUhAxcRBnaM3QOCxlF5NhKKiWniOSW0irN/fRAC5Bw8UoASTr0AdRE7DTAoEOvQGMlWMwnER1LAbeCyWk/jp6ENmRy+3GJ/5JSB9rklgIKkZqAYqskdp51DZiTWxMo6XohsaPYpuI863eXul4zzTQ8ZcjDEJ6qpqnrI+vL6nF7KVdxwQN5aQ5xXq6WyO4dnTjUTtrmNzsPRpdO6RjG9mYnlWQT7DvsHgsA1u8ODGOTyawpsk4mYxh968sASvs1rWoAPihuY45dXYjjL20pXj3nOw61BuCN4vTb/R2WtfcpQ3FZv3GaF0+0M0w2FI9uC0BZPTHNcakacaXBuUvSZw5804nuAUC+cu7UMQGkIm/UjNNAOd9OdW4MTYoiw2WqTS/eDXij+hResw1Az4qLlFKk8HH1pP0d8Kta+PBlktzdFN8XBA7fbwruvu2qnkvhC9UmBhy2YOOZWrbDJy9sjlsO3yBI2OAKm5TwbV1hCxY+jP0dqXbY6iIkLt4h+cHNYKFGuDfmeFbxAWhUog7iHfJhGHFEL/Ig7sccKEScIeZ+c1uLNn15Z13cc8WUpy9PMc9kt0DK/x2uFukFtUf+vADp0HWkpoEX8ikJ/IrwVpIkv/oR3lGeg1we+B0lG/6VqUO+tUK/QT2e6qjrU8frSIQy8j74mu9498rFLlAN3VDdE+XdDOy9Sy6TkI116tVQmxMAee/heR6yOVTcg9mrvRxdTeSdUz56cyi7/urxEEDpk48PDe4J5yVcgmfzR4frevC1nL07ZioTQ4IrQIv2bJ4A5JwuUzftRUVP8AIwO7q7o7zaX/LyeFFdQAvVuccHEykv55BiL6p3cPqpgbdor3Ov+/ZyXKOVa1GpEB380enc98PTE6lSheXD6eCjEFs0cAZF1IqnVj7iRT2NvzfJDLFFze/5GqVzAalrsNx0OMZAOmgl5YBXojEnQXqkXughOQDt3tcxqwS+OQ7pbguLVr88jD7D0trQTeB29wt468MzCc4kRcoA9MC50IZlsfJbDoU8bFrQ6wLTggR8qjeAwP+8WgAwgxZffcGxFoEsc4swtzRlVNLE1dXVf+8PiLJs5G2Z9ooAAAAASUVORK5CYII=\"\n ],\n \"scrubber_control_disabled_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAPFBMVEUAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIg4st+Ci486sd5LqMtwlaJJqc0zteWzIZSAAAAAE3RSTlMATUg+Ihs3AywVCEUP4FHVmWCf15i9tgAAAYlJREFUaN7t2Itu6yAMBmD/NhBuabuT93/XI03TOm0qJXasdVK+B4iFTQyYTqfT6S/pIScRBlgk5dDpSDUkxjecQqVDLDHhgRQX++cDY4CDMURgPMGB9IpgghRtdjImZVWeqmCaVEV6GDvw7jRF7BQV33eMEAHXCAUq03WoDBWuNGURKMlCMzLUslMB7oo5QfYkBZiEpwtgmPBiWoB9CUuDUVssPcLeMRLMEg1UHKDqS2wvcwJ8c8Q4ANNDHYfoviUAgrpRX27XbbveLhjL2hq/rdu79U1bZcHIZd0+rOM1CD3SMHLbPv3DSFPu0us9wKrcpxjavsCQewD3FLkX2X2buv9ov9cqIg4R3du194HjfmS6H/ru1xbvi5f71dH98ut+ffd/gPg/ocYEBkLPdRj0V3iIG5IkLzIMIeqqCNydB0bllUZq96Gj39ixN+zQOu1WE6alShphvgEp9YQJ0kkvNjzRItlEwYBEsiuZH2zNXOgYS8ztR2pyXOhItYQsH3IolU6n0+kP+Q9bEx2UrsdzRwAAAABJRU5ErkJggg==\"\n ],\n \"scrubber_control_focused_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAllBMVEUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVtyu1yzO1ryuxexetjx+tTwelvy+1yzO1yzO1xzO1syuxqyuxwzO1wy+1nyOxZw+pNv+hxy+1wy+wzteU1tuVOv+k9ueY4t+ZixutDu+dJvehVwelYwupSwelryuxGvOiB2w4OAAAAJXRSTlMATQYKEQ0XGh02RUkgQSwmMjvw1flze2To3M/j3IyrpYRsX62hrNdO2wAAAttJREFUaN7tWWlz2jAQrZb4Ej6wjc0dIC2+OfL//1xllxl1Wq9AVjQhGV6+BD68xx7aXa1+PPHEE5KA7k8LoMXoCmjxseSM1TCMlyvYv+yLjxJp2Rm1aZqWZXewLPaBybQa6uzQsVt24IQepYSBUi90AtvqNABAmd5k5B75Dx4TMdUkOnrLnVCCgE5cq5MYTm+6zpgIMHbcP1YM4mfO4fS4BHPUAIXOOz4ld4D6nZ+k+U03JHcidE1UAXdPQMndoAHiJpzf8okUfEtCoeWfEElMWoX7+R0iDQdRwH+/sg14/vhkEPx7cgnAMAMyEIFpANx2kEuHClCXO0kQgJAMRngrDAA8AEPDACA2wKYqAtTmJiAGOEQJDjcBifBYTWAsjDM3QM0EXQZwE3ADhDVi9mu5jqbr5XYvrBjMBPwMeARFuqhO54bhfKoWO4LCQ88CE8CLxNuyOtdFWWZZWRZ1XsUzvGAwAekQJ/NjXWaHK7KyPkaJdJhHBuqh/TQvGD1HVuTTBPWRMcJO8Rjxz5zzc4XoDckj5DTDCC1D8ZHzc4VjjBakEUgl6aaqOT9XqKuNVKKCgRXqRV4eelDmK6xoIwJIjJPOgF4TEiTKvQJopX49FYdeFMdXtGbLJNGy9VC/j2KJNAJ4sUkv5k3WL5A1EelFv8AIE5iiAu9TGQHQJ8BjoNVFoCHIymn6U5ym6gctxQ4aUouQUrFSLxXifrNDi52o46iX6/NCslzjDWcW9TacmaDhSLbMtKdlXlLBWCHd9NPon6Z/jlJB0x8wtsziKq+LMmPoxpaFeGwZMnjtVtUpb5r3Jj9V882NwWvY6LjfxuvLZR1vE9nRUf/wy6uF+vhuGZ95AeGZqmIA6L4Ear/G6r6I614laF+G6F7nfP5CSm2lpnspCA+y1hy8mNW8WoaHWo7Lr/cf74FC6onlUR+JdD1z4Q919hV/PdR9hafGG4+lX+e994knvjF+A/DCfuTfcOFvAAAAAElFTkSuQmCC\"\n ],\n \"scrubber_control_normal_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAhFBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVKvugzteUzteUzteUzteUzteUzteU/uuczteUzteVJvehJvegzteUzteVKvug7uOZHvOhHvOhDu+dDu+czteU5t+Y8ueZAuudFvOclVTOqAAAAJ3RSTlOZAAQJDxgTITo2HSomlX0uijJC6IZuYVFMSbJmgf74kHjvp8/MvLsvv+3mAAADbElEQVRo3syU23aiQBBFz4w0NA2t3AXvmqxE8P//bxqMFip0G4W1Zr8keTmbOlUd/BmZ/0fw945hBJQ9mUwsy7Ib1C/qT7K8J2jCVTJjQjg/CMGY8jQSo8CYrr6bCcf3ZqHLf3DDmec7gqlZyPGC4PztzPFnLs+zdBcEgQSk+rFLs5y7M99h5zl0An08Eyq9WE63eGA7XRbKIZheAU28+njPjZYJekmWkeupMTRFoTffquPnUwktcjqvFVbvEOiLt0UdjyeoFcLuU6Dv8/2woHiTogj9viHQma8+n6cSTyNTroYgg1bQtB/mAX5FkIfNJsyCph43k/glMnP9LgM68j2+wwvsuNdhwEO+8KIVXmIVeeLBgI78BC+SdBjw0E8U4GWC6KEl3NxnnZ/gDRKuNn1zrbi5f+bzFd5ipQz0Hu4EE9txd3iTnevYkzsBLTjM8DZZeLNo3Cwgl3gbmXvtNaBVkM8DDEDA/VZJaBeUYhBSKqktYF4hMQiy8BgJWhc0xUBMW5cEGmCOwZjTCKABVsCAI1y2gBEGoBFIYAnawDAjCIsEzRuIJAZERvVbIIHFZksMynLGrLbAcRMYOXzG8Xodx58HGElchwR1QwVMfO1PVVUqquq0/4KJou7oKjA3dIhP1fH43XA8lqf4YO6IBOYbWmwqlU4cq83CfEdXge3wrT5/XZ7zyVCu9YYtd+yLQK0g1/ezoXwybPQt5WoJjaBZQQYdMfXTbimGjqxewlWQau/nRPltw0l7SykJLBFqd7wvvzsp99oth8K6CrTPbEED3I+w0D41EuiP6KPqE1Qf+jO6CNSVSt2Ky+8eSt2apbrT5wSbfsHmaQE0rPsFa2jQTDC8YPyKtuMsmc40GO1Mx39o4/+rMP+z+1etGeMACEIx1BuQqJPRwUQG739BHYzFEMNHfBE5AAwov+2rv3vsfOKx0wHYc80PHH5k8kPfLlvWfNmSJbx8KLy8VXhJOhr837B08zTN3TLYpaPEb7kBjP8CXL7DBoS3UKAJHOVjcRvLG3E+SuDDED7O4QMpPlLjQ0E+1lQwW3TRfasLAKNlOhyn430aUNCI5XtIdGAu9wxz1QHqAtQ4mj6eEzXWA0vzca/2Nx2gIwzAWtu/gdybfZmQe35pwF1LAy4oDdRce0gVN/5SPYlXTe2cDUmLl89GXuGIAAAAAElFTkSuQmCC\"\n ],\n \"scrubber_control_pressed_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA1VBMVEUzteUAAAAzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVsyu0zteVuy+0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteVdxOszteVpyexuy+1tyuwzteUzteVZw+pNv+huy+1xy+1lx+xgxuszteUzteVryuwzteUzteVSweluy+1uy+0zteUzteUzteUzteU1tuVOv+k8uOZVwuo4t+ZJvehCu+dgxutjx+tEu+dGvOfyQddBAAAAO3RSTlNmAHzex6Jq682mwiLmgYUv7m3hTPX14fmJNNmeY1HSvbCMmI47/e21tI+IeufcnZRyHf4Gn4DVv2BIOFolky4AAARISURBVGje5Zr9e5owEMdvIKiooCKgnS9Tu9p29r3dW0Sttv3//6Stu0BkJQlIfLY9+/5qnnzkcsld7gLvDqz/B1AbaJNSpRIQElQq1qTl1hQCbvrVOnmjerV/owJQ03TCla7VCgL6FSJRpV8AYJZJBpXNPQH9JsmoJuwBcI+Sc1RODdu2TQDTtrvGaJikH7k5AbVJws5VDd5IqybWp+TkAbgeidU2TODINNpsnOdmB2gklmWDULbFxmoZAU6JTd8AqRpWwkxyQC9e3foZZNJZvM/1nhzwPfZ9AzLLiPfEsQxwHERDu5BD3ehvBcdiQC8aWGpBLplW9Md6IoAT2f8D5NaHaB0cASDynyrsoWr08TwA8//3sJfeR/uBB3AT/7/AN7jpAMfj2D/3OnhOKqBETQgFZNE50gDfqJu1igBa1M2/pQCG+NMYCqlL48NbgCk8H3KfGuYbAEaoOhRWHSPg3W+AFoLPigPOcKbWbwBcHAsUyEJnSQK+IrahAtDAub4mABi/dVAiHTOFXUANobYagI2z1XYA+FVtUKQ22nsH0M60B85nF/7trX8xe8i0F9oMcEM3B4h0OX9ahY8/Fa6e5lcgEt20NzGgL1/iT/42fF6uFz+1Xj6H24tP8mXux4CqNAxMO6vNekGoFuvNqnMuDQzVGIC7WxPM/zFc4vQRYhl+FBA0PHcQEDlpU2CfDpufEToCKzXRUSlggBsDuPJXbH5GWF0AV7hxBxSAH3TK95/ths3PCM9bvi+dotEpwJCkEifhmqRoHfqSBMOgAEscyqb4ASmf8MRd5zEezhRwJHaiL6slSdVyNRO70RECaCy45i4xWijNRp+Bo2uMCRTgYQgCjjqPi3TA4vEEOMIA6VEADgeePr4QHqADPOEICgjwqDscoIlrcDgT6ehFh1vkIQagw7npSJwSXRXYaAWPirnsqCh22G3kh93Bj+usAechd8ApY8DJHDKv0kLmVB4yk0HfyBf0p9LEiAV9kF/OHvxtuInSlk249YVpC173AAEsNQWhLk9eE6+Xl9fE6+QShGLJaSJ1nIBY05k/v72d+7NzEGtCU0cG6KpNfvFw6+4Aeuz+oe4G0tu9gAzVX0CGiRsOKPwEjboMA7Bb7EgFYIQHQ/o1dgyFNU6/xt55qi7i6PLeHaeUcA8Fdc8rJdDITLpKiiF6SrXFJQp2m0lrtK6gIGWpL0hROYGqklrgpBcFB0WLggZBDXhlzbGasmbjjxRmUY6uqLQsL45bZk7/HBGU18tY3q/nK+/XZeV9RigTqvv8y0uaxxlaLHreFsu4zVosOZtEIw2k0kZ5mkSoRvY2V8NiYxs5GnVBxkadzsYFgzytRqckbzUapWSrsViztIzN0l9W+dUsTXaCdXePdq/pkYzyWns2rLEbIFPz+q5Ay30om37YL/pooCF6NGDXlDx7MNOfPZg19Q83XmemDzf+tacnfy/gB/s76qMkz3F7AAAAAElFTkSuQmCC\"\n ],\n \"spinner_76_inner_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,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\"\n ],\n \"spinner_76_outer_holo\": [\n null,\n null,\n null,\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOQAAADkCAMAAAC/iXi/AAAAsVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+3mHKcAAAAO3RSTlMABgoSH/3yGiQO7CkW9vouMkDkRTfJzjvf0+jESqBcV2Hbt66ldlLXv06yZWmBqZtxu49tl5OLfXqFiHO5Lf0AAAtLSURBVHja7NxrU9NAFMbxZzeRNk1qYmxLWyxQLhYsooKI+v0/mHshOXu8dDTNZXHyO4X3/zmbDcMwoNfr9Xq9Xq/X6/V6vV6v1+v1er2eH7bb7WmWZSn+Zy8KL6cXj8eZxPMnNJhxI6n05fzT4ys8X8KCsIXit5HGwbvLCZ4fYVCjQIEl6nmyPN8GeEaEFAqvLEOdRP1FxuPxu9Nn0imkIhgq/M0mqVFnjlaH8J2QmmCVsIOdmxzrz9hY3Hh945pEW+k2FscVPNImUqbZpbH8NoCnTCJtkkDs3iRVlg4eQniIEqmSNqnnj5ukNVLkwejOu20KGUleyTa5+3alTGpUn+VXr55NlagaI75IsnuTFFk0HujRZq/hDRkp1PhLJuzs2iQVUqW28uTMikj5tfLXh3LHJsdm3MhCfi/Qvaiw48BCwCGyLJtst9/PZ/znHdZImdMMHROBE0mZbiV2iK8/3uZ079BZpcbRwfIGnZJB4FTyREmFu4XHF8sxXyQzGt0G6IyIqJGfV9uIv3f4PWfXThloZzFBR2Sg8UyKxL96czHii3RCR6OP6ET0lEiVdF4FqohOP9kfBHif/X4RoX2BZit/PrCobnLOd2hDjaME7aJGXikV7Ce7OKBd6sCychaiVcJJ5JXYX/yhSKQDa2xStIEaEzeTEuuRHbG7tTQ/RGtEQonu3SNQm22uEmmPhfwaLZGJolfJlylRp+Dzbza5XC5P0AqZGAHvjARqNpkVbdQ4Wuav0QKRWO5jGQUS9ZMf2Fld2plnaBg18kyBRpzmJo8qtXWMJlEjP7AR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\"\n ]\n };\n var imageCache = {\n actionbar_ic_back_white: null,\n btn_check_off_disabled_focused_holo_light: null,\n btn_check_off_disabled_holo_light: null,\n btn_check_off_focused_holo_light: null,\n btn_check_off_holo_light: null,\n btn_check_off_pressed_holo_light: null,\n btn_check_on_disabled_focused_holo_light: null,\n btn_check_on_disabled_holo_light: null,\n btn_check_on_focused_holo_light: null,\n btn_check_on_holo_light: null,\n btn_check_on_pressed_holo_light: null,\n btn_default_disabled_focused_holo_light: null,\n btn_default_disabled_holo_light: null,\n btn_default_focused_holo_light: null,\n btn_default_normal_holo_light: null,\n btn_default_pressed_holo_light: null,\n btn_radio_off_disabled_focused_holo_light: null,\n btn_radio_off_disabled_holo_light: null,\n btn_radio_off_focused_holo_light: null,\n btn_radio_off_holo_light: null,\n btn_radio_off_pressed_holo_light: null,\n btn_radio_on_disabled_focused_holo_light: null,\n btn_radio_on_disabled_holo_light: null,\n btn_radio_on_focused_holo_light: null,\n btn_radio_on_holo_light: null,\n btn_radio_on_pressed_holo_light: null,\n btn_rating_star_off_normal_holo_light: null,\n btn_rating_star_off_pressed_holo_light: null,\n btn_rating_star_on_normal_holo_light: null,\n btn_rating_star_on_pressed_holo_light: null,\n dropdown_background_dark: null,\n editbox_background_focus_yellow: null,\n editbox_background_normal: null,\n ic_menu_moreoverflow_normal_holo_dark: null,\n menu_panel_holo_dark: null,\n menu_panel_holo_light: null,\n popup_bottom_bright: null,\n popup_center_bright: null,\n popup_full_bright: null,\n popup_top_bright: null,\n progressbar_indeterminate_holo1: null,\n progressbar_indeterminate_holo2: null,\n progressbar_indeterminate_holo3: null,\n progressbar_indeterminate_holo4: null,\n progressbar_indeterminate_holo5: null,\n progressbar_indeterminate_holo6: null,\n progressbar_indeterminate_holo7: null,\n progressbar_indeterminate_holo8: null,\n rate_star_big_half_holo_light: null,\n rate_star_big_off_holo_light: null,\n rate_star_big_on_holo_light: null,\n scrubber_control_disabled_holo: null,\n scrubber_control_focused_holo: null,\n scrubber_control_normal_holo: null,\n scrubber_control_pressed_holo: null,\n spinner_76_inner_holo: null,\n spinner_76_outer_holo: null\n };\n function findRatioImage(array) {\n if (array[window.devicePixelRatio])\n return new NetImage(array[window.devicePixelRatio], window.devicePixelRatio);\n for (let i = array.length; i >= 0; i--) {\n if (array[i]) {\n return new NetImage(array[i], i);\n }\n }\n throw Error('Not find radio image. May something error in build.');\n }\n class image_base64 {\n static get actionbar_ic_back_white() {\n return imageCache.actionbar_ic_back_white || (imageCache.actionbar_ic_back_white = findRatioImage(data.actionbar_ic_back_white));\n }\n static get btn_check_off_disabled_focused_holo_light() {\n return imageCache.btn_check_off_disabled_focused_holo_light || (imageCache.btn_check_off_disabled_focused_holo_light = findRatioImage(data.btn_check_off_disabled_focused_holo_light));\n }\n static get btn_check_off_disabled_holo_light() {\n return imageCache.btn_check_off_disabled_holo_light || (imageCache.btn_check_off_disabled_holo_light = findRatioImage(data.btn_check_off_disabled_holo_light));\n }\n static get btn_check_off_focused_holo_light() {\n return imageCache.btn_check_off_focused_holo_light || (imageCache.btn_check_off_focused_holo_light = findRatioImage(data.btn_check_off_focused_holo_light));\n }\n static get btn_check_off_holo_light() {\n return imageCache.btn_check_off_holo_light || (imageCache.btn_check_off_holo_light = findRatioImage(data.btn_check_off_holo_light));\n }\n static get btn_check_off_pressed_holo_light() {\n return imageCache.btn_check_off_pressed_holo_light || (imageCache.btn_check_off_pressed_holo_light = findRatioImage(data.btn_check_off_pressed_holo_light));\n }\n static get btn_check_on_disabled_focused_holo_light() {\n return imageCache.btn_check_on_disabled_focused_holo_light || (imageCache.btn_check_on_disabled_focused_holo_light = findRatioImage(data.btn_check_on_disabled_focused_holo_light));\n }\n static get btn_check_on_disabled_holo_light() {\n return imageCache.btn_check_on_disabled_holo_light || (imageCache.btn_check_on_disabled_holo_light = findRatioImage(data.btn_check_on_disabled_holo_light));\n }\n static get btn_check_on_focused_holo_light() {\n return imageCache.btn_check_on_focused_holo_light || (imageCache.btn_check_on_focused_holo_light = findRatioImage(data.btn_check_on_focused_holo_light));\n }\n static get btn_check_on_holo_light() {\n return imageCache.btn_check_on_holo_light || (imageCache.btn_check_on_holo_light = findRatioImage(data.btn_check_on_holo_light));\n }\n static get btn_check_on_pressed_holo_light() {\n return imageCache.btn_check_on_pressed_holo_light || (imageCache.btn_check_on_pressed_holo_light = findRatioImage(data.btn_check_on_pressed_holo_light));\n }\n static get btn_default_disabled_focused_holo_light() {\n return imageCache.btn_default_disabled_focused_holo_light || (imageCache.btn_default_disabled_focused_holo_light = findRatioImage(data.btn_default_disabled_focused_holo_light));\n }\n static get btn_default_disabled_holo_light() {\n return imageCache.btn_default_disabled_holo_light || (imageCache.btn_default_disabled_holo_light = findRatioImage(data.btn_default_disabled_holo_light));\n }\n static get btn_default_focused_holo_light() {\n return imageCache.btn_default_focused_holo_light || (imageCache.btn_default_focused_holo_light = findRatioImage(data.btn_default_focused_holo_light));\n }\n static get btn_default_normal_holo_light() {\n return imageCache.btn_default_normal_holo_light || (imageCache.btn_default_normal_holo_light = findRatioImage(data.btn_default_normal_holo_light));\n }\n static get btn_default_pressed_holo_light() {\n return imageCache.btn_default_pressed_holo_light || (imageCache.btn_default_pressed_holo_light = findRatioImage(data.btn_default_pressed_holo_light));\n }\n static get btn_radio_off_disabled_focused_holo_light() {\n return imageCache.btn_radio_off_disabled_focused_holo_light || (imageCache.btn_radio_off_disabled_focused_holo_light = findRatioImage(data.btn_radio_off_disabled_focused_holo_light));\n }\n static get btn_radio_off_disabled_holo_light() {\n return imageCache.btn_radio_off_disabled_holo_light || (imageCache.btn_radio_off_disabled_holo_light = findRatioImage(data.btn_radio_off_disabled_holo_light));\n }\n static get btn_radio_off_focused_holo_light() {\n return imageCache.btn_radio_off_focused_holo_light || (imageCache.btn_radio_off_focused_holo_light = findRatioImage(data.btn_radio_off_focused_holo_light));\n }\n static get btn_radio_off_holo_light() {\n return imageCache.btn_radio_off_holo_light || (imageCache.btn_radio_off_holo_light = findRatioImage(data.btn_radio_off_holo_light));\n }\n static get btn_radio_off_pressed_holo_light() {\n return imageCache.btn_radio_off_pressed_holo_light || (imageCache.btn_radio_off_pressed_holo_light = findRatioImage(data.btn_radio_off_pressed_holo_light));\n }\n static get btn_radio_on_disabled_focused_holo_light() {\n return imageCache.btn_radio_on_disabled_focused_holo_light || (imageCache.btn_radio_on_disabled_focused_holo_light = findRatioImage(data.btn_radio_on_disabled_focused_holo_light));\n }\n static get btn_radio_on_disabled_holo_light() {\n return imageCache.btn_radio_on_disabled_holo_light || (imageCache.btn_radio_on_disabled_holo_light = findRatioImage(data.btn_radio_on_disabled_holo_light));\n }\n static get btn_radio_on_focused_holo_light() {\n return imageCache.btn_radio_on_focused_holo_light || (imageCache.btn_radio_on_focused_holo_light = findRatioImage(data.btn_radio_on_focused_holo_light));\n }\n static get btn_radio_on_holo_light() {\n return imageCache.btn_radio_on_holo_light || (imageCache.btn_radio_on_holo_light = findRatioImage(data.btn_radio_on_holo_light));\n }\n static get btn_radio_on_pressed_holo_light() {\n return imageCache.btn_radio_on_pressed_holo_light || (imageCache.btn_radio_on_pressed_holo_light = findRatioImage(data.btn_radio_on_pressed_holo_light));\n }\n static get btn_rating_star_off_normal_holo_light() {\n return imageCache.btn_rating_star_off_normal_holo_light || (imageCache.btn_rating_star_off_normal_holo_light = findRatioImage(data.btn_rating_star_off_normal_holo_light));\n }\n static get btn_rating_star_off_pressed_holo_light() {\n return imageCache.btn_rating_star_off_pressed_holo_light || (imageCache.btn_rating_star_off_pressed_holo_light = findRatioImage(data.btn_rating_star_off_pressed_holo_light));\n }\n static get btn_rating_star_on_normal_holo_light() {\n return imageCache.btn_rating_star_on_normal_holo_light || (imageCache.btn_rating_star_on_normal_holo_light = findRatioImage(data.btn_rating_star_on_normal_holo_light));\n }\n static get btn_rating_star_on_pressed_holo_light() {\n return imageCache.btn_rating_star_on_pressed_holo_light || (imageCache.btn_rating_star_on_pressed_holo_light = findRatioImage(data.btn_rating_star_on_pressed_holo_light));\n }\n static get dropdown_background_dark() {\n return imageCache.dropdown_background_dark || (imageCache.dropdown_background_dark = findRatioImage(data.dropdown_background_dark));\n }\n static get editbox_background_focus_yellow() {\n return imageCache.editbox_background_focus_yellow || (imageCache.editbox_background_focus_yellow = findRatioImage(data.editbox_background_focus_yellow));\n }\n static get editbox_background_normal() {\n return imageCache.editbox_background_normal || (imageCache.editbox_background_normal = findRatioImage(data.editbox_background_normal));\n }\n static get ic_menu_moreoverflow_normal_holo_dark() {\n return imageCache.ic_menu_moreoverflow_normal_holo_dark || (imageCache.ic_menu_moreoverflow_normal_holo_dark = findRatioImage(data.ic_menu_moreoverflow_normal_holo_dark));\n }\n static get menu_panel_holo_dark() {\n return imageCache.menu_panel_holo_dark || (imageCache.menu_panel_holo_dark = findRatioImage(data.menu_panel_holo_dark));\n }\n static get menu_panel_holo_light() {\n return imageCache.menu_panel_holo_light || (imageCache.menu_panel_holo_light = findRatioImage(data.menu_panel_holo_light));\n }\n static get popup_bottom_bright() {\n return imageCache.popup_bottom_bright || (imageCache.popup_bottom_bright = findRatioImage(data.popup_bottom_bright));\n }\n static get popup_center_bright() {\n return imageCache.popup_center_bright || (imageCache.popup_center_bright = findRatioImage(data.popup_center_bright));\n }\n static get popup_full_bright() {\n return imageCache.popup_full_bright || (imageCache.popup_full_bright = findRatioImage(data.popup_full_bright));\n }\n static get popup_top_bright() {\n return imageCache.popup_top_bright || (imageCache.popup_top_bright = findRatioImage(data.popup_top_bright));\n }\n static get progressbar_indeterminate_holo1() {\n return imageCache.progressbar_indeterminate_holo1 || (imageCache.progressbar_indeterminate_holo1 = findRatioImage(data.progressbar_indeterminate_holo1));\n }\n static get progressbar_indeterminate_holo2() {\n return imageCache.progressbar_indeterminate_holo2 || (imageCache.progressbar_indeterminate_holo2 = findRatioImage(data.progressbar_indeterminate_holo2));\n }\n static get progressbar_indeterminate_holo3() {\n return imageCache.progressbar_indeterminate_holo3 || (imageCache.progressbar_indeterminate_holo3 = findRatioImage(data.progressbar_indeterminate_holo3));\n }\n static get progressbar_indeterminate_holo4() {\n return imageCache.progressbar_indeterminate_holo4 || (imageCache.progressbar_indeterminate_holo4 = findRatioImage(data.progressbar_indeterminate_holo4));\n }\n static get progressbar_indeterminate_holo5() {\n return imageCache.progressbar_indeterminate_holo5 || (imageCache.progressbar_indeterminate_holo5 = findRatioImage(data.progressbar_indeterminate_holo5));\n }\n static get progressbar_indeterminate_holo6() {\n return imageCache.progressbar_indeterminate_holo6 || (imageCache.progressbar_indeterminate_holo6 = findRatioImage(data.progressbar_indeterminate_holo6));\n }\n static get progressbar_indeterminate_holo7() {\n return imageCache.progressbar_indeterminate_holo7 || (imageCache.progressbar_indeterminate_holo7 = findRatioImage(data.progressbar_indeterminate_holo7));\n }\n static get progressbar_indeterminate_holo8() {\n return imageCache.progressbar_indeterminate_holo8 || (imageCache.progressbar_indeterminate_holo8 = findRatioImage(data.progressbar_indeterminate_holo8));\n }\n static get rate_star_big_half_holo_light() {\n return imageCache.rate_star_big_half_holo_light || (imageCache.rate_star_big_half_holo_light = findRatioImage(data.rate_star_big_half_holo_light));\n }\n static get rate_star_big_off_holo_light() {\n return imageCache.rate_star_big_off_holo_light || (imageCache.rate_star_big_off_holo_light = findRatioImage(data.rate_star_big_off_holo_light));\n }\n static get rate_star_big_on_holo_light() {\n return imageCache.rate_star_big_on_holo_light || (imageCache.rate_star_big_on_holo_light = findRatioImage(data.rate_star_big_on_holo_light));\n }\n static get scrubber_control_disabled_holo() {\n return imageCache.scrubber_control_disabled_holo || (imageCache.scrubber_control_disabled_holo = findRatioImage(data.scrubber_control_disabled_holo));\n }\n static get scrubber_control_focused_holo() {\n return imageCache.scrubber_control_focused_holo || (imageCache.scrubber_control_focused_holo = findRatioImage(data.scrubber_control_focused_holo));\n }\n static get scrubber_control_normal_holo() {\n return imageCache.scrubber_control_normal_holo || (imageCache.scrubber_control_normal_holo = findRatioImage(data.scrubber_control_normal_holo));\n }\n static get scrubber_control_pressed_holo() {\n return imageCache.scrubber_control_pressed_holo || (imageCache.scrubber_control_pressed_holo = findRatioImage(data.scrubber_control_pressed_holo));\n }\n static get spinner_76_inner_holo() {\n return imageCache.spinner_76_inner_holo || (imageCache.spinner_76_inner_holo = findRatioImage(data.spinner_76_inner_holo));\n }\n static get spinner_76_outer_holo() {\n return imageCache.spinner_76_outer_holo || (imageCache.spinner_76_outer_holo = findRatioImage(data.spinner_76_outer_holo));\n }\n }\n R.image_base64 = image_base64;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var NetDrawable = androidui.image.NetDrawable;\n var ChangeImageSizeDrawable = androidui.image.ChangeImageSizeDrawable;\n var NinePatchDrawable = androidui.image.NinePatchDrawable;\n const density = android.content.res.Resources.getDisplayMetrics().density;\n class image {\n static get actionbar_ic_back_white() { return new NetDrawable(R.image_base64.actionbar_ic_back_white); }\n static get btn_check_off_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_disabled_focused_holo_light); }\n static get btn_check_off_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_disabled_holo_light); }\n static get btn_check_off_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_focused_holo_light); }\n static get btn_check_off_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_holo_light); }\n static get btn_check_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_check_off_pressed_holo_light); }\n static get btn_check_on_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_disabled_focused_holo_light); }\n static get btn_check_on_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_disabled_holo_light); }\n static get btn_check_on_focused_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_focused_holo_light); }\n static get btn_check_on_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_holo_light); }\n static get btn_check_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_check_on_pressed_holo_light); }\n static get btn_default_disabled_focused_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_disabled_focused_holo_light); }\n static get btn_default_disabled_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_disabled_holo_light); }\n static get btn_default_focused_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_focused_holo_light); }\n static get btn_default_normal_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_normal_holo_light); }\n static get btn_default_pressed_holo_light() { return new NinePatchDrawable(R.image_base64.btn_default_pressed_holo_light); }\n static get btn_radio_off_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_disabled_focused_holo_light); }\n static get btn_radio_off_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_disabled_holo_light); }\n static get btn_radio_off_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_focused_holo_light); }\n static get btn_radio_off_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_holo_light); }\n static get btn_radio_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_radio_off_pressed_holo_light); }\n static get btn_radio_on_disabled_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_disabled_focused_holo_light); }\n static get btn_radio_on_disabled_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_disabled_holo_light); }\n static get btn_radio_on_focused_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_focused_holo_light); }\n static get btn_radio_on_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_holo_light); }\n static get btn_radio_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_radio_on_pressed_holo_light); }\n static get btn_rating_star_off_normal_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_off_normal_holo_light); }\n static get btn_rating_star_off_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_off_pressed_holo_light); }\n static get btn_rating_star_on_normal_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_on_normal_holo_light); }\n static get btn_rating_star_on_pressed_holo_light() { return new NetDrawable(R.image_base64.btn_rating_star_on_pressed_holo_light); }\n static get dropdown_background_dark() { return new NinePatchDrawable(R.image_base64.dropdown_background_dark); }\n static get editbox_background_focus_yellow() { return new NinePatchDrawable(R.image_base64.editbox_background_focus_yellow); }\n static get editbox_background_normal() { return new NinePatchDrawable(R.image_base64.editbox_background_normal); }\n static get ic_menu_moreoverflow_normal_holo_dark() { return new NetDrawable(R.image_base64.ic_menu_moreoverflow_normal_holo_dark); }\n static get menu_panel_holo_dark() { return new NinePatchDrawable(R.image_base64.menu_panel_holo_dark); }\n static get menu_panel_holo_light() { return new NinePatchDrawable(R.image_base64.menu_panel_holo_light); }\n static get popup_bottom_bright() { return new NinePatchDrawable(R.image_base64.popup_bottom_bright); }\n static get popup_center_bright() { return new NinePatchDrawable(R.image_base64.popup_center_bright); }\n static get popup_full_bright() { return new NinePatchDrawable(R.image_base64.popup_full_bright); }\n static get popup_top_bright() { return new NinePatchDrawable(R.image_base64.popup_top_bright); }\n static get progressbar_indeterminate_holo1() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo1); }\n static get progressbar_indeterminate_holo2() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo2); }\n static get progressbar_indeterminate_holo3() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo3); }\n static get progressbar_indeterminate_holo4() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo4); }\n static get progressbar_indeterminate_holo5() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo5); }\n static get progressbar_indeterminate_holo6() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo6); }\n static get progressbar_indeterminate_holo7() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo7); }\n static get progressbar_indeterminate_holo8() { return new NetDrawable(R.image_base64.progressbar_indeterminate_holo8); }\n static get rate_star_big_half_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_half_holo_light); }\n static get rate_star_big_off_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_off_holo_light); }\n static get rate_star_big_on_holo_light() { return new NetDrawable(R.image_base64.rate_star_big_on_holo_light); }\n static get scrubber_control_disabled_holo() { return new NetDrawable(R.image_base64.scrubber_control_disabled_holo); }\n static get scrubber_control_focused_holo() { return new NetDrawable(R.image_base64.scrubber_control_focused_holo); }\n static get scrubber_control_normal_holo() { return new NetDrawable(R.image_base64.scrubber_control_normal_holo); }\n static get scrubber_control_pressed_holo() { return new NetDrawable(R.image_base64.scrubber_control_pressed_holo); }\n static get spinner_76_inner_holo() { return new NetDrawable(R.image_base64.spinner_76_inner_holo); }\n static get spinner_76_outer_holo() { return new NetDrawable(R.image_base64.spinner_76_outer_holo); }\n static get spinner_48_outer_holo() { return new ChangeImageSizeDrawable(image.spinner_76_outer_holo, 48 * density, 48 * density); }\n static get spinner_48_inner_holo() { return new ChangeImageSizeDrawable(image.spinner_76_inner_holo, 48 * density, 48 * density); }\n static get spinner_16_outer_holo() { return new ChangeImageSizeDrawable(image.spinner_76_outer_holo, 16 * density, 16 * density); }\n static get spinner_16_inner_holo() { return new ChangeImageSizeDrawable(image.spinner_76_inner_holo, 16 * density, 16 * density); }\n static get rate_star_small_off_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_half_holo_light, 16 * density, 16 * density); }\n static get rate_star_small_half_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_off_holo_light, 16 * density, 16 * density); }\n static get rate_star_small_on_holo_light() { return new ChangeImageSizeDrawable(image.rate_star_big_on_holo_light, 16 * density, 16 * density); }\n }\n R.image = image;\n R.image_base64.actionbar_ic_back_white;\n R.image_base64.btn_default_normal_holo_light;\n R.image_base64.dropdown_background_dark;\n R.image_base64.editbox_background_normal;\n R.image_base64.ic_menu_moreoverflow_normal_holo_dark;\n R.image_base64.menu_panel_holo_dark;\n R.image_base64.menu_panel_holo_light;\n R.image_base64.popup_bottom_bright;\n R.image_base64.popup_center_bright;\n R.image_base64.popup_full_bright;\n R.image_base64.popup_top_bright;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var ColorStateList = android.content.res.ColorStateList;\n var Color = android.graphics.Color;\n class color {\n static get textView_textColor() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0xffc0c0c0, 0xff333333];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n static get primary_text_light_disable_only() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0x80000000, 0xff000000];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n static get primary_text_dark_disable_only() {\n let _defaultStates = [[-android.view.View.VIEW_STATE_ENABLED], []];\n let _defaultColors = [0x80000000, 0xffffffff];\n class DefaultStyleTextColor extends ColorStateList {\n constructor() {\n super(_defaultStates, _defaultColors);\n }\n }\n return new DefaultStyleTextColor();\n }\n }\n color.white = Color.WHITE;\n color.black = Color.BLACK;\n color.transparent = Color.TRANSPARENT;\n R.color = color;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar goog;\n(function (goog) {\n var math;\n (function (math) {\n class Long {\n constructor(low, high) {\n this.low_ = low | 0;\n this.high_ = high | 0;\n }\n toInt() {\n return this.low_;\n }\n toNumber() {\n return this.high_ * Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned();\n }\n toString(opt_radix) {\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n if (this.isZero()) {\n return '0';\n }\n if (this.isNegative()) {\n if (this.equals(Long.MIN_VALUE)) {\n var radixLong = Long.fromNumber(radix);\n var div = this.div(radixLong);\n let rem = div.multiply(radixLong).subtract(this);\n return div.toString(radix) + rem.toInt().toString(radix);\n }\n else {\n return '-' + this.negate().toString(radix);\n }\n }\n var radixToPower = Long.fromNumber(Math.pow(radix, 6));\n let rem = this;\n var result = '';\n while (true) {\n var remDiv = rem.div(radixToPower);\n var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();\n var digits = intval.toString(radix);\n rem = remDiv;\n if (rem.isZero()) {\n return digits + result;\n }\n else {\n while (digits.length < 6) {\n digits = '0' + digits;\n }\n result = '' + digits + result;\n }\n }\n }\n getHighBits() {\n return this.high_;\n }\n getLowBits() {\n return this.low_;\n }\n getLowBitsUnsigned() {\n return (this.low_ >= 0) ? this.low_ : Long.TWO_PWR_32_DBL_ + this.low_;\n }\n getNumBitsAbs() {\n if (this.isNegative()) {\n if (this.equals(Long.MIN_VALUE)) {\n return 64;\n }\n else {\n return this.negate().getNumBitsAbs();\n }\n }\n else {\n var val = this.high_ != 0 ? this.high_ : this.low_;\n for (var bit = 31; bit > 0; bit--) {\n if ((val & (1 << bit)) != 0) {\n break;\n }\n }\n return this.high_ != 0 ? bit + 33 : bit + 1;\n }\n }\n isZero() {\n return this.high_ == 0 && this.low_ == 0;\n }\n isNegative() {\n return this.high_ < 0;\n }\n isOdd() {\n return (this.low_ & 1) == 1;\n }\n equals(other) {\n return (this.high_ == other.high_) && (this.low_ == other.low_);\n }\n notEquals(other) {\n return (this.high_ != other.high_) || (this.low_ != other.low_);\n }\n lessThan(other) {\n return this.compare(other) < 0;\n }\n lessThanOrEqual(other) {\n return this.compare(other) <= 0;\n }\n greaterThan(other) {\n return this.compare(other) > 0;\n }\n greaterThanOrEqual(other) {\n return this.compare(other) >= 0;\n }\n compare(other) {\n if (this.equals(other)) {\n return 0;\n }\n var thisNeg = this.isNegative();\n var otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) {\n return -1;\n }\n if (!thisNeg && otherNeg) {\n return 1;\n }\n if (this.subtract(other).isNegative()) {\n return -1;\n }\n else {\n return 1;\n }\n }\n negate() {\n if (this.equals(Long.MIN_VALUE)) {\n return Long.MIN_VALUE;\n }\n else {\n return this.not().add(Long.ONE);\n }\n }\n add(other) {\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(other) {\n if (this.isZero()) {\n return Long.ZERO;\n }\n else if (other.isZero()) {\n return Long.ZERO;\n }\n if (this.equals(Long.MIN_VALUE)) {\n return other.isOdd() ? Long.MIN_VALUE : Long.ZERO;\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;\n }\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().multiply(other.negate());\n }\n else {\n return this.negate().multiply(other).negate();\n }\n }\n else if (other.isNegative()) {\n return this.multiply(other.negate()).negate();\n }\n if (this.lessThan(Long.TWO_PWR_24_) &&\n other.lessThan(Long.TWO_PWR_24_)) {\n return Long.fromNumber(this.toNumber() * other.toNumber());\n }\n var a48 = this.high_ >>> 16;\n var a32 = this.high_ & 0xFFFF;\n var a16 = this.low_ >>> 16;\n var a00 = this.low_ & 0xFFFF;\n var b48 = other.high_ >>> 16;\n var b32 = other.high_ & 0xFFFF;\n var b16 = other.low_ >>> 16;\n var b00 = other.low_ & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);\n }\n div(other) {\n if (other.isZero()) {\n throw Error('division by zero');\n }\n else if (this.isZero()) {\n return Long.ZERO;\n }\n if (this.equals(Long.MIN_VALUE)) {\n if (other.equals(Long.ONE) ||\n other.equals(Long.NEG_ONE)) {\n return Long.MIN_VALUE;\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return Long.ONE;\n }\n else {\n var halfThis = this.shiftRight(1);\n let approx = halfThis.div(other).shiftLeft(1);\n if (approx.equals(Long.ZERO)) {\n return other.isNegative() ? Long.ONE : Long.NEG_ONE;\n }\n else {\n let rem = this.subtract(other.multiply(approx));\n var result = approx.add(rem.div(other));\n return result;\n }\n }\n }\n else if (other.equals(Long.MIN_VALUE)) {\n return Long.ZERO;\n }\n if (this.isNegative()) {\n if (other.isNegative()) {\n return this.negate().div(other.negate());\n }\n else {\n return this.negate().div(other).negate();\n }\n }\n else if (other.isNegative()) {\n return this.div(other.negate()).negate();\n }\n var res = Long.ZERO;\n let rem = this;\n while (rem.greaterThanOrEqual(other)) {\n let approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));\n var log2 = Math.ceil(Math.log(approx) / Math.LN2);\n var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);\n var approxRes = Long.fromNumber(approx);\n var approxRem = approxRes.multiply(other);\n while (approxRem.isNegative() || approxRem.greaterThan(rem)) {\n approx -= delta;\n approxRes = Long.fromNumber(approx);\n approxRem = approxRes.multiply(other);\n }\n if (approxRes.isZero()) {\n approxRes = Long.ONE;\n }\n res = res.add(approxRes);\n rem = rem.subtract(approxRem);\n }\n return res;\n }\n modulo(other) {\n return this.subtract(this.div(other).multiply(other));\n }\n not() {\n return Long.fromBits(~this.low_, ~this.high_);\n }\n and(other) {\n return Long.fromBits(this.low_ & other.low_, this.high_ & other.high_);\n }\n or(other) {\n return Long.fromBits(this.low_ | other.low_, this.high_ | other.high_);\n }\n xor(other) {\n return Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_);\n }\n shiftLeft(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var low = this.low_;\n if (numBits < 32) {\n var high = this.high_;\n return Long.fromBits(low << numBits, (high << numBits) | (low >>> (32 - numBits)));\n }\n else {\n return Long.fromBits(0, low << (numBits - 32));\n }\n }\n }\n shiftRight(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >> numBits);\n }\n else {\n return Long.fromBits(high >> (numBits - 32), high >= 0 ? 0 : -1);\n }\n }\n }\n shiftRightUnsigned(numBits) {\n numBits &= 63;\n if (numBits == 0) {\n return this;\n }\n else {\n var high = this.high_;\n if (numBits < 32) {\n var low = this.low_;\n return Long.fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits);\n }\n else if (numBits == 32) {\n return Long.fromBits(high, 0);\n }\n else {\n return Long.fromBits(high >>> (numBits - 32), 0);\n }\n }\n }\n static fromInt(value) {\n if (-128 <= value && value < 128) {\n var cachedObj = Long.IntCache_[value];\n if (cachedObj) {\n return cachedObj;\n }\n }\n var obj = new Long(value | 0, value < 0 ? -1 : 0);\n if (-128 <= value && value < 128) {\n Long.IntCache_[value] = obj;\n }\n return obj;\n }\n static fromNumber(value) {\n if (isNaN(value) || !isFinite(value)) {\n return Long.ZERO;\n }\n else if (value <= -Long.TWO_PWR_63_DBL_) {\n return Long.MIN_VALUE;\n }\n else if (value + 1 >= Long.TWO_PWR_63_DBL_) {\n return Long.MAX_VALUE;\n }\n else if (value < 0) {\n return Long.fromNumber(-value).negate();\n }\n else {\n return new Long((value % Long.TWO_PWR_32_DBL_) | 0, (value / Long.TWO_PWR_32_DBL_) | 0);\n }\n }\n static fromBits(lowBits, highBits) {\n return new Long(lowBits, highBits);\n }\n static fromString(str, opt_radix) {\n if (str.length == 0) {\n throw Error('number format error: empty string');\n }\n var radix = opt_radix || 10;\n if (radix < 2 || 36 < radix) {\n throw Error('radix out of range: ' + radix);\n }\n if (str.charAt(0) == '-') {\n return Long.fromString(str.substring(1), radix).negate();\n }\n else if (str.indexOf('-') >= 0) {\n throw Error('number format error: interior \"-\" character: ' + str);\n }\n var radixToPower = Long.fromNumber(Math.pow(radix, 8));\n var result = Long.ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i);\n var value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = Long.fromNumber(Math.pow(radix, size));\n result = result.multiply(power).add(Long.fromNumber(value));\n }\n else {\n result = result.multiply(radixToPower);\n result = result.add(Long.fromNumber(value));\n }\n }\n return result;\n }\n }\n Long.IntCache_ = {};\n Long.TWO_PWR_16_DBL_ = 1 << 16;\n Long.TWO_PWR_24_DBL_ = 1 << 24;\n Long.TWO_PWR_32_DBL_ = Long.TWO_PWR_16_DBL_ * Long.TWO_PWR_16_DBL_;\n Long.TWO_PWR_31_DBL_ = Long.TWO_PWR_32_DBL_ / 2;\n Long.TWO_PWR_48_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_16_DBL_;\n Long.TWO_PWR_64_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_32_DBL_;\n Long.TWO_PWR_63_DBL_ = Long.TWO_PWR_64_DBL_ / 2;\n Long.TWO_PWR_24_ = Long.fromInt(1 << 24);\n Long.ZERO = Long.fromInt(0);\n Long.ONE = Long.fromInt(1);\n Long.NEG_ONE = Long.fromInt(-1);\n Long.MAX_VALUE = Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);\n Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0);\n math.Long = Long;\n })(math = goog.math || (goog.math = {}));\n})(goog || (goog = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Long {\n }\n Long.MIN_VALUE = goog.math.Long.MIN_VALUE.toNumber();\n Long.MAX_VALUE = goog.math.Long.MAX_VALUE.toNumber();\n lang.Long = Long;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AccelerateDecelerateInterpolator {\n getInterpolation(input) {\n return (Math.cos((input + 1) * Math.PI) / 2) + 0.5;\n }\n }\n animation.AccelerateDecelerateInterpolator = AccelerateDecelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class DecelerateInterpolator {\n constructor(factor = 1) {\n this.mFactor = factor;\n }\n getInterpolation(input) {\n let result;\n if (this.mFactor == 1.0) {\n result = (1.0 - (1.0 - input) * (1.0 - input));\n }\n else {\n result = (1.0 - Math.pow((1.0 - input), 2 * this.mFactor));\n }\n return result;\n }\n }\n animation.DecelerateInterpolator = DecelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Matrix = android.graphics.Matrix;\n var StringBuilder = java.lang.StringBuilder;\n class Transformation {\n constructor() {\n this.mAlpha = 0;\n this.mTransformationType = 0;\n this.clear();\n }\n clear() {\n if (this.mMatrix == null) {\n this.mMatrix = new Matrix();\n }\n else {\n this.mMatrix.reset();\n }\n this.mAlpha = 1.0;\n this.mTransformationType = Transformation.TYPE_BOTH;\n }\n getTransformationType() {\n return this.mTransformationType;\n }\n setTransformationType(transformationType) {\n this.mTransformationType = transformationType;\n }\n set(t) {\n this.mAlpha = t.getAlpha();\n this.mMatrix.set(t.getMatrix());\n this.mTransformationType = t.getTransformationType();\n }\n compose(t) {\n this.mAlpha *= t.getAlpha();\n this.mMatrix.preConcat(t.getMatrix());\n }\n postCompose(t) {\n this.mAlpha *= t.getAlpha();\n this.mMatrix.postConcat(t.getMatrix());\n }\n getMatrix() {\n return this.mMatrix;\n }\n setAlpha(alpha) {\n this.mAlpha = alpha;\n }\n getAlpha() {\n return this.mAlpha;\n }\n toString() {\n let sb = new StringBuilder(64);\n sb.append(\"Transformation\");\n this.toShortString(sb);\n return sb.toString();\n }\n toShortString(sb) {\n sb = sb || new StringBuilder(64);\n sb.append(\"{alpha=\");\n sb.append(this.mAlpha);\n sb.append(\" matrix=\");\n this.mMatrix.toShortString(sb);\n sb.append('}');\n }\n }\n Transformation.TYPE_IDENTITY = 0x0;\n Transformation.TYPE_ALPHA = 0x1;\n Transformation.TYPE_MATRIX = 0x2;\n Transformation.TYPE_BOTH = Transformation.TYPE_ALPHA | Transformation.TYPE_MATRIX;\n animation.Transformation = Transformation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation_1) {\n var RectF = android.graphics.RectF;\n var TypedValue = android.util.TypedValue;\n var Long = java.lang.Long;\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var Transformation = android.view.animation.Transformation;\n class Animation {\n constructor() {\n this.mEnded = false;\n this.mStarted = false;\n this.mCycleFlip = false;\n this.mInitialized = false;\n this.mFillBefore = true;\n this.mFillAfter = false;\n this.mFillEnabled = false;\n this.mStartTime = -1;\n this.mStartOffset = 0;\n this.mDuration = 0;\n this.mRepeatCount = 0;\n this.mRepeated = 0;\n this.mRepeatMode = Animation.RESTART;\n this.mZAdjustment = 0;\n this.mBackgroundColor = 0;\n this.mScaleFactor = 1;\n this.mDetachWallpaper = false;\n this.mMore = true;\n this.mOneMoreTime = true;\n this.mPreviousRegion = new RectF();\n this.mRegion = new RectF();\n this.mTransformation = new Transformation();\n this.mPreviousTransformation = new Transformation();\n this.ensureInterpolator();\n }\n reset() {\n this.mPreviousRegion.setEmpty();\n this.mPreviousTransformation.clear();\n this.mInitialized = false;\n this.mCycleFlip = false;\n this.mRepeated = 0;\n this.mMore = true;\n this.mOneMoreTime = true;\n this.mListenerHandler = null;\n }\n cancel() {\n if (this.mStarted && !this.mEnded) {\n this.fireAnimationEnd();\n this.mEnded = true;\n }\n this.mStartTime = Long.MIN_VALUE;\n this.mMore = this.mOneMoreTime = false;\n }\n detach() {\n if (this.mStarted && !this.mEnded) {\n this.mEnded = true;\n this.fireAnimationEnd();\n }\n }\n isInitialized() {\n return this.mInitialized;\n }\n initialize(width, height, parentWidth, parentHeight) {\n this.reset();\n this.mInitialized = true;\n }\n setListenerHandler(handler) {\n if (this.mListenerHandler == null) {\n const inner_this = this;\n this.mOnStart = {\n run() {\n if (inner_this.mListener != null) {\n inner_this.mListener.onAnimationStart(inner_this);\n }\n }\n };\n this.mOnRepeat = {\n run() {\n if (inner_this.mListener != null) {\n inner_this.mListener.onAnimationRepeat(inner_this);\n }\n }\n };\n this.mOnEnd = {\n run() {\n if (inner_this.mListener != null) {\n inner_this.mListener.onAnimationEnd(inner_this);\n }\n }\n };\n }\n this.mListenerHandler = handler;\n }\n setInterpolator(i) {\n this.mInterpolator = i;\n }\n setStartOffset(startOffset) {\n this.mStartOffset = startOffset;\n }\n setDuration(durationMillis) {\n if (durationMillis < 0) {\n throw Error(`new IllegalArgumentException(\"Animation duration cannot be negative\")`);\n }\n this.mDuration = durationMillis;\n }\n restrictDuration(durationMillis) {\n if (this.mStartOffset > durationMillis) {\n this.mStartOffset = durationMillis;\n this.mDuration = 0;\n this.mRepeatCount = 0;\n return;\n }\n let dur = this.mDuration + this.mStartOffset;\n if (dur > durationMillis) {\n this.mDuration = durationMillis - this.mStartOffset;\n dur = durationMillis;\n }\n if (this.mDuration <= 0) {\n this.mDuration = 0;\n this.mRepeatCount = 0;\n return;\n }\n if (this.mRepeatCount < 0 || this.mRepeatCount > durationMillis || (dur * this.mRepeatCount) > durationMillis) {\n this.mRepeatCount = Math.floor((durationMillis / dur)) - 1;\n if (this.mRepeatCount < 0) {\n this.mRepeatCount = 0;\n }\n }\n }\n scaleCurrentDuration(scale) {\n this.mDuration = Math.floor((this.mDuration * scale));\n this.mStartOffset = Math.floor((this.mStartOffset * scale));\n }\n setStartTime(startTimeMillis) {\n this.mStartTime = startTimeMillis;\n this.mStarted = this.mEnded = false;\n this.mCycleFlip = false;\n this.mRepeated = 0;\n this.mMore = true;\n }\n start() {\n this.setStartTime(-1);\n }\n startNow() {\n this.setStartTime(AnimationUtils.currentAnimationTimeMillis());\n }\n setRepeatMode(repeatMode) {\n this.mRepeatMode = repeatMode;\n }\n setRepeatCount(repeatCount) {\n if (repeatCount < 0) {\n repeatCount = Animation.INFINITE;\n }\n this.mRepeatCount = repeatCount;\n }\n isFillEnabled() {\n return this.mFillEnabled;\n }\n setFillEnabled(fillEnabled) {\n this.mFillEnabled = fillEnabled;\n }\n setFillBefore(fillBefore) {\n this.mFillBefore = fillBefore;\n }\n setFillAfter(fillAfter) {\n this.mFillAfter = fillAfter;\n }\n setZAdjustment(zAdjustment) {\n this.mZAdjustment = zAdjustment;\n }\n setBackgroundColor(bg) {\n this.mBackgroundColor = bg;\n }\n getScaleFactor() {\n return this.mScaleFactor;\n }\n setDetachWallpaper(detachWallpaper) {\n this.mDetachWallpaper = detachWallpaper;\n }\n getInterpolator() {\n return this.mInterpolator;\n }\n getStartTime() {\n return this.mStartTime;\n }\n getDuration() {\n return this.mDuration;\n }\n getStartOffset() {\n return this.mStartOffset;\n }\n getRepeatMode() {\n return this.mRepeatMode;\n }\n getRepeatCount() {\n return this.mRepeatCount;\n }\n getFillBefore() {\n return this.mFillBefore;\n }\n getFillAfter() {\n return this.mFillAfter;\n }\n getZAdjustment() {\n return this.mZAdjustment;\n }\n getBackgroundColor() {\n return this.mBackgroundColor;\n }\n getDetachWallpaper() {\n return this.mDetachWallpaper;\n }\n willChangeTransformationMatrix() {\n return true;\n }\n willChangeBounds() {\n return true;\n }\n setAnimationListener(listener) {\n this.mListener = listener;\n }\n ensureInterpolator() {\n if (this.mInterpolator == null) {\n this.mInterpolator = new AccelerateDecelerateInterpolator();\n }\n }\n computeDurationHint() {\n return (this.getStartOffset() + this.getDuration()) * (this.getRepeatCount() + 1);\n }\n getTransformation(currentTime, outTransformation, scale) {\n if (scale != null)\n this.mScaleFactor = scale;\n if (this.mStartTime == -1) {\n this.mStartTime = currentTime;\n }\n const startOffset = this.getStartOffset();\n const duration = this.mDuration;\n let normalizedTime;\n if (duration != 0) {\n normalizedTime = (currentTime - (this.mStartTime + startOffset)) / duration;\n }\n else {\n normalizedTime = currentTime < this.mStartTime ? 0.0 : 1.0;\n }\n const expired = normalizedTime >= 1.0;\n this.mMore = !expired;\n if (!this.mFillEnabled)\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n if ((normalizedTime >= 0.0 || this.mFillBefore) && (normalizedTime <= 1.0 || this.mFillAfter)) {\n if (!this.mStarted) {\n this.fireAnimationStart();\n this.mStarted = true;\n }\n if (this.mFillEnabled)\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n if (this.mCycleFlip) {\n normalizedTime = 1.0 - normalizedTime;\n }\n const interpolatedTime = this.mInterpolator.getInterpolation(normalizedTime);\n this.applyTransformation(interpolatedTime, outTransformation);\n }\n if (expired) {\n if (this.mRepeatCount == this.mRepeated) {\n if (!this.mEnded) {\n this.mEnded = true;\n this.fireAnimationEnd();\n }\n }\n else {\n if (this.mRepeatCount > 0) {\n this.mRepeated++;\n }\n if (this.mRepeatMode == Animation.REVERSE) {\n this.mCycleFlip = !this.mCycleFlip;\n }\n this.mStartTime = -1;\n this.mMore = true;\n this.fireAnimationRepeat();\n }\n }\n if (!this.mMore && this.mOneMoreTime) {\n this.mOneMoreTime = false;\n return true;\n }\n return this.mMore;\n }\n fireAnimationStart() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationStart(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnStart);\n }\n }\n fireAnimationRepeat() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationRepeat(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnRepeat);\n }\n }\n fireAnimationEnd() {\n if (this.mListener != null) {\n if (this.mListenerHandler == null)\n this.mListener.onAnimationEnd(this);\n else\n this.mListenerHandler.postAtFrontOfQueue(this.mOnEnd);\n }\n }\n hasStarted() {\n return this.mStarted;\n }\n hasEnded() {\n return this.mEnded;\n }\n applyTransformation(interpolatedTime, t) {\n }\n resolveSize(type, value, size, parentSize) {\n switch (type) {\n case Animation.ABSOLUTE:\n return value;\n case Animation.RELATIVE_TO_SELF:\n return size * value;\n case Animation.RELATIVE_TO_PARENT:\n return parentSize * value;\n default:\n return value;\n }\n }\n getInvalidateRegion(left, top, right, bottom, invalidate, transformation) {\n const tempRegion = this.mRegion;\n const previousRegion = this.mPreviousRegion;\n invalidate.set(left, top, right, bottom);\n transformation.getMatrix().mapRect(invalidate);\n invalidate.inset(-1.0, -1.0);\n tempRegion.set(invalidate);\n invalidate.union(previousRegion);\n previousRegion.set(tempRegion);\n const tempTransformation = this.mTransformation;\n const previousTransformation = this.mPreviousTransformation;\n tempTransformation.set(transformation);\n transformation.set(previousTransformation);\n previousTransformation.set(tempTransformation);\n }\n initializeInvalidateRegion(left, top, right, bottom) {\n const region = this.mPreviousRegion;\n region.set(left, top, right, bottom);\n region.inset(-1.0, -1.0);\n if (this.mFillBefore) {\n const previousTransformation = this.mPreviousTransformation;\n this.applyTransformation(this.mInterpolator.getInterpolation(0.0), previousTransformation);\n }\n }\n hasAlpha() {\n return false;\n }\n }\n Animation.INFINITE = -1;\n Animation.RESTART = 1;\n Animation.REVERSE = 2;\n Animation.START_ON_FIRST_FRAME = -1;\n Animation.ABSOLUTE = 0;\n Animation.RELATIVE_TO_SELF = 1;\n Animation.RELATIVE_TO_PARENT = 2;\n Animation.ZORDER_NORMAL = 0;\n Animation.ZORDER_TOP = 1;\n Animation.ZORDER_BOTTOM = -1;\n Animation.USE_CLOSEGUARD = false;\n animation_1.Animation = Animation;\n (function (Animation) {\n class Description {\n constructor() {\n this.type = 0;\n this.value = 0;\n }\n static parseValue(value) {\n let d = new Description();\n if (value == null) {\n d.type = Animation.ABSOLUTE;\n d.value = 0;\n }\n else {\n if (value.endsWith('%p')) {\n d.type = Animation.RELATIVE_TO_PARENT;\n d.value = Number.parseFloat(value.substring(0, value.length - 2));\n }\n else if (value.endsWith('%')) {\n d.type = Animation.RELATIVE_TO_SELF;\n d.value = Number.parseFloat(value.substring(0, value.length - 1));\n }\n else {\n d.type = Animation.ABSOLUTE;\n d.value = TypedValue.complexToDimensionPixelSize(value);\n }\n }\n d.type = Animation.ABSOLUTE;\n d.value = 0.0;\n return d;\n }\n }\n Animation.Description = Description;\n })(Animation = animation_1.Animation || (animation_1.Animation = {}));\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n class attr {\n }\n attr.textViewStyle = new Map()\n .set('android:textSize', '14sp')\n .set('android:layerType', 'software')\n .set('android:textColor', '@android:color/textView_textColor')\n .set('android:textColorHint', '#ff808080');\n attr.buttonStyle = new Map(attr.textViewStyle)\n .set('android:background', '@android:drawable/btn_default')\n .set('android:focusable', 'true')\n .set('android:clickable', 'true')\n .set('android:minHeight', '48dp')\n .set('android:minWidth', '64dp')\n .set('android:textSize', '18sp')\n .set('android:gravity', 'center');\n attr.editTextStyle = new Map(attr.textViewStyle)\n .set('android:background', '@android:drawable/editbox_background')\n .set('android:focusable', 'true')\n .set('android:focusableInTouchMode', 'true')\n .set('android:clickable', 'true')\n .set('android:textSize', '18sp')\n .set('android:gravity', 'center_vertical');\n attr.imageButtonStyle = new Map()\n .set('android:background', '@android:drawable/btn_default')\n .set('android:focusable', 'true')\n .set('android:clickable', 'true')\n .set('android:gravity', 'center');\n attr.checkboxStyle = new Map(attr.buttonStyle)\n .set('android:background', '@null')\n .set('android:button', '@android:drawable/btn_check');\n attr.radiobuttonStyle = new Map(attr.buttonStyle)\n .set('android:background', '@null')\n .set('android:button', '@android:drawable/btn_radio');\n attr.checkedTextViewStyle = new Map()\n .set('android:textAlignment', 'viewStart');\n attr.progressBarStyle = new Map()\n .set('android:indeterminateOnly', 'true')\n .set('android:indeterminateDrawable', '@android:drawable/progress_medium_holo')\n .set('android:indeterminateBehavior', 'repeat')\n .set('android:indeterminateDuration', '3500')\n .set('android:minWidth', '48dp')\n .set('android:maxWidth', '48dp')\n .set('android:minHeight', '48dp')\n .set('android:maxHeight', '48dp')\n .set('android:mirrorForRtl', 'false');\n attr.progressBarStyleHorizontal = new Map()\n .set('android:indeterminateOnly', 'false')\n .set('android:progressDrawable', '@android:drawable/progress_horizontal_holo')\n .set('android:indeterminateDrawable', '@android:drawable/progress_indeterminate_horizontal_holo')\n .set('android:indeterminateBehavior', 'repeat')\n .set('android:indeterminateDuration', '3500')\n .set('android:minHeight', '20dp')\n .set('android:maxHeight', '20dp')\n .set('android:mirrorForRtl', 'true');\n attr.progressBarStyleSmall = new Map(attr.progressBarStyle)\n .set('android:indeterminateDrawable', '@android:drawable/progress_small_holo')\n .set('android:minWidth', '16dp')\n .set('android:maxWidth', '16dp')\n .set('android:minHeight', '16dp')\n .set('android:maxHeight', '16dp');\n attr.progressBarStyleLarge = new Map(attr.progressBarStyle)\n .set('android:indeterminateDrawable', '@android:drawable/progress_large_holo')\n .set('android:minWidth', '76dp')\n .set('android:maxWidth', '76dp')\n .set('android:minHeight', '76dp')\n .set('android:maxHeight', '76dp');\n attr.seekBarStyle = new Map()\n .set('android:indeterminateOnly', 'false')\n .set('android:progressDrawable', '@android:drawable/scrubber_progress_horizontal_holo_light')\n .set('android:indeterminateDrawable', '@android:drawable/scrubber_progress_horizontal_holo_light')\n .set('android:minHeight', '13dp')\n .set('android:maxHeight', '13dp')\n .set('android:thumb', '@android:drawable/scrubber_control_selector_holo')\n .set('android:thumbOffset', '16dp')\n .set('android:focusable', 'true')\n .set('android:paddingLeft', '16dp')\n .set('android:paddingRight', '16dp')\n .set('android:mirrorForRtl', 'true');\n attr.ratingBarStyle = new Map()\n .set('android:indeterminateOnly', 'false')\n .set('android:progressDrawable', '@android:drawable/ratingbar_full_holo_light')\n .set('android:indeterminateDrawable', '@android:drawable/ratingbar_full_holo_light')\n .set('android:minHeight', '48dip')\n .set('android:maxHeight', '48dip')\n .set('android:numStars', '5')\n .set('android:stepSize', '0.5')\n .set('android:thumb', '@null')\n .set('android:mirrorForRtl', 'true');\n attr.ratingBarStyleIndicator = new Map(attr.ratingBarStyle)\n .set('android:indeterminateOnly', 'false')\n .set('android:progressDrawable', '@android:drawable/ratingbar_holo_light')\n .set('android:indeterminateDrawable', '@android:drawable/ratingbar_holo_light')\n .set('android:minHeight', '35dip')\n .set('android:maxHeight', '35dip')\n .set('android:thumb', '@null')\n .set('android:isIndicator', 'true');\n attr.ratingBarStyleSmall = new Map(attr.ratingBarStyle)\n .set('android:indeterminateOnly', 'false')\n .set('android:progressDrawable', '@android:drawable/ratingbar_small_holo_light')\n .set('android:indeterminateDrawable', '@android:drawable/ratingbar_small_holo_light')\n .set('android:minHeight', '16dip')\n .set('android:maxHeight', '16dip')\n .set('android:thumb', '@null')\n .set('android:isIndicator', 'true');\n attr.absListViewStyle = new Map()\n .set('android:scrollbars', 'vertical')\n .set('android:fadingEdge', 'vertical');\n attr.gridViewStyle = new Map(attr.absListViewStyle)\n .set('android:listSelector', '@android:drawable/list_selector_background')\n .set('android:numColumns', '1');\n attr.listViewStyle = new Map(attr.absListViewStyle)\n .set('android:divider', '@android:drawable/list_divider')\n .set('android:listSelector', '@android:drawable/list_selector_background')\n .set('android:dividerHeight', '1');\n attr.expandableListViewStyle = new Map(attr.listViewStyle)\n .set('android:childDivider', '@android:drawable/list_divider');\n attr.numberPickerStyle = new Map()\n .set('android:orientation', 'vertical')\n .set('android:solidColor', 'transparent')\n .set('android:selectionDivider', '#cc33b5e5')\n .set('android:selectionDividerHeight', '2dp')\n .set('android:selectionDividersDistance', '48dp')\n .set('android:internalMinWidth', '64dp')\n .set('android:internalMaxHeight', '180dp')\n .set('android:virtualButtonPressedDrawable', '@android:drawable/item_background');\n attr.popupWindowStyle = new Map()\n .set('android:popupBackground', '@android:drawable/dropdown_background_dark')\n .set('android:popupEnterAnimation', '@android:anim/grow_fade_in_center')\n .set('android:popupExitAnimation', '@android:anim/shrink_fade_out_center');\n attr.listPopupWindowStyle = new Map()\n .set('android:popupBackground', '@android:drawable/menu_panel_holo_light')\n .set('android:popupEnterAnimation', '@android:anim/grow_fade_in_center')\n .set('android:popupExitAnimation', '@android:anim/shrink_fade_out_center');\n attr.popupMenuStyle = new Map()\n .set('android:popupBackground', '@android:drawable/menu_panel_holo_dark');\n attr.dropDownListViewStyle = new Map(attr.listViewStyle);\n attr.spinnerStyle = new Map()\n .set('android:clickable', 'true')\n .set('android:spinnerMode', 'dropdown')\n .set('android:gravity', 'start|center_vertical')\n .set('android:disableChildrenWhenDisabled', 'true')\n .set('android:background', '@android:drawable/btn_default')\n .set('android:popupBackground', '@android:drawable/menu_panel_holo_light')\n .set('android:dropDownVerticalOffset', '0dp')\n .set('android:dropDownHorizontalOffset', '0dp')\n .set('android:dropDownWidth', 'wrap_content');\n attr.actionBarStyle = new Map()\n .set('android:background', '#ff333333');\n attr.scrollViewStyle = new Map()\n .set('android:scrollbars', 'vertical')\n .set('android:fadingEdge', 'vertical');\n R.attr = attr;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_1) {\n var LayoutDirection = android.util.LayoutDirection;\n var ColorDrawable = android.graphics.drawable.ColorDrawable;\n var ScrollBarDrawable = android.graphics.drawable.ScrollBarDrawable;\n var InsetDrawable = android.graphics.drawable.InsetDrawable;\n var ShadowDrawable = android.graphics.drawable.ShadowDrawable;\n var RoundRectDrawable = android.graphics.drawable.RoundRectDrawable;\n var PixelFormat = android.graphics.PixelFormat;\n var Matrix = android.graphics.Matrix;\n var Paint = android.graphics.Paint;\n var StringBuilder = java.lang.StringBuilder;\n var JavaObject = java.lang.JavaObject;\n var System = java.lang.System;\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var Rect = android.graphics.Rect;\n var RectF = android.graphics.RectF;\n var Point = android.graphics.Point;\n var Canvas = android.graphics.Canvas;\n var CopyOnWriteArrayList = java.lang.util.concurrent.CopyOnWriteArrayList;\n var ArrayList = java.util.ArrayList;\n var Resources = android.content.res.Resources;\n var Pools = android.util.Pools;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var AttrBinder = androidui.attr.AttrBinder;\n var KeyEvent = android.view.KeyEvent;\n var Animation = android.view.animation.Animation;\n var Transformation = android.view.animation.Transformation;\n class View extends JavaObject {\n constructor(context, bindElement, defStyleAttr) {\n super();\n this.mPrivateFlags = 0;\n this.mPrivateFlags2 = 0;\n this.mPrivateFlags3 = 0;\n this.mCurrentAnimation = null;\n this.mOldWidthMeasureSpec = Number.MIN_SAFE_INTEGER;\n this.mOldHeightMeasureSpec = Number.MIN_SAFE_INTEGER;\n this.mMeasuredWidth = 0;\n this.mMeasuredHeight = 0;\n this.mBackgroundSizeChanged = false;\n this.mBackgroundWidth = 0;\n this.mBackgroundHeight = 0;\n this.mHasPerformedLongPress = false;\n this.mMinWidth = 0;\n this.mMinHeight = 0;\n this.mDrawingCacheBackgroundColor = 0;\n this.mTouchSlop = 0;\n this.mVerticalScrollFactor = 0;\n this.mOverScrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n this.mViewFlags = 0;\n this.mLayerType = View.LAYER_TYPE_NONE;\n this.mCachingFailed = false;\n this.mWindowAttachCount = 0;\n this.mTransientStateCount = 0;\n this.mLastIsOpaque = false;\n this._mLeft = 0;\n this._mRight = 0;\n this._mTop = 0;\n this._mBottom = 0;\n this._mScrollX = 0;\n this._mScrollY = 0;\n this.mPaddingLeft = 0;\n this.mPaddingRight = 0;\n this.mPaddingTop = 0;\n this.mPaddingBottom = 0;\n this.mCornerRadiusTopLeft = 0;\n this.mCornerRadiusTopRight = 0;\n this.mCornerRadiusBottomRight = 0;\n this.mCornerRadiusBottomLeft = 0;\n this._stateAttrList = new androidui.attr.StateAttrList(this);\n this._attrBinder = new AttrBinder(this);\n this.mContext = context;\n this.mTouchSlop = view_1.ViewConfiguration.get().getScaledTouchSlop();\n this.initBindAttr();\n this.initBindElement(bindElement);\n const a = context.obtainStyledAttributes(bindElement, defStyleAttr);\n let background = null;\n let leftPadding = -1;\n let topPadding = -1;\n let rightPadding = -1;\n let bottomPadding = -1;\n let padding = -1;\n let viewFlagValues = 0;\n let viewFlagMasks = 0;\n let setScrollContainer = false;\n let x = 0;\n let y = 0;\n let tx = 0;\n let ty = 0;\n let rotation = 0;\n let rotationX = 0;\n let rotationY = 0;\n let sx = 1;\n let sy = 1;\n let transformSet = false;\n let overScrollMode = this.mOverScrollMode;\n let initializeScrollbars = false;\n for (let attr of a.getLowerCaseNoNamespaceAttrNames()) {\n switch (attr) {\n case 'background':\n background = a.getDrawable(attr);\n break;\n case 'padding':\n padding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingleft':\n leftPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingtop':\n topPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingright':\n rightPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingbottom':\n bottomPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingstart':\n leftPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'paddingend':\n rightPadding = a.getDimensionPixelSize(attr, -1);\n break;\n case 'scrollx':\n x = a.getDimensionPixelOffset(attr, 0);\n break;\n case 'scrolly':\n y = a.getDimensionPixelOffset(attr, 0);\n break;\n case 'alpha':\n this.setAlpha(a.getFloat(attr, 1));\n break;\n case 'transformpivotx':\n this.setPivotX(a.getDimensionPixelOffset(attr, 0));\n break;\n case 'transformpivoty':\n this.setPivotY(a.getDimensionPixelOffset(attr, 0));\n break;\n case 'translationx':\n tx = a.getDimensionPixelOffset(attr, 0);\n transformSet = true;\n break;\n case 'translationy':\n ty = a.getDimensionPixelOffset(attr, 0);\n transformSet = true;\n break;\n case 'rotation':\n rotation = a.getFloat(attr, 0);\n transformSet = true;\n break;\n case 'rotationx':\n rotationX = a.getFloat(attr, 0);\n transformSet = true;\n break;\n case 'rotationy':\n rotationY = a.getFloat(attr, 0);\n transformSet = true;\n break;\n case 'scalex':\n sx = a.getFloat(attr, 1);\n transformSet = true;\n break;\n case 'scaley':\n sy = a.getFloat(attr, 1);\n transformSet = true;\n break;\n case 'id':\n this.mID = a.getString(attr);\n break;\n case 'tag':\n this.mTag = a.getText(attr);\n break;\n case 'fitssystemwindows':\n break;\n case 'focusable':\n if (a.getBoolean(attr, false)) {\n viewFlagValues |= View.FOCUSABLE;\n viewFlagMasks |= View.FOCUSABLE_MASK;\n }\n break;\n case 'focusableintouchmode':\n if (a.getBoolean(attr, false)) {\n viewFlagValues |= View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE;\n viewFlagMasks |= View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK;\n }\n break;\n case 'clickable':\n if (a.getBoolean(attr, false)) {\n viewFlagValues |= View.CLICKABLE;\n viewFlagMasks |= View.CLICKABLE;\n }\n break;\n case 'longclickable':\n if (a.getBoolean(attr, false)) {\n viewFlagValues |= View.LONG_CLICKABLE;\n viewFlagMasks |= View.LONG_CLICKABLE;\n }\n break;\n case 'saveenabled':\n break;\n case 'duplicateparentstate':\n if (a.getBoolean(attr, false)) {\n viewFlagValues |= View.DUPLICATE_PARENT_STATE;\n viewFlagMasks |= View.DUPLICATE_PARENT_STATE;\n }\n break;\n case 'visibility':\n const visibility = a.getAttrValue(attr);\n if (visibility === 'gone') {\n viewFlagValues |= View.GONE;\n viewFlagMasks |= View.VISIBILITY_MASK;\n }\n else if (visibility === 'invisible') {\n viewFlagValues |= View.INVISIBLE;\n viewFlagMasks |= View.VISIBILITY_MASK;\n }\n else if (visibility === 'visible') {\n viewFlagValues |= View.VISIBLE;\n viewFlagMasks |= View.VISIBILITY_MASK;\n }\n break;\n case 'layoutdirection':\n break;\n case 'drawingcachequality':\n break;\n case 'contentdescription':\n break;\n case 'labelfor':\n break;\n case 'soundeffectsenabled':\n break;\n case 'hapticfeedbackenabled':\n break;\n case 'scrollbars':\n const scrollbars = a.getAttrValue(attr);\n if (scrollbars === 'horizontal') {\n viewFlagValues |= View.SCROLLBARS_HORIZONTAL;\n viewFlagMasks |= View.SCROLLBARS_MASK;\n initializeScrollbars = true;\n }\n else if (scrollbars === 'vertical') {\n viewFlagValues |= View.SCROLLBARS_VERTICAL;\n viewFlagMasks |= View.SCROLLBARS_MASK;\n initializeScrollbars = true;\n }\n break;\n case 'fadingedge':\n case 'requiresfadingedge':\n break;\n case 'scrollbarstyle':\n break;\n case 'isscrollcontainer':\n setScrollContainer = true;\n if (a.getBoolean(attr, false)) {\n this.setScrollContainer(true);\n }\n break;\n case 'keepscreenon':\n break;\n case 'filtertoucheswhenobscured':\n break;\n case 'nextfocusleft':\n this.mNextFocusLeftId = a.getResourceId(attr, View.NO_ID);\n break;\n case 'nextfocusright':\n this.mNextFocusRightId = a.getResourceId(attr, View.NO_ID);\n break;\n case 'nextfocusup':\n this.mNextFocusUpId = a.getResourceId(attr, View.NO_ID);\n break;\n case 'nextfocusdown':\n this.mNextFocusDownId = a.getResourceId(attr, View.NO_ID);\n break;\n case 'nextfocusforward':\n this.mNextFocusForwardId = a.getResourceId(attr, View.NO_ID);\n break;\n case 'minwidth':\n this.mMinWidth = a.getDimensionPixelSize(attr, 0);\n break;\n case 'minheight':\n this.mMinHeight = a.getDimensionPixelSize(attr, 0);\n break;\n case 'onclick':\n this.setOnClickListenerByAttrValueString(a.getString(attr));\n break;\n case 'overscrollmode':\n let scrollMode = View[('OVER_SCROLL_' + a.getAttrValue(attr)).toUpperCase()];\n overScrollMode = scrollMode || View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n break;\n case 'verticalscrollbarposition':\n break;\n case 'layertype':\n if ((a.getAttrValue(attr) + '').toLowerCase() == 'software') {\n this.setLayerType(View.LAYER_TYPE_SOFTWARE);\n }\n else {\n this.setLayerType(View.LAYER_TYPE_NONE);\n }\n break;\n case 'textdirection':\n break;\n case 'textalignment':\n break;\n case 'importantforaccessibility':\n break;\n case 'accessibilityliveregion':\n break;\n case 'cornerradius':\n case 'cornerradiustopleft':\n case 'cornerradiustopright':\n case 'cornerradiusbottomleft':\n case 'cornerradiusbottomright':\n case 'viewshadowcolor':\n case 'viewshadowdx':\n case 'viewshadowdy':\n case 'viewshadowradius':\n this._attrBinder.onAttrChange(attr, a.getAttrValue(attr), this.getContext());\n break;\n default:\n if (attr && attr.startsWith('state_')) {\n this._stateAttrList.addStatedAttr(attr, a.getAttrValue(attr));\n }\n }\n }\n this.setOverScrollMode(overScrollMode);\n if (background != null) {\n this.setBackground(background);\n }\n if (padding >= 0) {\n leftPadding = padding;\n topPadding = padding;\n rightPadding = padding;\n bottomPadding = padding;\n }\n this.setPadding(leftPadding >= 0 ? leftPadding : this.mPaddingLeft, topPadding >= 0 ? topPadding : this.mPaddingTop, rightPadding >= 0 ? rightPadding : this.mPaddingRight, bottomPadding >= 0 ? bottomPadding : this.mPaddingBottom);\n if (viewFlagMasks != 0) {\n this.setFlags(viewFlagValues, viewFlagMasks);\n }\n if (initializeScrollbars) {\n this.initializeScrollbars(a);\n }\n a.recycle();\n if (x != 0 || y != 0) {\n scrollTo(x, y);\n }\n if (transformSet) {\n this.setTranslationX(tx);\n this.setTranslationY(ty);\n this.setRotation(rotation);\n this.setRotationX(rotationX);\n this.setRotationY(rotationY);\n this.setScaleX(sx);\n this.setScaleY(sy);\n }\n if (!setScrollContainer && (viewFlagValues & View.SCROLLBARS_VERTICAL) != 0) {\n this.setScrollContainer(true);\n }\n this.computeOpaqueFlags();\n }\n get mLeft() {\n return this._mLeft;\n }\n set mLeft(value) {\n this._mLeft = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mRight() {\n return this._mRight;\n }\n set mRight(value) {\n this._mRight = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mTop() {\n return this._mTop;\n }\n set mTop(value) {\n if (Number.isNaN(value)) {\n debugger;\n }\n this._mTop = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mBottom() {\n return this._mBottom;\n }\n set mBottom(value) {\n this._mBottom = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollX() {\n return this._mScrollX;\n }\n set mScrollX(value) {\n this._mScrollX = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollY() {\n return this._mScrollY;\n }\n set mScrollY(value) {\n this._mScrollY = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n getContext() {\n return this.mContext;\n }\n getWidth() {\n return this.mRight - this.mLeft;\n }\n getHeight() {\n return this.mBottom - this.mTop;\n }\n getPaddingLeft() {\n return this.mPaddingLeft;\n }\n getPaddingTop() {\n return this.mPaddingTop;\n }\n getPaddingRight() {\n return this.mPaddingRight;\n }\n getPaddingBottom() {\n return this.mPaddingBottom;\n }\n setPaddingLeft(left) {\n if (this.mPaddingLeft != left) {\n this.mPaddingLeft = left;\n this.requestLayout();\n }\n }\n setPaddingTop(top) {\n if (this.mPaddingTop != top) {\n this.mPaddingTop = top;\n this.requestLayout();\n }\n }\n setPaddingRight(right) {\n if (this.mPaddingRight != right) {\n this.mPaddingRight = right;\n this.requestLayout();\n }\n }\n setPaddingBottom(bottom) {\n if (this.mPaddingBottom != bottom) {\n this.mPaddingBottom = bottom;\n this.requestLayout();\n }\n }\n setPadding(left, top, right, bottom) {\n let changed = false;\n if (this.mPaddingLeft != left) {\n changed = true;\n this.mPaddingLeft = left;\n }\n if (this.mPaddingTop != top) {\n changed = true;\n this.mPaddingTop = top;\n }\n if (this.mPaddingRight != right) {\n changed = true;\n this.mPaddingRight = right;\n }\n if (this.mPaddingBottom != bottom) {\n changed = true;\n this.mPaddingBottom = bottom;\n }\n if (changed) {\n this.requestLayout();\n }\n }\n resolvePadding() {\n }\n setScrollX(value) {\n this.scrollTo(value, this.mScrollY);\n }\n setScrollY(value) {\n this.scrollTo(this.mScrollX, value);\n }\n getScrollX() {\n return this.mScrollX;\n }\n getScrollY() {\n return this.mScrollY;\n }\n offsetTopAndBottom(offset) {\n if (offset != 0) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n const p = this.mParent;\n if (p != null && this.mAttachInfo != null) {\n const r = this.mAttachInfo.mTmpInvalRect;\n let minTop;\n let maxBottom;\n let yLoc;\n if (offset < 0) {\n minTop = this.mTop + offset;\n maxBottom = this.mBottom;\n yLoc = offset;\n }\n else {\n minTop = this.mTop;\n maxBottom = this.mBottom + offset;\n yLoc = 0;\n }\n r.set(0, yLoc, this.mRight - this.mLeft, maxBottom - minTop);\n p.invalidateChild(this, r);\n }\n }\n else {\n this.invalidateViewProperty(false, false);\n }\n this.mTop += offset;\n this.mBottom += offset;\n if (!matrixIsIdentity) {\n this.invalidateViewProperty(false, true);\n }\n this.invalidateParentIfNeeded();\n }\n }\n offsetLeftAndRight(offset) {\n if (offset != 0) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n const p = this.mParent;\n if (p != null && this.mAttachInfo != null) {\n const r = this.mAttachInfo.mTmpInvalRect;\n let minLeft;\n let maxRight;\n if (offset < 0) {\n minLeft = this.mLeft + offset;\n maxRight = this.mRight;\n }\n else {\n minLeft = this.mLeft;\n maxRight = this.mRight + offset;\n }\n r.set(0, 0, maxRight - minLeft, this.mBottom - this.mTop);\n p.invalidateChild(this, r);\n }\n }\n else {\n this.invalidateViewProperty(false, false);\n }\n this.mLeft += offset;\n this.mRight += offset;\n if (!matrixIsIdentity) {\n this.invalidateViewProperty(false, true);\n }\n this.invalidateParentIfNeeded();\n }\n }\n getMatrix() {\n if (this.mTransformationInfo != null) {\n this.updateMatrix();\n return this.mTransformationInfo.mMatrix;\n }\n return Matrix.IDENTITY_MATRIX;\n }\n hasIdentityMatrix() {\n if (this.mTransformationInfo != null) {\n this.updateMatrix();\n return this.mTransformationInfo.mMatrixIsIdentity;\n }\n return true;\n }\n ensureTransformationInfo() {\n if (this.mTransformationInfo == null) {\n this.mTransformationInfo = new View.TransformationInfo();\n }\n }\n updateMatrix() {\n const info = this.mTransformationInfo;\n if (info == null) {\n this._syncMatrixToElement();\n return;\n }\n if (info.mMatrixDirty) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n if ((this.mRight - this.mLeft) != info.mPrevWidth || (this.mBottom - this.mTop) != info.mPrevHeight) {\n info.mPrevWidth = this.mRight - this.mLeft;\n info.mPrevHeight = this.mBottom - this.mTop;\n info.mPivotX = info.mPrevWidth / 2;\n info.mPivotY = info.mPrevHeight / 2;\n }\n }\n info.mMatrix.reset();\n info.mMatrix.setTranslate(info.mTranslationX, info.mTranslationY);\n info.mMatrix.preRotate(info.mRotation, info.mPivotX, info.mPivotY);\n info.mMatrix.preScale(info.mScaleX, info.mScaleY, info.mPivotX, info.mPivotY);\n info.mMatrixDirty = false;\n info.mMatrixIsIdentity = info.mMatrix.isIdentity();\n info.mInverseMatrixDirty = true;\n }\n this._syncMatrixToElement();\n }\n getRotation() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mRotation : 0;\n }\n setRotation(rotation) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mRotation != rotation) {\n this.invalidateViewProperty(true, false);\n info.mRotation = rotation;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getRotationY() {\n return 0;\n }\n setRotationY(rotationY) {\n }\n getRotationX() {\n return 0;\n }\n setRotationX(rotationX) {\n }\n getScaleX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mScaleX : 1;\n }\n setScaleX(scaleX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mScaleX != scaleX) {\n this.invalidateViewProperty(true, false);\n info.mScaleX = scaleX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getScaleY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mScaleY : 1;\n }\n setScaleY(scaleY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mScaleY != scaleY) {\n this.invalidateViewProperty(true, false);\n info.mScaleY = scaleY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getPivotX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mPivotX : 0;\n }\n setPivotX(pivotX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n let pivotSet = (this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == View.PFLAG_PIVOT_EXPLICITLY_SET;\n if (info.mPivotX != pivotX || !pivotSet) {\n this.mPrivateFlags |= View.PFLAG_PIVOT_EXPLICITLY_SET;\n this.invalidateViewProperty(true, false);\n info.mPivotX = pivotX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getPivotY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mPivotY : 0;\n }\n setPivotY(pivotY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n let pivotSet = (this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == View.PFLAG_PIVOT_EXPLICITLY_SET;\n if (info.mPivotY != pivotY || !pivotSet) {\n this.mPrivateFlags |= View.PFLAG_PIVOT_EXPLICITLY_SET;\n this.invalidateViewProperty(true, false);\n info.mPivotY = pivotY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getAlpha() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mAlpha : 1;\n }\n hasOverlappingRendering() {\n return true;\n }\n setAlpha(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mAlpha != alpha) {\n this.mTransformationInfo.mAlpha = alpha;\n if (this.onSetAlpha(Math.floor((alpha * 255)))) {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n this.invalidateViewProperty(true, false);\n }\n }\n }\n setAlphaNoInvalidation(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mAlpha != alpha) {\n this.mTransformationInfo.mAlpha = alpha;\n let subclassHandlesAlpha = this.onSetAlpha(Math.floor((alpha * 255)));\n if (subclassHandlesAlpha) {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n return true;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n }\n }\n return false;\n }\n setTransitionAlpha(alpha) {\n this.ensureTransformationInfo();\n if (this.mTransformationInfo.mTransitionAlpha != alpha) {\n this.mTransformationInfo.mTransitionAlpha = alpha;\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n this.invalidateViewProperty(true, false);\n }\n }\n getFinalAlpha() {\n if (this.mTransformationInfo != null) {\n return this.mTransformationInfo.mAlpha * this.mTransformationInfo.mTransitionAlpha;\n }\n return 1;\n }\n getTransitionAlpha() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTransitionAlpha : 1;\n }\n getTop() {\n return this.mTop;\n }\n setTop(top) {\n if (top != this.mTop) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let minTop;\n let yLoc;\n if (top < this.mTop) {\n minTop = top;\n yLoc = top - this.mTop;\n }\n else {\n minTop = this.mTop;\n yLoc = 0;\n }\n this.invalidate(0, yLoc, this.mRight - this.mLeft, this.mBottom - minTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let width = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n this.mTop = top;\n this.sizeChange(width, this.mBottom - this.mTop, width, oldHeight);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getBottom() {\n return this.mBottom;\n }\n isDirty() {\n return (this.mPrivateFlags & View.PFLAG_DIRTY_MASK) != 0;\n }\n setBottom(bottom) {\n if (bottom != this.mBottom) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let maxBottom;\n if (bottom < this.mBottom) {\n maxBottom = this.mBottom;\n }\n else {\n maxBottom = bottom;\n }\n this.invalidate(0, 0, this.mRight - this.mLeft, maxBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let width = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n this.mBottom = bottom;\n this.sizeChange(width, this.mBottom - this.mTop, width, oldHeight);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getLeft() {\n return this.mLeft;\n }\n setLeft(left) {\n if (left != this.mLeft) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let minLeft;\n let xLoc;\n if (left < this.mLeft) {\n minLeft = left;\n xLoc = left - this.mLeft;\n }\n else {\n minLeft = this.mLeft;\n xLoc = 0;\n }\n this.invalidate(xLoc, 0, this.mRight - minLeft, this.mBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let oldWidth = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n this.mLeft = left;\n this.sizeChange(this.mRight - this.mLeft, height, oldWidth, height);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getRight() {\n return this.mRight;\n }\n setRight(right) {\n if (right != this.mRight) {\n this.updateMatrix();\n const matrixIsIdentity = this.mTransformationInfo == null || this.mTransformationInfo.mMatrixIsIdentity;\n if (matrixIsIdentity) {\n if (this.mAttachInfo != null) {\n let maxRight;\n if (right < this.mRight) {\n maxRight = this.mRight;\n }\n else {\n maxRight = right;\n }\n this.invalidate(0, 0, maxRight - this.mLeft, this.mBottom - this.mTop);\n }\n }\n else {\n this.invalidate(true);\n }\n let oldWidth = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n this.mRight = right;\n this.sizeChange(this.mRight - this.mLeft, height, oldWidth, height);\n if (!matrixIsIdentity) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n }\n this.mBackgroundSizeChanged = true;\n this.invalidateParentIfNeeded();\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getX() {\n return this.mLeft + (this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationX : 0);\n }\n setX(x) {\n this.setTranslationX(x - this.mLeft);\n }\n getY() {\n return this.mTop + (this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationY : 0);\n }\n setY(y) {\n this.setTranslationY(y - this.mTop);\n }\n getTranslationX() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationX : 0;\n }\n setTranslationX(translationX) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mTranslationX != translationX) {\n this.invalidateViewProperty(true, false);\n info.mTranslationX = translationX;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n getTranslationY() {\n return this.mTransformationInfo != null ? this.mTransformationInfo.mTranslationY : 0;\n }\n setTranslationY(translationY) {\n this.ensureTransformationInfo();\n const info = this.mTransformationInfo;\n if (info.mTranslationY != translationY) {\n this.invalidateViewProperty(true, false);\n info.mTranslationY = translationY;\n info.mMatrixDirty = true;\n this.invalidateViewProperty(false, true);\n if ((this.mPrivateFlags2 & View.PFLAG2_VIEW_QUICK_REJECTED) == View.PFLAG2_VIEW_QUICK_REJECTED) {\n this.invalidateParentIfNeeded();\n }\n }\n }\n transformRect(rect) {\n if (!this.getMatrix().isIdentity()) {\n let boundingRect = this.mAttachInfo.mTmpTransformRect;\n boundingRect.set(rect);\n this.getMatrix().mapRect(boundingRect);\n rect.set(boundingRect);\n }\n }\n pointInView(localX, localY, slop = 0) {\n return localX >= -slop && localY >= -slop && localX < ((this.mRight - this.mLeft) + slop) &&\n localY < ((this.mBottom - this.mTop) + slop);\n }\n getHandler() {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler;\n }\n return null;\n }\n getViewRootImpl() {\n if (this.mAttachInfo != null) {\n return this.mAttachInfo.mViewRootImpl;\n }\n if (this.mContext != null) {\n return this.mContext.androidUI._viewRootImpl;\n }\n return null;\n }\n post(action) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler.post(action);\n }\n view_1.ViewRootImpl.getRunQueue().post(action);\n return true;\n }\n postDelayed(action, delayMillis) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n return attachInfo.mHandler.postDelayed(action, delayMillis);\n }\n view_1.ViewRootImpl.getRunQueue().postDelayed(action, delayMillis);\n return true;\n }\n postOnAnimation(action) {\n return this.post(action);\n }\n postOnAnimationDelayed(action, delayMillis) {\n return this.postDelayed(action, delayMillis);\n }\n removeCallbacks(action) {\n if (action != null) {\n let attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n attachInfo.mHandler.removeCallbacks(action);\n }\n else {\n view_1.ViewRootImpl.getRunQueue().removeCallbacks(action);\n }\n }\n return true;\n }\n getParent() {\n return this.mParent;\n }\n setFlags(flags, mask) {\n let old = this.mViewFlags;\n this.mViewFlags = (this.mViewFlags & ~mask) | (flags & mask);\n let changed = this.mViewFlags ^ old;\n if (changed == 0) {\n return;\n }\n let privateFlags = this.mPrivateFlags;\n if (((changed & View.FOCUSABLE_MASK) != 0) &&\n ((privateFlags & View.PFLAG_HAS_BOUNDS) != 0)) {\n if (((old & View.FOCUSABLE_MASK) == View.FOCUSABLE)\n && ((privateFlags & View.PFLAG_FOCUSED) != 0)) {\n this.clearFocus();\n }\n else if (((old & View.FOCUSABLE_MASK) == View.NOT_FOCUSABLE)\n && ((privateFlags & View.PFLAG_FOCUSED) == 0)) {\n if (this.mParent != null)\n this.mParent.focusableViewAvailable(this);\n }\n }\n const newVisibility = flags & View.VISIBILITY_MASK;\n if (newVisibility == View.VISIBLE) {\n if ((changed & View.VISIBILITY_MASK) != 0) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(true);\n if ((this.mParent != null) && (this.mBottom > this.mTop) && (this.mRight > this.mLeft)) {\n this.mParent.focusableViewAvailable(this);\n }\n }\n }\n if ((changed & View.GONE) != 0) {\n this.requestLayout();\n if (((this.mViewFlags & View.VISIBILITY_MASK) == View.GONE)) {\n if (this.hasFocus())\n this.clearFocus();\n this.destroyDrawingCache();\n if (this.mParent instanceof View) {\n this.mParent.invalidate(true);\n }\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n }\n }\n if ((changed & View.INVISIBLE) != 0) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (((this.mViewFlags & View.VISIBILITY_MASK) == View.INVISIBLE)) {\n if (this.getRootView() != this) {\n if (this.hasFocus())\n this.clearFocus();\n }\n }\n }\n if ((changed & View.VISIBILITY_MASK) != 0) {\n if (newVisibility != View.VISIBLE) {\n this.cleanupDraw();\n }\n if (this.mParent instanceof view_1.ViewGroup) {\n this.mParent.onChildVisibilityChanged(this, (changed & View.VISIBILITY_MASK), newVisibility);\n this.mParent.invalidate(true);\n }\n else if (this.mParent != null) {\n this.mParent.invalidateChild(this, null);\n }\n this.dispatchVisibilityChanged(this, newVisibility);\n this.syncVisibleToElement();\n }\n if ((changed & View.WILL_NOT_CACHE_DRAWING) != 0) {\n this.destroyDrawingCache();\n }\n if ((changed & View.DRAWING_CACHE_ENABLED) != 0) {\n this.destroyDrawingCache();\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n this.invalidateParentCaches();\n }\n if ((changed & View.DRAW_MASK) != 0) {\n if ((this.mViewFlags & View.WILL_NOT_DRAW) != 0) {\n if (this.mBackground != null) {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n this.mPrivateFlags |= View.PFLAG_ONLY_DRAWS_BACKGROUND;\n }\n else {\n this.mPrivateFlags |= View.PFLAG_SKIP_DRAW;\n }\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n }\n this.requestLayout();\n this.invalidate(true);\n }\n }\n bringToFront() {\n if (this.mParent != null) {\n this.mParent.bringChildToFront(this);\n }\n }\n onScrollChanged(l, t, oldl, oldt) {\n this.mBackgroundSizeChanged = true;\n let rootImpl = this.getViewRootImpl();\n if (rootImpl != null) {\n rootImpl.mViewScrollChanged = true;\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n }\n getTouchables() {\n let result = new ArrayList();\n this.addTouchables(result);\n return result;\n }\n addTouchables(views) {\n const viewFlags = this.mViewFlags;\n if (((viewFlags & View.CLICKABLE) == View.CLICKABLE || (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE)\n && (viewFlags & View.ENABLED_MASK) == View.ENABLED) {\n views.add(this);\n }\n }\n requestRectangleOnScreen(rectangle, immediate = false) {\n if (this.mParent == null) {\n return false;\n }\n let child = this;\n let position = (this.mAttachInfo != null) ? this.mAttachInfo.mTmpTransformRect : new RectF();\n position.set(rectangle);\n let parent = this.mParent;\n let scrolled = false;\n while (parent != null) {\n rectangle.set(Math.floor(position.left), Math.floor(position.top), Math.floor(position.right), Math.floor(position.bottom));\n scrolled = parent.requestChildRectangleOnScreen(child, rectangle, immediate) || scrolled;\n if (!child.hasIdentityMatrix()) {\n child.getMatrix().mapRect(position);\n }\n position.offset(child.mLeft, child.mTop);\n if (!(parent instanceof View)) {\n break;\n }\n let parentView = parent;\n position.offset(-parentView.getScrollX(), -parentView.getScrollY());\n child = parentView;\n parent = child.getParent();\n }\n return scrolled;\n }\n onFocusLost() {\n this.resetPressedState();\n }\n resetPressedState() {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return;\n }\n if (this.isPressed()) {\n this.setPressed(false);\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n }\n }\n }\n isFocused() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0;\n }\n findFocus() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0 ? this : null;\n }\n getNextFocusLeftId() {\n return this.mNextFocusLeftId;\n }\n setNextFocusLeftId(nextFocusLeftId) {\n this.mNextFocusLeftId = nextFocusLeftId;\n }\n getNextFocusRightId() {\n return this.mNextFocusRightId;\n }\n setNextFocusRightId(nextFocusRightId) {\n this.mNextFocusRightId = nextFocusRightId;\n }\n getNextFocusUpId() {\n return this.mNextFocusUpId;\n }\n setNextFocusUpId(nextFocusUpId) {\n this.mNextFocusUpId = nextFocusUpId;\n }\n getNextFocusDownId() {\n return this.mNextFocusDownId;\n }\n setNextFocusDownId(nextFocusDownId) {\n this.mNextFocusDownId = nextFocusDownId;\n }\n getNextFocusForwardId() {\n return this.mNextFocusForwardId;\n }\n setNextFocusForwardId(nextFocusForwardId) {\n this.mNextFocusForwardId = nextFocusForwardId;\n }\n setFocusable(focusable) {\n if (!focusable) {\n this.setFlags(0, View.FOCUSABLE_IN_TOUCH_MODE);\n }\n this.setFlags(focusable ? View.FOCUSABLE : View.NOT_FOCUSABLE, View.FOCUSABLE_MASK);\n }\n isFocusable() {\n return View.FOCUSABLE == (this.mViewFlags & View.FOCUSABLE_MASK);\n }\n setFocusableInTouchMode(focusableInTouchMode) {\n this.setFlags(focusableInTouchMode ? View.FOCUSABLE_IN_TOUCH_MODE : 0, View.FOCUSABLE_IN_TOUCH_MODE);\n if (focusableInTouchMode) {\n this.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n }\n isFocusableInTouchMode() {\n return View.FOCUSABLE_IN_TOUCH_MODE == (this.mViewFlags & View.FOCUSABLE_IN_TOUCH_MODE);\n }\n hasFocusable() {\n return (this.mViewFlags & View.VISIBILITY_MASK) == View.VISIBLE && this.isFocusable();\n }\n clearFocus() {\n if (View.DBG) {\n System.out.println(this + \" clearFocus()\");\n }\n this.clearFocusInternal(true, true);\n }\n clearFocusInternal(propagate, refocus) {\n if ((this.mPrivateFlags & View.PFLAG_FOCUSED) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_FOCUSED;\n if (propagate && this.mParent != null) {\n this.mParent.clearChildFocus(this);\n }\n this.onFocusChanged(false, 0, null);\n this.refreshDrawableState();\n if (propagate && (!refocus || !this.rootViewRequestFocus())) {\n this.notifyGlobalFocusCleared(this);\n }\n }\n }\n notifyGlobalFocusCleared(oldFocus) {\n }\n rootViewRequestFocus() {\n const root = this.getRootView();\n return root != null && root.requestFocus();\n }\n unFocus() {\n if (View.DBG) {\n System.out.println(this + \" unFocus()\");\n }\n this.clearFocusInternal(false, false);\n }\n hasFocus() {\n return (this.mPrivateFlags & View.PFLAG_FOCUSED) != 0;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n if (!gainFocus) {\n if (this.isPressed()) {\n this.setPressed(false);\n }\n this.onFocusLost();\n }\n this.invalidate(true);\n let li = this.mListenerInfo;\n if (li != null && li.mOnFocusChangeListener != null) {\n li.mOnFocusChangeListener.onFocusChange(this, gainFocus);\n }\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mKeyDispatchState.reset(this);\n }\n }\n focusSearch(direction) {\n if (this.mParent != null) {\n return this.mParent.focusSearch(this, direction);\n }\n else {\n return null;\n }\n }\n dispatchUnhandledMove(focused, direction) {\n return false;\n }\n findUserSetNextFocus(root, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n if (!this.mNextFocusLeftId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusLeftId);\n case View.FOCUS_RIGHT:\n if (!this.mNextFocusRightId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusRightId);\n case View.FOCUS_UP:\n if (!this.mNextFocusUpId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusUpId);\n case View.FOCUS_DOWN:\n if (!this.mNextFocusDownId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusDownId);\n case View.FOCUS_FORWARD:\n if (!this.mNextFocusForwardId)\n return null;\n return this.findViewInsideOutShouldExist(root, this.mNextFocusForwardId);\n case View.FOCUS_BACKWARD: {\n if (!this.mID)\n return null;\n let id = this.mID;\n return root.findViewByPredicateInsideOut(this, {\n apply(t) {\n return t.mNextFocusForwardId == id;\n }\n });\n }\n }\n return null;\n }\n findViewInsideOutShouldExist(root, id) {\n if (this.mMatchIdPredicate == null) {\n this.mMatchIdPredicate = new MatchIdPredicate();\n }\n this.mMatchIdPredicate.mId = id;\n let result = root.findViewByPredicateInsideOut(this, this.mMatchIdPredicate);\n if (result == null) {\n Log.w(View.VIEW_LOG_TAG, \"couldn't find view with id \" + id);\n }\n return result;\n }\n getFocusables(direction) {\n let result = new ArrayList(24);\n this.addFocusables(result, direction);\n return result;\n }\n addFocusables(views, direction, focusableMode = View.FOCUSABLES_TOUCH_MODE) {\n if (views == null) {\n return;\n }\n if (!this.isFocusable()) {\n return;\n }\n if ((focusableMode & View.FOCUSABLES_TOUCH_MODE) == View.FOCUSABLES_TOUCH_MODE\n && this.isInTouchMode() && !this.isFocusableInTouchMode()) {\n return;\n }\n views.add(this);\n }\n setOnFocusChangeListener(l) {\n if (typeof l == \"function\") {\n l = View.OnFocusChangeListener.fromFunction(l);\n }\n this.getListenerInfo().mOnFocusChangeListener = l;\n }\n getOnFocusChangeListener() {\n let li = this.mListenerInfo;\n return li != null ? li.mOnFocusChangeListener : null;\n }\n requestFocus(direction = View.FOCUS_DOWN, previouslyFocusedRect = null) {\n return this.requestFocusNoSearch(direction, previouslyFocusedRect);\n }\n requestFocusNoSearch(direction, previouslyFocusedRect) {\n if ((this.mViewFlags & View.FOCUSABLE_MASK) != View.FOCUSABLE ||\n (this.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE) {\n return false;\n }\n if (this.isInTouchMode() &&\n (View.FOCUSABLE_IN_TOUCH_MODE != (this.mViewFlags & View.FOCUSABLE_IN_TOUCH_MODE))) {\n return false;\n }\n if (this.hasAncestorThatBlocksDescendantFocus()) {\n return false;\n }\n this.handleFocusGainInternal(direction, previouslyFocusedRect);\n return true;\n }\n requestFocusFromTouch() {\n if (this.isInTouchMode()) {\n let viewRoot = this.getViewRootImpl();\n if (viewRoot != null) {\n viewRoot.ensureTouchMode(false);\n }\n }\n return this.requestFocus(View.FOCUS_DOWN);\n }\n hasAncestorThatBlocksDescendantFocus() {\n let ancestor = this.mParent;\n while (ancestor instanceof view_1.ViewGroup) {\n const vgAncestor = ancestor;\n if (vgAncestor.getDescendantFocusability() == view_1.ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n return true;\n }\n else {\n ancestor = vgAncestor.getParent();\n }\n }\n return false;\n }\n handleFocusGainInternal(direction, previouslyFocusedRect) {\n if (View.DBG) {\n System.out.println(this + \" requestFocus()\");\n }\n if ((this.mPrivateFlags & View.PFLAG_FOCUSED) == 0) {\n this.mPrivateFlags |= View.PFLAG_FOCUSED;\n let oldFocus = (this.mAttachInfo != null) ? this.getRootView().findFocus() : null;\n if (this.mParent != null) {\n this.mParent.requestChildFocus(this, this);\n }\n this.onFocusChanged(true, direction, previouslyFocusedRect);\n this.refreshDrawableState();\n }\n }\n hasTransientState() {\n return (this.mPrivateFlags2 & View.PFLAG2_HAS_TRANSIENT_STATE) == View.PFLAG2_HAS_TRANSIENT_STATE;\n }\n setHasTransientState(hasTransientState) {\n this.mTransientStateCount = hasTransientState ? this.mTransientStateCount + 1 :\n this.mTransientStateCount - 1;\n if (this.mTransientStateCount < 0) {\n this.mTransientStateCount = 0;\n Log.e(View.VIEW_LOG_TAG, \"hasTransientState decremented below 0: \" +\n \"unmatched pair of setHasTransientState calls\");\n }\n else if ((hasTransientState && this.mTransientStateCount == 1) ||\n (!hasTransientState && this.mTransientStateCount == 0)) {\n this.mPrivateFlags2 = (this.mPrivateFlags2 & ~View.PFLAG2_HAS_TRANSIENT_STATE) |\n (hasTransientState ? View.PFLAG2_HAS_TRANSIENT_STATE : 0);\n if (this.mParent != null) {\n this.mParent.childHasTransientStateChanged(this, hasTransientState);\n }\n }\n }\n isScrollContainer() {\n return (this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0;\n }\n setScrollContainer(isScrollContainer) {\n if (isScrollContainer) {\n if (this.mAttachInfo != null && (this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) == 0) {\n this.mAttachInfo.mScrollContainers.add(this);\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER;\n }\n else {\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0) {\n this.mAttachInfo.mScrollContainers.delete(this);\n }\n this.mPrivateFlags &= ~(View.PFLAG_SCROLL_CONTAINER | View.PFLAG_SCROLL_CONTAINER_ADDED);\n }\n }\n isInTouchMode() {\n if (this.getViewRootImpl() != null) {\n return this.getViewRootImpl().mInTouchMode;\n }\n else {\n return false;\n }\n }\n isShown() {\n let current = this;\n do {\n if ((current.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE) {\n return false;\n }\n let parent = current.mParent;\n if (parent == null) {\n return false;\n }\n if (!(parent instanceof View)) {\n return true;\n }\n current = parent;\n } while (current != null);\n return false;\n }\n getVisibility() {\n return this.mViewFlags & View.VISIBILITY_MASK;\n }\n setVisibility(visibility) {\n this.setFlags(visibility, View.VISIBILITY_MASK);\n if (this.mBackground != null)\n this.mBackground.setVisible(visibility == View.VISIBLE, false);\n }\n dispatchVisibilityChanged(changedView, visibility) {\n this.onVisibilityChanged(changedView, visibility);\n }\n onVisibilityChanged(changedView, visibility) {\n if (visibility == View.VISIBLE) {\n if (this.mAttachInfo != null) {\n this.initialAwakenScrollBars();\n }\n else {\n this.mPrivateFlags |= View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;\n }\n }\n }\n dispatchDisplayHint(hint) {\n this.onDisplayHint(hint);\n }\n onDisplayHint(hint) {\n }\n dispatchWindowVisibilityChanged(visibility) {\n this.onWindowVisibilityChanged(visibility);\n }\n onWindowVisibilityChanged(visibility) {\n if (visibility == View.VISIBLE) {\n this.initialAwakenScrollBars();\n }\n }\n getWindowVisibility() {\n return this.mAttachInfo != null ? this.mAttachInfo.mWindowVisibility : View.GONE;\n }\n isEnabled() {\n return (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED;\n }\n setEnabled(enabled) {\n if (enabled == this.isEnabled())\n return;\n this.setFlags(enabled ? View.ENABLED : View.DISABLED, View.ENABLED_MASK);\n this.refreshDrawableState();\n this.invalidate(true);\n }\n dispatchGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n const action = event.getAction();\n if (action == view_1.MotionEvent.ACTION_HOVER_ENTER\n || action == view_1.MotionEvent.ACTION_HOVER_MOVE\n || action == view_1.MotionEvent.ACTION_HOVER_EXIT) {\n }\n else if (this.dispatchGenericPointerEvent(event)) {\n return true;\n }\n }\n if (this.dispatchGenericMotionEventInternal(event)) {\n return true;\n }\n return false;\n }\n dispatchGenericMotionEventInternal(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnGenericMotionListener != null\n && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnGenericMotionListener.onGenericMotion(this, event)) {\n return true;\n }\n if (this.onGenericMotionEvent(event)) {\n return true;\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n dispatchGenericPointerEvent(event) {\n return false;\n }\n dispatchKeyEvent(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnKeyListener != null && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnKeyListener.onKey(this, event.getKeyCode(), event)) {\n return true;\n }\n if (event.dispatch(this, this.mAttachInfo != null\n ? this.mAttachInfo.mKeyDispatchState : null, this)) {\n return true;\n }\n return false;\n }\n setOnKeyListener(l) {\n if (typeof l == \"function\") {\n l = View.OnKeyListener.fromFunction(l);\n }\n this.getListenerInfo().mOnKeyListener = l;\n }\n getKeyDispatcherState() {\n return this.mAttachInfo != null ? this.mAttachInfo.mKeyDispatchState : null;\n }\n onKeyDown(keyCode, event) {\n let result = false;\n if (KeyEvent.isConfirmKey(keyCode)) {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return true;\n }\n if (((this.mViewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE) &&\n (event.getRepeatCount() == 0)) {\n this.setPressed(true);\n this.checkForLongClick(0);\n return true;\n }\n }\n return result;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (KeyEvent.isConfirmKey(keyCode)) {\n if ((this.mViewFlags & View.ENABLED_MASK) == View.DISABLED) {\n return true;\n }\n if ((this.mViewFlags & View.CLICKABLE) == View.CLICKABLE && this.isPressed()) {\n this.setPressed(false);\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n return this.performClick();\n }\n }\n }\n return false;\n }\n dispatchTouchEvent(event) {\n if (this.onFilterTouchEventForSecurity(event)) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnTouchListener != null && (this.mViewFlags & View.ENABLED_MASK) == View.ENABLED\n && li.mOnTouchListener.onTouch(this, event)) {\n return true;\n }\n if (this.onTouchEvent(event)) {\n return true;\n }\n }\n return false;\n }\n onFilterTouchEventForSecurity(event) {\n return true;\n }\n onTouchEvent(event) {\n let viewFlags = this.mViewFlags;\n if ((viewFlags & View.ENABLED_MASK) == View.DISABLED) {\n if (event.getAction() == view_1.MotionEvent.ACTION_UP && (this.mPrivateFlags & View.PFLAG_PRESSED) != 0) {\n this.setPressed(false);\n }\n return (((viewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE));\n }\n if (this.mTouchDelegate != null) {\n if (this.mTouchDelegate.onTouchEvent(event)) {\n return true;\n }\n }\n if (((viewFlags & View.CLICKABLE) == View.CLICKABLE ||\n (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE)) {\n switch (event.getAction()) {\n case view_1.MotionEvent.ACTION_UP:\n let prepressed = (this.mPrivateFlags & View.PFLAG_PREPRESSED) != 0;\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0 || prepressed) {\n let focusTaken = false;\n if (this.isFocusable() && this.isFocusableInTouchMode() && !this.isFocused()) {\n focusTaken = this.requestFocus();\n }\n if (prepressed) {\n this.setPressed(true);\n }\n if (!this.mHasPerformedLongPress) {\n this.removeLongPressCallback();\n if (!focusTaken) {\n if (this.mPerformClick == null) {\n this.mPerformClick = new PerformClick(this);\n }\n if (prepressed) {\n if (this.mPerformClickAfterPressDraw == null) {\n this.mPerformClickAfterPressDraw = new PerformClickAfterPressDraw(this);\n }\n this.post(this.mPerformClickAfterPressDraw);\n }\n else if (!this.post(this.mPerformClick)) {\n this.performClick(event);\n }\n }\n }\n if (this.mUnsetPressedState == null) {\n this.mUnsetPressedState = new UnsetPressedState(this);\n }\n if (prepressed) {\n this.postDelayed(this.mUnsetPressedState, view_1.ViewConfiguration.getPressedStateDuration());\n }\n else if (!this.post(this.mUnsetPressedState)) {\n this.mUnsetPressedState.run();\n }\n this.removeTapCallback();\n }\n break;\n case view_1.MotionEvent.ACTION_DOWN:\n this.mHasPerformedLongPress = false;\n let isInScrollingContainer = this.isInScrollingContainer();\n if (isInScrollingContainer) {\n this.mPrivateFlags |= View.PFLAG_PREPRESSED;\n if (this.mPendingCheckForTap == null) {\n this.mPendingCheckForTap = new CheckForTap(this);\n }\n this.postDelayed(this.mPendingCheckForTap, view_1.ViewConfiguration.getTapTimeout());\n }\n else {\n this.setPressed(true);\n this.checkForLongClick(0);\n }\n break;\n case view_1.MotionEvent.ACTION_CANCEL:\n this.setPressed(false);\n this.removeTapCallback();\n this.removeLongPressCallback();\n break;\n case view_1.MotionEvent.ACTION_MOVE:\n const x = event.getX();\n const y = event.getY();\n if (!this.pointInView(x, y, this.mTouchSlop)) {\n this.removeTapCallback();\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0) {\n this.removeLongPressCallback();\n this.setPressed(false);\n }\n }\n break;\n }\n return true;\n }\n return false;\n }\n isInScrollingContainer() {\n let p = this.getParent();\n while (p != null && p instanceof view_1.ViewGroup) {\n if (p.shouldDelayChildPressedState()) {\n return true;\n }\n p = p.getParent();\n }\n return false;\n }\n cancelPendingInputEvents() {\n this.dispatchCancelPendingInputEvents();\n }\n dispatchCancelPendingInputEvents() {\n this.mPrivateFlags3 &= ~View.PFLAG3_CALLED_SUPER;\n this.onCancelPendingInputEvents();\n if ((this.mPrivateFlags3 & View.PFLAG3_CALLED_SUPER) != View.PFLAG3_CALLED_SUPER) {\n throw Error(`new SuperNotCalledException(\"View \" + this.getClass().getSimpleName() + \" did not call through to super.onCancelPendingInputEvents()\")`);\n }\n }\n onCancelPendingInputEvents() {\n this.removePerformClickCallback();\n this.cancelLongPress();\n this.mPrivateFlags3 |= View.PFLAG3_CALLED_SUPER;\n }\n removeLongPressCallback() {\n if (this.mPendingCheckForLongPress != null) {\n this.removeCallbacks(this.mPendingCheckForLongPress);\n }\n }\n removePerformClickCallback() {\n if (this.mPerformClick != null) {\n this.removeCallbacks(this.mPerformClick);\n }\n if (this.mPerformClickAfterPressDraw != null) {\n this.removeCallbacks(this.mPerformClickAfterPressDraw);\n }\n }\n removeUnsetPressCallback() {\n if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0 && this.mUnsetPressedState != null) {\n this.setPressed(false);\n this.removeCallbacks(this.mUnsetPressedState);\n }\n }\n removeTapCallback() {\n if (this.mPendingCheckForTap != null) {\n this.mPrivateFlags &= ~View.PFLAG_PREPRESSED;\n this.removeCallbacks(this.mPendingCheckForTap);\n }\n }\n cancelLongPress() {\n this.removeLongPressCallback();\n this.removeTapCallback();\n }\n setTouchDelegate(delegate) {\n this.mTouchDelegate = delegate;\n }\n getTouchDelegate() {\n return this.mTouchDelegate;\n }\n getListenerInfo() {\n if (this.mListenerInfo != null) {\n return this.mListenerInfo;\n }\n this.mListenerInfo = new View.ListenerInfo();\n return this.mListenerInfo;\n }\n addOnLayoutChangeListener(listener) {\n let li = this.getListenerInfo();\n if (li.mOnLayoutChangeListeners == null) {\n li.mOnLayoutChangeListeners = new ArrayList();\n }\n if (!li.mOnLayoutChangeListeners.contains(listener)) {\n li.mOnLayoutChangeListeners.add(listener);\n }\n }\n removeOnLayoutChangeListener(listener) {\n let li = this.mListenerInfo;\n if (li == null || li.mOnLayoutChangeListeners == null) {\n return;\n }\n li.mOnLayoutChangeListeners.remove(listener);\n }\n addOnAttachStateChangeListener(listener) {\n let li = this.getListenerInfo();\n if (li.mOnAttachStateChangeListeners == null) {\n li.mOnAttachStateChangeListeners\n = new CopyOnWriteArrayList();\n }\n li.mOnAttachStateChangeListeners.add(listener);\n }\n removeOnAttachStateChangeListener(listener) {\n let li = this.mListenerInfo;\n if (li == null || li.mOnAttachStateChangeListeners == null) {\n return;\n }\n li.mOnAttachStateChangeListeners.remove(listener);\n }\n setOnClickListenerByAttrValueString(onClickAttrString) {\n this.setOnClickListener((view) => {\n if (!onClickAttrString)\n return;\n let activityClickMethod = view.getContext()[onClickAttrString];\n if (typeof activityClickMethod === 'function') {\n try {\n activityClickMethod.call(view.getContext(), view);\n }\n catch (e) {\n console.error(e);\n throw new Error(`Could not execute method '${onClickAttrString}' of the activity`);\n }\n return;\n }\n else {\n try {\n new Function(onClickAttrString).call(view);\n }\n catch (e) {\n console.error(e);\n throw new Error(\"Could not execute or find a method \" +\n onClickAttrString + \"(View) in the activity \"\n + view.getContext().constructor.name + \" for onClick handler\"\n + \" on view \" + view.getClass() + view.getId());\n }\n }\n });\n }\n setOnClickListener(l) {\n if (!this.isClickable()) {\n this.setClickable(true);\n }\n if (typeof l == \"function\") {\n l = View.OnClickListener.fromFunction(l);\n }\n this.getListenerInfo().mOnClickListener = l;\n }\n hasOnClickListeners() {\n let li = this.mListenerInfo;\n return (li != null && li.mOnClickListener != null);\n }\n setOnLongClickListener(l) {\n if (!this.isLongClickable()) {\n this.setLongClickable(true);\n }\n if (typeof l == \"function\") {\n l = View.OnLongClickListener.fromFunction(l);\n }\n this.getListenerInfo().mOnLongClickListener = l;\n }\n playSoundEffect(soundConstant) {\n }\n performHapticFeedback(feedbackConstant) {\n return false;\n }\n performClick(event) {\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n li.mOnClickListener.onClick(this);\n return true;\n }\n return false;\n }\n callOnClick() {\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n li.mOnClickListener.onClick(this);\n return true;\n }\n return false;\n }\n performLongClick() {\n let handled = false;\n let li = this.mListenerInfo;\n if (li != null && li.mOnLongClickListener != null) {\n handled = li.mOnLongClickListener.onLongClick(this);\n }\n return handled;\n }\n performButtonActionOnTouchDown(event) {\n return false;\n }\n checkForLongClick(delayOffset = 0) {\n if ((this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE) {\n this.mHasPerformedLongPress = false;\n if (this.mPendingCheckForLongPress == null) {\n this.mPendingCheckForLongPress = new CheckForLongPress(this);\n }\n this.mPendingCheckForLongPress.rememberWindowAttachCount();\n this.postDelayed(this.mPendingCheckForLongPress, view_1.ViewConfiguration.getLongPressTimeout() - delayOffset);\n }\n }\n setOnTouchListener(l) {\n if (typeof l == \"function\") {\n l = View.OnTouchListener.fromFunction(l);\n }\n this.getListenerInfo().mOnTouchListener = l;\n }\n isClickable() {\n return (this.mViewFlags & View.CLICKABLE) == View.CLICKABLE;\n }\n setClickable(clickable) {\n this.setFlags(clickable ? View.CLICKABLE : 0, View.CLICKABLE);\n }\n isLongClickable() {\n return (this.mViewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE;\n }\n setLongClickable(longClickable) {\n this.setFlags(longClickable ? View.LONG_CLICKABLE : 0, View.LONG_CLICKABLE);\n }\n setPressed(pressed) {\n const needsRefresh = pressed != ((this.mPrivateFlags & View.PFLAG_PRESSED) == View.PFLAG_PRESSED);\n if (pressed) {\n this.mPrivateFlags |= View.PFLAG_PRESSED;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_PRESSED;\n }\n if (needsRefresh) {\n this.refreshDrawableState();\n }\n this.dispatchSetPressed(pressed);\n }\n dispatchSetPressed(pressed) {\n }\n isPressed() {\n return (this.mPrivateFlags & View.PFLAG_PRESSED) == View.PFLAG_PRESSED;\n }\n setSelected(selected) {\n if (((this.mPrivateFlags & View.PFLAG_SELECTED) != 0) != selected) {\n this.mPrivateFlags = (this.mPrivateFlags & ~View.PFLAG_SELECTED) | (selected ? View.PFLAG_SELECTED : 0);\n if (!selected)\n this.resetPressedState();\n this.invalidate(true);\n this.refreshDrawableState();\n this.dispatchSetSelected(selected);\n }\n }\n dispatchSetSelected(selected) {\n }\n isSelected() {\n return (this.mPrivateFlags & View.PFLAG_SELECTED) != 0;\n }\n setActivated(activated) {\n if (((this.mPrivateFlags & View.PFLAG_ACTIVATED) != 0) != activated) {\n this.mPrivateFlags = (this.mPrivateFlags & ~View.PFLAG_ACTIVATED) | (activated ? View.PFLAG_ACTIVATED : 0);\n this.invalidate(true);\n this.refreshDrawableState();\n this.dispatchSetActivated(activated);\n }\n }\n dispatchSetActivated(activated) {\n }\n isActivated() {\n return (this.mPrivateFlags & View.PFLAG_ACTIVATED) != 0;\n }\n getViewTreeObserver() {\n if (this.mAttachInfo != null) {\n return this.mAttachInfo.mViewRootImpl.mTreeObserver;\n }\n if (this.mFloatingTreeObserver == null) {\n this.mFloatingTreeObserver = new view_1.ViewTreeObserver();\n }\n return this.mFloatingTreeObserver;\n }\n setLayoutDirection(layoutDirection) {\n }\n getLayoutDirection() {\n return View.LAYOUT_DIRECTION_LTR;\n }\n isLayoutRtl() {\n return (this.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);\n }\n getTextDirection() {\n return View.TEXT_DIRECTION_LTR;\n }\n setTextDirection(textDirection) {\n }\n getTextAlignment() {\n return View.TEXT_ALIGNMENT_DEFAULT;\n }\n setTextAlignment(textAlignment) {\n }\n getBaseline() {\n return -1;\n }\n isLayoutRequested() {\n return (this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT;\n }\n getLayoutParams() {\n return this.mLayoutParams;\n }\n setLayoutParams(params) {\n if (params == null) {\n throw new Error(\"Layout parameters cannot be null\");\n }\n this.mLayoutParams = params;\n let p = this.mParent;\n if (p instanceof view_1.ViewGroup) {\n p.onSetLayoutParams(this, params);\n }\n this.requestLayout();\n }\n isInLayout() {\n let viewRoot = this.getViewRootImpl();\n return (viewRoot != null && viewRoot.isInLayout());\n }\n requestLayout() {\n if (this.mMeasureCache != null)\n this.mMeasureCache.clear();\n if (this.mAttachInfo != null && this.mAttachInfo.mViewRequestingLayout == null) {\n let viewRoot = this.getViewRootImpl();\n if (viewRoot != null && viewRoot.isInLayout()) {\n if (!viewRoot.requestLayoutDuringLayout(this)) {\n return;\n }\n }\n this.mAttachInfo.mViewRequestingLayout = this;\n }\n this.mPrivateFlags |= View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n if (this.mParent != null && !this.mParent.isLayoutRequested()) {\n this.mParent.requestLayout();\n }\n if (this.mAttachInfo != null && this.mAttachInfo.mViewRequestingLayout == this) {\n this.mAttachInfo.mViewRequestingLayout = null;\n }\n }\n forceLayout() {\n if (this.mMeasureCache != null)\n this.mMeasureCache.clear();\n this.mPrivateFlags |= View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n }\n isLaidOut() {\n return (this.mPrivateFlags3 & View.PFLAG3_IS_LAID_OUT) == View.PFLAG3_IS_LAID_OUT;\n }\n layout(l, t, r, b) {\n if ((this.mPrivateFlags3 & View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) {\n this.onMeasure(this.mOldWidthMeasureSpec, this.mOldHeightMeasureSpec);\n this.mPrivateFlags3 &= ~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n let oldL = this.mLeft;\n let oldT = this.mTop;\n let oldB = this.mBottom;\n let oldR = this.mRight;\n let changed = this.setFrame(l, t, r, b);\n if (changed || (this.mPrivateFlags & View.PFLAG_LAYOUT_REQUIRED) == View.PFLAG_LAYOUT_REQUIRED) {\n this.onLayout(changed, l, t, r, b);\n this.mPrivateFlags &= ~View.PFLAG_LAYOUT_REQUIRED;\n let li = this.mListenerInfo;\n if (li != null && li.mOnLayoutChangeListeners != null) {\n let listenersCopy = li.mOnLayoutChangeListeners.clone();\n let numListeners = listenersCopy.size();\n for (let i = 0; i < numListeners; ++i) {\n listenersCopy.get(i).onLayoutChange(this, l, t, r, b, oldL, oldT, oldR, oldB);\n }\n }\n }\n this.mPrivateFlags &= ~View.PFLAG_FORCE_LAYOUT;\n this.mPrivateFlags3 |= View.PFLAG3_IS_LAID_OUT;\n }\n onLayout(changed, left, top, right, bottom) {\n }\n setFrame(left, top, right, bottom) {\n let changed = false;\n if (View.DBG) {\n Log.i(\"View\", this + \" View.setFrame(\" + left + \",\" + top + \",\"\n + right + \",\" + bottom + \")\");\n }\n if (this.mLeft != left || this.mRight != right || this.mTop != top || this.mBottom != bottom) {\n changed = true;\n let drawn = this.mPrivateFlags & View.PFLAG_DRAWN;\n let oldWidth = this.mRight - this.mLeft;\n let oldHeight = this.mBottom - this.mTop;\n let newWidth = right - left;\n let newHeight = bottom - top;\n let sizeChanged = (newWidth != oldWidth) || (newHeight != oldHeight);\n this.invalidate(sizeChanged);\n this.mLeft = left;\n this.mTop = top;\n this.mRight = right;\n this.mBottom = bottom;\n this.mPrivateFlags |= View.PFLAG_HAS_BOUNDS;\n if (sizeChanged) {\n if ((this.mPrivateFlags & View.PFLAG_PIVOT_EXPLICITLY_SET) == 0) {\n if (this.mTransformationInfo != null) {\n this.mTransformationInfo.mMatrixDirty = true;\n }\n }\n this.sizeChange(newWidth, newHeight, oldWidth, oldHeight);\n }\n if ((this.mViewFlags & View.VISIBILITY_MASK) == View.VISIBLE) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n this.invalidate(sizeChanged);\n }\n this.mPrivateFlags |= drawn;\n this.mBackgroundSizeChanged = true;\n }\n return changed;\n }\n sizeChange(newWidth, newHeight, oldWidth, oldHeight) {\n this.onSizeChanged(newWidth, newHeight, oldWidth, oldHeight);\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().setRight(newWidth);\n this.mOverlay.getOverlayView().setBottom(newHeight);\n }\n }\n getHitRect(outRect) {\n this.updateMatrix();\n const info = this.mTransformationInfo;\n if (info == null || info.mMatrixIsIdentity || this.mAttachInfo == null) {\n outRect.set(this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n else {\n const tmpRect = this.mAttachInfo.mTmpTransformRect;\n tmpRect.set(0, 0, this.getWidth(), this.getHeight());\n info.mMatrix.mapRect(tmpRect);\n outRect.set(Math.floor(tmpRect.left) + this.mLeft, Math.floor(tmpRect.top) + this.mTop, Math.floor(tmpRect.right) + this.mLeft, Math.floor(tmpRect.bottom) + this.mTop);\n }\n }\n getFocusedRect(r) {\n this.getDrawingRect(r);\n }\n getDrawingRect(outRect) {\n outRect.left = this.mScrollX;\n outRect.top = this.mScrollY;\n outRect.right = this.mScrollX + (this.mRight - this.mLeft);\n outRect.bottom = this.mScrollY + (this.mBottom - this.mTop);\n }\n getGlobalVisibleRect(r, globalOffset = null) {\n let width = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n if (width > 0 && height > 0) {\n r.set(0, 0, width, height);\n if (globalOffset != null) {\n globalOffset.set(-this.mScrollX, -this.mScrollY);\n }\n return this.mParent == null || this.mParent.getChildVisibleRect(this, r, globalOffset);\n }\n return false;\n }\n getLocationOnScreen(location) {\n this.getLocationInWindow(location);\n const info = this.mAttachInfo;\n }\n getLocationInWindow(location) {\n if (location == null || location.length < 2) {\n throw Error(`new IllegalArgumentException(\"location must be an array of two integers\")`);\n }\n if (this.mAttachInfo == null) {\n location[0] = location[1] = 0;\n return;\n }\n let position = this.mAttachInfo.mTmpTransformLocation;\n position[0] = position[1] = 0.0;\n if (!this.hasIdentityMatrix()) {\n this.getMatrix().mapPoints(position);\n }\n position[0] += this.mLeft;\n position[1] += this.mTop;\n let viewParent = this.mParent;\n while (viewParent instanceof View) {\n const view = viewParent;\n position[0] -= view.mScrollX;\n position[1] -= view.mScrollY;\n if (!view.hasIdentityMatrix()) {\n view.getMatrix().mapPoints(position);\n }\n position[0] += view.mLeft;\n position[1] += view.mTop;\n viewParent = view.mParent;\n }\n location[0] = Math.floor((position[0] + 0.5));\n location[1] = Math.floor((position[1] + 0.5));\n }\n getWindowVisibleDisplayFrame(outRect) {\n if (this.mAttachInfo != null) {\n let rootView = this.mAttachInfo.mRootView;\n let xy = [0, 0];\n rootView.getLocationOnScreen(xy);\n outRect.set(xy[0], xy[1], rootView.getWidth() + xy[0], rootView.getHeight() + xy[1]);\n return;\n }\n let dm = Resources.getSystem().getDisplayMetrics();\n outRect.set(0, 0, dm.widthPixels, dm.heightPixels);\n }\n isVisibleToUser(boundInView = null) {\n if (this.mAttachInfo != null) {\n if (this.mAttachInfo.mWindowVisibility != View.VISIBLE) {\n return false;\n }\n let current = this;\n while (current instanceof View) {\n let view = current;\n if (view.getAlpha() <= 0 || view.getTransitionAlpha() <= 0 || view.getVisibility() != View.VISIBLE) {\n return false;\n }\n current = view.mParent;\n }\n let visibleRect = this.mAttachInfo.mTmpInvalRect;\n let offset = this.mAttachInfo.mPoint;\n if (!this.getGlobalVisibleRect(visibleRect, offset)) {\n return false;\n }\n if (boundInView != null) {\n visibleRect.offset(-offset.x, -offset.y);\n return boundInView.intersect(visibleRect);\n }\n return true;\n }\n return false;\n }\n getMeasuredWidth() {\n return this.mMeasuredWidth & View.MEASURED_SIZE_MASK;\n }\n getMeasuredWidthAndState() {\n return this.mMeasuredWidth;\n }\n getMeasuredHeight() {\n return this.mMeasuredHeight & View.MEASURED_SIZE_MASK;\n }\n getMeasuredHeightAndState() {\n return this.mMeasuredHeight;\n }\n getMeasuredState() {\n return (this.mMeasuredWidth & View.MEASURED_STATE_MASK)\n | ((this.mMeasuredHeight >> View.MEASURED_HEIGHT_STATE_SHIFT)\n & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n }\n measure(widthMeasureSpec, heightMeasureSpec) {\n let key = widthMeasureSpec + ',' + heightMeasureSpec;\n if (this.mMeasureCache == null)\n this.mMeasureCache = new Map();\n if ((this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT ||\n widthMeasureSpec != this.mOldWidthMeasureSpec ||\n heightMeasureSpec != this.mOldHeightMeasureSpec) {\n this.mPrivateFlags &= ~View.PFLAG_MEASURED_DIMENSION_SET;\n let cacheValue = (this.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT ? null : this.mMeasureCache.get(key);\n if (cacheValue == null) {\n this.onMeasure(widthMeasureSpec, heightMeasureSpec);\n this.mPrivateFlags3 &= ~View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n else {\n this.setMeasuredDimension(cacheValue[0], cacheValue[1]);\n this.mPrivateFlags3 |= View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;\n }\n if ((this.mPrivateFlags & View.PFLAG_MEASURED_DIMENSION_SET) != View.PFLAG_MEASURED_DIMENSION_SET) {\n throw new Error(\"onMeasure() did not set the\"\n + \" measured dimension by calling\"\n + \" setMeasuredDimension()\");\n }\n this.mPrivateFlags |= View.PFLAG_LAYOUT_REQUIRED;\n }\n this.mOldWidthMeasureSpec = widthMeasureSpec;\n this.mOldHeightMeasureSpec = heightMeasureSpec;\n this.mMeasureCache.set(key, [this.mMeasuredWidth, this.mMeasuredHeight]);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.setMeasuredDimension(View.getDefaultSize(this.getSuggestedMinimumWidth(), widthMeasureSpec), View.getDefaultSize(this.getSuggestedMinimumHeight(), heightMeasureSpec));\n }\n setMeasuredDimension(measuredWidth, measuredHeight) {\n this.mMeasuredWidth = measuredWidth;\n this.mMeasuredHeight = measuredHeight;\n this.mPrivateFlags |= View.PFLAG_MEASURED_DIMENSION_SET;\n }\n static combineMeasuredStates(curState, newState) {\n return curState | newState;\n }\n static resolveSize(size, measureSpec) {\n return View.resolveSizeAndState(size, measureSpec, 0) & View.MEASURED_SIZE_MASK;\n }\n static resolveSizeAndState(size, measureSpec, childMeasuredState) {\n let MeasureSpec = View.MeasureSpec;\n let result = size;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = size;\n break;\n case MeasureSpec.AT_MOST:\n if (specSize < size) {\n result = specSize | View.MEASURED_STATE_TOO_SMALL;\n }\n else {\n result = size;\n }\n break;\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result | (childMeasuredState & View.MEASURED_STATE_MASK);\n }\n static getDefaultSize(size, measureSpec) {\n let MeasureSpec = View.MeasureSpec;\n let result = size;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = size;\n break;\n case MeasureSpec.AT_MOST:\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n getSuggestedMinimumHeight() {\n return (this.mBackground == null) ? this.mMinHeight :\n Math.max(this.mMinHeight, this.mBackground.getMinimumHeight());\n }\n getSuggestedMinimumWidth() {\n return (this.mBackground == null) ? this.mMinWidth :\n Math.max(this.mMinWidth, this.mBackground.getMinimumWidth());\n }\n getMinimumHeight() {\n return this.mMinHeight;\n }\n setMinimumHeight(minHeight) {\n this.mMinHeight = minHeight;\n this.requestLayout();\n }\n getMinimumWidth() {\n return this.mMinWidth;\n }\n setMinimumWidth(minWidth) {\n this.mMinWidth = minWidth;\n this.requestLayout();\n }\n getAnimation() {\n return this.mCurrentAnimation;\n }\n startAnimation(animation) {\n animation.setStartTime(Animation.START_ON_FIRST_FRAME);\n this.setAnimation(animation);\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n clearAnimation() {\n if (this.mCurrentAnimation != null) {\n this.mCurrentAnimation.detach();\n }\n this.mCurrentAnimation = null;\n this.invalidateParentIfNeeded();\n }\n setAnimation(animation) {\n this.mCurrentAnimation = animation;\n if (animation != null) {\n animation.reset();\n }\n }\n onAnimationStart() {\n this.mPrivateFlags |= View.PFLAG_ANIMATION_STARTED;\n }\n onAnimationEnd() {\n this.mPrivateFlags &= ~View.PFLAG_ANIMATION_STARTED;\n }\n onSetAlpha(alpha) {\n return false;\n }\n _invalidateRect(l, t, r, b) {\n if (this.skipInvalidate()) {\n return;\n }\n if ((this.mPrivateFlags & (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS)) == (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS) ||\n (this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == View.PFLAG_DRAWING_CACHE_VALID ||\n (this.mPrivateFlags & View.PFLAG_INVALIDATED) != View.PFLAG_INVALIDATED) {\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n this.mPrivateFlags |= View.PFLAG_DIRTY;\n const p = this.mParent;\n const ai = this.mAttachInfo;\n if (p != null && ai != null && l < r && t < b) {\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const tmpr = ai.mTmpInvalRect;\n tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);\n p.invalidateChild(this, tmpr);\n }\n }\n }\n _invalidateCache(invalidateCache = true) {\n if (this.skipInvalidate()) {\n return;\n }\n if ((this.mPrivateFlags & (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS)) == (View.PFLAG_DRAWN | View.PFLAG_HAS_BOUNDS) ||\n (invalidateCache && (this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == View.PFLAG_DRAWING_CACHE_VALID) ||\n (this.mPrivateFlags & View.PFLAG_INVALIDATED) != View.PFLAG_INVALIDATED || this.isOpaque() != this.mLastIsOpaque) {\n this.mLastIsOpaque = this.isOpaque();\n this.mPrivateFlags &= ~View.PFLAG_DRAWN;\n this.mPrivateFlags |= View.PFLAG_DIRTY;\n if (invalidateCache) {\n this.mPrivateFlags |= View.PFLAG_INVALIDATED;\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n }\n const ai = this.mAttachInfo;\n const p = this.mParent;\n if (p != null && ai != null) {\n const r = ai.mTmpInvalRect;\n r.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n p.invalidateChild(this, r);\n }\n }\n }\n invalidate(...args) {\n if (args.length === 0) {\n this._invalidateCache(true);\n }\n else if (args.length === 1 && args[0] instanceof Rect) {\n let rect = args[0];\n this._invalidateRect(rect.left, rect.top, rect.right, rect.bottom);\n }\n else if (args.length === 1) {\n this._invalidateCache(args[0]);\n }\n else if (args.length === 4) {\n this._invalidateRect(...args);\n }\n }\n invalidateViewProperty(invalidateParent, forceRedraw) {\n if ((this.mPrivateFlags & View.PFLAG_DRAW_ANIMATION) == View.PFLAG_DRAW_ANIMATION) {\n if (invalidateParent) {\n this.invalidateParentCaches();\n }\n if (forceRedraw) {\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n }\n this.invalidate(false);\n }\n else {\n const ai = this.mAttachInfo;\n const p = this.mParent;\n if (p != null && ai != null) {\n const r = ai.mTmpInvalRect;\n r.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n if (this.mParent instanceof view_1.ViewGroup) {\n this.mParent.invalidateChildFast(this, r);\n }\n else {\n this.mParent.invalidateChild(this, r);\n }\n }\n }\n }\n invalidateParentCaches() {\n if (this.mParent instanceof View) {\n this.mParent.mPrivateFlags |= View.PFLAG_INVALIDATED;\n }\n }\n invalidateParentIfNeeded() {\n }\n postInvalidate(l, t, r, b) {\n this.postInvalidateDelayed(0, l, t, r, b);\n }\n postInvalidateDelayed(delayMilliseconds, left, top, right, bottom) {\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (!Number.isInteger(left) || !Number.isInteger(top) || !Number.isInteger(right) || !Number.isInteger(bottom)) {\n attachInfo.mViewRootImpl.dispatchInvalidateDelayed(this, delayMilliseconds);\n }\n else {\n const info = View.AttachInfo.InvalidateInfo.obtain();\n info.target = this;\n info.left = left;\n info.top = top;\n info.right = right;\n info.bottom = bottom;\n attachInfo.mViewRootImpl.dispatchInvalidateRectDelayed(info, delayMilliseconds);\n }\n }\n }\n postInvalidateOnAnimation(left, top, right, bottom) {\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (!Number.isInteger(left) || !Number.isInteger(top) || !Number.isInteger(right) || !Number.isInteger(bottom)) {\n attachInfo.mViewRootImpl.dispatchInvalidateOnAnimation(this);\n }\n else {\n const info = View.AttachInfo.InvalidateInfo.obtain();\n info.target = this;\n info.left = left;\n info.top = top;\n info.right = right;\n info.bottom = bottom;\n attachInfo.mViewRootImpl.dispatchInvalidateRectOnAnimation(info);\n }\n }\n }\n skipInvalidate() {\n return (this.mViewFlags & View.VISIBILITY_MASK) != View.VISIBLE\n && this.mCurrentAnimation == null;\n }\n isOpaque() {\n return (this.mPrivateFlags & View.PFLAG_OPAQUE_MASK) == View.PFLAG_OPAQUE_MASK &&\n this.getFinalAlpha() >= 1;\n }\n computeOpaqueFlags() {\n if (this.mBackground != null && this.mBackground.getOpacity() == PixelFormat.OPAQUE) {\n this.mPrivateFlags |= View.PFLAG_OPAQUE_BACKGROUND;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_OPAQUE_BACKGROUND;\n }\n const flags = this.mViewFlags;\n if (((flags & View.SCROLLBARS_VERTICAL) == 0 && (flags & View.SCROLLBARS_HORIZONTAL) == 0)) {\n this.mPrivateFlags |= View.PFLAG_OPAQUE_SCROLLBARS;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_OPAQUE_SCROLLBARS;\n }\n }\n setLayerType(layerType) {\n if (layerType < View.LAYER_TYPE_NONE || layerType > View.LAYER_TYPE_SOFTWARE) {\n throw Error(`new IllegalArgumentException(\"Layer type can only be one of: LAYER_TYPE_NONE, \" + \"LAYER_TYPE_SOFTWARE\")`);\n }\n if (layerType == this.mLayerType) {\n return;\n }\n switch (this.mLayerType) {\n case View.LAYER_TYPE_SOFTWARE:\n this.destroyDrawingCache();\n break;\n default:\n break;\n }\n this.mLayerType = layerType;\n const layerDisabled = this.mLayerType == View.LAYER_TYPE_NONE;\n this.mLocalDirtyRect = layerDisabled ? null : new Rect();\n this.invalidateParentCaches();\n this.invalidate(true);\n }\n getLayerType() {\n return this.mLayerType;\n }\n setClipBounds(clipBounds) {\n if (clipBounds != null) {\n if (clipBounds.equals(this.mClipBounds)) {\n return;\n }\n if (this.mClipBounds == null) {\n this.invalidate();\n this.mClipBounds = new Rect(clipBounds);\n }\n else {\n this.invalidate(Math.min(this.mClipBounds.left, clipBounds.left), Math.min(this.mClipBounds.top, clipBounds.top), Math.max(this.mClipBounds.right, clipBounds.right), Math.max(this.mClipBounds.bottom, clipBounds.bottom));\n this.mClipBounds.set(clipBounds);\n }\n }\n else {\n if (this.mClipBounds != null) {\n this.invalidate();\n this.mClipBounds = null;\n }\n }\n }\n getClipBounds() {\n return (this.mClipBounds != null) ? new Rect(this.mClipBounds) : null;\n }\n setCornerRadius(radiusTopLeft, radiusTopRight = radiusTopLeft, radiusBottomRight = radiusTopRight, radiusBottomLeft = radiusBottomRight) {\n this.setCornerRadiusTopLeft(radiusTopLeft);\n this.setCornerRadiusTopRight(radiusTopRight);\n this.setCornerRadiusBottomRight(radiusBottomRight);\n this.setCornerRadiusBottomLeft(radiusBottomLeft);\n }\n setCornerRadiusTopLeft(value) {\n if (this.mCornerRadiusTopLeft != value) {\n this.mCornerRadiusTopLeft = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusTopLeft() {\n return this.mCornerRadiusTopLeft;\n }\n setCornerRadiusTopRight(value) {\n if (this.mCornerRadiusTopRight != value) {\n this.mCornerRadiusTopRight = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusTopRight() {\n return this.mCornerRadiusTopRight;\n }\n setCornerRadiusBottomRight(value) {\n if (this.mCornerRadiusBottomRight != value) {\n this.mCornerRadiusBottomRight = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusBottomRight() {\n return this.mCornerRadiusBottomRight;\n }\n setCornerRadiusBottomLeft(value) {\n if (this.mCornerRadiusBottomLeft != value) {\n this.mCornerRadiusBottomLeft = value;\n this.mShadowDrawable = null;\n this.invalidate();\n }\n }\n getCornerRadiusBottomLeft() {\n return this.mCornerRadiusBottomLeft;\n }\n setShadowView(radius, dx, dy, color) {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n this.mShadowPaint.setShadowLayer(radius, dx, dy, color);\n this.invalidate();\n }\n getDrawingTime() {\n return this.getViewRootImpl() != null ? this.getViewRootImpl().mDrawingTime : 0;\n }\n drawFromParent(canvas, parent, drawingTime) {\n let useDisplayListProperties = false;\n let more = false;\n let childHasIdentityMatrix = this.hasIdentityMatrix();\n let flags = parent.mGroupFlags;\n if ((flags & view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION) == view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION) {\n parent.getChildTransformation().clear();\n parent.mGroupFlags &= ~view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n let transformToApply = null;\n let concatMatrix = false;\n let scalingRequired = false;\n let caching = false;\n let layerType = this.getLayerType();\n const hardwareAccelerated = false;\n const nativeAccelerated = canvas.isNativeAccelerated();\n if ((flags & view_1.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) != 0 ||\n (flags & view_1.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) != 0) {\n caching = true;\n }\n else {\n caching = (layerType != View.LAYER_TYPE_NONE) || hardwareAccelerated || nativeAccelerated;\n }\n const a = this.getAnimation();\n if (a != null) {\n more = this.drawAnimation(parent, drawingTime, a, scalingRequired);\n concatMatrix = a.willChangeTransformationMatrix();\n if (concatMatrix) {\n this.mPrivateFlags3 |= View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM;\n }\n transformToApply = parent.getChildTransformation();\n }\n else {\n if (!useDisplayListProperties && (flags & view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n const t = parent.getChildTransformation();\n const hasTransform = parent.getChildStaticTransformation(this, t);\n if (hasTransform) {\n const transformType = t.getTransformationType();\n transformToApply = transformType != Transformation.TYPE_IDENTITY ? t : null;\n concatMatrix = (transformType & Transformation.TYPE_MATRIX) != 0;\n }\n }\n }\n concatMatrix = !childHasIdentityMatrix || concatMatrix;\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (!concatMatrix &&\n (flags & (view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS |\n view_1.ViewGroup.FLAG_CLIP_CHILDREN)) == view_1.ViewGroup.FLAG_CLIP_CHILDREN &&\n canvas.quickReject(this.mLeft, this.mTop, this.mRight, this.mBottom) &&\n (this.mPrivateFlags & View.PFLAG_DRAW_ANIMATION) == 0) {\n this.mPrivateFlags2 |= View.PFLAG2_VIEW_QUICK_REJECTED;\n return more;\n }\n this.mPrivateFlags2 &= ~View.PFLAG2_VIEW_QUICK_REJECTED;\n let cache = null;\n if (caching) {\n if (layerType != View.LAYER_TYPE_NONE) {\n layerType = View.LAYER_TYPE_SOFTWARE;\n this.buildDrawingCache(true);\n }\n cache = this.getDrawingCache(true);\n }\n this.computeScroll();\n let sx = this.mScrollX;\n let sy = this.mScrollY;\n this.requestSyncBoundToElement();\n let hasNoCache = cache == null;\n let offsetForScroll = cache == null;\n let restoreTo = canvas.save();\n if (offsetForScroll) {\n canvas.translate(this.mLeft - sx, this.mTop - sy);\n }\n else {\n canvas.translate(this.mLeft, this.mTop);\n }\n let alpha = this.getAlpha() * this.getTransitionAlpha();\n if (transformToApply != null || alpha < 1 || !this.hasIdentityMatrix() || (this.mPrivateFlags3 & View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) == View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) {\n if (transformToApply != null || !childHasIdentityMatrix) {\n let transX = 0;\n let transY = 0;\n if (offsetForScroll) {\n transX = -sx;\n transY = -sy;\n }\n if (transformToApply != null) {\n if (concatMatrix) {\n canvas.translate(-transX, -transY);\n canvas.concat(transformToApply.getMatrix());\n canvas.translate(transX, transY);\n parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n let transformAlpha = transformToApply.getAlpha();\n if (transformAlpha < 1) {\n alpha *= transformAlpha;\n parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n }\n }\n if (!childHasIdentityMatrix && !useDisplayListProperties) {\n canvas.translate(-transX, -transY);\n canvas.concat(this.getMatrix());\n canvas.translate(transX, transY);\n }\n }\n if (alpha < 1 || (this.mPrivateFlags3 & View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) == View.PFLAG3_VIEW_IS_ANIMATING_ALPHA) {\n if (alpha < 1) {\n this.mPrivateFlags3 |= View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;\n }\n else {\n this.mPrivateFlags3 &= ~View.PFLAG3_VIEW_IS_ANIMATING_ALPHA;\n }\n parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION;\n if (hasNoCache) {\n const multipliedAlpha = Math.floor((255 * alpha));\n if (!this.onSetAlpha(multipliedAlpha)) {\n canvas.multiplyGlobalAlpha(alpha);\n }\n else {\n this.mPrivateFlags |= View.PFLAG_ALPHA_SET;\n }\n }\n }\n }\n else if ((this.mPrivateFlags & View.PFLAG_ALPHA_SET) == View.PFLAG_ALPHA_SET) {\n this.onSetAlpha(255);\n this.mPrivateFlags &= ~View.PFLAG_ALPHA_SET;\n }\n if (this.mShadowPaint != null)\n this.drawShadow(canvas);\n if ((flags & view_1.ViewGroup.FLAG_CLIP_CHILDREN) == view_1.ViewGroup.FLAG_CLIP_CHILDREN &&\n !useDisplayListProperties && cache == null) {\n if (offsetForScroll) {\n canvas.clipRect(sx, sy, sx + (this.mRight - this.mLeft), sy + (this.mBottom - this.mTop), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n else {\n if (!scalingRequired || cache == null) {\n canvas.clipRect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop, this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n else {\n canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight(), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n }\n }\n }\n if (hasNoCache) {\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) == View.PFLAG_SKIP_DRAW) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n this.dispatchDraw(canvas);\n }\n else {\n this.draw(canvas);\n }\n }\n else if (cache != null) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n canvas.multiplyGlobalAlpha(alpha);\n if (layerType == View.LAYER_TYPE_NONE) {\n if (alpha < 1) {\n parent.mGroupFlags |= view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;\n }\n else if ((flags & view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE) != 0) {\n parent.mGroupFlags &= ~view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE;\n }\n }\n canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight(), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft);\n canvas.drawCanvas(cache, 0, 0);\n }\n if (restoreTo >= 0) {\n canvas.restoreToCount(restoreTo);\n }\n if (a != null && !more) {\n if (!hardwareAccelerated && !a.getFillAfter()) {\n this.onSetAlpha(255);\n }\n parent.finishAnimatingView(this, a);\n }\n return more;\n }\n drawShadow(canvas) {\n let shadowPaint = this.mShadowPaint;\n if (!shadowPaint || !shadowPaint.shadowRadius)\n return;\n let color = shadowPaint.shadowColor;\n if (!this.mShadowDrawable) {\n let drawable = new RoundRectDrawable(shadowPaint.shadowColor, this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomLeft, this.mCornerRadiusBottomRight);\n this.mShadowDrawable = new ShadowDrawable(drawable, shadowPaint.shadowRadius, shadowPaint.shadowDx, shadowPaint.shadowDy, shadowPaint.shadowColor);\n }\n this.mShadowDrawable.draw(canvas);\n }\n draw(canvas) {\n if (this.mClipBounds != null) {\n canvas.clipRect(this.mClipBounds);\n }\n let privateFlags = this.mPrivateFlags;\n const dirtyOpaque = (privateFlags & View.PFLAG_DIRTY_MASK) == View.PFLAG_DIRTY_OPAQUE &&\n (this.getViewRootImpl() == null || !this.getViewRootImpl().mIgnoreDirtyState);\n this.mPrivateFlags = (privateFlags & ~View.PFLAG_DIRTY_MASK) | View.PFLAG_DRAWN;\n if (!dirtyOpaque) {\n let background = this.mBackground;\n if (background != null) {\n let scrollX = this.mScrollX;\n let scrollY = this.mScrollY;\n if (this.mBackgroundSizeChanged) {\n background.setBounds(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n this.mBackgroundSizeChanged = false;\n }\n if ((scrollX | scrollY) == 0) {\n background.draw(canvas);\n }\n else {\n canvas.translate(scrollX, scrollY);\n background.draw(canvas);\n canvas.translate(-scrollX, -scrollY);\n }\n }\n }\n if (!dirtyOpaque)\n this.onDraw(canvas);\n this.dispatchDraw(canvas);\n this.onDrawScrollBars(canvas);\n if (this.mOverlay != null && !this.mOverlay.isEmpty()) {\n this.mOverlay.getOverlayView().dispatchDraw(canvas);\n }\n }\n onDraw(canvas) {\n }\n dispatchDraw(canvas) {\n }\n drawAnimation(parent, drawingTime, a, scalingRequired) {\n let invalidationTransform;\n const flags = parent.mGroupFlags;\n const initialized = a.isInitialized();\n if (!initialized) {\n a.initialize(this.mRight - this.mLeft, this.mBottom - this.mTop, parent.getWidth(), parent.getHeight());\n a.initializeInvalidateRegion(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n if (this.mAttachInfo != null)\n a.setListenerHandler(this.mAttachInfo.mHandler);\n this.onAnimationStart();\n }\n const t = parent.getChildTransformation();\n let more = a.getTransformation(drawingTime, t, 1);\n invalidationTransform = t;\n if (more) {\n if (!a.willChangeBounds()) {\n if ((flags & (view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE | view_1.ViewGroup.FLAG_ANIMATION_DONE)) == view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE) {\n parent.mGroupFlags |= view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n else if ((flags & view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED) == 0) {\n parent.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION;\n parent.invalidate(this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n }\n else {\n if (parent.mInvalidateRegion == null) {\n parent.mInvalidateRegion = new RectF();\n }\n const region = parent.mInvalidateRegion;\n a.getInvalidateRegion(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop, region, invalidationTransform);\n parent.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION;\n const left = this.mLeft + Math.floor(region.left);\n const top = this.mTop + Math.floor(region.top);\n parent.invalidate(left, top, left + Math.floor((region.width() + .5)), top + Math.floor((region.height() + .5)));\n }\n }\n return more;\n }\n onDrawScrollBars(canvas) {\n const cache = this.mScrollCache;\n if (cache != null) {\n let state = cache.state;\n if (state == ScrollabilityCache.OFF) {\n return;\n }\n let invalidate = false;\n if (state == ScrollabilityCache.FADING) {\n cache._computeAlphaToScrollBar();\n invalidate = true;\n }\n else {\n cache.scrollBar.setAlpha(255);\n }\n const viewFlags = this.mViewFlags;\n const drawHorizontalScrollBar = (viewFlags & View.SCROLLBARS_HORIZONTAL) == View.SCROLLBARS_HORIZONTAL;\n const drawVerticalScrollBar = (viewFlags & View.SCROLLBARS_VERTICAL) == View.SCROLLBARS_VERTICAL\n && !this.isVerticalScrollBarHidden();\n if (drawVerticalScrollBar || drawHorizontalScrollBar) {\n const width = this.mRight - this.mLeft;\n const height = this.mBottom - this.mTop;\n const scrollBar = cache.scrollBar;\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const inside = true;\n let left;\n let top;\n let right;\n let bottom;\n if (drawHorizontalScrollBar) {\n let size = scrollBar.getSize(false);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n scrollBar.setParameters(this.computeHorizontalScrollRange(), this.computeHorizontalScrollOffset(), this.computeHorizontalScrollExtent(), false);\n const verticalScrollBarGap = drawVerticalScrollBar ?\n this.getVerticalScrollbarWidth() : 0;\n top = scrollY + height - size;\n left = scrollX + (this.mPaddingLeft);\n right = scrollX + width - -verticalScrollBarGap;\n bottom = top + size;\n this.onDrawHorizontalScrollBar(canvas, scrollBar, left, top, right, bottom);\n if (invalidate) {\n this.invalidate(left, top, right, bottom);\n }\n }\n if (drawVerticalScrollBar) {\n let size = scrollBar.getSize(true);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n scrollBar.setParameters(this.computeVerticalScrollRange(), this.computeVerticalScrollOffset(), this.computeVerticalScrollExtent(), true);\n left = scrollX + width - size;\n top = scrollY + (this.mPaddingTop);\n right = left + size;\n bottom = scrollY + height;\n this.onDrawVerticalScrollBar(canvas, scrollBar, left, top, right, bottom);\n if (invalidate) {\n this.invalidate(left, top, right, bottom);\n }\n }\n }\n }\n }\n isVerticalScrollBarHidden() {\n return false;\n }\n onDrawHorizontalScrollBar(canvas, scrollBar, l, t, r, b) {\n scrollBar.setBounds(l, t, r, b);\n scrollBar.draw(canvas);\n }\n onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b) {\n scrollBar.setBounds(l, t, r, b);\n scrollBar.draw(canvas);\n }\n isHardwareAccelerated() {\n return false;\n }\n setDrawingCacheEnabled(enabled) {\n this.mCachingFailed = false;\n this.setFlags(enabled ? View.DRAWING_CACHE_ENABLED : 0, View.DRAWING_CACHE_ENABLED);\n }\n isDrawingCacheEnabled() {\n return (this.mViewFlags & View.DRAWING_CACHE_ENABLED) == View.DRAWING_CACHE_ENABLED;\n }\n getDrawingCache(autoScale = false) {\n if ((this.mViewFlags & View.WILL_NOT_CACHE_DRAWING) == View.WILL_NOT_CACHE_DRAWING) {\n return null;\n }\n if ((this.mViewFlags & View.DRAWING_CACHE_ENABLED) == View.DRAWING_CACHE_ENABLED) {\n this.buildDrawingCache(autoScale);\n }\n return this.mUnscaledDrawingCache;\n }\n setDrawingCacheBackgroundColor(color) {\n if (color != this.mDrawingCacheBackgroundColor) {\n this.mDrawingCacheBackgroundColor = color;\n this.mPrivateFlags &= ~View.PFLAG_DRAWING_CACHE_VALID;\n }\n }\n getDrawingCacheBackgroundColor() {\n return this.mDrawingCacheBackgroundColor;\n }\n destroyDrawingCache() {\n if (this.mUnscaledDrawingCache != null) {\n this.mUnscaledDrawingCache.recycle();\n this.mUnscaledDrawingCache = null;\n }\n }\n buildDrawingCache(autoScale = false) {\n if ((this.mPrivateFlags & View.PFLAG_DRAWING_CACHE_VALID) == 0 || this.mUnscaledDrawingCache == null) {\n this.mCachingFailed = false;\n let width = this.mRight - this.mLeft;\n let height = this.mBottom - this.mTop;\n const attachInfo = this.mAttachInfo;\n const drawingCacheBackgroundColor = this.mDrawingCacheBackgroundColor;\n const opaque = drawingCacheBackgroundColor != 0 || this.isOpaque();\n const projectedBitmapSize = width * height * 4;\n const drawingCacheSize = view_1.ViewConfiguration.get().getScaledMaximumDrawingCacheSize();\n if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) {\n if (width > 0 && height > 0) {\n Log.w(View.VIEW_LOG_TAG, \"View too large to fit into drawing cache, needs \" + projectedBitmapSize + \" bytes, only \" + drawingCacheSize + \" available\");\n }\n this.destroyDrawingCache();\n this.mCachingFailed = true;\n return;\n }\n if (this.mUnscaledDrawingCache &&\n (this.mUnscaledDrawingCache.getWidth() !== width || this.mUnscaledDrawingCache.getHeight() !== height)) {\n this.mUnscaledDrawingCache.recycle();\n this.mUnscaledDrawingCache = null;\n }\n if (this.mUnscaledDrawingCache) {\n this.mUnscaledDrawingCache.clearColor();\n }\n else {\n this.mUnscaledDrawingCache = new Canvas(width, height);\n }\n const canvas = this.mUnscaledDrawingCache;\n this.computeScroll();\n const restoreCount = canvas.save();\n canvas.translate(-this.mScrollX, -this.mScrollY);\n this.mPrivateFlags |= View.PFLAG_DRAWN;\n if (this.mAttachInfo == null || this.mLayerType != View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= View.PFLAG_DRAWING_CACHE_VALID;\n }\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) == View.PFLAG_SKIP_DRAW) {\n this.mPrivateFlags &= ~View.PFLAG_DIRTY_MASK;\n this.dispatchDraw(canvas);\n if (this.mOverlay != null && !this.mOverlay.isEmpty()) {\n this.mOverlay.getOverlayView().draw(canvas);\n }\n }\n else {\n this.draw(canvas);\n }\n canvas.restoreToCount(restoreCount);\n }\n }\n setWillNotDraw(willNotDraw) {\n this.setFlags(willNotDraw ? View.WILL_NOT_DRAW : 0, View.DRAW_MASK);\n }\n willNotDraw() {\n return (this.mViewFlags & View.DRAW_MASK) == View.WILL_NOT_DRAW;\n }\n setWillNotCacheDrawing(willNotCacheDrawing) {\n this.setFlags(willNotCacheDrawing ? View.WILL_NOT_CACHE_DRAWING : 0, View.WILL_NOT_CACHE_DRAWING);\n }\n willNotCacheDrawing() {\n return (this.mViewFlags & View.WILL_NOT_CACHE_DRAWING) == View.WILL_NOT_CACHE_DRAWING;\n }\n drawableSizeChange(who) {\n if (who === this.mBackground) {\n let w = who.getIntrinsicWidth();\n if (w < 0)\n w = this.mBackgroundWidth;\n let h = who.getIntrinsicHeight();\n if (h < 0)\n h = this.mBackgroundHeight;\n if (w != this.mBackgroundWidth || h != this.mBackgroundHeight) {\n let padding = new Rect();\n if (who.getPadding(padding)) {\n this.setPadding(padding.left, padding.top, padding.right, padding.bottom);\n }\n this.mBackgroundWidth = w;\n this.mBackgroundHeight = h;\n this.requestLayout();\n }\n }\n else if (this.verifyDrawable(who)) {\n this.requestLayout();\n }\n }\n invalidateDrawable(drawable) {\n if (this.verifyDrawable(drawable)) {\n const dirty = drawable.getBounds();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n }\n scheduleDrawable(who, what, when) {\n if (this.verifyDrawable(who) && what != null) {\n const delay = when - SystemClock.uptimeMillis();\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.postAtTime(what, who, when);\n }\n else {\n view_1.ViewRootImpl.getRunQueue().postDelayed(what, delay);\n }\n }\n }\n unscheduleDrawable(who, what) {\n if (this.verifyDrawable(who) && what != null) {\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.removeCallbacks(what, who);\n }\n else {\n view_1.ViewRootImpl.getRunQueue().removeCallbacks(what);\n }\n }\n else if (what === null) {\n if (this.mAttachInfo != null && who != null) {\n this.mAttachInfo.mHandler.removeCallbacksAndMessages(who);\n }\n }\n }\n verifyDrawable(who) {\n return who == this.mBackground;\n }\n drawableStateChanged() {\n this.getDrawableState();\n let d = this.mBackground;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n resolveDrawables() {\n }\n refreshDrawableState() {\n this.mPrivateFlags |= View.PFLAG_DRAWABLE_STATE_DIRTY;\n this.drawableStateChanged();\n let parent = this.mParent;\n if (parent != null) {\n parent.childDrawableStateChanged(this);\n }\n }\n getDrawableState() {\n if ((this.mDrawableState != null) && ((this.mPrivateFlags & View.PFLAG_DRAWABLE_STATE_DIRTY) == 0)) {\n return this.mDrawableState;\n }\n else {\n let oldDrawableState = this.mDrawableState;\n this.mDrawableState = this.onCreateDrawableState(0);\n this.mPrivateFlags &= ~View.PFLAG_DRAWABLE_STATE_DIRTY;\n this._fireStateChangeToAttribute(oldDrawableState, this.mDrawableState);\n return this.mDrawableState;\n }\n }\n onCreateDrawableState(extraSpace) {\n if ((this.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE &&\n this.mParent instanceof View) {\n return this.mParent.onCreateDrawableState(extraSpace);\n }\n let drawableState;\n let privateFlags = this.mPrivateFlags;\n let viewStateIndex = 0;\n if ((privateFlags & View.PFLAG_PRESSED) != 0)\n viewStateIndex |= View.VIEW_STATE_PRESSED;\n if ((this.mViewFlags & View.ENABLED_MASK) == View.ENABLED)\n viewStateIndex |= View.VIEW_STATE_ENABLED;\n if (this.isFocused())\n viewStateIndex |= View.VIEW_STATE_FOCUSED;\n if ((privateFlags & View.PFLAG_SELECTED) != 0)\n viewStateIndex |= View.VIEW_STATE_SELECTED;\n if (this.hasWindowFocus())\n viewStateIndex |= View.VIEW_STATE_WINDOW_FOCUSED;\n if ((privateFlags & View.PFLAG_ACTIVATED) != 0)\n viewStateIndex |= View.VIEW_STATE_ACTIVATED;\n const privateFlags2 = this.mPrivateFlags2;\n drawableState = View.VIEW_STATE_SETS[viewStateIndex];\n if (extraSpace == 0) {\n return drawableState;\n }\n let fullState;\n if (drawableState != null) {\n fullState = androidui.util.ArrayCreator.newNumberArray(drawableState.length + extraSpace);\n System.arraycopy(drawableState, 0, fullState, 0, drawableState.length);\n }\n else {\n fullState = androidui.util.ArrayCreator.newNumberArray(extraSpace);\n }\n return fullState;\n }\n static mergeDrawableStates(baseState, additionalState) {\n const N = baseState.length;\n let i = N - 1;\n while (i >= 0 && !baseState[i]) {\n i--;\n }\n System.arraycopy(additionalState, 0, baseState, i + 1, additionalState.length);\n return baseState;\n }\n jumpDrawablesToCurrentState() {\n if (this.mBackground != null) {\n this.mBackground.jumpToCurrentState();\n }\n }\n setBackgroundColor(color) {\n if (this.mBackground instanceof ColorDrawable) {\n this.mBackground.mutate().setColor(color);\n this.computeOpaqueFlags();\n }\n else {\n this.setBackground(new ColorDrawable(color));\n }\n }\n setBackground(background) {\n this.setBackgroundDrawable(background);\n }\n getBackground() {\n return this.mBackground;\n }\n setBackgroundDrawable(background) {\n this.computeOpaqueFlags();\n if (background == this.mBackground) {\n return;\n }\n let requestLayout = false;\n if (this.mBackground != null) {\n this.mBackground.setCallback(null);\n this.unscheduleDrawable(this.mBackground);\n }\n if (background != null) {\n let padding = new Rect();\n if (background.getPadding(padding)) {\n this.setPadding(padding.left, padding.top, padding.right, padding.bottom);\n }\n if (this.mBackground == null || this.mBackground.getMinimumHeight() != background.getMinimumHeight() ||\n this.mBackground.getMinimumWidth() != background.getMinimumWidth()) {\n requestLayout = true;\n }\n background.setCallback(this);\n if (background.isStateful()) {\n background.setState(this.getDrawableState());\n }\n background.setVisible(this.getVisibility() == View.VISIBLE, false);\n this.mBackground = background;\n this.mBackgroundWidth = background.getIntrinsicWidth();\n this.mBackgroundHeight = background.getIntrinsicHeight();\n if ((this.mPrivateFlags & View.PFLAG_SKIP_DRAW) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_SKIP_DRAW;\n this.mPrivateFlags |= View.PFLAG_ONLY_DRAWS_BACKGROUND;\n requestLayout = true;\n }\n }\n else {\n this.mBackground = null;\n this.mBackgroundWidth = this.mBackgroundHeight = -1;\n if ((this.mPrivateFlags & View.PFLAG_ONLY_DRAWS_BACKGROUND) != 0) {\n this.mPrivateFlags &= ~View.PFLAG_ONLY_DRAWS_BACKGROUND;\n this.mPrivateFlags |= View.PFLAG_SKIP_DRAW;\n }\n requestLayout = true;\n }\n this.computeOpaqueFlags();\n if (requestLayout) {\n this.requestLayout();\n }\n this.mBackgroundSizeChanged = true;\n this.mShadowDrawable = null;\n this.invalidate(true);\n }\n computeHorizontalScrollRange() {\n return this.getWidth();\n }\n computeHorizontalScrollOffset() {\n return this.mScrollX;\n }\n computeHorizontalScrollExtent() {\n return this.getWidth();\n }\n computeVerticalScrollRange() {\n return this.getHeight();\n }\n computeVerticalScrollOffset() {\n return this.mScrollY;\n }\n computeVerticalScrollExtent() {\n return this.getHeight();\n }\n canScrollHorizontally(direction) {\n const offset = this.computeHorizontalScrollOffset();\n const range = this.computeHorizontalScrollRange() - this.computeHorizontalScrollExtent();\n if (range == 0)\n return false;\n if (direction < 0) {\n return offset > 0;\n }\n else {\n return offset < range - 1;\n }\n }\n canScrollVertically(direction) {\n const offset = this.computeVerticalScrollOffset();\n const range = this.computeVerticalScrollRange() - this.computeVerticalScrollExtent();\n if (range == 0)\n return false;\n if (direction < 0) {\n return offset > 0;\n }\n else {\n return offset < range - 1;\n }\n }\n overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent) {\n const overScrollMode = this.mOverScrollMode;\n const canScrollHorizontal = this.computeHorizontalScrollRange() > this.computeHorizontalScrollExtent();\n const canScrollVertical = this.computeVerticalScrollRange() > this.computeVerticalScrollExtent();\n const overScrollHorizontal = overScrollMode == View.OVER_SCROLL_ALWAYS ||\n (overScrollMode == View.OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollHorizontal);\n const overScrollVertical = overScrollMode == View.OVER_SCROLL_ALWAYS ||\n (overScrollMode == View.OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollVertical);\n if (isTouchEvent) {\n if ((deltaX < 0 && scrollX <= 0) || (deltaX > 0 && scrollX >= scrollRangeX)) {\n deltaX /= 2;\n }\n if ((deltaY < 0 && scrollY <= 0) || (deltaY > 0 && scrollY >= scrollRangeY)) {\n deltaY /= 2;\n }\n }\n let newScrollX = scrollX + deltaX;\n if (!overScrollHorizontal) {\n maxOverScrollX = 0;\n }\n let newScrollY = scrollY + deltaY;\n if (!overScrollVertical) {\n maxOverScrollY = 0;\n }\n const left = -maxOverScrollX;\n const right = maxOverScrollX + scrollRangeX;\n const top = -maxOverScrollY;\n const bottom = maxOverScrollY + scrollRangeY;\n let clampedX = false;\n if (newScrollX > right) {\n newScrollX = right;\n clampedX = true;\n }\n else if (newScrollX < left) {\n newScrollX = left;\n clampedX = true;\n }\n let clampedY = false;\n if (newScrollY > bottom) {\n newScrollY = bottom;\n clampedY = true;\n }\n else if (newScrollY < top) {\n newScrollY = top;\n clampedY = true;\n }\n this.onOverScrolled(newScrollX, newScrollY, clampedX, clampedY);\n return clampedX || clampedY;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n }\n getOverScrollMode() {\n return this.mOverScrollMode;\n }\n setOverScrollMode(overScrollMode) {\n if (overScrollMode != View.OVER_SCROLL_ALWAYS &&\n overScrollMode != View.OVER_SCROLL_IF_CONTENT_SCROLLS &&\n overScrollMode != View.OVER_SCROLL_NEVER) {\n throw new Error(\"Invalid overscroll mode \" + overScrollMode);\n }\n this.mOverScrollMode = overScrollMode;\n }\n getVerticalScrollFactor() {\n if (this.mVerticalScrollFactor == 0) {\n this.mVerticalScrollFactor = Resources.getDisplayMetrics().density * 1;\n }\n return this.mVerticalScrollFactor;\n }\n getHorizontalScrollFactor() {\n return this.getVerticalScrollFactor();\n }\n computeScroll() {\n }\n scrollTo(x, y) {\n if (this.mScrollX != x || this.mScrollY != y) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n this.mScrollX = x;\n this.mScrollY = y;\n this.invalidateParentCaches();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n scrollBy(x, y) {\n this.scrollTo(this.mScrollX + x, this.mScrollY + y);\n }\n initialAwakenScrollBars() {\n return this.mScrollCache != null &&\n this.awakenScrollBars(this.mScrollCache.scrollBarDefaultDelayBeforeFade * 4, true);\n }\n awakenScrollBars(startDelay, invalidate = true) {\n const scrollCache = this.mScrollCache;\n if (scrollCache == null)\n return false;\n startDelay = startDelay || scrollCache.scrollBarDefaultDelayBeforeFade;\n if (scrollCache == null || !scrollCache.fadeScrollBars) {\n return false;\n }\n if (scrollCache.scrollBar == null) {\n scrollCache.scrollBar = new ScrollBarDrawable();\n }\n if (this.isHorizontalScrollBarEnabled() || this.isVerticalScrollBarEnabled()) {\n if (invalidate) {\n this.postInvalidateOnAnimation();\n }\n if (scrollCache.state == ScrollabilityCache.OFF) {\n const KEY_REPEAT_FIRST_DELAY = 750;\n startDelay = Math.max(KEY_REPEAT_FIRST_DELAY, startDelay);\n }\n let fadeStartTime = AnimationUtils.currentAnimationTimeMillis() + startDelay;\n scrollCache.fadeStartTime = fadeStartTime;\n scrollCache.state = ScrollabilityCache.ON;\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mHandler.removeCallbacks(scrollCache);\n this.mAttachInfo.mHandler.postAtTime(scrollCache, fadeStartTime);\n }\n return true;\n }\n return false;\n }\n getVerticalFadingEdgeLength() {\n return 0;\n }\n setVerticalFadingEdgeEnabled(enable) {\n }\n setHorizontalFadingEdgeEnabled(enable) {\n }\n setFadingEdgeLength(length) {\n }\n getHorizontalFadingEdgeLength() {\n return 0;\n }\n getVerticalScrollbarWidth() {\n let cache = this.mScrollCache;\n if (cache != null) {\n let scrollBar = cache.scrollBar;\n if (scrollBar != null) {\n let size = scrollBar.getSize(true);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n return size;\n }\n return 0;\n }\n return 0;\n }\n getHorizontalScrollbarHeight() {\n let cache = this.mScrollCache;\n if (cache != null) {\n let scrollBar = cache.scrollBar;\n if (scrollBar != null) {\n let size = scrollBar.getSize(false);\n if (size <= 0) {\n size = cache.scrollBarSize;\n }\n return size;\n }\n return 0;\n }\n return 0;\n }\n initializeScrollbars(a) {\n this.initScrollCache();\n }\n initScrollCache() {\n if (this.mScrollCache == null) {\n this.mScrollCache = new ScrollabilityCache(this);\n }\n }\n getScrollCache() {\n this.initScrollCache();\n return this.mScrollCache;\n }\n isHorizontalScrollBarEnabled() {\n return (this.mViewFlags & View.SCROLLBARS_HORIZONTAL) == View.SCROLLBARS_HORIZONTAL;\n }\n setHorizontalScrollBarEnabled(horizontalScrollBarEnabled) {\n if (this.isHorizontalScrollBarEnabled() != horizontalScrollBarEnabled) {\n this.mViewFlags ^= View.SCROLLBARS_HORIZONTAL;\n this.computeOpaqueFlags();\n }\n }\n isVerticalScrollBarEnabled() {\n return (this.mViewFlags & View.SCROLLBARS_VERTICAL) == View.SCROLLBARS_VERTICAL;\n }\n setVerticalScrollBarEnabled(verticalScrollBarEnabled) {\n if (this.isVerticalScrollBarEnabled() != verticalScrollBarEnabled) {\n this.mViewFlags ^= View.SCROLLBARS_VERTICAL;\n this.computeOpaqueFlags();\n }\n }\n setScrollbarFadingEnabled(fadeScrollbars) {\n this.initScrollCache();\n const scrollabilityCache = this.mScrollCache;\n scrollabilityCache.fadeScrollBars = fadeScrollbars;\n if (fadeScrollbars) {\n scrollabilityCache.state = ScrollabilityCache.OFF;\n }\n else {\n scrollabilityCache.state = ScrollabilityCache.ON;\n }\n }\n setVerticalScrollbarPosition(position) {\n }\n setHorizontalScrollbarPosition(position) {\n }\n setScrollBarStyle(position) {\n }\n getTopFadingEdgeStrength() {\n return 0;\n }\n getBottomFadingEdgeStrength() {\n return 0;\n }\n getLeftFadingEdgeStrength() {\n return 0;\n }\n getRightFadingEdgeStrength() {\n return 0;\n }\n isScrollbarFadingEnabled() {\n return this.mScrollCache != null && this.mScrollCache.fadeScrollBars;\n }\n getScrollBarDefaultDelayBeforeFade() {\n return this.mScrollCache == null ? view_1.ViewConfiguration.getScrollDefaultDelay() :\n this.mScrollCache.scrollBarDefaultDelayBeforeFade;\n }\n setScrollBarDefaultDelayBeforeFade(scrollBarDefaultDelayBeforeFade) {\n this.getScrollCache().scrollBarDefaultDelayBeforeFade = scrollBarDefaultDelayBeforeFade;\n }\n getScrollBarFadeDuration() {\n return this.mScrollCache == null ? view_1.ViewConfiguration.getScrollBarFadeDuration() :\n this.mScrollCache.scrollBarFadeDuration;\n }\n setScrollBarFadeDuration(scrollBarFadeDuration) {\n this.getScrollCache().scrollBarFadeDuration = scrollBarFadeDuration;\n }\n getScrollBarSize() {\n return this.mScrollCache == null ? view_1.ViewConfiguration.get().getScaledScrollBarSize() :\n this.mScrollCache.scrollBarSize;\n }\n setScrollBarSize(scrollBarSize) {\n this.getScrollCache().scrollBarSize = scrollBarSize;\n }\n hasOpaqueScrollbars() {\n return true;\n }\n assignParent(parent) {\n if (this.mParent == null) {\n this.mParent = parent;\n }\n else if (parent == null) {\n this.mParent = null;\n }\n else {\n throw new Error(\"view \" + this + \" being added, but\"\n + \" it already has a parent\");\n }\n }\n onFinishInflate() {\n }\n dispatchStartTemporaryDetach() {\n this.onStartTemporaryDetach();\n }\n onStartTemporaryDetach() {\n this.removeUnsetPressCallback();\n this.mPrivateFlags |= View.PFLAG_CANCEL_NEXT_UP_EVENT;\n }\n dispatchFinishTemporaryDetach() {\n this.onFinishTemporaryDetach();\n }\n onFinishTemporaryDetach() {\n }\n dispatchWindowFocusChanged(hasFocus) {\n this.onWindowFocusChanged(hasFocus);\n }\n onWindowFocusChanged(hasWindowFocus) {\n if (!hasWindowFocus) {\n if (this.isPressed()) {\n this.setPressed(false);\n }\n this.removeLongPressCallback();\n this.removeTapCallback();\n this.onFocusLost();\n }\n this.refreshDrawableState();\n }\n hasWindowFocus() {\n return this.mAttachInfo != null && this.mAttachInfo.mHasWindowFocus;\n }\n getWindowAttachCount() {\n return this.mWindowAttachCount;\n }\n isAttachedToWindow() {\n return this.mAttachInfo != null;\n }\n dispatchAttachedToWindow(info, visibility) {\n this.mAttachInfo = info;\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().dispatchAttachedToWindow(info, visibility);\n }\n this.mWindowAttachCount++;\n this.mPrivateFlags |= View.PFLAG_DRAWABLE_STATE_DIRTY;\n if (this.mFloatingTreeObserver != null) {\n info.mViewRootImpl.mTreeObserver.merge(this.mFloatingTreeObserver);\n this.mFloatingTreeObserver = null;\n }\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER) != 0) {\n this.mAttachInfo.mScrollContainers.add(this);\n this.mPrivateFlags |= View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.onAttachedToWindow();\n if (this.dependOnDebugLayout()) {\n this.getContext().androidUI.viewAttachedDependOnDebugLayout(this);\n }\n let li = this.mListenerInfo;\n let listeners = li != null ? li.mOnAttachStateChangeListeners : null;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onViewAttachedToWindow(this);\n }\n }\n let vis = info.mWindowVisibility;\n if (vis != View.GONE) {\n this.onWindowVisibilityChanged(vis);\n }\n if ((this.mPrivateFlags & View.PFLAG_DRAWABLE_STATE_DIRTY) != 0) {\n this.refreshDrawableState();\n }\n }\n onAttachedToWindow() {\n if ((this.mPrivateFlags & View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH) != 0) {\n this.initialAwakenScrollBars();\n this.mPrivateFlags &= ~View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;\n }\n this.mPrivateFlags3 &= ~View.PFLAG3_IS_LAID_OUT;\n this.jumpDrawablesToCurrentState();\n }\n dispatchDetachedFromWindow() {\n let info = this.mAttachInfo;\n if (info != null) {\n let vis = info.mWindowVisibility;\n if (vis != View.GONE) {\n this.onWindowVisibilityChanged(View.GONE);\n }\n }\n this.onDetachedFromWindow();\n if (this.dependOnDebugLayout()) {\n this.getContext().androidUI.viewDetachedDependOnDebugLayout(this);\n }\n let li = this.mListenerInfo;\n let listeners = li != null ? li.mOnAttachStateChangeListeners : null;\n if (listeners != null && listeners.size() > 0) {\n for (let listener of listeners) {\n listener.onViewDetachedFromWindow(this);\n }\n }\n if ((this.mPrivateFlags & View.PFLAG_SCROLL_CONTAINER_ADDED) != 0) {\n this.mAttachInfo.mScrollContainers.delete(this);\n this.mPrivateFlags &= ~View.PFLAG_SCROLL_CONTAINER_ADDED;\n }\n this.mAttachInfo = null;\n if (this.mOverlay != null) {\n this.mOverlay.getOverlayView().dispatchDetachedFromWindow();\n }\n }\n onDetachedFromWindow() {\n this.mPrivateFlags &= ~View.PFLAG_CANCEL_NEXT_UP_EVENT;\n this.mPrivateFlags3 &= ~View.PFLAG3_IS_LAID_OUT;\n this.removeUnsetPressCallback();\n this.removeLongPressCallback();\n this.removePerformClickCallback();\n this.destroyDrawingCache();\n this.cleanupDraw();\n this.mCurrentAnimation = null;\n }\n cleanupDraw() {\n if (this.mAttachInfo != null) {\n this.mAttachInfo.mViewRootImpl.cancelInvalidate(this);\n }\n }\n isInEditMode() {\n return false;\n }\n debug(depth = 0) {\n console.dir(this.bindElement);\n }\n toString() {\n return this.tagName();\n }\n getRootView() {\n if (this.mAttachInfo != null) {\n let v = this.mAttachInfo.mRootView;\n if (v != null) {\n return v;\n }\n }\n let parent = this;\n while (parent.mParent != null && parent.mParent instanceof View) {\n parent = parent.mParent;\n }\n return parent;\n }\n findViewById(id) {\n if (!id)\n return null;\n return this.findViewTraversal(id);\n }\n findViewWithTag(tag) {\n if (!tag)\n return null;\n return this.findViewWithTagTraversal(tag);\n }\n findViewTraversal(id) {\n if (id == this.mID) {\n return this;\n }\n return null;\n }\n findViewWithTagTraversal(tag) {\n if (tag != null && tag === this.mTag) {\n return this;\n }\n return null;\n }\n findViewByPredicate(predicate) {\n return this.findViewByPredicateTraversal(predicate, null);\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n return null;\n }\n findViewByPredicateInsideOut(start, predicate) {\n let childToSkip = null;\n for (;;) {\n let view = start.findViewByPredicateTraversal(predicate, childToSkip);\n if (view != null || start == this) {\n return view;\n }\n let parent = start.getParent();\n if (parent == null || !(parent instanceof View)) {\n return null;\n }\n childToSkip = start;\n start = parent;\n }\n }\n setId(id) {\n this.mID = id;\n }\n getId() {\n return this.mID;\n }\n getTag() {\n return this.mTag;\n }\n setTag(tag) {\n this.mTag = tag;\n }\n setIsRootNamespace(isRoot) {\n if (isRoot) {\n this.mPrivateFlags |= View.PFLAG_IS_ROOT_NAMESPACE;\n }\n else {\n this.mPrivateFlags &= ~View.PFLAG_IS_ROOT_NAMESPACE;\n }\n }\n isRootNamespace() {\n return (this.mPrivateFlags & View.PFLAG_IS_ROOT_NAMESPACE) != 0;\n }\n getResources() {\n let context = this.getContext();\n if (context != null) {\n return context.getResources();\n }\n return Resources.getSystem();\n }\n static inflate(context, xml, root) {\n return view_1.LayoutInflater.from(context).inflate(xml, root);\n }\n static _AttrObserverCallBack(arr, observer) {\n arr.forEach((record) => {\n let target = record.target;\n let androidView = target[View.AndroidViewProperty];\n if (!androidView)\n return;\n let attrName = record.attributeName;\n let newValue = target.getAttribute(attrName);\n let oldValue = record.oldValue;\n if (newValue === oldValue)\n return;\n androidView.onBindElementAttributeChanged(attrName, record.oldValue, newValue);\n });\n }\n initBindElement(bindElement) {\n if (this.bindElement) {\n this.bindElement[View.AndroidViewProperty] = null;\n }\n this.bindElement = bindElement || document.createElement(this.tagName());\n this.bindElement.style.position = 'absolute';\n let oldBindView = this.bindElement[View.AndroidViewProperty];\n if (oldBindView) {\n if (oldBindView._AttrObserver)\n oldBindView._AttrObserver.disconnect();\n }\n this.bindElement[View.AndroidViewProperty] = this;\n this._initAttrObserver();\n }\n initBindAttr() {\n let classAttrBinder = View.ViewClassAttrBinderClazzMap.get(this.getClass());\n if (!classAttrBinder) {\n classAttrBinder = this.createClassAttrBinder();\n View.ViewClassAttrBinderClazzMap.set(this.getClass(), classAttrBinder);\n }\n this._attrBinder.setClassAttrBind(classAttrBinder);\n }\n createClassAttrBinder() {\n const classAttrBinder = new AttrBinder.ClassBinderMap()\n .set('background', {\n setter(v, value, attrBinder) {\n v.setBackground(attrBinder.parseDrawable(value));\n },\n getter(v) {\n return v.mBackground;\n },\n }).set('padding', {\n setter(v, value, attrBinder) {\n if (value == null)\n value = 0;\n let [top, right, bottom, left] = attrBinder.parsePaddingMarginTRBL(value);\n v.setPadding(left, top, right, bottom);\n },\n getter(v) {\n return v.mPaddingTop + ' ' + v.mPaddingRight + ' ' + v.mPaddingBottom + ' ' + v.mPaddingLeft;\n },\n }).set('paddingLeft', {\n setter(v, value, attrBinder) {\n if (value == null)\n value = 0;\n v.setPadding(attrBinder.parseDimension(value, 0), v.mPaddingTop, v.mPaddingRight, v.mPaddingBottom);\n },\n getter(v) {\n return v.mPaddingLeft;\n },\n }).set('paddingTop', {\n setter(v, value, attrBinder) {\n if (value == null)\n value = 0;\n v.setPadding(v.mPaddingLeft, attrBinder.parseDimension(value, 0), v.mPaddingRight, v.mPaddingBottom);\n },\n getter(v) {\n return v.mPaddingTop;\n },\n }).set('paddingRight', {\n setter(v, value, attrBinder) {\n if (value == null)\n value = 0;\n v.setPadding(v.mPaddingLeft, v.mPaddingTop, attrBinder.parseDimension(value, 0), v.mPaddingBottom);\n },\n getter(v) {\n return v.mPaddingRight;\n },\n }).set('paddingBottom', {\n setter(v, value, attrBinder) {\n if (value == null)\n value = 0;\n v.setPadding(v.mPaddingLeft, v.mPaddingTop, v.mPaddingRight, attrBinder.parseDimension(value, 0));\n },\n getter(v) {\n return v.mPaddingBottom;\n },\n }).set('scrollX', {\n setter(v, value, attrBinder) {\n value = attrBinder.parseNumberPixelOffset(value);\n if (Number.isInteger(value))\n v.scrollTo(value, v.mScrollY);\n },\n getter(v) {\n v.getScrollX();\n },\n }).set('scrollY', {\n setter(v, value, attrBinder) {\n value = attrBinder.parseNumberPixelOffset(value);\n if (Number.isInteger(value))\n v.scrollTo(v.mScrollX, value);\n },\n getter(v) {\n return v.getScrollY();\n },\n }).set('alpha', {\n setter(v, value, attrBinder) {\n v.setAlpha(attrBinder.parseFloat(value, v.getAlpha()));\n },\n getter(v) {\n return v.getAlpha();\n },\n }).set('transformPivotX', {\n setter(v, value, attrBinder) {\n v.setPivotX(attrBinder.parseNumberPixelOffset(value, v.getPivotX()));\n },\n getter(v) {\n return v.getPivotX();\n },\n }).set('transformPivotY', {\n setter(v, value, attrBinder) {\n v.setPivotY(attrBinder.parseNumberPixelOffset(value, v.getPivotY()));\n },\n getter(v) {\n return v.getPivotY();\n },\n }).set('translationX', {\n setter(v, value, attrBinder) {\n v.setTranslationX(attrBinder.parseNumberPixelOffset(value, v.getTranslationX()));\n },\n getter(v) {\n return v.getTranslationX();\n },\n }).set('translationY', {\n setter(v, value, attrBinder) {\n v.setTranslationY(attrBinder.parseNumberPixelOffset(value, v.getTranslationY()));\n },\n getter(v) {\n return v.getTranslationY();\n },\n }).set('rotation', {\n setter(v, value, attrBinder) {\n v.setRotation(attrBinder.parseFloat(value, v.getRotation()));\n },\n getter(v) {\n return v.getRotation();\n },\n }).set('scaleX', {\n setter(v, value, attrBinder) {\n v.setScaleX(attrBinder.parseFloat(value, v.getScaleX()));\n },\n getter(v) {\n return v.getScaleX();\n },\n }).set('scaleY', {\n setter(v, value, attrBinder) {\n v.setScaleY(attrBinder.parseFloat(value, v.getScaleY()));\n },\n getter(v) {\n return v.getScaleY();\n },\n }).set('tag', {\n setter(v, value, attrBinder) {\n v.setTag(value);\n },\n getter(v) {\n return v.getTag();\n },\n }).set('id', {\n setter(v, value, attrBinder) {\n v.setId(value);\n },\n getter(v) {\n return v.getId();\n },\n }).set('focusable', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n },\n getter(v) {\n return v.isFocusable();\n },\n }).set('focusableInTouchMode', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK);\n }\n },\n getter(v) {\n return v.isFocusableInTouchMode();\n },\n }).set('clickable', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.CLICKABLE, View.CLICKABLE);\n }\n },\n getter(v) {\n return v.isClickable();\n },\n }).set('longClickable', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE);\n }\n },\n getter(v) {\n return v.isLongClickable();\n },\n }).set('duplicateParentState', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE);\n }\n },\n getter(v) {\n return (v.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE;\n },\n }).set('visibility', {\n setter(v, value, attrBinder) {\n if (value === 'gone')\n v.setVisibility(View.GONE);\n else if (value === 'invisible')\n v.setVisibility(View.INVISIBLE);\n else if (value === 'visible')\n v.setVisibility(View.VISIBLE);\n },\n getter(v) {\n return v.getVisibility();\n },\n }).set('scrollbars', {\n setter(v, value, attrBinder) {\n if (value === 'none') {\n v.setHorizontalScrollBarEnabled(false);\n v.setVerticalScrollBarEnabled(false);\n }\n else if (value === 'horizontal') {\n v.setHorizontalScrollBarEnabled(true);\n v.setVerticalScrollBarEnabled(false);\n }\n else if (value === 'vertical') {\n v.setHorizontalScrollBarEnabled(false);\n v.setVerticalScrollBarEnabled(true);\n }\n },\n }).set('isScrollContainer', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value, false)) {\n v.setScrollContainer(true);\n }\n },\n getter(v) {\n return v.isScrollContainer();\n },\n }).set('minWidth', {\n setter(v, value, attrBinder) {\n v.setMinimumWidth(attrBinder.parseNumberPixelSize(value, 0));\n },\n getter(v) {\n return v.mMinWidth;\n },\n }).set('minHeight', {\n setter(v, value, attrBinder) {\n v.setMinimumHeight(attrBinder.parseNumberPixelSize(value, 0));\n },\n getter(v) {\n return v.mMinHeight;\n },\n }).set('onClick', {\n setter(v, value, attrBinder) {\n if (value && typeof value === 'string') {\n v.setOnClickListenerByAttrValueString(value);\n }\n v.bindElement.removeAttribute('onclick');\n },\n }).set('overScrollMode', {\n setter(v, value, attrBinder) {\n let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()];\n if (scrollMode === undefined)\n scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n v.setOverScrollMode(scrollMode);\n }\n }).set('layerType', {\n setter(v, value, attrBinder) {\n if ((value + '').toLowerCase() == 'software') {\n v.setLayerType(View.LAYER_TYPE_SOFTWARE);\n }\n else {\n v.setLayerType(View.LAYER_TYPE_NONE);\n }\n }\n }).set('cornerRadius', {\n setter(v, value, attrBinder) {\n let [topRight, rightBottom, bottomLeft, leftTop] = attrBinder.parsePaddingMarginTRBL(value);\n v.setCornerRadius(leftTop, topRight, rightBottom, bottomLeft);\n },\n getter(v) {\n return v.mCornerRadiusTopRight + ' ' + v.mCornerRadiusBottomRight + ' ' + v.mCornerRadiusBottomLeft + ' ' + v.mCornerRadiusTopLeft;\n },\n }).set('cornerRadiusTopLeft', {\n setter(v, value, attrBinder) {\n v.setCornerRadiusTopLeft(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopLeft));\n },\n getter(v) {\n return v.mCornerRadiusTopLeft;\n },\n }).set('cornerRadiusTopRight', {\n setter(v, value, attrBinder) {\n v.setCornerRadiusTopRight(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopRight));\n },\n getter(v) {\n return v.mCornerRadiusTopRight;\n },\n }).set('cornerRadiusBottomLeft', {\n setter(v, value, attrBinder) {\n v.setCornerRadiusBottomLeft(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomLeft));\n },\n getter(v) {\n return v.mCornerRadiusBottomLeft;\n },\n }).set('cornerRadiusBottomRight', {\n setter(v, value, attrBinder) {\n v.setCornerRadiusBottomRight(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomRight));\n },\n getter(v) {\n return v.mCornerRadiusBottomRight;\n },\n }).set('viewShadowColor', {\n setter(v, value, attrBinder) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, attrBinder.parseColor(value, v.mShadowPaint.shadowColor));\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowColor;\n },\n }).set('viewShadowDx', {\n setter(v, value, attrBinder) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let dx = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDx);\n v.setShadowView(v.mShadowPaint.shadowRadius, dx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowDx;\n },\n }).set('viewShadowDy', {\n setter(v, value, attrBinder) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let dy = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDy);\n v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, dy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowDy;\n },\n }).set('viewShadowRadius', {\n setter(v, value, attrBinder) {\n if (!v.mShadowPaint)\n v.mShadowPaint = new Paint();\n let radius = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowRadius);\n v.setShadowView(radius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor);\n },\n getter(v) {\n if (v.mShadowPaint)\n return v.mShadowPaint.shadowRadius;\n },\n });\n classAttrBinder.set('paddingStart', classAttrBinder.get('paddingLeft'));\n classAttrBinder.set('paddingEnd', classAttrBinder.get('paddingRight'));\n return classAttrBinder;\n }\n requestSyncBoundToElement(immediately = this.dependOnDebugLayout()) {\n let rootView = this.getRootView();\n if (!rootView)\n return;\n if (!rootView._syncToElementRun) {\n rootView._syncToElementRun = {\n run: () => {\n rootView._syncToElementLock = false;\n rootView._syncToElementImmediatelyLock = false;\n rootView._syncBoundAndScrollToElement();\n }\n };\n }\n if (immediately) {\n if (rootView._syncToElementImmediatelyLock)\n return;\n rootView._syncToElementImmediatelyLock = true;\n rootView._syncToElementLock = true;\n rootView.removeCallbacks(rootView._syncToElementRun);\n rootView.post(rootView._syncToElementRun);\n return;\n }\n if (rootView._syncToElementLock)\n return;\n rootView._syncToElementLock = true;\n rootView.postDelayed(rootView._syncToElementRun, 1000);\n }\n _syncBoundAndScrollToElement() {\n if (!this.isAttachedToWindow()) {\n return;\n }\n const left = this.mLeft;\n const top = this.mTop;\n const width = this.getWidth();\n const height = this.getHeight();\n const parent = this.getParent();\n const pScrollX = parent instanceof View ? parent.mScrollX : 0;\n const pScrollY = parent instanceof View ? parent.mScrollY : 0;\n if (left !== this._lastSyncLeft || top !== this._lastSyncTop\n || width !== this._lastSyncWidth || height !== this._lastSyncHeight\n || pScrollX !== this._lastSyncScrollX || pScrollY !== this._lastSyncScrollY) {\n this._lastSyncLeft = left;\n this._lastSyncTop = top;\n this._lastSyncWidth = width;\n this._lastSyncHeight = height;\n this._lastSyncScrollX = pScrollX;\n this._lastSyncScrollY = pScrollY;\n const density = this.getResources().getDisplayMetrics().density;\n let bind = this.bindElement;\n bind.style.width = width / density + 'px';\n bind.style.height = height / density + 'px';\n bind.style.left = (left - pScrollX) / density + 'px';\n bind.style.top = (top - pScrollY) / density + 'px';\n if (bind.parentElement) {\n bind.parentElement.scrollTop = 0;\n }\n this.getMatrix();\n }\n if (this instanceof view_1.ViewGroup) {\n const group = this;\n for (var i = 0, count = group.getChildCount(); i < count; i++) {\n group.getChildAt(i)._syncBoundAndScrollToElement();\n }\n }\n }\n _syncMatrixToElement() {\n let matrix = this.mTransformationInfo == null ? Matrix.IDENTITY_MATRIX : this.mTransformationInfo.mMatrix;\n matrix = matrix || Matrix.IDENTITY_MATRIX;\n let v = View.TempMatrixValue;\n matrix.getValues(v);\n let transfrom = `matrix(${v[Matrix.MSCALE_X]}, ${-v[Matrix.MSKEW_X]}, ${-v[Matrix.MSKEW_Y]}, ${v[Matrix.MSCALE_Y]}, ${v[Matrix.MTRANS_X]}, ${v[Matrix.MTRANS_Y]})`;\n if (this._lastSyncTransform != transfrom) {\n this._lastSyncTransform = this.bindElement.style.transform = this.bindElement.style.webkitTransform = transfrom;\n }\n }\n syncVisibleToElement() {\n let visibility = this.getVisibility();\n if (visibility === View.VISIBLE) {\n this.bindElement.style.display = '';\n this.bindElement.style.visibility = '';\n }\n else if (visibility === View.INVISIBLE) {\n this.bindElement.style.display = '';\n this.bindElement.style.visibility = 'hidden';\n }\n else {\n this.bindElement.style.display = 'none';\n this.bindElement.style.visibility = '';\n }\n }\n dependOnDebugLayout() {\n return false;\n }\n _initAttrObserver() {\n if (!window['MutationObserver'])\n return;\n if (!this._AttrObserver)\n this._AttrObserver = new MutationObserver(View._AttrObserverCallBack);\n else\n this._AttrObserver.disconnect();\n this._AttrObserver.observe(this.bindElement, { attributes: true, attributeOldValue: true });\n }\n _fireStateChangeToAttribute(oldState, newState) {\n if (!this._stateAttrList)\n return;\n if (java.util.Arrays.equals(oldState, newState))\n return;\n let oldMatchedAttr = this._stateAttrList.getMatchedStateAttr(oldState);\n let matchedAttr = this._stateAttrList.getMatchedStateAttr(newState);\n for (let [key, value] of matchedAttr.getAttrMap().entries()) {\n let attrValue = this._getBinderAttrValue(key);\n if (oldMatchedAttr) {\n oldMatchedAttr.setAttr(key, attrValue);\n }\n if (value == attrValue)\n continue;\n this.onBindElementAttributeChanged(key, null, value);\n }\n }\n _getBinderAttrValue(key) {\n if (!key)\n return null;\n if (key.startsWith('layout_') || key.startsWith('android:layout_')) {\n let params = this.getLayoutParams();\n if (params) {\n return params.getAttrBinder().getAttrValue(key);\n }\n }\n else {\n return this._attrBinder.getAttrValue(key);\n }\n }\n onBindElementAttributeChanged(attributeName, oldVal, newVal) {\n let parts = attributeName.split(\":\");\n let attrName = parts[parts.length - 1].toLowerCase();\n if (newVal === 'true')\n newVal = true;\n else if (newVal === 'false')\n newVal = false;\n if (attrName.startsWith('layout_')) {\n let params = this.getLayoutParams();\n if (params) {\n params.getAttrBinder().onAttrChange(attrName, newVal, this.getContext());\n this.requestLayout();\n }\n return;\n }\n this._attrBinder.onAttrChange(attrName, newVal, this.getContext());\n }\n tagName() {\n return this.constructor.name;\n }\n }\n View.DBG = Log.View_DBG;\n View.VIEW_LOG_TAG = \"View\";\n View.PFLAG_WANTS_FOCUS = 0x00000001;\n View.PFLAG_FOCUSED = 0x00000002;\n View.PFLAG_SELECTED = 0x00000004;\n View.PFLAG_IS_ROOT_NAMESPACE = 0x00000008;\n View.PFLAG_HAS_BOUNDS = 0x00000010;\n View.PFLAG_DRAWN = 0x00000020;\n View.PFLAG_DRAW_ANIMATION = 0x00000040;\n View.PFLAG_SKIP_DRAW = 0x00000080;\n View.PFLAG_ONLY_DRAWS_BACKGROUND = 0x00000100;\n View.PFLAG_REQUEST_TRANSPARENT_REGIONS = 0x00000200;\n View.PFLAG_DRAWABLE_STATE_DIRTY = 0x00000400;\n View.PFLAG_MEASURED_DIMENSION_SET = 0x00000800;\n View.PFLAG_FORCE_LAYOUT = 0x00001000;\n View.PFLAG_LAYOUT_REQUIRED = 0x00002000;\n View.PFLAG_PRESSED = 0x00004000;\n View.PFLAG_DRAWING_CACHE_VALID = 0x00008000;\n View.PFLAG_ANIMATION_STARTED = 0x00010000;\n View.PFLAG_ALPHA_SET = 0x00040000;\n View.PFLAG_SCROLL_CONTAINER = 0x00080000;\n View.PFLAG_SCROLL_CONTAINER_ADDED = 0x00100000;\n View.PFLAG_DIRTY = 0x00200000;\n View.PFLAG_DIRTY_OPAQUE = 0x00400000;\n View.PFLAG_DIRTY_MASK = 0x00600000;\n View.PFLAG_OPAQUE_BACKGROUND = 0x00800000;\n View.PFLAG_OPAQUE_SCROLLBARS = 0x01000000;\n View.PFLAG_OPAQUE_MASK = 0x01800000;\n View.PFLAG_PREPRESSED = 0x02000000;\n View.PFLAG_CANCEL_NEXT_UP_EVENT = 0x04000000;\n View.PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH = 0x08000000;\n View.PFLAG_HOVERED = 0x10000000;\n View.PFLAG_PIVOT_EXPLICITLY_SET = 0x20000000;\n View.PFLAG_ACTIVATED = 0x40000000;\n View.PFLAG_INVALIDATED = 0x80000000;\n View.PFLAG2_VIEW_QUICK_REJECTED = 0x10000000;\n View.PFLAG2_HAS_TRANSIENT_STATE = 0x80000000;\n View.PFLAG3_VIEW_IS_ANIMATING_TRANSFORM = 0x1;\n View.PFLAG3_VIEW_IS_ANIMATING_ALPHA = 0x2;\n View.PFLAG3_IS_LAID_OUT = 0x4;\n View.PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT = 0x8;\n View.PFLAG3_CALLED_SUPER = 0x10;\n View.NOT_FOCUSABLE = 0x00000000;\n View.FOCUSABLE = 0x00000001;\n View.FOCUSABLE_MASK = 0x00000001;\n View.OVER_SCROLL_ALWAYS = 0;\n View.OVER_SCROLL_IF_CONTENT_SCROLLS = 1;\n View.OVER_SCROLL_NEVER = 2;\n View.MEASURED_SIZE_MASK = 0x00ffffff;\n View.MEASURED_STATE_MASK = 0xff000000;\n View.MEASURED_HEIGHT_STATE_SHIFT = 16;\n View.MEASURED_STATE_TOO_SMALL = 0x01000000;\n View.VISIBILITY_MASK = 0x0000000C;\n View.VISIBLE = 0x00000000;\n View.INVISIBLE = 0x00000004;\n View.GONE = 0x00000008;\n View.ENABLED = 0x00000000;\n View.DISABLED = 0x00000020;\n View.ENABLED_MASK = 0x00000020;\n View.WILL_NOT_DRAW = 0x00000080;\n View.DRAW_MASK = 0x00000080;\n View.SCROLLBARS_NONE = 0x00000000;\n View.SCROLLBARS_HORIZONTAL = 0x00000100;\n View.SCROLLBARS_VERTICAL = 0x00000200;\n View.SCROLLBARS_MASK = 0x00000300;\n View.FOCUSABLES_ALL = 0x00000000;\n View.FOCUSABLES_TOUCH_MODE = 0x00000001;\n View.FOCUS_BACKWARD = 0x00000001;\n View.FOCUS_FORWARD = 0x00000002;\n View.FOCUS_LEFT = 0x00000011;\n View.FOCUS_UP = 0x00000021;\n View.FOCUS_RIGHT = 0x00000042;\n View.FOCUS_DOWN = 0x00000082;\n View.VIEW_STATE_WINDOW_FOCUSED = 1;\n View.VIEW_STATE_SELECTED = 1 << 1;\n View.VIEW_STATE_FOCUSED = 1 << 2;\n View.VIEW_STATE_ENABLED = 1 << 3;\n View.VIEW_STATE_PRESSED = 1 << 4;\n View.VIEW_STATE_ACTIVATED = 1 << 5;\n View.VIEW_STATE_HOVERED = 1 << 7;\n View.VIEW_STATE_CHECKED = 1 << 10;\n View.VIEW_STATE_MULTILINE = 1 << 11;\n View.VIEW_STATE_EXPANDED = 1 << 12;\n View.VIEW_STATE_EMPTY = 1 << 13;\n View.VIEW_STATE_LAST = 1 << 14;\n View.VIEW_STATE_IDS = [\n View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED,\n View.VIEW_STATE_SELECTED, View.VIEW_STATE_SELECTED,\n View.VIEW_STATE_FOCUSED, View.VIEW_STATE_FOCUSED,\n View.VIEW_STATE_ENABLED, View.VIEW_STATE_ENABLED,\n View.VIEW_STATE_PRESSED, View.VIEW_STATE_PRESSED,\n View.VIEW_STATE_ACTIVATED, View.VIEW_STATE_ACTIVATED,\n View.VIEW_STATE_HOVERED, View.VIEW_STATE_HOVERED,\n ];\n View._static = (() => {\n function Integer_bitCount(i) {\n i = i - ((i >>> 1) & 0x55555555);\n i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n i = (i + (i >>> 4)) & 0x0f0f0f0f;\n i = i + (i >>> 8);\n i = i + (i >>> 16);\n return i & 0x3f;\n }\n let orderedIds = View.VIEW_STATE_IDS;\n const NUM_BITS = View.VIEW_STATE_IDS.length / 2;\n View.VIEW_STATE_SETS = new Array(1 << NUM_BITS);\n for (let i = 0; i < View.VIEW_STATE_SETS.length; i++) {\n let numBits = Integer_bitCount(i);\n const stataSet = androidui.util.ArrayCreator.newNumberArray(numBits);\n let pos = 0;\n for (let j = 0; j < orderedIds.length; j += 2) {\n if ((i & orderedIds[j + 1]) != 0) {\n stataSet[pos++] = orderedIds[j];\n }\n }\n View.VIEW_STATE_SETS[i] = stataSet;\n }\n View.EMPTY_STATE_SET = View.VIEW_STATE_SETS[0];\n View.WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED];\n View.SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED];\n View.SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED];\n View.FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED];\n View.FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED];\n View.FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED];\n View.FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED];\n View.ENABLED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_ENABLED];\n View.ENABLED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED];\n View.ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED];\n View.PRESSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_PRESSED];\n View.PRESSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_PRESSED];\n View.PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n View.PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET = View.VIEW_STATE_SETS[View.VIEW_STATE_WINDOW_FOCUSED | View.VIEW_STATE_SELECTED | View.VIEW_STATE_FOCUSED | View.VIEW_STATE_ENABLED | View.VIEW_STATE_PRESSED];\n })();\n View.CLICKABLE = 0x00004000;\n View.DRAWING_CACHE_ENABLED = 0x00008000;\n View.WILL_NOT_CACHE_DRAWING = 0x000020000;\n View.FOCUSABLE_IN_TOUCH_MODE = 0x00040000;\n View.LONG_CLICKABLE = 0x00200000;\n View.DUPLICATE_PARENT_STATE = 0x00400000;\n View.LAYER_TYPE_NONE = 0;\n View.LAYER_TYPE_SOFTWARE = 1;\n View.LAYOUT_DIRECTION_LTR = LayoutDirection.LTR;\n View.LAYOUT_DIRECTION_RTL = LayoutDirection.RTL;\n View.LAYOUT_DIRECTION_INHERIT = LayoutDirection.INHERIT;\n View.LAYOUT_DIRECTION_LOCALE = LayoutDirection.LOCALE;\n View.TEXT_DIRECTION_INHERIT = 0;\n View.TEXT_DIRECTION_FIRST_STRONG = 1;\n View.TEXT_DIRECTION_ANY_RTL = 2;\n View.TEXT_DIRECTION_LTR = 3;\n View.TEXT_DIRECTION_RTL = 4;\n View.TEXT_DIRECTION_LOCALE = 5;\n View.TEXT_DIRECTION_DEFAULT = View.TEXT_DIRECTION_INHERIT;\n View.TEXT_DIRECTION_RESOLVED_DEFAULT = View.TEXT_DIRECTION_FIRST_STRONG;\n View.TEXT_ALIGNMENT_INHERIT = 0;\n View.TEXT_ALIGNMENT_GRAVITY = 1;\n View.TEXT_ALIGNMENT_TEXT_START = 2;\n View.TEXT_ALIGNMENT_TEXT_END = 3;\n View.TEXT_ALIGNMENT_CENTER = 4;\n View.TEXT_ALIGNMENT_VIEW_START = 5;\n View.TEXT_ALIGNMENT_VIEW_END = 6;\n View.TEXT_ALIGNMENT_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY;\n View.TEXT_ALIGNMENT_RESOLVED_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY;\n View.ViewClassAttrBinderClazzMap = new Map();\n View.AndroidViewProperty = 'AndroidView';\n View.TempMatrixValue = androidui.util.ArrayCreator.newNumberArray(9);\n view_1.View = View;\n (function (View) {\n class TransformationInfo {\n constructor() {\n this.mMatrix = new Matrix();\n this.mMatrixDirty = false;\n this.mInverseMatrixDirty = true;\n this.mMatrixIsIdentity = true;\n this.mPrevWidth = -1;\n this.mPrevHeight = -1;\n this.mRotation = 0;\n this.mTranslationX = 0;\n this.mTranslationY = 0;\n this.mScaleX = 1;\n this.mScaleY = 1;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mAlpha = 1;\n this.mTransitionAlpha = 1;\n }\n }\n View.TransformationInfo = TransformationInfo;\n class MeasureSpec {\n static makeMeasureSpec(size, mode) {\n return (size & ~MeasureSpec.MODE_MASK) | (mode & MeasureSpec.MODE_MASK);\n }\n static getMode(measureSpec) {\n return (measureSpec & MeasureSpec.MODE_MASK);\n }\n static getSize(measureSpec) {\n return (measureSpec & ~MeasureSpec.MODE_MASK);\n }\n static adjust(measureSpec, delta) {\n return MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(measureSpec + delta), MeasureSpec.getMode(measureSpec));\n }\n static toString(measureSpec) {\n let mode = MeasureSpec.getMode(measureSpec);\n let size = MeasureSpec.getSize(measureSpec);\n let sb = new StringBuilder(\"MeasureSpec: \");\n if (mode == MeasureSpec.UNSPECIFIED)\n sb.append(\"UNSPECIFIED \");\n else if (mode == MeasureSpec.EXACTLY)\n sb.append(\"EXACTLY \");\n else if (mode == MeasureSpec.AT_MOST)\n sb.append(\"AT_MOST \");\n else\n sb.append(mode).append(\" \");\n sb.append(size);\n return sb.toString();\n }\n }\n MeasureSpec.MODE_SHIFT = 30;\n MeasureSpec.MODE_MASK = 0x3 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.UNSPECIFIED = 0 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.EXACTLY = 1 << MeasureSpec.MODE_SHIFT;\n MeasureSpec.AT_MOST = 2 << MeasureSpec.MODE_SHIFT;\n View.MeasureSpec = MeasureSpec;\n class AttachInfo {\n constructor(mViewRootImpl, mHandler) {\n this.mKeyDispatchState = new KeyEvent.DispatcherState();\n this.mTmpInvalRect = new Rect();\n this.mTmpTransformRect = new Rect();\n this.mPoint = new Point();\n this.mTmpMatrix = new Matrix();\n this.mTmpTransformation = new Transformation();\n this.mTmpTransformLocation = androidui.util.ArrayCreator.newNumberArray(2);\n this.mScrollContainers = new Set();\n this.mInvalidateChildLocation = androidui.util.ArrayCreator.newNumberArray(2);\n this.mHasWindowFocus = false;\n this.mWindowVisibility = 0;\n this.mViewRootImpl = mViewRootImpl;\n this.mHandler = mHandler;\n }\n }\n View.AttachInfo = AttachInfo;\n class ListenerInfo {\n }\n View.ListenerInfo = ListenerInfo;\n var OnClickListener;\n (function (OnClickListener) {\n function fromFunction(func) {\n return {\n onClick: func\n };\n }\n OnClickListener.fromFunction = fromFunction;\n })(OnClickListener = View.OnClickListener || (View.OnClickListener = {}));\n var OnLongClickListener;\n (function (OnLongClickListener) {\n function fromFunction(func) {\n return {\n onLongClick: func\n };\n }\n OnLongClickListener.fromFunction = fromFunction;\n })(OnLongClickListener = View.OnLongClickListener || (View.OnLongClickListener = {}));\n var OnFocusChangeListener;\n (function (OnFocusChangeListener) {\n function fromFunction(func) {\n return {\n onFocusChange: func\n };\n }\n OnFocusChangeListener.fromFunction = fromFunction;\n })(OnFocusChangeListener = View.OnFocusChangeListener || (View.OnFocusChangeListener = {}));\n var OnTouchListener;\n (function (OnTouchListener) {\n function fromFunction(func) {\n return {\n onTouch: func\n };\n }\n OnTouchListener.fromFunction = fromFunction;\n })(OnTouchListener = View.OnTouchListener || (View.OnTouchListener = {}));\n var OnKeyListener;\n (function (OnKeyListener) {\n function fromFunction(func) {\n return {\n onKey: func\n };\n }\n OnKeyListener.fromFunction = fromFunction;\n })(OnKeyListener = View.OnKeyListener || (View.OnKeyListener = {}));\n var OnGenericMotionListener;\n (function (OnGenericMotionListener) {\n function fromFunction(func) {\n return {\n onGenericMotion: func\n };\n }\n OnGenericMotionListener.fromFunction = fromFunction;\n })(OnGenericMotionListener = View.OnGenericMotionListener || (View.OnGenericMotionListener = {}));\n })(View = view_1.View || (view_1.View = {}));\n (function (View) {\n var AttachInfo;\n (function (AttachInfo) {\n class InvalidateInfo {\n constructor() {\n this.left = 0;\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n }\n static obtain() {\n let instance = InvalidateInfo.sPool.acquire();\n return (instance != null) ? instance : new InvalidateInfo();\n }\n recycle() {\n this.target = null;\n InvalidateInfo.sPool.release(this);\n }\n }\n InvalidateInfo.POOL_LIMIT = 10;\n InvalidateInfo.sPool = new Pools.SynchronizedPool(InvalidateInfo.POOL_LIMIT);\n AttachInfo.InvalidateInfo = InvalidateInfo;\n })(AttachInfo = View.AttachInfo || (View.AttachInfo = {}));\n })(View = view_1.View || (view_1.View = {}));\n class CheckForLongPress {\n constructor(View_this) {\n this.mOriginalWindowAttachCount = 0;\n this.View_this = View_this;\n }\n run() {\n if (this.View_this.isPressed() && (this.View_this.mParent != null)\n && this.mOriginalWindowAttachCount == this.View_this.mWindowAttachCount) {\n if (this.View_this.performLongClick()) {\n this.View_this.mHasPerformedLongPress = true;\n }\n }\n }\n rememberWindowAttachCount() {\n this.mOriginalWindowAttachCount = this.View_this.mWindowAttachCount;\n }\n }\n class CheckForTap {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.mPrivateFlags &= ~View.PFLAG_PREPRESSED;\n this.View_this.setPressed(true);\n this.View_this.checkForLongClick(view_1.ViewConfiguration.getTapTimeout());\n }\n }\n class PerformClick {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.performClick();\n }\n }\n class PerformClickAfterPressDraw {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.post(this.View_this.mPerformClick);\n }\n }\n class UnsetPressedState {\n constructor(View_this) {\n this.View_this = View_this;\n }\n run() {\n this.View_this.setPressed(false);\n }\n }\n class ScrollabilityCache {\n constructor(host) {\n this.fadeScrollBars = true;\n this.fadingEdgeLength = view_1.ViewConfiguration.get().getScaledFadingEdgeLength();\n this.scrollBarDefaultDelayBeforeFade = view_1.ViewConfiguration.getScrollDefaultDelay();\n this.scrollBarFadeDuration = view_1.ViewConfiguration.getScrollBarFadeDuration();\n this.scrollBarSize = view_1.ViewConfiguration.get().getScaledScrollBarSize();\n this.interpolator = new LinearInterpolator();\n this.state = ScrollabilityCache.OFF;\n this.host = host;\n this.scrollBar = new ScrollBarDrawable();\n let thumbColor = new ColorDrawable(0x44000000);\n let density = Resources.getDisplayMetrics().density;\n let thumb = new InsetDrawable(thumbColor, 0, 2 * density, view_1.ViewConfiguration.get().getScaledScrollBarSize() / 2, 2 * density);\n this.scrollBar.setHorizontalThumbDrawable(thumb);\n this.scrollBar.setVerticalThumbDrawable(thumb);\n }\n run() {\n let now = AnimationUtils.currentAnimationTimeMillis();\n if (now >= this.fadeStartTime) {\n this.state = ScrollabilityCache.FADING;\n this.host.invalidate(true);\n }\n }\n _computeAlphaToScrollBar() {\n let now = AnimationUtils.currentAnimationTimeMillis();\n let factor = (now - this.fadeStartTime) / this.scrollBarFadeDuration;\n if (factor >= 1) {\n this.state = ScrollabilityCache.OFF;\n factor = 1;\n }\n let alpha = 1 - this.interpolator.getInterpolation(factor);\n this.scrollBar.setAlpha(255 * alpha);\n }\n }\n ScrollabilityCache.OFF = 0;\n ScrollabilityCache.ON = 1;\n ScrollabilityCache.FADING = 2;\n class MatchIdPredicate {\n apply(view) {\n return view.mID === this.mId;\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Rect = android.graphics.Rect;\n var Canvas = android.graphics.Canvas;\n class Surface {\n constructor(canvasElement, viewRoot) {\n this.mLockedRect = new Rect();\n this.mCanvasBound = new Rect();\n this.mSupportDirtyDraw = true;\n this.mLockSaveCount = 1;\n this.mCanvasElement = canvasElement;\n this.viewRoot = viewRoot;\n this.initImpl();\n }\n initImpl() {\n this.initCanvasBound();\n }\n isValid() {\n return true;\n }\n notifyBoundChange() {\n this.initCanvasBound();\n }\n initCanvasBound() {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n let clientRect = this.mCanvasElement.getBoundingClientRect();\n this.mCanvasBound.set(clientRect.left * density, clientRect.top * density, clientRect.right * density, clientRect.bottom * density);\n }\n lockCanvas(dirty) {\n let fullWidth = this.mCanvasBound.width();\n let fullHeight = this.mCanvasBound.height();\n if (!this.mSupportDirtyDraw)\n dirty.set(0, 0, fullWidth, fullHeight);\n let rect = this.mLockedRect;\n rect.set(Math.floor(dirty.left), Math.floor(dirty.top), Math.ceil(dirty.right), Math.ceil(dirty.bottom));\n if (dirty.isEmpty()) {\n rect.set(0, 0, fullWidth, fullHeight);\n }\n if (rect.isEmpty())\n return null;\n return this.lockCanvasImpl(rect.left, rect.top, rect.width(), rect.height());\n }\n lockCanvasImpl(left, top, width, height) {\n let canvas;\n if (Surface.DrawToCacheFirstMode) {\n canvas = new Canvas(width, height);\n if (left != 0 || top != 0)\n canvas.translate(-left, -top);\n }\n else {\n canvas = new SurfaceLockCanvas(this.mCanvasBound.width(), this.mCanvasBound.height(), this.mCanvasElement);\n this.mLockSaveCount = canvas.save();\n canvas.clipRect(left, top, left + width, top + height);\n }\n return canvas;\n }\n unlockCanvasAndPost(canvas) {\n if (Surface.DrawToCacheFirstMode) {\n let mCanvasContent = this.mCanvasElement.getContext('2d');\n if (canvas.mCanvasElement)\n mCanvasContent.drawImage(canvas.mCanvasElement, this.mLockedRect.left, this.mLockedRect.top);\n canvas.recycle();\n }\n else {\n canvas.restoreToCount(this.mLockSaveCount);\n }\n }\n showFps(fps) {\n if (!this._showFPSNode) {\n this._showFPSNode = document.createElement('div');\n this._showFPSNode.style.position = 'absolute';\n this._showFPSNode.style.top = '0';\n this._showFPSNode.style.left = '0';\n this._showFPSNode.style.width = '60px';\n this._showFPSNode.style.fontSize = '14px';\n this._showFPSNode.style.background = 'black';\n this._showFPSNode.style.color = 'white';\n this._showFPSNode.style.opacity = '0.7';\n this._showFPSNode.style.zIndex = '1';\n this.mCanvasElement.parentNode.appendChild(this._showFPSNode);\n }\n this._showFPSNode.innerText = 'FPS:' + fps.toFixed(1);\n }\n }\n Surface.DrawToCacheFirstMode = false;\n view.Surface = Surface;\n class SurfaceLockCanvas extends Canvas {\n constructor(width, height, canvasElement) {\n super(width, height);\n this.mCanvasElement = canvasElement;\n this._mCanvasContent = this.mCanvasElement.getContext(\"2d\");\n }\n initCanvasImpl() {\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_2) {\n var View = android.view.View;\n var Rect = android.graphics.Rect;\n var Handler = android.os.Handler;\n var SystemClock = android.os.SystemClock;\n var System = java.lang.System;\n var Log = android.util.Log;\n var Surface = android.view.Surface;\n class ViewRootImpl {\n constructor() {\n this.mViewVisibility = View.GONE;\n this.mStopped = false;\n this.mWidth = -1;\n this.mHeight = -1;\n this.mDirty = new Rect();\n this.mIsAnimating = false;\n this.mTempRect = new Rect();\n this.mVisRect = new Rect();\n this.mTraversalScheduled = false;\n this.mWillDrawSoon = false;\n this.mIsInTraversal = false;\n this.mLayoutRequested = false;\n this.mFirst = true;\n this.mFullRedrawNeeded = false;\n this.mIsDrawing = false;\n this.mAdded = false;\n this.mAddedTouchMode = false;\n this.mInTouchMode = false;\n this.mWinFrame = new Rect();\n this.mLayoutRequesters = [];\n this.mHandler = new ViewRootHandler();\n this.mViewScrollChanged = false;\n this.mTreeObserver = new view_2.ViewTreeObserver();\n this.mIgnoreDirtyState = false;\n this.mSetIgnoreDirtyState = false;\n this.mDrawingTime = 0;\n this.mFpsStartTime = -1;\n this.mFpsPrevTime = -1;\n this.mFpsNumFrames = 0;\n this.mTraversalRunnable = new TraversalRunnable(this);\n this._continueTraversalesCount = 0;\n this.mInvalidateOnAnimationRunnable = new InvalidateOnAnimationRunnable(this.mHandler);\n }\n initSurface(canvasElement) {\n this.mSurface = new Surface(canvasElement, this);\n }\n notifyResized(frame) {\n this.mWinFrame.set(frame.left, frame.top, frame.right, frame.bottom);\n this.requestLayout();\n if (this.mSurface)\n this.mSurface.notifyBoundChange();\n }\n setView(view) {\n if (this.mView == null) {\n this.mView = view;\n this.mAdded = true;\n this.requestLayout();\n view.assignParent(this);\n this.mAddedTouchMode = true;\n let syntheticInputStage = new SyntheticInputStage(this);\n let viewPostImeStage = new ViewPostImeInputStage(this, syntheticInputStage);\n let earlyPostImeStage = new EarlyPostImeInputStage(this, viewPostImeStage);\n this.mFirstInputStage = earlyPostImeStage;\n }\n }\n getView() {\n return this.mView;\n }\n getHostVisibility() {\n return this.mView.getVisibility();\n }\n scheduleTraversals() {\n if (!this.mTraversalScheduled) {\n this.mTraversalScheduled = true;\n this.mHandler.postAsTraversal(this.mTraversalRunnable);\n }\n }\n unscheduleTraversals() {\n if (this.mTraversalScheduled) {\n this.mTraversalScheduled = false;\n this.mHandler.removeCallbacks(this.mTraversalRunnable);\n }\n }\n doTraversal() {\n if (this.mTraversalScheduled) {\n this.mTraversalScheduled = false;\n this.performTraversals();\n }\n }\n measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight) {\n let windowSizeMayChange = false;\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_LAYOUT)\n Log.v(ViewRootImpl.TAG, \"Measuring \" + host + \" in display \" + desiredWindowWidth\n + \"x\" + desiredWindowHeight + \"...\");\n let childWidthMeasureSpec = ViewRootImpl.getRootMeasureSpec(desiredWindowWidth, lp.width);\n let childHeightMeasureSpec = ViewRootImpl.getRootMeasureSpec(desiredWindowHeight, lp.height);\n this.performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);\n if (this.mWidth != host.getMeasuredWidth() || this.mHeight != host.getMeasuredHeight()) {\n windowSizeMayChange = true;\n }\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals -- after measure\");\n host.debug();\n }\n return windowSizeMayChange;\n }\n static getRootMeasureSpec(windowSize, rootDimension) {\n let MeasureSpec = View.MeasureSpec;\n let measureSpec;\n switch (rootDimension) {\n case view_2.ViewGroup.LayoutParams.MATCH_PARENT:\n measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.EXACTLY);\n break;\n case view_2.ViewGroup.LayoutParams.WRAP_CONTENT:\n measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.AT_MOST);\n break;\n default:\n measureSpec = MeasureSpec.makeMeasureSpec(rootDimension, MeasureSpec.EXACTLY);\n break;\n }\n return measureSpec;\n }\n performTraversals() {\n let host = this.mView;\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals\");\n host.debug();\n }\n if (host == null || !this.mAdded)\n return;\n this.mIsInTraversal = true;\n this.mWillDrawSoon = true;\n let windowSizeMayChange = false;\n let newSurface = false;\n let surfaceChanged = false;\n let lp = new view_2.ViewGroup.LayoutParams(view_2.ViewGroup.LayoutParams.MATCH_PARENT, view_2.ViewGroup.LayoutParams.MATCH_PARENT);\n let desiredWindowWidth;\n let desiredWindowHeight;\n let viewVisibility = this.getHostVisibility();\n let viewVisibilityChanged = this.mViewVisibility != viewVisibility;\n let params = null;\n let frame = this.mWinFrame;\n desiredWindowWidth = frame.width();\n desiredWindowHeight = frame.height();\n if (this.mFirst) {\n this.mFullRedrawNeeded = true;\n this.mLayoutRequested = true;\n viewVisibilityChanged = false;\n }\n else {\n if (desiredWindowWidth != this.mWidth || desiredWindowHeight != this.mHeight) {\n if (ViewRootImpl.DEBUG_ORIENTATION) {\n Log.v(ViewRootImpl.TAG, \"View \" + host + \" resized to: \" + frame);\n }\n this.mFullRedrawNeeded = true;\n this.mLayoutRequested = true;\n windowSizeMayChange = true;\n }\n }\n if (viewVisibilityChanged) {\n }\n ViewRootImpl.getRunQueue(this).executeActions(this.mHandler);\n let layoutRequested = this.mLayoutRequested;\n if (layoutRequested) {\n if (this.mFirst) {\n this.mInTouchMode = !this.mAddedTouchMode;\n this.ensureTouchModeLocally(this.mAddedTouchMode);\n }\n else {\n if (lp.width < 0 || lp.height < 0) {\n windowSizeMayChange = true;\n }\n }\n windowSizeMayChange = this.measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight) || windowSizeMayChange;\n }\n if (layoutRequested) {\n this.mLayoutRequested = false;\n }\n let windowShouldResize = layoutRequested && windowSizeMayChange\n && ((this.mWidth != host.getMeasuredWidth() || this.mHeight != host.getMeasuredHeight())\n || (lp.width < 0 && frame.width() !== desiredWindowWidth && frame.width() !== this.mWidth)\n || (lp.height < 0 && frame.height() !== desiredWindowHeight && frame.height() !== this.mHeight));\n if (this.mFirst || windowShouldResize || viewVisibilityChanged) {\n if (ViewRootImpl.DEBUG_LAYOUT) {\n Log.i(ViewRootImpl.TAG, \"host=w:\" + host.getMeasuredWidth() + \", h:\" +\n host.getMeasuredHeight() + \", params=\" + params);\n }\n if (ViewRootImpl.DEBUG_ORIENTATION)\n Log.v(ViewRootImpl.TAG, \"Relayout returned: frame=\" + frame);\n if (this.mWidth != frame.width() || this.mHeight != frame.height()) {\n this.mWidth = frame.width();\n this.mHeight = frame.height();\n }\n if (this.mWidth != host.getMeasuredWidth()\n || this.mHeight != host.getMeasuredHeight()) {\n let childWidthMeasureSpec = ViewRootImpl.getRootMeasureSpec(this.mWidth, lp.width);\n let childHeightMeasureSpec = ViewRootImpl.getRootMeasureSpec(this.mHeight, lp.height);\n if (ViewRootImpl.DEBUG_LAYOUT)\n Log.v(ViewRootImpl.TAG, \"Ooops, something changed! mWidth=\"\n + this.mWidth + \" measuredWidth=\" + host.getMeasuredWidth()\n + \" mHeight=\" + this.mHeight\n + \" measuredHeight=\" + host.getMeasuredHeight());\n this.performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);\n layoutRequested = true;\n }\n }\n else {\n }\n const didLayout = layoutRequested;\n let triggerGlobalLayoutListener = didLayout;\n if (didLayout) {\n this.performLayout(lp, desiredWindowWidth, desiredWindowHeight);\n if (ViewRootImpl.DBG) {\n System.out.println(\"======================================\");\n System.out.println(\"performTraversals -- after setFrame\");\n host.debug();\n }\n }\n if (triggerGlobalLayoutListener) {\n this.mTreeObserver.dispatchOnGlobalLayout();\n }\n let skipDraw = false;\n if (this.mFirst) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: mView.hasFocus()=\"\n + this.mView.hasFocus());\n if (this.mView != null) {\n if (!this.mView.hasFocus()) {\n this.mView.requestFocus(View.FOCUS_FORWARD);\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: requested focused view=\"\n + this.mView.findFocus());\n }\n else {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE)\n Log.v(ViewRootImpl.TAG, \"First: existing focused view=\"\n + this.mView.findFocus());\n }\n }\n }\n this.mFirst = false;\n this.mWillDrawSoon = false;\n this.mViewVisibility = viewVisibility;\n let cancelDraw = this.mTreeObserver.dispatchOnPreDraw() ||\n viewVisibility != View.VISIBLE;\n if (!cancelDraw) {\n if (!skipDraw) {\n this.performDraw();\n }\n }\n else {\n if (viewVisibility == View.VISIBLE) {\n this.scheduleTraversals();\n }\n }\n this.mIsInTraversal = false;\n this.checkContinueTraversalsNextFrame();\n }\n performLayout(lp, desiredWindowWidth, desiredWindowHeight) {\n this.mLayoutRequested = false;\n this.mInLayout = true;\n let host = this.mView;\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_LAYOUT) {\n Log.v(ViewRootImpl.TAG, \"Laying out \" + host + \" to (\" +\n host.getMeasuredWidth() + \", \" + host.getMeasuredHeight() + \")\");\n }\n host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());\n this.mInLayout = false;\n let numViewsRequestingLayout = this.mLayoutRequesters.length;\n if (numViewsRequestingLayout > 0) {\n let validLayoutRequesters = this.getValidLayoutRequesters(this.mLayoutRequesters, false);\n if (validLayoutRequesters != null) {\n this.mHandlingLayoutInLayoutRequest = true;\n let numValidRequests = validLayoutRequesters.length;\n for (let i = 0; i < numValidRequests; ++i) {\n let view = validLayoutRequesters[i];\n Log.w(\"View\", \"requestLayout() improperly called by \" + view +\n \" during layout: running second layout pass\");\n view.requestLayout();\n }\n this.measureHierarchy(host, lp, desiredWindowWidth, desiredWindowHeight);\n this.mInLayout = true;\n host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());\n this.mHandlingLayoutInLayoutRequest = false;\n validLayoutRequesters = this.getValidLayoutRequesters(this.mLayoutRequesters, true);\n if (validLayoutRequesters != null) {\n let finalRequesters = validLayoutRequesters;\n ViewRootImpl.getRunQueue(this).post({\n run() {\n let numValidRequests = finalRequesters.length;\n for (let i = 0; i < numValidRequests; ++i) {\n const view = finalRequesters[i];\n Log.w(\"View\", \"requestLayout() improperly called by \" + view +\n \" during second layout pass: posting in next frame\");\n view.requestLayout();\n }\n }\n });\n }\n }\n }\n this.mInLayout = false;\n }\n getValidLayoutRequesters(layoutRequesters, secondLayoutRequests) {\n let numViewsRequestingLayout = layoutRequesters.length;\n let validLayoutRequesters = null;\n for (let i = 0; i < numViewsRequestingLayout; ++i) {\n let view = layoutRequesters[i];\n if (view != null && view.mAttachInfo != null && view.mParent != null &&\n (secondLayoutRequests || (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) ==\n View.PFLAG_FORCE_LAYOUT)) {\n let gone = false;\n let parent = view;\n while (parent != null) {\n if ((parent.mViewFlags & View.VISIBILITY_MASK) == View.GONE) {\n gone = true;\n break;\n }\n if (parent.mParent instanceof View) {\n parent = parent.mParent;\n }\n else {\n parent = null;\n }\n }\n if (!gone) {\n if (validLayoutRequesters == null) {\n validLayoutRequesters = [];\n }\n validLayoutRequesters.push(view);\n }\n }\n }\n if (!secondLayoutRequests) {\n for (let i = 0; i < numViewsRequestingLayout; ++i) {\n let view = layoutRequesters[i];\n while (view != null &&\n (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) != 0) {\n view.mPrivateFlags &= ~View.PFLAG_FORCE_LAYOUT;\n if (view.mParent instanceof View) {\n view = view.mParent;\n }\n else {\n view = null;\n }\n }\n }\n }\n layoutRequesters.splice(0, layoutRequesters.length);\n return validLayoutRequesters;\n }\n performMeasure(childWidthMeasureSpec, childHeightMeasureSpec) {\n this.mView.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n isInLayout() {\n return this.mInLayout;\n }\n requestLayoutDuringLayout(view) {\n if (view.mParent == null || view.mAttachInfo == null) {\n return true;\n }\n if (this.mLayoutRequesters.indexOf(view) === -1) {\n this.mLayoutRequesters.push(view);\n }\n if (!this.mHandlingLayoutInLayoutRequest) {\n return true;\n }\n else {\n return false;\n }\n }\n trackFPS() {\n let nowTime = System.currentTimeMillis();\n if (this.mFpsStartTime < 0) {\n this.mFpsStartTime = this.mFpsPrevTime = nowTime;\n this.mFpsNumFrames = 0;\n }\n else {\n this.mFpsNumFrames++;\n let frameTime = nowTime - this.mFpsPrevTime;\n let totalTime = nowTime - this.mFpsStartTime;\n this.mFpsPrevTime = nowTime;\n if (totalTime > 1000) {\n let fps = this.mFpsNumFrames * 1000 / totalTime;\n Log.v(ViewRootImpl.TAG, \"FPS:\\t\" + fps);\n this.mSurface.showFps(fps);\n this.mFpsStartTime = nowTime;\n this.mFpsNumFrames = 0;\n }\n }\n }\n performDraw() {\n let fullRedrawNeeded = this.mFullRedrawNeeded;\n this.mFullRedrawNeeded = false;\n this.mIsDrawing = true;\n try {\n this.draw(fullRedrawNeeded);\n }\n finally {\n this.mIsDrawing = false;\n }\n }\n draw(fullRedrawNeeded) {\n let surface = this.mSurface;\n if (!surface.isValid()) {\n return;\n }\n if (ViewRootImpl.DEBUG_FPS) {\n this.trackFPS();\n }\n if (this.mViewScrollChanged) {\n this.mViewScrollChanged = false;\n this.mTreeObserver.dispatchOnScrollChanged();\n }\n if (fullRedrawNeeded) {\n this.mIgnoreDirtyState = true;\n this.mDirty.set(0, 0, this.mWidth, this.mHeight);\n }\n if (ViewRootImpl.DEBUG_ORIENTATION || ViewRootImpl.DEBUG_DRAW) {\n Log.v(ViewRootImpl.TAG, \"Draw \" + this.mView + \", width=\" + this.mWidth + \", height=\" + this.mHeight + \", dirty=\" + this.mDirty);\n }\n this.mTreeObserver.dispatchOnDraw();\n this.drawSoftware();\n }\n drawSoftware() {\n let canvas;\n try {\n canvas = this.mSurface.lockCanvas(this.mDirty);\n if (!canvas)\n return;\n }\n catch (e) {\n return;\n }\n this.mDirty.setEmpty();\n this.mIsAnimating = false;\n this.mDrawingTime = SystemClock.uptimeMillis();\n this.mView.mPrivateFlags |= View.PFLAG_DRAWN;\n this.mSetIgnoreDirtyState = false;\n if (!this.mSurface['lastRenderCanvas'])\n this.mView.draw(canvas);\n if (!this.mSetIgnoreDirtyState) {\n this.mIgnoreDirtyState = false;\n }\n this.mSurface.unlockCanvasAndPost(this.mSurface['lastRenderCanvas'] || canvas);\n if (ViewRootImpl.LOCAL_LOGV) {\n Log.v(ViewRootImpl.TAG, \"Surface unlockCanvasAndPost\");\n }\n }\n checkContinueTraversalsNextFrame() {\n const continueFrame = ViewRootImpl.DEBUG_FPS ? 60 : 5;\n if (!this.mTraversalScheduled && this._continueTraversalesCount < continueFrame) {\n this._continueTraversalesCount++;\n this.scheduleTraversals();\n }\n else {\n this._continueTraversalesCount = 0;\n }\n }\n isLayoutRequested() {\n return this.mLayoutRequested;\n }\n dispatchInvalidateDelayed(view, delayMilliseconds) {\n let msg = this.mHandler.obtainMessage(ViewRootHandler.MSG_INVALIDATE, view);\n this.mHandler.sendMessageDelayed(msg, delayMilliseconds);\n }\n dispatchInvalidateRectDelayed(info, delayMilliseconds) {\n let msg = this.mHandler.obtainMessage(ViewRootHandler.MSG_INVALIDATE_RECT, info);\n this.mHandler.sendMessageDelayed(msg, delayMilliseconds);\n }\n dispatchInvalidateOnAnimation(view) {\n this.mInvalidateOnAnimationRunnable.addView(view);\n }\n dispatchInvalidateRectOnAnimation(info) {\n this.mInvalidateOnAnimationRunnable.addViewRect(info);\n }\n cancelInvalidate(view) {\n this.mHandler.removeMessages(ViewRootHandler.MSG_INVALIDATE, view);\n this.mHandler.removeMessages(ViewRootHandler.MSG_INVALIDATE_RECT, view);\n this.mInvalidateOnAnimationRunnable.removeView(view);\n }\n getParent() {\n return null;\n }\n requestLayout() {\n if (!this.mHandlingLayoutInLayoutRequest) {\n this.mLayoutRequested = true;\n this.scheduleTraversals();\n }\n }\n invalidate() {\n this.mDirty.set(0, 0, this.mWidth, this.mHeight);\n this.scheduleTraversals();\n }\n invalidateWorld(view) {\n view.invalidate();\n if (view instanceof view_2.ViewGroup) {\n let parent = view;\n for (let i = 0; i < parent.getChildCount(); i++) {\n this.invalidateWorld(parent.getChildAt(i));\n }\n }\n }\n invalidateChild(child, dirty) {\n this.invalidateChildInParent(null, dirty);\n }\n invalidateChildInParent(location, dirty) {\n if (ViewRootImpl.DEBUG_DRAW)\n Log.v(ViewRootImpl.TAG, \"Invalidate child: \" + dirty);\n if (dirty == null) {\n this.invalidate();\n return null;\n }\n else if (dirty.isEmpty() && !this.mIsAnimating) {\n return null;\n }\n const localDirty = this.mDirty;\n if (!localDirty.isEmpty() && !localDirty.contains(dirty)) {\n this.mSetIgnoreDirtyState = true;\n this.mIgnoreDirtyState = true;\n }\n localDirty.union(dirty.left, dirty.top, dirty.right, dirty.bottom);\n const intersected = localDirty.intersect(0, 0, this.mWidth, this.mHeight);\n if (!intersected) {\n localDirty.setEmpty();\n }\n if (!this.mWillDrawSoon && (intersected || this.mIsAnimating)) {\n this.scheduleTraversals();\n }\n return null;\n }\n requestChildFocus(child, focused) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE) {\n Log.v(ViewRootImpl.TAG, \"Request child focus: focus now \" + focused);\n }\n this.scheduleTraversals();\n }\n clearChildFocus(focused) {\n if (ViewRootImpl.DEBUG_INPUT_RESIZE) {\n Log.v(ViewRootImpl.TAG, \"Request child focus: focus now \" + focused);\n }\n this.scheduleTraversals();\n }\n getChildVisibleRect(child, r, offset) {\n if (child != this.mView) {\n throw new Error(\"child is not mine, honest!\");\n }\n return r.intersect(0, 0, this.mWidth, this.mHeight);\n }\n focusSearch(focused, direction) {\n if (!(this.mView instanceof view_2.ViewGroup)) {\n return null;\n }\n if (this.mView instanceof view_2.WindowManager.Layout) {\n let topWindow = this.mView.getTopFocusableWindowView();\n if (topWindow)\n return view_2.FocusFinder.getInstance().findNextFocus(topWindow, focused, direction);\n }\n return view_2.FocusFinder.getInstance().findNextFocus(this.mView, focused, direction);\n }\n bringChildToFront(child) {\n }\n focusableViewAvailable(v) {\n if (this.mView != null) {\n if (!this.mView.hasFocus()) {\n v.requestFocus();\n }\n else {\n let focused = this.mView.findFocus();\n if (focused instanceof view_2.ViewGroup) {\n let group = focused;\n if (group.getDescendantFocusability() == view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS\n && ViewRootImpl.isViewDescendantOf(v, focused)) {\n v.requestFocus();\n }\n }\n }\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof view_2.ViewGroup) && ViewRootImpl.isViewDescendantOf(theParent, parent);\n }\n childDrawableStateChanged(child) {\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n return false;\n }\n childHasTransientStateChanged(child, hasTransientState) {\n }\n dispatchInputEvent(event) {\n this.deliverInputEvent(event);\n let result = event[InputStage.FLAG_FINISHED_HANDLED];\n event[InputStage.FLAG_FINISHED] = false;\n event[InputStage.FLAG_FINISHED_HANDLED] = false;\n let continueToDom = event[ViewRootImpl.ContinueEventToDom];\n event[ViewRootImpl.ContinueEventToDom] = null;\n return result && !continueToDom;\n }\n deliverInputEvent(event) {\n this.mFirstInputStage.deliver(event);\n }\n finishInputEvent(event) {\n }\n checkForLeavingTouchModeAndConsume(event) {\n if (!this.mInTouchMode) {\n return false;\n }\n const action = event.getAction();\n if (action != view_2.KeyEvent.ACTION_DOWN) {\n return false;\n }\n if (ViewRootImpl.isNavigationKey(event)) {\n return this.ensureTouchMode(false);\n }\n if (ViewRootImpl.isTypingKey(event)) {\n this.ensureTouchMode(false);\n return false;\n }\n return false;\n }\n static isNavigationKey(keyEvent) {\n switch (keyEvent.getKeyCode()) {\n case view_2.KeyEvent.KEYCODE_DPAD_LEFT:\n case view_2.KeyEvent.KEYCODE_DPAD_RIGHT:\n case view_2.KeyEvent.KEYCODE_DPAD_UP:\n case view_2.KeyEvent.KEYCODE_DPAD_DOWN:\n case view_2.KeyEvent.KEYCODE_DPAD_CENTER:\n case view_2.KeyEvent.KEYCODE_PAGE_UP:\n case view_2.KeyEvent.KEYCODE_PAGE_DOWN:\n case view_2.KeyEvent.KEYCODE_MOVE_HOME:\n case view_2.KeyEvent.KEYCODE_MOVE_END:\n case view_2.KeyEvent.KEYCODE_TAB:\n case view_2.KeyEvent.KEYCODE_SPACE:\n case view_2.KeyEvent.KEYCODE_ENTER:\n return true;\n }\n return false;\n }\n static isTypingKey(keyEvent) {\n try {\n return keyEvent.mIsTypingKey;\n }\n catch (e) {\n console.warn(e);\n }\n return true;\n }\n ensureTouchMode(inTouchMode) {\n if (ViewRootImpl.DBG)\n Log.d(\"touchmode\", \"ensureTouchMode(\" + inTouchMode + \"), current \"\n + \"touch mode is \" + this.mInTouchMode);\n if (this.mInTouchMode == inTouchMode)\n return false;\n return this.ensureTouchModeLocally(inTouchMode);\n }\n ensureTouchModeLocally(inTouchMode) {\n if (ViewRootImpl.DBG)\n Log.d(\"touchmode\", \"ensureTouchModeLocally(\" + inTouchMode + \"), current \"\n + \"touch mode is \" + this.mInTouchMode);\n if (this.mInTouchMode == inTouchMode)\n return false;\n this.mInTouchMode = inTouchMode;\n this.mTreeObserver.dispatchOnTouchModeChanged(inTouchMode);\n return (inTouchMode) ? this.enterTouchMode() : this.leaveTouchMode();\n }\n enterTouchMode() {\n if (this.mView != null && this.mView.hasFocus()) {\n const focused = this.mView.findFocus();\n if (focused != null && !focused.isFocusableInTouchMode()) {\n const ancestorToTakeFocus = ViewRootImpl.findAncestorToTakeFocusInTouchMode(focused);\n if (ancestorToTakeFocus != null) {\n return ancestorToTakeFocus.requestFocus();\n }\n else {\n focused.clearFocusInternal(true, false);\n return true;\n }\n }\n }\n return false;\n }\n static findAncestorToTakeFocusInTouchMode(focused) {\n let parent = focused.getParent();\n while (parent instanceof view_2.ViewGroup) {\n const vgParent = parent;\n if (vgParent.getDescendantFocusability() == view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS\n && vgParent.isFocusableInTouchMode()) {\n return vgParent;\n }\n if (vgParent.isRootNamespace()) {\n return null;\n }\n else {\n parent = vgParent.getParent();\n }\n }\n return null;\n }\n leaveTouchMode() {\n if (this.mView != null) {\n if (this.mView.hasFocus()) {\n let focusedView = this.mView.findFocus();\n if (!(focusedView instanceof view_2.ViewGroup)) {\n return false;\n }\n else if (focusedView.getDescendantFocusability() !=\n view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS) {\n return false;\n }\n }\n const focused = this.focusSearch(null, View.FOCUS_DOWN);\n if (focused != null) {\n return focused.requestFocus(View.FOCUS_DOWN);\n }\n }\n return false;\n }\n static getRunQueue(viewRoot) {\n if (viewRoot) {\n if (!viewRoot.mRunQueue)\n viewRoot.mRunQueue = new ViewRootImpl.RunQueue();\n return viewRoot.mRunQueue;\n }\n else {\n if (!this.RunQueueInstance) {\n this.RunQueueInstance = new RunQueueForNoViewRoot();\n }\n return this.RunQueueInstance;\n }\n }\n }\n ViewRootImpl.TAG = \"ViewRootImpl\";\n ViewRootImpl.DBG = Log.View_DBG;\n ViewRootImpl.LOCAL_LOGV = ViewRootImpl.DBG;\n ViewRootImpl.DEBUG_DRAW = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_LAYOUT = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_INPUT_RESIZE = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_ORIENTATION = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_CONFIGURATION = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.DEBUG_FPS = false || ViewRootImpl.LOCAL_LOGV;\n ViewRootImpl.ContinueEventToDom = Symbol();\n view_2.ViewRootImpl = ViewRootImpl;\n (function (ViewRootImpl) {\n class RunQueue {\n constructor() {\n this.mActions = [];\n }\n post(action) {\n this.postDelayed(action, 0);\n }\n postDelayed(action, delayMillis) {\n let handlerAction = {\n action: action,\n delay: delayMillis\n };\n this.mActions.push(handlerAction);\n }\n removeCallbacks(action) {\n this.mActions = this.mActions.filter((item) => {\n return item.action == action;\n });\n }\n executeActions(handler) {\n for (let handlerAction of this.mActions) {\n handler.postDelayed(handlerAction.action, handlerAction.delay);\n }\n this.mActions = [];\n }\n }\n ViewRootImpl.RunQueue = RunQueue;\n })(ViewRootImpl = view_2.ViewRootImpl || (view_2.ViewRootImpl = {}));\n class RunQueueForNoViewRoot extends ViewRootImpl.RunQueue {\n postDelayed(action, delayMillis) {\n RunQueueForNoViewRoot.Handler.postDelayed(action, delayMillis);\n }\n removeCallbacks(action) {\n RunQueueForNoViewRoot.Handler.removeCallbacks(action);\n }\n }\n RunQueueForNoViewRoot.Handler = new Handler();\n class TraversalRunnable {\n constructor(impl) {\n this.ViewRootImpl_this = impl;\n }\n run() {\n this.ViewRootImpl_this.doTraversal();\n }\n }\n class InvalidateOnAnimationRunnable {\n constructor(handler) {\n this.mPosted = false;\n this.mViews = new Set();\n this.mViewRects = new Map();\n this.mHandler = handler;\n }\n addView(view) {\n this.mViews.add(view);\n this.postIfNeededLocked();\n }\n addViewRect(info) {\n this.mViewRects.set(info.target, info);\n this.postIfNeededLocked();\n }\n removeView(view) {\n this.mViews.delete(view);\n this.mViewRects.delete(view);\n if (this.mPosted && this.mViews.size === 0 && this.mViewRects.size === 0) {\n this.mHandler.removeCallbacks(this);\n this.mPosted = false;\n }\n }\n run() {\n this.mPosted = false;\n for (let view of this.mViews) {\n view.invalidate();\n }\n this.mViews.clear();\n for (let info of this.mViewRects.values()) {\n info.target.invalidate(info.left, info.top, info.right, info.bottom);\n info.recycle();\n }\n this.mViewRects.clear();\n }\n postIfNeededLocked() {\n if (!this.mPosted) {\n this.mHandler.post(this);\n this.mPosted = true;\n }\n }\n }\n class ViewRootHandler extends Handler {\n handleMessage(msg) {\n switch (msg.what) {\n case ViewRootHandler.MSG_INVALIDATE:\n msg.obj.invalidate();\n break;\n case ViewRootHandler.MSG_INVALIDATE_RECT:\n const info = msg.obj;\n info.target.invalidate(info.left, info.top, info.right, info.bottom);\n info.recycle();\n break;\n }\n }\n }\n ViewRootHandler.MSG_INVALIDATE = 1;\n ViewRootHandler.MSG_INVALIDATE_RECT = 2;\n class InputStage {\n constructor(impl, next) {\n this.ViewRootImpl_this = impl;\n this.mNext = next;\n }\n deliver(event) {\n if (event[InputStage.FLAG_FINISHED]) {\n this.forward(event);\n }\n else if (this.shouldDropInputEvent(event)) {\n this.finish(event, false);\n }\n else {\n this.apply(event, this.onProcess(event));\n }\n }\n finish(event, handled) {\n event[InputStage.FLAG_FINISHED] = true;\n if (handled) {\n event[InputStage.FLAG_FINISHED_HANDLED] = true;\n }\n this.forward(event);\n }\n forward(event) {\n this.onDeliverToNext(event);\n }\n apply(event, result) {\n if (result == InputStage.FORWARD) {\n this.forward(event);\n }\n else if (result == InputStage.FINISH_HANDLED) {\n this.finish(event, true);\n }\n else if (result == InputStage.FINISH_NOT_HANDLED) {\n this.finish(event, false);\n }\n else {\n throw new Error(\"Invalid result: \" + result);\n }\n }\n onDeliverToNext(event) {\n if (this.mNext != null) {\n this.mNext.deliver(event);\n }\n else {\n this.ViewRootImpl_this.finishInputEvent(event);\n }\n }\n onProcess(event) {\n return InputStage.FORWARD;\n }\n shouldDropInputEvent(event) {\n if (this.ViewRootImpl_this.mView == null || !this.ViewRootImpl_this.mAdded) {\n Log.w(ViewRootImpl.TAG, \"Dropping event due to root view being removed: \" + event);\n return true;\n }\n return false;\n }\n }\n InputStage.FLAG_FINISHED = Symbol();\n InputStage.FLAG_FINISHED_HANDLED = Symbol();\n InputStage.FORWARD = 0;\n InputStage.FINISH_HANDLED = 1;\n InputStage.FINISH_NOT_HANDLED = 2;\n class EarlyPostImeInputStage extends InputStage {\n onProcess(event) {\n if (event instanceof view_2.MotionEvent) {\n return this.processMotionEvent(event);\n }\n else if (event instanceof view_2.KeyEvent) {\n return this.processKeyEvent(event);\n }\n return InputStage.FORWARD;\n }\n processKeyEvent(event) {\n if (this.ViewRootImpl_this.checkForLeavingTouchModeAndConsume(event)) {\n return InputStage.FINISH_HANDLED;\n }\n return InputStage.FORWARD;\n }\n processMotionEvent(event) {\n const action = event.getAction();\n if (action == view_2.MotionEvent.ACTION_DOWN || action == view_2.MotionEvent.ACTION_SCROLL) {\n this.ViewRootImpl_this.ensureTouchMode(true);\n }\n event.offsetLocation(-this.ViewRootImpl_this.mWinFrame.left, -this.ViewRootImpl_this.mWinFrame.top);\n return InputStage.FORWARD;\n }\n }\n class ViewPostImeInputStage extends InputStage {\n onProcess(event) {\n if (event instanceof view_2.KeyEvent) {\n return this.processKeyEvent(event);\n }\n else if (event instanceof view_2.MotionEvent) {\n if (event.isTouchEvent()) {\n return this.processTouchEvent(event);\n }\n else {\n return this.processGenericMotionEvent(event);\n }\n }\n return InputStage.FORWARD;\n }\n processKeyEvent(event) {\n let mView = this.ViewRootImpl_this.mView;\n if (this.ViewRootImpl_this.mView.dispatchKeyEvent(event)) {\n return InputStage.FINISH_HANDLED;\n }\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n if (event.getAction() == view_2.KeyEvent.ACTION_DOWN\n && event.isCtrlPressed()\n && event.getRepeatCount() == 0) {\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n }\n if (this.shouldDropInputEvent(event)) {\n return InputStage.FINISH_NOT_HANDLED;\n }\n if (event.getAction() == view_2.KeyEvent.ACTION_DOWN) {\n let direction = 0;\n switch (event.getKeyCode()) {\n case view_2.KeyEvent.KEYCODE_DPAD_LEFT:\n direction = View.FOCUS_LEFT;\n break;\n case view_2.KeyEvent.KEYCODE_DPAD_RIGHT:\n direction = View.FOCUS_RIGHT;\n break;\n case view_2.KeyEvent.KEYCODE_DPAD_UP:\n direction = View.FOCUS_UP;\n break;\n case view_2.KeyEvent.KEYCODE_DPAD_DOWN:\n direction = View.FOCUS_DOWN;\n break;\n case view_2.KeyEvent.KEYCODE_TAB:\n if (event.isShiftPressed()) {\n direction = View.FOCUS_BACKWARD;\n }\n else {\n direction = View.FOCUS_FORWARD;\n }\n break;\n }\n if (direction != 0) {\n let focused = mView.findFocus();\n if (focused != null) {\n let v = focused.focusSearch(direction);\n if (v != null && v != focused) {\n focused.getFocusedRect(this.ViewRootImpl_this.mTempRect);\n if (mView instanceof view_2.ViewGroup) {\n mView.offsetDescendantRectToMyCoords(focused, this.ViewRootImpl_this.mTempRect);\n mView.offsetRectIntoDescendantCoords(v, this.ViewRootImpl_this.mTempRect);\n }\n if (v.requestFocus(direction, this.ViewRootImpl_this.mTempRect)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n if (mView.dispatchUnhandledMove(focused, direction)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n else {\n let v = this.ViewRootImpl_this.focusSearch(null, direction);\n if (v != null && v.requestFocus(direction)) {\n return InputStage.FINISH_HANDLED;\n }\n }\n }\n }\n return InputStage.FORWARD;\n }\n processGenericMotionEvent(event) {\n if (this.ViewRootImpl_this.mView.dispatchGenericMotionEvent(event)) {\n return InputStage.FINISH_HANDLED;\n }\n return InputStage.FORWARD;\n }\n processTouchEvent(event) {\n let handled = this.ViewRootImpl_this.mView.dispatchTouchEvent(event);\n return handled ? InputStage.FINISH_HANDLED : InputStage.FORWARD;\n }\n }\n class SyntheticInputStage extends InputStage {\n onProcess(event) {\n return super.onProcess(event);\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_3) {\n var View = android.view.View;\n var Rect = android.graphics.Rect;\n var ArrayList = java.util.ArrayList;\n class FocusFinder {\n constructor() {\n this.mFocusedRect = new Rect();\n this.mOtherRect = new Rect();\n this.mBestCandidateRect = new Rect();\n this.mSequentialFocusComparator = new SequentialFocusComparator();\n this.mTempList = new ArrayList();\n }\n static getInstance() {\n if (!FocusFinder.sFocusFinder) {\n FocusFinder.sFocusFinder = new FocusFinder();\n }\n return FocusFinder.sFocusFinder;\n }\n findNextFocus(root, focused, direction) {\n return this._findNextFocus(root, focused, null, direction);\n }\n findNextFocusFromRect(root, focusedRect, direction) {\n this.mFocusedRect.set(focusedRect);\n return this._findNextFocus(root, null, this.mFocusedRect, direction);\n }\n _findNextFocus(root, focused, focusedRect, direction) {\n let next = null;\n if (focused != null) {\n next = this.findNextUserSpecifiedFocus(root, focused, direction);\n }\n if (next != null) {\n return next;\n }\n let focusables = this.mTempList;\n try {\n focusables.clear();\n root.addFocusables(focusables, direction);\n if (!focusables.isEmpty()) {\n next = this.__findNextFocus(root, focused, focusedRect, direction, focusables);\n }\n }\n finally {\n focusables.clear();\n }\n return next;\n }\n findNextUserSpecifiedFocus(root, focused, direction) {\n let userSetNextFocus = focused.findUserSetNextFocus(root, direction);\n if (userSetNextFocus != null && userSetNextFocus.isFocusable()\n && (!userSetNextFocus.isInTouchMode()\n || userSetNextFocus.isFocusableInTouchMode())) {\n return userSetNextFocus;\n }\n return null;\n }\n __findNextFocus(root, focused, focusedRect, direction, focusables) {\n if (focused != null) {\n if (focusedRect == null) {\n focusedRect = this.mFocusedRect;\n }\n focused.getFocusedRect(focusedRect);\n root.offsetDescendantRectToMyCoords(focused, focusedRect);\n }\n else {\n if (focusedRect == null) {\n focusedRect = this.mFocusedRect;\n switch (direction) {\n case View.FOCUS_RIGHT:\n case View.FOCUS_DOWN:\n this.setFocusTopLeft(root, focusedRect);\n break;\n case View.FOCUS_FORWARD:\n this.setFocusTopLeft(root, focusedRect);\n break;\n case View.FOCUS_LEFT:\n case View.FOCUS_UP:\n this.setFocusBottomRight(root, focusedRect);\n break;\n case View.FOCUS_BACKWARD:\n this.setFocusBottomRight(root, focusedRect);\n }\n }\n }\n switch (direction) {\n case View.FOCUS_FORWARD:\n case View.FOCUS_BACKWARD:\n return this.findNextFocusInRelativeDirection(focusables, root, focused, focusedRect, direction);\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return this.findNextFocusInAbsoluteDirection(focusables, root, focused, focusedRect, direction);\n default:\n throw new Error(\"Unknown direction: \" + direction);\n }\n }\n findNextFocusInRelativeDirection(focusables, root, focused, focusedRect, direction) {\n try {\n this.mSequentialFocusComparator.setRoot(root);\n this.mSequentialFocusComparator.sort(focusables);\n }\n finally {\n this.mSequentialFocusComparator.recycle();\n }\n const count = focusables.size();\n switch (direction) {\n case View.FOCUS_FORWARD:\n return FocusFinder.getNextFocusable(focused, focusables, count);\n case View.FOCUS_BACKWARD:\n return FocusFinder.getPreviousFocusable(focused, focusables, count);\n }\n return focusables.get(count - 1);\n }\n setFocusBottomRight(root, focusedRect) {\n const rootBottom = root.getScrollY() + root.getHeight();\n const rootRight = root.getScrollX() + root.getWidth();\n focusedRect.set(rootRight, rootBottom, rootRight, rootBottom);\n }\n setFocusTopLeft(root, focusedRect) {\n const rootTop = root.getScrollY();\n const rootLeft = root.getScrollX();\n focusedRect.set(rootLeft, rootTop, rootLeft, rootTop);\n }\n findNextFocusInAbsoluteDirection(focusables, root, focused, focusedRect, direction) {\n this.mBestCandidateRect.set(focusedRect);\n switch (direction) {\n case View.FOCUS_LEFT:\n this.mBestCandidateRect.offset(focusedRect.width() + 1, 0);\n break;\n case View.FOCUS_RIGHT:\n this.mBestCandidateRect.offset(-(focusedRect.width() + 1), 0);\n break;\n case View.FOCUS_UP:\n this.mBestCandidateRect.offset(0, focusedRect.height() + 1);\n break;\n case View.FOCUS_DOWN:\n this.mBestCandidateRect.offset(0, -(focusedRect.height() + 1));\n }\n let closest = null;\n let numFocusables = focusables.size();\n for (let i = 0; i < numFocusables; i++) {\n let focusable = focusables.get(i);\n if (focusable == focused || focusable == root)\n continue;\n focusable.getFocusedRect(this.mOtherRect);\n root.offsetDescendantRectToMyCoords(focusable, this.mOtherRect);\n if (this.isBetterCandidate(direction, focusedRect, this.mOtherRect, this.mBestCandidateRect)) {\n this.mBestCandidateRect.set(this.mOtherRect);\n closest = focusable;\n }\n }\n return closest;\n }\n static getNextFocusable(focused, focusables, count) {\n if (focused != null) {\n let position = focusables.lastIndexOf(focused);\n if (position >= 0 && position + 1 < count) {\n return focusables.get(position + 1);\n }\n }\n if (!focusables.isEmpty()) {\n return focusables.get(0);\n }\n return null;\n }\n static getPreviousFocusable(focused, focusables, count) {\n if (focused != null) {\n let position = focusables.indexOf(focused);\n if (position > 0) {\n return focusables.get(position - 1);\n }\n }\n if (!focusables.isEmpty()) {\n return focusables.get(count - 1);\n }\n return null;\n }\n isBetterCandidate(direction, source, rect1, rect2) {\n if (!this.isCandidate(source, rect1, direction)) {\n return false;\n }\n if (!this.isCandidate(source, rect2, direction)) {\n return true;\n }\n if (this.beamBeats(direction, source, rect1, rect2)) {\n return true;\n }\n if (this.beamBeats(direction, source, rect2, rect1)) {\n return false;\n }\n return (this.getWeightedDistanceFor(FocusFinder.majorAxisDistance(direction, source, rect1), FocusFinder.minorAxisDistance(direction, source, rect1))\n < this.getWeightedDistanceFor(FocusFinder.majorAxisDistance(direction, source, rect2), FocusFinder.minorAxisDistance(direction, source, rect2)));\n }\n beamBeats(direction, source, rect1, rect2) {\n const rect1InSrcBeam = this.beamsOverlap(direction, source, rect1);\n const rect2InSrcBeam = this.beamsOverlap(direction, source, rect2);\n if (rect2InSrcBeam || !rect1InSrcBeam) {\n return false;\n }\n if (!this.isToDirectionOf(direction, source, rect2)) {\n return true;\n }\n if ((direction == View.FOCUS_LEFT || direction == View.FOCUS_RIGHT)) {\n return true;\n }\n return (FocusFinder.majorAxisDistance(direction, source, rect1)\n < FocusFinder.majorAxisDistanceToFarEdge(direction, source, rect2));\n }\n getWeightedDistanceFor(majorAxisDistance, minorAxisDistance) {\n return 13 * majorAxisDistance * majorAxisDistance\n + minorAxisDistance * minorAxisDistance;\n }\n isCandidate(srcRect, destRect, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return (srcRect.right > destRect.right || srcRect.left >= destRect.right)\n && srcRect.left > destRect.left;\n case View.FOCUS_RIGHT:\n return (srcRect.left < destRect.left || srcRect.right <= destRect.left)\n && srcRect.right < destRect.right;\n case View.FOCUS_UP:\n return (srcRect.bottom > destRect.bottom || srcRect.top >= destRect.bottom)\n && srcRect.top > destRect.top;\n case View.FOCUS_DOWN:\n return (srcRect.top < destRect.top || srcRect.bottom <= destRect.top)\n && srcRect.bottom < destRect.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n beamsOverlap(direction, rect1, rect2) {\n switch (direction) {\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return (rect2.bottom >= rect1.top) && (rect2.top <= rect1.bottom);\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n return (rect2.right >= rect1.left) && (rect2.left <= rect1.right);\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n isToDirectionOf(direction, src, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return src.left >= dest.right;\n case View.FOCUS_RIGHT:\n return src.right <= dest.left;\n case View.FOCUS_UP:\n return src.top >= dest.bottom;\n case View.FOCUS_DOWN:\n return src.bottom <= dest.top;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static majorAxisDistance(direction, source, dest) {\n return Math.max(0, FocusFinder.majorAxisDistanceRaw(direction, source, dest));\n }\n static majorAxisDistanceRaw(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return source.left - dest.right;\n case View.FOCUS_RIGHT:\n return dest.left - source.right;\n case View.FOCUS_UP:\n return source.top - dest.bottom;\n case View.FOCUS_DOWN:\n return dest.top - source.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static majorAxisDistanceToFarEdge(direction, source, dest) {\n return Math.max(1, FocusFinder.majorAxisDistanceToFarEdgeRaw(direction, source, dest));\n }\n static majorAxisDistanceToFarEdgeRaw(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return source.left - dest.left;\n case View.FOCUS_RIGHT:\n return dest.right - source.right;\n case View.FOCUS_UP:\n return source.top - dest.top;\n case View.FOCUS_DOWN:\n return dest.bottom - source.bottom;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n static minorAxisDistance(direction, source, dest) {\n switch (direction) {\n case View.FOCUS_LEFT:\n case View.FOCUS_RIGHT:\n return Math.abs(((source.top + source.height() / 2) -\n ((dest.top + dest.height() / 2))));\n case View.FOCUS_UP:\n case View.FOCUS_DOWN:\n return Math.abs(((source.left + source.width() / 2) -\n ((dest.left + dest.width() / 2))));\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n findNearestTouchable(root, x, y, direction, deltas) {\n let touchables = root.getTouchables();\n let minDistance = Number.MAX_SAFE_INTEGER;\n let closest = null;\n let numTouchables = touchables.size();\n let edgeSlop = view_3.ViewConfiguration.get().getScaledEdgeSlop();\n let closestBounds = new Rect();\n let touchableBounds = this.mOtherRect;\n for (let i = 0; i < numTouchables; i++) {\n let touchable = touchables.get(i);\n touchable.getDrawingRect(touchableBounds);\n root.offsetRectBetweenParentAndChild(touchable, touchableBounds, true, true);\n if (!this.isTouchCandidate(x, y, touchableBounds, direction)) {\n continue;\n }\n let distance = Number.MAX_SAFE_INTEGER;\n switch (direction) {\n case View.FOCUS_LEFT:\n distance = x - touchableBounds.right + 1;\n break;\n case View.FOCUS_RIGHT:\n distance = touchableBounds.left;\n break;\n case View.FOCUS_UP:\n distance = y - touchableBounds.bottom + 1;\n break;\n case View.FOCUS_DOWN:\n distance = touchableBounds.top;\n break;\n }\n if (distance < edgeSlop) {\n if (closest == null ||\n closestBounds.contains(touchableBounds) ||\n (!touchableBounds.contains(closestBounds) && distance < minDistance)) {\n minDistance = distance;\n closest = touchable;\n closestBounds.set(touchableBounds);\n switch (direction) {\n case View.FOCUS_LEFT:\n deltas[0] = -distance;\n break;\n case View.FOCUS_RIGHT:\n deltas[0] = distance;\n break;\n case View.FOCUS_UP:\n deltas[1] = -distance;\n break;\n case View.FOCUS_DOWN:\n deltas[1] = distance;\n break;\n }\n }\n }\n }\n return closest;\n }\n isTouchCandidate(x, y, destRect, direction) {\n switch (direction) {\n case View.FOCUS_LEFT:\n return destRect.left <= x && destRect.top <= y && y <= destRect.bottom;\n case View.FOCUS_RIGHT:\n return destRect.left >= x && destRect.top <= y && y <= destRect.bottom;\n case View.FOCUS_UP:\n return destRect.top <= y && destRect.left <= x && x <= destRect.right;\n case View.FOCUS_DOWN:\n return destRect.top >= y && destRect.left <= x && x <= destRect.right;\n }\n throw new Error(\"direction must be one of \"\n + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.\");\n }\n }\n view_3.FocusFinder = FocusFinder;\n class SequentialFocusComparator {\n constructor() {\n this.mFirstRect = new Rect();\n this.mSecondRect = new Rect();\n this.mIsLayoutRtl = false;\n this.compareFn = (first, second) => {\n if (first == second) {\n return 0;\n }\n this.getRect(first, this.mFirstRect);\n this.getRect(second, this.mSecondRect);\n if (this.mFirstRect.top < this.mSecondRect.top) {\n return -1;\n }\n else if (this.mFirstRect.top > this.mSecondRect.top) {\n return 1;\n }\n else if (this.mFirstRect.left < this.mSecondRect.left) {\n return this.mIsLayoutRtl ? 1 : -1;\n }\n else if (this.mFirstRect.left > this.mSecondRect.left) {\n return this.mIsLayoutRtl ? -1 : 1;\n }\n else if (this.mFirstRect.bottom < this.mSecondRect.bottom) {\n return -1;\n }\n else if (this.mFirstRect.bottom > this.mSecondRect.bottom) {\n return 1;\n }\n else if (this.mFirstRect.right < this.mSecondRect.right) {\n return this.mIsLayoutRtl ? 1 : -1;\n }\n else if (this.mFirstRect.right > this.mSecondRect.right) {\n return this.mIsLayoutRtl ? -1 : 1;\n }\n else {\n return 0;\n }\n };\n }\n recycle() {\n this.mRoot = null;\n }\n setRoot(root) {\n this.mRoot = root;\n }\n getRect(view, rect) {\n view.getDrawingRect(rect);\n this.mRoot.offsetDescendantRectToMyCoords(view, rect);\n }\n sort(array) {\n array.sort(this.compareFn);\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n class Integer {\n static parseInt(value) {\n return Number.parseInt(value);\n }\n static toHexString(n) {\n if (!n)\n return n + '';\n return n.toString(16);\n }\n }\n Integer.MIN_VALUE = -0x80000000;\n Integer.MAX_VALUE = 0x7fffffff;\n lang.Integer = Integer;\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_4) {\n var Rect = android.graphics.Rect;\n var SystemClock = android.os.SystemClock;\n var Context = android.content.Context;\n var System = java.lang.System;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var Transformation = android.view.animation.Transformation;\n var AttrBinder = androidui.attr.AttrBinder;\n class ViewGroup extends view_4.View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mLastTouchDownTime = 0;\n this.mLastTouchDownIndex = -1;\n this.mLastTouchDownX = 0;\n this.mLastTouchDownY = 0;\n this.mGroupFlags = 0;\n this.mLayoutMode = ViewGroup.LAYOUT_MODE_UNDEFINED;\n this.mChildren = [];\n this.mSuppressLayout = false;\n this.mLayoutCalledWhileSuppressed = false;\n this.mChildCountWithTransientState = 0;\n this.initViewGroup();\n if (bindElement || defStyle) {\n this.initFromAttributes(context, bindElement, defStyle);\n }\n }\n get mChildrenCount() {\n return this.mChildren.length;\n }\n initViewGroup() {\n this.setFlags(view_4.View.WILL_NOT_DRAW, view_4.View.DRAW_MASK);\n this.mGroupFlags |= ViewGroup.FLAG_CLIP_CHILDREN;\n this.mGroupFlags |= ViewGroup.FLAG_CLIP_TO_PADDING;\n this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_DONE;\n this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_CACHE;\n this.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.mPersistentDrawingCache = ViewGroup.PERSISTENT_SCROLLING_CACHE;\n }\n initFromAttributes(context, attrs, defStyle) {\n const a = context.obtainStyledAttributes(attrs, defStyle);\n for (let attr of a.getLowerCaseNoNamespaceAttrNames()) {\n switch (attr) {\n case 'clipchildren':\n this.setClipChildren(a.getBoolean(attr, true));\n break;\n case 'cliptopadding':\n this.setClipToPadding(a.getBoolean(attr, true));\n break;\n case 'animationcache':\n this.setAnimationCacheEnabled(a.getBoolean(attr, true));\n break;\n case 'persistentdrawingcache': {\n let value = a.getAttrValue(attr);\n if (value === 'none')\n this.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);\n else if (value === 'animation')\n this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);\n else if (value === 'scrolling')\n this.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);\n else if (value === 'all')\n this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);\n break;\n }\n case 'addstatesfromchildren':\n this.setAddStatesFromChildren(a.getBoolean(attr, false));\n break;\n case 'alwaysdrawnwithcache':\n this.setAlwaysDrawnWithCacheEnabled(a.getBoolean(attr, true));\n break;\n case 'layoutanimation':\n break;\n case 'descendantfocusability': {\n let value = a.getAttrValue(attr);\n if (value == 'beforeDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n else if (value == 'afterDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n else if (value == 'blocksDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);\n break;\n }\n case 'splitmotionevents':\n this.setMotionEventSplittingEnabled(a.getBoolean(attr, false));\n break;\n case 'animatelayoutchanges':\n break;\n case 'layoutmode':\n break;\n }\n }\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder()\n .set('clipChildren', {\n setter(v, value, attrBinder) {\n v.setClipChildren(attrBinder.parseBoolean(value));\n },\n getter(v) {\n return v.getClipChildren();\n }\n }).set('clipToPadding', {\n setter(v, value, attrBinder) {\n v.setClipToPadding(attrBinder.parseBoolean(value));\n },\n getter(v) {\n return v.isClipToPadding();\n }\n }).set('animationCache', {\n setter(v, value, attrBinder) {\n v.setAnimationCacheEnabled(attrBinder.parseBoolean(value, true));\n }\n }).set('persistentDrawingCache', {\n setter(v, value, attrBinder) {\n if (value === 'none')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);\n else if (value === 'animation')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);\n else if (value === 'scrolling')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);\n else if (value === 'all')\n v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);\n }\n }).set('addStatesFromChildren', {\n setter(v, value, attrBinder) {\n v.setAddStatesFromChildren(attrBinder.parseBoolean(value, false));\n }\n }).set('alwaysDrawnWithCache', {\n setter(v, value, attrBinder) {\n v.setAlwaysDrawnWithCacheEnabled(attrBinder.parseBoolean(value, true));\n }\n }).set('descendantFocusability', {\n setter(v, value, attrBinder) {\n if (value == 'beforeDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n else if (value == 'afterDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n else if (value == 'blocksDescendants')\n this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);\n }\n }).set('splitMotionEvents', {\n setter(v, value, attrBinder) {\n v.setMotionEventSplittingEnabled(attrBinder.parseBoolean(value, false));\n }\n });\n }\n getDescendantFocusability() {\n return this.mGroupFlags & ViewGroup.FLAG_MASK_FOCUSABILITY;\n }\n setDescendantFocusability(focusability) {\n switch (focusability) {\n case ViewGroup.FOCUS_BEFORE_DESCENDANTS:\n case ViewGroup.FOCUS_AFTER_DESCENDANTS:\n case ViewGroup.FOCUS_BLOCK_DESCENDANTS:\n break;\n default:\n throw new Error(\"must be one of FOCUS_BEFORE_DESCENDANTS, \"\n + \"FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS\");\n }\n this.mGroupFlags &= ~ViewGroup.FLAG_MASK_FOCUSABILITY;\n this.mGroupFlags |= (focusability & ViewGroup.FLAG_MASK_FOCUSABILITY);\n }\n handleFocusGainInternal(direction, previouslyFocusedRect) {\n if (this.mFocused != null) {\n this.mFocused.unFocus();\n this.mFocused = null;\n }\n super.handleFocusGainInternal(direction, previouslyFocusedRect);\n }\n requestChildFocus(child, focused) {\n if (view_4.View.DBG) {\n System.out.println(this + \" requestChildFocus()\");\n }\n if (this.getDescendantFocusability() == ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n return;\n }\n super.unFocus();\n if (this.mFocused != child) {\n if (this.mFocused != null) {\n this.mFocused.unFocus();\n }\n this.mFocused = child;\n }\n if (this.mParent != null) {\n this.mParent.requestChildFocus(this, focused);\n }\n }\n focusableViewAvailable(v) {\n if (this.mParent != null\n && (this.getDescendantFocusability() != ViewGroup.FOCUS_BLOCK_DESCENDANTS)\n && !(this.isFocused() && this.getDescendantFocusability() != ViewGroup.FOCUS_AFTER_DESCENDANTS)) {\n this.mParent.focusableViewAvailable(v);\n }\n }\n focusSearch(...args) {\n if (arguments.length === 1) {\n return super.focusSearch(args[0]);\n }\n const focused = args[0];\n const direction = args[1];\n if (this.isRootNamespace()) {\n return view_4.FocusFinder.getInstance().findNextFocus(this, focused, direction);\n }\n else if (this.mParent != null) {\n return this.mParent.focusSearch(focused, direction);\n }\n return null;\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n return false;\n }\n childHasTransientStateChanged(child, childHasTransientState) {\n const oldHasTransientState = this.hasTransientState();\n if (childHasTransientState) {\n this.mChildCountWithTransientState++;\n }\n else {\n this.mChildCountWithTransientState--;\n }\n const newHasTransientState = this.hasTransientState();\n if (this.mParent != null && oldHasTransientState != newHasTransientState) {\n this.mParent.childHasTransientStateChanged(this, newHasTransientState);\n }\n }\n hasTransientState() {\n return this.mChildCountWithTransientState > 0 || super.hasTransientState();\n }\n dispatchUnhandledMove(focused, direction) {\n return this.mFocused != null && this.mFocused.dispatchUnhandledMove(focused, direction);\n }\n clearChildFocus(child) {\n if (view_4.View.DBG) {\n System.out.println(this + \" clearChildFocus()\");\n }\n this.mFocused = null;\n if (this.mParent != null) {\n this.mParent.clearChildFocus(this);\n }\n }\n clearFocus() {\n if (view_4.View.DBG) {\n System.out.println(this + \" clearFocus()\");\n }\n if (this.mFocused == null) {\n super.clearFocus();\n }\n else {\n let focused = this.mFocused;\n this.mFocused = null;\n focused.clearFocus();\n }\n }\n unFocus() {\n if (view_4.View.DBG) {\n System.out.println(this + \" unFocus()\");\n }\n if (this.mFocused == null) {\n super.unFocus();\n }\n else {\n this.mFocused.unFocus();\n this.mFocused = null;\n }\n }\n getFocusedChild() {\n return this.mFocused;\n }\n hasFocus() {\n return (this.mPrivateFlags & view_4.View.PFLAG_FOCUSED) != 0 || this.mFocused != null;\n }\n findFocus() {\n if (ViewGroup.DBG) {\n System.out.println(\"Find focus in \" + this + \": flags=\" + this.isFocused() + \", child=\" + this.mFocused);\n }\n if (this.isFocused()) {\n return this;\n }\n if (this.mFocused != null) {\n return this.mFocused.findFocus();\n }\n return null;\n }\n hasFocusable() {\n if ((this.mViewFlags & view_4.View.VISIBILITY_MASK) != view_4.View.VISIBLE) {\n return false;\n }\n if (this.isFocusable()) {\n return true;\n }\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (child.hasFocusable()) {\n return true;\n }\n }\n }\n return false;\n }\n addFocusables(views, direction, focusableMode = view_4.View.FOCUSABLES_TOUCH_MODE) {\n const focusableCount = views.size();\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) {\n child.addFocusables(views, direction, focusableMode);\n }\n }\n }\n if (descendantFocusability != ViewGroup.FOCUS_AFTER_DESCENDANTS\n || (focusableCount == views.size())) {\n super.addFocusables(views, direction, focusableMode);\n }\n }\n requestFocus(direction = view_4.View.FOCUS_DOWN, previouslyFocusedRect = null) {\n if (view_4.View.DBG) {\n System.out.println(this + \" ViewGroup.requestFocus direction=\"\n + direction);\n }\n let descendantFocusability = this.getDescendantFocusability();\n switch (descendantFocusability) {\n case ViewGroup.FOCUS_BLOCK_DESCENDANTS:\n return super.requestFocus(direction, previouslyFocusedRect);\n case ViewGroup.FOCUS_BEFORE_DESCENDANTS: {\n const took = super.requestFocus(direction, previouslyFocusedRect);\n return took ? took : this.onRequestFocusInDescendants(direction, previouslyFocusedRect);\n }\n case ViewGroup.FOCUS_AFTER_DESCENDANTS: {\n const took = this.onRequestFocusInDescendants(direction, previouslyFocusedRect);\n return took ? took : super.requestFocus(direction, previouslyFocusedRect);\n }\n default:\n throw new Error(\"descendant focusability must be \"\n + \"one of FOCUS_BEFORE_DESCENDANTS, FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS \"\n + \"but is \" + descendantFocusability);\n }\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n let index;\n let increment;\n let end;\n let count = this.mChildrenCount;\n if ((direction & view_4.View.FOCUS_FORWARD) != 0) {\n index = 0;\n increment = 1;\n end = count;\n }\n else {\n index = count - 1;\n increment = -1;\n end = -1;\n }\n const children = this.mChildren;\n for (let i = index; i != end; i += increment) {\n let child = children[i];\n if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) {\n if (child.requestFocus(direction, previouslyFocusedRect)) {\n return true;\n }\n }\n }\n return false;\n }\n addView(...args) {\n let child = args[0];\n let params = child.getLayoutParams();\n let index = -1;\n if (args.length == 2) {\n if (args[1] instanceof ViewGroup.LayoutParams)\n params = args[1];\n else if (typeof args[1] === 'number')\n index = args[1];\n }\n else if (args.length == 3) {\n if (args[2] instanceof ViewGroup.LayoutParams) {\n index = args[1];\n params = args[2];\n }\n else {\n params = this.generateDefaultLayoutParams();\n params.width = args[1];\n params.height = args[2];\n }\n }\n if (params == null) {\n params = this.generateDefaultLayoutParams();\n if (params == null) {\n throw new Error(\"generateDefaultLayoutParams() cannot return null\");\n }\n }\n this.requestLayout();\n this.invalidate(true);\n this.addViewInner(child, index, params, false);\n }\n checkLayoutParams(p) {\n return p != null;\n }\n setOnHierarchyChangeListener(listener) {\n this.mOnHierarchyChangeListener = listener;\n }\n onViewAdded(child) {\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewAdded(this, child);\n }\n }\n onViewRemoved(child) {\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewRemoved(this, child);\n }\n }\n clearCachedLayoutMode() {\n if (!this.hasBooleanFlag(ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET)) {\n this.mLayoutMode = ViewGroup.LAYOUT_MODE_UNDEFINED;\n }\n }\n addViewInLayout(child, index, params, preventRequestLayout = false) {\n child.mParent = null;\n this.addViewInner(child, index, params, preventRequestLayout);\n child.mPrivateFlags = (child.mPrivateFlags & ~ViewGroup.PFLAG_DIRTY_MASK) | ViewGroup.PFLAG_DRAWN;\n return true;\n }\n cleanupLayoutState(child) {\n child.mPrivateFlags &= ~view_4.View.PFLAG_FORCE_LAYOUT;\n }\n addViewInner(child, index, params, preventRequestLayout) {\n if (child.getParent() != null) {\n throw new Error(\"The specified child already has a parent. \" +\n \"You must call removeView() on the child's parent first.\");\n }\n if (!this.checkLayoutParams(params)) {\n params = this.generateLayoutParams(params);\n }\n if (preventRequestLayout) {\n child.mLayoutParams = params;\n }\n else {\n child.setLayoutParams(params);\n }\n if (index < 0) {\n index = this.mChildrenCount;\n }\n if (this.mDisappearingChildren)\n this.mDisappearingChildren.remove(child);\n this.addInArray(child, index);\n if (preventRequestLayout) {\n child.assignParent(this);\n }\n else {\n child.mParent = this;\n }\n if (child.hasFocus()) {\n this.requestChildFocus(child, child.findFocus());\n }\n let ai = this.mAttachInfo;\n if (ai != null && (this.mGroupFlags & ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW) == 0) {\n child.dispatchAttachedToWindow(this.mAttachInfo, (this.mViewFlags & ViewGroup.VISIBILITY_MASK));\n }\n this.onViewAdded(child);\n if ((child.mViewFlags & ViewGroup.DUPLICATE_PARENT_STATE) == ViewGroup.DUPLICATE_PARENT_STATE) {\n this.mGroupFlags |= ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE;\n }\n }\n addInArray(child, index) {\n let count = this.mChildrenCount;\n if (index == count) {\n this.mChildren.push(child);\n this.addToBindElement(child.bindElement, null);\n }\n else if (index < count) {\n let refChild = this.getChildAt(index);\n this.mChildren.splice(index, 0, child);\n this.addToBindElement(child.bindElement, refChild.bindElement);\n }\n else {\n throw new Error(\"index=\" + index + \" count=\" + count);\n }\n }\n addToBindElement(childElement, insertBeforeElement) {\n if (childElement.parentElement) {\n if (childElement.parentElement == this.bindElement)\n return;\n childElement.parentElement.removeChild(childElement);\n }\n if (insertBeforeElement) {\n this.bindElement.insertBefore(childElement, insertBeforeElement);\n }\n else {\n this.bindElement.appendChild(childElement);\n }\n }\n removeChildElement(childElement) {\n try {\n this.bindElement.removeChild(childElement);\n }\n catch (e) {\n }\n }\n removeFromArray(index, count = 1) {\n let start = Math.max(0, index);\n let end = Math.min(this.mChildrenCount, start + count);\n if (start == end) {\n return;\n }\n for (let i = start; i < end; i++) {\n this.mChildren[i].mParent = null;\n this.removeChildElement(this.mChildren[i].bindElement);\n }\n this.mChildren.splice(index, end - start);\n }\n removeView(view) {\n this.removeViewInternal(view);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViewInLayout(view) {\n this.removeViewInternal(view);\n }\n removeViewsInLayout(start, count) {\n this.removeViewsInternal(start, count);\n }\n removeViewAt(index) {\n this.removeViewsInternal(index, 1);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViews(start, count) {\n this.removeViewsInternal(start, count);\n this.requestLayout();\n this.invalidate(true);\n }\n removeViewInternal(view) {\n let index = this.indexOfChild(view);\n if (index >= 0) {\n this.removeViewsInternal(index, 1);\n }\n }\n removeViewsInternal(start, count) {\n let focused = this.mFocused;\n let clearChildFocus = false;\n const detach = this.mAttachInfo != null;\n const children = this.mChildren;\n const end = start + count;\n for (let i = start; i < end; i++) {\n const view = children[i];\n if (view == focused) {\n view.unFocus();\n clearChildFocus = true;\n }\n this.cancelTouchTarget(view);\n if (view.getAnimation() != null) {\n this.addDisappearingView(view);\n }\n else if (detach) {\n view.dispatchDetachedFromWindow();\n }\n this.onViewRemoved(view);\n }\n this.removeFromArray(start, count);\n if (clearChildFocus) {\n this.clearChildFocus(focused);\n if (!this.rootViewRequestFocus()) {\n this.notifyGlobalFocusCleared(focused);\n }\n }\n }\n removeAllViews() {\n this.removeAllViewsInLayout();\n this.requestLayout();\n this.invalidate(true);\n }\n removeAllViewsInLayout() {\n const count = this.mChildrenCount;\n if (count <= 0) {\n return;\n }\n this.removeViewsInternal(0, count);\n }\n detachViewFromParent(child) {\n if (child instanceof view_4.View)\n child = this.indexOfChild(child);\n this.removeFromArray(child);\n }\n removeDetachedView(child, animate) {\n if (child == this.mFocused) {\n child.clearFocus();\n }\n this.cancelTouchTarget(child);\n if ((animate && child.getAnimation() != null)) {\n this.addDisappearingView(child);\n }\n else if (child.mAttachInfo != null) {\n child.dispatchDetachedFromWindow();\n }\n if (child.hasTransientState()) {\n this.childHasTransientStateChanged(child, false);\n }\n this.onViewRemoved(child);\n }\n attachViewToParent(child, index, params) {\n child.mLayoutParams = params;\n if (index < 0) {\n index = this.mChildrenCount;\n }\n this.addInArray(child, index);\n child.mParent = this;\n child.mPrivateFlags = (child.mPrivateFlags & ~ViewGroup.PFLAG_DIRTY_MASK & ~ViewGroup.PFLAG_DRAWING_CACHE_VALID) | ViewGroup.PFLAG_DRAWN | ViewGroup.PFLAG_INVALIDATED;\n this.mPrivateFlags |= ViewGroup.PFLAG_INVALIDATED;\n if (child.hasFocus()) {\n this.requestChildFocus(child, child.findFocus());\n }\n }\n detachViewsFromParent(start, count = 1) {\n this.removeFromArray(start, count);\n }\n detachAllViewsFromParent() {\n const count = this.mChildrenCount;\n if (count <= 0) {\n return;\n }\n const children = this.mChildren;\n this.mChildren = [];\n for (let i = count - 1; i >= 0; i--) {\n children[i].mParent = null;\n this.removeChildElement(children[i].bindElement);\n }\n }\n indexOfChild(child) {\n return this.mChildren.indexOf(child);\n }\n getChildCount() {\n return this.mChildrenCount;\n }\n getChildAt(index) {\n if (index < 0 || index >= this.mChildrenCount) {\n return null;\n }\n return this.mChildren[index];\n }\n bringChildToFront(child) {\n let index = this.indexOfChild(child);\n if (index >= 0) {\n this.removeFromArray(index);\n this.addInArray(child, this.mChildrenCount);\n child.mParent = this;\n this.requestLayout();\n this.invalidate();\n }\n }\n hasBooleanFlag(flag) {\n return (this.mGroupFlags & flag) == flag;\n }\n setBooleanFlag(flag, value) {\n if (value) {\n this.mGroupFlags |= flag;\n }\n else {\n this.mGroupFlags &= ~flag;\n }\n }\n dispatchGenericPointerEvent(event) {\n const childrenCount = this.mChildrenCount;\n if (childrenCount != 0) {\n const children = this.mChildren;\n const x = event.getX();\n const y = event.getY();\n const customOrder = this.isChildrenDrawingOrderEnabled();\n for (let i = childrenCount - 1; i >= 0; i--) {\n const childIndex = customOrder ? this.getChildDrawingOrder(childrenCount, i) : i;\n const child = children[childIndex];\n if (!ViewGroup.canViewReceivePointerEvents(child)\n || !this.isTransformedTouchPointInView(x, y, child, null)) {\n continue;\n }\n if (this.dispatchTransformedGenericPointerEvent(event, child)) {\n return true;\n }\n }\n }\n return super.dispatchGenericPointerEvent(event);\n }\n dispatchTransformedGenericPointerEvent(event, child) {\n const offsetX = this.mScrollX - child.mLeft;\n const offsetY = this.mScrollY - child.mTop;\n let handled;\n if (!child.hasIdentityMatrix()) {\n }\n else {\n event.offsetLocation(offsetX, offsetY);\n handled = child.dispatchGenericMotionEvent(event);\n event.offsetLocation(-offsetX, -offsetY);\n }\n return handled;\n }\n dispatchKeyEvent(event) {\n if ((this.mPrivateFlags & (view_4.View.PFLAG_FOCUSED | view_4.View.PFLAG_HAS_BOUNDS))\n == (view_4.View.PFLAG_FOCUSED | view_4.View.PFLAG_HAS_BOUNDS)) {\n if (super.dispatchKeyEvent(event)) {\n return true;\n }\n }\n else if (this.mFocused != null && (this.mFocused.mPrivateFlags & view_4.View.PFLAG_HAS_BOUNDS)\n == view_4.View.PFLAG_HAS_BOUNDS) {\n if (this.mFocused.dispatchKeyEvent(event)) {\n return true;\n }\n }\n return false;\n }\n dispatchWindowFocusChanged(hasFocus) {\n super.dispatchWindowFocusChanged(hasFocus);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchWindowFocusChanged(hasFocus);\n }\n }\n addTouchables(views) {\n super.addTouchables(views);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) {\n child.addTouchables(views);\n }\n }\n }\n onInterceptTouchEvent(ev) {\n return false;\n }\n dispatchTouchEvent(ev) {\n let handled = false;\n if (this.onFilterTouchEventForSecurity(ev)) {\n let action = ev.getAction();\n let actionMasked = action & view_4.MotionEvent.ACTION_MASK;\n if (actionMasked == view_4.MotionEvent.ACTION_DOWN) {\n this.cancelAndClearTouchTargets(ev);\n this.resetTouchState();\n }\n let intercepted;\n if (actionMasked == view_4.MotionEvent.ACTION_DOWN\n || this.mFirstTouchTarget != null) {\n let disallowIntercept = (this.mGroupFlags & ViewGroup.FLAG_DISALLOW_INTERCEPT) != 0;\n if (!disallowIntercept) {\n intercepted = this.onInterceptTouchEvent(ev);\n ev.setAction(action);\n }\n else {\n intercepted = false;\n }\n }\n else {\n intercepted = true;\n }\n let canceled = ViewGroup.resetCancelNextUpFlag(this)\n || actionMasked == view_4.MotionEvent.ACTION_CANCEL;\n let split = (this.mGroupFlags & ViewGroup.FLAG_SPLIT_MOTION_EVENTS) != 0;\n let newTouchTarget = null;\n let alreadyDispatchedToNewTouchTarget = false;\n if (!canceled && !intercepted) {\n if (actionMasked == view_4.MotionEvent.ACTION_DOWN\n || (split && actionMasked == view_4.MotionEvent.ACTION_POINTER_DOWN)\n || actionMasked == view_4.MotionEvent.ACTION_HOVER_MOVE) {\n let actionIndex = ev.getActionIndex();\n let idBitsToAssign = split ? 1 << ev.getPointerId(actionIndex)\n : TouchTarget.ALL_POINTER_IDS;\n this.removePointersFromTouchTargets(idBitsToAssign);\n let childrenCount = this.mChildrenCount;\n if (newTouchTarget == null && childrenCount != 0) {\n let x = ev.getX(actionIndex);\n let y = ev.getY(actionIndex);\n let children = this.mChildren;\n let customOrder = this.isChildrenDrawingOrderEnabled();\n for (let i = childrenCount - 1; i >= 0; i--) {\n let childIndex = customOrder ? this.getChildDrawingOrder(childrenCount, i) : i;\n let child = children[childIndex];\n if (!ViewGroup.canViewReceivePointerEvents(child)\n || !this.isTransformedTouchPointInView(x, y, child, null)) {\n continue;\n }\n newTouchTarget = this.getTouchTarget(child);\n if (newTouchTarget != null) {\n newTouchTarget.pointerIdBits |= idBitsToAssign;\n break;\n }\n ViewGroup.resetCancelNextUpFlag(child);\n if (this.dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign)) {\n this.mLastTouchDownTime = ev.getDownTime();\n this.mLastTouchDownIndex = childIndex;\n this.mLastTouchDownX = ev.getX();\n this.mLastTouchDownY = ev.getY();\n newTouchTarget = this.addTouchTarget(child, idBitsToAssign);\n alreadyDispatchedToNewTouchTarget = true;\n break;\n }\n }\n }\n if (newTouchTarget == null && this.mFirstTouchTarget != null) {\n newTouchTarget = this.mFirstTouchTarget;\n while (newTouchTarget.next != null) {\n newTouchTarget = newTouchTarget.next;\n }\n newTouchTarget.pointerIdBits |= idBitsToAssign;\n }\n }\n }\n if (this.mFirstTouchTarget == null) {\n handled = this.dispatchTransformedTouchEvent(ev, canceled, null, TouchTarget.ALL_POINTER_IDS);\n }\n else {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n const next = target.next;\n if (alreadyDispatchedToNewTouchTarget && target == newTouchTarget) {\n handled = true;\n }\n else {\n let cancelChild = ViewGroup.resetCancelNextUpFlag(target.child)\n || intercepted;\n if (this.dispatchTransformedTouchEvent(ev, cancelChild, target.child, target.pointerIdBits)) {\n handled = true;\n }\n if (cancelChild) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n target = next;\n continue;\n }\n }\n predecessor = target;\n target = next;\n }\n }\n if (canceled\n || actionMasked == view_4.MotionEvent.ACTION_UP\n || actionMasked == view_4.MotionEvent.ACTION_HOVER_MOVE) {\n this.resetTouchState();\n }\n else if (split && actionMasked == view_4.MotionEvent.ACTION_POINTER_UP) {\n let actionIndex = ev.getActionIndex();\n let idBitsToRemove = 1 << ev.getPointerId(actionIndex);\n this.removePointersFromTouchTargets(idBitsToRemove);\n }\n }\n return handled;\n }\n resetTouchState() {\n this.clearTouchTargets();\n ViewGroup.resetCancelNextUpFlag(this);\n this.mGroupFlags &= ~ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n static resetCancelNextUpFlag(view) {\n if ((view.mPrivateFlags & view_4.View.PFLAG_CANCEL_NEXT_UP_EVENT) != 0) {\n view.mPrivateFlags &= ~view_4.View.PFLAG_CANCEL_NEXT_UP_EVENT;\n return true;\n }\n return false;\n }\n clearTouchTargets() {\n let target = this.mFirstTouchTarget;\n if (target != null) {\n do {\n let next = target.next;\n target.recycle();\n target = next;\n } while (target != null);\n this.mFirstTouchTarget = null;\n }\n }\n cancelAndClearTouchTargets(event) {\n if (this.mFirstTouchTarget != null) {\n let syntheticEvent = false;\n if (event == null) {\n let now = SystemClock.uptimeMillis();\n event = view_4.MotionEvent.obtainWithAction(now, now, view_4.MotionEvent.ACTION_CANCEL, 0, 0);\n syntheticEvent = true;\n }\n for (let target = this.mFirstTouchTarget; target != null; target = target.next) {\n ViewGroup.resetCancelNextUpFlag(target.child);\n this.dispatchTransformedTouchEvent(event, true, target.child, target.pointerIdBits);\n }\n this.clearTouchTargets();\n if (syntheticEvent) {\n event.recycle();\n }\n }\n }\n getTouchTarget(child) {\n for (let target = this.mFirstTouchTarget; target != null; target = target.next) {\n if (target.child == child) {\n return target;\n }\n }\n return null;\n }\n addTouchTarget(child, pointerIdBits) {\n let target = TouchTarget.obtain(child, pointerIdBits);\n target.next = this.mFirstTouchTarget;\n this.mFirstTouchTarget = target;\n return target;\n }\n removePointersFromTouchTargets(pointerIdBits) {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n let next = target.next;\n if ((target.pointerIdBits & pointerIdBits) != 0) {\n target.pointerIdBits &= ~pointerIdBits;\n if (target.pointerIdBits == 0) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n target = next;\n continue;\n }\n }\n predecessor = target;\n target = next;\n }\n }\n cancelTouchTarget(view) {\n let predecessor = null;\n let target = this.mFirstTouchTarget;\n while (target != null) {\n let next = target.next;\n if (target.child == view) {\n if (predecessor == null) {\n this.mFirstTouchTarget = next;\n }\n else {\n predecessor.next = next;\n }\n target.recycle();\n let now = SystemClock.uptimeMillis();\n let event = view_4.MotionEvent.obtainWithAction(now, now, view_4.MotionEvent.ACTION_CANCEL, 0, 0);\n view.dispatchTouchEvent(event);\n event.recycle();\n return;\n }\n predecessor = target;\n target = next;\n }\n }\n static canViewReceivePointerEvents(child) {\n return (child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE\n || child.getAnimation() != null;\n }\n isTransformedTouchPointInView(x, y, child, outLocalPoint) {\n let localX = x + this.mScrollX - child.mLeft;\n let localY = y + this.mScrollY - child.mTop;\n let isInView = child.pointInView(localX, localY);\n if (isInView && outLocalPoint != null) {\n outLocalPoint.set(localX, localY);\n }\n return isInView;\n }\n dispatchTransformedTouchEvent(event, cancel, child, desiredPointerIdBits) {\n let handled;\n const oldAction = event.getAction();\n if (cancel || oldAction == view_4.MotionEvent.ACTION_CANCEL) {\n event.setAction(view_4.MotionEvent.ACTION_CANCEL);\n if (child == null) {\n handled = super.dispatchTouchEvent(event);\n }\n else {\n handled = child.dispatchTouchEvent(event);\n }\n event.setAction(oldAction);\n return handled;\n }\n const oldPointerIdBits = event.getPointerIdBits();\n const newPointerIdBits = oldPointerIdBits & desiredPointerIdBits;\n if (newPointerIdBits == 0) {\n return false;\n }\n let transformedEvent;\n if (newPointerIdBits == oldPointerIdBits) {\n if (child == null || child.hasIdentityMatrix()) {\n if (child == null) {\n handled = super.dispatchTouchEvent(event);\n }\n else {\n let offsetX = this.mScrollX - child.mLeft;\n let offsetY = this.mScrollY - child.mTop;\n event.offsetLocation(offsetX, offsetY);\n handled = child.dispatchTouchEvent(event);\n event.offsetLocation(-offsetX, -offsetY);\n }\n return handled;\n }\n transformedEvent = view_4.MotionEvent.obtain(event);\n }\n else {\n transformedEvent = event.split(newPointerIdBits);\n }\n if (child == null) {\n handled = super.dispatchTouchEvent(transformedEvent);\n }\n else {\n let offsetX = this.mScrollX - child.mLeft;\n let offsetY = this.mScrollY - child.mTop;\n transformedEvent.offsetLocation(offsetX, offsetY);\n handled = child.dispatchTouchEvent(transformedEvent);\n }\n transformedEvent.recycle();\n return handled;\n }\n setMotionEventSplittingEnabled(split) {\n if (split) {\n this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n }\n isMotionEventSplittingEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_SPLIT_MOTION_EVENTS) == ViewGroup.FLAG_SPLIT_MOTION_EVENTS;\n }\n isAnimationCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE;\n }\n setAnimationCacheEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_ANIMATION_CACHE, enabled);\n }\n isAlwaysDrawnWithCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) == ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n }\n setAlwaysDrawnWithCacheEnabled(always) {\n this.setBooleanFlag(ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE, always);\n }\n isChildrenDrawnWithCacheEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) == ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n }\n setChildrenDrawnWithCacheEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE, enabled);\n }\n setChildrenDrawingCacheEnabled(enabled) {\n if (enabled || (this.mPersistentDrawingCache & ViewGroup.PERSISTENT_ALL_CACHES) != ViewGroup.PERSISTENT_ALL_CACHES) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setDrawingCacheEnabled(enabled);\n }\n }\n }\n onAnimationStart() {\n super.onAnimationStart();\n if ((this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n const buildCache = !this.isHardwareAccelerated();\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE) {\n child.setDrawingCacheEnabled(true);\n if (buildCache) {\n child.buildDrawingCache(true);\n }\n }\n }\n this.mGroupFlags |= ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n }\n }\n onAnimationEnd() {\n super.onAnimationEnd();\n if ((this.mGroupFlags & ViewGroup.FLAG_ANIMATION_CACHE) == ViewGroup.FLAG_ANIMATION_CACHE) {\n this.mGroupFlags &= ~ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE;\n if ((this.mPersistentDrawingCache & ViewGroup.PERSISTENT_ANIMATION_CACHE) == 0) {\n this.setChildrenDrawingCacheEnabled(false);\n }\n }\n }\n getPersistentDrawingCache() {\n return this.mPersistentDrawingCache;\n }\n setPersistentDrawingCache(drawingCacheToKeep) {\n this.mPersistentDrawingCache = drawingCacheToKeep & ViewGroup.PERSISTENT_ALL_CACHES;\n }\n isChildrenDrawingOrderEnabled() {\n return (this.mGroupFlags & ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER) == ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER;\n }\n setChildrenDrawingOrderEnabled(enabled) {\n this.setBooleanFlag(ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER, enabled);\n }\n getChildDrawingOrder(childCount, i) {\n return i;\n }\n generateLayoutParamsFromAttr(attrs) {\n return new ViewGroup.LayoutParams(this.getContext(), attrs);\n }\n generateLayoutParams(p) {\n return p;\n }\n generateDefaultLayoutParams() {\n return new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n measureChildren(widthMeasureSpec, heightMeasureSpec) {\n const size = this.mChildren.length;\n for (let i = 0; i < size; ++i) {\n const child = this.mChildren[i];\n if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) != view_4.View.GONE) {\n this.measureChild(child, widthMeasureSpec, heightMeasureSpec);\n }\n }\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width);\n const childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n let lp = child.getLayoutParams();\n if (lp instanceof ViewGroup.MarginLayoutParams) {\n const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin\n + widthUsed, lp.width);\n const childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin\n + heightUsed, lp.height);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n static getChildMeasureSpec(spec, padding, childDimension) {\n let MeasureSpec = view_4.View.MeasureSpec;\n let specMode = MeasureSpec.getMode(spec);\n let specSize = MeasureSpec.getSize(spec);\n let size = Math.max(0, specSize - padding);\n let resultSize = 0;\n let resultMode = 0;\n switch (specMode) {\n case MeasureSpec.EXACTLY:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = size;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n break;\n case MeasureSpec.AT_MOST:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = size;\n resultMode = MeasureSpec.AT_MOST;\n }\n break;\n case MeasureSpec.UNSPECIFIED:\n if (childDimension >= 0) {\n resultSize = childDimension;\n resultMode = MeasureSpec.EXACTLY;\n }\n else if (childDimension == ViewGroup.LayoutParams.MATCH_PARENT) {\n resultSize = 0;\n resultMode = MeasureSpec.UNSPECIFIED;\n }\n else if (childDimension == ViewGroup.LayoutParams.WRAP_CONTENT) {\n resultSize = 0;\n resultMode = MeasureSpec.UNSPECIFIED;\n }\n break;\n }\n return MeasureSpec.makeMeasureSpec(resultSize, resultMode);\n }\n clearDisappearingChildren() {\n if (this.mDisappearingChildren != null) {\n this.mDisappearingChildren.clear();\n this.invalidate();\n }\n }\n addDisappearingView(v) {\n let disappearingChildren = this.mDisappearingChildren;\n if (disappearingChildren == null) {\n disappearingChildren = this.mDisappearingChildren = new ArrayList();\n }\n disappearingChildren.add(v);\n }\n finishAnimatingView(view, animation) {\n const disappearingChildren = this.mDisappearingChildren;\n if (disappearingChildren != null) {\n if (disappearingChildren.contains(view)) {\n disappearingChildren.remove(view);\n if (view.mAttachInfo != null) {\n view.dispatchDetachedFromWindow();\n }\n view.clearAnimation();\n this.mGroupFlags |= ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n }\n if (animation != null && !animation.getFillAfter()) {\n view.clearAnimation();\n }\n if ((view.mPrivateFlags & ViewGroup.PFLAG_ANIMATION_STARTED) == ViewGroup.PFLAG_ANIMATION_STARTED) {\n view.onAnimationEnd();\n view.mPrivateFlags &= ~ViewGroup.PFLAG_ANIMATION_STARTED;\n this.mGroupFlags |= ViewGroup.FLAG_INVALIDATE_REQUIRED;\n }\n }\n dispatchAttachedToWindow(info, visibility) {\n this.mGroupFlags |= ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n super.dispatchAttachedToWindow(info, visibility);\n this.mGroupFlags &= ~ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n child.dispatchAttachedToWindow(info, visibility | (child.mViewFlags & view_4.View.VISIBILITY_MASK));\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.clearCachedLayoutMode();\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.clearCachedLayoutMode();\n }\n dispatchDetachedFromWindow() {\n this.cancelAndClearTouchTargets(null);\n this.mLayoutCalledWhileSuppressed = false;\n this.mChildren.forEach((child) => child.dispatchDetachedFromWindow());\n super.dispatchDetachedFromWindow();\n }\n dispatchDisplayHint(hint) {\n super.dispatchDisplayHint(hint);\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchDisplayHint(hint);\n }\n }\n onChildVisibilityChanged(child, oldVisibility, newVisibility) {\n }\n dispatchVisibilityChanged(changedView, visibility) {\n super.dispatchVisibilityChanged(changedView, visibility);\n const count = this.mChildrenCount;\n let children = this.mChildren;\n for (let i = 0; i < count; i++) {\n children[i].dispatchVisibilityChanged(changedView, visibility);\n }\n }\n dispatchSetSelected(selected) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setSelected(selected);\n }\n }\n dispatchSetActivated(activated) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].setActivated(activated);\n }\n }\n dispatchSetPressed(pressed) {\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if (!pressed || (!child.isClickable() && !child.isLongClickable())) {\n child.setPressed(pressed);\n }\n }\n }\n dispatchCancelPendingInputEvents() {\n super.dispatchCancelPendingInputEvents();\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].dispatchCancelPendingInputEvents();\n }\n }\n offsetDescendantRectToMyCoords(descendant, rect) {\n this.offsetRectBetweenParentAndChild(descendant, rect, true, false);\n }\n offsetRectIntoDescendantCoords(descendant, rect) {\n this.offsetRectBetweenParentAndChild(descendant, rect, false, false);\n }\n offsetRectBetweenParentAndChild(descendant, rect, offsetFromChildToParent, clipToBounds) {\n if (descendant == this) {\n return;\n }\n let theParent = descendant.mParent;\n while ((theParent != null)\n && (theParent instanceof view_4.View)\n && (theParent != this)) {\n if (offsetFromChildToParent) {\n rect.offset(descendant.mLeft - descendant.mScrollX, descendant.mTop - descendant.mScrollY);\n if (clipToBounds) {\n let p = theParent;\n rect.intersect(0, 0, p.mRight - p.mLeft, p.mBottom - p.mTop);\n }\n }\n else {\n if (clipToBounds) {\n let p = theParent;\n rect.intersect(0, 0, p.mRight - p.mLeft, p.mBottom - p.mTop);\n }\n rect.offset(descendant.mScrollX - descendant.mLeft, descendant.mScrollY - descendant.mTop);\n }\n descendant = theParent;\n theParent = descendant.mParent;\n }\n if (theParent == this) {\n if (offsetFromChildToParent) {\n rect.offset(descendant.mLeft - descendant.mScrollX, descendant.mTop - descendant.mScrollY);\n }\n else {\n rect.offset(descendant.mScrollX - descendant.mLeft, descendant.mScrollY - descendant.mTop);\n }\n }\n else {\n throw new Error(\"parameter must be a descendant of this view\");\n }\n }\n offsetChildrenTopAndBottom(offset) {\n const count = this.mChildrenCount;\n const children = this.mChildren;\n for (let i = 0; i < count; i++) {\n const v = children[i];\n v.mTop += offset;\n v.mBottom += offset;\n }\n this.invalidateViewProperty(false, false);\n }\n suppressLayout(suppress) {\n this.mSuppressLayout = suppress;\n if (!suppress) {\n if (this.mLayoutCalledWhileSuppressed) {\n this.requestLayout();\n this.mLayoutCalledWhileSuppressed = false;\n }\n }\n }\n isLayoutSuppressed() {\n return this.mSuppressLayout;\n }\n layout(l, t, r, b) {\n if (!this.mSuppressLayout) {\n super.layout(l, t, r, b);\n }\n else {\n this.mLayoutCalledWhileSuppressed = true;\n }\n }\n canAnimate() {\n return false;\n }\n getChildVisibleRect(child, r, offset) {\n const rect = this.mAttachInfo != null ? this.mAttachInfo.mTmpTransformRect : new Rect();\n rect.set(r);\n if (!child.hasIdentityMatrix()) {\n child.getMatrix().mapRect(rect);\n }\n let dx = child.mLeft - this.mScrollX;\n let dy = child.mTop - this.mScrollY;\n rect.offset(dx, dy);\n if (offset != null) {\n if (!child.hasIdentityMatrix()) {\n let position = this.mAttachInfo != null ? this.mAttachInfo.mTmpTransformLocation : androidui.util.ArrayCreator.newNumberArray(2);\n position[0] = offset.x;\n position[1] = offset.y;\n child.getMatrix().mapPoints(position);\n offset.x = Math.floor(position[0] + 0.5);\n offset.y = Math.floor(position[1] + 0.5);\n }\n offset.x += dx;\n offset.y += dy;\n }\n if (rect.intersect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop)) {\n if (this.mParent == null)\n return true;\n r.set(rect);\n return this.mParent.getChildVisibleRect(this, r, offset);\n }\n return false;\n }\n dispatchDraw(canvas) {\n let count = this.mChildrenCount;\n let children = this.mChildren;\n let flags = this.mGroupFlags;\n let saveCount = 0;\n let clipToPadding = (flags & ViewGroup.CLIP_TO_PADDING_MASK) == ViewGroup.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n canvas.clipRect(this.mScrollX + this.mPaddingLeft, this.mScrollY + this.mPaddingTop, this.mScrollX + this.mRight - this.mLeft - this.mPaddingRight, this.mScrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n this.mPrivateFlags &= ~ViewGroup.PFLAG_DRAW_ANIMATION;\n this.mGroupFlags &= ~ViewGroup.FLAG_INVALIDATE_REQUIRED;\n let more = false;\n const drawingTime = this.getDrawingTime();\n if ((flags & ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER) == 0) {\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE || child.getAnimation() != null) {\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n }\n else {\n for (let i = 0; i < count; i++) {\n const child = children[this.getChildDrawingOrder(count, i)];\n if ((child.mViewFlags & ViewGroup.VISIBILITY_MASK) == ViewGroup.VISIBLE || child.getAnimation() != null) {\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n }\n if (this.mDisappearingChildren != null) {\n const disappearingChildren = this.mDisappearingChildren;\n const disappearingCount = disappearingChildren.size() - 1;\n for (let i = disappearingCount; i >= 0; i--) {\n const child = disappearingChildren.get(i);\n more = this.drawChild(canvas, child, drawingTime) || more;\n }\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n }\n flags = this.mGroupFlags;\n if ((flags & ViewGroup.FLAG_INVALIDATE_REQUIRED) == ViewGroup.FLAG_INVALIDATE_REQUIRED) {\n this.invalidate(true);\n }\n }\n drawChild(canvas, child, drawingTime) {\n return child.drawFromParent(canvas, this, drawingTime);\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if ((this.mGroupFlags & ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE) != 0) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0) {\n throw new Error(\"addStateFromChildren cannot be enabled if a\"\n + \" child has duplicateParentState set to true\");\n }\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n const child = children[i];\n if ((child.mViewFlags & view_4.View.DUPLICATE_PARENT_STATE) != 0) {\n child.refreshDrawableState();\n }\n }\n }\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n const children = this.mChildren;\n const count = this.mChildrenCount;\n for (let i = 0; i < count; i++) {\n children[i].jumpDrawablesToCurrentState();\n }\n }\n onCreateDrawableState(extraSpace) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) == 0) {\n return super.onCreateDrawableState(extraSpace);\n }\n let need = 0;\n let n = this.getChildCount();\n for (let i = 0; i < n; i++) {\n let childState = this.getChildAt(i).getDrawableState();\n if (childState != null) {\n need += childState.length;\n }\n }\n let state = super.onCreateDrawableState(extraSpace + need);\n for (let i = 0; i < n; i++) {\n let childState = this.getChildAt(i).getDrawableState();\n if (childState != null) {\n state = view_4.View.mergeDrawableStates(state, childState);\n }\n }\n return state;\n }\n setAddStatesFromChildren(addsStates) {\n if (addsStates) {\n this.mGroupFlags |= ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN;\n }\n this.refreshDrawableState();\n }\n addStatesFromChildren() {\n return (this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0;\n }\n childDrawableStateChanged(child) {\n if ((this.mGroupFlags & ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN) != 0) {\n this.refreshDrawableState();\n }\n }\n getClipChildren() {\n return ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0);\n }\n setClipChildren(clipChildren) {\n let previousValue = (this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN;\n if (clipChildren != previousValue) {\n this.setBooleanFlag(ViewGroup.FLAG_CLIP_CHILDREN, clipChildren);\n }\n }\n setClipToPadding(clipToPadding) {\n this.setBooleanFlag(ViewGroup.FLAG_CLIP_TO_PADDING, clipToPadding);\n }\n isClipToPadding() {\n return (this.mGroupFlags & ViewGroup.FLAG_CLIP_TO_PADDING) == ViewGroup.FLAG_CLIP_TO_PADDING;\n }\n invalidateChild(child, dirty) {\n let parent = this;\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n const drawAnimation = (child.mPrivateFlags & view_4.View.PFLAG_DRAW_ANIMATION)\n == view_4.View.PFLAG_DRAW_ANIMATION;\n let childMatrix = child.getMatrix();\n const isOpaque = child.isOpaque() && !drawAnimation && child.getAnimation() == null && childMatrix.isIdentity();\n let opaqueFlag = isOpaque ? view_4.View.PFLAG_DIRTY_OPAQUE : view_4.View.PFLAG_DIRTY;\n if (child.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED;\n this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWING_CACHE_VALID;\n child.mLocalDirtyRect.union(dirty);\n }\n const location = attachInfo.mInvalidateChildLocation;\n location[0] = child.mLeft;\n location[1] = child.mTop;\n if (!childMatrix.isIdentity() ||\n (this.mGroupFlags & ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n let boundingRect = attachInfo.mTmpTransformRect;\n boundingRect.set(dirty);\n let transformMatrix;\n if ((this.mGroupFlags & ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) {\n let t = attachInfo.mTmpTransformation;\n let transformed = this.getChildStaticTransformation(child, t);\n if (transformed) {\n transformMatrix = attachInfo.mTmpMatrix;\n transformMatrix.set(t.getMatrix());\n if (!childMatrix.isIdentity()) {\n transformMatrix.preConcat(childMatrix);\n }\n }\n else {\n transformMatrix = childMatrix;\n }\n }\n else {\n transformMatrix = childMatrix;\n }\n transformMatrix.mapRect(boundingRect);\n dirty.set(boundingRect);\n }\n do {\n let view = null;\n if (parent instanceof view_4.View) {\n view = parent;\n }\n if (drawAnimation) {\n if (view != null) {\n view.mPrivateFlags |= ViewGroup.PFLAG_DRAW_ANIMATION;\n }\n else if (parent instanceof view_4.ViewRootImpl) {\n parent.mIsAnimating = true;\n }\n }\n if (view != null) {\n opaqueFlag = view_4.View.PFLAG_DIRTY;\n if ((view.mPrivateFlags & view_4.View.PFLAG_DIRTY_MASK) != view_4.View.PFLAG_DIRTY) {\n view.mPrivateFlags = (view.mPrivateFlags & ~view_4.View.PFLAG_DIRTY_MASK) | opaqueFlag;\n }\n }\n parent = parent.invalidateChildInParent(location, dirty);\n if (view != null) {\n let m = view.getMatrix();\n if (!m.isIdentity()) {\n let boundingRect = attachInfo.mTmpTransformRect;\n boundingRect.set(dirty);\n m.mapRect(boundingRect);\n dirty.set(boundingRect);\n }\n }\n } while (parent != null);\n }\n }\n invalidateChildInParent(location, dirty) {\n if ((this.mPrivateFlags & view_4.View.PFLAG_DRAWN) == view_4.View.PFLAG_DRAWN ||\n (this.mPrivateFlags & view_4.View.PFLAG_DRAWING_CACHE_VALID) == view_4.View.PFLAG_DRAWING_CACHE_VALID) {\n if ((this.mGroupFlags & (ViewGroup.FLAG_OPTIMIZE_INVALIDATE | ViewGroup.FLAG_ANIMATION_DONE)) !=\n ViewGroup.FLAG_OPTIMIZE_INVALIDATE) {\n dirty.offset(location[0] - this.mScrollX, location[1] - this.mScrollY);\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0) {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n const left = this.mLeft;\n const top = this.mTop;\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN) {\n if (!dirty.intersect(0, 0, this.mRight - left, this.mBottom - top)) {\n dirty.setEmpty();\n }\n }\n this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWING_CACHE_VALID;\n location[0] = left;\n location[1] = top;\n if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED;\n this.mLocalDirtyRect.union(dirty);\n }\n return this.mParent;\n }\n else {\n this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWN & ~view_4.View.PFLAG_DRAWING_CACHE_VALID;\n location[0] = this.mLeft;\n location[1] = this.mTop;\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN) {\n dirty.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n else {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED;\n this.mLocalDirtyRect.union(dirty);\n }\n return this.mParent;\n }\n }\n return null;\n }\n invalidateChildFast(child, dirty) {\n let parent = this;\n const attachInfo = this.mAttachInfo;\n if (attachInfo != null) {\n if (child.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n child.mLocalDirtyRect.union(dirty);\n }\n let left = child.mLeft;\n let top = child.mTop;\n if (!child.getMatrix().isIdentity()) {\n child.transformRect(dirty);\n }\n do {\n if (parent instanceof ViewGroup) {\n let parentVG = parent;\n if (parentVG.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n parentVG.invalidate();\n parent = null;\n }\n else {\n parent = parentVG.invalidateChildInParentFast(left, top, dirty);\n left = parentVG.mLeft;\n top = parentVG.mTop;\n }\n }\n else {\n const location = attachInfo.mInvalidateChildLocation;\n location[0] = left;\n location[1] = top;\n parent = parent.invalidateChildInParent(location, dirty);\n }\n } while (parent != null);\n }\n }\n invalidateChildInParentFast(left, top, dirty) {\n if ((this.mPrivateFlags & view_4.View.PFLAG_DRAWN) == view_4.View.PFLAG_DRAWN ||\n (this.mPrivateFlags & view_4.View.PFLAG_DRAWING_CACHE_VALID) == view_4.View.PFLAG_DRAWING_CACHE_VALID) {\n dirty.offset(left - this.mScrollX, top - this.mScrollY);\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0) {\n dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop);\n }\n if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0 ||\n dirty.intersect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop)) {\n if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) {\n this.mLocalDirtyRect.union(dirty);\n }\n if (!this.getMatrix().isIdentity()) {\n this.transformRect(dirty);\n }\n return this.mParent;\n }\n }\n return null;\n }\n getChildStaticTransformation(child, t) {\n return false;\n }\n getChildTransformation() {\n if (this.mChildTransformation == null) {\n this.mChildTransformation = new Transformation();\n }\n return this.mChildTransformation;\n }\n findViewTraversal(id) {\n if (id == this.mID) {\n return this;\n }\n let where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if ((v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewById(id);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n findViewWithTagTraversal(tag) {\n if (tag != null && tag === this.mTag) {\n return this;\n }\n let where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if ((v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewWithTag(tag);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n const where = this.mChildren;\n const len = this.mChildrenCount;\n for (let i = 0; i < len; i++) {\n let v = where[i];\n if (v != childToSkip && (v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) {\n v = v.findViewByPredicate(predicate);\n if (v != null) {\n return v;\n }\n }\n }\n return null;\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept == ((this.mGroupFlags & ViewGroup.FLAG_DISALLOW_INTERCEPT) != 0)) {\n return;\n }\n if (disallowIntercept) {\n this.mGroupFlags |= ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n else {\n this.mGroupFlags &= ~ViewGroup.FLAG_DISALLOW_INTERCEPT;\n }\n if (this.mParent != null) {\n this.mParent.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n }\n shouldDelayChildPressedState() {\n return true;\n }\n onSetLayoutParams(child, layoutParams) {\n }\n }\n ViewGroup.FLAG_CLIP_CHILDREN = 0x1;\n ViewGroup.FLAG_CLIP_TO_PADDING = 0x2;\n ViewGroup.FLAG_INVALIDATE_REQUIRED = 0x4;\n ViewGroup.FLAG_RUN_ANIMATION = 0x8;\n ViewGroup.FLAG_ANIMATION_DONE = 0x10;\n ViewGroup.FLAG_PADDING_NOT_NULL = 0x20;\n ViewGroup.FLAG_ANIMATION_CACHE = 0x40;\n ViewGroup.FLAG_OPTIMIZE_INVALIDATE = 0x80;\n ViewGroup.FLAG_CLEAR_TRANSFORMATION = 0x100;\n ViewGroup.FLAG_NOTIFY_ANIMATION_LISTENER = 0x200;\n ViewGroup.FLAG_USE_CHILD_DRAWING_ORDER = 0x400;\n ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800;\n ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE = 0x1000;\n ViewGroup.FLAG_ADD_STATES_FROM_CHILDREN = 0x2000;\n ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE = 0x4000;\n ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE = 0x8000;\n ViewGroup.FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE = 0x10000;\n ViewGroup.FLAG_MASK_FOCUSABILITY = 0x60000;\n ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;\n ViewGroup.FOCUS_AFTER_DESCENDANTS = 0x40000;\n ViewGroup.FOCUS_BLOCK_DESCENDANTS = 0x60000;\n ViewGroup.FLAG_DISALLOW_INTERCEPT = 0x80000;\n ViewGroup.FLAG_SPLIT_MOTION_EVENTS = 0x200000;\n ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW = 0x400000;\n ViewGroup.FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET = 0x800000;\n ViewGroup.PERSISTENT_NO_CACHE = 0x0;\n ViewGroup.PERSISTENT_ANIMATION_CACHE = 0x1;\n ViewGroup.PERSISTENT_SCROLLING_CACHE = 0x2;\n ViewGroup.PERSISTENT_ALL_CACHES = 0x3;\n ViewGroup.LAYOUT_MODE_UNDEFINED = -1;\n ViewGroup.LAYOUT_MODE_CLIP_BOUNDS = 0;\n ViewGroup.LAYOUT_MODE_DEFAULT = ViewGroup.LAYOUT_MODE_CLIP_BOUNDS;\n ViewGroup.CLIP_TO_PADDING_MASK = ViewGroup.FLAG_CLIP_TO_PADDING | ViewGroup.FLAG_PADDING_NOT_NULL;\n view_4.ViewGroup = ViewGroup;\n (function (ViewGroup) {\n class LayoutParams extends java.lang.JavaObject {\n constructor(...args) {\n super();\n this.width = 0;\n this.height = 0;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const a = args[0].obtainStyledAttributes(args[1]);\n this.setBaseAttributes(a, 'layout_width', 'layout_height');\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n this.width = args[0];\n this.height = args[1];\n }\n else if (args[0] instanceof LayoutParams) {\n this.width = args[0].width;\n this.height = args[0].height;\n }\n else if (args.length === 0) {\n }\n }\n setBaseAttributes(a, widthAttr, heightAttr) {\n this.width = a.getLayoutDimension(widthAttr, LayoutParams.WRAP_CONTENT);\n this.height = a.getLayoutDimension(heightAttr, LayoutParams.WRAP_CONTENT);\n }\n getAttrBinder() {\n if (!this._attrBinder) {\n this._attrBinder = this.initBindAttr();\n }\n return this._attrBinder;\n }\n initBindAttr() {\n let classAttrBinder = LayoutParams.ClassAttrBinderClazzMap.get(this.getClass());\n if (!classAttrBinder) {\n classAttrBinder = this.createClassAttrBinder();\n LayoutParams.ClassAttrBinderClazzMap.set(this.getClass(), classAttrBinder);\n }\n const attrBinder = new AttrBinder(this);\n attrBinder.setClassAttrBind(classAttrBinder);\n return attrBinder;\n }\n createClassAttrBinder() {\n return new androidui.attr.AttrBinder.ClassBinderMap()\n .set('layout_width', {\n setter(host, value, attrBinder) {\n host.width = attrBinder.parseDimension(value, host.width);\n }, getter(host) {\n return host.width;\n }\n }).set('layout_height', {\n setter(host, value, attrBinder) {\n host.height = attrBinder.parseDimension(value, host.height);\n }, getter(host) {\n return host.height;\n }\n });\n }\n }\n LayoutParams.ClassAttrBinderClazzMap = new Map();\n LayoutParams.FILL_PARENT = -1;\n LayoutParams.MATCH_PARENT = -1;\n LayoutParams.WRAP_CONTENT = -2;\n ViewGroup.LayoutParams = LayoutParams;\n class MarginLayoutParams extends LayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof Context && args[1] instanceof HTMLElement)\n return [0, 0];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof MarginLayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.leftMargin = 0;\n this.topMargin = 0;\n this.rightMargin = 0;\n this.bottomMargin = 0;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const a = args[0].obtainStyledAttributes(args[1]);\n this.setBaseAttributes(a, 'layout_width', 'layout_height');\n let margin = a.getDimensionPixelSize('layout_margin', -1);\n if (margin >= 0) {\n this.leftMargin = margin;\n this.topMargin = margin;\n this.rightMargin = margin;\n this.bottomMargin = margin;\n }\n else {\n this.leftMargin = a.getDimensionPixelSize('layout_marginLeft', 0);\n this.rightMargin = a.getDimensionPixelSize('layout_marginRight', 0);\n this.topMargin = a.getDimensionPixelSize('layout_marginTop', 0);\n this.bottomMargin = a.getDimensionPixelSize('layout_marginBottom', 0);\n this.leftMargin = a.getDimensionPixelSize('layout_marginStart', this.leftMargin);\n this.rightMargin = a.getDimensionPixelSize('layout_marginEnd', this.rightMargin);\n }\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n }\n else if (args[0] instanceof MarginLayoutParams) {\n const source = args[0];\n this.width = source.width;\n this.height = source.height;\n this.leftMargin = source.leftMargin;\n this.topMargin = source.topMargin;\n this.rightMargin = source.rightMargin;\n this.bottomMargin = source.bottomMargin;\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_marginLeft', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.leftMargin = value;\n }, getter(host) {\n return host.leftMargin;\n }\n }).set('layout_marginStart', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.leftMargin = value;\n }, getter(host) {\n return host.leftMargin;\n }\n }).set('layout_marginTop', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.topMargin = value;\n }, getter(host) {\n return host.topMargin;\n }\n }).set('layout_marginRight', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.rightMargin = value;\n }, getter(host) {\n return host.rightMargin;\n }\n }).set('layout_marginEnd', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.rightMargin = value;\n }, getter(host) {\n return host.rightMargin;\n }\n }).set('layout_marginBottom', {\n setter(host, value) {\n if (value == null)\n value = 0;\n host.bottomMargin = value;\n }, getter(host) {\n return host.bottomMargin;\n }\n }).set('layout_margin', {\n setter(host, value, attrBinder) {\n if (value == null)\n value = 0;\n let [top, right, bottom, left] = attrBinder.parsePaddingMarginTRBL(value);\n host.topMargin = top;\n host.rightMargin = right;\n host.bottomMargin = bottom;\n host.leftMargin = left;\n }, getter(host) {\n return host.topMargin + ' ' + host.rightMargin + ' ' + host.bottomMargin + ' ' + host.leftMargin;\n }\n });\n }\n setMargins(left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n }\n setLayoutDirection(layoutDirection) {\n }\n getLayoutDirection() {\n return view_4.View.LAYOUT_DIRECTION_LTR;\n }\n isLayoutRtl() {\n return this.getLayoutDirection() == view_4.View.LAYOUT_DIRECTION_RTL;\n }\n resolveLayoutDirection(layoutDirection) {\n }\n }\n MarginLayoutParams.DEFAULT_MARGIN_RELATIVE = Integer.MIN_VALUE;\n MarginLayoutParams.DEFAULT_MARGIN_RESOLVED = 0;\n MarginLayoutParams.UNDEFINED_MARGIN = MarginLayoutParams.DEFAULT_MARGIN_RELATIVE;\n ViewGroup.MarginLayoutParams = MarginLayoutParams;\n })(ViewGroup = view_4.ViewGroup || (view_4.ViewGroup = {}));\n class TouchTarget {\n static obtain(child, pointerIdBits) {\n let target;\n if (TouchTarget.sRecycleBin == null) {\n target = new TouchTarget();\n }\n else {\n target = TouchTarget.sRecycleBin;\n TouchTarget.sRecycleBin = target.next;\n TouchTarget.sRecycledCount--;\n target.next = null;\n }\n target.child = child;\n target.pointerIdBits = pointerIdBits;\n return target;\n }\n recycle() {\n if (TouchTarget.sRecycledCount < TouchTarget.MAX_RECYCLED) {\n this.next = TouchTarget.sRecycleBin;\n TouchTarget.sRecycleBin = this;\n TouchTarget.sRecycledCount += 1;\n }\n else {\n this.next = null;\n }\n this.child = null;\n }\n }\n TouchTarget.MAX_RECYCLED = 32;\n TouchTarget.sRecycledCount = 0;\n TouchTarget.ALL_POINTER_IDS = -1;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Drawable = android.graphics.drawable.Drawable;\n class ViewOverlay {\n constructor(hostView) {\n this.mOverlayViewGroup = new ViewOverlay.OverlayViewGroup(hostView);\n }\n getOverlayView() {\n return this.mOverlayViewGroup;\n }\n add(drawable) {\n this.mOverlayViewGroup.add(drawable);\n }\n remove(drawable) {\n }\n clear() {\n this.mOverlayViewGroup.clear();\n }\n isEmpty() {\n return this.mOverlayViewGroup.isEmpty();\n }\n }\n view.ViewOverlay = ViewOverlay;\n (function (ViewOverlay) {\n class OverlayViewGroup extends view.ViewGroup {\n constructor(hostView) {\n super(hostView.getContext());\n this.mHostView = hostView;\n this.mAttachInfo = hostView.mAttachInfo;\n this.mRight = hostView.getWidth();\n this.mBottom = hostView.getHeight();\n }\n addDrawable(drawable) {\n }\n addView(child) {\n }\n add(arg) {\n if (arg instanceof Drawable)\n this.addDrawable(arg);\n else if (arg instanceof view.View)\n this.addView(arg);\n }\n clear() {\n }\n isEmpty() {\n return true;\n }\n onLayout(changed, l, t, r, b) {\n }\n }\n ViewOverlay.OverlayViewGroup = OverlayViewGroup;\n })(ViewOverlay = view.ViewOverlay || (view.ViewOverlay = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Rect = android.graphics.Rect;\n var Context = android.content.Context;\n class FrameLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mMeasureAllChildren = false;\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n this.mSelfBounds = new Rect();\n this.mOverlayBounds = new Rect();\n this.mForegroundGravity = Gravity.FILL;\n this.mForegroundInPadding = true;\n this.mForegroundBoundsChanged = false;\n this.mMatchParentChildren = new Array(1);\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n this.mForegroundGravity = Gravity.parseGravity(a.getAttrValue('foregroundGravity'), this.mForegroundGravity);\n const d = a.getDrawable('foreground');\n if (d != null) {\n this.setForeground(d);\n }\n if (a.getBoolean('measureAllChildren', false)) {\n this.setMeasureAllChildren(true);\n }\n this.mForegroundInPadding = a.getBoolean('foregroundInsidePadding', true);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('foregroundGravity', {\n setter(v, value, attrBinder) {\n v.mForegroundGravity = attrBinder.parseGravity(value, v.mForegroundGravity);\n }, getter(v) {\n return v.mForegroundGravity;\n }\n }).set('foreground', {\n setter(v, value, attrBinder) {\n v.setForeground(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.getForeground();\n }\n }).set('measureAllChildren', {\n setter(v, value, attrBinder) {\n if (attrBinder.parseBoolean(value)) {\n v.setMeasureAllChildren(true);\n }\n }, getter(v) {\n return v.mMeasureAllChildren;\n }\n });\n }\n getForegroundGravity() {\n return this.mForegroundGravity;\n }\n setForegroundGravity(foregroundGravity) {\n if (this.mForegroundGravity != foregroundGravity) {\n if ((foregroundGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n foregroundGravity |= Gravity.LEFT;\n }\n if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n foregroundGravity |= Gravity.TOP;\n }\n this.mForegroundGravity = foregroundGravity;\n if (this.mForegroundGravity == Gravity.FILL && this.mForeground != null) {\n let padding = new Rect();\n if (this.mForeground.getPadding(padding)) {\n this.mForegroundPaddingLeft = padding.left;\n this.mForegroundPaddingTop = padding.top;\n this.mForegroundPaddingRight = padding.right;\n this.mForegroundPaddingBottom = padding.bottom;\n }\n }\n else {\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n }\n this.requestLayout();\n }\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || (who == this.mForeground);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mForeground != null)\n this.mForeground.jumpToCurrentState();\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mForeground != null && this.mForeground.isStateful()) {\n this.mForeground.setState(this.getDrawableState());\n }\n }\n generateDefaultLayoutParams() {\n return new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);\n }\n setForeground(drawable) {\n if (this.mForeground != drawable) {\n if (this.mForeground != null) {\n this.mForeground.setCallback(null);\n this.unscheduleDrawable(this.mForeground);\n }\n this.mForeground = drawable;\n this.mForegroundPaddingLeft = 0;\n this.mForegroundPaddingTop = 0;\n this.mForegroundPaddingRight = 0;\n this.mForegroundPaddingBottom = 0;\n if (drawable != null) {\n this.setWillNotDraw(false);\n drawable.setCallback(this);\n if (drawable.isStateful()) {\n drawable.setState(this.getDrawableState());\n }\n if (this.mForegroundGravity == Gravity.FILL) {\n let padding = new Rect();\n if (drawable.getPadding(padding)) {\n this.mForegroundPaddingLeft = padding.left;\n this.mForegroundPaddingTop = padding.top;\n this.mForegroundPaddingRight = padding.right;\n this.mForegroundPaddingBottom = padding.bottom;\n }\n }\n }\n else {\n this.setWillNotDraw(true);\n }\n this.requestLayout();\n this.invalidate();\n }\n }\n getForeground() {\n return this.mForeground;\n }\n getPaddingLeftWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingLeft, this.mForegroundPaddingLeft) :\n this.mPaddingLeft + this.mForegroundPaddingLeft;\n }\n getPaddingRightWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingRight, this.mForegroundPaddingRight) :\n this.mPaddingRight + this.mForegroundPaddingRight;\n }\n getPaddingTopWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingTop, this.mForegroundPaddingTop) :\n this.mPaddingTop + this.mForegroundPaddingTop;\n }\n getPaddingBottomWithForeground() {\n return this.mForegroundInPadding ? Math.max(this.mPaddingBottom, this.mForegroundPaddingBottom) :\n this.mPaddingBottom + this.mForegroundPaddingBottom;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let count = this.getChildCount();\n let measureMatchParentChildren = View.MeasureSpec.getMode(widthMeasureSpec) != View.MeasureSpec.EXACTLY ||\n View.MeasureSpec.getMode(heightMeasureSpec) != View.MeasureSpec.EXACTLY;\n this.mMatchParentChildren = [];\n let maxHeight = 0;\n let maxWidth = 0;\n let childState = 0;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (this.mMeasureAllChildren || child.getVisibility() != View.GONE) {\n this.measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);\n let lp = child.getLayoutParams();\n maxWidth = Math.max(maxWidth, child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin);\n maxHeight = Math.max(maxHeight, child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin);\n childState = View.combineMeasuredStates(childState, child.getMeasuredState());\n if (measureMatchParentChildren) {\n if (lp.width == FrameLayout.LayoutParams.MATCH_PARENT ||\n lp.height == FrameLayout.LayoutParams.MATCH_PARENT) {\n this.mMatchParentChildren.push(child);\n }\n }\n }\n }\n maxWidth += this.getPaddingLeftWithForeground() + this.getPaddingRightWithForeground();\n maxHeight += this.getPaddingTopWithForeground() + this.getPaddingBottomWithForeground();\n maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight());\n maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth());\n let drawable = this.getForeground();\n if (drawable != null) {\n maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());\n maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());\n }\n this.setMeasuredDimension(View.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), View.resolveSizeAndState(maxHeight, heightMeasureSpec, childState << View.MEASURED_HEIGHT_STATE_SHIFT));\n count = this.mMatchParentChildren.length;\n if (count > 1) {\n for (let i = 0; i < count; i++) {\n let child = this.mMatchParentChildren[i];\n let lp = child.getLayoutParams();\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n if (lp.width == FrameLayout.LayoutParams.MATCH_PARENT) {\n childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(this.getMeasuredWidth() -\n this.getPaddingLeftWithForeground() - this.getPaddingRightWithForeground() -\n lp.leftMargin - lp.rightMargin, View.MeasureSpec.EXACTLY);\n }\n else {\n childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.getPaddingLeftWithForeground() + this.getPaddingRightWithForeground() +\n lp.leftMargin + lp.rightMargin, lp.width);\n }\n if (lp.height == FrameLayout.LayoutParams.MATCH_PARENT) {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(this.getMeasuredHeight() -\n this.getPaddingTopWithForeground() - this.getPaddingBottomWithForeground() -\n lp.topMargin - lp.bottomMargin, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(heightMeasureSpec, this.getPaddingTopWithForeground() + this.getPaddingBottomWithForeground() +\n lp.topMargin + lp.bottomMargin, lp.height);\n }\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n onLayout(changed, left, top, right, bottom) {\n this.layoutChildren(left, top, right, bottom, false);\n }\n layoutChildren(left, top, right, bottom, forceLeftGravity) {\n const count = this.getChildCount();\n const parentLeft = this.getPaddingLeftWithForeground();\n const parentRight = right - left - this.getPaddingRightWithForeground();\n const parentTop = this.getPaddingTopWithForeground();\n const parentBottom = bottom - top - this.getPaddingBottomWithForeground();\n this.mForegroundBoundsChanged = true;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n const width = child.getMeasuredWidth();\n const height = child.getMeasuredHeight();\n let childLeft;\n let childTop;\n let gravity = lp.gravity;\n if (gravity == -1) {\n gravity = FrameLayout.DEFAULT_CHILD_GRAVITY;\n }\n const absoluteGravity = gravity;\n const verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n childLeft = parentLeft + (parentRight - parentLeft - width) / 2 +\n lp.leftMargin - lp.rightMargin;\n break;\n case Gravity.RIGHT:\n if (!forceLeftGravity) {\n childLeft = parentRight - width - lp.rightMargin;\n break;\n }\n case Gravity.LEFT:\n default:\n childLeft = parentLeft + lp.leftMargin;\n }\n switch (verticalGravity) {\n case Gravity.TOP:\n childTop = parentTop + lp.topMargin;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = parentTop + (parentBottom - parentTop - height) / 2 +\n lp.topMargin - lp.bottomMargin;\n break;\n case Gravity.BOTTOM:\n childTop = parentBottom - height - lp.bottomMargin;\n break;\n default:\n childTop = parentTop + lp.topMargin;\n }\n child.layout(childLeft, childTop, childLeft + width, childTop + height);\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n this.mForegroundBoundsChanged = true;\n }\n draw(canvas) {\n super.draw(canvas);\n if (this.mForeground != null) {\n const foreground = this.mForeground;\n if (this.mForegroundBoundsChanged) {\n this.mForegroundBoundsChanged = false;\n const selfBounds = this.mSelfBounds;\n const overlayBounds = this.mOverlayBounds;\n const w = this.mRight - this.mLeft;\n const h = this.mBottom - this.mTop;\n if (this.mForegroundInPadding) {\n selfBounds.set(0, 0, w, h);\n }\n else {\n selfBounds.set(this.mPaddingLeft, this.mPaddingTop, w - this.mPaddingRight, h - this.mPaddingBottom);\n }\n Gravity.apply(this.mForegroundGravity, foreground.getIntrinsicWidth(), foreground.getIntrinsicHeight(), selfBounds, overlayBounds);\n foreground.setBounds(overlayBounds);\n }\n foreground.draw(canvas);\n }\n }\n setMeasureAllChildren(measureAll) {\n this.mMeasureAllChildren = measureAll;\n }\n getMeasureAllChildren() {\n return this.mMeasureAllChildren;\n }\n generateLayoutParamsFromAttr(attrs) {\n return new FrameLayout.LayoutParams(this.getContext(), attrs);\n }\n shouldDelayChildPressedState() {\n return false;\n }\n checkLayoutParams(p) {\n return p instanceof FrameLayout.LayoutParams;\n }\n generateLayoutParams(p) {\n return new FrameLayout.LayoutParams(p);\n }\n }\n FrameLayout.DEFAULT_CHILD_GRAVITY = Gravity.TOP | Gravity.LEFT;\n widget.FrameLayout = FrameLayout;\n (function (FrameLayout) {\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number')\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.gravity = -1;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const c = args[0];\n const attrs = args[1];\n const a = c.obtainStyledAttributes(attrs);\n this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), -1);\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') {\n this.gravity = args[2];\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n }\n else if (args[0] instanceof FrameLayout.LayoutParams) {\n const source = args[0];\n this.gravity = source.gravity;\n }\n else if (args[0] instanceof ViewGroup.MarginLayoutParams) {\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_gravity', {\n setter(param, value, attrBinder) {\n param.gravity = attrBinder.parseGravity(value, param.gravity);\n }, getter(param) {\n return param.gravity;\n }\n });\n }\n }\n FrameLayout.LayoutParams = LayoutParams;\n })(FrameLayout = widget.FrameLayout || (widget.FrameLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var Spanned;\n (function (Spanned) {\n function isImplements(obj) {\n return obj && obj['getSpans'] && obj['getSpanStart'] && obj['getSpanEnd']\n && obj['getSpanFlags'] && obj['nextSpanTransition'];\n }\n Spanned.isImplements = isImplements;\n Spanned.SPAN_POINT_MARK_MASK = 0x33;\n Spanned.SPAN_MARK_MARK = 0x11;\n Spanned.SPAN_MARK_POINT = 0x12;\n Spanned.SPAN_POINT_MARK = 0x21;\n Spanned.SPAN_POINT_POINT = 0x22;\n Spanned.SPAN_PARAGRAPH = 0x33;\n Spanned.SPAN_INCLUSIVE_EXCLUSIVE = Spanned.SPAN_MARK_MARK;\n Spanned.SPAN_INCLUSIVE_INCLUSIVE = Spanned.SPAN_MARK_POINT;\n Spanned.SPAN_EXCLUSIVE_EXCLUSIVE = Spanned.SPAN_POINT_MARK;\n Spanned.SPAN_EXCLUSIVE_INCLUSIVE = Spanned.SPAN_POINT_POINT;\n Spanned.SPAN_COMPOSING = 0x100;\n Spanned.SPAN_INTERMEDIATE = 0x200;\n Spanned.SPAN_USER_SHIFT = 24;\n Spanned.SPAN_USER = 0xFFFFFFFF << Spanned.SPAN_USER_SHIFT;\n Spanned.SPAN_PRIORITY_SHIFT = 16;\n Spanned.SPAN_PRIORITY = 0xFF << Spanned.SPAN_PRIORITY_SHIFT;\n })(Spanned = text.Spanned || (text.Spanned = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class TextPaint extends android.graphics.Paint {\n constructor() {\n super(...arguments);\n this.baselineShift = 0;\n this.bgColor = 0;\n this.linkColor = 0;\n this.underlineColor = 0;\n this.underlineThickness = 0;\n }\n set(tp) {\n super.set(tp);\n this.bgColor = tp.bgColor;\n this.baselineShift = tp.baselineShift;\n this.linkColor = tp.linkColor;\n this.underlineColor = tp.underlineColor;\n this.underlineThickness = tp.underlineThickness;\n }\n setUnderlineText(color, thickness) {\n this.underlineColor = color;\n this.underlineThickness = thickness;\n }\n }\n text.TextPaint = TextPaint;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n class CharacterStyle {\n constructor() {\n this.mType = CharacterStyle.type;\n }\n static wrap(cs) {\n if (cs instanceof MetricAffectingSpan) {\n return new MetricAffectingSpan.Passthrough_MetricAffectingSpan(cs);\n }\n else {\n return new CharacterStyle.Passthrough_CharacterStyle(cs);\n }\n }\n getUnderlying() {\n return this;\n }\n }\n CharacterStyle.type = Symbol();\n style.CharacterStyle = CharacterStyle;\n (function (CharacterStyle) {\n class Passthrough_CharacterStyle extends CharacterStyle {\n constructor(cs) {\n super();\n this.mStyle = cs;\n }\n updateDrawState(tp) {\n this.mStyle.updateDrawState(tp);\n }\n getUnderlying() {\n return this.mStyle.getUnderlying();\n }\n }\n CharacterStyle.Passthrough_CharacterStyle = Passthrough_CharacterStyle;\n })(CharacterStyle = style.CharacterStyle || (style.CharacterStyle = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var CharacterStyle = android.text.style.CharacterStyle;\n class MetricAffectingSpan extends CharacterStyle {\n constructor() {\n super(...arguments);\n this.mType = MetricAffectingSpan.type;\n }\n getUnderlying() {\n return this;\n }\n }\n MetricAffectingSpan.type = Symbol();\n style.MetricAffectingSpan = MetricAffectingSpan;\n (function (MetricAffectingSpan) {\n class Passthrough_MetricAffectingSpan extends MetricAffectingSpan {\n constructor(cs) {\n super();\n this.mStyle = cs;\n }\n updateDrawState(tp) {\n this.mStyle.updateDrawState(tp);\n }\n updateMeasureState(tp) {\n this.mStyle.updateMeasureState(tp);\n }\n getUnderlying() {\n return this.mStyle.getUnderlying();\n }\n }\n MetricAffectingSpan.Passthrough_MetricAffectingSpan = Passthrough_MetricAffectingSpan;\n })(MetricAffectingSpan = style.MetricAffectingSpan || (style.MetricAffectingSpan = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_1) {\n var style;\n (function (style) {\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n class ReplacementSpan extends MetricAffectingSpan {\n constructor() {\n super(...arguments);\n this.mType = ReplacementSpan.type;\n }\n updateMeasureState(p) {\n }\n updateDrawState(ds) {\n }\n }\n ReplacementSpan.type = Symbol();\n style.ReplacementSpan = ReplacementSpan;\n })(style = text_1.style || (text_1.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var ParagraphStyle;\n (function (ParagraphStyle) {\n ParagraphStyle.type = Symbol();\n })(ParagraphStyle = style.ParagraphStyle || (style.ParagraphStyle = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_2) {\n var style;\n (function (style) {\n var TextUtils = android.text.TextUtils;\n var LeadingMarginSpan;\n (function (LeadingMarginSpan) {\n function isImpl(obj) {\n return obj && obj['getLeadingMargin'] && obj['drawLeadingMargin'];\n }\n LeadingMarginSpan.isImpl = isImpl;\n LeadingMarginSpan.type = Symbol();\n var LeadingMarginSpan2;\n (function (LeadingMarginSpan2) {\n function isImpl(obj) {\n return obj['getLeadingMarginLineCount'];\n }\n LeadingMarginSpan2.isImpl = isImpl;\n })(LeadingMarginSpan2 = LeadingMarginSpan.LeadingMarginSpan2 || (LeadingMarginSpan.LeadingMarginSpan2 = {}));\n class Standard {\n constructor(first, rest = first) {\n this.mFirst = 0;\n this.mRest = 0;\n this.mFirst = first;\n this.mRest = rest;\n }\n getSpanTypeId() {\n return TextUtils.LEADING_MARGIN_SPAN;\n }\n describeContents() {\n return 0;\n }\n getLeadingMargin(first) {\n return first ? this.mFirst : this.mRest;\n }\n drawLeadingMargin(c, p, x, dir, top, baseline, bottom, text, start, end, first, layout) {\n ;\n }\n }\n LeadingMarginSpan.Standard = Standard;\n })(LeadingMarginSpan = style.LeadingMarginSpan || (style.LeadingMarginSpan = {}));\n })(style = text_2.style || (text_2.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_3) {\n var style;\n (function (style) {\n var LineBackgroundSpan;\n (function (LineBackgroundSpan) {\n LineBackgroundSpan.type = Symbol();\n })(LineBackgroundSpan = style.LineBackgroundSpan || (style.LineBackgroundSpan = {}));\n })(style = text_3.style || (text_3.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var style;\n (function (style) {\n var TabStopSpan;\n (function (TabStopSpan) {\n TabStopSpan.type = Symbol();\n function isImpl(obj) {\n return obj && obj['getTabStop'];\n }\n TabStopSpan.isImpl = isImpl;\n class Standard {\n constructor(where) {\n this.mTab = 0;\n this.mTab = where;\n }\n getTabStop() {\n return this.mTab;\n }\n }\n TabStopSpan.Standard = Standard;\n })(TabStopSpan = style.TabStopSpan || (style.TabStopSpan = {}));\n })(style = text.style || (text.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class SpanSet {\n constructor(type) {\n this.numberOfSpans = 0;\n this.classType = type;\n this.numberOfSpans = 0;\n }\n init(spanned, start, limit) {\n const allSpans = spanned.getSpans(start, limit, this.classType);\n const length = allSpans.length;\n if (length > 0 && (this.spans == null || this.spans.length < length)) {\n this.spans = new Array(length);\n this.spanStarts = androidui.util.ArrayCreator.newNumberArray(length);\n this.spanEnds = androidui.util.ArrayCreator.newNumberArray(length);\n this.spanFlags = androidui.util.ArrayCreator.newNumberArray(length);\n }\n this.numberOfSpans = 0;\n for (let i = 0; i < length; i++) {\n const span = allSpans[i];\n const spanStart = spanned.getSpanStart(span);\n const spanEnd = spanned.getSpanEnd(span);\n if (spanStart == spanEnd)\n continue;\n const spanFlag = spanned.getSpanFlags(span);\n this.spans[this.numberOfSpans] = span;\n this.spanStarts[this.numberOfSpans] = spanStart;\n this.spanEnds[this.numberOfSpans] = spanEnd;\n this.spanFlags[this.numberOfSpans] = spanFlag;\n this.numberOfSpans++;\n }\n }\n hasSpansIntersecting(start, end) {\n for (let i = 0; i < this.numberOfSpans; i++) {\n if (this.spanStarts[i] >= end || this.spanEnds[i] <= start)\n continue;\n return true;\n }\n return false;\n }\n getNextTransition(start, limit) {\n for (let i = 0; i < this.numberOfSpans; i++) {\n const spanStart = this.spanStarts[i];\n const spanEnd = this.spanEnds[i];\n if (spanStart > start && spanStart < limit)\n limit = spanStart;\n if (spanEnd > start && spanEnd < limit)\n limit = spanEnd;\n }\n return limit;\n }\n recycle() {\n for (let i = 0; i < this.numberOfSpans; i++) {\n this.spans[i] = null;\n }\n }\n }\n text.SpanSet = SpanSet;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n class TextDirectionHeuristics {\n static isRtlText(directionality) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n static isRtlTextOrFormat(directionality) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n }\n TextDirectionHeuristics.STATE_TRUE = 0;\n TextDirectionHeuristics.STATE_FALSE = 1;\n TextDirectionHeuristics.STATE_UNKNOWN = 2;\n text.TextDirectionHeuristics = TextDirectionHeuristics;\n (function (TextDirectionHeuristics) {\n class TextDirectionHeuristicImpl {\n constructor(algorithm) {\n this.mAlgorithm = algorithm;\n }\n isRtl(cs, start, count) {\n if (cs == null || start < 0 || count < 0 || cs.length - count < start) {\n throw Error(`new IllegalArgumentException()`);\n }\n if (this.mAlgorithm == null) {\n return this.defaultIsRtl();\n }\n return this.doCheck(cs, start, count);\n }\n doCheck(cs, start, count) {\n switch (this.mAlgorithm.checkRtl(cs, start, count)) {\n case TextDirectionHeuristics.STATE_TRUE:\n return true;\n case TextDirectionHeuristics.STATE_FALSE:\n return false;\n default:\n return this.defaultIsRtl();\n }\n }\n }\n TextDirectionHeuristics.TextDirectionHeuristicImpl = TextDirectionHeuristicImpl;\n class TextDirectionHeuristicInternal extends TextDirectionHeuristics.TextDirectionHeuristicImpl {\n constructor(algorithm, defaultIsRtl) {\n super(algorithm);\n this.mDefaultIsRtl = defaultIsRtl;\n }\n defaultIsRtl() {\n return this.mDefaultIsRtl;\n }\n }\n TextDirectionHeuristics.TextDirectionHeuristicInternal = TextDirectionHeuristicInternal;\n class FirstStrong {\n constructor() {\n }\n checkRtl(cs, start, count) {\n let result = TextDirectionHeuristics.STATE_UNKNOWN;\n for (let i = start, e = start + count; i < e && result == TextDirectionHeuristics.STATE_UNKNOWN; ++i) {\n result = TextDirectionHeuristics.STATE_FALSE;\n }\n return result;\n }\n }\n FirstStrong.INSTANCE = new FirstStrong();\n TextDirectionHeuristics.FirstStrong = FirstStrong;\n class AnyStrong {\n constructor(lookForRtl) {\n this.mLookForRtl = lookForRtl;\n }\n checkRtl(cs, start, count) {\n let haveUnlookedFor = false;\n for (let i = start, e = start + count; i < e; ++i) {\n switch (TextDirectionHeuristics.isRtlText(0)) {\n case TextDirectionHeuristics.STATE_TRUE:\n if (this.mLookForRtl) {\n return TextDirectionHeuristics.STATE_TRUE;\n }\n haveUnlookedFor = true;\n break;\n case TextDirectionHeuristics.STATE_FALSE:\n if (!this.mLookForRtl) {\n return TextDirectionHeuristics.STATE_FALSE;\n }\n haveUnlookedFor = true;\n break;\n default:\n break;\n }\n }\n if (haveUnlookedFor) {\n return this.mLookForRtl ? TextDirectionHeuristics.STATE_FALSE : TextDirectionHeuristics.STATE_TRUE;\n }\n return TextDirectionHeuristics.STATE_UNKNOWN;\n }\n }\n AnyStrong.INSTANCE_RTL = new AnyStrong(true);\n AnyStrong.INSTANCE_LTR = new AnyStrong(false);\n TextDirectionHeuristics.AnyStrong = AnyStrong;\n class TextDirectionHeuristicLocale extends TextDirectionHeuristics.TextDirectionHeuristicImpl {\n constructor() {\n super(null);\n }\n defaultIsRtl() {\n return false;\n }\n }\n TextDirectionHeuristicLocale.INSTANCE = new TextDirectionHeuristicLocale();\n TextDirectionHeuristics.TextDirectionHeuristicLocale = TextDirectionHeuristicLocale;\n })(TextDirectionHeuristics = text.TextDirectionHeuristics || (text.TextDirectionHeuristics = {}));\n TextDirectionHeuristics.LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(null, false);\n TextDirectionHeuristics.RTL = new TextDirectionHeuristics.TextDirectionHeuristicInternal(null, true);\n TextDirectionHeuristics.FIRSTSTRONG_LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.FirstStrong.INSTANCE, false);\n TextDirectionHeuristics.FIRSTSTRONG_RTL = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.FirstStrong.INSTANCE, true);\n TextDirectionHeuristics.ANYRTL_LTR = new TextDirectionHeuristics.TextDirectionHeuristicInternal(TextDirectionHeuristics.AnyStrong.INSTANCE_RTL, false);\n TextDirectionHeuristics.LOCALE = TextDirectionHeuristics.TextDirectionHeuristicLocale.INSTANCE;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_4) {\n var Canvas = android.graphics.Canvas;\n var Paint = android.graphics.Paint;\n var CharacterStyle = android.text.style.CharacterStyle;\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var Log = android.util.Log;\n var Spanned = android.text.Spanned;\n var SpanSet = android.text.SpanSet;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n var Layout = android.text.Layout;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval('Layout = android.text.Layout;');\n });\n class TextLine {\n constructor() {\n this.mStart = 0;\n this.mLen = 0;\n this.mDir = 0;\n this.mWorkPaint = new TextPaint();\n this.mMetricAffectingSpanSpanSet = new SpanSet(MetricAffectingSpan.type);\n this.mCharacterStyleSpanSet = new SpanSet(CharacterStyle.type);\n this.mReplacementSpanSpanSet = new SpanSet(ReplacementSpan.type);\n }\n static obtain() {\n let tl;\n {\n for (let i = TextLine.sCached.length; --i >= 0;) {\n if (TextLine.sCached[i] != null) {\n tl = TextLine.sCached[i];\n TextLine.sCached[i] = null;\n return tl;\n }\n }\n }\n tl = new TextLine();\n if (TextLine.DEBUG) {\n Log.v(\"TLINE\", \"new: \" + tl);\n }\n return tl;\n }\n static recycle(tl) {\n tl.mText = null;\n tl.mPaint = null;\n tl.mDirections = null;\n tl.mMetricAffectingSpanSpanSet.recycle();\n tl.mCharacterStyleSpanSet.recycle();\n tl.mReplacementSpanSpanSet.recycle();\n {\n for (let i = 0; i < TextLine.sCached.length; ++i) {\n if (TextLine.sCached[i] == null) {\n TextLine.sCached[i] = tl;\n break;\n }\n }\n }\n return null;\n }\n set(paint, text, start, limit, dir, directions, hasTabs, tabStops) {\n this.mPaint = paint;\n this.mText = text;\n this.mStart = start;\n this.mLen = limit - start;\n this.mDir = dir;\n this.mDirections = directions;\n if (this.mDirections == null) {\n throw Error(`new IllegalArgumentException(\"Directions cannot be null\")`);\n }\n this.mHasTabs = hasTabs;\n this.mSpanned = null;\n let hasReplacement = false;\n if (Spanned.isImplements(text)) {\n this.mSpanned = text;\n this.mReplacementSpanSpanSet.init(this.mSpanned, start, limit);\n hasReplacement = this.mReplacementSpanSpanSet.numberOfSpans > 0;\n }\n this.mCharsValid = hasReplacement || hasTabs || directions != Layout.DIRS_ALL_LEFT_TO_RIGHT;\n if (this.mCharsValid) {\n this.mChars = text;\n if (hasReplacement) {\n let chars = this.mChars.split('');\n for (let i = start, inext; i < limit; i = inext) {\n inext = this.mReplacementSpanSpanSet.getNextTransition(i, limit);\n if (this.mReplacementSpanSpanSet.hasSpansIntersecting(i, inext)) {\n chars[i - start] = '';\n for (let j = i - start + 1, e = inext - start; j < e; ++j) {\n chars[j] = '';\n }\n }\n }\n this.mChars = chars.join('');\n }\n }\n this.mTabs = tabStops;\n }\n draw(c, x, top, y, bottom) {\n if (!this.mHasTabs) {\n if (this.mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n this.drawRun(c, 0, this.mLen, false, x, top, y, bottom, false);\n return;\n }\n if (this.mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n this.drawRun(c, 0, this.mLen, true, x, top, y, bottom, false);\n return;\n }\n }\n let h = 0;\n let runs = this.mDirections.mDirections;\n let emojiRect = null;\n let lastRunIndex = runs.length - 2;\n for (let i = 0; i < runs.length; i += 2) {\n let runStart = runs[i];\n let runLimit = runStart + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > this.mLen) {\n runLimit = this.mLen;\n }\n let runIsRtl = (runs[i + 1] & Layout.RUN_RTL_FLAG) != 0;\n let segstart = runStart;\n for (let j = this.mHasTabs ? runStart : runLimit; j <= runLimit; j++) {\n let codept = 0;\n if (this.mHasTabs && j < runLimit) {\n codept = this.mChars.codePointAt(j);\n if (codept >= 0xd800 && codept < 0xdc00 && j + 1 < runLimit) {\n codept = this.mChars.codePointAt(j);\n if (codept > 0xffff) {\n ++j;\n continue;\n }\n }\n }\n if (j == runLimit || codept == '\\t'.codePointAt(0)) {\n h += this.drawRun(c, segstart, j, runIsRtl, x + h, top, y, bottom, i != lastRunIndex || j != this.mLen);\n if (codept == '\\t'.codePointAt(0)) {\n h = this.mDir * this.nextTab(h * this.mDir);\n }\n segstart = j + 1;\n }\n }\n }\n }\n metrics(fmi) {\n return this.measure(this.mLen, false, fmi);\n }\n measure(offset, trailing, fmi) {\n let target = trailing ? offset - 1 : offset;\n if (target < 0) {\n return 0;\n }\n let h = 0;\n if (!this.mHasTabs) {\n if (this.mDirections == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n return this.measureRun(0, offset, this.mLen, false, fmi);\n }\n if (this.mDirections == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return this.measureRun(0, offset, this.mLen, true, fmi);\n }\n }\n let chars = this.mChars;\n let runs = this.mDirections.mDirections;\n for (let i = 0; i < runs.length; i += 2) {\n let runStart = runs[i];\n let runLimit = runStart + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > this.mLen) {\n runLimit = this.mLen;\n }\n let runIsRtl = (runs[i + 1] & Layout.RUN_RTL_FLAG) != 0;\n let segstart = runStart;\n for (let j = this.mHasTabs ? runStart : runLimit; j <= runLimit; j++) {\n let codept = 0;\n if (this.mHasTabs && j < runLimit) {\n codept = chars.codePointAt(j);\n if (codept >= 0xd800 && codept < 0xdc00 && j + 1 < runLimit) {\n codept = chars.codePointAt(j);\n if (codept > 0xffff) {\n ++j;\n continue;\n }\n }\n }\n if (j == runLimit || codept == '\\t'.codePointAt(0)) {\n let inSegment = target >= segstart && target < j;\n let advance = (this.mDir == Layout.DIR_RIGHT_TO_LEFT) == runIsRtl;\n if (inSegment && advance) {\n return h += this.measureRun(segstart, offset, j, runIsRtl, fmi);\n }\n let w = this.measureRun(segstart, j, j, runIsRtl, fmi);\n h += advance ? w : -w;\n if (inSegment) {\n return h += this.measureRun(segstart, offset, j, runIsRtl, null);\n }\n if (codept == '\\t'.codePointAt(0)) {\n if (offset == j) {\n return h;\n }\n h = this.mDir * this.nextTab(h * this.mDir);\n if (target == j) {\n return h;\n }\n }\n segstart = j + 1;\n }\n }\n }\n return h;\n }\n drawRun(c, start, limit, runIsRtl, x, top, y, bottom, needWidth) {\n if ((this.mDir == Layout.DIR_LEFT_TO_RIGHT) == runIsRtl) {\n let w = -this.measureRun(start, limit, limit, runIsRtl, null);\n this.handleRun(start, limit, limit, runIsRtl, c, x + w, top, y, bottom, null, false);\n return w;\n }\n return this.handleRun(start, limit, limit, runIsRtl, c, x, top, y, bottom, null, needWidth);\n }\n measureRun(start, offset, limit, runIsRtl, fmi) {\n return this.handleRun(start, offset, limit, runIsRtl, null, 0, 0, 0, 0, fmi, true);\n }\n getOffsetToLeftRightOf(cursor, toLeft) {\n let lineStart = 0;\n let lineEnd = this.mLen;\n let paraIsRtl = this.mDir == -1;\n let runs = this.mDirections.mDirections;\n let runIndex, runLevel = 0, runStart = lineStart, runLimit = lineEnd, newCaret = -1;\n let trailing = false;\n if (cursor == lineStart) {\n runIndex = -2;\n }\n else if (cursor == lineEnd) {\n runIndex = runs.length;\n }\n else {\n for (runIndex = 0; runIndex < runs.length; runIndex += 2) {\n runStart = lineStart + runs[runIndex];\n if (cursor >= runStart) {\n runLimit = runStart + (runs[runIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (runLimit > lineEnd) {\n runLimit = lineEnd;\n }\n if (cursor < runLimit) {\n runLevel = (runs[runIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n if (cursor == runStart) {\n let prevRunIndex, prevRunLevel, prevRunStart, prevRunLimit;\n let pos = cursor - 1;\n for (prevRunIndex = 0; prevRunIndex < runs.length; prevRunIndex += 2) {\n prevRunStart = lineStart + runs[prevRunIndex];\n if (pos >= prevRunStart) {\n prevRunLimit = prevRunStart + (runs[prevRunIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (prevRunLimit > lineEnd) {\n prevRunLimit = lineEnd;\n }\n if (pos < prevRunLimit) {\n prevRunLevel = (runs[prevRunIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n if (prevRunLevel < runLevel) {\n runIndex = prevRunIndex;\n runLevel = prevRunLevel;\n runStart = prevRunStart;\n runLimit = prevRunLimit;\n trailing = true;\n break;\n }\n }\n }\n }\n }\n break;\n }\n }\n }\n if (runIndex != runs.length) {\n let runIsRtl = (runLevel & 0x1) != 0;\n let advance = toLeft == runIsRtl;\n if (cursor != (advance ? runLimit : runStart) || advance != trailing) {\n newCaret = this.getOffsetBeforeAfter(runIndex, runStart, runLimit, runIsRtl, cursor, advance);\n if (newCaret != (advance ? runLimit : runStart)) {\n return newCaret;\n }\n }\n }\n }\n while (true) {\n let advance = toLeft == paraIsRtl;\n let otherRunIndex = runIndex + (advance ? 2 : -2);\n if (otherRunIndex >= 0 && otherRunIndex < runs.length) {\n let otherRunStart = lineStart + runs[otherRunIndex];\n let otherRunLimit = otherRunStart + (runs[otherRunIndex + 1] & Layout.RUN_LENGTH_MASK);\n if (otherRunLimit > lineEnd) {\n otherRunLimit = lineEnd;\n }\n let otherRunLevel = (runs[otherRunIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n let otherRunIsRtl = (otherRunLevel & 1) != 0;\n advance = toLeft == otherRunIsRtl;\n if (newCaret == -1) {\n newCaret = this.getOffsetBeforeAfter(otherRunIndex, otherRunStart, otherRunLimit, otherRunIsRtl, advance ? otherRunStart : otherRunLimit, advance);\n if (newCaret == (advance ? otherRunLimit : otherRunStart)) {\n runIndex = otherRunIndex;\n runLevel = otherRunLevel;\n continue;\n }\n break;\n }\n if (otherRunLevel < runLevel) {\n newCaret = advance ? otherRunStart : otherRunLimit;\n }\n break;\n }\n if (newCaret == -1) {\n newCaret = advance ? this.mLen + 1 : -1;\n break;\n }\n if (newCaret <= lineEnd) {\n newCaret = advance ? lineEnd : lineStart;\n }\n break;\n }\n return newCaret;\n }\n getOffsetBeforeAfter(runIndex, runStart, runLimit, runIsRtl, offset, after) {\n if (runIndex < 0 || offset == (after ? this.mLen : 0)) {\n if (after) {\n return TextUtils.getOffsetAfter(this.mText, offset + this.mStart) - this.mStart;\n }\n return TextUtils.getOffsetBefore(this.mText, offset + this.mStart) - this.mStart;\n }\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n let spanStart = runStart;\n let spanLimit;\n if (this.mSpanned == null) {\n spanLimit = runLimit;\n }\n else {\n let target = after ? offset + 1 : offset;\n let limit = this.mStart + runLimit;\n while (true) {\n spanLimit = this.mSpanned.nextSpanTransition(this.mStart + spanStart, limit, MetricAffectingSpan.type) - this.mStart;\n if (spanLimit >= target) {\n break;\n }\n spanStart = spanLimit;\n }\n let spans = this.mSpanned.getSpans(this.mStart + spanStart, this.mStart + spanLimit, MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, this.mSpanned, MetricAffectingSpan.type);\n if (spans.length > 0) {\n let replacement = null;\n for (let j = 0; j < spans.length; j++) {\n let span = spans[j];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateMeasureState(wp);\n }\n }\n if (replacement != null) {\n return after ? spanLimit : spanStart;\n }\n }\n }\n let flags = runIsRtl ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR;\n let cursorOpt = after ? Paint.CURSOR_AFTER : Paint.CURSOR_BEFORE;\n if (this.mCharsValid) {\n return wp.getTextRunCursor_len(this.mChars.toString(), spanStart, spanLimit - spanStart, flags, offset, cursorOpt);\n }\n else {\n return wp.getTextRunCursor_end(this.mText.toString(), this.mStart + spanStart, this.mStart + spanLimit, flags, this.mStart + offset, cursorOpt) - this.mStart;\n }\n }\n static expandMetricsFromPaint(fmi, wp) {\n const previousTop = fmi.top;\n const previousAscent = fmi.ascent;\n const previousDescent = fmi.descent;\n const previousBottom = fmi.bottom;\n const previousLeading = fmi.leading;\n wp.getFontMetricsInt(fmi);\n TextLine.updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading);\n }\n static updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading) {\n fmi.top = Math.min(fmi.top, previousTop);\n fmi.ascent = Math.min(fmi.ascent, previousAscent);\n fmi.descent = Math.max(fmi.descent, previousDescent);\n fmi.bottom = Math.max(fmi.bottom, previousBottom);\n fmi.leading = Math.max(fmi.leading, previousLeading);\n }\n handleText(wp, start, end, contextStart, contextEnd, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n if (fmi != null) {\n TextLine.expandMetricsFromPaint(fmi, wp);\n }\n let runLen = end - start;\n if (runLen == 0) {\n return 0;\n }\n let ret = 0;\n let contextLen = contextEnd - contextStart;\n if (needWidth || (c != null && (wp.bgColor != 0 || wp.underlineColor != 0 || runIsRtl))) {\n let flags = runIsRtl ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR;\n if (this.mCharsValid) {\n ret = wp.getTextRunAdvances_count(this.mChars.toString(), start, runLen, contextStart, contextLen, flags, null, 0);\n }\n else {\n let delta = this.mStart;\n ret = wp.getTextRunAdvances_end(this.mText.toString(), delta + start, delta + end, delta + contextStart, delta + contextEnd, flags, null, 0);\n }\n }\n if (c != null) {\n if (runIsRtl) {\n x -= ret;\n }\n if (wp.bgColor != 0) {\n let previousColor = wp.getColor();\n let previousStyle = wp.getStyle();\n wp.setColor(wp.bgColor);\n wp.setStyle(Paint.Style.FILL);\n c.drawRect(x, top, x + ret, bottom, wp);\n wp.setStyle(previousStyle);\n wp.setColor(previousColor);\n }\n if (wp.underlineColor != 0) {\n let underlineTop = y + wp.baselineShift + (1.0 / 9.0) * wp.getTextSize();\n let previousColor = wp.getColor();\n let previousStyle = wp.getStyle();\n let previousAntiAlias = wp.isAntiAlias();\n wp.setStyle(Paint.Style.FILL);\n wp.setAntiAlias(true);\n wp.setColor(wp.underlineColor);\n c.drawRect(x, underlineTop, x + ret, underlineTop + wp.underlineThickness, wp);\n wp.setStyle(previousStyle);\n wp.setColor(previousColor);\n wp.setAntiAlias(previousAntiAlias);\n }\n this.drawTextRun(c, wp, start, end, contextStart, contextEnd, runIsRtl, x, y + wp.baselineShift);\n }\n return runIsRtl ? -ret : ret;\n }\n handleReplacement(replacement, wp, start, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n let ret = 0;\n let textStart = this.mStart + start;\n let textLimit = this.mStart + limit;\n if (needWidth || (c != null && runIsRtl)) {\n let previousTop = 0;\n let previousAscent = 0;\n let previousDescent = 0;\n let previousBottom = 0;\n let previousLeading = 0;\n let needUpdateMetrics = (fmi != null);\n if (needUpdateMetrics) {\n previousTop = fmi.top;\n previousAscent = fmi.ascent;\n previousDescent = fmi.descent;\n previousBottom = fmi.bottom;\n previousLeading = fmi.leading;\n }\n ret = replacement.getSize(wp, this.mText, textStart, textLimit, fmi);\n if (needUpdateMetrics) {\n TextLine.updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom, previousLeading);\n }\n }\n if (c != null) {\n if (runIsRtl) {\n x -= ret;\n }\n replacement.draw(c, this.mText, textStart, textLimit, x, top, y, bottom, wp);\n }\n return runIsRtl ? -ret : ret;\n }\n handleRun(start, measureLimit, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth) {\n if (start == measureLimit) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n if (fmi != null) {\n TextLine.expandMetricsFromPaint(fmi, wp);\n }\n return 0;\n }\n if (this.mSpanned == null) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n const mlimit = measureLimit;\n return this.handleText(wp, start, mlimit, start, limit, runIsRtl, c, x, top, y, bottom, fmi, needWidth || mlimit < measureLimit);\n }\n this.mMetricAffectingSpanSpanSet.init(this.mSpanned, this.mStart + start, this.mStart + limit);\n this.mCharacterStyleSpanSet.init(this.mSpanned, this.mStart + start, this.mStart + limit);\n const originalX = x;\n for (let i = start, inext; i < measureLimit; i = inext) {\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n inext = this.mMetricAffectingSpanSpanSet.getNextTransition(this.mStart + i, this.mStart + limit) - this.mStart;\n let mlimit = Math.min(inext, measureLimit);\n let replacement = null;\n for (let j = 0; j < this.mMetricAffectingSpanSpanSet.numberOfSpans; j++) {\n if ((this.mMetricAffectingSpanSpanSet.spanStarts[j] >= this.mStart + mlimit) || (this.mMetricAffectingSpanSpanSet.spanEnds[j] <= this.mStart + i))\n continue;\n let span = this.mMetricAffectingSpanSpanSet.spans[j];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateDrawState(wp);\n }\n }\n if (replacement != null) {\n x += this.handleReplacement(replacement, wp, i, mlimit, runIsRtl, c, x, top, y, bottom, fmi, needWidth || mlimit < measureLimit);\n continue;\n }\n for (let j = i, jnext; j < mlimit; j = jnext) {\n jnext = this.mCharacterStyleSpanSet.getNextTransition(this.mStart + j, this.mStart + mlimit) - this.mStart;\n wp.set(this.mPaint);\n for (let k = 0; k < this.mCharacterStyleSpanSet.numberOfSpans; k++) {\n if ((this.mCharacterStyleSpanSet.spanStarts[k] >= this.mStart + jnext) || (this.mCharacterStyleSpanSet.spanEnds[k] <= this.mStart + j))\n continue;\n let span = this.mCharacterStyleSpanSet.spans[k];\n span.updateDrawState(wp);\n }\n x += this.handleText(wp, j, jnext, i, inext, runIsRtl, c, x, top, y, bottom, fmi, needWidth || jnext < measureLimit);\n }\n }\n return x - originalX;\n }\n drawTextRun(c, wp, start, end, contextStart, contextEnd, runIsRtl, x, y) {\n let flags = runIsRtl ? Canvas.DIRECTION_RTL : Canvas.DIRECTION_LTR;\n if (this.mCharsValid) {\n let count = end - start;\n let contextCount = contextEnd - contextStart;\n c.drawTextRun_count(this.mChars.toString(), start, count, contextStart, contextCount, x, y, flags, wp);\n }\n else {\n let delta = this.mStart;\n c.drawTextRun_end(this.mText.toString(), delta + start, delta + end, delta + contextStart, delta + contextEnd, x, y, flags, wp);\n }\n }\n ascent(pos) {\n if (this.mSpanned == null) {\n return this.mPaint.ascent();\n }\n pos += this.mStart;\n let spans = this.mSpanned.getSpans(pos, pos + 1, MetricAffectingSpan.type);\n if (spans.length == 0) {\n return this.mPaint.ascent();\n }\n let wp = this.mWorkPaint;\n wp.set(this.mPaint);\n for (let span of spans) {\n span.updateMeasureState(wp);\n }\n return wp.ascent();\n }\n nextTab(h) {\n if (this.mTabs != null) {\n return this.mTabs.nextTab(h);\n }\n return Layout.TabStops.nextDefaultStop(h, TextLine.TAB_INCREMENT);\n }\n }\n TextLine.DEBUG = false;\n TextLine.sCached = new Array(3);\n TextLine.TAB_INCREMENT = 20;\n text_4.TextLine = TextLine;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_5) {\n var Rect = android.graphics.Rect;\n var LeadingMarginSpan = android.text.style.LeadingMarginSpan;\n var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2;\n var LineBackgroundSpan = android.text.style.LineBackgroundSpan;\n var ParagraphStyle = android.text.style.ParagraphStyle;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var TabStopSpan = android.text.style.TabStopSpan;\n var Arrays = java.util.Arrays;\n var Float = java.lang.Float;\n var System = java.lang.System;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var SpanSet = android.text.SpanSet;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextLine = android.text.TextLine;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n window.addEventListener('AndroidUILoadFinish', () => {\n eval(`TextUtils = android.text.TextUtils;\n MeasuredText = android.text.MeasuredText;\n `);\n });\n class Layout {\n constructor(text, paint, width, align, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingMult = 1, spacingAdd = 0) {\n this.mWidth = 0;\n this.mAlignment = Layout.Alignment.ALIGN_NORMAL;\n this.mSpacingMult = 0;\n this.mSpacingAdd = 0;\n if (width < 0)\n throw Error(`new IllegalArgumentException(\"Layout: \" + width + \" < 0\")`);\n if (paint != null) {\n paint.bgColor = 0;\n paint.baselineShift = 0;\n }\n this.mText = text;\n this.mPaint = paint;\n this.mWorkPaint = new TextPaint();\n this.mWidth = width;\n this.mAlignment = align;\n this.mSpacingMult = spacingMult;\n this.mSpacingAdd = spacingAdd;\n this.mSpannedText = Spanned.isImplements(text);\n this.mTextDir = textDir;\n }\n static getDesiredWidth(...args) {\n if (args.length == 2)\n return Layout.getDesiredWidth_2(...args);\n if (args.length == 4)\n return Layout.getDesiredWidth_4(...args);\n }\n static getDesiredWidth_2(source, paint) {\n return Layout.getDesiredWidth(source, 0, source.length, paint);\n }\n static getDesiredWidth_4(source, start, end, paint) {\n let need = 0;\n let next;\n for (let i = start; i <= end; i = next) {\n next = source.substring(0, end).indexOf('\\n', i);\n if (next < 0)\n next = end;\n let w = Layout.measurePara(paint, source, i, next);\n if (w > need)\n need = w;\n next++;\n }\n return need;\n }\n replaceWith(text, paint, width, align, spacingmult, spacingadd) {\n if (width < 0) {\n throw Error(`new IllegalArgumentException(\"Layout: \" + width + \" < 0\")`);\n }\n this.mText = text;\n this.mPaint = paint;\n this.mWidth = width;\n this.mAlignment = align;\n this.mSpacingMult = spacingmult;\n this.mSpacingAdd = spacingadd;\n this.mSpannedText = Spanned.isImplements(text);\n }\n draw(canvas, highlight = null, highlightPaint = null, cursorOffsetVertical = 0) {\n const lineRange = this.getLineRangeForDraw(canvas);\n let firstLine = TextUtils.unpackRangeStartFromLong(lineRange);\n let lastLine = TextUtils.unpackRangeEndFromLong(lineRange);\n if (lastLine < 0)\n return;\n this.drawBackground(canvas, highlight, highlightPaint, cursorOffsetVertical, firstLine, lastLine);\n this.drawText(canvas, firstLine, lastLine);\n }\n drawText(canvas, firstLine, lastLine) {\n let previousLineBottom = this.getLineTop(firstLine);\n let previousLineEnd = this.getLineStart(firstLine);\n let spans = Layout.NO_PARA_SPANS;\n let spanEnd = 0;\n let paint = this.mPaint;\n let buf = this.mText;\n let paraAlign = this.mAlignment;\n let tabStops = null;\n let tabStopsIsInitialized = false;\n let tl = TextLine.obtain();\n for (let i = firstLine; i <= lastLine; i++) {\n let start = previousLineEnd;\n previousLineEnd = this.getLineStart(i + 1);\n let end = this.getLineVisibleEnd(i, start, previousLineEnd);\n let ltop = previousLineBottom;\n let lbottom = this.getLineTop(i + 1);\n previousLineBottom = lbottom;\n let lbaseline = lbottom - this.getLineDescent(i);\n let dir = this.getParagraphDirection(i);\n let left = 0;\n let right = this.mWidth;\n if (this.mSpannedText) {\n let sp = buf;\n let textLength = buf.length;\n let isFirstParaLine = (start == 0 || buf.charAt(start - 1) == '\\n');\n if (start >= spanEnd && (i == firstLine || isFirstParaLine)) {\n spanEnd = sp.nextSpanTransition(start, textLength, ParagraphStyle.type);\n spans = Layout.getParagraphSpans(sp, start, spanEnd, ParagraphStyle.type);\n paraAlign = this.mAlignment;\n tabStopsIsInitialized = false;\n }\n const length = spans.length;\n for (let n = 0; n < length; n++) {\n if (LeadingMarginSpan.isImpl(spans[n])) {\n let margin = spans[n];\n let useFirstLineMargin = isFirstParaLine;\n if (LeadingMarginSpan2.isImpl(margin)) {\n let count = margin.getLeadingMarginLineCount();\n let startLine = this.getLineForOffset(sp.getSpanStart(margin));\n useFirstLineMargin = i < startLine + count;\n }\n if (dir == Layout.DIR_RIGHT_TO_LEFT) {\n margin.drawLeadingMargin(canvas, paint, right, dir, ltop, lbaseline, lbottom, buf, start, end, isFirstParaLine, this);\n right -= margin.getLeadingMargin(useFirstLineMargin);\n }\n else {\n margin.drawLeadingMargin(canvas, paint, left, dir, ltop, lbaseline, lbottom, buf, start, end, isFirstParaLine, this);\n left += margin.getLeadingMargin(useFirstLineMargin);\n }\n }\n }\n }\n let hasTabOrEmoji = this.getLineContainsTab(i);\n if (hasTabOrEmoji && !tabStopsIsInitialized) {\n if (tabStops == null) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, spans);\n }\n else {\n tabStops.reset(Layout.TAB_INCREMENT, spans);\n }\n tabStopsIsInitialized = true;\n }\n let align = paraAlign;\n if (align == Layout.Alignment.ALIGN_LEFT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL;\n }\n let x;\n if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = left;\n }\n else {\n x = right;\n }\n }\n else {\n let max = Math.floor(this.getLineExtent(i, tabStops, false));\n if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = right - max;\n }\n else {\n x = left - max;\n }\n }\n else {\n max = max & ~1;\n x = (right + left - max) >> 1;\n }\n }\n let directions = this.getLineDirections(i);\n if (directions == Layout.DIRS_ALL_LEFT_TO_RIGHT && !this.mSpannedText && !hasTabOrEmoji) {\n canvas.drawText_end(buf.toString(), start, end, x, lbaseline, paint);\n }\n else {\n tl.set(paint, buf, start, end, dir, directions, hasTabOrEmoji, tabStops);\n tl.draw(canvas, x, ltop, lbaseline, lbottom);\n }\n }\n TextLine.recycle(tl);\n }\n drawBackground(canvas, highlight, highlightPaint, cursorOffsetVertical, firstLine, lastLine) {\n if (this.mSpannedText) {\n if (this.mLineBackgroundSpans == null) {\n this.mLineBackgroundSpans = new SpanSet(LineBackgroundSpan.type);\n }\n let buffer = this.mText;\n let textLength = buffer.length;\n this.mLineBackgroundSpans.init(buffer, 0, textLength);\n if (this.mLineBackgroundSpans.numberOfSpans > 0) {\n let previousLineBottom = this.getLineTop(firstLine);\n let previousLineEnd = this.getLineStart(firstLine);\n let spans = Layout.NO_PARA_SPANS;\n let spansLength = 0;\n let paint = this.mPaint;\n let spanEnd = 0;\n const width = this.mWidth;\n for (let i = firstLine; i <= lastLine; i++) {\n let start = previousLineEnd;\n let end = this.getLineStart(i + 1);\n previousLineEnd = end;\n let ltop = previousLineBottom;\n let lbottom = this.getLineTop(i + 1);\n previousLineBottom = lbottom;\n let lbaseline = lbottom - this.getLineDescent(i);\n if (start >= spanEnd) {\n spanEnd = this.mLineBackgroundSpans.getNextTransition(start, textLength);\n spansLength = 0;\n if (start != end || start == 0) {\n for (let j = 0; j < this.mLineBackgroundSpans.numberOfSpans; j++) {\n if (this.mLineBackgroundSpans.spanStarts[j] >= end || this.mLineBackgroundSpans.spanEnds[j] <= start)\n continue;\n if (spansLength == spans.length) {\n let newSize = (2 * spansLength);\n let newSpans = new Array(newSize);\n System.arraycopy(spans, 0, newSpans, 0, spansLength);\n spans = newSpans;\n }\n spans[spansLength++] = this.mLineBackgroundSpans.spans[j];\n }\n }\n }\n for (let n = 0; n < spansLength; n++) {\n let lineBackgroundSpan = spans[n];\n lineBackgroundSpan.drawBackground(canvas, paint, 0, width, ltop, lbaseline, lbottom, buffer, start, end, i);\n }\n }\n }\n this.mLineBackgroundSpans.recycle();\n }\n if (highlight != null) {\n if (cursorOffsetVertical != 0)\n canvas.translate(0, cursorOffsetVertical);\n canvas.drawPath(highlight, highlightPaint);\n if (cursorOffsetVertical != 0)\n canvas.translate(0, -cursorOffsetVertical);\n }\n }\n getLineRangeForDraw(canvas) {\n let dtop, dbottom;\n {\n if (!canvas.getClipBounds(Layout.sTempRect)) {\n return TextUtils.packRangeInLong(0, -1);\n }\n dtop = Layout.sTempRect.top;\n dbottom = Layout.sTempRect.bottom;\n }\n const top = Math.max(dtop, 0);\n const bottom = Math.min(this.getLineTop(this.getLineCount()), dbottom);\n if (top >= bottom)\n return TextUtils.packRangeInLong(0, -1);\n return TextUtils.packRangeInLong(this.getLineForVertical(top), this.getLineForVertical(bottom));\n }\n getLineStartPos(line, left, right) {\n let align = this.getParagraphAlignment(line);\n let dir = this.getParagraphDirection(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n align = (dir == Layout.DIR_LEFT_TO_RIGHT) ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL;\n }\n let x;\n if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = left;\n }\n else {\n x = right;\n }\n }\n else {\n let tabStops = null;\n if (this.mSpannedText && this.getLineContainsTab(line)) {\n let spanned = this.mText;\n let start = this.getLineStart(line);\n let spanEnd = spanned.nextSpanTransition(start, spanned.length, TabStopSpan.type);\n let tabSpans = Layout.getParagraphSpans(spanned, start, spanEnd, TabStopSpan.type);\n if (tabSpans.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabSpans);\n }\n }\n let max = Math.floor(this.getLineExtent(line, tabStops, false));\n if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_LEFT_TO_RIGHT) {\n x = right - max;\n }\n else {\n x = left - max;\n }\n }\n else {\n max = max & ~1;\n x = (left + right - max) >> 1;\n }\n }\n return x;\n }\n getText() {\n return this.mText;\n }\n getPaint() {\n return this.mPaint;\n }\n getWidth() {\n return this.mWidth;\n }\n getEllipsizedWidth() {\n return this.mWidth;\n }\n increaseWidthTo(wid) {\n if (wid < this.mWidth) {\n throw Error(`new RuntimeException(\"attempted to reduce Layout width\")`);\n }\n this.mWidth = wid;\n }\n getHeight() {\n return this.getLineTop(this.getLineCount());\n }\n getAlignment() {\n return this.mAlignment;\n }\n getSpacingMultiplier() {\n return this.mSpacingMult;\n }\n getSpacingAdd() {\n return this.mSpacingAdd;\n }\n getTextDirectionHeuristic() {\n return this.mTextDir;\n }\n getLineBounds(line, bounds) {\n if (bounds != null) {\n bounds.left = 0;\n bounds.top = this.getLineTop(line);\n bounds.right = this.mWidth;\n bounds.bottom = this.getLineTop(line + 1);\n }\n return this.getLineBaseline(line);\n }\n isLevelBoundary(offset) {\n let line = this.getLineForOffset(offset);\n let dirs = this.getLineDirections(line);\n if (dirs == Layout.DIRS_ALL_LEFT_TO_RIGHT || dirs == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return false;\n }\n let runs = dirs.mDirections;\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n if (offset == lineStart || offset == lineEnd) {\n let paraLevel = this.getParagraphDirection(line) == 1 ? 0 : 1;\n let runIndex = offset == lineStart ? 0 : runs.length - 2;\n return ((runs[runIndex + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK) != paraLevel;\n }\n offset -= lineStart;\n for (let i = 0; i < runs.length; i += 2) {\n if (offset == runs[i]) {\n return true;\n }\n }\n return false;\n }\n isRtlCharAt(offset) {\n let line = this.getLineForOffset(offset);\n let dirs = this.getLineDirections(line);\n if (dirs == Layout.DIRS_ALL_LEFT_TO_RIGHT) {\n return false;\n }\n if (dirs == Layout.DIRS_ALL_RIGHT_TO_LEFT) {\n return true;\n }\n let runs = dirs.mDirections;\n let lineStart = this.getLineStart(line);\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + (runs[i] & Layout.RUN_LENGTH_MASK);\n if (offset >= start) {\n let level = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n return ((level & 1) != 0);\n }\n }\n return false;\n }\n primaryIsTrailingPrevious(offset) {\n let line = this.getLineForOffset(offset);\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let runs = this.getLineDirections(line).mDirections;\n let levelAt = -1;\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + runs[i];\n let limit = start + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (limit > lineEnd) {\n limit = lineEnd;\n }\n if (offset >= start && offset < limit) {\n if (offset > start) {\n return false;\n }\n levelAt = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n break;\n }\n }\n if (levelAt == -1) {\n levelAt = this.getParagraphDirection(line) == 1 ? 0 : 1;\n }\n let levelBefore = -1;\n if (offset == lineStart) {\n levelBefore = this.getParagraphDirection(line) == 1 ? 0 : 1;\n }\n else {\n offset -= 1;\n for (let i = 0; i < runs.length; i += 2) {\n let start = lineStart + runs[i];\n let limit = start + (runs[i + 1] & Layout.RUN_LENGTH_MASK);\n if (limit > lineEnd) {\n limit = lineEnd;\n }\n if (offset >= start && offset < limit) {\n levelBefore = (runs[i + 1] >>> Layout.RUN_LEVEL_SHIFT) & Layout.RUN_LEVEL_MASK;\n break;\n }\n }\n }\n return levelBefore < levelAt;\n }\n getPrimaryHorizontal(offset, clamped = false) {\n let trailing = this.primaryIsTrailingPrevious(offset);\n return this.getHorizontal(offset, trailing, clamped);\n }\n getSecondaryHorizontal(offset, clamped = false) {\n let trailing = this.primaryIsTrailingPrevious(offset);\n return this.getHorizontal(offset, !trailing, clamped);\n }\n getHorizontal(offset, trailing, clamped) {\n let line = this.getLineForOffset(offset);\n return this.getHorizontal_4(offset, trailing, line, clamped);\n }\n getHorizontal_4(offset, trailing, line, clamped) {\n let start = this.getLineStart(line);\n let end = this.getLineEnd(line);\n let dir = this.getParagraphDirection(line);\n let hasTabOrEmoji = this.getLineContainsTab(line);\n let directions = this.getLineDirections(line);\n let tabStops = null;\n if (hasTabOrEmoji && Spanned.isImplements(this.mText)) {\n let tabs = Layout.getParagraphSpans(this.mText, start, end, TabStopSpan.type);\n if (tabs.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabs);\n }\n }\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabOrEmoji, tabStops);\n let wid = tl.measure(offset - start, trailing, null);\n TextLine.recycle(tl);\n if (clamped && wid > this.mWidth) {\n wid = this.mWidth;\n }\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n return this.getLineStartPos(line, left, right) + wid;\n }\n getLineLeft(line) {\n let dir = this.getParagraphDirection(line);\n let align = this.getParagraphAlignment(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n return 0;\n }\n else if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.getParagraphRight(line) - this.getLineMax(line);\n else\n return 0;\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n return this.mWidth - this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return 0;\n else\n return this.mWidth - this.getLineMax(line);\n }\n else {\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n let max = (Math.floor(this.getLineMax(line))) & ~1;\n return left + ((right - left) - max) / 2;\n }\n }\n getLineRight(line) {\n let dir = this.getParagraphDirection(line);\n let align = this.getParagraphAlignment(line);\n if (align == Layout.Alignment.ALIGN_LEFT) {\n return this.getParagraphLeft(line) + this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_NORMAL) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.mWidth;\n else\n return this.getParagraphLeft(line) + this.getLineMax(line);\n }\n else if (align == Layout.Alignment.ALIGN_RIGHT) {\n return this.mWidth;\n }\n else if (align == Layout.Alignment.ALIGN_OPPOSITE) {\n if (dir == Layout.DIR_RIGHT_TO_LEFT)\n return this.getLineMax(line);\n else\n return this.mWidth;\n }\n else {\n let left = this.getParagraphLeft(line);\n let right = this.getParagraphRight(line);\n let max = (Math.floor(this.getLineMax(line))) & ~1;\n return right - ((right - left) - max) / 2;\n }\n }\n getLineMax(line) {\n let margin = this.getParagraphLeadingMargin(line);\n let signedExtent = this.getLineExtent(line, false);\n return margin + signedExtent >= 0 ? signedExtent : -signedExtent;\n }\n getLineWidth(line) {\n let margin = this.getParagraphLeadingMargin(line);\n let signedExtent = this.getLineExtent(line, true);\n return margin + signedExtent >= 0 ? signedExtent : -signedExtent;\n }\n getLineExtent(...args) {\n if (args.length === 2)\n return this.getLineExtent_2(...args);\n if (args.length === 3)\n return this.getLineExtent_3(...args);\n }\n getLineExtent_2(line, full) {\n let start = this.getLineStart(line);\n let end = full ? this.getLineEnd(line) : this.getLineVisibleEnd(line);\n let hasTabsOrEmoji = this.getLineContainsTab(line);\n let tabStops = null;\n if (hasTabsOrEmoji && Spanned.isImplements(this.mText)) {\n let tabs = Layout.getParagraphSpans(this.mText, start, end, TabStopSpan.type);\n if (tabs.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, tabs);\n }\n }\n let directions = this.getLineDirections(line);\n if (directions == null) {\n return 0;\n }\n let dir = this.getParagraphDirection(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabsOrEmoji, tabStops);\n let width = tl.metrics(null);\n TextLine.recycle(tl);\n return width;\n }\n getLineExtent_3(line, tabStops, full) {\n let start = this.getLineStart(line);\n let end = full ? this.getLineEnd(line) : this.getLineVisibleEnd(line);\n let hasTabsOrEmoji = this.getLineContainsTab(line);\n let directions = this.getLineDirections(line);\n let dir = this.getParagraphDirection(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, start, end, dir, directions, hasTabsOrEmoji, tabStops);\n let width = tl.metrics(null);\n TextLine.recycle(tl);\n return width;\n }\n getLineForVertical(vertical) {\n let high = this.getLineCount(), low = -1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n if (this.getLineTop(guess) > vertical)\n high = guess;\n else\n low = guess;\n }\n if (low < 0)\n return 0;\n else\n return low;\n }\n getLineForOffset(offset) {\n let high = this.getLineCount(), low = -1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n if (this.getLineStart(guess) > offset)\n high = guess;\n else\n low = guess;\n }\n if (low < 0)\n return 0;\n else\n return low;\n }\n getOffsetForHorizontal(line, horiz) {\n let max = this.getLineEnd(line) - 1;\n let min = this.getLineStart(line);\n let dirs = this.getLineDirections(line);\n if (line == this.getLineCount() - 1)\n max++;\n let best = min;\n let bestdist = Math.abs(this.getPrimaryHorizontal(best) - horiz);\n for (let i = 0; i < dirs.mDirections.length; i += 2) {\n let here = min + dirs.mDirections[i];\n let there = here + (dirs.mDirections[i + 1] & Layout.RUN_LENGTH_MASK);\n let swap = (dirs.mDirections[i + 1] & Layout.RUN_RTL_FLAG) != 0 ? -1 : 1;\n if (there > max)\n there = max;\n let high = there - 1 + 1, low = here + 1 - 1, guess;\n while (high - low > 1) {\n guess = Math.floor((high + low) / 2);\n let adguess = this.getOffsetAtStartOf(guess);\n if (this.getPrimaryHorizontal(adguess) * swap >= horiz * swap)\n high = guess;\n else\n low = guess;\n }\n if (low < here + 1)\n low = here + 1;\n if (low < there) {\n low = this.getOffsetAtStartOf(low);\n let dist = Math.abs(this.getPrimaryHorizontal(low) - horiz);\n let aft = TextUtils.getOffsetAfter(this.mText, low);\n if (aft < there) {\n let other = Math.abs(this.getPrimaryHorizontal(aft) - horiz);\n if (other < dist) {\n dist = other;\n low = aft;\n }\n }\n if (dist < bestdist) {\n bestdist = dist;\n best = low;\n }\n }\n let dist = Math.abs(this.getPrimaryHorizontal(here) - horiz);\n if (dist < bestdist) {\n bestdist = dist;\n best = here;\n }\n }\n let dist = Math.abs(this.getPrimaryHorizontal(max) - horiz);\n if (dist <= bestdist) {\n bestdist = dist;\n best = max;\n }\n return best;\n }\n getLineEnd(line) {\n return this.getLineStart(line + 1);\n }\n getLineVisibleEnd(line, start = this.getLineStart(line), end = this.getLineStart(line + 1)) {\n let text = this.mText;\n let ch;\n if (line == this.getLineCount() - 1) {\n return end;\n }\n for (; end > start; end--) {\n ch = text.charAt(end - 1);\n if (ch == '\\n') {\n return end - 1;\n }\n if (ch != ' ' && ch != '\\t') {\n break;\n }\n }\n return end;\n }\n getLineBottom(line) {\n return this.getLineTop(line + 1);\n }\n getLineBaseline(line) {\n return this.getLineTop(line + 1) - this.getLineDescent(line);\n }\n getLineAscent(line) {\n return this.getLineTop(line) - (this.getLineTop(line + 1) - this.getLineDescent(line));\n }\n getOffsetToLeftOf(offset) {\n return this.getOffsetToLeftRightOf(offset, true);\n }\n getOffsetToRightOf(offset) {\n return this.getOffsetToLeftRightOf(offset, false);\n }\n getOffsetToLeftRightOf(caret, toLeft) {\n let line = this.getLineForOffset(caret);\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let lineDir = this.getParagraphDirection(line);\n let lineChanged = false;\n let advance = toLeft == (lineDir == Layout.DIR_RIGHT_TO_LEFT);\n if (advance) {\n if (caret == lineEnd) {\n if (line < this.getLineCount() - 1) {\n lineChanged = true;\n ++line;\n }\n else {\n return caret;\n }\n }\n }\n else {\n if (caret == lineStart) {\n if (line > 0) {\n lineChanged = true;\n --line;\n }\n else {\n return caret;\n }\n }\n }\n if (lineChanged) {\n lineStart = this.getLineStart(line);\n lineEnd = this.getLineEnd(line);\n let newDir = this.getParagraphDirection(line);\n if (newDir != lineDir) {\n toLeft = !toLeft;\n lineDir = newDir;\n }\n }\n let directions = this.getLineDirections(line);\n let tl = TextLine.obtain();\n tl.set(this.mPaint, this.mText, lineStart, lineEnd, lineDir, directions, false, null);\n caret = lineStart + tl.getOffsetToLeftRightOf(caret - lineStart, toLeft);\n tl = TextLine.recycle(tl);\n return caret;\n }\n getOffsetAtStartOf(offset) {\n if (offset == 0)\n return 0;\n let text = this.mText;\n let c = text.codePointAt(offset);\n let questionMark = '?'.codePointAt(0);\n if (c >= questionMark && c <= questionMark) {\n let c1 = text.codePointAt(offset - 1);\n if (c1 >= questionMark && c1 <= questionMark)\n offset -= 1;\n }\n if (this.mSpannedText) {\n let spans = text.getSpans(offset, offset, ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = start;\n }\n }\n return offset;\n }\n shouldClampCursor(line) {\n switch (this.getParagraphAlignment(line)) {\n case Layout.Alignment.ALIGN_LEFT:\n return true;\n case Layout.Alignment.ALIGN_NORMAL:\n return this.getParagraphDirection(line) > 0;\n default:\n return false;\n }\n }\n getCursorPath(point, dest, editingBuffer) {\n dest.reset();\n }\n addSelection(line, start, end, top, bottom, dest) {\n }\n getSelectionPath(start, end, dest) {\n dest.reset();\n }\n getParagraphAlignment(line) {\n let align = this.mAlignment;\n return align;\n }\n getParagraphLeft(line) {\n let left = 0;\n let dir = this.getParagraphDirection(line);\n if (dir == Layout.DIR_RIGHT_TO_LEFT || !this.mSpannedText) {\n return left;\n }\n return this.getParagraphLeadingMargin(line);\n }\n getParagraphRight(line) {\n let right = this.mWidth;\n let dir = this.getParagraphDirection(line);\n if (dir == Layout.DIR_LEFT_TO_RIGHT || !this.mSpannedText) {\n return right;\n }\n return right - this.getParagraphLeadingMargin(line);\n }\n getParagraphLeadingMargin(line) {\n if (!this.mSpannedText) {\n return 0;\n }\n let spanned = this.mText;\n let lineStart = this.getLineStart(line);\n let lineEnd = this.getLineEnd(line);\n let spanEnd = spanned.nextSpanTransition(lineStart, lineEnd, LeadingMarginSpan.type);\n let spans = Layout.getParagraphSpans(spanned, lineStart, spanEnd, LeadingMarginSpan.type);\n if (spans.length == 0) {\n return 0;\n }\n let margin = 0;\n let isFirstParaLine = lineStart == 0 || spanned.charAt(lineStart - 1) == '\\n';\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n let useFirstLineMargin = isFirstParaLine;\n if (LeadingMarginSpan2.isImpl(span)) {\n let spStart = spanned.getSpanStart(span);\n let spanLine = this.getLineForOffset(spStart);\n let count = span.getLeadingMarginLineCount();\n useFirstLineMargin = line < spanLine + count;\n }\n margin += span.getLeadingMargin(useFirstLineMargin);\n }\n return margin;\n }\n static measurePara(paint, text, start, end) {\n let mt = MeasuredText.obtain();\n let tl = TextLine.obtain();\n try {\n mt.setPara(text, start, end, TextDirectionHeuristics.LTR);\n let directions;\n let dir;\n directions = Layout.DIRS_ALL_LEFT_TO_RIGHT;\n dir = Layout.DIR_LEFT_TO_RIGHT;\n let chars = mt.mChars;\n let len = mt.mLen;\n let hasTabs = false;\n let tabStops = null;\n for (let i = 0; i < len; ++i) {\n if (chars[i] == '\\t') {\n hasTabs = true;\n if (Spanned.isImplements(text)) {\n let spanned = text;\n let spanEnd = spanned.nextSpanTransition(start, end, TabStopSpan.type);\n let spans = Layout.getParagraphSpans(spanned, start, spanEnd, TabStopSpan.type);\n if (spans.length > 0) {\n tabStops = new Layout.TabStops(Layout.TAB_INCREMENT, spans);\n }\n }\n break;\n }\n }\n tl.set(paint, text, start, end, dir, directions, hasTabs, tabStops);\n return tl.metrics(null);\n }\n finally {\n TextLine.recycle(tl);\n MeasuredText.recycle(mt);\n }\n }\n static nextTab(text, start, end, h, tabs) {\n let nh = Float.MAX_VALUE;\n let alltabs = false;\n if (Spanned.isImplements(text)) {\n if (tabs == null) {\n tabs = Layout.getParagraphSpans(text, start, end, TabStopSpan.type);\n alltabs = true;\n }\n for (let i = 0; i < tabs.length; i++) {\n if (!alltabs) {\n if (!(TabStopSpan.isImpl(tabs[i])))\n continue;\n }\n let where = tabs[i].getTabStop();\n if (where < nh && where > h)\n nh = where;\n }\n if (nh != Float.MAX_VALUE)\n return nh;\n }\n return (Math.floor(((h + Layout.TAB_INCREMENT) / Layout.TAB_INCREMENT))) * Layout.TAB_INCREMENT;\n }\n isSpanned() {\n return this.mSpannedText;\n }\n static getParagraphSpans(text, start, end, type) {\n if (start == end && start > 0) {\n return [];\n }\n return text.getSpans(start, end, type);\n }\n getEllipsisChar(method) {\n return (method == TextUtils.TruncateAt.END_SMALL) ? Layout.ELLIPSIS_TWO_DOTS[0] : Layout.ELLIPSIS_NORMAL[0];\n }\n ellipsize(start, end, line, dest, destoff, method) {\n let ellipsisCount = this.getEllipsisCount(line);\n if (ellipsisCount == 0) {\n return;\n }\n let ellipsisStart = this.getEllipsisStart(line);\n let linestart = this.getLineStart(line);\n for (let i = ellipsisStart; i < ellipsisStart + ellipsisCount; i++) {\n let c;\n if (i == ellipsisStart) {\n c = this.getEllipsisChar(method);\n }\n else {\n c = String.fromCharCode(20);\n }\n let a = i + linestart;\n if (a >= start && a < end) {\n dest[destoff + a - start] = c;\n }\n }\n }\n }\n Layout.NO_PARA_SPANS = [];\n Layout.sTempRect = new Rect();\n Layout.DIR_LEFT_TO_RIGHT = 1;\n Layout.DIR_RIGHT_TO_LEFT = -1;\n Layout.DIR_REQUEST_LTR = 1;\n Layout.DIR_REQUEST_RTL = -1;\n Layout.DIR_REQUEST_DEFAULT_LTR = 2;\n Layout.DIR_REQUEST_DEFAULT_RTL = -2;\n Layout.RUN_LENGTH_MASK = 0x03ffffff;\n Layout.RUN_LEVEL_SHIFT = 26;\n Layout.RUN_LEVEL_MASK = 0x3f;\n Layout.RUN_RTL_FLAG = 1 << Layout.RUN_LEVEL_SHIFT;\n Layout.TAB_INCREMENT = 20;\n Layout.ELLIPSIS_NORMAL = ['…'];\n Layout.ELLIPSIS_TWO_DOTS = ['‥'];\n text_5.Layout = Layout;\n (function (Layout) {\n class TabStops {\n constructor(increment, spans) {\n this.mNumStops = 0;\n this.mIncrement = 0;\n this.reset(increment, spans);\n }\n reset(increment, spans) {\n this.mIncrement = increment;\n let ns = 0;\n if (spans != null) {\n let stops = this.mStops;\n for (let o of spans) {\n if (TabStopSpan.isImpl(o)) {\n if (stops == null) {\n stops = androidui.util.ArrayCreator.newNumberArray(10);\n }\n else if (ns == stops.length) {\n let nstops = androidui.util.ArrayCreator.newNumberArray(ns * 2);\n for (let i = 0; i < ns; ++i) {\n nstops[i] = stops[i];\n }\n stops = nstops;\n }\n stops[ns++] = o.getTabStop();\n }\n }\n if (ns > 1) {\n Arrays.sort(stops, 0, ns);\n }\n if (stops != this.mStops) {\n this.mStops = stops;\n }\n }\n this.mNumStops = ns;\n }\n nextTab(h) {\n let ns = this.mNumStops;\n if (ns > 0) {\n let stops = this.mStops;\n for (let i = 0; i < ns; ++i) {\n let stop = stops[i];\n if (stop > h) {\n return stop;\n }\n }\n }\n return TabStops.nextDefaultStop(h, this.mIncrement);\n }\n static nextDefaultStop(h, inc) {\n return (Math.floor(((h + inc) / inc))) * inc;\n }\n }\n Layout.TabStops = TabStops;\n class Directions {\n constructor(dirs) {\n this.mDirections = dirs;\n }\n }\n Layout.Directions = Directions;\n class Ellipsizer extends String {\n constructor(s) {\n super(s);\n this.mWidth = 0;\n this.mText = s;\n }\n toString() {\n let line1 = this.mLayout.getLineForOffset(0);\n let line2 = this.mLayout.getLineForOffset(this.mText.length);\n let dest = this.mText.split('');\n for (let i = line1; i <= line2; i++) {\n this.mLayout.ellipsize(0, this.mText.length, i, dest, 0, this.mMethod);\n }\n return dest.join('');\n }\n }\n Layout.Ellipsizer = Ellipsizer;\n class SpannedEllipsizer extends Layout.Ellipsizer {\n constructor(display) {\n super(display);\n this.mSpanned = display;\n }\n getSpans(start, end, type) {\n return this.mSpanned.getSpans(start, end, type);\n }\n getSpanStart(tag) {\n return this.mSpanned.getSpanStart(tag);\n }\n getSpanEnd(tag) {\n return this.mSpanned.getSpanEnd(tag);\n }\n getSpanFlags(tag) {\n return this.mSpanned.getSpanFlags(tag);\n }\n nextSpanTransition(start, limit, type) {\n return this.mSpanned.nextSpanTransition(start, limit, type);\n }\n }\n Layout.SpannedEllipsizer = SpannedEllipsizer;\n var Alignment;\n (function (Alignment) {\n Alignment[Alignment[\"ALIGN_NORMAL\"] = 0] = \"ALIGN_NORMAL\";\n Alignment[Alignment[\"ALIGN_OPPOSITE\"] = 1] = \"ALIGN_OPPOSITE\";\n Alignment[Alignment[\"ALIGN_CENTER\"] = 2] = \"ALIGN_CENTER\";\n Alignment[Alignment[\"ALIGN_LEFT\"] = 3] = \"ALIGN_LEFT\";\n Alignment[Alignment[\"ALIGN_RIGHT\"] = 4] = \"ALIGN_RIGHT\";\n })(Alignment = Layout.Alignment || (Layout.Alignment = {}));\n })(Layout = text_5.Layout || (text_5.Layout = {}));\n Layout.DIRS_ALL_LEFT_TO_RIGHT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK]);\n Layout.DIRS_ALL_RIGHT_TO_LEFT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK | Layout.RUN_RTL_FLAG]);\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_6) {\n var Canvas = android.graphics.Canvas;\n var ReplacementSpan = android.text.style.ReplacementSpan;\n var Log = android.util.Log;\n var Spanned = android.text.Spanned;\n var TextPaint = android.text.TextPaint;\n class MeasuredText {\n constructor() {\n this.mTextStart = 0;\n this.mDir = 0;\n this.mLen = 0;\n this.mPos = 0;\n this.mWorkPaint = new TextPaint();\n }\n static obtain() {\n let mt;\n {\n for (let i = MeasuredText.sCached.length; --i >= 0;) {\n if (MeasuredText.sCached[i] != null) {\n mt = MeasuredText.sCached[i];\n MeasuredText.sCached[i] = null;\n return mt;\n }\n }\n }\n mt = new MeasuredText();\n if (MeasuredText.localLOGV) {\n Log.v(\"MEAS\", \"new: \" + mt);\n }\n return mt;\n }\n static recycle(mt) {\n mt.mText = null;\n if (mt.mLen < 1000) {\n {\n for (let i = 0; i < MeasuredText.sCached.length; ++i) {\n if (MeasuredText.sCached[i] == null) {\n MeasuredText.sCached[i] = mt;\n mt.mText = null;\n break;\n }\n }\n }\n }\n return null;\n }\n setPos(pos) {\n this.mPos = pos - this.mTextStart;\n }\n setPara(text, start, end, textDir) {\n this.mText = text;\n this.mTextStart = start;\n let len = end - start;\n this.mLen = len;\n this.mPos = 0;\n if (this.mWidths == null || this.mWidths.length < len) {\n this.mWidths = androidui.util.ArrayCreator.newNumberArray(len);\n }\n this.mChars = text.toString().substring(start, end);\n if (Spanned.isImplements(text)) {\n let spanned = text;\n let spans = spanned.getSpans(start, end, ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let startInPara = spanned.getSpanStart(spans[i]) - start;\n let endInPara = spanned.getSpanEnd(spans[i]) - start;\n if (startInPara < 0)\n startInPara = 0;\n if (endInPara > len)\n endInPara = len;\n for (let j = startInPara; j < endInPara; j++) {\n this.mChars = this.mChars.substring(0, j) + ' ' + this.mChars.substring(j + 1);\n }\n }\n }\n this.mDir = android.text.Layout.DIR_LEFT_TO_RIGHT;\n this.mEasy = true;\n }\n addStyleRun(...args) {\n if (args.length === 3)\n return this.addStyleRun_3(...args);\n if (args.length === 4)\n return this.addStyleRun_4(...args);\n }\n addStyleRun_3(paint, len, fm) {\n if (fm != null) {\n paint.getFontMetricsInt(fm);\n }\n let p = this.mPos;\n this.mPos = p + len;\n if (this.mEasy) {\n let flags = this.mDir == android.text.Layout.DIR_LEFT_TO_RIGHT ? Canvas.DIRECTION_LTR : Canvas.DIRECTION_RTL;\n return paint.getTextRunAdvances_count(this.mChars, p, len, p, len, flags, this.mWidths, p);\n }\n let totalAdvance = 0;\n let level = this.mLevels[p];\n for (let q = p, i = p + 1, e = p + len;; ++i) {\n if (i == e || this.mLevels[i] != level) {\n let flags = (level & 0x1) == 0 ? Canvas.DIRECTION_LTR : Canvas.DIRECTION_RTL;\n totalAdvance += paint.getTextRunAdvances_count(this.mChars, q, i - q, q, i - q, flags, this.mWidths, q);\n if (i == e) {\n break;\n }\n q = i;\n level = this.mLevels[i];\n }\n }\n return totalAdvance;\n }\n addStyleRun_4(paint, spans, len, fm) {\n let workPaint = this.mWorkPaint;\n workPaint.set(paint);\n workPaint.baselineShift = 0;\n let replacement = null;\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n if (span instanceof ReplacementSpan) {\n replacement = span;\n }\n else {\n span.updateMeasureState(workPaint);\n }\n }\n let wid;\n if (replacement == null) {\n wid = this.addStyleRun(workPaint, len, fm);\n }\n else {\n wid = replacement.getSize(workPaint, this.mText, this.mTextStart + this.mPos, this.mTextStart + this.mPos + len, fm);\n let w = this.mWidths;\n w[this.mPos] = wid;\n for (let i = this.mPos + 1, e = this.mPos + len; i < e; i++)\n w[i] = 0;\n this.mPos += len;\n }\n if (fm != null) {\n if (workPaint.baselineShift < 0) {\n fm.ascent += workPaint.baselineShift;\n fm.top += workPaint.baselineShift;\n }\n else {\n fm.descent += workPaint.baselineShift;\n fm.bottom += workPaint.baselineShift;\n }\n }\n return wid;\n }\n breakText(limit, forwards, width) {\n let w = this.mWidths;\n if (forwards) {\n let i = 0;\n while (i < limit) {\n width -= w[i];\n if (width < 0.0)\n break;\n i++;\n }\n while (i > 0 && this.mChars[i - 1] == ' ')\n i--;\n return i;\n }\n else {\n let i = limit - 1;\n while (i >= 0) {\n width -= w[i];\n if (width < 0.0)\n break;\n i--;\n }\n while (i < limit - 1 && this.mChars[i + 1] == ' ')\n i++;\n return limit - i - 1;\n }\n }\n measure(start, limit) {\n let width = 0;\n let w = this.mWidths;\n for (let i = start; i < limit; ++i) {\n width += w[i];\n }\n return width;\n }\n }\n MeasuredText.localLOGV = false;\n MeasuredText.sLock = new Array(0);\n MeasuredText.sCached = new Array(3);\n text_6.MeasuredText = MeasuredText;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_7) {\n var System = java.lang.System;\n var StringBuilder = java.lang.StringBuilder;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n class TextUtils {\n static isEmpty(str) {\n if (str == null || str.length == 0)\n return true;\n else\n return false;\n }\n static getOffsetBefore(text, offset) {\n if (offset == 0)\n return 0;\n if (offset == 1)\n return 0;\n let c = text.codePointAt(offset - 1);\n if (c >= '?'.codePointAt(0) && c <= '?'.codePointAt(0)) {\n let c1 = text.codePointAt(offset - 2);\n if (c1 >= '?'.codePointAt(0) && c1 <= '?'.codePointAt(0))\n offset -= 2;\n else\n offset -= 1;\n }\n else {\n offset -= 1;\n }\n if (Spanned.isImplements(text)) {\n let spans = text.getSpans(offset, offset, android.text.style.ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = start;\n }\n }\n return offset;\n }\n static getOffsetAfter(text, offset) {\n let len = text.length;\n if (offset == len)\n return len;\n if (offset == len - 1)\n return len;\n let c = text.codePointAt(offset);\n if (c >= '?'.codePointAt(0) && c <= '?'.codePointAt(0)) {\n let c1 = text.codePointAt(offset + 1);\n if (c1 >= '?'.codePointAt(0) && c1 <= '?'.codePointAt(0))\n offset += 2;\n else\n offset += 1;\n }\n else {\n offset += 1;\n }\n if (Spanned.isImplements(text)) {\n let spans = text.getSpans(offset, offset, android.text.style.ReplacementSpan.type);\n for (let i = 0; i < spans.length; i++) {\n let start = text.getSpanStart(spans[i]);\n let end = text.getSpanEnd(spans[i]);\n if (start < offset && end > offset)\n offset = end;\n }\n }\n return offset;\n }\n static ellipsize(text, paint, avail, where, preserveLength = false, callback = null, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, ellipsis = undefined) {\n ellipsis = ellipsis || (where == TextUtils.TruncateAt.END_SMALL ? android.text.Layout.ELLIPSIS_TWO_DOTS[0] : android.text.Layout.ELLIPSIS_NORMAL[0]);\n let len = text.length;\n let mt = MeasuredText.obtain();\n try {\n let width = TextUtils.setPara(mt, paint, text, 0, text.length, textDir);\n if (width <= avail) {\n if (callback != null) {\n callback.ellipsized(0, 0);\n }\n return text;\n }\n let ellipsiswid = paint.measureText(ellipsis);\n avail -= ellipsiswid;\n let left = 0;\n let right = len;\n if (avail < 0) {\n }\n else if (where == TextUtils.TruncateAt.START) {\n right = len - mt.breakText(len, false, avail);\n }\n else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.END_SMALL) {\n left = mt.breakText(len, true, avail);\n }\n else {\n right = len - mt.breakText(len, false, avail / 2);\n avail -= mt.measure(right, len);\n left = mt.breakText(right, true, avail);\n }\n if (callback != null) {\n callback.ellipsized(left, right);\n }\n let buf = mt.mChars.split('');\n let sp = Spanned.isImplements(text) ? text : null;\n let remaining = len - (right - left);\n if (preserveLength) {\n if (remaining > 0) {\n buf[left++] = ellipsis.charAt(0);\n }\n for (let i = left; i < right; i++) {\n buf[i] = TextUtils.ZWNBS_CHAR;\n }\n let s = buf.join('');\n return s;\n }\n if (remaining == 0) {\n return \"\";\n }\n let sb = new StringBuilder(remaining + ellipsis.length());\n sb.append(buf.join('').substr(0, left));\n sb.append(ellipsis);\n sb.append(buf.join('').substr(right, len - right));\n return sb.toString();\n }\n finally {\n MeasuredText.recycle(mt);\n }\n }\n static setPara(mt, paint, text, start, end, textDir) {\n mt.setPara(text, start, end, textDir);\n let width;\n let sp = Spanned.isImplements(text) ? text : null;\n let len = end - start;\n if (sp == null) {\n width = mt.addStyleRun(paint, len, null);\n }\n else {\n width = 0;\n let spanEnd;\n for (let spanStart = 0; spanStart < len; spanStart = spanEnd) {\n spanEnd = sp.nextSpanTransition(spanStart, len, android.text.style.MetricAffectingSpan.type);\n let spans = sp.getSpans(spanStart, spanEnd, android.text.style.MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, sp, android.text.style.MetricAffectingSpan.type);\n width += mt.addStyleRun(paint, spans, spanEnd - spanStart, null);\n }\n }\n return width;\n }\n static removeEmptySpans(spans, spanned, klass) {\n let copy = null;\n let count = 0;\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n const start = spanned.getSpanStart(span);\n const end = spanned.getSpanEnd(span);\n if (start == end) {\n if (copy == null) {\n copy = new Array(spans.length - 1);\n System.arraycopy(spans, 0, copy, 0, i);\n count = i;\n }\n }\n else {\n if (copy != null) {\n copy[count] = span;\n count++;\n }\n }\n }\n if (copy != null) {\n let result = new Array(count);\n System.arraycopy(copy, 0, result, 0, count);\n return result;\n }\n else {\n return spans;\n }\n }\n static packRangeInLong(start, end) {\n return [start, end];\n }\n static unpackRangeStartFromLong(range) {\n return range[0] || 0;\n }\n static unpackRangeEndFromLong(range) {\n return range[1] || 0;\n }\n }\n TextUtils.ALIGNMENT_SPAN = 1;\n TextUtils.FIRST_SPAN = TextUtils.ALIGNMENT_SPAN;\n TextUtils.FOREGROUND_COLOR_SPAN = 2;\n TextUtils.RELATIVE_SIZE_SPAN = 3;\n TextUtils.SCALE_X_SPAN = 4;\n TextUtils.STRIKETHROUGH_SPAN = 5;\n TextUtils.UNDERLINE_SPAN = 6;\n TextUtils.STYLE_SPAN = 7;\n TextUtils.BULLET_SPAN = 8;\n TextUtils.QUOTE_SPAN = 9;\n TextUtils.LEADING_MARGIN_SPAN = 10;\n TextUtils.URL_SPAN = 11;\n TextUtils.BACKGROUND_COLOR_SPAN = 12;\n TextUtils.TYPEFACE_SPAN = 13;\n TextUtils.SUPERSCRIPT_SPAN = 14;\n TextUtils.SUBSCRIPT_SPAN = 15;\n TextUtils.ABSOLUTE_SIZE_SPAN = 16;\n TextUtils.TEXT_APPEARANCE_SPAN = 17;\n TextUtils.ANNOTATION = 18;\n TextUtils.SUGGESTION_SPAN = 19;\n TextUtils.SPELL_CHECK_SPAN = 20;\n TextUtils.SUGGESTION_RANGE_SPAN = 21;\n TextUtils.EASY_EDIT_SPAN = 22;\n TextUtils.LOCALE_SPAN = 23;\n TextUtils.LAST_SPAN = TextUtils.LOCALE_SPAN;\n TextUtils.EMPTY_STRING_ARRAY = [];\n TextUtils.ZWNBS_CHAR = String.fromCodePoint(20);\n TextUtils.ARAB_SCRIPT_SUBTAG = \"Arab\";\n TextUtils.HEBR_SCRIPT_SUBTAG = \"Hebr\";\n text_7.TextUtils = TextUtils;\n (function (TextUtils) {\n var TruncateAt;\n (function (TruncateAt) {\n TruncateAt[TruncateAt[\"START\"] = 0] = \"START\";\n TruncateAt[TruncateAt[\"MIDDLE\"] = 1] = \"MIDDLE\";\n TruncateAt[TruncateAt[\"END\"] = 2] = \"END\";\n TruncateAt[TruncateAt[\"MARQUEE\"] = 3] = \"MARQUEE\";\n TruncateAt[TruncateAt[\"END_SMALL\"] = 4] = \"END_SMALL\";\n })(TruncateAt = TextUtils.TruncateAt || (TextUtils.TruncateAt = {}));\n })(TextUtils = text_7.TextUtils || (text_7.TextUtils = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n class WindowManager {\n constructor(context) {\n this.mWindowsLayout = new WindowManager.Layout(context, this);\n let viewRootImpl = context.androidUI._viewRootImpl;\n let fakeAttachInfo = new View.AttachInfo(viewRootImpl, viewRootImpl.mHandler);\n fakeAttachInfo.mRootView = this.mWindowsLayout;\n this.mWindowsLayout.dispatchAttachedToWindow(fakeAttachInfo, 0);\n this.mWindowsLayout.mGroupFlags |= ViewGroup.FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;\n this.mWindowsLayout.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE;\n }\n getWindowsLayout() {\n return this.mWindowsLayout;\n }\n addWindow(window) {\n let wparams = window.getAttributes();\n if (!wparams) {\n wparams = new WindowManager.LayoutParams();\n }\n if (!(wparams instanceof WindowManager.LayoutParams)) {\n throw Error('can\\'t addWindow, params must be WindowManager.LayoutParams : ' + wparams);\n }\n window.setContainer(this);\n let decorView = window.getDecorView();\n let type = wparams.type;\n let lastFocusWindowView = this.mWindowsLayout.getTopFocusableWindowView();\n this.mWindowsLayout.addView(decorView, wparams);\n decorView.dispatchAttachedToWindow(window.mAttachInfo, 0);\n if (wparams.isFocusable()) {\n decorView.dispatchWindowFocusChanged(true);\n if (lastFocusWindowView && lastFocusWindowView.hasFocus()) {\n const focused = lastFocusWindowView.findFocus();\n lastFocusWindowView[WindowManager.FocusViewRemember] = focused;\n if (focused != null) {\n focused.clearFocusInternal(true, false);\n }\n lastFocusWindowView.dispatchWindowFocusChanged(false);\n decorView.addOnLayoutChangeListener({\n onLayoutChange(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) {\n decorView.removeOnLayoutChangeListener(this);\n const newWindowFocused = view.FocusFinder.getInstance().findNextFocus(decorView, null, View.FOCUS_DOWN);\n if (newWindowFocused != null) {\n newWindowFocused.requestFocus(View.FOCUS_DOWN);\n }\n }\n });\n }\n }\n if (decorView instanceof ViewGroup) {\n decorView.setMotionEventSplittingEnabled(wparams.isSplitTouch());\n }\n let enterAnimation = window.getContext().androidUI.mActivityThread.getOverrideEnterAnimation();\n if (enterAnimation === undefined)\n enterAnimation = wparams.enterAnimation;\n if (enterAnimation) {\n decorView.bindElement.style.visibility = 'hidden';\n enterAnimation.setAnimationListener({\n onAnimationStart(animation) {\n },\n onAnimationEnd(animation) {\n decorView.bindElement.style.visibility = '';\n },\n onAnimationRepeat(animation) {\n }\n });\n decorView.startAnimation(enterAnimation);\n }\n }\n updateWindowLayout(window, params) {\n if (!(params instanceof WindowManager.LayoutParams)) {\n throw Error('can\\'t updateWindowLayout, params must be WindowManager.LayoutParams');\n }\n window.getDecorView().setLayoutParams(params);\n }\n removeWindow(window) {\n let decor = window.getDecorView();\n if (decor.getParent() == null)\n return;\n if (decor.getParent() !== this.mWindowsLayout) {\n console.error('removeWindow fail, don\\'t has the window, decor belong to ', decor.getParent());\n return;\n }\n let wparams = decor.getLayoutParams();\n let exitAnimation = window.getContext().androidUI.mActivityThread.getOverrideExitAnimation();\n if (exitAnimation === undefined)\n exitAnimation = wparams.exitAnimation;\n if (exitAnimation) {\n let t = this;\n decor.startAnimation(exitAnimation);\n decor.drawAnimation(this.mWindowsLayout, android.os.SystemClock.uptimeMillis(), exitAnimation);\n this.mWindowsLayout.removeView(decor);\n }\n else {\n this.mWindowsLayout.removeView(decor);\n }\n if (wparams.isFocusable()) {\n let resumeWindowView = this.mWindowsLayout.getTopFocusableWindowView();\n if (resumeWindowView) {\n resumeWindowView.dispatchWindowFocusChanged(true);\n let resumeFocus = resumeWindowView[WindowManager.FocusViewRemember];\n if (resumeFocus) {\n resumeFocus.requestFocus(View.FOCUS_DOWN);\n }\n }\n }\n }\n }\n WindowManager.FocusViewRemember = Symbol();\n view.WindowManager = WindowManager;\n (function (WindowManager) {\n class Layout extends android.widget.FrameLayout {\n constructor(context, windowManager) {\n super(context);\n this.mWindowManager = windowManager;\n }\n getTopFocusableWindowView(findParent = true) {\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n let wparams = child.getLayoutParams();\n if (wparams.isFocusable()) {\n return child;\n }\n }\n if (findParent) {\n let decor = this.getParent();\n if (decor != null) {\n let windowLayout = decor.getParent();\n if (windowLayout instanceof Layout) {\n return windowLayout.getTopFocusableWindowView();\n }\n }\n }\n }\n dispatchKeyEvent(event) {\n let topFocusView = this.getTopFocusableWindowView(false);\n if (topFocusView && topFocusView.dispatchKeyEvent(event)) {\n return true;\n }\n return super.dispatchKeyEvent(event);\n }\n isTransformedTouchPointInView(x, y, child, outLocalPoint) {\n let wparams = child.getLayoutParams();\n if (wparams.isFocusable() && wparams.isTouchable()) {\n return true;\n }\n return false;\n }\n onChildVisibilityChanged(child, oldVisibility, newVisibility) {\n super.onChildVisibilityChanged(child, oldVisibility, newVisibility);\n let wparams = child.getLayoutParams();\n if (newVisibility === View.VISIBLE) {\n let resumeAnimation = child.getContext().androidUI.mActivityThread.getOverrideResumeAnimation();\n if (resumeAnimation === undefined)\n resumeAnimation = wparams.resumeAnimation;\n if (resumeAnimation) {\n child.startAnimation(resumeAnimation);\n }\n }\n else {\n let hideAnimation = child.getContext().androidUI.mActivityThread.getOverrideHideAnimation();\n if (hideAnimation === undefined)\n hideAnimation = wparams.hideAnimation;\n if (hideAnimation) {\n child.startAnimation(hideAnimation);\n child.drawAnimation(this, android.os.SystemClock.uptimeMillis(), hideAnimation);\n }\n }\n }\n onLayout(changed, left, top, right, bottom) {\n this.layoutChildren(left, top, right, bottom, false);\n }\n layoutChildren(left, top, right, bottom, forceLeftGravity) {\n const count = this.getChildCount();\n const parentLeft = this.getPaddingLeftWithForeground();\n const parentRight = right - left - this.getPaddingRightWithForeground();\n const parentTop = this.getPaddingTopWithForeground();\n const parentBottom = bottom - top - this.getPaddingBottomWithForeground();\n this.mForegroundBoundsChanged = true;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n const width = child.getMeasuredWidth();\n const height = child.getMeasuredHeight();\n let childLeft;\n let childTop;\n let gravity = lp.gravity;\n if (gravity == -1) {\n gravity = Layout.DEFAULT_CHILD_GRAVITY;\n }\n const absoluteGravity = gravity;\n const verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n childLeft = parentLeft + (parentRight - parentLeft - width) / 2 + lp.leftMargin - lp.rightMargin;\n break;\n case Gravity.RIGHT:\n if (!forceLeftGravity) {\n childLeft = parentRight - width - lp.rightMargin - lp.x;\n break;\n }\n case Gravity.LEFT:\n default:\n childLeft = parentLeft + lp.leftMargin + lp.x;\n }\n switch (verticalGravity) {\n case Gravity.TOP:\n childTop = parentTop + lp.topMargin + lp.y;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = parentTop + (parentBottom - parentTop - height) / 2 + lp.topMargin - lp.bottomMargin;\n break;\n case Gravity.BOTTOM:\n childTop = parentBottom - height - lp.bottomMargin - lp.y;\n break;\n default:\n childTop = parentTop + lp.topMargin;\n }\n child.layout(childLeft, childTop, childLeft + width, childTop + height);\n }\n }\n }\n tagName() {\n return 'windowsGroup';\n }\n }\n WindowManager.Layout = Layout;\n class LayoutParams extends android.widget.FrameLayout.LayoutParams {\n constructor(_type = LayoutParams.TYPE_APPLICATION) {\n super(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);\n this.x = 0;\n this.y = 0;\n this.type = 0;\n this.flags = 0;\n this.exitAnimation = android.R.anim.activity_close_exit;\n this.enterAnimation = android.R.anim.activity_open_enter;\n this.resumeAnimation = android.R.anim.activity_close_enter;\n this.hideAnimation = android.R.anim.activity_open_exit;\n this.dimAmount = 0;\n this.mTitle = \"\";\n this.type = _type;\n }\n setTitle(title) {\n if (null == title)\n title = \"\";\n this.mTitle = title;\n }\n getTitle() {\n return this.mTitle;\n }\n copyFrom(o) {\n let changes = 0;\n if (this.width != o.width) {\n this.width = o.width;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.height != o.height) {\n this.height = o.height;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.x != o.x) {\n this.x = o.x;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.y != o.y) {\n this.y = o.y;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.type != o.type) {\n this.type = o.type;\n changes |= LayoutParams.TYPE_CHANGED;\n }\n if (this.flags != o.flags) {\n const diff = this.flags ^ o.flags;\n this.flags = o.flags;\n changes |= LayoutParams.FLAGS_CHANGED;\n }\n if (this.gravity != o.gravity) {\n this.gravity = o.gravity;\n changes |= LayoutParams.LAYOUT_CHANGED;\n }\n if (this.mTitle != (o.mTitle)) {\n this.mTitle = o.mTitle;\n changes |= LayoutParams.TITLE_CHANGED;\n }\n if (this.dimAmount != o.dimAmount) {\n this.dimAmount = o.dimAmount;\n changes |= LayoutParams.DIM_AMOUNT_CHANGED;\n }\n return changes;\n }\n isFocusable() {\n return (this.flags & LayoutParams.FLAG_NOT_FOCUSABLE) == 0;\n }\n isTouchable() {\n return (this.flags & LayoutParams.FLAG_NOT_TOUCHABLE) == 0;\n }\n isTouchModal() {\n return (this.flags & LayoutParams.FLAG_NOT_TOUCH_MODAL) == 0;\n }\n isFloating() {\n return (this.flags & LayoutParams.FLAG_FLOATING) != 0;\n }\n isSplitTouch() {\n return (this.flags & LayoutParams.FLAG_SPLIT_TOUCH) != 0;\n }\n isWatchTouchOutside() {\n return (this.flags & LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH) != 0;\n }\n }\n LayoutParams.FIRST_APPLICATION_WINDOW = 1;\n LayoutParams.TYPE_BASE_APPLICATION = 1;\n LayoutParams.TYPE_APPLICATION = 2;\n LayoutParams.TYPE_APPLICATION_STARTING = 3;\n LayoutParams.LAST_APPLICATION_WINDOW = 99;\n LayoutParams.FIRST_SUB_WINDOW = 1000;\n LayoutParams.TYPE_APPLICATION_PANEL = LayoutParams.FIRST_SUB_WINDOW;\n LayoutParams.TYPE_APPLICATION_MEDIA = LayoutParams.FIRST_SUB_WINDOW + 1;\n LayoutParams.TYPE_APPLICATION_SUB_PANEL = LayoutParams.FIRST_SUB_WINDOW + 2;\n LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG = LayoutParams.FIRST_SUB_WINDOW + 3;\n LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY = LayoutParams.FIRST_SUB_WINDOW + 4;\n LayoutParams.LAST_SUB_WINDOW = 1999;\n LayoutParams.FIRST_SYSTEM_WINDOW = 2000;\n LayoutParams.TYPE_STATUS_BAR = LayoutParams.FIRST_SYSTEM_WINDOW;\n LayoutParams.TYPE_SEARCH_BAR = LayoutParams.FIRST_SYSTEM_WINDOW + 1;\n LayoutParams.TYPE_PHONE = LayoutParams.FIRST_SYSTEM_WINDOW + 2;\n LayoutParams.TYPE_SYSTEM_ALERT = LayoutParams.FIRST_SYSTEM_WINDOW + 3;\n LayoutParams.TYPE_KEYGUARD = LayoutParams.FIRST_SYSTEM_WINDOW + 4;\n LayoutParams.TYPE_TOAST = LayoutParams.FIRST_SYSTEM_WINDOW + 5;\n LayoutParams.TYPE_SYSTEM_OVERLAY = LayoutParams.FIRST_SYSTEM_WINDOW + 6;\n LayoutParams.TYPE_PRIORITY_PHONE = LayoutParams.FIRST_SYSTEM_WINDOW + 7;\n LayoutParams.TYPE_SYSTEM_DIALOG = LayoutParams.FIRST_SYSTEM_WINDOW + 8;\n LayoutParams.LAST_SYSTEM_WINDOW = 2999;\n LayoutParams.FLAG_NOT_FOCUSABLE = 0x00000008;\n LayoutParams.FLAG_NOT_TOUCHABLE = 0x00000010;\n LayoutParams.FLAG_NOT_TOUCH_MODAL = 0x00000020;\n LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000;\n LayoutParams.FLAG_SPLIT_TOUCH = 0x00800000;\n LayoutParams.FLAG_FLOATING = 0x40000000;\n LayoutParams.LAYOUT_CHANGED = 1 << 0;\n LayoutParams.TYPE_CHANGED = 1 << 1;\n LayoutParams.FLAGS_CHANGED = 1 << 2;\n LayoutParams.FORMAT_CHANGED = 1 << 3;\n LayoutParams.ANIMATION_CHANGED = 1 << 4;\n LayoutParams.DIM_AMOUNT_CHANGED = 1 << 5;\n LayoutParams.TITLE_CHANGED = 1 << 6;\n LayoutParams.ALPHA_CHANGED = 1 << 7;\n WindowManager.LayoutParams = LayoutParams;\n })(WindowManager = view.WindowManager || (view.WindowManager = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class TranslateAnimation extends Animation {\n constructor(...args) {\n super();\n this.mFromXType = TranslateAnimation.ABSOLUTE;\n this.mToXType = TranslateAnimation.ABSOLUTE;\n this.mFromYType = TranslateAnimation.ABSOLUTE;\n this.mToYType = TranslateAnimation.ABSOLUTE;\n this.mFromXValue = 0.0;\n this.mToXValue = 0.0;\n this.mFromYValue = 0.0;\n this.mToYValue = 0.0;\n this.mFromXDelta = 0;\n this.mToXDelta = 0;\n this.mFromYDelta = 0;\n this.mToYDelta = 0;\n if (args.length === 4) {\n this.mFromXValue = args[0];\n this.mToXValue = args[1];\n this.mFromYValue = args[2];\n this.mToYValue = args[3];\n this.mFromXType = TranslateAnimation.ABSOLUTE;\n this.mToXType = TranslateAnimation.ABSOLUTE;\n this.mFromYType = TranslateAnimation.ABSOLUTE;\n this.mToYType = TranslateAnimation.ABSOLUTE;\n }\n else {\n this.mFromXType = args[0];\n this.mFromXValue = args[1];\n this.mToXType = args[2];\n this.mToXValue = args[3];\n this.mFromYType = args[4];\n this.mFromYValue = args[5];\n this.mToYType = args[6];\n this.mToYValue = args[7];\n }\n }\n applyTransformation(interpolatedTime, t) {\n let dx = this.mFromXDelta;\n let dy = this.mFromYDelta;\n if (this.mFromXDelta != this.mToXDelta) {\n dx = this.mFromXDelta + ((this.mToXDelta - this.mFromXDelta) * interpolatedTime);\n }\n if (this.mFromYDelta != this.mToYDelta) {\n dy = this.mFromYDelta + ((this.mToYDelta - this.mFromYDelta) * interpolatedTime);\n }\n t.getMatrix().setTranslate(dx, dy);\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mFromXDelta = this.resolveSize(this.mFromXType, this.mFromXValue, width, parentWidth);\n this.mToXDelta = this.resolveSize(this.mToXType, this.mToXValue, width, parentWidth);\n this.mFromYDelta = this.resolveSize(this.mFromYType, this.mFromYValue, height, parentHeight);\n this.mToYDelta = this.resolveSize(this.mToYType, this.mToYValue, height, parentHeight);\n }\n }\n animation.TranslateAnimation = TranslateAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class AlphaAnimation extends Animation {\n constructor(fromAlpha, toAlpha) {\n super();\n this.mFromAlpha = 0;\n this.mToAlpha = 0;\n this.mFromAlpha = fromAlpha;\n this.mToAlpha = toAlpha;\n }\n applyTransformation(interpolatedTime, t) {\n const alpha = this.mFromAlpha;\n t.setAlpha(alpha + ((this.mToAlpha - alpha) * interpolatedTime));\n }\n willChangeTransformationMatrix() {\n return false;\n }\n willChangeBounds() {\n return false;\n }\n hasAlpha() {\n return true;\n }\n }\n animation.AlphaAnimation = AlphaAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class ScaleAnimation extends Animation {\n constructor(fromX, toX, fromY, toY, pivotXType = ScaleAnimation.ABSOLUTE, pivotXValue = 0, pivotYType = ScaleAnimation.ABSOLUTE, pivotYValue = 0) {\n super();\n this.mFromX = 0;\n this.mToX = 0;\n this.mFromY = 0;\n this.mToY = 0;\n this.mFromXData = 0;\n this.mToXData = 0;\n this.mFromYData = 0;\n this.mToYData = 0;\n this.mPivotXType = ScaleAnimation.ABSOLUTE;\n this.mPivotYType = ScaleAnimation.ABSOLUTE;\n this.mPivotXValue = 0.0;\n this.mPivotYValue = 0.0;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mResources = null;\n this.mFromX = fromX;\n this.mToX = toX;\n this.mFromY = fromY;\n this.mToY = toY;\n this.mPivotXValue = pivotXValue;\n this.mPivotXType = pivotXType;\n this.mPivotYValue = pivotYValue;\n this.mPivotYType = pivotYType;\n this.initializePivotPoint();\n }\n initializePivotPoint() {\n if (this.mPivotXType == ScaleAnimation.ABSOLUTE) {\n this.mPivotX = this.mPivotXValue;\n }\n if (this.mPivotYType == ScaleAnimation.ABSOLUTE) {\n this.mPivotY = this.mPivotYValue;\n }\n }\n applyTransformation(interpolatedTime, t) {\n let sx = 1.0;\n let sy = 1.0;\n let scale = this.getScaleFactor();\n if (this.mFromX != 1.0 || this.mToX != 1.0) {\n sx = this.mFromX + ((this.mToX - this.mFromX) * interpolatedTime);\n }\n if (this.mFromY != 1.0 || this.mToY != 1.0) {\n sy = this.mFromY + ((this.mToY - this.mFromY) * interpolatedTime);\n }\n if (this.mPivotX == 0 && this.mPivotY == 0) {\n t.getMatrix().setScale(sx, sy);\n }\n else {\n t.getMatrix().setScale(sx, sy, scale * this.mPivotX, scale * this.mPivotY);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mPivotX = this.resolveSize(this.mPivotXType, this.mPivotXValue, width, parentWidth);\n this.mPivotY = this.resolveSize(this.mPivotYType, this.mPivotYValue, height, parentHeight);\n }\n }\n animation.ScaleAnimation = ScaleAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var ArrayList = java.util.ArrayList;\n var Long = java.lang.Long;\n var Animation = android.view.animation.Animation;\n var Transformation = android.view.animation.Transformation;\n class AnimationSet extends Animation {\n constructor(shareInterpolator = false) {\n super();\n this.mFlags = 0;\n this.mAnimations = new ArrayList();\n this.mTempTransformation = new Transformation();\n this.mLastEnd = 0;\n this.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator);\n this.init();\n }\n setFlag(mask, value) {\n if (value) {\n this.mFlags |= mask;\n }\n else {\n this.mFlags &= ~mask;\n }\n }\n init() {\n this.mStartTime = 0;\n }\n setFillAfter(fillAfter) {\n this.mFlags |= AnimationSet.PROPERTY_FILL_AFTER_MASK;\n super.setFillAfter(fillAfter);\n }\n setFillBefore(fillBefore) {\n this.mFlags |= AnimationSet.PROPERTY_FILL_BEFORE_MASK;\n super.setFillBefore(fillBefore);\n }\n setRepeatMode(repeatMode) {\n this.mFlags |= AnimationSet.PROPERTY_REPEAT_MODE_MASK;\n super.setRepeatMode(repeatMode);\n }\n setStartOffset(startOffset) {\n this.mFlags |= AnimationSet.PROPERTY_START_OFFSET_MASK;\n super.setStartOffset(startOffset);\n }\n hasAlpha() {\n if (this.mDirty) {\n this.mDirty = this.mHasAlpha = false;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n if (animations.get(i).hasAlpha()) {\n this.mHasAlpha = true;\n break;\n }\n }\n }\n return this.mHasAlpha;\n }\n setDuration(durationMillis) {\n this.mFlags |= AnimationSet.PROPERTY_DURATION_MASK;\n super.setDuration(durationMillis);\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n addAnimation(a) {\n this.mAnimations.add(a);\n let noMatrix = (this.mFlags & AnimationSet.PROPERTY_MORPH_MATRIX_MASK) == 0;\n if (noMatrix && a.willChangeTransformationMatrix()) {\n this.mFlags |= AnimationSet.PROPERTY_MORPH_MATRIX_MASK;\n }\n let changeBounds = (this.mFlags & AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK) == 0;\n if (changeBounds && a.willChangeBounds()) {\n this.mFlags |= AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK;\n }\n if ((this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK) {\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n else {\n if (this.mAnimations.size() == 1) {\n this.mDuration = a.getStartOffset() + a.getDuration();\n this.mLastEnd = this.mStartOffset + this.mDuration;\n }\n else {\n this.mLastEnd = Math.max(this.mLastEnd, a.getStartOffset() + a.getDuration());\n this.mDuration = this.mLastEnd - this.mStartOffset;\n }\n }\n this.mDirty = true;\n }\n setStartTime(startTimeMillis) {\n super.setStartTime(startTimeMillis);\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n let a = animations.get(i);\n a.setStartTime(startTimeMillis);\n }\n }\n getStartTime() {\n let startTime = Long.MAX_VALUE;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = 0; i < count; i++) {\n let a = animations.get(i);\n startTime = Math.min(startTime, a.getStartTime());\n }\n return startTime;\n }\n restrictDuration(durationMillis) {\n super.restrictDuration(durationMillis);\n const animations = this.mAnimations;\n let count = animations.size();\n for (let i = 0; i < count; i++) {\n animations.get(i).restrictDuration(durationMillis);\n }\n }\n getDuration() {\n const animations = this.mAnimations;\n const count = animations.size();\n let duration = 0;\n let durationSet = (this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK;\n if (durationSet) {\n duration = this.mDuration;\n }\n else {\n for (let i = 0; i < count; i++) {\n duration = Math.max(duration, animations.get(i).getDuration());\n }\n }\n return duration;\n }\n computeDurationHint() {\n let duration = 0;\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n for (let i = count - 1; i >= 0; --i) {\n const d = animations.get(i).computeDurationHint();\n if (d > duration)\n duration = d;\n }\n return duration;\n }\n initializeInvalidateRegion(left, top, right, bottom) {\n const region = this.mPreviousRegion;\n region.set(left, top, right, bottom);\n region.inset(-1.0, -1.0);\n if (this.mFillBefore) {\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n const temp = this.mTempTransformation;\n const previousTransformation = this.mPreviousTransformation;\n for (let i = count - 1; i >= 0; --i) {\n const a = animations.get(i);\n if (!a.isFillEnabled() || a.getFillBefore() || a.getStartOffset() == 0) {\n temp.clear();\n const interpolator = a.mInterpolator;\n a.applyTransformation(interpolator != null ? interpolator.getInterpolation(0.0) : 0.0, temp);\n previousTransformation.compose(temp);\n }\n }\n }\n }\n getTransformation(currentTime, t) {\n const count = this.mAnimations.size();\n const animations = this.mAnimations;\n const temp = this.mTempTransformation;\n let more = false;\n let started = false;\n let ended = true;\n t.clear();\n for (let i = count - 1; i >= 0; --i) {\n const a = animations.get(i);\n temp.clear();\n more = a.getTransformation(currentTime, temp, this.getScaleFactor()) || more;\n t.compose(temp);\n started = started || a.hasStarted();\n ended = a.hasEnded() && ended;\n }\n if (started && !this.mStarted) {\n if (this.mListener != null) {\n this.mListener.onAnimationStart(this);\n }\n this.mStarted = true;\n }\n if (ended != this.mEnded) {\n if (this.mListener != null) {\n this.mListener.onAnimationEnd(this);\n }\n this.mEnded = ended;\n }\n return more;\n }\n scaleCurrentDuration(scale) {\n const animations = this.mAnimations;\n let count = animations.size();\n for (let i = 0; i < count; i++) {\n animations.get(i).scaleCurrentDuration(scale);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n let durationSet = (this.mFlags & AnimationSet.PROPERTY_DURATION_MASK) == AnimationSet.PROPERTY_DURATION_MASK;\n let fillAfterSet = (this.mFlags & AnimationSet.PROPERTY_FILL_AFTER_MASK) == AnimationSet.PROPERTY_FILL_AFTER_MASK;\n let fillBeforeSet = (this.mFlags & AnimationSet.PROPERTY_FILL_BEFORE_MASK) == AnimationSet.PROPERTY_FILL_BEFORE_MASK;\n let repeatModeSet = (this.mFlags & AnimationSet.PROPERTY_REPEAT_MODE_MASK) == AnimationSet.PROPERTY_REPEAT_MODE_MASK;\n let shareInterpolator = (this.mFlags & AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK) == AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK;\n let startOffsetSet = (this.mFlags & AnimationSet.PROPERTY_START_OFFSET_MASK) == AnimationSet.PROPERTY_START_OFFSET_MASK;\n if (shareInterpolator) {\n this.ensureInterpolator();\n }\n const children = this.mAnimations;\n const count = children.size();\n const duration = this.mDuration;\n const fillAfter = this.mFillAfter;\n const fillBefore = this.mFillBefore;\n const repeatMode = this.mRepeatMode;\n const interpolator = this.mInterpolator;\n const startOffset = this.mStartOffset;\n let storedOffsets = this.mStoredOffsets;\n if (startOffsetSet) {\n if (storedOffsets == null || storedOffsets.length != count) {\n storedOffsets = this.mStoredOffsets = androidui.util.ArrayCreator.newNumberArray(count);\n }\n }\n else if (storedOffsets != null) {\n storedOffsets = this.mStoredOffsets = null;\n }\n for (let i = 0; i < count; i++) {\n let a = children.get(i);\n if (durationSet) {\n a.setDuration(duration);\n }\n if (fillAfterSet) {\n a.setFillAfter(fillAfter);\n }\n if (fillBeforeSet) {\n a.setFillBefore(fillBefore);\n }\n if (repeatModeSet) {\n a.setRepeatMode(repeatMode);\n }\n if (shareInterpolator) {\n a.setInterpolator(interpolator);\n }\n if (startOffsetSet) {\n let offset = a.getStartOffset();\n a.setStartOffset(offset + startOffset);\n storedOffsets[i] = offset;\n }\n a.initialize(width, height, parentWidth, parentHeight);\n }\n }\n reset() {\n super.reset();\n this.restoreChildrenStartOffset();\n }\n restoreChildrenStartOffset() {\n const offsets = this.mStoredOffsets;\n if (offsets == null)\n return;\n const children = this.mAnimations;\n const count = children.size();\n for (let i = 0; i < count; i++) {\n children.get(i).setStartOffset(offsets[i]);\n }\n }\n getAnimations() {\n return this.mAnimations;\n }\n willChangeTransformationMatrix() {\n return (this.mFlags & AnimationSet.PROPERTY_MORPH_MATRIX_MASK) == AnimationSet.PROPERTY_MORPH_MATRIX_MASK;\n }\n willChangeBounds() {\n return (this.mFlags & AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK) == AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK;\n }\n }\n AnimationSet.PROPERTY_FILL_AFTER_MASK = 0x1;\n AnimationSet.PROPERTY_FILL_BEFORE_MASK = 0x2;\n AnimationSet.PROPERTY_REPEAT_MODE_MASK = 0x4;\n AnimationSet.PROPERTY_START_OFFSET_MASK = 0x8;\n AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK = 0x10;\n AnimationSet.PROPERTY_DURATION_MASK = 0x20;\n AnimationSet.PROPERTY_MORPH_MATRIX_MASK = 0x40;\n AnimationSet.PROPERTY_CHANGE_BOUNDS_MASK = 0x80;\n animation.AnimationSet = AnimationSet;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AccelerateInterpolator {\n constructor(factor = 1) {\n this.mFactor = factor;\n this.mDoubleFactor = factor * 2;\n }\n getInterpolation(input) {\n if (this.mFactor == 1.0) {\n return input * input;\n }\n else {\n return Math.pow(input, this.mDoubleFactor);\n }\n }\n }\n animation.AccelerateInterpolator = AccelerateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AnticipateInterpolator {\n constructor(tension = 2) {\n this.mTension = tension;\n }\n getInterpolation(t) {\n return t * t * ((this.mTension + 1) * t - this.mTension);\n }\n }\n animation.AnticipateInterpolator = AnticipateInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class AnticipateOvershootInterpolator {\n constructor(tension = 2, extraTension = 1.5) {\n this.mTension = tension * extraTension;\n }\n static a(t, s) {\n return t * t * ((s + 1) * t - s);\n }\n static o(t, s) {\n return t * t * ((s + 1) * t + s);\n }\n getInterpolation(t) {\n if (t < 0.5)\n return 0.5 * AnticipateOvershootInterpolator.a(t * 2.0, this.mTension);\n else\n return 0.5 * (AnticipateOvershootInterpolator.o(t * 2.0 - 2.0, this.mTension) + 2.0);\n }\n }\n animation.AnticipateOvershootInterpolator = AnticipateOvershootInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class BounceInterpolator {\n static bounce(t) {\n return t * t * 8.0;\n }\n getInterpolation(t) {\n t *= 1.1226;\n if (t < 0.3535)\n return BounceInterpolator.bounce(t);\n else if (t < 0.7408)\n return BounceInterpolator.bounce(t - 0.54719) + 0.7;\n else if (t < 0.9644)\n return BounceInterpolator.bounce(t - 0.8526) + 0.9;\n else\n return BounceInterpolator.bounce(t - 1.0435) + 0.95;\n }\n }\n animation.BounceInterpolator = BounceInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class CycleInterpolator {\n constructor(mCycles) {\n this.mCycles = mCycles;\n }\n getInterpolation(input) {\n return (Math.sin(2 * this.mCycles * Math.PI * input));\n }\n }\n animation.CycleInterpolator = CycleInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n class OvershootInterpolator {\n constructor(tension = 2) {\n this.mTension = tension;\n }\n getInterpolation(t) {\n t -= 1.0;\n return t * t * ((this.mTension + 1) * t + this.mTension) + 1.0;\n }\n }\n animation.OvershootInterpolator = OvershootInterpolator;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var AccelerateInterpolator = android.view.animation.AccelerateInterpolator;\n var AnticipateInterpolator = android.view.animation.AnticipateInterpolator;\n var AnticipateOvershootInterpolator = android.view.animation.AnticipateOvershootInterpolator;\n var BounceInterpolator = android.view.animation.BounceInterpolator;\n var CycleInterpolator = android.view.animation.CycleInterpolator;\n var DecelerateInterpolator = android.view.animation.DecelerateInterpolator;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var OvershootInterpolator = android.view.animation.OvershootInterpolator;\n class interpolator {\n }\n interpolator.accelerate_cubic = new AccelerateInterpolator(1.5);\n interpolator.accelerate_decelerate = new AccelerateDecelerateInterpolator();\n interpolator.accelerate_quad = new AccelerateInterpolator();\n interpolator.accelerate_quint = new AccelerateInterpolator(2.5);\n interpolator.anticipate_overshoot = new AnticipateOvershootInterpolator();\n interpolator.anticipate = new AnticipateInterpolator();\n interpolator.bounce = new BounceInterpolator();\n interpolator.cycle = new CycleInterpolator(1);\n interpolator.decelerate_cubic = new DecelerateInterpolator(1.5);\n interpolator.decelerate_quad = new DecelerateInterpolator();\n interpolator.decelerate_quint = new DecelerateInterpolator(2.5);\n interpolator.linear = new LinearInterpolator();\n interpolator.overshoot = new OvershootInterpolator();\n R.interpolator = interpolator;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n var Animation = android.view.animation.Animation;\n var AlphaAnimation = android.view.animation.AlphaAnimation;\n var TranslateAnimation = android.view.animation.TranslateAnimation;\n var ScaleAnimation = android.view.animation.ScaleAnimation;\n var AnimationSet = android.view.animation.AnimationSet;\n class anim {\n static get activity_close_enter() {\n let alpha = new AlphaAnimation(1, 1);\n alpha.setDuration(300);\n alpha.setFillBefore(true);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n return alpha;\n }\n static get activity_close_exit() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(300);\n alpha.setFillBefore(true);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.8, 1, 0.8, Animation.RELATIVE_TO_PARENT, 0.5, Animation.RELATIVE_TO_PARENT, 0.5);\n scale.setDuration(300);\n scale.setFillBefore(true);\n scale.setFillEnabled(true);\n scale.setFillAfter(true);\n scale.setInterpolator(R.interpolator.decelerate_cubic);\n animSet.addAnimation(alpha);\n animSet.addAnimation(scale);\n return animSet;\n }\n static get activity_open_enter() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(300);\n alpha.setFillBefore(false);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.8, 1, 0.8, 1, Animation.RELATIVE_TO_PARENT, 0.5, Animation.RELATIVE_TO_PARENT, 0.5);\n scale.setDuration(300);\n scale.setFillBefore(false);\n scale.setFillEnabled(true);\n scale.setFillAfter(true);\n scale.setInterpolator(R.interpolator.decelerate_cubic);\n animSet.addAnimation(alpha);\n animSet.addAnimation(scale);\n return animSet;\n }\n static get activity_open_exit() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(300);\n alpha.setFillBefore(false);\n alpha.setFillEnabled(true);\n alpha.setFillAfter(true);\n alpha.setInterpolator(R.interpolator.decelerate_quint);\n return alpha;\n }\n static get activity_close_enter_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.25, Animation.RELATIVE_TO_PARENT, 0, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_close_exit_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 1, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_open_enter_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1, Animation.RELATIVE_TO_PARENT, 0, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get activity_open_exit_ios() {\n let anim = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, -0.25, 0, 0, 0, 0);\n anim.setDuration(300);\n return anim;\n }\n static get dialog_enter() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get dialog_exit() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get fade_in() {\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.decelerate_quad);\n return alpha;\n }\n static get fade_out() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(400);\n alpha.setInterpolator(R.interpolator.accelerate_quad);\n return alpha;\n }\n static get toast_enter() {\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.decelerate_quad);\n return alpha;\n }\n static get toast_exit() {\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(500);\n alpha.setInterpolator(R.interpolator.accelerate_quad);\n return alpha;\n }\n static get grow_fade_in() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get grow_fade_in_center() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get grow_fade_in_from_bottom() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(0, 1);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(0.9, 1, 0.9, 1, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 1);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out_center() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n static get shrink_fade_out_from_bottom() {\n let animSet = new AnimationSet();\n let alpha = new AlphaAnimation(1, 0);\n alpha.setDuration(150);\n alpha.setInterpolator(R.interpolator.decelerate_cubic);\n let scale = new ScaleAnimation(1, 0.9, 1, 0.9, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 1);\n scale.setDuration(220);\n scale.setInterpolator(R.interpolator.decelerate_quint);\n animSet.addAnimation(scale);\n animSet.addAnimation(alpha);\n return animSet;\n }\n }\n R.anim = anim;\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_5) {\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var WindowManager = android.view.WindowManager;\n var FrameLayout = android.widget.FrameLayout;\n class Window {\n constructor(context) {\n this.mIsActive = false;\n this.mCloseOnTouchOutside = false;\n this.mSetCloseOnTouchOutside = false;\n this.mWindowAttributes = new WindowManager.LayoutParams();\n this.mContext = context;\n this.initDecorView();\n this.initAttachInfo();\n this.getAttributes().setTitle(context.androidUI.appName);\n }\n initDecorView() {\n this.mDecor = new DecorView(this);\n this.mContentParent = new FrameLayout(this.mContext);\n this.mContentParent.setId(android.R.id.content);\n this.mDecor.addView(this.mContentParent, -1, -1);\n }\n initAttachInfo() {\n let viewRootImpl = this.mContext.androidUI._viewRootImpl;\n this.mAttachInfo = new View.AttachInfo(viewRootImpl, viewRootImpl.mHandler);\n this.mAttachInfo.mRootView = this.mDecor;\n this.mAttachInfo.mHasWindowFocus = true;\n }\n getContext() {\n return this.mContext;\n }\n setContainer(container) {\n this.mContainer = container;\n }\n getContainer() {\n return this.mContainer;\n }\n destroy() {\n this.mDestroyed = true;\n }\n isDestroyed() {\n return this.mDestroyed;\n }\n setChildWindowManager(wm) {\n if (this.mChildWindowManager) {\n this.mDecor.removeView(this.mChildWindowManager.getWindowsLayout());\n }\n this.mChildWindowManager = wm;\n }\n getChildWindowManager() {\n if (!this.mChildWindowManager) {\n this.mChildWindowManager = new WindowManager(this.mContext);\n this.mDecor.addView(this.mChildWindowManager.getWindowsLayout(), -1, -1);\n }\n return this.mChildWindowManager;\n }\n setCallback(callback) {\n this.mCallback = callback;\n }\n getCallback() {\n return this.mCallback;\n }\n setFloating(isFloating) {\n const attrs = this.getAttributes();\n if (isFloating === attrs.isFloating())\n return;\n if (isFloating)\n attrs.flags |= WindowManager.LayoutParams.FLAG_FLOATING;\n else\n attrs.flags &= ~WindowManager.LayoutParams.FLAG_FLOATING;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n isFloating() {\n return this.mWindowAttributes.isFloating();\n }\n setLayout(width, height) {\n const attrs = this.getAttributes();\n attrs.width = width;\n attrs.height = height;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setGravity(gravity) {\n const attrs = this.getAttributes();\n attrs.gravity = gravity;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setType(type) {\n const attrs = this.getAttributes();\n attrs.type = type;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setWindowAnimations(enterAnimation, exitAnimation, resumeAnimation = this.mWindowAttributes.resumeAnimation, hideAnimation = this.mWindowAttributes.hideAnimation) {\n const attrs = this.getAttributes();\n attrs.enterAnimation = enterAnimation;\n attrs.exitAnimation = exitAnimation;\n attrs.resumeAnimation = resumeAnimation;\n attrs.hideAnimation = hideAnimation;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n addFlags(flags) {\n this.setFlags(flags, flags);\n }\n clearFlags(flags) {\n this.setFlags(0, flags);\n }\n setFlags(flags, mask) {\n const attrs = this.getAttributes();\n attrs.flags = (attrs.flags & ~mask) | (flags & mask);\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setDimAmount(amount) {\n const attrs = this.getAttributes();\n attrs.dimAmount = amount;\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(attrs);\n }\n }\n setAttributes(a) {\n this.mWindowAttributes.copyFrom(a);\n if (this.mCallback != null) {\n this.mCallback.onWindowAttributesChanged(this.mWindowAttributes);\n }\n }\n getAttributes() {\n return this.mWindowAttributes;\n }\n setCloseOnTouchOutside(close) {\n this.mCloseOnTouchOutside = close;\n this.mSetCloseOnTouchOutside = true;\n }\n setCloseOnTouchOutsideIfNotSet(close) {\n if (!this.mSetCloseOnTouchOutside) {\n this.mCloseOnTouchOutside = close;\n this.mSetCloseOnTouchOutside = true;\n }\n }\n shouldCloseOnTouch(context, event) {\n if (this.mCloseOnTouchOutside && event.getAction() == MotionEvent.ACTION_DOWN && this.isOutOfBounds(context, event) && this.peekDecorView() != null) {\n return true;\n }\n return false;\n }\n isOutOfBounds(context, event) {\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n const slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();\n const decorView = this.getDecorView();\n return (x < -slop) || (y < -slop) || (x > (decorView.getWidth() + slop)) || (y > (decorView.getHeight() + slop));\n }\n makeActive() {\n if (this.mContainer != null) {\n if (this.mContainer.mActiveWindow != null) {\n this.mContainer.mActiveWindow.mIsActive = false;\n }\n this.mContainer.mActiveWindow = this;\n }\n this.mIsActive = true;\n this.onActive();\n }\n isActive() {\n return this.mIsActive;\n }\n findViewById(id) {\n return this.getDecorView().findViewById(id);\n }\n setContentView(view, params) {\n this.mContentParent.removeAllViews();\n this.addContentView(view, params);\n }\n addContentView(view, params) {\n if (params) {\n this.mContentParent.addView(view, params);\n }\n else {\n this.mContentParent.addView(view);\n }\n let cb = this.getCallback();\n if (cb != null && !this.isDestroyed()) {\n cb.onContentChanged();\n }\n }\n getContentParent() {\n return this.mContentParent;\n }\n getCurrentFocus() {\n return this.mDecor != null ? this.mDecor.findFocus() : null;\n }\n getLayoutInflater() {\n return this.mContext.getLayoutInflater();\n }\n setTitle(title) {\n this.mDecor.bindElement.setAttribute('title', title);\n this.getAttributes().setTitle(title);\n }\n setBackgroundDrawable(drawable) {\n if (this.mDecor != null) {\n this.mDecor.setBackground(drawable);\n }\n }\n setBackgroundColor(color) {\n if (this.mDecor != null) {\n this.mDecor.setBackgroundColor(color);\n }\n }\n takeKeyEvents(_get) {\n this.mDecor.setFocusable(_get);\n }\n superDispatchKeyEvent(event) {\n return this.mDecor.superDispatchKeyEvent(event);\n }\n superDispatchTouchEvent(event) {\n return this.mDecor.superDispatchTouchEvent(event);\n }\n superDispatchGenericMotionEvent(event) {\n return this.mDecor.superDispatchGenericMotionEvent(event);\n }\n getDecorView() {\n return this.mDecor;\n }\n peekDecorView() {\n return this.mDecor;\n }\n onActive() {\n }\n }\n view_5.Window = Window;\n class DecorView extends FrameLayout {\n constructor(window) {\n super(window.mContext);\n this._ignoreRequestLayoutInAnimation = true;\n this._pendingRequestLayoutOnAnimationEnd = false;\n this._ignoreInvalidateInAnimation = true;\n this._pendingInvalidateOnAnimationEnd = false;\n this.Window_this = window;\n this.bindElement.classList.add(window.mContext.constructor.name);\n this.setBackgroundColor(android.graphics.Color.WHITE);\n this.setIsRootNamespace(true);\n }\n invalidate(...args) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidate.call(this, ...args);\n }\n invalidateChild(child, dirty) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidateChild(child, dirty);\n }\n invalidateChildFast(child, dirty) {\n if (this._ignoreInvalidateInAnimation && this.getAnimation()) {\n this._pendingInvalidateOnAnimationEnd = true;\n return null;\n }\n super.invalidateChildFast(child, dirty);\n }\n requestLayout() {\n if (this._ignoreRequestLayoutInAnimation && this.getAnimation()) {\n this._pendingRequestLayoutOnAnimationEnd = true;\n return null;\n }\n super.requestLayout();\n }\n onAnimationStart() {\n super.onAnimationStart();\n this.setDrawingCacheEnabled(true);\n this.buildDrawingCache(true);\n }\n onAnimationEnd() {\n super.onAnimationEnd();\n this.setDrawingCacheEnabled(false);\n if (this._pendingInvalidateOnAnimationEnd) {\n this._pendingInvalidateOnAnimationEnd = false;\n this.invalidate();\n }\n if (this._pendingRequestLayoutOnAnimationEnd) {\n this._pendingRequestLayoutOnAnimationEnd = false;\n this.requestLayout();\n }\n }\n buildDrawingCache(autoScale = false) {\n if (this.getAnimation() && this.mUnscaledDrawingCache)\n return;\n super.buildDrawingCache(autoScale);\n }\n drawFromParent(canvas, parent, drawingTime) {\n let windowAnimation = this.getAnimation();\n let wparams = this.getLayoutParams();\n let shadowAlpha = wparams.dimAmount * 255;\n if (windowAnimation != null && shadowAlpha) {\n const duration = windowAnimation.getDuration();\n let startTime = windowAnimation.getStartTime();\n if (startTime < 0)\n startTime = drawingTime;\n let startOffset = windowAnimation.getStartOffset();\n let normalizedTime;\n if (duration != 0) {\n normalizedTime = (drawingTime - (startTime + startOffset)) / duration;\n normalizedTime = Math.max(Math.min(normalizedTime, 1.0), 0.0);\n }\n else {\n normalizedTime = drawingTime < startTime ? 0.0 : 1.0;\n }\n const interpolatedTime = windowAnimation.getInterpolator().getInterpolation(normalizedTime);\n if (windowAnimation === wparams.exitAnimation) {\n shadowAlpha = shadowAlpha * (1 - interpolatedTime);\n if (!windowAnimation.hasEnded())\n parent.invalidate();\n }\n else if (windowAnimation === wparams.enterAnimation) {\n shadowAlpha = shadowAlpha * interpolatedTime;\n if (!windowAnimation.hasEnded())\n parent.invalidate();\n }\n }\n if ((windowAnimation != null || wparams.isFloating()) && shadowAlpha) {\n canvas.drawColor(android.graphics.Color.argb(shadowAlpha, 0, 0, 0));\n }\n return super.drawFromParent(canvas, parent, drawingTime);\n }\n tagName() {\n return 'Window';\n }\n dispatchKeyEvent(event) {\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n if (child instanceof WindowManager.Layout && child.dispatchKeyEvent(event)) {\n return true;\n }\n }\n const action = event.getAction();\n if (!this.Window_this.isDestroyed()) {\n const cb = this.Window_this.getCallback();\n const handled = cb != null ? cb.dispatchKeyEvent(event) : super.dispatchKeyEvent(event);\n if (handled) {\n return true;\n }\n }\n return super.dispatchKeyEvent(event);\n }\n dispatchTouchEvent(ev) {\n let wparams = this.getLayoutParams();\n const cb = this.Window_this.getCallback();\n let outside = this.Window_this.isOutOfBounds(this.getContext(), ev);\n if (outside && !wparams.isTouchModal()) {\n if (wparams.isWatchTouchOutside() && ev.getAction() == android.view.MotionEvent.ACTION_DOWN) {\n let action = ev.getAction();\n ev.setAction(android.view.MotionEvent.ACTION_OUTSIDE);\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.dispatchTouchEvent(ev);\n }\n else {\n super.dispatchTouchEvent(ev);\n }\n ev.setAction(action);\n }\n return false;\n }\n cb != null && !this.Window_this.isDestroyed() ? cb.dispatchTouchEvent(ev) : super.dispatchTouchEvent(ev);\n return true;\n }\n dispatchGenericMotionEvent(ev) {\n const cb = this.Window_this.getCallback();\n return cb != null && !this.Window_this.isDestroyed() ? cb.dispatchGenericMotionEvent(ev) : super.dispatchGenericMotionEvent(ev);\n }\n superDispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event);\n }\n superDispatchTouchEvent(event) {\n return super.dispatchTouchEvent(event);\n }\n superDispatchGenericMotionEvent(event) {\n return super.dispatchGenericMotionEvent(event);\n }\n onTouchEvent(event) {\n return this.onInterceptTouchEvent(event);\n }\n onVisibilityChanged(changedView, visibility) {\n this.Window_this.mAttachInfo.mWindowVisibility = visibility;\n this.dispatchWindowVisibilityChanged(visibility);\n super.onVisibilityChanged(changedView, visibility);\n }\n onWindowFocusChanged(hasWindowFocus) {\n this.Window_this.mAttachInfo.mHasWindowFocus = hasWindowFocus;\n super.onWindowFocusChanged(hasWindowFocus);\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onWindowFocusChanged(hasWindowFocus);\n }\n }\n onAttachedToWindow() {\n this.Window_this.mAttachInfo.mWindowVisibility = this.getVisibility();\n super.onAttachedToWindow();\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onAttachedToWindow();\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n const cb = this.Window_this.getCallback();\n if (cb != null && !this.Window_this.isDestroyed()) {\n cb.onDetachedFromWindow();\n }\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar PageStack;\n(function (PageStack) {\n PageStack.DEBUG = false;\n const history_go = history.go;\n var iFrameHistoryLengthAsFake = 0;\n let historyLocking = false;\n let windowLoadLocking = true;\n let pendingFuncLock = [];\n let initCalled = false;\n function init() {\n initCalled = true;\n _init();\n history.go = function (delta) {\n PageStack.go(delta);\n };\n history.back = function (delta = -1) {\n PageStack.go(delta);\n };\n history.forward = function (delta = 1) {\n PageStack.go(delta);\n };\n }\n PageStack.init = init;\n function checkInitCalled() {\n if (!initCalled)\n throw Error(\"PageStack.init() must be call first\");\n }\n function _init() {\n PageStack.currentStack = history.state;\n if (PageStack.currentStack && !PageStack.currentStack.isRoot) {\n console.log('already has history.state when _init PageState, restore page');\n restorePageFromStackIfNeed();\n }\n else {\n PageStack.currentStack = PageStack.currentStack || {\n pageId: '',\n isRoot: true,\n stack: [{ pageId: null }]\n };\n let initOpenUrl = location.hash;\n if (initOpenUrl && initOpenUrl.indexOf('#') === 0)\n initOpenUrl = initOpenUrl.substring(1);\n removeLastHistoryIfFaked();\n ensureLockDo(() => {\n history.replaceState(PageStack.currentStack, null, '#');\n });\n if (initOpenUrl && initOpenUrl.length > 0) {\n if (firePagePush(initOpenUrl, null)) {\n notifyNewPageOpened(initOpenUrl);\n }\n }\n }\n ensureLastHistoryFaked();\n if (document.readyState === 'complete') {\n windowLoadLocking = false;\n setTimeout(initOnpopstate, 0);\n }\n else {\n window.addEventListener('load', () => {\n windowLoadLocking = false;\n window.removeEventListener('popstate', onpopstateListener);\n setTimeout(initOnpopstate, 0);\n });\n }\n }\n let onpopstateListener = function (ev) {\n let stack = ev.state;\n if (historyLocking) {\n PageStack.currentStack = stack;\n return;\n }\n if (PageStack.DEBUG)\n console.log('onpopstate', stack);\n if (!stack) {\n let pageId = location.hash;\n if (pageId[0] === '#')\n pageId = pageId.substring(1);\n historyGo(-2, false);\n if (firePagePush(pageId, null)) {\n notifyNewPageOpened(pageId);\n }\n else {\n ensureLastHistoryFaked();\n }\n }\n else if (PageStack.currentStack.stack.length != stack.stack.length) {\n let delta = stack.stack.length - PageStack.currentStack.stack.length;\n if (delta >= 0) {\n console.warn('something error! stack: ', stack, 'last stack: ', PageStack.currentStack);\n return;\n }\n var stackList = PageStack.currentStack.stack;\n PageStack.currentStack = stack;\n tryClosePageAfterHistoryChanged(stackList, delta);\n }\n else {\n PageStack.currentStack = stack;\n if (fireBackPressed()) {\n ensureLastHistoryFaked();\n }\n else {\n var stackList = PageStack.currentStack.stack;\n var pageId = stackList[stackList.length - 1].pageId;\n if (firePageClose(pageId, stackList[stackList.length - 1].extra)) {\n historyGo(-1);\n }\n else {\n ensureLastHistoryFaked();\n }\n }\n }\n };\n function initOnpopstate() {\n window.removeEventListener('popstate', onpopstateListener);\n window.addEventListener('popstate', onpopstateListener);\n }\n function go(delta, pageAlreadyClose = false) {\n checkInitCalled();\n if (historyLocking) {\n ensureLockDo(() => {\n go(delta);\n });\n return;\n }\n var stackList = PageStack.currentStack.stack;\n if (delta === -1 && !pageAlreadyClose) {\n if (!firePageClose(stackList[stackList.length - 1].pageId, stackList[stackList.length - 1].extra)) {\n return;\n }\n }\n removeLastHistoryIfFaked();\n historyGo(delta);\n if (delta < -1 && !pageAlreadyClose) {\n ensureLockDo(() => {\n tryClosePageAfterHistoryChanged(stackList, delta);\n });\n }\n }\n PageStack.go = go;\n function tryClosePageAfterHistoryChanged(stateListBeforeHistoryChange, delta) {\n let historyLength = stateListBeforeHistoryChange.length;\n for (let i = historyLength + delta; i < historyLength; i++) {\n let state = stateListBeforeHistoryChange[i];\n if (!firePageClose(state.pageId, state.extra)) {\n notifyNewPageOpened(state.pageId, state.extra);\n }\n }\n }\n function back(pageAlreadyClose = false) {\n checkInitCalled();\n go(-1, pageAlreadyClose);\n }\n PageStack.back = back;\n function openPage(pageId, extra) {\n checkInitCalled();\n pageId += '';\n var openResult = firePageOpen(pageId, extra);\n if (openResult) {\n notifyNewPageOpened(pageId, extra);\n }\n return openResult;\n }\n PageStack.openPage = openPage;\n function backToPage(pageId) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('backToPage', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n backToPage(pageId);\n });\n }\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n let delta = i - historyLength;\n removeLastHistoryIfFaked();\n historyGo(delta);\n return;\n }\n }\n }\n PageStack.backToPage = backToPage;\n let releaseLockingTimeout;\n let requestHistoryGoWhenLocking = 0;\n let ensureFakeAfterHistoryChange = false;\n function historyGo(delta, ensureFaked = true) {\n if (delta >= 0)\n return;\n if (history.length === 1)\n return;\n ensureFakeAfterHistoryChange = ensureFakeAfterHistoryChange || ensureFaked;\n if (historyLocking) {\n requestHistoryGoWhenLocking += delta;\n return;\n }\n if (PageStack.DEBUG)\n console.log('historyGo', delta);\n historyLocking = true;\n const state = history.state;\n if (releaseLockingTimeout)\n clearTimeout(releaseLockingTimeout);\n function checkRelease() {\n clearTimeout(releaseLockingTimeout);\n if (history.state === state) {\n releaseLockingTimeout = setTimeout(checkRelease, 0);\n }\n else {\n let continueGo = requestHistoryGoWhenLocking;\n if (continueGo != 0) {\n requestHistoryGoWhenLocking = 0;\n historyLocking = false;\n historyGo(continueGo, false);\n }\n else {\n if (ensureFakeAfterHistoryChange)\n ensureLastHistoryFakedImpl();\n ensureFakeAfterHistoryChange = false;\n releaseLockingTimeout = setTimeout(() => {\n historyLocking = false;\n }, 10);\n }\n }\n }\n releaseLockingTimeout = setTimeout(checkRelease, 0);\n history_go.call(history, delta);\n }\n PageStack.historyGo = historyGo;\n function restorePageFromStackIfNeed() {\n if (PageStack.currentStack) {\n let copy = PageStack.currentStack.stack.concat();\n copy.shift();\n for (let saveState of copy) {\n firePageOpen(saveState.pageId, saveState.extra, true);\n }\n }\n }\n function fireBackPressed() {\n if (PageStack.backListener) {\n try {\n return PageStack.backListener();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePageOpen(pageId, pageExtra, isRestore = false) {\n if (PageStack.pageOpenHandler) {\n try {\n return PageStack.pageOpenHandler(pageId, pageExtra, isRestore);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePagePush(pageId, pageExtra) {\n if (PageStack.pagePushHandler) {\n try {\n return PageStack.pagePushHandler(pageId, pageExtra);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function firePageClose(pageId, pageExtra) {\n if (PageStack.pageCloseHandler) {\n try {\n return PageStack.pageCloseHandler(pageId, pageExtra);\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n function notifyPageClosed(pageId) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('notifyPageClosed', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n notifyPageClosed(pageId);\n });\n return;\n }\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n if (i === historyLength - 1) {\n removeLastHistoryIfFaked();\n historyGo(-1);\n }\n else {\n let delta = i - historyLength;\n (function (delta) {\n removeLastHistoryIfFaked();\n historyGo(delta);\n ensureLockDoAtFront(() => {\n let historyLength = stackList.length;\n let pageStartAddIndex = historyLength + delta + 1;\n for (let j = pageStartAddIndex; j < historyLength; j++) {\n notifyNewPageOpened(stackList[j].pageId, stackList[j].extra);\n }\n });\n })(delta);\n }\n return;\n }\n }\n }\n PageStack.notifyPageClosed = notifyPageClosed;\n function notifyNewPageOpened(pageId, extra) {\n checkInitCalled();\n if (PageStack.DEBUG)\n console.log('notifyNewPageOpened', pageId);\n let state = {\n pageId: pageId,\n extra: extra\n };\n ensureLockDo(function () {\n PageStack.currentStack.stack.push(state);\n PageStack.currentStack.pageId = pageId;\n PageStack.currentStack.isRoot = false;\n if (history.state.isFake) {\n history.replaceState(PageStack.currentStack, null, '#' + pageId);\n }\n else {\n history.pushState(PageStack.currentStack, null, '#' + pageId);\n }\n ensureLastHistoryFakedImpl();\n });\n }\n PageStack.notifyNewPageOpened = notifyNewPageOpened;\n function getPageExtra(pageId) {\n checkInitCalled();\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n if (!pageId) {\n return stackList[historyLength - 1].extra;\n }\n else {\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n return state.extra;\n }\n }\n }\n }\n PageStack.getPageExtra = getPageExtra;\n function setPageExtra(extra, pageId) {\n checkInitCalled();\n removeLastHistoryIfFaked();\n ensureLockDo(function () {\n let stackList = PageStack.currentStack.stack;\n let historyLength = stackList.length;\n if (!pageId) {\n stackList[historyLength - 1].extra = extra;\n history.replaceState(PageStack.currentStack, null, '');\n }\n else {\n for (let i = historyLength - 1; i >= 0; i--) {\n let state = stackList[i];\n if (state.pageId == pageId) {\n state.extra = extra;\n history.replaceState(PageStack.currentStack, null, '');\n break;\n }\n }\n }\n ensureLastHistoryFakedImpl();\n });\n }\n PageStack.setPageExtra = setPageExtra;\n function ensureLockDo(func) {\n checkInitCalled();\n if (!historyLocking && !windowLoadLocking) {\n func();\n return;\n }\n pendingFuncLock.push(func);\n _queryLockDo();\n }\n function ensureLockDoAtFront(func, runNowIfNotLock = false) {\n checkInitCalled();\n if (!historyLocking && !windowLoadLocking && runNowIfNotLock) {\n func();\n return;\n }\n pendingFuncLock.splice(0, 0, func);\n _queryLockDo();\n }\n let execLockedTimeoutId;\n function _queryLockDo() {\n if (execLockedTimeoutId)\n clearTimeout(execLockedTimeoutId);\n function execLockedFunctions() {\n if (historyLocking || windowLoadLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n else {\n let f;\n while (f = pendingFuncLock.shift()) {\n f();\n if (historyLocking || windowLoadLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n break;\n }\n }\n }\n }\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n function preClosePageHasIFrame(historyLengthWhenInitIFrame) {\n history.pushState({ isFake: true }, null, null);\n iFrameHistoryLengthAsFake = history.length - historyLengthWhenInitIFrame;\n }\n PageStack.preClosePageHasIFrame = preClosePageHasIFrame;\n function removeLastHistoryIfFaked() {\n ensureLockDo(removeLastHistoryIfFakedImpl);\n }\n function removeLastHistoryIfFakedImpl() {\n if (history.state && history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('remove Fake History');\n history.replaceState(null, null, '');\n historyGo(-1 - iFrameHistoryLengthAsFake, false);\n iFrameHistoryLengthAsFake = 0;\n }\n }\n function ensureLastHistoryFaked() {\n ensureLockDo(ensureLastHistoryFakedImpl);\n }\n function ensureLastHistoryFakedImpl() {\n if (!history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('append Fake History');\n history.pushState({\n isFake: true,\n isRoot: PageStack.currentStack.isRoot,\n stack: PageStack.currentStack.stack,\n }, null, '');\n }\n }\n})(PageStack || (PageStack = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Bundle = android.os.Bundle;\n var Intent = android.content.Intent;\n var View = android.view.View;\n class ActivityThread {\n constructor(androidUI) {\n this.mLaunchedActivities = new Set();\n this.androidUI = androidUI;\n }\n initWithPageStack() {\n let backKeyDownEvent = android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_DOWN, android.view.KeyEvent.KEYCODE_BACK);\n let backKeyUpEvent = android.view.KeyEvent.obtain(android.view.KeyEvent.ACTION_UP, android.view.KeyEvent.KEYCODE_BACK);\n PageStack.backListener = () => {\n let handleDown = this.androidUI._viewRootImpl.dispatchInputEvent(backKeyDownEvent);\n let handleUp = this.androidUI._viewRootImpl.dispatchInputEvent(backKeyUpEvent);\n return handleDown || handleUp;\n };\n PageStack.pageOpenHandler = (pageId, pageExtra, isRestore) => {\n let intent = new Intent(pageId);\n if (pageExtra)\n intent.mExtras = new Bundle(pageExtra.mExtras);\n if (isRestore)\n this.overrideNextWindowAnimation(null, null, null, null);\n let activity = this.handleLaunchActivity(intent);\n return activity && !activity.mFinished;\n };\n PageStack.pageCloseHandler = (pageId, pageExtra) => {\n if (this.mLaunchedActivities.size === 1) {\n let rootActivity = Array.from(this.mLaunchedActivities)[0];\n if (pageId == null || rootActivity.getIntent().activityName == pageId) {\n this.handleDestroyActivity(rootActivity, true);\n return true;\n }\n return false;\n }\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n let intent = activity.getIntent();\n if (intent.activityName == pageId) {\n this.handleDestroyActivity(activity, true);\n return true;\n }\n }\n };\n PageStack.init();\n }\n overrideNextWindowAnimation(enterAnimation, exitAnimation, resumeAnimation, hideAnimation) {\n this.overrideEnterAnimation = enterAnimation;\n this.overrideExitAnimation = exitAnimation;\n this.overrideResumeAnimation = resumeAnimation;\n this.overrideHideAnimation = hideAnimation;\n }\n getOverrideEnterAnimation() {\n return this.overrideEnterAnimation;\n }\n getOverrideExitAnimation() {\n return this.overrideExitAnimation;\n }\n getOverrideResumeAnimation() {\n return this.overrideResumeAnimation;\n }\n getOverrideHideAnimation() {\n return this.overrideHideAnimation;\n }\n scheduleApplicationHide() {\n if (this.scheduleApplicationHideTimeout)\n clearTimeout(this.scheduleApplicationHideTimeout);\n this.scheduleApplicationHideTimeout = setTimeout(() => {\n let visibleActivities = this.getVisibleToUserActivities();\n if (visibleActivities.length == 0)\n return;\n this.handlePauseActivity(visibleActivities[visibleActivities.length - 1]);\n for (let visibleActivity of visibleActivities) {\n this.handleStopActivity(visibleActivity, true);\n }\n }, 0);\n }\n scheduleApplicationShow() {\n this.scheduleActivityResume();\n }\n execStartActivity(callActivity, intent, options) {\n if ((intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {\n if (this.scheduleBackTo(intent))\n return;\n }\n this.scheduleLaunchActivity(callActivity, intent, options);\n }\n scheduleActivityResume() {\n if (this.activityResumeTimeout)\n clearTimeout(this.activityResumeTimeout);\n this.activityResumeTimeout = setTimeout(() => {\n let visibleActivities = this.getVisibleToUserActivities();\n if (visibleActivities.length == 0)\n return;\n for (let visibleActivity of visibleActivities) {\n visibleActivity.performRestart();\n }\n let activity = visibleActivities.pop();\n this.handleResumeActivity(activity, false);\n if (activity.getWindow().isFloating()) {\n for (let visibleActivity of visibleActivities.reverse()) {\n if (visibleActivity.mVisibleFromClient) {\n visibleActivity.makeVisible();\n if (!visibleActivity.getWindow().isFloating()) {\n break;\n }\n }\n }\n }\n }, 0);\n }\n scheduleLaunchActivity(callActivity, intent, options) {\n let activity = this.handleLaunchActivity(intent);\n activity.mCallActivity = callActivity;\n if (activity && !activity.mFinished) {\n PageStack.notifyNewPageOpened(intent.activityName, intent);\n }\n }\n scheduleDestroyActivityByRequestCode(requestCode) {\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n if (activity.getIntent() && requestCode == activity.getIntent().mRequestCode) {\n this.scheduleDestroyActivity(activity);\n }\n }\n }\n scheduleDestroyActivity(activity, finishing = true) {\n setTimeout(() => {\n let isCreateSuc = this.mLaunchedActivities.has(activity);\n if (activity.mCallActivity && activity.getIntent() && activity.getIntent().mRequestCode >= 0) {\n activity.mCallActivity.dispatchActivityResult(null, activity.getIntent().mRequestCode, activity.mResultCode, activity.mResultData);\n }\n this.handleDestroyActivity(activity, finishing);\n if (!isCreateSuc)\n return;\n if (this.mLaunchedActivities.size == 0) {\n if (history.length <= 2) {\n this.androidUI.showAppClosed();\n }\n else {\n PageStack.back(true);\n }\n }\n else if (activity.getIntent()) {\n PageStack.notifyPageClosed(activity.getIntent().activityName);\n }\n }, 0);\n }\n scheduleBackTo(intent) {\n let destroyList = [];\n let findActivity = false;\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n if (activity.getIntent() && activity.getIntent().activityName == intent.activityName) {\n findActivity = true;\n break;\n }\n destroyList.push(activity);\n }\n if (findActivity) {\n for (let activity of destroyList) {\n this.scheduleDestroyActivity(activity);\n }\n return true;\n }\n return false;\n }\n canBackTo(intent) {\n for (let activity of this.mLaunchedActivities) {\n if (activity.getIntent().activityName == intent.activityName) {\n return true;\n }\n }\n return false;\n }\n scheduleBackToRoot() {\n let destroyList = Array.from(this.mLaunchedActivities).reverse();\n destroyList.shift();\n for (let activity of destroyList) {\n this.scheduleDestroyActivity(activity);\n }\n }\n handlePauseActivity(activity) {\n this.performPauseActivity(activity);\n }\n performPauseActivity(activity) {\n activity.performPause();\n }\n handleStopActivity(activity, show = false) {\n this.performStopActivity(activity, true);\n this.updateVisibility(activity, show);\n }\n performStopActivity(activity, saveState) {\n if (!activity.mFinished && saveState) {\n let state = new Bundle();\n activity.performSaveInstanceState(state);\n }\n activity.performStop();\n }\n handleResumeActivity(a, launching) {\n this.performResumeActivity(a, launching);\n let willBeVisible = !a.mStartedActivity && !a.mFinished;\n if (willBeVisible && a.mVisibleFromClient) {\n a.makeVisible();\n this.overrideEnterAnimation = undefined;\n this.overrideExitAnimation = undefined;\n this.overrideResumeAnimation = undefined;\n this.overrideHideAnimation = undefined;\n }\n }\n performResumeActivity(a, launching) {\n if (!launching) {\n a.mStartedActivity = false;\n }\n a.performResume();\n }\n handleLaunchActivity(intent) {\n let visibleActivities = this.getVisibleToUserActivities();\n let a = this.performLaunchActivity(intent);\n if (a) {\n this.handleResumeActivity(a, true);\n if (!a.mFinished && visibleActivities.length > 0) {\n this.handlePauseActivity(visibleActivities[visibleActivities.length - 1]);\n if (!a.getWindow().getAttributes().isFloating()) {\n for (let visibleActivity of visibleActivities) {\n this.handleStopActivity(visibleActivity);\n }\n }\n }\n }\n return a;\n }\n performLaunchActivity(intent) {\n let activity;\n let clazz = intent.activityName;\n try {\n if (typeof clazz === 'string')\n clazz = eval(clazz);\n }\n catch (e) { }\n if (typeof clazz === 'function')\n activity = new clazz(this.androidUI);\n if (activity instanceof app.Activity) {\n try {\n let savedInstanceState = null;\n activity.mIntent = intent;\n activity.mStartedActivity = false;\n activity.mCalled = false;\n activity.performCreate(savedInstanceState);\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + intent.activityName + \" did not call through to super.onCreate()\");\n }\n if (!activity.mFinished) {\n activity.performStart();\n activity.performRestoreInstanceState(savedInstanceState);\n activity.mCalled = false;\n activity.onPostCreate(savedInstanceState);\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + intent.activityName + \" did not call through to super.onPostCreate()\");\n }\n }\n }\n catch (e) {\n console.error(e);\n return null;\n }\n if (!activity.mFinished) {\n this.mLaunchedActivities.add(activity);\n }\n return activity;\n }\n return null;\n }\n handleDestroyActivity(activity, finishing) {\n let visibleActivities = this.getVisibleToUserActivities();\n let isTopVisibleActivity = activity == visibleActivities[visibleActivities.length - 1];\n let isRootActivity = this.isRootActivity(activity);\n this.performDestroyActivity(activity, finishing);\n if (isRootActivity)\n activity.getWindow().setWindowAnimations(null, null);\n this.androidUI.windowManager.removeWindow(activity.getWindow());\n if (isTopVisibleActivity && !isRootActivity) {\n this.scheduleActivityResume();\n }\n }\n performDestroyActivity(activity, finishing) {\n if (finishing) {\n activity.mFinished = true;\n }\n activity.performPause();\n activity.performStop();\n activity.mCalled = false;\n activity.performDestroy();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onDestroy()\");\n }\n this.mLaunchedActivities.delete(activity);\n }\n updateVisibility(activity, show) {\n if (show) {\n if (activity.mVisibleFromClient) {\n activity.makeVisible();\n }\n }\n else {\n activity.getWindow().getDecorView().setVisibility(View.INVISIBLE);\n }\n }\n getVisibleToUserActivities() {\n let list = [];\n for (let activity of Array.from(this.mLaunchedActivities).reverse()) {\n list.push(activity);\n if (!activity.getWindow().getAttributes().isFloating())\n break;\n }\n list.reverse();\n return list;\n }\n isRootActivity(activity) {\n return this.mLaunchedActivities.values().next().value == activity;\n }\n static getActivityName(activity) {\n if (activity.getIntent())\n return activity.getIntent().activityName;\n return activity.constructor.name;\n }\n }\n app.ActivityThread = ActivityThread;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var R;\n (function (R) {\n class string_ {\n static zh() {\n this.ok = '确定';\n this.cancel = '取消';\n this.close = '关闭';\n this.back = '返回';\n this.crash_catch_alert = '程序发生错误, 即将重载网页:';\n this.prll_header_state_normal = '下拉以刷新';\n this.prll_header_state_ready = '松开马上刷新';\n this.prll_header_state_loading = '正在刷新...';\n this.prll_header_state_fail = '刷新失败';\n this.prll_footer_state_normal = '点击加载更多';\n this.prll_footer_state_loading = '正在加载...';\n this.prll_footer_state_ready = '松开加载更多';\n this.prll_footer_state_no_more = '加载完毕';\n this.prll_footer_state_fail = '加载失败,点击重试';\n }\n }\n string_.ok = 'OK';\n string_.cancel = 'Cancel';\n string_.close = 'Close';\n string_.back = 'Back';\n string_.crash_catch_alert = 'Some error happen, will refresh page:';\n string_.prll_header_state_normal = 'Pull to refresh';\n string_.prll_header_state_ready = 'Release to refresh';\n string_.prll_header_state_loading = 'Loading';\n string_.prll_header_state_fail = 'Refresh fail';\n string_.prll_footer_state_normal = 'Load more';\n string_.prll_footer_state_loading = 'Loading';\n string_.prll_footer_state_ready = 'Pull to load more';\n string_.prll_footer_state_fail = 'Click to reload';\n string_.prll_footer_state_no_more = 'Load Finish';\n R.string_ = string_;\n const lang = navigator.language.split('-')[0].toLowerCase();\n if (typeof string_[lang] === 'function')\n string_[lang].call(string_);\n })(R = android.R || (android.R = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n if (typeof HTMLDivElement !== 'function') {\n const _HTMLDivElement = function () { };\n _HTMLDivElement.prototype = HTMLDivElement.prototype;\n HTMLDivElement = _HTMLDivElement;\n }\n class AndroidUIElement extends HTMLDivElement {\n createdCallback() {\n $domReady(() => initElement(this));\n }\n attachedCallback() {\n }\n detachedCallback() {\n }\n attributeChangedCallback(attributeName, oldVal, newVal) {\n if (attributeName === 'debug' && newVal != null && newVal != 'false' && newVal != '0') {\n this.AndroidUI.setDebugEnable();\n }\n }\n }\n androidui.AndroidUIElement = AndroidUIElement;\n function runFunction(func) {\n if (typeof window[func] === \"function\") {\n window[func]();\n }\n else {\n try {\n eval(func);\n }\n catch (e) {\n console.warn(e);\n }\n }\n }\n function $domReady(func) {\n if (/^loaded|^complete|^interactive/.test(document.readyState)) {\n setTimeout(func, 0);\n }\n else {\n document.addEventListener('DOMContentLoaded', func);\n }\n }\n function initElement(ele) {\n ele.AndroidUI = new androidui.AndroidUI(ele);\n let debugAttr = ele.getAttribute('debug');\n if (debugAttr != null && debugAttr != '0' && debugAttr != 'false')\n ele.AndroidUI.setDebugEnable();\n let onClose = ele.getAttribute('onclose');\n if (onClose) {\n ele.AndroidUI.setUIClient({\n shouldShowAppClosed(androidUI) {\n if (!onClose)\n return;\n runFunction(onClose);\n }\n });\n }\n let onLoad = ele.getAttribute('onload');\n if (onLoad) {\n runFunction(onLoad);\n }\n }\n if (typeof document['registerElement'] === \"function\") {\n document.registerElement(\"android-ui\", AndroidUIElement);\n }\n else {\n $domReady(() => {\n let eles = document.getElementsByTagName('android-ui');\n for (let ele of Array.from(eles)) {\n initElement(ele);\n }\n });\n }\n let styleElement = document.createElement('style');\n styleElement.innerHTML += `\n android-ui {\n position : relative;\n overflow : hidden;\n display : block;\n outline: none;\n }\n android-ui * {\n overflow : hidden;\n border : none;\n outline: none;\n pointer-events: auto;\n }\n android-ui resources {\n display: none;\n }\n android-ui Button {\n border: none;\n background: none;\n }\n android-ui windowsgroup {\n pointer-events: none;\n }\n android-ui > canvas {\n position: absolute;\n left: 0;\n top: 0;\n }\n `;\n document.head.appendChild(styleElement);\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n var Intent = android.content.Intent;\n var ActivityThread = android.app.ActivityThread;\n var ViewRootImpl = android.view.ViewRootImpl;\n class AndroidUI {\n constructor(androidUIElement) {\n this._canvas = document.createElement(\"canvas\");\n this.viewsDependOnDebugLayout = new Set();\n this.showDebugLayoutDefault = false;\n this._windowBound = new android.graphics.Rect();\n this.tempRect = new android.graphics.Rect();\n this.touchEvent = new MotionEvent();\n this.ketEvent = new KeyEvent();\n this.androidUIElement = androidUIElement;\n if (androidUIElement[AndroidUI.BindToElementName]) {\n throw Error('already init a AndroidUI with this element');\n }\n androidUIElement[AndroidUI.BindToElementName] = this;\n this.init();\n }\n get windowManager() {\n return this.mApplication.getWindowManager();\n }\n get windowBound() {\n return this._windowBound;\n }\n init() {\n this.appName = document.title;\n this._viewRootImpl = new android.view.ViewRootImpl();\n this.initAndroidUIElement();\n this.initApplication();\n this.androidUIElement.appendChild(this._canvas);\n this.initEvent();\n this.initRootSizeChange();\n this._viewRootImpl.setView(this.windowManager.getWindowsLayout());\n this._viewRootImpl.initSurface(this._canvas);\n this.initBrowserVisibleChange();\n this.initLaunchActivity();\n this.initGlobalCrashHandle();\n }\n initApplication() {\n const appName = this.androidUIElement.getAttribute('appName');\n let appClazz;\n if (appName) {\n try {\n appClazz = eval(appName);\n }\n catch (e) {\n }\n }\n appClazz = appClazz || android.app.Application;\n this.mApplication = new appClazz(this);\n this.mApplication.onCreate();\n }\n initLaunchActivity() {\n this.mActivityThread = new ActivityThread(this);\n for (let ele of Array.from(this.androidUIElement.children)) {\n let tagName = ele.tagName;\n if (tagName != 'ACTIVITY')\n continue;\n let activityName = ele.getAttribute('name') || ele.getAttribute('android:name') || 'android.app.Activity';\n let intent = new Intent(activityName);\n this.mActivityThread.overrideNextWindowAnimation(null, null, null, null);\n let activity = this.mActivityThread.handleLaunchActivity(intent);\n if (activity) {\n this.androidUIElement.removeChild(ele);\n for (let element of Array.from(ele.children)) {\n android.view.LayoutInflater.from(activity).inflate(element, activity.getWindow().mContentParent, true);\n }\n let onCreateFunc = ele.getAttribute('oncreate');\n if (onCreateFunc && typeof window[onCreateFunc] === \"function\") {\n window[onCreateFunc].call(this, activity);\n }\n }\n }\n this.mActivityThread.initWithPageStack();\n }\n initGlobalCrashHandle() {\n window.onerror = (sMsg, sUrl, sLine) => {\n if (window.confirm(android.R.string_.crash_catch_alert + '\\n' + sMsg)) {\n window.location.reload();\n }\n };\n }\n refreshWindowBound() {\n let boundLeft = this.androidUIElement.offsetLeft;\n let boundTop = this.androidUIElement.offsetTop;\n let parent = this.androidUIElement.parentElement;\n if (parent) {\n boundLeft += parent.offsetLeft;\n boundTop += parent.offsetTop;\n parent = parent.parentElement;\n }\n let boundRight = boundLeft + this.androidUIElement.offsetWidth;\n let boundBottom = boundTop + this.androidUIElement.offsetHeight;\n if (this._windowBound && this._windowBound.left == boundLeft && this._windowBound.top == boundTop\n && this._windowBound.right == boundRight && this._windowBound.bottom == boundBottom) {\n return false;\n }\n this._windowBound.set(boundLeft, boundTop, boundRight, boundBottom);\n return true;\n }\n initAndroidUIElement() {\n if (this.androidUIElement.style.display === 'none') {\n this.androidUIElement.style.display = '';\n }\n this.androidUIElement.setAttribute('tabindex', '0');\n this.androidUIElement.focus();\n this.androidUIElement.onblur = (e) => {\n this._viewRootImpl.ensureTouchMode(true);\n };\n }\n initEvent() {\n this.initTouchEvent();\n this.initMouseEvent();\n this.initKeyEvent();\n this.initGenericEvent();\n }\n initTouchEvent() {\n this.androidUIElement.addEventListener('touchstart', (e) => {\n this.refreshWindowBound();\n if (e.target != document.activeElement || !this.androidUIElement.contains(document.activeElement)) {\n this.androidUIElement.focus();\n }\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_DOWN, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchmove', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_MOVE, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchend', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_UP, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('touchcancel', (e) => {\n this.touchEvent.initWithTouch(e, MotionEvent.ACTION_CANCEL, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initMouseEvent() {\n function mouseToTouchEvent(e) {\n let touch = {\n identifier: 0,\n target: null,\n screenX: e.screenX,\n screenY: e.screenY,\n clientX: e.clientX,\n clientY: e.clientY,\n pageX: e.pageX,\n pageY: e.pageY\n };\n return {\n changedTouches: [touch],\n targetTouches: [touch],\n touches: e.type === 'mouseup' ? [] : [touch],\n timeStamp: e.timeStamp\n };\n }\n let isMouseDown = false;\n this.androidUIElement.addEventListener('mousedown', (e) => {\n isMouseDown = true;\n this.refreshWindowBound();\n if (e.target != document.activeElement || !this.androidUIElement.contains(document.activeElement)) {\n this.androidUIElement.focus();\n }\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_DOWN, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mousemove', (e) => {\n if (!isMouseDown)\n return;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_MOVE, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mouseup', (e) => {\n isMouseDown = false;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_UP, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('mouseleave', (e) => {\n if (e.fromElement === this.androidUIElement) {\n isMouseDown = false;\n this.touchEvent.initWithTouch(mouseToTouchEvent(e), MotionEvent.ACTION_CANCEL, this._windowBound);\n if (this._viewRootImpl.dispatchInputEvent(this.touchEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }\n }, true);\n let scrollEvent = new MotionEvent();\n this.androidUIElement.addEventListener('mousewheel', (e) => {\n scrollEvent.initWithMouseWheel(e);\n if (this._viewRootImpl.dispatchInputEvent(scrollEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initKeyEvent() {\n this.androidUIElement.addEventListener('keydown', (e) => {\n this.ketEvent.initKeyEvent(e, KeyEvent.ACTION_DOWN);\n if (this._viewRootImpl.dispatchInputEvent(this.ketEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n this.androidUIElement.addEventListener('keyup', (e) => {\n this.ketEvent.initKeyEvent(e, KeyEvent.ACTION_UP);\n if (this._viewRootImpl.dispatchInputEvent(this.ketEvent)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }\n }, true);\n }\n initGenericEvent() {\n }\n initRootSizeChange() {\n const inner_this = this;\n window.addEventListener('resize', () => {\n inner_this.notifyRootSizeChange();\n });\n let lastWidth = this.androidUIElement.offsetWidth;\n let lastHeight = this.androidUIElement.offsetHeight;\n if (lastWidth > 0 && lastHeight > 0)\n this.notifyRootSizeChange();\n setInterval(() => {\n let width = inner_this.androidUIElement.offsetWidth;\n let height = inner_this.androidUIElement.offsetHeight;\n if (lastHeight !== height || lastWidth !== width) {\n lastWidth = width;\n lastHeight = height;\n inner_this.notifyRootSizeChange();\n }\n }, 500);\n }\n initBrowserVisibleChange() {\n var eventName = 'visibilitychange';\n if (document['webkitHidden'] != undefined) {\n eventName = 'webkitvisibilitychange';\n }\n document.addEventListener(eventName, () => {\n if (document['hidden'] || document['webkitHidden']) {\n this.mActivityThread.scheduleApplicationHide();\n }\n else {\n this.mActivityThread.scheduleApplicationShow();\n this._viewRootImpl.invalidate();\n }\n }, false);\n }\n notifyRootSizeChange() {\n if (this.refreshWindowBound()) {\n let density = android.content.res.Resources.getDisplayMetrics().density;\n this.tempRect.set(this._windowBound.left * density, this._windowBound.top * density, this._windowBound.right * density, this._windowBound.bottom * density);\n let width = this._windowBound.width();\n let height = this._windowBound.height();\n this._canvas.width = width * density;\n this._canvas.height = height * density;\n this._canvas.style.width = width + \"px\";\n this._canvas.style.height = height + \"px\";\n this._viewRootImpl.notifyResized(this.tempRect);\n }\n }\n viewAttachedDependOnDebugLayout(view) {\n this.viewsDependOnDebugLayout.add(view);\n this.showDebugLayout();\n }\n viewDetachedDependOnDebugLayout(view) {\n this.viewsDependOnDebugLayout.delete(view);\n if (this.viewsDependOnDebugLayout.size == 0 && !this.showDebugLayoutDefault) {\n this.hideDebugLayout();\n }\n }\n setDebugEnable(enable = true) {\n ViewRootImpl.DEBUG_FPS = enable;\n this.setShowDebugLayout(enable);\n }\n setShowDebugLayout(showDebugLayoutDefault = true) {\n this.showDebugLayoutDefault = showDebugLayoutDefault;\n if (showDebugLayoutDefault) {\n this.showDebugLayout();\n }\n else {\n this.hideDebugLayout();\n }\n }\n showDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === null) {\n this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n hideDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === this.androidUIElement) {\n this.androidUIElement.removeChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n setUIClient(uiClient) {\n this.uiClient = uiClient;\n }\n showAppClosed() {\n AndroidUI.showAppClosed(this);\n }\n static showAppClosed(androidUI) {\n androidUI.androidUIElement.parentNode.removeChild(androidUI.androidUIElement);\n if (androidUI.uiClient && androidUI.uiClient.shouldShowAppClosed) {\n androidUI.uiClient.shouldShowAppClosed(androidUI);\n }\n }\n }\n AndroidUI.BindToElementName = 'AndroidUI';\n androidui.AndroidUI = AndroidUI;\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var View = android.view.View;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var Window = android.view.Window;\n var WindowManager = android.view.WindowManager;\n var Log = android.util.Log;\n var Context = android.content.Context;\n var Intent = android.content.Intent;\n class Activity extends Context {\n constructor(androidUI) {\n super(androidUI);\n this.mWindowAdded = false;\n this.mVisibleFromClient = true;\n this.mResultCode = Activity.RESULT_CANCELED;\n this.mResultData = null;\n this.mWindow = new Window(this);\n this.mWindow.setWindowAnimations(android.R.anim.activity_open_enter_ios, android.R.anim.activity_close_exit_ios, android.R.anim.activity_close_enter_ios, android.R.anim.activity_open_exit_ios);\n this.mWindow.setDimAmount(0.7);\n this.mWindow.getAttributes().flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n this.mWindow.setCallback(this);\n }\n getIntent() {\n return this.mIntent;\n }\n setIntent(newIntent) {\n this.mIntent = newIntent;\n }\n getApplication() {\n return this.getApplicationContext();\n }\n getWindowManager() {\n return this.mWindow.getChildWindowManager();\n }\n getGlobalWindowManager() {\n return this.getApplicationContext().getWindowManager();\n }\n getWindow() {\n return this.mWindow;\n }\n getCurrentFocus() {\n return this.mWindow != null ? this.mWindow.getCurrentFocus() : null;\n }\n onCreate(savedInstanceState) {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onCreate \" + this + \": \" + savedInstanceState);\n this.getApplication().dispatchActivityCreated(this, savedInstanceState);\n this.mCalled = true;\n }\n performRestoreInstanceState(savedInstanceState) {\n this.onRestoreInstanceState(savedInstanceState);\n }\n onRestoreInstanceState(savedInstanceState) {\n }\n onPostCreate(savedInstanceState) {\n this.onTitleChanged(this.getTitle());\n this.mCalled = true;\n }\n onStart() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onStart \" + this);\n this.mCalled = true;\n this.getApplication().dispatchActivityStarted(this);\n }\n onRestart() {\n this.mCalled = true;\n }\n onResume() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onResume \" + this);\n this.getApplication().dispatchActivityResumed(this);\n this.mCalled = true;\n }\n onPostResume() {\n const win = this.getWindow();\n if (win != null)\n win.makeActive();\n this.mCalled = true;\n }\n onNewIntent(intent) {\n }\n performSaveInstanceState(outState) {\n this.onSaveInstanceState(outState);\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onSaveInstanceState \" + this + \": \" + outState);\n }\n onSaveInstanceState(outState) {\n this.getApplication().dispatchActivitySaveInstanceState(this, outState);\n }\n onPause() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onPause \" + this);\n this.getApplication().dispatchActivityPaused(this);\n this.mCalled = true;\n }\n onUserLeaveHint() {\n }\n onStop() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onStop \" + this);\n this.getApplication().dispatchActivityStopped(this);\n this.mCalled = true;\n }\n onDestroy() {\n if (Activity.DEBUG_LIFECYCLE)\n Log.v(Activity.TAG, \"onDestroy \" + this);\n this.mCalled = true;\n this.getApplication().dispatchActivityDestroyed(this);\n }\n findViewById(id) {\n return this.getWindow().findViewById(id);\n }\n setContentView(view, params) {\n if (!(view instanceof View)) {\n view = this.getLayoutInflater().inflate(view);\n }\n this.getWindow().setContentView(view, params);\n }\n addContentView(view, params) {\n this.mWindow.addContentView(view, params);\n }\n setFinishOnTouchOutside(finish) {\n this.mWindow.setCloseOnTouchOutside(finish);\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n event.startTracking();\n return true;\n }\n return false;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) {\n this.onBackPressed();\n return true;\n }\n return false;\n }\n onBackPressed() {\n this.finish();\n }\n onTouchEvent(event) {\n if (this.mWindow.shouldCloseOnTouch(this, event)) {\n this.finish();\n return true;\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onUserInteraction() {\n }\n onWindowAttributesChanged(params) {\n let decor = this.getWindow().getDecorView();\n if (decor != null && decor.getParent() != null) {\n this.getWindowManager().updateWindowLayout(this.getWindow(), params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n hasWindowFocus() {\n let w = this.getWindow();\n if (w != null) {\n let d = w.getDecorView();\n if (d != null) {\n return d.hasWindowFocus();\n }\n }\n return false;\n }\n dispatchKeyEvent(event) {\n this.onUserInteraction();\n let win = this.getWindow();\n if (win.superDispatchKeyEvent(event)) {\n return true;\n }\n let decor = win.getDecorView();\n return event.dispatch(this, decor != null ? decor.getKeyDispatcherState() : null, this);\n }\n dispatchTouchEvent(ev) {\n if (ev.getAction() == MotionEvent.ACTION_DOWN) {\n this.onUserInteraction();\n }\n if (this.getWindow().superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n this.onUserInteraction();\n if (this.getWindow().superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n takeKeyEvents(_get) {\n this.getWindow().takeKeyEvents(_get);\n }\n invalidateOptionsMenu() {\n let menu = new android.view.Menu(this);\n if (this.onCreateOptionsMenu(menu)) {\n menu.setCallback({\n onMenuItemSelected: (menu, item) => {\n let handle = this.onOptionsItemSelected(item);\n this.onOptionsMenuClosed(menu);\n return handle;\n }\n });\n this.mMenu = menu;\n this.mMenuPopuoHelper = this.invalidateOptionsMenuPopupHelper(menu);\n }\n }\n invalidateOptionsMenuPopupHelper(menu) {\n return null;\n }\n onCreateOptionsMenu(menu) {\n return true;\n }\n onPrepareOptionsMenu(menu) {\n return true;\n }\n onOptionsItemSelected(item) {\n return false;\n }\n onOptionsMenuClosed(menu) {\n }\n openOptionsMenu() {\n if (this.mMenuPopuoHelper)\n this.mMenuPopuoHelper.show();\n }\n closeOptionsMenu() {\n if (this.mMenuPopuoHelper)\n this.mMenuPopuoHelper.dismiss();\n }\n startActivityForResult(intent, requestCode, options) {\n if (typeof intent === 'string')\n intent = new Intent(intent);\n if (requestCode >= 0)\n intent.mRequestCode = requestCode;\n this.androidUI.mActivityThread.execStartActivity(this, intent, options);\n if (requestCode >= 0) {\n this.mStartedActivity = true;\n }\n const decor = this.mWindow != null ? this.mWindow.peekDecorView() : null;\n if (decor != null) {\n decor.cancelPendingInputEvents();\n }\n }\n startActivities(intents, options) {\n for (let intent of intents) {\n this.startActivity(intent, options);\n }\n }\n startActivity(intent, options) {\n if (options != null) {\n this.startActivityForResult(intent, -1, options);\n }\n else {\n this.startActivityForResult(intent, -1);\n }\n }\n startActivityIfNeeded(intent, requestCode, options) {\n if (this.androidUI.mActivityThread.canBackTo(intent)) {\n return false;\n }\n this.startActivityForResult(intent, requestCode, options);\n return true;\n }\n overrideNextTransition(enterAnimation, exitAnimation, resumeAnimation, hideAnimation) {\n this.androidUI.mActivityThread.overrideNextWindowAnimation(enterAnimation, exitAnimation, resumeAnimation, hideAnimation);\n }\n setResult(resultCode, data) {\n {\n this.mResultCode = resultCode;\n this.mResultData = data;\n }\n }\n getCallingActivity() {\n return null;\n }\n setVisible(visible) {\n if (this.mVisibleFromClient != visible) {\n this.mVisibleFromClient = visible;\n }\n }\n makeVisible() {\n if (!this.mWindowAdded) {\n let wm = this.getGlobalWindowManager();\n wm.addWindow(this.getWindow());\n this.mWindowAdded = true;\n }\n this.getWindow().getDecorView().setVisibility(View.VISIBLE);\n }\n isFinishing() {\n return this.mFinished;\n }\n isDestroyed() {\n return this.mDestroyed;\n }\n finish() {\n let resultCode = this.mResultCode;\n let resultData = this.mResultData;\n try {\n this.androidUI.mActivityThread.scheduleDestroyActivity(this);\n }\n catch (e) {\n }\n }\n finishActivity(requestCode) {\n this.androidUI.mActivityThread.scheduleDestroyActivityByRequestCode(requestCode);\n }\n onActivityResult(requestCode, resultCode, data) {\n }\n setTitle(title) {\n this.getWindow().setTitle(title);\n this.onTitleChanged(title);\n }\n getTitle() {\n return this.getWindow().getAttributes().getTitle();\n }\n onTitleChanged(title, color) {\n const win = this.getWindow();\n if (win != null) {\n win.setTitle(title);\n }\n }\n runOnUiThread(action) {\n action.run();\n }\n navigateUpTo(upIntent, upToRootIfNotFound = true) {\n if (this.androidUI.mActivityThread.scheduleBackTo(upIntent)) {\n return true;\n }\n if (upToRootIfNotFound)\n this.androidUI.mActivityThread.scheduleBackToRoot();\n return false;\n }\n performCreate(icicle) {\n this.onCreate(icicle);\n this.invalidateOptionsMenu();\n }\n performStart() {\n this.mCalled = false;\n this.onStart();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onStart()\")`);\n }\n }\n performRestart() {\n if (this.mStopped) {\n this.mStopped = false;\n this.mCalled = false;\n this.onRestart();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onRestart()\")`);\n }\n this.performStart();\n }\n }\n performResume() {\n this.performRestart();\n this.mCalled = false;\n this.mResumed = true;\n this.onResume();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onResume()\")`);\n }\n this.mCalled = false;\n this.onPostResume();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onPostResume()\")`);\n }\n }\n performPause() {\n if (this.mResumed) {\n this.mCalled = false;\n this.onPause();\n this.mResumed = false;\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity ${this.constructor.name} did not call through to super.onPause()\")`);\n }\n this.mResumed = false;\n }\n }\n performUserLeaving() {\n this.onUserInteraction();\n this.onUserLeaveHint();\n }\n performStop() {\n if (!this.mStopped) {\n this.mCalled = false;\n this.onStop();\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onStop()\")`);\n }\n this.mStopped = true;\n }\n this.mResumed = false;\n }\n performDestroy() {\n this.mDestroyed = true;\n this.mWindow.destroy();\n this.onDestroy();\n }\n isResumed() {\n return this.mResumed;\n }\n dispatchActivityResult(who, requestCode, resultCode, data) {\n this.onActivityResult(requestCode, resultCode, data);\n }\n }\n Activity.TAG = \"Activity\";\n Activity.DEBUG_LIFECYCLE = false;\n Activity.RESULT_CANCELED = 0;\n Activity.RESULT_OK = -1;\n Activity.RESULT_FIRST_USER = 1;\n app.Activity = Activity;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var ArrayList = java.util.ArrayList;\n var Context = android.content.Context;\n class Application extends Context {\n constructor() {\n super(...arguments);\n this.mActivityLifecycleCallbacks = new ArrayList();\n }\n onCreate() {\n }\n getWindowManager() {\n if (!this.mWindowManager)\n this.mWindowManager = new android.view.WindowManager(this);\n return this.mWindowManager;\n }\n registerActivityLifecycleCallbacks(callback) {\n {\n this.mActivityLifecycleCallbacks.add(callback);\n }\n }\n unregisterActivityLifecycleCallbacks(callback) {\n {\n this.mActivityLifecycleCallbacks.remove(callback);\n }\n }\n dispatchActivityCreated(activity, savedInstanceState) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityCreated(activity, savedInstanceState);\n }\n }\n }\n dispatchActivityStarted(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityStarted(activity);\n }\n }\n }\n dispatchActivityResumed(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityResumed(activity);\n }\n }\n }\n dispatchActivityPaused(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityPaused(activity);\n }\n }\n }\n dispatchActivityStopped(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityStopped(activity);\n }\n }\n }\n dispatchActivitySaveInstanceState(activity, outState) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivitySaveInstanceState(activity, outState);\n }\n }\n }\n dispatchActivityDestroyed(activity) {\n let callbacks = this.collectActivityLifecycleCallbacks();\n if (callbacks != null) {\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i].onActivityDestroyed(activity);\n }\n }\n }\n collectActivityLifecycleCallbacks() {\n let callbacks = null;\n {\n if (this.mActivityLifecycleCallbacks.size() > 0) {\n callbacks = this.mActivityLifecycleCallbacks.toArray();\n }\n }\n return callbacks;\n }\n }\n app.Application = Application;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Log = android.util.Log;\n var Pools = android.util.Pools;\n class VelocityTracker {\n constructor() {\n this.mLastTouchIndex = 0;\n this.mGeneration = 0;\n this.clear();\n }\n static obtain() {\n let instance = VelocityTracker.sPool.acquire();\n return (instance != null) ? instance : new VelocityTracker();\n }\n recycle() {\n this.clear();\n VelocityTracker.sPool.release(this);\n }\n setNextPoolable(element) {\n this.mNext = element;\n }\n getNextPoolable() {\n return this.mNext;\n }\n clear() {\n VelocityTracker.releasePointerList(this.mPointerListHead);\n this.mPointerListHead = null;\n this.mLastTouchIndex = 0;\n }\n addMovement(ev) {\n let historySize = ev.getHistorySize();\n const pointerCount = ev.getPointerCount();\n const lastTouchIndex = this.mLastTouchIndex;\n const nextTouchIndex = (lastTouchIndex + 1) % VelocityTracker.NUM_PAST;\n const finalTouchIndex = (nextTouchIndex + historySize) % VelocityTracker.NUM_PAST;\n const generation = this.mGeneration++;\n this.mLastTouchIndex = finalTouchIndex;\n let previousPointer = null;\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n let nextPointer;\n if (previousPointer == null || pointerId < previousPointer.id) {\n previousPointer = null;\n nextPointer = this.mPointerListHead;\n }\n else {\n nextPointer = previousPointer.next;\n }\n let pointer;\n for (;;) {\n if (nextPointer != null) {\n const nextPointerId = nextPointer.id;\n if (nextPointerId == pointerId) {\n pointer = nextPointer;\n break;\n }\n if (nextPointerId < pointerId) {\n nextPointer = nextPointer.next;\n continue;\n }\n }\n pointer = VelocityTracker.obtainPointer();\n pointer.id = pointerId;\n pointer.pastTime[lastTouchIndex] = Number.MIN_VALUE;\n pointer.next = nextPointer;\n if (previousPointer == null) {\n this.mPointerListHead = pointer;\n }\n else {\n previousPointer.next = pointer;\n }\n break;\n }\n pointer.generation = generation;\n previousPointer = pointer;\n const pastX = pointer.pastX;\n const pastY = pointer.pastY;\n const pastTime = pointer.pastTime;\n historySize = ev.getHistorySize(pointerId);\n for (let j = 0; j < historySize; j++) {\n const touchIndex = (nextTouchIndex + j) % VelocityTracker.NUM_PAST;\n pastX[touchIndex] = ev.getHistoricalX(i, j);\n pastY[touchIndex] = ev.getHistoricalY(i, j);\n pastTime[touchIndex] = ev.getHistoricalEventTime(i, j);\n }\n pastX[finalTouchIndex] = ev.getX(i);\n pastY[finalTouchIndex] = ev.getY(i);\n pastTime[finalTouchIndex] = ev.getEventTime();\n }\n previousPointer = null;\n for (let pointer = this.mPointerListHead; pointer != null;) {\n const nextPointer = pointer.next;\n if (pointer.generation != generation) {\n if (previousPointer == null) {\n this.mPointerListHead = nextPointer;\n }\n else {\n previousPointer.next = nextPointer;\n }\n VelocityTracker.releasePointer(pointer);\n }\n else {\n previousPointer = pointer;\n }\n pointer = nextPointer;\n }\n }\n computeCurrentVelocity(units, maxVelocity = Number.MAX_SAFE_INTEGER) {\n const lastTouchIndex = this.mLastTouchIndex;\n for (let pointer = this.mPointerListHead; pointer != null; pointer = pointer.next) {\n const pastTime = pointer.pastTime;\n let oldestTouchIndex = lastTouchIndex;\n let numTouches = 1;\n const minTime = pastTime[lastTouchIndex] - VelocityTracker.MAX_AGE_MILLISECONDS;\n while (numTouches < VelocityTracker.NUM_PAST) {\n const nextOldestTouchIndex = (oldestTouchIndex + VelocityTracker.NUM_PAST - 1) % VelocityTracker.NUM_PAST;\n const nextOldestTime = pastTime[nextOldestTouchIndex];\n if (nextOldestTime < minTime) {\n break;\n }\n oldestTouchIndex = nextOldestTouchIndex;\n numTouches += 1;\n }\n if (numTouches > 3) {\n numTouches -= 1;\n }\n const pastX = pointer.pastX;\n const pastY = pointer.pastY;\n const oldestX = pastX[oldestTouchIndex];\n const oldestY = pastY[oldestTouchIndex];\n const oldestTime = pastTime[oldestTouchIndex];\n let accumX = 0;\n let accumY = 0;\n for (let i = 1; i < numTouches; i++) {\n const touchIndex = (oldestTouchIndex + i) % VelocityTracker.NUM_PAST;\n const duration = (pastTime[touchIndex] - oldestTime);\n if (duration == 0)\n continue;\n let delta = pastX[touchIndex] - oldestX;\n let velocity = (delta / duration) * units;\n accumX = (accumX == 0) ? velocity : (accumX + velocity) * .5;\n delta = pastY[touchIndex] - oldestY;\n velocity = (delta / duration) * units;\n accumY = (accumY == 0) ? velocity : (accumY + velocity) * .5;\n }\n if (accumX < -maxVelocity) {\n accumX = -maxVelocity;\n }\n else if (accumX > maxVelocity) {\n accumX = maxVelocity;\n }\n if (accumY < -maxVelocity) {\n accumY = -maxVelocity;\n }\n else if (accumY > maxVelocity) {\n accumY = maxVelocity;\n }\n pointer.xVelocity = accumX;\n pointer.yVelocity = accumY;\n if (VelocityTracker.localLOGV) {\n Log.v(VelocityTracker.TAG, \"Pointer \" + pointer.id\n + \": Y velocity=\" + accumX + \" X velocity=\" + accumY + \" N=\" + numTouches);\n }\n }\n }\n getXVelocity(id = 0) {\n let pointer = this.getPointer(id);\n return pointer != null ? pointer.xVelocity : 0;\n }\n getYVelocity(id = 0) {\n let pointer = this.getPointer(id);\n return pointer != null ? pointer.yVelocity : 0;\n }\n getPointer(id) {\n for (let pointer = this.mPointerListHead; pointer != null; pointer = pointer.next) {\n if (pointer.id == id) {\n return pointer;\n }\n }\n return null;\n }\n static obtainPointer() {\n if (VelocityTracker.sRecycledPointerCount != 0) {\n let element = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount -= 1;\n VelocityTracker.sRecycledPointerListHead = element.next;\n element.next = null;\n return element;\n }\n return new Pointer();\n }\n static releasePointer(pointer) {\n if (VelocityTracker.sRecycledPointerCount < VelocityTracker.POINTER_POOL_CAPACITY) {\n pointer.next = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount += 1;\n VelocityTracker.sRecycledPointerListHead = pointer;\n }\n }\n static releasePointerList(pointer) {\n if (pointer != null) {\n let count = VelocityTracker.sRecycledPointerCount;\n if (count >= VelocityTracker.POINTER_POOL_CAPACITY) {\n return;\n }\n let tail = pointer;\n for (;;) {\n count += 1;\n if (count >= VelocityTracker.POINTER_POOL_CAPACITY) {\n break;\n }\n let next = tail.next;\n if (next == null) {\n break;\n }\n tail = next;\n }\n tail.next = VelocityTracker.sRecycledPointerListHead;\n VelocityTracker.sRecycledPointerCount = count;\n VelocityTracker.sRecycledPointerListHead = pointer;\n }\n }\n }\n VelocityTracker.TAG = \"VelocityTracker\";\n VelocityTracker.DEBUG = Log.VelocityTracker_DBG;\n VelocityTracker.localLOGV = VelocityTracker.DEBUG;\n VelocityTracker.NUM_PAST = 10;\n VelocityTracker.MAX_AGE_MILLISECONDS = 200;\n VelocityTracker.POINTER_POOL_CAPACITY = 20;\n VelocityTracker.sPool = new Pools.SynchronizedPool(2);\n VelocityTracker.sRecycledPointerCount = 0;\n view.VelocityTracker = VelocityTracker;\n class Pointer {\n constructor() {\n this.id = 0;\n this.xVelocity = 0;\n this.yVelocity = 0;\n this.pastX = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.pastY = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.pastTime = androidui.util.ArrayCreator.newNumberArray(VelocityTracker.NUM_PAST);\n this.generation = 0;\n }\n }\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var SystemClock = android.os.SystemClock;\n var MotionEvent = android.view.MotionEvent;\n var ViewConfiguration = android.view.ViewConfiguration;\n var TypedValue = android.util.TypedValue;\n class ScaleGestureDetector {\n constructor(listener, handler) {\n this.mFocusX = 0;\n this.mFocusY = 0;\n this.mCurrSpan = 0;\n this.mPrevSpan = 0;\n this.mInitialSpan = 0;\n this.mCurrSpanX = 0;\n this.mCurrSpanY = 0;\n this.mPrevSpanX = 0;\n this.mPrevSpanY = 0;\n this.mCurrTime = 0;\n this.mPrevTime = 0;\n this.mSpanSlop = 0;\n this.mMinSpan = 0;\n this.mTouchUpper = 0;\n this.mTouchLower = 0;\n this.mTouchHistoryLastAccepted = 0;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = 0;\n this.mTouchMinMajor = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n this.mListener = listener;\n this.mSpanSlop = ViewConfiguration.get().getScaledTouchSlop() * 2;\n this.mTouchMinMajor = TypedValue.complexToDimensionPixelSize('48dp');\n this.mMinSpan = TypedValue.complexToDimensionPixelSize('27mm');\n this.mHandler = handler;\n this.setQuickScaleEnabled(true);\n }\n addTouchHistory(ev) {\n const currentTime = SystemClock.uptimeMillis();\n const count = ev.getPointerCount();\n let accept = currentTime - this.mTouchHistoryLastAcceptedTime >= ScaleGestureDetector.TOUCH_STABILIZE_TIME;\n let total = 0;\n let sampleCount = 0;\n for (let i = 0; i < count; i++) {\n const hasLastAccepted = !Number.isNaN(this.mTouchHistoryLastAccepted);\n const historySize = ev.getHistorySize();\n const pointerSampleCount = historySize + 1;\n for (let h = 0; h < pointerSampleCount; h++) {\n let major;\n if (h < historySize) {\n major = ev.getHistoricalTouchMajor(i, h);\n }\n else {\n major = ev.getTouchMajor(i);\n }\n if (major < this.mTouchMinMajor)\n major = this.mTouchMinMajor;\n total += major;\n if (Number.isNaN(this.mTouchUpper) || major > this.mTouchUpper) {\n this.mTouchUpper = major;\n }\n if (Number.isNaN(this.mTouchLower) || major < this.mTouchLower) {\n this.mTouchLower = major;\n }\n if (hasLastAccepted) {\n function Math_signum(value) {\n if (value === 0 || Number.isNaN(value))\n return value;\n return Math.abs(value) === value ? 1 : -1;\n }\n const directionSig = Math.floor(Math_signum(major - this.mTouchHistoryLastAccepted));\n if (directionSig != this.mTouchHistoryDirection || (directionSig == 0 && this.mTouchHistoryDirection == 0)) {\n this.mTouchHistoryDirection = directionSig;\n const time = h < historySize ? ev.getHistoricalEventTime(h) : ev.getEventTime();\n this.mTouchHistoryLastAcceptedTime = time;\n accept = false;\n }\n }\n }\n sampleCount += pointerSampleCount;\n }\n const avg = total / sampleCount;\n if (accept) {\n let newAccepted = (this.mTouchUpper + this.mTouchLower + avg) / 3;\n this.mTouchUpper = (this.mTouchUpper + newAccepted) / 2;\n this.mTouchLower = (this.mTouchLower + newAccepted) / 2;\n this.mTouchHistoryLastAccepted = newAccepted;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = ev.getEventTime();\n }\n }\n clearTouchHistory() {\n this.mTouchUpper = Number.NaN;\n this.mTouchLower = Number.NaN;\n this.mTouchHistoryLastAccepted = Number.NaN;\n this.mTouchHistoryDirection = 0;\n this.mTouchHistoryLastAcceptedTime = 0;\n }\n onTouchEvent(event) {\n this.mCurrTime = event.getEventTime();\n const action = event.getActionMasked();\n if (this.mQuickScaleEnabled) {\n this.mGestureDetector.onTouchEvent(event);\n }\n const streamComplete = action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL;\n if (action == MotionEvent.ACTION_DOWN || streamComplete) {\n if (this.mInProgress) {\n this.mListener.onScaleEnd(this);\n this.mInProgress = false;\n this.mInitialSpan = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n else if (this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS && streamComplete) {\n this.mInProgress = false;\n this.mInitialSpan = 0;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n if (streamComplete) {\n this.clearTouchHistory();\n return true;\n }\n }\n const configChanged = action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN;\n const pointerUp = action == MotionEvent.ACTION_POINTER_UP;\n const skipIndex = pointerUp ? event.getActionIndex() : -1;\n let sumX = 0, sumY = 0;\n const count = event.getPointerCount();\n const div = pointerUp ? count - 1 : count;\n let focusX;\n let focusY;\n if (this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS) {\n focusX = this.mDoubleTapEvent.getX();\n focusY = this.mDoubleTapEvent.getY();\n if (event.getY() < focusY) {\n this.mEventBeforeOrAboveStartingGestureEvent = true;\n }\n else {\n this.mEventBeforeOrAboveStartingGestureEvent = false;\n }\n }\n else {\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n sumX += event.getX(i);\n sumY += event.getY(i);\n }\n focusX = sumX / div;\n focusY = sumY / div;\n }\n this.addTouchHistory(event);\n let devSumX = 0, devSumY = 0;\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n const touchSize = this.mTouchHistoryLastAccepted / 2;\n devSumX += Math.abs(event.getX(i) - focusX) + touchSize;\n devSumY += Math.abs(event.getY(i) - focusY) + touchSize;\n }\n const devX = devSumX / div;\n const devY = devSumY / div;\n const spanX = devX * 2;\n const spanY = devY * 2;\n let span;\n if (this.inDoubleTapMode()) {\n span = spanY;\n }\n else {\n span = Math.sqrt(spanX * spanX + spanY * spanY);\n }\n const wasInProgress = this.mInProgress;\n this.mFocusX = focusX;\n this.mFocusY = focusY;\n if (!this.inDoubleTapMode() && this.mInProgress && (span < this.mMinSpan || configChanged)) {\n this.mListener.onScaleEnd(this);\n this.mInProgress = false;\n this.mInitialSpan = span;\n this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_NONE;\n }\n if (configChanged) {\n this.mPrevSpanX = this.mCurrSpanX = spanX;\n this.mPrevSpanY = this.mCurrSpanY = spanY;\n this.mInitialSpan = this.mPrevSpan = this.mCurrSpan = span;\n }\n const minSpan = this.inDoubleTapMode() ? this.mSpanSlop : this.mMinSpan;\n if (!this.mInProgress && span >= minSpan && (wasInProgress || Math.abs(span - this.mInitialSpan) > this.mSpanSlop)) {\n this.mPrevSpanX = this.mCurrSpanX = spanX;\n this.mPrevSpanY = this.mCurrSpanY = spanY;\n this.mPrevSpan = this.mCurrSpan = span;\n this.mPrevTime = this.mCurrTime;\n this.mInProgress = this.mListener.onScaleBegin(this);\n }\n if (action == MotionEvent.ACTION_MOVE) {\n this.mCurrSpanX = spanX;\n this.mCurrSpanY = spanY;\n this.mCurrSpan = span;\n let updatePrev = true;\n if (this.mInProgress) {\n updatePrev = this.mListener.onScale(this);\n }\n if (updatePrev) {\n this.mPrevSpanX = this.mCurrSpanX;\n this.mPrevSpanY = this.mCurrSpanY;\n this.mPrevSpan = this.mCurrSpan;\n this.mPrevTime = this.mCurrTime;\n }\n }\n return true;\n }\n inDoubleTapMode() {\n return this.mDoubleTapMode == ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;\n }\n setQuickScaleEnabled(scales) {\n this.mQuickScaleEnabled = scales;\n if (this.mQuickScaleEnabled && this.mGestureDetector == null) {\n let gestureListener = (() => {\n const inner_this = this;\n class _Inner extends view.GestureDetector.SimpleOnGestureListener {\n onDoubleTap(e) {\n inner_this.mDoubleTapEvent = e;\n inner_this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS;\n return true;\n }\n }\n return new _Inner();\n })();\n this.mGestureDetector = new view.GestureDetector(gestureListener, this.mHandler);\n }\n }\n isQuickScaleEnabled() {\n return this.mQuickScaleEnabled;\n }\n isInProgress() {\n return this.mInProgress;\n }\n getFocusX() {\n return this.mFocusX;\n }\n getFocusY() {\n return this.mFocusY;\n }\n getCurrentSpan() {\n return this.mCurrSpan;\n }\n getCurrentSpanX() {\n return this.mCurrSpanX;\n }\n getCurrentSpanY() {\n return this.mCurrSpanY;\n }\n getPreviousSpan() {\n return this.mPrevSpan;\n }\n getPreviousSpanX() {\n return this.mPrevSpanX;\n }\n getPreviousSpanY() {\n return this.mPrevSpanY;\n }\n getScaleFactor() {\n if (this.inDoubleTapMode()) {\n const scaleUp = (this.mEventBeforeOrAboveStartingGestureEvent && (this.mCurrSpan < this.mPrevSpan)) || (!this.mEventBeforeOrAboveStartingGestureEvent && (this.mCurrSpan > this.mPrevSpan));\n const spanDiff = (Math.abs(1 - (this.mCurrSpan / this.mPrevSpan)) * ScaleGestureDetector.SCALE_FACTOR);\n return this.mPrevSpan <= 0 ? 1 : scaleUp ? (1 + spanDiff) : (1 - spanDiff);\n }\n return this.mPrevSpan > 0 ? this.mCurrSpan / this.mPrevSpan : 1;\n }\n getTimeDelta() {\n return this.mCurrTime - this.mPrevTime;\n }\n getEventTime() {\n return this.mCurrTime;\n }\n }\n ScaleGestureDetector.TAG = \"ScaleGestureDetector\";\n ScaleGestureDetector.TOUCH_STABILIZE_TIME = 128;\n ScaleGestureDetector.DOUBLE_TAP_MODE_NONE = 0;\n ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS = 1;\n ScaleGestureDetector.SCALE_FACTOR = .5;\n view.ScaleGestureDetector = ScaleGestureDetector;\n (function (ScaleGestureDetector) {\n class SimpleOnScaleGestureListener {\n onScale(detector) {\n return false;\n }\n onScaleBegin(detector) {\n return true;\n }\n onScaleEnd(detector) {\n }\n }\n ScaleGestureDetector.SimpleOnScaleGestureListener = SimpleOnScaleGestureListener;\n })(ScaleGestureDetector = view.ScaleGestureDetector || (view.ScaleGestureDetector = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var Handler = android.os.Handler;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n class GestureDetector {\n constructor(listener, handler) {\n this.mTouchSlopSquare = 0;\n this.mDoubleTapTouchSlopSquare = 0;\n this.mDoubleTapSlopSquare = 0;\n this.mMinimumFlingVelocity = 0;\n this.mMaximumFlingVelocity = 0;\n this.mLastFocusX = 0;\n this.mLastFocusY = 0;\n this.mDownFocusX = 0;\n this.mDownFocusY = 0;\n this.mHandler = new GestureDetector.GestureHandler(this);\n this.mListener = listener;\n if (listener['setOnDoubleTapListener']) {\n this.setOnDoubleTapListener(listener);\n }\n this.init();\n }\n init() {\n if (this.mListener == null) {\n throw Error(`new NullPointerException(\"OnGestureListener must not be null\")`);\n }\n this.mIsLongpressEnabled = true;\n let touchSlop, doubleTapSlop, doubleTapTouchSlop;\n const configuration = ViewConfiguration.get();\n touchSlop = configuration.getScaledTouchSlop();\n doubleTapTouchSlop = configuration.getScaledDoubleTapTouchSlop();\n doubleTapSlop = configuration.getScaledDoubleTapSlop();\n this.mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mTouchSlopSquare = touchSlop * touchSlop;\n this.mDoubleTapTouchSlopSquare = doubleTapTouchSlop * doubleTapTouchSlop;\n this.mDoubleTapSlopSquare = doubleTapSlop * doubleTapSlop;\n }\n setOnDoubleTapListener(onDoubleTapListener) {\n this.mDoubleTapListener = onDoubleTapListener;\n }\n setIsLongpressEnabled(isLongpressEnabled) {\n this.mIsLongpressEnabled = isLongpressEnabled;\n }\n isLongpressEnabled() {\n return this.mIsLongpressEnabled;\n }\n onTouchEvent(ev) {\n const action = ev.getAction();\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n const pointerUp = (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP;\n const skipIndex = pointerUp ? ev.getActionIndex() : -1;\n let sumX = 0, sumY = 0;\n const count = ev.getPointerCount();\n for (let i = 0; i < count; i++) {\n if (skipIndex == i)\n continue;\n sumX += ev.getX(i);\n sumY += ev.getY(i);\n }\n const div = pointerUp ? count - 1 : count;\n const focusX = sumX / div;\n const focusY = sumY / div;\n let handled = false;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_POINTER_DOWN:\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n this.cancelTaps();\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n const upIndex = ev.getActionIndex();\n const id1 = ev.getPointerId(upIndex);\n const x1 = this.mVelocityTracker.getXVelocity(id1);\n const y1 = this.mVelocityTracker.getYVelocity(id1);\n for (let i = 0; i < count; i++) {\n if (i == upIndex)\n continue;\n const id2 = ev.getPointerId(i);\n const x = x1 * this.mVelocityTracker.getXVelocity(id2);\n const y = y1 * this.mVelocityTracker.getYVelocity(id2);\n const dot = x + y;\n if (dot < 0) {\n this.mVelocityTracker.clear();\n break;\n }\n }\n break;\n case MotionEvent.ACTION_DOWN:\n if (this.mDoubleTapListener != null) {\n let hadTapMessage = this.mHandler.hasMessages(GestureDetector.TAP);\n if (hadTapMessage)\n this.mHandler.removeMessages(GestureDetector.TAP);\n if ((this.mCurrentDownEvent != null) && (this.mPreviousUpEvent != null) && hadTapMessage && this.isConsideredDoubleTap(this.mCurrentDownEvent, this.mPreviousUpEvent, ev)) {\n this.mIsDoubleTapping = true;\n handled = this.mDoubleTapListener.onDoubleTap(this.mCurrentDownEvent) || handled;\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else {\n this.mHandler.sendEmptyMessageDelayed(GestureDetector.TAP, GestureDetector.DOUBLE_TAP_TIMEOUT);\n }\n }\n this.mDownFocusX = this.mLastFocusX = focusX;\n this.mDownFocusY = this.mLastFocusY = focusY;\n if (this.mCurrentDownEvent != null) {\n this.mCurrentDownEvent.recycle();\n }\n this.mCurrentDownEvent = MotionEvent.obtain(ev);\n this.mAlwaysInTapRegion = true;\n this.mAlwaysInBiggerTapRegion = true;\n this.mStillDown = true;\n this.mInLongPress = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mIsLongpressEnabled) {\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.sendEmptyMessageAtTime(GestureDetector.LONG_PRESS, this.mCurrentDownEvent.getDownTime() + GestureDetector.TAP_TIMEOUT + GestureDetector.LONGPRESS_TIMEOUT);\n }\n this.mHandler.sendEmptyMessageAtTime(GestureDetector.SHOW_PRESS, this.mCurrentDownEvent.getDownTime() + GestureDetector.TAP_TIMEOUT);\n handled = this.mListener.onDown(ev) || handled;\n break;\n case MotionEvent.ACTION_MOVE:\n if (this.mInLongPress) {\n break;\n }\n const scrollX = this.mLastFocusX - focusX;\n const scrollY = this.mLastFocusY - focusY;\n if (this.mIsDoubleTapping) {\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else if (this.mAlwaysInTapRegion) {\n const deltaX = Math.floor((focusX - this.mDownFocusX));\n const deltaY = Math.floor((focusY - this.mDownFocusY));\n let distance = (deltaX * deltaX) + (deltaY * deltaY);\n if (distance > this.mTouchSlopSquare) {\n handled = this.mListener.onScroll(this.mCurrentDownEvent, ev, scrollX, scrollY);\n this.mLastFocusX = focusX;\n this.mLastFocusY = focusY;\n this.mAlwaysInTapRegion = false;\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n }\n if (distance > this.mDoubleTapTouchSlopSquare) {\n this.mAlwaysInBiggerTapRegion = false;\n }\n }\n else if ((Math.abs(scrollX) >= 1) || (Math.abs(scrollY) >= 1)) {\n handled = this.mListener.onScroll(this.mCurrentDownEvent, ev, scrollX, scrollY);\n this.mLastFocusX = focusX;\n this.mLastFocusY = focusY;\n }\n break;\n case MotionEvent.ACTION_UP:\n this.mStillDown = false;\n let currentUpEvent = MotionEvent.obtain(ev);\n if (this.mIsDoubleTapping) {\n handled = this.mDoubleTapListener.onDoubleTapEvent(ev) || handled;\n }\n else if (this.mInLongPress) {\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mInLongPress = false;\n }\n else if (this.mAlwaysInTapRegion) {\n handled = this.mListener.onSingleTapUp(ev);\n if (this.mDeferConfirmSingleTap && this.mDoubleTapListener != null) {\n this.mDoubleTapListener.onSingleTapConfirmed(ev);\n }\n }\n else {\n const velocityTracker = this.mVelocityTracker;\n const pointerId = ev.getPointerId(0);\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n const velocityY = velocityTracker.getYVelocity(pointerId);\n const velocityX = velocityTracker.getXVelocity(pointerId);\n if ((Math.abs(velocityY) > this.mMinimumFlingVelocity) || (Math.abs(velocityX) > this.mMinimumFlingVelocity)) {\n handled = this.mListener.onFling(this.mCurrentDownEvent, ev, velocityX, velocityY);\n }\n }\n if (this.mPreviousUpEvent != null) {\n this.mPreviousUpEvent.recycle();\n }\n this.mPreviousUpEvent = currentUpEvent;\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n this.mIsDoubleTapping = false;\n this.mDeferConfirmSingleTap = false;\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n break;\n case MotionEvent.ACTION_CANCEL:\n this.cancel();\n break;\n }\n return handled;\n }\n cancel() {\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n this.mIsDoubleTapping = false;\n this.mStillDown = false;\n this.mAlwaysInTapRegion = false;\n this.mAlwaysInBiggerTapRegion = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mInLongPress) {\n this.mInLongPress = false;\n }\n }\n cancelTaps() {\n this.mHandler.removeMessages(GestureDetector.SHOW_PRESS);\n this.mHandler.removeMessages(GestureDetector.LONG_PRESS);\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mIsDoubleTapping = false;\n this.mAlwaysInTapRegion = false;\n this.mAlwaysInBiggerTapRegion = false;\n this.mDeferConfirmSingleTap = false;\n if (this.mInLongPress) {\n this.mInLongPress = false;\n }\n }\n isConsideredDoubleTap(firstDown, firstUp, secondDown) {\n if (!this.mAlwaysInBiggerTapRegion) {\n return false;\n }\n const deltaTime = secondDown.getEventTime() - firstUp.getEventTime();\n if (deltaTime > GestureDetector.DOUBLE_TAP_TIMEOUT || deltaTime < GestureDetector.DOUBLE_TAP_MIN_TIME) {\n return false;\n }\n let deltaX = Math.floor(firstDown.getX()) - Math.floor(secondDown.getX());\n let deltaY = Math.floor(firstDown.getY()) - Math.floor(secondDown.getY());\n return (deltaX * deltaX + deltaY * deltaY < this.mDoubleTapSlopSquare);\n }\n dispatchLongPress() {\n this.mHandler.removeMessages(GestureDetector.TAP);\n this.mDeferConfirmSingleTap = false;\n this.mInLongPress = true;\n this.mListener.onLongPress(this.mCurrentDownEvent);\n }\n }\n GestureDetector.LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();\n GestureDetector.TAP_TIMEOUT = ViewConfiguration.getTapTimeout();\n GestureDetector.DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();\n GestureDetector.DOUBLE_TAP_MIN_TIME = ViewConfiguration.getDoubleTapMinTime();\n GestureDetector.SHOW_PRESS = 1;\n GestureDetector.LONG_PRESS = 2;\n GestureDetector.TAP = 3;\n view.GestureDetector = GestureDetector;\n (function (GestureDetector) {\n class SimpleOnGestureListener {\n onSingleTapUp(e) {\n return false;\n }\n onLongPress(e) {\n }\n onScroll(e1, e2, distanceX, distanceY) {\n return false;\n }\n onFling(e1, e2, velocityX, velocityY) {\n return false;\n }\n onShowPress(e) {\n }\n onDown(e) {\n return false;\n }\n onDoubleTap(e) {\n return false;\n }\n onDoubleTapEvent(e) {\n return false;\n }\n onSingleTapConfirmed(e) {\n return false;\n }\n }\n GestureDetector.SimpleOnGestureListener = SimpleOnGestureListener;\n class GestureHandler extends Handler {\n constructor(arg) {\n super();\n this._GestureDetector_this = arg;\n }\n handleMessage(msg) {\n switch (msg.what) {\n case GestureDetector.SHOW_PRESS:\n this._GestureDetector_this.mListener.onShowPress(this._GestureDetector_this.mCurrentDownEvent);\n break;\n case GestureDetector.LONG_PRESS:\n this._GestureDetector_this.dispatchLongPress();\n break;\n case GestureDetector.TAP:\n if (this._GestureDetector_this.mDoubleTapListener != null) {\n if (!this._GestureDetector_this.mStillDown) {\n this._GestureDetector_this.mDoubleTapListener.onSingleTapConfirmed(this._GestureDetector_this.mCurrentDownEvent);\n }\n else {\n this._GestureDetector_this.mDeferConfirmSingleTap = true;\n }\n }\n break;\n default:\n throw Error(`new RuntimeException(\"Unknown message \" + msg)`);\n }\n }\n }\n GestureDetector.GestureHandler = GestureHandler;\n })(GestureDetector = view.GestureDetector || (view.GestureDetector = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n var ViewGroup = android.view.ViewGroup;\n var Context = android.content.Context;\n class LinearLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBaselineAligned = true;\n this.mBaselineAlignedChildIndex = -1;\n this.mBaselineChildTop = 0;\n this.mOrientation = 0;\n this.mGravity = Gravity.LEFT | Gravity.TOP;\n this.mTotalLength = 0;\n this.mWeightSum = -1;\n this.mUseLargestChild = false;\n this.mDividerWidth = 0;\n this.mDividerHeight = 0;\n this.mShowDividers = LinearLayout.SHOW_DIVIDER_NONE;\n this.mDividerPadding = 0;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const orientationS = a.getAttrValue('orientation');\n if (orientationS) {\n const orientation = LinearLayout[orientationS.toUpperCase()];\n if (Number.isInteger(orientation)) {\n this.setOrientation(orientation);\n }\n }\n const gravityS = a.getAttrValue('gravity');\n if (gravityS) {\n this.setGravity(Gravity.parseGravity(gravityS));\n }\n let baselineAligned = a.getBoolean('baselineAligned', true);\n if (!baselineAligned) {\n this.setBaselineAligned(baselineAligned);\n }\n this.mWeightSum = a.getFloat('weightSum', -1.0);\n this.mBaselineAlignedChildIndex = a.getInt('baselineAlignedChildIndex', -1);\n this.mUseLargestChild = a.getBoolean('measureWithLargestChild', false);\n this.setDividerDrawable(a.getDrawable('divider'));\n let fieldName = ('SHOW_DIVIDER_' + a.getAttrValue('showDividers')).toUpperCase();\n if (Number.isInteger(LinearLayout[fieldName])) {\n this.mShowDividers = LinearLayout[fieldName];\n }\n this.mDividerPadding = a.getDimensionPixelSize('dividerPadding', 0);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('orientation', {\n setter(v, value, attrBinder) {\n if ((value + \"\").toUpperCase() === 'VERTICAL' || LinearLayout.VERTICAL == value) {\n v.setOrientation(LinearLayout.VERTICAL);\n }\n else if ((value + \"\").toUpperCase() === 'HORIZONTAL' || LinearLayout.HORIZONTAL == value) {\n v.setOrientation(LinearLayout.HORIZONTAL);\n }\n }, getter(v) {\n return v.mOrientation;\n }\n }).set('gravity', {\n setter(v, value, attrBinder) {\n v.setGravity(attrBinder.parseGravity(value, v.mGravity));\n }, getter(v) {\n return v.mGravity;\n }\n }).set('baselineAligned', {\n setter(v, value, attrBinder) {\n if (!attrBinder.parseBoolean(value))\n v.setBaselineAligned(false);\n }, getter(v) {\n return v.mBaselineAligned;\n }\n }).set('weightSum', {\n setter(v, value, attrBinder) {\n v.setWeightSum(attrBinder.parseFloat(value, v.mWeightSum));\n }, getter(v) {\n return v.mWeightSum;\n }\n }).set('baselineAlignedChildIndex', {\n setter(v, value, attrBinder) {\n v.setBaselineAlignedChildIndex(attrBinder.parseInt(value, v.mBaselineAlignedChildIndex));\n }, getter(v) {\n return v.mBaselineAlignedChildIndex;\n }\n }).set('measureWithLargestChild', {\n setter(v, value, attrBinder) {\n v.setMeasureWithLargestChildEnabled(attrBinder.parseBoolean(value, v.mUseLargestChild));\n }, getter(v) {\n return v.mUseLargestChild;\n }\n }).set('divider', {\n setter(v, value, attrBinder) {\n v.setDividerDrawable(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mDivider;\n }\n }).set('showDividers', {\n setter(v, value, attrBinder) {\n if (Number.isInteger(parseInt(value))) {\n this.setShowDividers(parseInt(value));\n }\n else {\n let fieldName = ('SHOW_DIVIDER_' + value).toUpperCase();\n if (Number.isInteger(LinearLayout[fieldName])) {\n this.setShowDividers(LinearLayout[fieldName]);\n }\n }\n }, getter(v) {\n return v.getShowDividers();\n }\n }).set('dividerPadding', {\n setter(v, value, attrBinder) {\n v.setDividerPadding(attrBinder.parseInt(value, v.mDividerPadding));\n }, getter(v) {\n return v.getDividerPadding();\n }\n });\n }\n setShowDividers(showDividers) {\n if (showDividers != this.mShowDividers) {\n this.requestLayout();\n }\n this.mShowDividers = showDividers;\n }\n shouldDelayChildPressedState() {\n return false;\n }\n getShowDividers() {\n return this.mShowDividers;\n }\n getDividerDrawable() {\n return this.mDivider;\n }\n setDividerDrawable(divider) {\n if (divider == this.mDivider) {\n return;\n }\n this.mDivider = divider;\n if (divider != null) {\n this.mDividerWidth = divider.getIntrinsicWidth();\n this.mDividerHeight = divider.getIntrinsicHeight();\n }\n else {\n this.mDividerWidth = 0;\n this.mDividerHeight = 0;\n }\n this.setWillNotDraw(divider == null);\n this.requestLayout();\n }\n setDividerPadding(padding) {\n this.mDividerPadding = padding;\n }\n getDividerPadding() {\n return this.mDividerPadding;\n }\n getDividerWidth() {\n return this.mDividerWidth;\n }\n onDraw(canvas) {\n if (this.mDivider == null) {\n return;\n }\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.drawDividersVertical(canvas);\n }\n else {\n this.drawDividersHorizontal(canvas);\n }\n }\n drawDividersVertical(canvas) {\n const count = this.getVirtualChildCount();\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child != null && child.getVisibility() != View.GONE) {\n if (this.hasDividerBeforeChildAt(i)) {\n const lp = child.getLayoutParams();\n const top = child.getTop() - lp.topMargin - this.mDividerHeight;\n this.drawHorizontalDivider(canvas, top);\n }\n }\n }\n if (this.hasDividerBeforeChildAt(count)) {\n const child = this.getVirtualChildAt(count - 1);\n let bottom = 0;\n if (child == null) {\n bottom = this.getHeight() - this.getPaddingBottom() - this.mDividerHeight;\n }\n else {\n const lp = child.getLayoutParams();\n bottom = child.getBottom() + lp.bottomMargin;\n }\n this.drawHorizontalDivider(canvas, bottom);\n }\n }\n drawDividersHorizontal(canvas) {\n const count = this.getVirtualChildCount();\n const isLayoutRtl = this.isLayoutRtl();\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child != null && child.getVisibility() != View.GONE) {\n if (this.hasDividerBeforeChildAt(i)) {\n const lp = child.getLayoutParams();\n let position;\n if (isLayoutRtl) {\n position = child.getRight() + lp.rightMargin;\n }\n else {\n position = child.getLeft() - lp.leftMargin - this.mDividerWidth;\n }\n this.drawVerticalDivider(canvas, position);\n }\n }\n }\n if (this.hasDividerBeforeChildAt(count)) {\n const child = this.getVirtualChildAt(count - 1);\n let position;\n if (child == null) {\n if (isLayoutRtl) {\n position = this.getPaddingLeft();\n }\n else {\n position = this.getWidth() - this.getPaddingRight() - this.mDividerWidth;\n }\n }\n else {\n const lp = child.getLayoutParams();\n if (isLayoutRtl) {\n position = child.getLeft() - lp.leftMargin - this.mDividerWidth;\n }\n else {\n position = child.getRight() + lp.rightMargin;\n }\n }\n this.drawVerticalDivider(canvas, position);\n }\n }\n drawHorizontalDivider(canvas, top) {\n this.mDivider.setBounds(this.getPaddingLeft() + this.mDividerPadding, top, this.getWidth() - this.getPaddingRight() - this.mDividerPadding, top + this.mDividerHeight);\n this.mDivider.draw(canvas);\n }\n drawVerticalDivider(canvas, left) {\n this.mDivider.setBounds(left, this.getPaddingTop() + this.mDividerPadding, left + this.mDividerWidth, this.getHeight() - this.getPaddingBottom() - this.mDividerPadding);\n this.mDivider.draw(canvas);\n }\n isBaselineAligned() {\n return this.mBaselineAligned;\n }\n setBaselineAligned(baselineAligned) {\n this.mBaselineAligned = baselineAligned;\n }\n isMeasureWithLargestChildEnabled() {\n return this.mUseLargestChild;\n }\n setMeasureWithLargestChildEnabled(enabled) {\n this.mUseLargestChild = enabled;\n }\n getBaseline() {\n if (this.mBaselineAlignedChildIndex < 0) {\n return super.getBaseline();\n }\n if (this.getChildCount() <= this.mBaselineAlignedChildIndex) {\n throw new Error(\"mBaselineAlignedChildIndex of LinearLayout \"\n + \"set to an index that is out of bounds.\");\n }\n const child = this.getChildAt(this.mBaselineAlignedChildIndex);\n const childBaseline = child.getBaseline();\n if (childBaseline == -1) {\n if (this.mBaselineAlignedChildIndex == 0) {\n return -1;\n }\n throw new Error(\"mBaselineAlignedChildIndex of LinearLayout \"\n + \"points to a View that doesn't know how to get its baseline.\");\n }\n let childTop = this.mBaselineChildTop;\n if (this.mOrientation == LinearLayout.VERTICAL) {\n const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (majorGravity != Gravity.TOP) {\n switch (majorGravity) {\n case Gravity.BOTTOM:\n childTop = this.mBottom - this.mTop - this.mPaddingBottom - this.mTotalLength;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop += ((this.mBottom - this.mTop - this.mPaddingTop - this.mPaddingBottom) -\n this.mTotalLength) / 2;\n break;\n }\n }\n }\n let lp = child.getLayoutParams();\n return childTop + lp.topMargin + childBaseline;\n }\n getBaselineAlignedChildIndex() {\n return this.mBaselineAlignedChildIndex;\n }\n setBaselineAlignedChildIndex(i) {\n if ((i < 0) || (i >= this.getChildCount())) {\n throw new Error(\"base aligned child index out \"\n + \"of range (0, \" + this.getChildCount() + \")\");\n }\n this.mBaselineAlignedChildIndex = i;\n }\n getVirtualChildAt(index) {\n return this.getChildAt(index);\n }\n getVirtualChildCount() {\n return this.getChildCount();\n }\n getWeightSum() {\n return this.mWeightSum;\n }\n setWeightSum(weightSum) {\n this.mWeightSum = Math.max(0, weightSum);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.measureVertical(widthMeasureSpec, heightMeasureSpec);\n }\n else {\n this.measureHorizontal(widthMeasureSpec, heightMeasureSpec);\n }\n }\n hasDividerBeforeChildAt(childIndex) {\n if (childIndex == 0) {\n return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_BEGINNING) != 0;\n }\n else if (childIndex == this.getChildCount()) {\n return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_END) != 0;\n }\n else if ((this.mShowDividers & LinearLayout.SHOW_DIVIDER_MIDDLE) != 0) {\n let hasVisibleViewBefore = false;\n for (let i = childIndex - 1; i >= 0; i--) {\n if (this.getChildAt(i).getVisibility() != LinearLayout.GONE) {\n hasVisibleViewBefore = true;\n break;\n }\n }\n return hasVisibleViewBefore;\n }\n return false;\n }\n measureVertical(widthMeasureSpec, heightMeasureSpec) {\n this.mTotalLength = 0;\n let maxWidth = 0;\n let childState = 0;\n let alternativeMaxWidth = 0;\n let weightedMaxWidth = 0;\n let allFillParent = true;\n let totalWeight = 0;\n const count = this.getVirtualChildCount();\n const widthMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let matchWidth = false;\n const baselineChildIndex = this.mBaselineAlignedChildIndex;\n const useLargestChild = this.mUseLargestChild;\n let largestChildHeight = Number.MIN_SAFE_INTEGER;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n this.mTotalLength += this.mDividerHeight;\n }\n let lp = child.getLayoutParams();\n totalWeight += lp.weight;\n if (heightMode == MeasureSpec.EXACTLY && lp.height == 0 && lp.weight > 0) {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + lp.topMargin + lp.bottomMargin);\n }\n else {\n let oldHeight = Number.MIN_SAFE_INTEGER;\n if (lp.height == 0 && lp.weight > 0) {\n oldHeight = 0;\n lp.height = LinearLayout.LayoutParams.WRAP_CONTENT;\n }\n this.measureChildBeforeLayout(child, i, widthMeasureSpec, 0, heightMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0);\n if (oldHeight != Number.MIN_SAFE_INTEGER) {\n lp.height = oldHeight;\n }\n const childHeight = child.getMeasuredHeight();\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + childHeight + lp.topMargin +\n lp.bottomMargin + this.getNextLocationOffset(child));\n if (useLargestChild) {\n largestChildHeight = Math.max(childHeight, largestChildHeight);\n }\n }\n if ((baselineChildIndex >= 0) && (baselineChildIndex == i + 1)) {\n this.mBaselineChildTop = this.mTotalLength;\n }\n if (i < baselineChildIndex && lp.weight > 0) {\n throw new Error(\"A child of LinearLayout with index \"\n + \"less than mBaselineAlignedChildIndex has weight > 0, which \"\n + \"won't work. Either remove the weight, or don't set \"\n + \"mBaselineAlignedChildIndex.\");\n }\n let matchWidthLocally = false;\n if (widthMode != MeasureSpec.EXACTLY && lp.width == LinearLayout.LayoutParams.MATCH_PARENT) {\n matchWidth = true;\n matchWidthLocally = true;\n }\n const margin = lp.leftMargin + lp.rightMargin;\n const measuredWidth = child.getMeasuredWidth() + margin;\n maxWidth = Math.max(maxWidth, measuredWidth);\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState());\n allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n if (lp.weight > 0) {\n weightedMaxWidth = Math.max(weightedMaxWidth, matchWidthLocally ? margin : measuredWidth);\n }\n else {\n alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth);\n }\n i += this.getChildrenSkipCount(child, i);\n }\n if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) {\n this.mTotalLength += this.mDividerHeight;\n }\n if (useLargestChild &&\n (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED)) {\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n const lp = child.getLayoutParams();\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + largestChildHeight +\n lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child));\n }\n }\n this.mTotalLength += this.mPaddingTop + this.mPaddingBottom;\n let heightSize = this.mTotalLength;\n heightSize = Math.max(heightSize, this.getSuggestedMinimumHeight());\n let heightSizeAndState = LinearLayout.resolveSizeAndState(heightSize, heightMeasureSpec, 0);\n heightSize = heightSizeAndState & View.MEASURED_SIZE_MASK;\n let delta = heightSize - this.mTotalLength;\n if (delta != 0 && totalWeight > 0) {\n let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight;\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() == View.GONE) {\n continue;\n }\n let lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n let share = (childExtra * delta / weightSum);\n weightSum -= childExtra;\n delta -= share;\n const childWidthMeasureSpec = LinearLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight +\n lp.leftMargin + lp.rightMargin, lp.width);\n if ((lp.height != 0) || (heightMode != MeasureSpec.EXACTLY)) {\n let childHeight = child.getMeasuredHeight() + share;\n if (childHeight < 0) {\n childHeight = 0;\n }\n child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY));\n }\n else {\n child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY));\n }\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()\n & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n }\n const margin = lp.leftMargin + lp.rightMargin;\n const measuredWidth = child.getMeasuredWidth() + margin;\n maxWidth = Math.max(maxWidth, measuredWidth);\n let matchWidthLocally = widthMode != MeasureSpec.EXACTLY &&\n lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth);\n allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT;\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredHeight() +\n lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child));\n }\n this.mTotalLength += this.mPaddingTop + this.mPaddingBottom;\n }\n else {\n alternativeMaxWidth = Math.max(alternativeMaxWidth, weightedMaxWidth);\n if (useLargestChild && heightMode != MeasureSpec.EXACTLY) {\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n child.measure(MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(largestChildHeight, MeasureSpec.EXACTLY));\n }\n }\n }\n }\n if (!allFillParent && widthMode != MeasureSpec.EXACTLY) {\n maxWidth = alternativeMaxWidth;\n }\n maxWidth += this.mPaddingLeft + this.mPaddingRight;\n maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth());\n this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), heightSizeAndState);\n if (matchWidth) {\n this.forceUniformWidth(count, heightMeasureSpec);\n }\n }\n forceUniformWidth(count, heightMeasureSpec) {\n let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(), MeasureSpec.EXACTLY);\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() != View.GONE) {\n let lp = child.getLayoutParams();\n if (lp.width == LinearLayout.LayoutParams.MATCH_PARENT) {\n let oldHeight = lp.height;\n lp.height = child.getMeasuredHeight();\n this.measureChildWithMargins(child, uniformMeasureSpec, 0, heightMeasureSpec, 0);\n lp.height = oldHeight;\n }\n }\n }\n }\n measureHorizontal(widthMeasureSpec, heightMeasureSpec) {\n this.mTotalLength = 0;\n let maxHeight = 0;\n let childState = 0;\n let alternativeMaxHeight = 0;\n let weightedMaxHeight = 0;\n let allFillParent = true;\n let totalWeight = 0;\n const count = this.getVirtualChildCount();\n const widthMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let matchHeight = false;\n if (this.mMaxAscent == null || this.mMaxDescent == null) {\n this.mMaxAscent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT);\n this.mMaxDescent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT);\n }\n let maxAscent = this.mMaxAscent;\n let maxDescent = this.mMaxDescent;\n maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;\n maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1;\n const baselineAligned = this.mBaselineAligned;\n const useLargestChild = this.mUseLargestChild;\n const isExactly = widthMode == MeasureSpec.EXACTLY;\n let largestChildWidth = Number.MAX_SAFE_INTEGER;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n this.mTotalLength += this.mDividerWidth;\n }\n const lp = child.getLayoutParams();\n totalWeight += lp.weight;\n if (widthMode == MeasureSpec.EXACTLY && lp.width == 0 && lp.weight > 0) {\n if (isExactly) {\n this.mTotalLength += lp.leftMargin + lp.rightMargin;\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength +\n lp.leftMargin + lp.rightMargin);\n }\n if (baselineAligned) {\n const freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n child.measure(freeSpec, freeSpec);\n }\n }\n else {\n let oldWidth = Number.MIN_SAFE_INTEGER;\n if (lp.width == 0 && lp.weight > 0) {\n oldWidth = 0;\n lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;\n }\n this.measureChildBeforeLayout(child, i, widthMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0, heightMeasureSpec, 0);\n if (oldWidth != Number.MIN_SAFE_INTEGER) {\n lp.width = oldWidth;\n }\n const childWidth = child.getMeasuredWidth();\n if (isExactly) {\n this.mTotalLength += childWidth + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + childWidth + lp.leftMargin +\n lp.rightMargin + this.getNextLocationOffset(child));\n }\n if (useLargestChild) {\n largestChildWidth = Math.max(childWidth, largestChildWidth);\n }\n }\n let matchHeightLocally = false;\n if (heightMode != MeasureSpec.EXACTLY && lp.height == LinearLayout.LayoutParams.MATCH_PARENT) {\n matchHeight = true;\n matchHeightLocally = true;\n }\n const margin = lp.topMargin + lp.bottomMargin;\n const childHeight = child.getMeasuredHeight() + margin;\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState());\n if (baselineAligned) {\n const childBaseline = child.getBaseline();\n if (childBaseline != -1) {\n const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity)\n & Gravity.VERTICAL_GRAVITY_MASK;\n const index = ((gravity >> Gravity.AXIS_Y_SHIFT)\n & ~Gravity.AXIS_SPECIFIED) >> 1;\n maxAscent[index] = Math.max(maxAscent[index], childBaseline);\n maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline);\n }\n }\n maxHeight = Math.max(maxHeight, childHeight);\n allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n if (lp.weight > 0) {\n weightedMaxHeight = Math.max(weightedMaxHeight, matchHeightLocally ? margin : childHeight);\n }\n else {\n alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight);\n }\n i += this.getChildrenSkipCount(child, i);\n }\n if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) {\n this.mTotalLength += this.mDividerWidth;\n }\n if (maxAscent[LinearLayout.INDEX_TOP] != -1 ||\n maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 ||\n maxAscent[LinearLayout.INDEX_BOTTOM] != -1 ||\n maxAscent[LinearLayout.INDEX_FILL] != -1) {\n const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM])));\n const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM])));\n maxHeight = Math.max(maxHeight, ascent + descent);\n }\n if (useLargestChild &&\n (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED)) {\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n this.mTotalLength += this.measureNullChild(i);\n continue;\n }\n if (child.getVisibility() == View.GONE) {\n i += this.getChildrenSkipCount(child, i);\n continue;\n }\n const lp = child.getLayoutParams();\n if (isExactly) {\n this.mTotalLength += largestChildWidth + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + largestChildWidth +\n lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child));\n }\n }\n }\n this.mTotalLength += this.mPaddingLeft + this.mPaddingRight;\n let widthSize = this.mTotalLength;\n widthSize = Math.max(widthSize, this.getSuggestedMinimumWidth());\n let widthSizeAndState = LinearLayout.resolveSizeAndState(widthSize, widthMeasureSpec, 0);\n widthSize = widthSizeAndState & View.MEASURED_SIZE_MASK;\n let delta = widthSize - this.mTotalLength;\n if (delta != 0 && totalWeight > 0) {\n let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight;\n maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;\n maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1;\n maxHeight = -1;\n this.mTotalLength = 0;\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n let share = (childExtra * delta / weightSum);\n weightSum -= childExtra;\n delta -= share;\n const childHeightMeasureSpec = LinearLayout.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin, lp.height);\n if ((lp.width != 0) || (widthMode != MeasureSpec.EXACTLY)) {\n let childWidth = child.getMeasuredWidth() + share;\n if (childWidth < 0) {\n childWidth = 0;\n }\n child.measure(MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY), childHeightMeasureSpec);\n }\n else {\n child.measure(MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY), childHeightMeasureSpec);\n }\n childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() & View.MEASURED_STATE_MASK);\n }\n if (isExactly) {\n this.mTotalLength += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin +\n this.getNextLocationOffset(child);\n }\n else {\n const totalLength = this.mTotalLength;\n this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredWidth() +\n lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child));\n }\n let matchHeightLocally = heightMode != MeasureSpec.EXACTLY &&\n lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n const margin = lp.topMargin + lp.bottomMargin;\n let childHeight = child.getMeasuredHeight() + margin;\n maxHeight = Math.max(maxHeight, childHeight);\n alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight);\n allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT;\n if (baselineAligned) {\n const childBaseline = child.getBaseline();\n if (childBaseline != -1) {\n const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity)\n & Gravity.VERTICAL_GRAVITY_MASK;\n const index = ((gravity >> Gravity.AXIS_Y_SHIFT)\n & ~Gravity.AXIS_SPECIFIED) >> 1;\n maxAscent[index] = Math.max(maxAscent[index], childBaseline);\n maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline);\n }\n }\n }\n this.mTotalLength += this.mPaddingLeft + this.mPaddingRight;\n if (maxAscent[LinearLayout.INDEX_TOP] != -1 ||\n maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 ||\n maxAscent[LinearLayout.INDEX_BOTTOM] != -1 ||\n maxAscent[LinearLayout.INDEX_FILL] != -1) {\n const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM])));\n const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM])));\n maxHeight = Math.max(maxHeight, ascent + descent);\n }\n }\n else {\n alternativeMaxHeight = Math.max(alternativeMaxHeight, weightedMaxHeight);\n if (useLargestChild && widthMode != MeasureSpec.EXACTLY) {\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null || child.getVisibility() == View.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n let childExtra = lp.weight;\n if (childExtra > 0) {\n child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), MeasureSpec.EXACTLY));\n }\n }\n }\n }\n if (!allFillParent && heightMode != MeasureSpec.EXACTLY) {\n maxHeight = alternativeMaxHeight;\n }\n maxHeight += this.mPaddingTop + this.mPaddingBottom;\n maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight());\n this.setMeasuredDimension(widthSizeAndState | (childState & View.MEASURED_STATE_MASK), LinearLayout.resolveSizeAndState(maxHeight, heightMeasureSpec, (childState << View.MEASURED_HEIGHT_STATE_SHIFT)));\n if (matchHeight) {\n this.forceUniformHeight(count, widthMeasureSpec);\n }\n }\n forceUniformHeight(count, widthMeasureSpec) {\n let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredHeight(), MeasureSpec.EXACTLY);\n for (let i = 0; i < count; ++i) {\n const child = this.getVirtualChildAt(i);\n if (child.getVisibility() != View.GONE) {\n let lp = child.getLayoutParams();\n if (lp.height == LinearLayout.LayoutParams.MATCH_PARENT) {\n let oldWidth = lp.width;\n lp.width = child.getMeasuredWidth();\n this.measureChildWithMargins(child, widthMeasureSpec, 0, uniformMeasureSpec, 0);\n lp.width = oldWidth;\n }\n }\n }\n }\n getChildrenSkipCount(child, index) {\n return 0;\n }\n measureNullChild(childIndex) {\n return 0;\n }\n measureChildBeforeLayout(child, childIndex, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight) {\n this.measureChildWithMargins(child, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight);\n }\n getLocationOffset(child) {\n return 0;\n }\n getNextLocationOffset(child) {\n return 0;\n }\n onLayout(changed, l, t, r, b) {\n if (this.mOrientation == LinearLayout.VERTICAL) {\n this.layoutVertical(l, t, r, b);\n }\n else {\n this.layoutHorizontal(l, t, r, b);\n }\n }\n layoutVertical(left, top, right, bottom) {\n const paddingLeft = this.mPaddingLeft;\n let childTop;\n let childLeft;\n const width = right - left;\n let childRight = width - this.mPaddingRight;\n let childSpace = width - paddingLeft - this.mPaddingRight;\n const count = this.getVirtualChildCount();\n const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const minorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n switch (majorGravity) {\n case Gravity.BOTTOM:\n childTop = this.mPaddingTop + bottom - top - this.mTotalLength;\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = this.mPaddingTop + (bottom - top - this.mTotalLength) / 2;\n break;\n case Gravity.TOP:\n default:\n childTop = this.mPaddingTop;\n break;\n }\n for (let i = 0; i < count; i++) {\n const child = this.getVirtualChildAt(i);\n if (child == null) {\n childTop += this.measureNullChild(i);\n }\n else if (child.getVisibility() != View.GONE) {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const lp = child.getLayoutParams();\n let gravity = lp.gravity;\n if (gravity < 0) {\n gravity = minorGravity;\n }\n const absoluteGravity = gravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n childLeft = paddingLeft + ((childSpace - childWidth) / 2)\n + lp.leftMargin - lp.rightMargin;\n break;\n case Gravity.RIGHT:\n childLeft = childRight - childWidth - lp.rightMargin;\n break;\n case Gravity.LEFT:\n default:\n childLeft = paddingLeft + lp.leftMargin;\n break;\n }\n if (this.hasDividerBeforeChildAt(i)) {\n childTop += this.mDividerHeight;\n }\n childTop += lp.topMargin;\n this.setChildFrame(child, childLeft, childTop + this.getLocationOffset(child), childWidth, childHeight);\n childTop += childHeight + lp.bottomMargin + this.getNextLocationOffset(child);\n i += this.getChildrenSkipCount(child, i);\n }\n }\n }\n layoutHorizontal(left, top, right, bottom) {\n const isLayoutRtl = this.isLayoutRtl();\n const paddingTop = this.mPaddingTop;\n let childTop;\n let childLeft;\n const height = bottom - top;\n let childBottom = height - this.mPaddingBottom;\n let childSpace = height - paddingTop - this.mPaddingBottom;\n const count = this.getVirtualChildCount();\n const majorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const minorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const baselineAligned = this.mBaselineAligned;\n const maxAscent = this.mMaxAscent;\n const maxDescent = this.mMaxDescent;\n let absoluteGravity = majorGravity;\n switch (absoluteGravity) {\n case Gravity.RIGHT:\n childLeft = this.mPaddingLeft + right - left - this.mTotalLength;\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = this.mPaddingLeft + (right - left - this.mTotalLength) / 2;\n break;\n case Gravity.LEFT:\n default:\n childLeft = this.mPaddingLeft;\n break;\n }\n let start = 0;\n let dir = 1;\n if (isLayoutRtl) {\n start = count - 1;\n dir = -1;\n }\n for (let i = 0; i < count; i++) {\n let childIndex = start + dir * i;\n const child = this.getVirtualChildAt(childIndex);\n if (child == null) {\n childLeft += this.measureNullChild(childIndex);\n }\n else if (child.getVisibility() != View.GONE) {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n let childBaseline = -1;\n const lp = child.getLayoutParams();\n if (baselineAligned && lp.height != LinearLayout.LayoutParams.MATCH_PARENT) {\n childBaseline = child.getBaseline();\n }\n let gravity = lp.gravity;\n if (gravity < 0) {\n gravity = minorGravity;\n }\n switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {\n case Gravity.TOP:\n childTop = paddingTop + lp.topMargin;\n if (childBaseline != -1) {\n childTop += maxAscent[LinearLayout.INDEX_TOP] - childBaseline;\n }\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = paddingTop + ((childSpace - childHeight) / 2)\n + lp.topMargin - lp.bottomMargin;\n break;\n case Gravity.BOTTOM:\n childTop = childBottom - childHeight - lp.bottomMargin;\n if (childBaseline != -1) {\n let descent = child.getMeasuredHeight() - childBaseline;\n childTop -= (maxDescent[LinearLayout.INDEX_BOTTOM] - descent);\n }\n break;\n default:\n childTop = paddingTop;\n break;\n }\n if (this.hasDividerBeforeChildAt(childIndex)) {\n childLeft += this.mDividerWidth;\n }\n childLeft += lp.leftMargin;\n this.setChildFrame(child, childLeft + this.getLocationOffset(child), childTop, childWidth, childHeight);\n childLeft += childWidth + lp.rightMargin +\n this.getNextLocationOffset(child);\n i += this.getChildrenSkipCount(child, childIndex);\n }\n }\n }\n setChildFrame(child, left, top, width, height) {\n child.layout(left, top, left + width, top + height);\n }\n setOrientation(orientation) {\n if (typeof orientation === 'string') {\n if ('VERTICAL' === (orientation + '').toUpperCase())\n orientation = LinearLayout.VERTICAL;\n else if ('HORIZONTAL' === (orientation + '').toUpperCase())\n orientation = LinearLayout.HORIZONTAL;\n }\n if (this.mOrientation != orientation) {\n this.mOrientation = orientation;\n this.requestLayout();\n }\n }\n getOrientation() {\n return this.mOrientation;\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.LEFT;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n setHorizontalGravity(horizontalGravity) {\n const gravity = horizontalGravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.HORIZONTAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n setVerticalGravity(verticalGravity) {\n const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n generateLayoutParamsFromAttr(attrs) {\n return new LinearLayout.LayoutParams(this.getContext(), attrs);\n }\n generateDefaultLayoutParams() {\n let LayoutParams = LinearLayout.LayoutParams;\n if (this.mOrientation == LinearLayout.HORIZONTAL) {\n return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);\n }\n else if (this.mOrientation == LinearLayout.VERTICAL) {\n return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);\n }\n return super.generateDefaultLayoutParams();\n }\n generateLayoutParams(p) {\n return new LinearLayout.LayoutParams(p);\n }\n checkLayoutParams(p) {\n return p instanceof LinearLayout.LayoutParams;\n }\n }\n LinearLayout.HORIZONTAL = 0;\n LinearLayout.VERTICAL = 1;\n LinearLayout.SHOW_DIVIDER_NONE = 0;\n LinearLayout.SHOW_DIVIDER_BEGINNING = 1;\n LinearLayout.SHOW_DIVIDER_MIDDLE = 2;\n LinearLayout.SHOW_DIVIDER_END = 4;\n LinearLayout.VERTICAL_GRAVITY_COUNT = 4;\n LinearLayout.INDEX_CENTER_VERTICAL = 0;\n LinearLayout.INDEX_TOP = 1;\n LinearLayout.INDEX_BOTTOM = 2;\n LinearLayout.INDEX_FILL = 3;\n widget.LinearLayout = LinearLayout;\n (function (LinearLayout) {\n class LayoutParams extends android.view.ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number')\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof LinearLayout.LayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.MarginLayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.weight = 0;\n this.gravity = -1;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const c = args[0];\n const attrs = args[1];\n const a = c.obtainStyledAttributes(attrs);\n this.weight = a.getFloat('layout_weight', 0);\n this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), -1);\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') {\n this.weight = args[2];\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n this.weight = 0;\n }\n else if (args[0] instanceof LinearLayout.LayoutParams) {\n const source = args[0];\n this.weight = source.weight;\n this.gravity = source.gravity;\n }\n else if (args[0] instanceof ViewGroup.MarginLayoutParams) {\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_gravity', {\n setter(param, value, attrBinder) {\n param.gravity = attrBinder.parseGravity(value, param.gravity);\n }, getter(param) {\n return param.gravity;\n }\n }).set('layout_weight', {\n setter(param, value, attrBinder) {\n param.weight = attrBinder.parseFloat(value, param.weight);\n }, getter(param) {\n return param.weight;\n }\n });\n }\n }\n LinearLayout.LayoutParams = LayoutParams;\n })(LinearLayout = widget.LinearLayout || (widget.LinearLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class MathUtils {\n constructor() {\n }\n static abs(v) {\n return v > 0 ? v : -v;\n }\n static constrain(amount, low, high) {\n return amount < low ? low : (amount > high ? high : amount);\n }\n static log(a) {\n return Math.log(a);\n }\n static exp(a) {\n return Math.exp(a);\n }\n static pow(a, b) {\n return Math.pow(a, b);\n }\n static max(a, b, c) {\n if (c == null)\n return a > b ? a : b;\n return a > b ? (a > c ? a : c) : (b > c ? b : c);\n }\n static min(a, b, c) {\n if (c == null)\n return a < b ? a : b;\n return a < b ? (a < c ? a : c) : (b < c ? b : c);\n }\n static dist(x1, y1, x2, y2) {\n const x = (x2 - x1);\n const y = (y2 - y1);\n return Math.sqrt(x * x + y * y);\n }\n static dist3(x1, y1, z1, x2, y2, z2) {\n const x = (x2 - x1);\n const y = (y2 - y1);\n const z = (z2 - z1);\n return Math.sqrt(x * x + y * y + z * z);\n }\n static mag(a, b, c) {\n if (c == null)\n return Math.sqrt(a * a + b * b);\n return Math.sqrt(a * a + b * b + c * c);\n }\n static sq(v) {\n return v * v;\n }\n static radians(degrees) {\n return degrees * MathUtils.DEG_TO_RAD;\n }\n static degrees(radians) {\n return radians * MathUtils.RAD_TO_DEG;\n }\n static acos(value) {\n return Math.acos(value);\n }\n static asin(value) {\n return Math.asin(value);\n }\n static atan(value) {\n return Math.atan(value);\n }\n static atan2(a, b) {\n return Math.atan2(a, b);\n }\n static tan(angle) {\n return Math.tan(angle);\n }\n static lerp(start, stop, amount) {\n return start + (stop - start) * amount;\n }\n static norm(start, stop, value) {\n return (value - start) / (stop - start);\n }\n static map(minStart, minStop, maxStart, maxStop, value) {\n return maxStart + (maxStart - maxStop) * ((value - minStart) / (minStop - minStart));\n }\n static random(...args) {\n if (args.length == 1)\n return Math.random() * args[0];\n let [howsmall, howbig] = args;\n if (howsmall >= howbig)\n return howsmall;\n return Math.random() * (howbig - howsmall) + howsmall;\n }\n }\n MathUtils.DEG_TO_RAD = 3.1415926 / 180.0;\n MathUtils.RAD_TO_DEG = 180.0 / 3.1415926;\n util.MathUtils = MathUtils;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class SparseBooleanArray extends util.SparseArray {\n }\n util.SparseBooleanArray = SparseBooleanArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class SoundEffectConstants {\n static getContantForFocusDirection(direction) {\n switch (direction) {\n case view.View.FOCUS_RIGHT:\n return SoundEffectConstants.NAVIGATION_RIGHT;\n case view.View.FOCUS_FORWARD:\n case view.View.FOCUS_DOWN:\n return SoundEffectConstants.NAVIGATION_DOWN;\n case view.View.FOCUS_LEFT:\n return SoundEffectConstants.NAVIGATION_LEFT;\n case view.View.FOCUS_BACKWARD:\n case view.View.FOCUS_UP:\n return SoundEffectConstants.NAVIGATION_UP;\n }\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n }\n SoundEffectConstants.CLICK = 0;\n SoundEffectConstants.NAVIGATION_LEFT = 1;\n SoundEffectConstants.NAVIGATION_UP = 2;\n SoundEffectConstants.NAVIGATION_RIGHT = 3;\n SoundEffectConstants.NAVIGATION_DOWN = 4;\n view.SoundEffectConstants = SoundEffectConstants;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var os;\n (function (os) {\n class Trace {\n static nativeGetEnabledTags() {\n return Trace.TRACE_TAG_ALWAYS;\n }\n static nativeTraceCounter(tag, name, value) {\n }\n static nativeTraceBegin(tag, name) { }\n static nativeTraceEnd(tag) { }\n static nativeAsyncTraceBegin(tag, name, cookie) { }\n static nativeAsyncTraceEnd(tag, name, cookie) { }\n static nativeSetAppTracingAllowed(allowed) { }\n static nativeSetTracingEnabled(allowed) { }\n static cacheEnabledTags() {\n let tags = Trace.nativeGetEnabledTags();\n Trace.sEnabledTags = tags;\n return tags;\n }\n static isTagEnabled(traceTag) {\n let tags = Trace.sEnabledTags;\n if (tags == Trace.TRACE_TAG_NOT_READY) {\n tags = Trace.cacheEnabledTags();\n }\n return (tags & traceTag) != 0;\n }\n static traceCounter(traceTag, counterName, counterValue) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceCounter(traceTag, counterName, counterValue);\n }\n }\n static setAppTracingAllowed(allowed) {\n Trace.nativeSetAppTracingAllowed(allowed);\n Trace.cacheEnabledTags();\n }\n static setTracingEnabled(enabled) {\n Trace.nativeSetTracingEnabled(enabled);\n Trace.cacheEnabledTags();\n }\n static traceBegin(traceTag, methodName) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceBegin(traceTag, methodName);\n }\n }\n static traceEnd(traceTag) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeTraceEnd(traceTag);\n }\n }\n static asyncTraceBegin(traceTag, methodName, cookie) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeAsyncTraceBegin(traceTag, methodName, cookie);\n }\n }\n static asyncTraceEnd(traceTag, methodName, cookie) {\n if (Trace.isTagEnabled(traceTag)) {\n Trace.nativeAsyncTraceEnd(traceTag, methodName, cookie);\n }\n }\n static beginSection(sectionName) {\n if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {\n if (sectionName.length > Trace.MAX_SECTION_NAME_LEN) {\n throw Error(`new IllegalArgumentException(\"sectionName is too long\")`);\n }\n Trace.nativeTraceBegin(Trace.TRACE_TAG_APP, sectionName);\n }\n }\n static endSection() {\n if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {\n Trace.nativeTraceEnd(Trace.TRACE_TAG_APP);\n }\n }\n }\n Trace.TAG = \"Trace\";\n Trace.TRACE_TAG_NEVER = 0;\n Trace.TRACE_TAG_ALWAYS = 1 << 0;\n Trace.TRACE_TAG_GRAPHICS = 1 << 1;\n Trace.TRACE_TAG_INPUT = 1 << 2;\n Trace.TRACE_TAG_VIEW = 1 << 3;\n Trace.TRACE_TAG_WEBVIEW = 1 << 4;\n Trace.TRACE_TAG_WINDOW_MANAGER = 1 << 5;\n Trace.TRACE_TAG_ACTIVITY_MANAGER = 1 << 6;\n Trace.TRACE_TAG_SYNC_MANAGER = 1 << 7;\n Trace.TRACE_TAG_AUDIO = 1 << 8;\n Trace.TRACE_TAG_VIDEO = 1 << 9;\n Trace.TRACE_TAG_CAMERA = 1 << 10;\n Trace.TRACE_TAG_HAL = 1 << 11;\n Trace.TRACE_TAG_APP = 1 << 12;\n Trace.TRACE_TAG_RESOURCES = 1 << 13;\n Trace.TRACE_TAG_DALVIK = 1 << 14;\n Trace.TRACE_TAG_RS = 1 << 15;\n Trace.TRACE_TAG_NOT_READY = 1 << 63;\n Trace.MAX_SECTION_NAME_LEN = 127;\n Trace.sEnabledTags = Trace.TRACE_TAG_NOT_READY;\n os.Trace = Trace;\n })(os = android.os || (android.os = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var KeyEvent = android.view.KeyEvent;\n class InputType {\n }\n InputType.TYPE_MASK_CLASS = 0x0000000f;\n InputType.TYPE_MASK_VARIATION = 0x00000ff0;\n InputType.TYPE_MASK_FLAGS = 0x00fff000;\n InputType.TYPE_NULL = 0x00000000;\n InputType.TYPE_CLASS_TEXT = 0x00000001;\n InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS = 0x00001000;\n InputType.TYPE_TEXT_FLAG_CAP_WORDS = 0x00002000;\n InputType.TYPE_TEXT_FLAG_CAP_SENTENCES = 0x00004000;\n InputType.TYPE_TEXT_FLAG_AUTO_CORRECT = 0x00008000;\n InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE = 0x00010000;\n InputType.TYPE_TEXT_FLAG_MULTI_LINE = 0x00020000;\n InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000;\n InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS = 0x00080000;\n InputType.TYPE_TEXT_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_TEXT_VARIATION_URI = 0x00000010;\n InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020;\n InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 0x00000030;\n InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE = 0x00000040;\n InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE = 0x00000050;\n InputType.TYPE_TEXT_VARIATION_PERSON_NAME = 0x00000060;\n InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 0x00000070;\n InputType.TYPE_TEXT_VARIATION_PASSWORD = 0x00000080;\n InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090;\n InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x000000a0;\n InputType.TYPE_TEXT_VARIATION_FILTER = 0x000000b0;\n InputType.TYPE_TEXT_VARIATION_PHONETIC = 0x000000c0;\n InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 0x000000d0;\n InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD = 0x000000e0;\n InputType.TYPE_CLASS_NUMBER = 0x00000002;\n InputType.TYPE_NUMBER_FLAG_SIGNED = 0x00001000;\n InputType.TYPE_NUMBER_FLAG_DECIMAL = 0x00002000;\n InputType.TYPE_NUMBER_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_NUMBER_VARIATION_PASSWORD = 0x00000010;\n InputType.TYPE_CLASS_PHONE = 0x00000003;\n InputType.TYPE_CLASS_DATETIME = 0x00000004;\n InputType.TYPE_DATETIME_VARIATION_NORMAL = 0x00000000;\n InputType.TYPE_DATETIME_VARIATION_DATE = 0x00000010;\n InputType.TYPE_DATETIME_VARIATION_TIME = 0x00000020;\n text.InputType = InputType;\n (function (InputType) {\n class LimitCode {\n }\n LimitCode.TYPE_CLASS_NUMBER = [\n KeyEvent.KEYCODE_Digit0,\n KeyEvent.KEYCODE_Digit1,\n KeyEvent.KEYCODE_Digit2,\n KeyEvent.KEYCODE_Digit3,\n KeyEvent.KEYCODE_Digit4,\n KeyEvent.KEYCODE_Digit5,\n KeyEvent.KEYCODE_Digit6,\n KeyEvent.KEYCODE_Digit7,\n KeyEvent.KEYCODE_Digit8,\n KeyEvent.KEYCODE_Digit9,\n ];\n LimitCode.TYPE_CLASS_PHONE = [\n KeyEvent.KEYCODE_Comma,\n KeyEvent.KEYCODE_Sharp,\n KeyEvent.KEYCODE_Semicolon,\n KeyEvent.KEYCODE_Asterisk,\n KeyEvent.KEYCODE_Left_Parenthesis,\n KeyEvent.KEYCODE_Right_Parenthesis,\n KeyEvent.KEYCODE_Slash,\n KeyEvent.KEYCODE_KeyN,\n KeyEvent.KEYCODE_Period,\n KeyEvent.KEYCODE_SPACE,\n KeyEvent.KEYCODE_Add,\n KeyEvent.KEYCODE_Minus,\n KeyEvent.KEYCODE_Period,\n KeyEvent.KEYCODE_Digit0,\n KeyEvent.KEYCODE_Digit1,\n KeyEvent.KEYCODE_Digit2,\n KeyEvent.KEYCODE_Digit3,\n KeyEvent.KEYCODE_Digit4,\n KeyEvent.KEYCODE_Digit5,\n KeyEvent.KEYCODE_Digit6,\n KeyEvent.KEYCODE_Digit7,\n KeyEvent.KEYCODE_Digit8,\n KeyEvent.KEYCODE_Digit9,\n ];\n InputType.LimitCode = LimitCode;\n })(InputType = text.InputType || (text.InputType = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class LongSparseArray extends util.SparseArray {\n }\n util.LongSparseArray = LongSparseArray;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n class HapticFeedbackConstants {\n }\n HapticFeedbackConstants.LONG_PRESS = 0;\n HapticFeedbackConstants.VIRTUAL_KEY = 1;\n HapticFeedbackConstants.KEYBOARD_TAP = 3;\n HapticFeedbackConstants.SAFE_MODE_DISABLED = 10000;\n HapticFeedbackConstants.SAFE_MODE_ENABLED = 10001;\n HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING = 0x0001;\n HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING = 0x0002;\n view.HapticFeedbackConstants = HapticFeedbackConstants;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n class DataSetObserver {\n onChanged() {\n }\n onInvalidated() {\n }\n }\n database.DataSetObserver = DataSetObserver;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var SystemClock = android.os.SystemClock;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Long = java.lang.Long;\n class AdapterView extends ViewGroup {\n constructor() {\n super(...arguments);\n this.mFirstPosition = 0;\n this.mSpecificTop = 0;\n this.mSyncPosition = 0;\n this.mSyncRowId = AdapterView.INVALID_ROW_ID;\n this.mSyncHeight = 0;\n this.mNeedSync = false;\n this.mSyncMode = 0;\n this.mLayoutHeight = 0;\n this.mInLayout = false;\n this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mItemCount = 0;\n this.mOldItemCount = 0;\n this.mOldSelectedPosition = AdapterView.INVALID_POSITION;\n this.mOldSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mBlockLayoutRequests = false;\n }\n setOnItemClickListener(listener) {\n this.mOnItemClickListener = listener;\n }\n getOnItemClickListener() {\n return this.mOnItemClickListener;\n }\n performItemClick(view, position, id) {\n if (this.mOnItemClickListener != null) {\n this.playSoundEffect(SoundEffectConstants.CLICK);\n this.mOnItemClickListener.onItemClick(this, view, position, id);\n return true;\n }\n return false;\n }\n setOnItemLongClickListener(listener) {\n if (!this.isLongClickable()) {\n this.setLongClickable(true);\n }\n this.mOnItemLongClickListener = listener;\n }\n getOnItemLongClickListener() {\n return this.mOnItemLongClickListener;\n }\n setOnItemSelectedListener(listener) {\n this.mOnItemSelectedListener = listener;\n }\n getOnItemSelectedListener() {\n return this.mOnItemSelectedListener;\n }\n addView(...args) {\n throw Error(`new UnsupportedOperationException(\"addView() is not supported in AdapterView\")`);\n }\n removeView(child) {\n throw Error(`new UnsupportedOperationException(\"removeView(View) is not supported in AdapterView\")`);\n }\n removeViewAt(index) {\n throw Error(`new UnsupportedOperationException(\"removeViewAt(int) is not supported in AdapterView\")`);\n }\n removeAllViews() {\n throw Error(`new UnsupportedOperationException(\"removeAllViews() is not supported in AdapterView\")`);\n }\n onLayout(changed, left, top, right, bottom) {\n this.mLayoutHeight = this.getHeight();\n }\n getSelectedItemPosition() {\n return this.mNextSelectedPosition;\n }\n getSelectedItemId() {\n return this.mNextSelectedRowId;\n }\n getSelectedItem() {\n let adapter = this.getAdapter();\n let selection = this.getSelectedItemPosition();\n if (adapter != null && adapter.getCount() > 0 && selection >= 0) {\n return adapter.getItem(selection);\n }\n else {\n return null;\n }\n }\n getCount() {\n return this.mItemCount;\n }\n getPositionForView(view) {\n let listItem = view;\n try {\n let v;\n while (!((v = listItem.getParent()) == (this))) {\n listItem = v;\n }\n }\n catch (e) {\n return AdapterView.INVALID_POSITION;\n }\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n if (this.getChildAt(i) == (listItem)) {\n return this.mFirstPosition + i;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n getFirstVisiblePosition() {\n return this.mFirstPosition;\n }\n getLastVisiblePosition() {\n return this.mFirstPosition + this.getChildCount() - 1;\n }\n setEmptyView(emptyView) {\n this.mEmptyView = emptyView;\n const adapter = this.getAdapter();\n const empty = ((adapter == null) || adapter.isEmpty());\n this.updateEmptyStatus(empty);\n }\n getEmptyView() {\n return this.mEmptyView;\n }\n isInFilterMode() {\n return false;\n }\n setFocusable(focusable) {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n this.mDesiredFocusableState = focusable;\n if (!focusable) {\n this.mDesiredFocusableInTouchModeState = false;\n }\n super.setFocusable(focusable && (!empty || this.isInFilterMode()));\n }\n setFocusableInTouchMode(focusable) {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n this.mDesiredFocusableInTouchModeState = focusable;\n if (focusable) {\n this.mDesiredFocusableState = true;\n }\n super.setFocusableInTouchMode(focusable && (!empty || this.isInFilterMode()));\n }\n checkFocus() {\n const adapter = this.getAdapter();\n const empty = adapter == null || adapter.getCount() == 0;\n const focusable = !empty || this.isInFilterMode();\n super.setFocusableInTouchMode(focusable && this.mDesiredFocusableInTouchModeState);\n super.setFocusable(focusable && this.mDesiredFocusableState);\n if (this.mEmptyView != null) {\n this.updateEmptyStatus((adapter == null) || adapter.isEmpty());\n }\n }\n updateEmptyStatus(empty) {\n if (this.isInFilterMode()) {\n empty = false;\n }\n if (empty) {\n if (this.mEmptyView != null) {\n this.mEmptyView.setVisibility(View.VISIBLE);\n this.setVisibility(View.GONE);\n }\n else {\n this.setVisibility(View.VISIBLE);\n }\n if (this.mDataChanged) {\n this.onLayout(false, this.mLeft, this.mTop, this.mRight, this.mBottom);\n }\n }\n else {\n if (this.mEmptyView != null)\n this.mEmptyView.setVisibility(View.GONE);\n this.setVisibility(View.VISIBLE);\n }\n }\n getItemAtPosition(position) {\n let adapter = this.getAdapter();\n return (adapter == null || position < 0) ? null : adapter.getItem(position);\n }\n getItemIdAtPosition(position) {\n let adapter = this.getAdapter();\n return (adapter == null || position < 0) ? AdapterView.INVALID_ROW_ID : adapter.getItemId(position);\n }\n setOnClickListener(l) {\n throw Error(`new RuntimeException(\"Don't call setOnClickListener for an AdapterView. \" + \"You probably want setOnItemClickListener instead\")`);\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.removeCallbacks(this.mSelectionNotifier);\n }\n selectionChanged() {\n if (this.mOnItemSelectedListener != null) {\n if (this.mInLayout || this.mBlockLayoutRequests) {\n if (this.mSelectionNotifier == null) {\n this.mSelectionNotifier = new SelectionNotifier(this);\n }\n this.post(this.mSelectionNotifier);\n }\n else {\n this.fireOnSelected();\n this.performAccessibilityActionsOnSelected();\n }\n }\n }\n fireOnSelected() {\n if (this.mOnItemSelectedListener == null) {\n return;\n }\n const selection = this.getSelectedItemPosition();\n if (selection >= 0) {\n let v = this.getSelectedView();\n this.mOnItemSelectedListener.onItemSelected(this, v, selection, this.getAdapter().getItemId(selection));\n }\n else {\n this.mOnItemSelectedListener.onNothingSelected(this);\n }\n }\n performAccessibilityActionsOnSelected() {\n }\n isScrollableForAccessibility() {\n let adapter = this.getAdapter();\n if (adapter != null) {\n const itemCount = adapter.getCount();\n return itemCount > 0 && (this.getFirstVisiblePosition() > 0 || this.getLastVisiblePosition() < itemCount - 1);\n }\n return false;\n }\n canAnimate() {\n return super.canAnimate() && this.mItemCount > 0;\n }\n handleDataChanged() {\n const count = this.mItemCount;\n let found = false;\n if (count > 0) {\n let newPos;\n if (this.mNeedSync) {\n this.mNeedSync = false;\n newPos = this.findSyncPosition();\n if (newPos >= 0) {\n let selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos == newPos) {\n this.setNextSelectedPositionInt(newPos);\n found = true;\n }\n }\n }\n if (!found) {\n newPos = this.getSelectedItemPosition();\n if (newPos >= count) {\n newPos = count - 1;\n }\n if (newPos < 0) {\n newPos = 0;\n }\n let selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos < 0) {\n selectablePos = this.lookForSelectablePosition(newPos, false);\n }\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n this.checkSelectionChanged();\n found = true;\n }\n }\n }\n if (!found) {\n this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.mNeedSync = false;\n this.checkSelectionChanged();\n }\n }\n checkSelectionChanged() {\n if ((this.mSelectedPosition != this.mOldSelectedPosition) || (this.mSelectedRowId != this.mOldSelectedRowId)) {\n this.selectionChanged();\n this.mOldSelectedPosition = this.mSelectedPosition;\n this.mOldSelectedRowId = this.mSelectedRowId;\n }\n }\n findSyncPosition() {\n let count = this.mItemCount;\n if (count == 0) {\n return AdapterView.INVALID_POSITION;\n }\n let idToMatch = this.mSyncRowId;\n let seed = this.mSyncPosition;\n if (idToMatch == AdapterView.INVALID_ROW_ID) {\n return AdapterView.INVALID_POSITION;\n }\n seed = Math.max(0, seed);\n seed = Math.min(count - 1, seed);\n let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS;\n let rowId;\n let first = seed;\n let last = seed;\n let next = false;\n let hitFirst;\n let hitLast;\n let adapter = this.getAdapter();\n if (adapter == null) {\n return AdapterView.INVALID_POSITION;\n }\n while (SystemClock.uptimeMillis() <= endTime) {\n rowId = adapter.getItemId(seed);\n if (rowId == idToMatch) {\n return seed;\n }\n hitLast = last == count - 1;\n hitFirst = first == 0;\n if (hitLast && hitFirst) {\n break;\n }\n if (hitFirst || (next && !hitLast)) {\n last++;\n seed = last;\n next = false;\n }\n else if (hitLast || (!next && !hitFirst)) {\n first--;\n seed = first;\n next = true;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n lookForSelectablePosition(position, lookDown) {\n return position;\n }\n setSelectedPositionInt(position) {\n this.mSelectedPosition = position;\n this.mSelectedRowId = this.getItemIdAtPosition(position);\n }\n setNextSelectedPositionInt(position) {\n this.mNextSelectedPosition = position;\n this.mNextSelectedRowId = this.getItemIdAtPosition(position);\n if (this.mNeedSync && this.mSyncMode == AdapterView.SYNC_SELECTED_POSITION && position >= 0) {\n this.mSyncPosition = position;\n this.mSyncRowId = this.mNextSelectedRowId;\n }\n }\n rememberSyncState() {\n if (this.getChildCount() > 0) {\n this.mNeedSync = true;\n this.mSyncHeight = this.mLayoutHeight;\n if (this.mSelectedPosition >= 0) {\n let v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n this.mSyncRowId = this.mNextSelectedRowId;\n this.mSyncPosition = this.mNextSelectedPosition;\n if (v != null) {\n this.mSpecificTop = v.getTop();\n }\n this.mSyncMode = AdapterView.SYNC_SELECTED_POSITION;\n }\n else {\n let v = this.getChildAt(0);\n let adapter = this.getAdapter();\n if (this.mFirstPosition >= 0 && this.mFirstPosition < adapter.getCount()) {\n this.mSyncRowId = adapter.getItemId(this.mFirstPosition);\n }\n else {\n this.mSyncRowId = AdapterView.NO_ID;\n }\n this.mSyncPosition = this.mFirstPosition;\n if (v != null) {\n this.mSpecificTop = v.getTop();\n }\n this.mSyncMode = AdapterView.SYNC_FIRST_POSITION;\n }\n }\n }\n }\n AdapterView.ITEM_VIEW_TYPE_IGNORE = -1;\n AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2;\n AdapterView.SYNC_SELECTED_POSITION = 0;\n AdapterView.SYNC_FIRST_POSITION = 1;\n AdapterView.SYNC_MAX_DURATION_MILLIS = 100;\n AdapterView.INVALID_POSITION = -1;\n AdapterView.INVALID_ROW_ID = Long.MIN_VALUE;\n widget.AdapterView = AdapterView;\n (function (AdapterView) {\n class AdapterDataSetObserver extends DataSetObserver {\n constructor(AdapterView_this) {\n super();\n this.AdapterView_this = AdapterView_this;\n }\n onChanged() {\n this.AdapterView_this.mDataChanged = true;\n this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount;\n this.AdapterView_this.mItemCount = this.AdapterView_this.getAdapter().getCount();\n this.AdapterView_this.rememberSyncState();\n this.AdapterView_this.checkFocus();\n this.AdapterView_this.requestLayout();\n }\n onInvalidated() {\n this.AdapterView_this.mDataChanged = true;\n this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount;\n this.AdapterView_this.mItemCount = 0;\n this.AdapterView_this.mSelectedPosition = AdapterView.INVALID_POSITION;\n this.AdapterView_this.mSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.AdapterView_this.mNextSelectedPosition = AdapterView.INVALID_POSITION;\n this.AdapterView_this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID;\n this.AdapterView_this.mNeedSync = false;\n this.AdapterView_this.checkFocus();\n this.AdapterView_this.requestLayout();\n }\n clearSavedState() {\n }\n }\n AdapterView.AdapterDataSetObserver = AdapterDataSetObserver;\n })(AdapterView = widget.AdapterView || (widget.AdapterView = {}));\n class SelectionNotifier {\n constructor(AdapterView_this) {\n this.AdapterView_this = AdapterView_this;\n }\n run() {\n if (this.AdapterView_this.mDataChanged) {\n if (this.AdapterView_this.getAdapter() != null) {\n this.AdapterView_this.post(this);\n }\n }\n else {\n this.AdapterView_this.fireOnSelected();\n this.AdapterView_this.performAccessibilityActionsOnSelected();\n }\n }\n }\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Integer = java.lang.Integer;\n var Adapter;\n (function (Adapter) {\n Adapter.IGNORE_ITEM_VIEW_TYPE = widget.AdapterView.ITEM_VIEW_TYPE_IGNORE;\n Adapter.NO_SELECTION = Integer.MIN_VALUE;\n })(Adapter = widget.Adapter || (widget.Adapter = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_8) {\n var Paint = android.graphics.Paint;\n var ParagraphStyle = android.text.style.ParagraphStyle;\n var Layout = android.text.Layout;\n var Spanned = android.text.Spanned;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextLine = android.text.TextLine;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n class BoringLayout extends Layout {\n constructor(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n super(source, paint, outerwidth, align, TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingmult, spacingadd);\n this.mBottom = 0;\n this.mDesc = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mMax = 0;\n this.mEllipsizedWidth = 0;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n let trust;\n if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) {\n this.mEllipsizedWidth = outerwidth;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n trust = true;\n }\n else {\n this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = ellipsizedWidth;\n trust = false;\n }\n this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust);\n }\n static make(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n return new BoringLayout(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize, ellipsizedWidth);\n }\n replaceOrMake(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) {\n let trust;\n if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) {\n this.replaceWith(source, paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = outerwidth;\n this.mEllipsizedStart = 0;\n this.mEllipsizedCount = 0;\n trust = true;\n }\n else {\n this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd);\n this.mEllipsizedWidth = ellipsizedWidth;\n trust = false;\n }\n this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust);\n return this;\n }\n init(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trustWidth) {\n let spacing;\n if (Object.getPrototypeOf(source) === String.prototype && align == Layout.Alignment.ALIGN_NORMAL) {\n this.mDirect = source.toString();\n }\n else {\n this.mDirect = null;\n }\n this.mPaint = paint;\n if (includepad) {\n spacing = metrics.bottom - metrics.top;\n }\n else {\n spacing = metrics.descent - metrics.ascent;\n }\n if (spacingmult != 1 || spacingadd != 0) {\n spacing = Math.floor((spacing * spacingmult + spacingadd + 0.5));\n }\n this.mBottom = spacing;\n if (includepad) {\n this.mDesc = spacing + metrics.top;\n }\n else {\n this.mDesc = spacing + metrics.ascent;\n }\n if (trustWidth) {\n this.mMax = metrics.width;\n }\n else {\n let line = TextLine.obtain();\n line.set(paint, source, 0, source.length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null);\n this.mMax = Math.floor(Math.ceil(line.metrics(null)));\n TextLine.recycle(line);\n }\n if (includepad) {\n this.mTopPadding = metrics.top - metrics.ascent;\n this.mBottomPadding = metrics.bottom - metrics.descent;\n }\n }\n static isBoring(text, paint, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics = null) {\n let temp;\n let length = text.length;\n let boring = true;\n outer: for (let i = 0; i < length; i += 500) {\n let j = i + 500;\n if (j > length)\n j = length;\n temp = text.substring(i, j);\n let n = j - i;\n for (let a = 0; a < n; a++) {\n let c = temp[a];\n if (c == '\\n' || c == '\\t') {\n boring = false;\n break outer;\n }\n }\n if (textDir != null && textDir.isRtl(temp, 0, n)) {\n boring = false;\n break outer;\n }\n }\n if (boring && Spanned.isImplements(text)) {\n let sp = text;\n let styles = sp.getSpans(0, length, ParagraphStyle.type);\n if (styles.length > 0) {\n boring = false;\n }\n }\n if (boring) {\n let fm = metrics;\n if (fm == null) {\n fm = new BoringLayout.Metrics();\n }\n let line = TextLine.obtain();\n line.set(paint, text, 0, length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null);\n fm.width = Math.floor(Math.ceil(line.metrics(fm)));\n TextLine.recycle(line);\n return fm;\n }\n else {\n return null;\n }\n }\n getHeight() {\n return this.mBottom;\n }\n getLineCount() {\n return 1;\n }\n getLineTop(line) {\n if (line == 0)\n return 0;\n else\n return this.mBottom;\n }\n getLineDescent(line) {\n return this.mDesc;\n }\n getLineStart(line) {\n if (line == 0)\n return 0;\n else\n return this.getText().length;\n }\n getParagraphDirection(line) {\n return BoringLayout.DIR_LEFT_TO_RIGHT;\n }\n getLineContainsTab(line) {\n return false;\n }\n getLineMax(line) {\n return this.mMax;\n }\n getLineDirections(line) {\n return Layout.DIRS_ALL_LEFT_TO_RIGHT;\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsisCount(line) {\n return this.mEllipsizedCount;\n }\n getEllipsisStart(line) {\n return this.mEllipsizedStart;\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n draw(c, highlight, highlightpaint, cursorOffset) {\n if (this.mDirect != null && highlight == null) {\n c.drawText(this.mDirect, 0, this.mBottom - this.mDesc, this.mPaint);\n }\n else {\n super.draw(c, highlight, highlightpaint, cursorOffset);\n }\n }\n ellipsized(start, end) {\n this.mEllipsizedStart = start;\n this.mEllipsizedCount = end - start;\n }\n }\n BoringLayout.FIRST_RIGHT_TO_LEFT = '֐'.codePointAt(0);\n BoringLayout.sTemp = new TextPaint();\n text_8.BoringLayout = BoringLayout;\n (function (BoringLayout) {\n class Metrics extends Paint.FontMetricsInt {\n constructor() {\n super(...arguments);\n this.width = 0;\n }\n toString() {\n return super.toString() + \" width=\" + this.width;\n }\n }\n BoringLayout.Metrics = Metrics;\n })(BoringLayout = text_8.BoringLayout || (text_8.BoringLayout = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var System = java.lang.System;\n class PackedIntVector {\n constructor(columns) {\n this.mColumns = 0;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = 0;\n this.mColumns = columns;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = this.mRows;\n this.mValues = null;\n this.mValueGap = androidui.util.ArrayCreator.newNumberArray(2 * columns);\n }\n getValue(row, column) {\n const columns = this.mColumns;\n if (((row | column) < 0) || (row >= this.size()) || (column >= columns)) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + column)`);\n }\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let value = this.mValues[row * columns + column];\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value += valuegap[column + columns];\n }\n return value;\n }\n setValue(row, column, value) {\n if (((row | column) < 0) || (row >= this.size()) || (column >= this.mColumns)) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + column)`);\n }\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value -= valuegap[column + this.mColumns];\n }\n this.mValues[row * this.mColumns + column] = value;\n }\n setValueInternal(row, column, value) {\n if (row >= this.mRowGapStart) {\n row += this.mRowGapLength;\n }\n let valuegap = this.mValueGap;\n if (row >= valuegap[column]) {\n value -= valuegap[column + this.mColumns];\n }\n this.mValues[row * this.mColumns + column] = value;\n }\n adjustValuesBelow(startRow, column, delta) {\n if (((startRow | column) < 0) || (startRow > this.size()) || (column >= this.width())) {\n throw Error(`new IndexOutOfBoundsException(startRow + \", \" + column)`);\n }\n if (startRow >= this.mRowGapStart) {\n startRow += this.mRowGapLength;\n }\n this.moveValueGapTo(column, startRow);\n this.mValueGap[column + this.mColumns] += delta;\n }\n insertAt(row, values) {\n if ((row < 0) || (row > this.size())) {\n throw Error(`new IndexOutOfBoundsException(\"row \" + row)`);\n }\n if ((values != null) && (values.length < this.width())) {\n throw Error(`new IndexOutOfBoundsException(\"value count \" + values.length)`);\n }\n this.moveRowGapTo(row);\n if (this.mRowGapLength == 0) {\n this.growBuffer();\n }\n this.mRowGapStart++;\n this.mRowGapLength--;\n if (values == null) {\n for (let i = this.mColumns - 1; i >= 0; i--) {\n this.setValueInternal(row, i, 0);\n }\n }\n else {\n for (let i = this.mColumns - 1; i >= 0; i--) {\n this.setValueInternal(row, i, values[i]);\n }\n }\n }\n deleteAt(row, count) {\n if (((row | count) < 0) || (row + count > this.size())) {\n throw Error(`new IndexOutOfBoundsException(row + \", \" + count)`);\n }\n this.moveRowGapTo(row + count);\n this.mRowGapStart -= count;\n this.mRowGapLength += count;\n }\n size() {\n return this.mRows - this.mRowGapLength;\n }\n width() {\n return this.mColumns;\n }\n growBuffer() {\n const columns = this.mColumns;\n let newsize = this.size() + 1;\n newsize = (newsize * columns) / columns;\n let newvalues = androidui.util.ArrayCreator.newNumberArray(newsize * columns);\n const valuegap = this.mValueGap;\n const rowgapstart = this.mRowGapStart;\n let after = this.mRows - (rowgapstart + this.mRowGapLength);\n if (this.mValues != null) {\n System.arraycopy(this.mValues, 0, newvalues, 0, columns * rowgapstart);\n System.arraycopy(this.mValues, (this.mRows - after) * columns, newvalues, (newsize - after) * columns, after * columns);\n }\n for (let i = 0; i < columns; i++) {\n if (valuegap[i] >= rowgapstart) {\n valuegap[i] += newsize - this.mRows;\n if (valuegap[i] < rowgapstart) {\n valuegap[i] = rowgapstart;\n }\n }\n }\n this.mRowGapLength += newsize - this.mRows;\n this.mRows = newsize;\n this.mValues = newvalues;\n }\n moveValueGapTo(column, where) {\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const columns = this.mColumns;\n if (where == valuegap[column]) {\n return;\n }\n else if (where > valuegap[column]) {\n for (let i = valuegap[column]; i < where; i++) {\n values[i * columns + column] += valuegap[column + columns];\n }\n }\n else {\n for (let i = where; i < valuegap[column]; i++) {\n values[i * columns + column] -= valuegap[column + columns];\n }\n }\n valuegap[column] = where;\n }\n moveRowGapTo(where) {\n if (where == this.mRowGapStart) {\n return;\n }\n else if (where > this.mRowGapStart) {\n let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength);\n const columns = this.mColumns;\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const gapend = this.mRowGapStart + this.mRowGapLength;\n for (let i = gapend; i < gapend + moving; i++) {\n let destrow = i - gapend + this.mRowGapStart;\n for (let j = 0; j < columns; j++) {\n let val = values[i * columns + j];\n if (i >= valuegap[j]) {\n val += valuegap[j + columns];\n }\n if (destrow >= valuegap[j]) {\n val -= valuegap[j + columns];\n }\n values[destrow * columns + j] = val;\n }\n }\n }\n else {\n let moving = this.mRowGapStart - where;\n const columns = this.mColumns;\n const valuegap = this.mValueGap;\n const values = this.mValues;\n const gapend = this.mRowGapStart + this.mRowGapLength;\n for (let i = where + moving - 1; i >= where; i--) {\n let destrow = i - where + gapend - moving;\n for (let j = 0; j < columns; j++) {\n let val = values[i * columns + j];\n if (i >= valuegap[j]) {\n val += valuegap[j + columns];\n }\n if (destrow >= valuegap[j]) {\n val -= valuegap[j + columns];\n }\n values[destrow * columns + j] = val;\n }\n }\n }\n this.mRowGapStart = where;\n }\n }\n text.PackedIntVector = PackedIntVector;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var System = java.lang.System;\n class PackedObjectVector {\n constructor(columns) {\n this.mColumns = 0;\n this.mRows = 0;\n this.mRowGapStart = 0;\n this.mRowGapLength = 0;\n this.mColumns = columns;\n this.mRows = 1;\n this.mRowGapStart = 0;\n this.mRowGapLength = this.mRows;\n this.mValues = new Array(this.mRows * this.mColumns);\n }\n getValue(row, column) {\n if (row >= this.mRowGapStart)\n row += this.mRowGapLength;\n let value = this.mValues[row * this.mColumns + column];\n return value;\n }\n setValue(row, column, value) {\n if (row >= this.mRowGapStart)\n row += this.mRowGapLength;\n this.mValues[row * this.mColumns + column] = value;\n }\n insertAt(row, values) {\n this.moveRowGapTo(row);\n if (this.mRowGapLength == 0)\n this.growBuffer();\n this.mRowGapStart++;\n this.mRowGapLength--;\n if (values == null)\n for (let i = 0; i < this.mColumns; i++)\n this.setValue(row, i, null);\n else\n for (let i = 0; i < this.mColumns; i++)\n this.setValue(row, i, values[i]);\n }\n deleteAt(row, count) {\n this.moveRowGapTo(row + count);\n this.mRowGapStart -= count;\n this.mRowGapLength += count;\n if (this.mRowGapLength > this.size() * 2) {\n }\n }\n size() {\n return this.mRows - this.mRowGapLength;\n }\n width() {\n return this.mColumns;\n }\n growBuffer() {\n let newsize = this.size() + 1;\n newsize = (newsize * this.mColumns) / this.mColumns;\n let newvalues = new Array(newsize * this.mColumns);\n let after = this.mRows - (this.mRowGapStart + this.mRowGapLength);\n System.arraycopy(this.mValues, 0, newvalues, 0, this.mColumns * this.mRowGapStart);\n System.arraycopy(this.mValues, (this.mRows - after) * this.mColumns, newvalues, (newsize - after) * this.mColumns, after * this.mColumns);\n this.mRowGapLength += newsize - this.mRows;\n this.mRows = newsize;\n this.mValues = newvalues;\n }\n moveRowGapTo(where) {\n if (where == this.mRowGapStart)\n return;\n if (where > this.mRowGapStart) {\n let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength);\n for (let i = this.mRowGapStart + this.mRowGapLength; i < this.mRowGapStart + this.mRowGapLength + moving; i++) {\n let destrow = i - (this.mRowGapStart + this.mRowGapLength) + this.mRowGapStart;\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n this.mValues[destrow * this.mColumns + j] = val;\n }\n }\n }\n else {\n let moving = this.mRowGapStart - where;\n for (let i = where + moving - 1; i >= where; i--) {\n let destrow = i - where + this.mRowGapStart + this.mRowGapLength - moving;\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n this.mValues[destrow * this.mColumns + j] = val;\n }\n }\n }\n this.mRowGapStart = where;\n }\n dump() {\n for (let i = 0; i < this.mRows; i++) {\n for (let j = 0; j < this.mColumns; j++) {\n let val = this.mValues[i * this.mColumns + j];\n if (i < this.mRowGapStart || i >= this.mRowGapStart + this.mRowGapLength)\n System.out.print(val + \" \");\n else\n System.out.print(\"(\" + val + \") \");\n }\n System.out.print(\" << \\n\");\n }\n System.out.print(\"-----\\n\\n\");\n }\n }\n text.PackedObjectVector = PackedObjectVector;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var Spannable;\n (function (Spannable) {\n function isImpl(obj) {\n return obj && obj['setSpan'] && obj['removeSpan'];\n }\n Spannable.isImpl = isImpl;\n class Factory {\n static getInstance() {\n return Factory.sInstance;\n }\n newSpannable(source) {\n return source;\n }\n }\n Factory.sInstance = new Factory();\n Spannable.Factory = Factory;\n })(Spannable = text.Spannable || (text.Spannable = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_9) {\n var style;\n (function (style) {\n var LineHeightSpan;\n (function (LineHeightSpan) {\n LineHeightSpan.type = Symbol();\n })(LineHeightSpan = style.LineHeightSpan || (style.LineHeightSpan = {}));\n })(style = text_9.style || (text_9.style = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_10) {\n var Paint = android.graphics.Paint;\n var LeadingMarginSpan = android.text.style.LeadingMarginSpan;\n var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2;\n var LineHeightSpan = android.text.style.LineHeightSpan;\n var MetricAffectingSpan = android.text.style.MetricAffectingSpan;\n var TabStopSpan = android.text.style.TabStopSpan;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var Layout = android.text.Layout;\n var MeasuredText = android.text.MeasuredText;\n var Spanned = android.text.Spanned;\n var TextUtils = android.text.TextUtils;\n class StaticLayout extends Layout {\n constructor(source, bufstart, bufend, paint, outerwidth, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0, maxLines = Integer.MAX_VALUE) {\n super((ellipsize == null) ? source : (Spanned.isImplements(source)) ? new Layout.SpannedEllipsizer(source) : new Layout.Ellipsizer(source), paint, outerwidth, align, textDir, spacingmult, spacingadd);\n this.mLineCount = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mColumns = 0;\n this.mEllipsizedWidth = 0;\n this.mMaximumVisibleLineCount = Integer.MAX_VALUE;\n this.mFontMetricsInt = new Paint.FontMetricsInt();\n if (source == null) {\n this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE;\n this.mLines = androidui.util.ArrayCreator.newNumberArray((2 * this.mColumns));\n this.mLineDirections = new Array((2 * this.mColumns));\n this.mMeasured = MeasuredText.obtain();\n return;\n }\n if (ellipsize != null) {\n let e = this.getText();\n e.mLayout = this;\n e.mWidth = ellipsizedWidth;\n e.mMethod = ellipsize;\n this.mEllipsizedWidth = ellipsizedWidth;\n this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE;\n }\n else {\n this.mColumns = StaticLayout.COLUMNS_NORMAL;\n this.mEllipsizedWidth = outerwidth;\n }\n this.mLines = androidui.util.ArrayCreator.newNumberArray(2 * this.mColumns);\n this.mLineDirections = new Array(2 * this.mColumns);\n this.mMaximumVisibleLineCount = maxLines;\n this.mMeasured = MeasuredText.obtain();\n this.generate(source, bufstart, bufend, paint, outerwidth, textDir, spacingmult, spacingadd, includepad, includepad, ellipsizedWidth, ellipsize);\n this.mMeasured = MeasuredText.recycle(this.mMeasured);\n this.mFontMetricsInt = null;\n }\n generate(source, bufStart, bufEnd, paint, outerWidth, textDir, spacingmult, spacingadd, includepad, trackpad, ellipsizedWidth, ellipsize) {\n this.mLineCount = 0;\n let v = 0;\n let needMultiply = (spacingmult != 1 || spacingadd != 0);\n let fm = this.mFontMetricsInt;\n let chooseHtv = null;\n let measured = this.mMeasured;\n let spanned = null;\n if (Spanned.isImplements(source))\n spanned = source;\n let DEFAULT_DIR = StaticLayout.DIR_LEFT_TO_RIGHT;\n let paraEnd;\n for (let paraStart = bufStart; paraStart <= bufEnd; paraStart = paraEnd) {\n paraEnd = source.substring(0, bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE, paraStart);\n if (paraEnd < 0)\n paraEnd = bufEnd;\n else\n paraEnd++;\n let firstWidthLineLimit = this.mLineCount + 1;\n let firstWidth = outerWidth;\n let restWidth = outerWidth;\n let chooseHt = null;\n if (spanned != null) {\n let sp = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LeadingMarginSpan.type);\n for (let i = 0; i < sp.length; i++) {\n let lms = sp[i];\n firstWidth -= sp[i].getLeadingMargin(true);\n restWidth -= sp[i].getLeadingMargin(false);\n if (LeadingMarginSpan2.isImpl(lms)) {\n let lms2 = lms;\n let lmsFirstLine = this.getLineForOffset(spanned.getSpanStart(lms2));\n firstWidthLineLimit = lmsFirstLine + lms2.getLeadingMarginLineCount();\n }\n }\n chooseHt = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LineHeightSpan.type);\n if (chooseHt.length != 0) {\n if (chooseHtv == null || chooseHtv.length < chooseHt.length) {\n chooseHtv = androidui.util.ArrayCreator.newNumberArray(chooseHt.length);\n }\n for (let i = 0; i < chooseHt.length; i++) {\n let o = spanned.getSpanStart(chooseHt[i]);\n if (o < paraStart) {\n chooseHtv[i] = this.getLineTop(this.getLineForOffset(o));\n }\n else {\n chooseHtv[i] = v;\n }\n }\n }\n }\n measured.setPara(source, paraStart, paraEnd, textDir);\n let chs = measured.mChars;\n let widths = measured.mWidths;\n let chdirs = measured.mLevels;\n let dir = measured.mDir;\n let easy = measured.mEasy;\n let width = firstWidth;\n let w = 0;\n let here = paraStart;\n let ok = paraStart;\n let okWidth = w;\n let okAscent = 0, okDescent = 0, okTop = 0, okBottom = 0;\n let fit = paraStart;\n let fitWidth = w;\n let fitAscent = 0, fitDescent = 0, fitTop = 0, fitBottom = 0;\n let hasTabOrEmoji = false;\n let hasTab = false;\n let tabStops = null;\n for (let spanStart = paraStart, spanEnd; spanStart < paraEnd; spanStart = spanEnd) {\n if (spanned == null) {\n spanEnd = paraEnd;\n let spanLen = spanEnd - spanStart;\n measured.addStyleRun(paint, spanLen, fm);\n }\n else {\n spanEnd = spanned.nextSpanTransition(spanStart, paraEnd, MetricAffectingSpan.type);\n let spanLen = spanEnd - spanStart;\n let spans = spanned.getSpans(spanStart, spanEnd, MetricAffectingSpan.type);\n spans = TextUtils.removeEmptySpans(spans, spanned, MetricAffectingSpan.type);\n measured.addStyleRun(paint, spans, spanLen, fm);\n }\n let fmTop = fm.top;\n let fmBottom = fm.bottom;\n let fmAscent = fm.ascent;\n let fmDescent = fm.descent;\n for (let j = spanStart; j < spanEnd; j++) {\n let c = chs[j - paraStart];\n if (c == StaticLayout.CHAR_NEW_LINE) {\n }\n else if (c == StaticLayout.CHAR_TAB) {\n if (hasTab == false) {\n hasTab = true;\n hasTabOrEmoji = true;\n if (spanned != null) {\n let spans = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, TabStopSpan.type);\n if (spans.length > 0) {\n tabStops = new Layout.TabStops(StaticLayout.TAB_INCREMENT, spans);\n }\n }\n }\n if (tabStops != null) {\n w = tabStops.nextTab(w);\n }\n else {\n w = StaticLayout.TabStops.nextDefaultStop(w, StaticLayout.TAB_INCREMENT);\n }\n }\n else if (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_HIGH_SURROGATE\n && c.codePointAt(0) <= StaticLayout.CHAR_LAST_LOW_SURROGATE && j + 1 < spanEnd) {\n let emoji = chs.codePointAt(j - paraStart);\n w += widths[j - paraStart];\n }\n else {\n w += widths[j - paraStart];\n }\n let isSpaceOrTab = c == StaticLayout.CHAR_SPACE || c == StaticLayout.CHAR_TAB || c == StaticLayout.CHAR_ZWSP;\n if (w <= width || isSpaceOrTab) {\n fitWidth = w;\n fit = j + 1;\n if (fmTop < fitTop)\n fitTop = fmTop;\n if (fmAscent < fitAscent)\n fitAscent = fmAscent;\n if (fmDescent > fitDescent)\n fitDescent = fmDescent;\n if (fmBottom > fitBottom)\n fitBottom = fmBottom;\n let isLineBreak = isSpaceOrTab ||\n ((c == StaticLayout.CHAR_SLASH || c == StaticLayout.CHAR_HYPHEN) && (j + 1 >= spanEnd ||\n !Number.isInteger(Number.parseInt(chs[j + 1 - paraStart])))) ||\n (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_CJK.codePointAt(0) && StaticLayout.isIdeographic(c, true) && j + 1 < spanEnd && StaticLayout.isIdeographic(chs[j + 1 - paraStart], false));\n if (isLineBreak) {\n okWidth = w;\n ok = j + 1;\n if (fitTop < okTop)\n okTop = fitTop;\n if (fitAscent < okAscent)\n okAscent = fitAscent;\n if (fitDescent > okDescent)\n okDescent = fitDescent;\n if (fitBottom > okBottom)\n okBottom = fitBottom;\n }\n }\n else {\n const moreChars = (j + 1 < spanEnd);\n let endPos;\n let above, below, top, bottom;\n let currentTextWidth;\n if (ok != here) {\n endPos = ok;\n above = okAscent;\n below = okDescent;\n top = okTop;\n bottom = okBottom;\n currentTextWidth = okWidth;\n }\n else if (fit != here) {\n endPos = fit;\n above = fitAscent;\n below = fitDescent;\n top = fitTop;\n bottom = fitBottom;\n currentTextWidth = fitWidth;\n }\n else {\n endPos = here + 1;\n above = fm.ascent;\n below = fm.descent;\n top = fm.top;\n bottom = fm.bottom;\n currentTextWidth = widths[here - paraStart];\n }\n v = this.out(source, here, endPos, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, currentTextWidth, paint, moreChars);\n here = endPos;\n j = here - 1;\n ok = fit = here;\n w = 0;\n fitAscent = fitDescent = fitTop = fitBottom = 0;\n okAscent = okDescent = okTop = okBottom = 0;\n if (--firstWidthLineLimit <= 0) {\n width = restWidth;\n }\n if (here < spanStart) {\n measured.setPos(here);\n spanEnd = here;\n break;\n }\n if (this.mLineCount >= this.mMaximumVisibleLineCount) {\n break;\n }\n }\n }\n }\n if (paraEnd != here && this.mLineCount < this.mMaximumVisibleLineCount) {\n if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) {\n paint.getFontMetricsInt(fm);\n fitTop = fm.top;\n fitBottom = fm.bottom;\n fitAscent = fm.ascent;\n fitDescent = fm.descent;\n }\n v = this.out(source, here, paraEnd, fitAscent, fitDescent, fitTop, fitBottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, w, paint, paraEnd != bufEnd);\n }\n paraStart = paraEnd;\n if (paraEnd == bufEnd)\n break;\n }\n if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == StaticLayout.CHAR_NEW_LINE) && this.mLineCount < this.mMaximumVisibleLineCount) {\n measured.setPara(source, bufStart, bufEnd, textDir);\n paint.getFontMetricsInt(fm);\n v = this.out(source, bufEnd, bufEnd, fm.ascent, fm.descent, fm.top, fm.bottom, v, spacingmult, spacingadd, null, null, fm, false, needMultiply, measured.mLevels, measured.mDir, measured.mEasy, bufEnd, includepad, trackpad, null, null, bufStart, ellipsize, ellipsizedWidth, 0, paint, false);\n }\n }\n static isIdeographic(c, includeNonStarters) {\n let code = c.codePointAt(0);\n if (code >= '⺀'.codePointAt(0) && code <= '⿿'.codePointAt(0)) {\n return true;\n }\n if (c == ' ') {\n return true;\n }\n if (code >= '぀'.codePointAt(0) && code <= 'ゟ'.codePointAt(0)) {\n if (!includeNonStarters) {\n switch (c) {\n case 'ぁ':\n case 'ぃ':\n case 'ぅ':\n case 'ぇ':\n case 'ぉ':\n case 'っ':\n case 'ゃ':\n case 'ゅ':\n case 'ょ':\n case 'ゎ':\n case 'ゕ':\n case 'ゖ':\n case '゛':\n case '゜':\n case 'ゝ':\n case 'ゞ':\n return false;\n }\n }\n return true;\n }\n if (code >= '゠'.codePointAt(0) && code <= 'ヿ'.codePointAt(0)) {\n if (!includeNonStarters) {\n switch (c) {\n case '゠':\n case 'ァ':\n case 'ィ':\n case 'ゥ':\n case 'ェ':\n case 'ォ':\n case 'ッ':\n case 'ャ':\n case 'ュ':\n case 'ョ':\n case 'ヮ':\n case 'ヵ':\n case 'ヶ':\n case '・':\n case 'ー':\n case 'ヽ':\n case 'ヾ':\n return false;\n }\n }\n return true;\n }\n if (code >= '㐀'.codePointAt(0) && code <= '䶵'.codePointAt(0)) {\n return true;\n }\n if (code >= '一'.codePointAt(0) && code <= '龻'.codePointAt(0)) {\n return true;\n }\n if (code >= '豈'.codePointAt(0) && code <= '龎'.codePointAt(0)) {\n return true;\n }\n if (code >= 'ꀀ'.codePointAt(0) && code <= '꒏'.codePointAt(0)) {\n return true;\n }\n if (code >= '꒐'.codePointAt(0) && code <= '꓏'.codePointAt(0)) {\n return true;\n }\n if (code >= '﹢'.codePointAt(0) && code <= '﹦'.codePointAt(0)) {\n return true;\n }\n if (code >= '0'.codePointAt(0) && code <= '9'.codePointAt(0)) {\n return true;\n }\n return false;\n }\n out(text, start, end, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includePad, trackPad, chs, widths, widthStart, ellipsize, ellipsisWidth, textWidth, paint, moreChars) {\n let j = this.mLineCount;\n let off = j * this.mColumns;\n let want = off + this.mColumns + StaticLayout.TOP;\n let lines = this.mLines;\n if (want >= lines.length) {\n let nlen = (want + 1);\n let grow = androidui.util.ArrayCreator.newNumberArray(nlen);\n System.arraycopy(lines, 0, grow, 0, lines.length);\n this.mLines = grow;\n lines = grow;\n let grow2 = new Array(nlen);\n System.arraycopy(this.mLineDirections, 0, grow2, 0, this.mLineDirections.length);\n this.mLineDirections = grow2;\n }\n if (chooseHt != null) {\n fm.ascent = above;\n fm.descent = below;\n fm.top = top;\n fm.bottom = bottom;\n for (let i = 0; i < chooseHt.length; i++) {\n chooseHt[i].chooseHeight(text, start, end, chooseHtv[i], v, fm, paint);\n }\n above = fm.ascent;\n below = fm.descent;\n top = fm.top;\n bottom = fm.bottom;\n }\n if (j == 0) {\n if (trackPad) {\n this.mTopPadding = top - above;\n }\n if (includePad) {\n above = top;\n }\n }\n if (end == bufEnd) {\n if (trackPad) {\n this.mBottomPadding = bottom - below;\n }\n if (includePad) {\n below = bottom;\n }\n }\n let extra;\n if (needMultiply) {\n let ex = (below - above) * (spacingmult - 1) + spacingadd;\n if (ex >= 0) {\n extra = Math.floor((ex + StaticLayout.EXTRA_ROUNDING));\n }\n else {\n extra = -Math.floor((-ex + StaticLayout.EXTRA_ROUNDING));\n }\n }\n else {\n extra = 0;\n }\n lines[off + StaticLayout.START] = start;\n lines[off + StaticLayout.TOP] = v;\n lines[off + StaticLayout.DESCENT] = below + extra;\n v += (below - above) + extra;\n lines[off + this.mColumns + StaticLayout.START] = end;\n lines[off + this.mColumns + StaticLayout.TOP] = v;\n if (hasTabOrEmoji)\n lines[off + StaticLayout.TAB] |= StaticLayout.TAB_MASK;\n lines[off + StaticLayout.DIR] |= dir << StaticLayout.DIR_SHIFT;\n let linedirs = StaticLayout.DIRS_ALL_LEFT_TO_RIGHT;\n this.mLineDirections[j] = linedirs;\n if (ellipsize != null) {\n let firstLine = (j == 0);\n let currentLineIsTheLastVisibleOne = (j + 1 == this.mMaximumVisibleLineCount);\n let forceEllipsis = moreChars && (this.mLineCount + 1 == this.mMaximumVisibleLineCount);\n let doEllipsis = (((this.mMaximumVisibleLineCount == 1 && moreChars) || (firstLine && !moreChars)) && ellipsize != TextUtils.TruncateAt.MARQUEE) || (!firstLine && (currentLineIsTheLastVisibleOne || !moreChars) && ellipsize == TextUtils.TruncateAt.END);\n if (doEllipsis) {\n this.calculateEllipsis(start, end, widths, widthStart, ellipsisWidth, ellipsize, j, textWidth, paint, forceEllipsis);\n }\n }\n this.mLineCount++;\n return v;\n }\n calculateEllipsis(lineStart, lineEnd, widths, widthStart, avail, where, line, textWidth, paint, forceEllipsis) {\n if (textWidth <= avail && !forceEllipsis) {\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = 0;\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = 0;\n return;\n }\n let ellipsisWidth = paint.measureText((where == TextUtils.TruncateAt.END_SMALL) ? StaticLayout.ELLIPSIS_TWO_DOTS[0] : StaticLayout.ELLIPSIS_NORMAL[0], 0, 1);\n let ellipsisStart = 0;\n let ellipsisCount = 0;\n let len = lineEnd - lineStart;\n if (where == TextUtils.TruncateAt.START) {\n if (this.mMaximumVisibleLineCount == 1) {\n let sum = 0;\n let i;\n for (i = len; i >= 0; i--) {\n let w = widths[i - 1 + lineStart - widthStart];\n if (w + sum + ellipsisWidth > avail) {\n break;\n }\n sum += w;\n }\n ellipsisStart = 0;\n ellipsisCount = i;\n }\n else {\n }\n }\n else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE || where == TextUtils.TruncateAt.END_SMALL) {\n let sum = 0;\n let i;\n for (i = 0; i < len; i++) {\n let w = widths[i + lineStart - widthStart];\n if (w + sum + ellipsisWidth > avail) {\n break;\n }\n sum += w;\n }\n ellipsisStart = i;\n ellipsisCount = len - i;\n if (forceEllipsis && ellipsisCount == 0 && len > 0) {\n ellipsisStart = len - 1;\n ellipsisCount = 1;\n }\n }\n else {\n if (this.mMaximumVisibleLineCount == 1) {\n let lsum = 0, rsum = 0;\n let left = 0, right = len;\n let ravail = (avail - ellipsisWidth) / 2;\n for (right = len; right >= 0; right--) {\n let w = widths[right - 1 + lineStart - widthStart];\n if (w + rsum > ravail) {\n break;\n }\n rsum += w;\n }\n let lavail = avail - ellipsisWidth - rsum;\n for (left = 0; left < right; left++) {\n let w = widths[left + lineStart - widthStart];\n if (w + lsum > lavail) {\n break;\n }\n lsum += w;\n }\n ellipsisStart = left;\n ellipsisCount = right - left;\n }\n else {\n }\n }\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = ellipsisStart;\n this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = ellipsisCount;\n }\n getLineForVertical(vertical) {\n let high = this.mLineCount;\n let low = -1;\n let guess;\n let lines = this.mLines;\n while (high - low > 1) {\n guess = (high + low) >> 1;\n if (lines[this.mColumns * guess + StaticLayout.TOP] > vertical) {\n high = guess;\n }\n else {\n low = guess;\n }\n }\n if (low < 0) {\n return 0;\n }\n else {\n return low;\n }\n }\n getLineCount() {\n return this.mLineCount;\n }\n getLineTop(line) {\n let top = this.mLines[this.mColumns * line + StaticLayout.TOP];\n if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount && line != this.mLineCount) {\n top += this.getBottomPadding();\n }\n return top;\n }\n getLineDescent(line) {\n let descent = this.mLines[this.mColumns * line + StaticLayout.DESCENT];\n if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount - 1 && line != this.mLineCount) {\n descent += this.getBottomPadding();\n }\n return descent;\n }\n getLineStart(line) {\n return this.mLines[this.mColumns * line + StaticLayout.START] & StaticLayout.START_MASK;\n }\n getParagraphDirection(line) {\n return this.mLines[this.mColumns * line + StaticLayout.DIR] >> StaticLayout.DIR_SHIFT;\n }\n getLineContainsTab(line) {\n return (this.mLines[this.mColumns * line + StaticLayout.TAB] & StaticLayout.TAB_MASK) != 0;\n }\n getLineDirections(line) {\n return this.mLineDirections[line];\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsisCount(line) {\n if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) {\n return 0;\n }\n return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT];\n }\n getEllipsisStart(line) {\n if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) {\n return 0;\n }\n return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START];\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n prepare() {\n this.mMeasured = MeasuredText.obtain();\n }\n finish() {\n this.mMeasured = MeasuredText.recycle(this.mMeasured);\n }\n }\n StaticLayout.TAG = \"StaticLayout\";\n StaticLayout.COLUMNS_NORMAL = 3;\n StaticLayout.COLUMNS_ELLIPSIZE = 5;\n StaticLayout.START = 0;\n StaticLayout.DIR = StaticLayout.START;\n StaticLayout.TAB = StaticLayout.START;\n StaticLayout.TOP = 1;\n StaticLayout.DESCENT = 2;\n StaticLayout.ELLIPSIS_START = 3;\n StaticLayout.ELLIPSIS_COUNT = 4;\n StaticLayout.START_MASK = 0x1FFFFFFF;\n StaticLayout.DIR_SHIFT = 30;\n StaticLayout.TAB_MASK = 0x20000000;\n StaticLayout.CHAR_FIRST_CJK = '⺀';\n StaticLayout.CHAR_NEW_LINE = '\\n';\n StaticLayout.CHAR_TAB = '\\t';\n StaticLayout.CHAR_SPACE = ' ';\n StaticLayout.CHAR_SLASH = '/';\n StaticLayout.CHAR_HYPHEN = '-';\n StaticLayout.CHAR_ZWSP = '​';\n StaticLayout.EXTRA_ROUNDING = 0.5;\n StaticLayout.CHAR_FIRST_HIGH_SURROGATE = 0xD800;\n StaticLayout.CHAR_LAST_LOW_SURROGATE = 0xDFFF;\n text_10.StaticLayout = StaticLayout;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text_11) {\n var Paint = android.graphics.Paint;\n var System = java.lang.System;\n var Layout = android.text.Layout;\n var PackedIntVector = android.text.PackedIntVector;\n var PackedObjectVector = android.text.PackedObjectVector;\n var Spanned = android.text.Spanned;\n var StaticLayout = android.text.StaticLayout;\n class DynamicLayout extends Layout {\n constructor(base, display, paint, width, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0) {\n super((ellipsize == null) ? display : (Spanned.isImplements(display)) ? new Layout.SpannedEllipsizer(display) : new Layout.Ellipsizer(display), paint, width, align, textDir, spacingmult, spacingadd);\n this.mEllipsizedWidth = 0;\n this.mNumberOfBlocks = 0;\n this.mIndexFirstChangedBlock = 0;\n this.mTopPadding = 0;\n this.mBottomPadding = 0;\n this.mBase = base;\n this.mDisplay = display;\n if (ellipsize != null) {\n this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);\n this.mEllipsizedWidth = ellipsizedWidth;\n this.mEllipsizeAt = ellipsize;\n }\n else {\n this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);\n this.mEllipsizedWidth = width;\n this.mEllipsizeAt = null;\n }\n this.mObjects = new PackedObjectVector(1);\n this.mIncludePad = includepad;\n if (ellipsize != null) {\n let e = this.getText();\n e.mLayout = this;\n e.mWidth = ellipsizedWidth;\n e.mMethod = ellipsize;\n this.mEllipsize = true;\n }\n let start;\n if (ellipsize != null) {\n start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);\n start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);\n }\n let dirs = [DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT];\n let fm = new Paint.FontMetricsInt();\n paint.getFontMetricsInt(fm);\n let asc = fm.ascent;\n let desc = fm.descent;\n start[DynamicLayout.DIR] = DynamicLayout.DIR_LEFT_TO_RIGHT << DynamicLayout.DIR_SHIFT;\n start[DynamicLayout.TOP] = 0;\n start[DynamicLayout.DESCENT] = desc;\n this.mInts.insertAt(0, start);\n start[DynamicLayout.TOP] = desc - asc;\n this.mInts.insertAt(1, start);\n this.mObjects.insertAt(0, dirs);\n this.reflow(base, 0, 0, base.length);\n }\n reflow(s, where, before, after) {\n if (s != this.mBase)\n return;\n let text = this.mDisplay;\n let len = text.length;\n let find = text.lastIndexOf('\\n', where - 1);\n if (find < 0)\n find = 0;\n else\n find = find + 1;\n {\n let diff = where - find;\n before += diff;\n after += diff;\n where -= diff;\n }\n let look = text.indexOf('\\n', where + after);\n if (look < 0)\n look = len;\n else\n look++;\n let change = look - (where + after);\n before += change;\n after += change;\n let startline = this.getLineForOffset(where);\n let startv = this.getLineTop(startline);\n let endline = this.getLineForOffset(where + before);\n if (where + after == len)\n endline = this.getLineCount();\n let endv = this.getLineTop(endline);\n let islast = (endline == this.getLineCount());\n let reflowed;\n {\n reflowed = DynamicLayout.sStaticLayout;\n DynamicLayout.sStaticLayout = null;\n }\n if (reflowed == null) {\n reflowed = new StaticLayout(null, 0, 0, null, 0, null, null, 0, 1, true);\n }\n else {\n reflowed.prepare();\n }\n reflowed.generate(text, where, where + after, this.getPaint(), this.getWidth(), this.getTextDirectionHeuristic(), this.getSpacingMultiplier(), this.getSpacingAdd(), false, true, this.mEllipsizedWidth, this.mEllipsizeAt);\n let n = reflowed.getLineCount();\n if (where + after != len && reflowed.getLineStart(n - 1) == where + after)\n n--;\n this.mInts.deleteAt(startline, endline - startline);\n this.mObjects.deleteAt(startline, endline - startline);\n let ht = reflowed.getLineTop(n);\n let toppad = 0, botpad = 0;\n if (this.mIncludePad && startline == 0) {\n toppad = reflowed.getTopPadding();\n this.mTopPadding = toppad;\n ht -= toppad;\n }\n if (this.mIncludePad && islast) {\n botpad = reflowed.getBottomPadding();\n this.mBottomPadding = botpad;\n ht += botpad;\n }\n this.mInts.adjustValuesBelow(startline, DynamicLayout.START, after - before);\n this.mInts.adjustValuesBelow(startline, DynamicLayout.TOP, startv - endv + ht);\n let ints;\n if (this.mEllipsize) {\n ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE);\n ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL);\n }\n let objects = new Array(1);\n for (let i = 0; i < n; i++) {\n ints[DynamicLayout.START] = reflowed.getLineStart(i) | (reflowed.getParagraphDirection(i) << DynamicLayout.DIR_SHIFT) | (reflowed.getLineContainsTab(i) ? DynamicLayout.TAB_MASK : 0);\n let top = reflowed.getLineTop(i) + startv;\n if (i > 0)\n top -= toppad;\n ints[DynamicLayout.TOP] = top;\n let desc = reflowed.getLineDescent(i);\n if (i == n - 1)\n desc += botpad;\n ints[DynamicLayout.DESCENT] = desc;\n objects[0] = reflowed.getLineDirections(i);\n if (this.mEllipsize) {\n ints[DynamicLayout.ELLIPSIS_START] = reflowed.getEllipsisStart(i);\n ints[DynamicLayout.ELLIPSIS_COUNT] = reflowed.getEllipsisCount(i);\n }\n this.mInts.insertAt(startline + i, ints);\n this.mObjects.insertAt(startline + i, objects);\n }\n this.updateBlocks(startline, endline - 1, n);\n {\n DynamicLayout.sStaticLayout = reflowed;\n reflowed.finish();\n }\n }\n createBlocks() {\n let offset = DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;\n this.mNumberOfBlocks = 0;\n const text = this.mDisplay;\n while (true) {\n offset = text.indexOf('\\n', offset);\n if (offset < 0) {\n this.addBlockAtOffset(text.length);\n break;\n }\n else {\n this.addBlockAtOffset(offset);\n offset += DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH;\n }\n }\n this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length);\n for (let i = 0; i < this.mBlockEndLines.length; i++) {\n this.mBlockIndices[i] = DynamicLayout.INVALID_BLOCK_INDEX;\n }\n }\n addBlockAtOffset(offset) {\n const line = this.getLineForOffset(offset);\n if (this.mBlockEndLines == null) {\n this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray((1));\n this.mBlockEndLines[this.mNumberOfBlocks] = line;\n this.mNumberOfBlocks++;\n return;\n }\n const previousBlockEndLine = this.mBlockEndLines[this.mNumberOfBlocks - 1];\n if (line > previousBlockEndLine) {\n if (this.mNumberOfBlocks == this.mBlockEndLines.length) {\n let blockEndLines = androidui.util.ArrayCreator.newNumberArray((this.mNumberOfBlocks + 1));\n System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, this.mNumberOfBlocks);\n this.mBlockEndLines = blockEndLines;\n }\n this.mBlockEndLines[this.mNumberOfBlocks] = line;\n this.mNumberOfBlocks++;\n }\n }\n updateBlocks(startLine, endLine, newLineCount) {\n if (this.mBlockEndLines == null) {\n this.createBlocks();\n return;\n }\n let firstBlock = -1;\n let lastBlock = -1;\n for (let i = 0; i < this.mNumberOfBlocks; i++) {\n if (this.mBlockEndLines[i] >= startLine) {\n firstBlock = i;\n break;\n }\n }\n for (let i = firstBlock; i < this.mNumberOfBlocks; i++) {\n if (this.mBlockEndLines[i] >= endLine) {\n lastBlock = i;\n break;\n }\n }\n const lastBlockEndLine = this.mBlockEndLines[lastBlock];\n let createBlockBefore = startLine > (firstBlock == 0 ? 0 : this.mBlockEndLines[firstBlock - 1] + 1);\n let createBlock = newLineCount > 0;\n let createBlockAfter = endLine < this.mBlockEndLines[lastBlock];\n let numAddedBlocks = 0;\n if (createBlockBefore)\n numAddedBlocks++;\n if (createBlock)\n numAddedBlocks++;\n if (createBlockAfter)\n numAddedBlocks++;\n const numRemovedBlocks = lastBlock - firstBlock + 1;\n const newNumberOfBlocks = this.mNumberOfBlocks + numAddedBlocks - numRemovedBlocks;\n if (newNumberOfBlocks == 0) {\n this.mBlockEndLines[0] = 0;\n this.mBlockIndices[0] = DynamicLayout.INVALID_BLOCK_INDEX;\n this.mNumberOfBlocks = 1;\n return;\n }\n if (newNumberOfBlocks > this.mBlockEndLines.length) {\n const newSize = (newNumberOfBlocks);\n let blockEndLines = androidui.util.ArrayCreator.newNumberArray(newSize);\n let blockIndices = androidui.util.ArrayCreator.newNumberArray(newSize);\n System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, firstBlock);\n System.arraycopy(this.mBlockIndices, 0, blockIndices, 0, firstBlock);\n System.arraycopy(this.mBlockEndLines, lastBlock + 1, blockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n System.arraycopy(this.mBlockIndices, lastBlock + 1, blockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n this.mBlockEndLines = blockEndLines;\n this.mBlockIndices = blockIndices;\n }\n else {\n System.arraycopy(this.mBlockEndLines, lastBlock + 1, this.mBlockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n System.arraycopy(this.mBlockIndices, lastBlock + 1, this.mBlockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1);\n }\n this.mNumberOfBlocks = newNumberOfBlocks;\n let newFirstChangedBlock;\n const deltaLines = newLineCount - (endLine - startLine + 1);\n if (deltaLines != 0) {\n newFirstChangedBlock = firstBlock + numAddedBlocks;\n for (let i = newFirstChangedBlock; i < this.mNumberOfBlocks; i++) {\n this.mBlockEndLines[i] += deltaLines;\n }\n }\n else {\n newFirstChangedBlock = this.mNumberOfBlocks;\n }\n this.mIndexFirstChangedBlock = Math.min(this.mIndexFirstChangedBlock, newFirstChangedBlock);\n let blockIndex = firstBlock;\n if (createBlockBefore) {\n this.mBlockEndLines[blockIndex] = startLine - 1;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n blockIndex++;\n }\n if (createBlock) {\n this.mBlockEndLines[blockIndex] = startLine + newLineCount - 1;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n blockIndex++;\n }\n if (createBlockAfter) {\n this.mBlockEndLines[blockIndex] = lastBlockEndLine + deltaLines;\n this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX;\n }\n }\n setBlocksDataForTest(blockEndLines, blockIndices, numberOfBlocks) {\n this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray(blockEndLines.length);\n this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(blockIndices.length);\n System.arraycopy(blockEndLines, 0, this.mBlockEndLines, 0, blockEndLines.length);\n System.arraycopy(blockIndices, 0, this.mBlockIndices, 0, blockIndices.length);\n this.mNumberOfBlocks = numberOfBlocks;\n }\n getBlockEndLines() {\n return this.mBlockEndLines;\n }\n getBlockIndices() {\n return this.mBlockIndices;\n }\n getNumberOfBlocks() {\n return this.mNumberOfBlocks;\n }\n getIndexFirstChangedBlock() {\n return this.mIndexFirstChangedBlock;\n }\n setIndexFirstChangedBlock(i) {\n this.mIndexFirstChangedBlock = i;\n }\n getLineCount() {\n return this.mInts.size() - 1;\n }\n getLineTop(line) {\n return this.mInts.getValue(line, DynamicLayout.TOP);\n }\n getLineDescent(line) {\n return this.mInts.getValue(line, DynamicLayout.DESCENT);\n }\n getLineStart(line) {\n return this.mInts.getValue(line, DynamicLayout.START) & DynamicLayout.START_MASK;\n }\n getLineContainsTab(line) {\n return (this.mInts.getValue(line, DynamicLayout.TAB) & DynamicLayout.TAB_MASK) != 0;\n }\n getParagraphDirection(line) {\n return this.mInts.getValue(line, DynamicLayout.DIR) >> DynamicLayout.DIR_SHIFT;\n }\n getLineDirections(line) {\n return this.mObjects.getValue(line, 0);\n }\n getTopPadding() {\n return this.mTopPadding;\n }\n getBottomPadding() {\n return this.mBottomPadding;\n }\n getEllipsizedWidth() {\n return this.mEllipsizedWidth;\n }\n getEllipsisStart(line) {\n if (this.mEllipsizeAt == null) {\n return 0;\n }\n return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_START);\n }\n getEllipsisCount(line) {\n if (this.mEllipsizeAt == null) {\n return 0;\n }\n return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_COUNT);\n }\n }\n DynamicLayout.PRIORITY = 128;\n DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH = 400;\n DynamicLayout.INVALID_BLOCK_INDEX = -1;\n DynamicLayout.sStaticLayout = new StaticLayout(null, 0, 0, null, 0, null, null, 1, 0, true);\n DynamicLayout.sLock = new Array(0);\n DynamicLayout.START = 0;\n DynamicLayout.DIR = DynamicLayout.START;\n DynamicLayout.TAB = DynamicLayout.START;\n DynamicLayout.TOP = 1;\n DynamicLayout.DESCENT = 2;\n DynamicLayout.COLUMNS_NORMAL = 3;\n DynamicLayout.ELLIPSIS_START = 3;\n DynamicLayout.ELLIPSIS_COUNT = 4;\n DynamicLayout.COLUMNS_ELLIPSIZE = 5;\n DynamicLayout.START_MASK = 0x1FFFFFFF;\n DynamicLayout.DIR_SHIFT = 30;\n DynamicLayout.TAB_MASK = 0x20000000;\n DynamicLayout.ELLIPSIS_UNDEFINED = 0x80000000;\n text_11.DynamicLayout = DynamicLayout;\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var TransformationMethod;\n (function (TransformationMethod) {\n function isImpl(obj) {\n return obj && obj['getTransformation'] && obj['onFocusChanged'];\n }\n TransformationMethod.isImpl = isImpl;\n })(TransformationMethod = method.TransformationMethod || (method.TransformationMethod = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var TransformationMethod = android.text.method.TransformationMethod;\n var TransformationMethod2;\n (function (TransformationMethod2) {\n function isImpl(obj) {\n return TransformationMethod.isImpl(obj) && obj['setLengthChangesAllowed'];\n }\n TransformationMethod2.isImpl = isImpl;\n })(TransformationMethod2 = method.TransformationMethod2 || (method.TransformationMethod2 = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var Log = android.util.Log;\n class AllCapsTransformationMethod {\n constructor(context) {\n }\n getTransformation(source, view) {\n if (this.mEnabled) {\n return source != null ? source.toLocaleUpperCase() : null;\n }\n Log.w(AllCapsTransformationMethod.TAG, \"Caller did not enable length changes; not transforming text\");\n return source;\n }\n onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) {\n }\n setLengthChangesAllowed(allowLengthChanges) {\n this.mEnabled = allowLengthChanges;\n }\n }\n AllCapsTransformationMethod.TAG = \"AllCapsTransformationMethod\";\n method.AllCapsTransformationMethod = AllCapsTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n class ReplacementTransformationMethod {\n getTransformation(source, v) {\n let original = this.getOriginal();\n let replacement = this.getReplacement();\n let doNothing = true;\n let n = original.length;\n for (let i = 0; i < n; i++) {\n if (source.indexOf(original[i]) >= 0) {\n doNothing = false;\n break;\n }\n }\n if (doNothing) {\n return source;\n }\n return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement).toString();\n }\n onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) {\n }\n }\n method.ReplacementTransformationMethod = ReplacementTransformationMethod;\n (function (ReplacementTransformationMethod) {\n class ReplacementCharSequence extends String {\n constructor(source, original, replacement) {\n super(source);\n this.mSource = source;\n this.mOriginal = original;\n this.mReplacement = replacement;\n }\n charAt(i) {\n let c = this.mSource.charAt(i);\n let n = this.mOriginal.length;\n for (let j = 0; j < n; j++) {\n if (c == this.mOriginal[j]) {\n c = this.mReplacement[j];\n }\n }\n return c;\n }\n toString() {\n return this.startReplace(0, this.length);\n }\n substr(from, length) {\n return this.startReplace(from, from + length);\n }\n substring(start, end) {\n return this.startReplace(start, end);\n }\n startReplace(start, end) {\n let dest = this.mSource.substring(start, end).split('');\n let offend = end - start;\n let n = this.mOriginal.length;\n for (let i = 0; i < offend; i++) {\n let c = dest[i];\n for (let j = 0; j < n; j++) {\n if (c == this.mOriginal[j]) {\n dest[i] = this.mReplacement[j];\n }\n }\n }\n return dest.join('');\n }\n }\n ReplacementTransformationMethod.ReplacementCharSequence = ReplacementCharSequence;\n })(ReplacementTransformationMethod = method.ReplacementTransformationMethod || (method.ReplacementTransformationMethod = {}));\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n var ReplacementTransformationMethod = android.text.method.ReplacementTransformationMethod;\n class SingleLineTransformationMethod extends ReplacementTransformationMethod {\n getOriginal() {\n return SingleLineTransformationMethod.ORIGINAL;\n }\n getReplacement() {\n return SingleLineTransformationMethod.REPLACEMENT;\n }\n static getInstance() {\n if (SingleLineTransformationMethod.sInstance != null)\n return SingleLineTransformationMethod.sInstance;\n SingleLineTransformationMethod.sInstance = new SingleLineTransformationMethod();\n return SingleLineTransformationMethod.sInstance;\n }\n }\n SingleLineTransformationMethod.ORIGINAL = ['\\n', '\\r'];\n SingleLineTransformationMethod.REPLACEMENT = [' ', ''];\n method.SingleLineTransformationMethod = SingleLineTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var util;\n (function (util) {\n class NumberChecker {\n static warnNotNumber(...n) {\n try {\n this.assetNotNumber(...n);\n }\n catch (e) {\n console.error(e);\n return true;\n }\n return false;\n }\n static assetNotNumber(...ns) {\n if (!this.checkIsNumber()) {\n throw Error('assetNotNumber : ' + ns);\n }\n }\n static checkIsNumber(...ns) {\n if (ns == null)\n return false;\n for (let n of ns) {\n if (n == null || Number.isNaN(n))\n return false;\n }\n return true;\n }\n }\n util.NumberChecker = NumberChecker;\n })(util = androidui.util || (androidui.util = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ViewConfiguration = android.view.ViewConfiguration;\n var Resources = android.content.res.Resources;\n var SystemClock = android.os.SystemClock;\n var Log = android.util.Log;\n var NumberChecker = androidui.util.NumberChecker;\n class OverScroller {\n constructor(interpolator, flywheel = true) {\n this.mMode = 0;\n this.mFlywheel = true;\n this.mInterpolator = interpolator;\n this.mFlywheel = flywheel;\n this.mScrollerX = new SplineOverScroller();\n this.mScrollerY = new SplineOverScroller();\n }\n setInterpolator(interpolator) {\n this.mInterpolator = interpolator;\n }\n setFriction(friction) {\n NumberChecker.warnNotNumber(friction);\n this.mScrollerX.setFriction(friction);\n this.mScrollerY.setFriction(friction);\n }\n isFinished() {\n return this.mScrollerX.mFinished && this.mScrollerY.mFinished;\n }\n forceFinished(finished) {\n this.mScrollerX.mFinished = this.mScrollerY.mFinished = finished;\n }\n getCurrX() {\n return this.mScrollerX.mCurrentPosition;\n }\n getCurrY() {\n return this.mScrollerY.mCurrentPosition;\n }\n getCurrVelocity() {\n let squaredNorm = this.mScrollerX.mCurrVelocity * this.mScrollerX.mCurrVelocity;\n squaredNorm += this.mScrollerY.mCurrVelocity * this.mScrollerY.mCurrVelocity;\n return Math.sqrt(squaredNorm);\n }\n getStartX() {\n return this.mScrollerX.mStart;\n }\n getStartY() {\n return this.mScrollerY.mStart;\n }\n getFinalX() {\n return this.mScrollerX.mFinal;\n }\n getFinalY() {\n return this.mScrollerY.mFinal;\n }\n getDuration() {\n return Math.max(this.mScrollerX.mDuration, this.mScrollerY.mDuration);\n }\n computeScrollOffset() {\n if (this.isFinished()) {\n return false;\n }\n switch (this.mMode) {\n case OverScroller.SCROLL_MODE:\n let time = SystemClock.uptimeMillis();\n const elapsedTime = time - this.mScrollerX.mStartTime;\n const duration = this.mScrollerX.mDuration;\n if (elapsedTime < duration) {\n let q = (elapsedTime) / duration;\n if (this.mInterpolator == null) {\n q = Scroller_viscousFluid(q);\n }\n else {\n q = this.mInterpolator.getInterpolation(q);\n }\n this.mScrollerX.updateScroll(q);\n this.mScrollerY.updateScroll(q);\n }\n else {\n this.abortAnimation();\n }\n break;\n case OverScroller.FLING_MODE:\n if (!this.mScrollerX.mFinished) {\n if (!this.mScrollerX.update()) {\n if (!this.mScrollerX.continueWhenFinished()) {\n this.mScrollerX.finish();\n }\n }\n }\n if (!this.mScrollerY.mFinished) {\n if (!this.mScrollerY.update()) {\n if (!this.mScrollerY.continueWhenFinished()) {\n this.mScrollerY.finish();\n }\n }\n }\n break;\n }\n return true;\n }\n startScroll(startX, startY, dx, dy, duration = OverScroller.DEFAULT_DURATION) {\n NumberChecker.warnNotNumber(startX, startY, dx, dy, duration);\n this.mMode = OverScroller.SCROLL_MODE;\n this.mScrollerX.startScroll(startX, dx, duration);\n this.mScrollerY.startScroll(startY, dy, duration);\n }\n springBack(startX, startY, minX, maxX, minY, maxY) {\n NumberChecker.warnNotNumber(startX, startY, minX, maxX, minY, maxY);\n this.mMode = OverScroller.FLING_MODE;\n const spingbackX = this.mScrollerX.springback(startX, minX, maxX);\n const spingbackY = this.mScrollerY.springback(startY, minY, maxY);\n return spingbackX || spingbackY;\n }\n fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) {\n NumberChecker.warnNotNumber(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n if (this.mFlywheel && !this.isFinished()) {\n let oldVelocityX = this.mScrollerX.mCurrVelocity;\n let oldVelocityY = this.mScrollerY.mCurrVelocity;\n if (Math_signum(velocityX) == Math_signum(oldVelocityX) &&\n Math_signum(velocityY) == Math_signum(oldVelocityY)) {\n velocityX += oldVelocityX;\n velocityY += oldVelocityY;\n }\n }\n this.mMode = OverScroller.FLING_MODE;\n this.mScrollerX.fling(startX, velocityX, minX, maxX, overX);\n this.mScrollerY.fling(startY, velocityY, minY, maxY, overY);\n }\n notifyHorizontalEdgeReached(startX, finalX, overX) {\n NumberChecker.warnNotNumber(startX, finalX, overX);\n this.mScrollerX.notifyEdgeReached(startX, finalX, overX);\n }\n notifyVerticalEdgeReached(startY, finalY, overY) {\n NumberChecker.warnNotNumber(startY, finalY, overY);\n this.mScrollerY.notifyEdgeReached(startY, finalY, overY);\n }\n isOverScrolled() {\n return ((!this.mScrollerX.mFinished &&\n this.mScrollerX.mState != SplineOverScroller.SPLINE) ||\n (!this.mScrollerY.mFinished &&\n this.mScrollerY.mState != SplineOverScroller.SPLINE));\n }\n abortAnimation() {\n this.mScrollerX.finish();\n this.mScrollerY.finish();\n }\n timePassed() {\n const time = SystemClock.uptimeMillis();\n const startTime = Math.min(this.mScrollerX.mStartTime, this.mScrollerY.mStartTime);\n return (time - startTime);\n }\n isScrollingInDirection(xvel, yvel) {\n const dx = this.mScrollerX.mFinal - this.mScrollerX.mStart;\n const dy = this.mScrollerY.mFinal - this.mScrollerY.mStart;\n return !this.isFinished() && Math_signum(xvel) == Math_signum(dx) &&\n Math_signum(yvel) == Math_signum(dy);\n }\n }\n OverScroller.DEFAULT_DURATION = 250;\n OverScroller.SCROLL_MODE = 0;\n OverScroller.FLING_MODE = 1;\n widget.OverScroller = OverScroller;\n class SplineOverScroller {\n constructor() {\n this.mStart = 0;\n this.mCurrentPosition = 0;\n this.mFinal = 0;\n this.mVelocity = 0;\n this._mCurrVelocity = 0;\n this.mDeceleration = 0;\n this.mStartTime = 0;\n this.mDuration = 0;\n this.mSplineDuration = 0;\n this.mSplineDistance = 0;\n this.mFinished = false;\n this.mOver = 0;\n this.mFlingFriction = ViewConfiguration.getScrollFriction();\n this.mState = SplineOverScroller.SPLINE;\n this.mPhysicalCoeff = 0;\n this.mFinished = true;\n let ppi = Resources.getDisplayMetrics().density * 160;\n this.mPhysicalCoeff = 9.80665\n * 39.37\n * ppi\n * 0.84;\n }\n get mCurrVelocity() {\n return this._mCurrVelocity;\n }\n set mCurrVelocity(value) {\n if (!NumberChecker.checkIsNumber(value)) {\n value = 0;\n }\n this._mCurrVelocity = value;\n }\n setFriction(friction) {\n this.mFlingFriction = friction;\n }\n updateScroll(q) {\n this.mCurrentPosition = this.mStart + Math.round(q * (this.mFinal - this.mStart));\n }\n static getDeceleration(velocity) {\n return velocity > 0 ? -SplineOverScroller.GRAVITY : SplineOverScroller.GRAVITY;\n }\n adjustDuration(start, oldFinal, newFinal) {\n let oldDistance = oldFinal - start;\n let newDistance = newFinal - start;\n let x = Math.abs(newDistance / oldDistance);\n let index = Math.floor(SplineOverScroller.NB_SAMPLES * x);\n if (index < SplineOverScroller.NB_SAMPLES) {\n let x_inf = index / SplineOverScroller.NB_SAMPLES;\n let x_sup = (index + 1) / SplineOverScroller.NB_SAMPLES;\n let t_inf = SplineOverScroller.SPLINE_TIME[index];\n let t_sup = SplineOverScroller.SPLINE_TIME[index + 1];\n let timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf);\n this.mDuration *= timeCoef;\n }\n }\n startScroll(start, distance, duration) {\n this.mFinished = false;\n this.mStart = start;\n this.mFinal = start + distance;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mDuration = duration;\n this.mDeceleration = 0;\n this.mVelocity = 0;\n }\n finish() {\n this.mCurrentPosition = this.mFinal;\n this.mFinished = true;\n }\n setFinalPosition(position) {\n this.mFinal = position;\n this.mFinished = false;\n }\n extendDuration(extend) {\n let time = SystemClock.uptimeMillis();\n let elapsedTime = (time - this.mStartTime);\n this.mDuration = elapsedTime + extend;\n this.mFinished = false;\n }\n springback(start, min, max) {\n this.mFinished = true;\n this.mStart = this.mFinal = start;\n this.mVelocity = 0;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mDuration = 0;\n if (start < min) {\n this.startSpringback(start, min, 0);\n }\n else if (start > max) {\n this.startSpringback(start, max, 0);\n }\n return !this.mFinished;\n }\n startSpringback(start, end, velocity) {\n this.mFinished = false;\n this.mState = SplineOverScroller.CUBIC;\n this.mStart = start;\n this.mFinal = end;\n const delta = start - end;\n this.mDeceleration = SplineOverScroller.getDeceleration(delta);\n this.mVelocity = -delta;\n this.mOver = Math.abs(delta);\n const density = android.content.res.Resources.getDisplayMetrics().density;\n this.mDuration = Math.floor(1000.0 * Math.sqrt(-2.0 * (delta / density) / this.mDeceleration));\n }\n fling(start, velocity, min, max, over) {\n this.mOver = over;\n this.mFinished = false;\n this.mCurrVelocity = this.mVelocity = velocity;\n this.mDuration = this.mSplineDuration = 0;\n this.mStartTime = SystemClock.uptimeMillis();\n this.mCurrentPosition = this.mStart = start;\n if (start > max || start < min) {\n this.startAfterEdge(start, min, max, velocity);\n return;\n }\n this.mState = SplineOverScroller.SPLINE;\n let totalDistance = 0.0;\n if (velocity != 0) {\n this.mDuration = this.mSplineDuration = this.getSplineFlingDuration(velocity);\n totalDistance = this.getSplineFlingDistance(velocity);\n }\n this.mSplineDistance = (totalDistance * Math_signum(velocity));\n this.mFinal = start + this.mSplineDistance;\n if (this.mFinal < min) {\n this.adjustDuration(this.mStart, this.mFinal, min);\n this.mFinal = min;\n }\n if (this.mFinal > max) {\n this.adjustDuration(this.mStart, this.mFinal, max);\n this.mFinal = max;\n }\n }\n getSplineDeceleration(velocity) {\n return Math.log(SplineOverScroller.INFLEXION * Math.abs(velocity) / (this.mFlingFriction * this.mPhysicalCoeff));\n }\n getSplineFlingDistance(velocity) {\n let l = this.getSplineDeceleration(velocity);\n let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0;\n return this.mFlingFriction * this.mPhysicalCoeff * Math.exp(SplineOverScroller.DECELERATION_RATE / decelMinusOne * l);\n }\n getSplineFlingDuration(velocity) {\n let l = this.getSplineDeceleration(velocity);\n let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0;\n return (1000.0 * Math.exp(l / decelMinusOne));\n }\n fitOnBounceCurve(start, end, velocity) {\n let durationToApex = -velocity / this.mDeceleration;\n let distanceToApex = velocity * velocity / 2.0 / Math.abs(this.mDeceleration);\n let distanceToEdge = Math.abs(end - start);\n let totalDuration = Math.sqrt(2.0 * (distanceToApex + distanceToEdge) / Math.abs(this.mDeceleration));\n this.mStartTime -= (1000 * (totalDuration - durationToApex));\n this.mStart = end;\n this.mVelocity = (-this.mDeceleration * totalDuration);\n }\n startBounceAfterEdge(start, end, velocity) {\n this.mDeceleration = SplineOverScroller.getDeceleration(velocity == 0 ? start - end : velocity);\n this.fitOnBounceCurve(start, end, velocity);\n this.onEdgeReached();\n }\n startAfterEdge(start, min, max, velocity) {\n if (start > min && start < max) {\n Log.e(\"OverScroller\", \"startAfterEdge called from a valid position\");\n this.mFinished = true;\n return;\n }\n const positive = start > max;\n const edge = positive ? max : min;\n const overDistance = start - edge;\n let keepIncreasing = overDistance * velocity >= 0;\n if (keepIncreasing) {\n this.startBounceAfterEdge(start, edge, velocity);\n }\n else {\n const totalDistance = this.getSplineFlingDistance(velocity);\n if (totalDistance > Math.abs(overDistance)) {\n this.fling(start, velocity, positive ? min : start, positive ? start : max, this.mOver);\n }\n else {\n this.startSpringback(start, edge, velocity);\n }\n }\n }\n notifyEdgeReached(start, end, over) {\n if (this.mState == SplineOverScroller.SPLINE) {\n this.mOver = over;\n this.mStartTime = SystemClock.uptimeMillis();\n this.startAfterEdge(start, end, end, this.mCurrVelocity);\n }\n }\n onEdgeReached() {\n let distance = this.mVelocity * this.mVelocity / (2 * Math.abs(this.mDeceleration));\n const sign = Math_signum(this.mVelocity);\n if (distance > this.mOver) {\n this.mDeceleration = -sign * this.mVelocity * this.mVelocity / (2.0 * this.mOver);\n distance = this.mOver;\n }\n this.mOver = distance;\n this.mState = SplineOverScroller.BALLISTIC;\n this.mFinal = this.mStart + (this.mVelocity > 0 ? distance : -distance);\n this.mDuration = -(1000 * this.mVelocity / this.mDeceleration);\n }\n continueWhenFinished() {\n switch (this.mState) {\n case SplineOverScroller.SPLINE:\n if (this.mDuration < this.mSplineDuration) {\n this.mStart = this.mFinal;\n this.mVelocity = this.mCurrVelocity;\n this.mDeceleration = SplineOverScroller.getDeceleration(this.mVelocity);\n this.mStartTime += this.mDuration;\n this.onEdgeReached();\n }\n else {\n return false;\n }\n break;\n case SplineOverScroller.BALLISTIC:\n this.mStartTime += this.mDuration;\n this.startSpringback(this.mFinal, this.mStart, 0);\n break;\n case SplineOverScroller.CUBIC:\n return false;\n }\n this.update();\n return true;\n }\n update() {\n const time = SystemClock.uptimeMillis();\n const currentTime = time - this.mStartTime;\n if (currentTime > this.mDuration) {\n return false;\n }\n let distance = 0;\n switch (this.mState) {\n case SplineOverScroller.SPLINE: {\n const t = currentTime / this.mSplineDuration;\n const index = Math.floor(SplineOverScroller.NB_SAMPLES * t);\n let distanceCoef = 1;\n let velocityCoef = 0;\n if (index < SplineOverScroller.NB_SAMPLES) {\n const t_inf = index / SplineOverScroller.NB_SAMPLES;\n const t_sup = (index + 1) / SplineOverScroller.NB_SAMPLES;\n const d_inf = SplineOverScroller.SPLINE_POSITION[index];\n const d_sup = SplineOverScroller.SPLINE_POSITION[index + 1];\n velocityCoef = (d_sup - d_inf) / (t_sup - t_inf);\n distanceCoef = d_inf + (t - t_inf) * velocityCoef;\n }\n distance = distanceCoef * this.mSplineDistance;\n this.mCurrVelocity = velocityCoef * this.mSplineDistance / this.mSplineDuration * 1000;\n break;\n }\n case SplineOverScroller.BALLISTIC: {\n const t = currentTime / 1000;\n this.mCurrVelocity = this.mVelocity + this.mDeceleration * t;\n distance = this.mVelocity * t + this.mDeceleration * t * t / 2;\n break;\n }\n case SplineOverScroller.CUBIC: {\n const t = (currentTime) / this.mDuration;\n const t2 = t * t;\n const sign = Math_signum(this.mVelocity);\n distance = sign * this.mOver * (3 * t2 - 2 * t * t2);\n this.mCurrVelocity = sign * this.mOver * 6 * (-t + t2);\n break;\n }\n }\n this.mCurrentPosition = this.mStart + Math.round(distance);\n return true;\n }\n }\n SplineOverScroller.DECELERATION_RATE = (Math.log(0.78) / Math.log(0.9));\n SplineOverScroller.INFLEXION = 0.35;\n SplineOverScroller.START_TENSION = 0.5;\n SplineOverScroller.END_TENSION = 1.0;\n SplineOverScroller.P1 = SplineOverScroller.START_TENSION * SplineOverScroller.INFLEXION;\n SplineOverScroller.P2 = 1.0 - SplineOverScroller.END_TENSION * (1 - SplineOverScroller.INFLEXION);\n SplineOverScroller.NB_SAMPLES = 100;\n SplineOverScroller.SPLINE_POSITION = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE_TIME = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE = 0;\n SplineOverScroller.CUBIC = 1;\n SplineOverScroller.BALLISTIC = 2;\n SplineOverScroller.GRAVITY = 2000;\n SplineOverScroller._staticFunc = function () {\n let x_min = 0.0;\n let y_min = 0.0;\n for (let i = 0; i < SplineOverScroller.NB_SAMPLES; i++) {\n const alpha = i / SplineOverScroller.NB_SAMPLES;\n let x_max = 1.0;\n let x, tx, coef;\n while (true) {\n x = x_min + (x_max - x_min) / 2.0;\n coef = 3.0 * x * (1.0 - x);\n tx = coef * ((1.0 - x) * SplineOverScroller.P1 + x * SplineOverScroller.P2) + x * x * x;\n if (Math.abs(tx - alpha) < 1E-5)\n break;\n if (tx > alpha)\n x_max = x;\n else\n x_min = x;\n }\n SplineOverScroller.SPLINE_POSITION[i] = coef * ((1.0 - x) * SplineOverScroller.START_TENSION + x) + x * x * x;\n let y_max = 1.0;\n let y, dy;\n while (true) {\n y = y_min + (y_max - y_min) / 2.0;\n coef = 3.0 * y * (1.0 - y);\n dy = coef * ((1.0 - y) * SplineOverScroller.START_TENSION + y) + y * y * y;\n if (Math.abs(dy - alpha) < 1E-5)\n break;\n if (dy > alpha)\n y_max = y;\n else\n y_min = y;\n }\n SplineOverScroller.SPLINE_TIME[i] = coef * ((1.0 - y) * SplineOverScroller.P1 + y * SplineOverScroller.P2) + y * y * y;\n }\n SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES] = SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES] = 1.0;\n }();\n function Math_signum(value) {\n if (value === 0 || Number.isNaN(value))\n return value;\n return Math.abs(value) === value ? 1 : -1;\n }\n let sViscousFluidScale = 8;\n let sViscousFluidNormalize = 1;\n function Scroller_viscousFluid(x) {\n x *= sViscousFluidScale;\n if (x < 1) {\n x -= (1 - Math.exp(-x));\n }\n else {\n let start = 0.36787944117;\n x = 1 - Math.exp(1 - x);\n x = start + x * (1 - start);\n }\n x *= sViscousFluidNormalize;\n return x;\n }\n sViscousFluidNormalize = 1 / Scroller_viscousFluid(1);\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ColorStateList = android.content.res.ColorStateList;\n var Paint = android.graphics.Paint;\n var Path = android.graphics.Path;\n var Rect = android.graphics.Rect;\n var Color = android.graphics.Color;\n var RectF = android.graphics.RectF;\n var Handler = android.os.Handler;\n var BoringLayout = android.text.BoringLayout;\n var DynamicLayout = android.text.DynamicLayout;\n var Layout = android.text.Layout;\n var Spannable = android.text.Spannable;\n var Spanned = android.text.Spanned;\n var StaticLayout = android.text.StaticLayout;\n var TextDirectionHeuristics = android.text.TextDirectionHeuristics;\n var TextPaint = android.text.TextPaint;\n var TextUtils = android.text.TextUtils;\n var TruncateAt = android.text.TextUtils.TruncateAt;\n var AllCapsTransformationMethod = android.text.method.AllCapsTransformationMethod;\n var SingleLineTransformationMethod = android.text.method.SingleLineTransformationMethod;\n var TransformationMethod2 = android.text.method.TransformationMethod2;\n var Log = android.util.Log;\n var TypedValue = android.util.TypedValue;\n var Gravity = android.view.Gravity;\n var HapticFeedbackConstants = android.view.HapticFeedbackConstants;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var WeakReference = java.lang.ref.WeakReference;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n class TextView extends View {\n constructor(context, bindElement, defStyle = android.R.attr.textViewStyle) {\n super(context, bindElement, defStyle);\n this.mTextColor = ColorStateList.valueOf(Color.BLACK);\n this.mCurTextColor = 0;\n this.mCurHintTextColor = 0;\n this.mSpannableFactory = Spannable.Factory.getInstance();\n this.mShadowRadius = 0;\n this.mShadowDx = 0;\n this.mShadowDy = 0;\n this.mMarqueeRepeatLimit = 3;\n this.mLastLayoutDirection = -1;\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL;\n this.mBufferType = TextView.BufferType.NORMAL;\n this.mGravity = Gravity.TOP | Gravity.LEFT;\n this.mAutoLinkMask = 0;\n this.mLinksClickable = true;\n this.mSpacingMult = 1.0;\n this.mSpacingAdd = 0.0;\n this.mMaximum = Integer.MAX_VALUE;\n this.mMaxMode = TextView.LINES;\n this.mMinimum = 0;\n this.mMinMode = TextView.LINES;\n this.mOldMaximum = this.mMaximum;\n this.mOldMaxMode = this.mMaxMode;\n this.mMaxWidthValue = Integer.MAX_VALUE;\n this.mMaxWidthMode = TextView.PIXELS;\n this.mMinWidthValue = 0;\n this.mMinWidthMode = TextView.PIXELS;\n this.mDesiredHeightAtMeasure = -1;\n this.mIncludePad = true;\n this.mDeferScroll = -1;\n this.mLastScroll = 0;\n this.mFilters = TextView.NO_FILTERS;\n this.mHighlightColor = 0x6633B5E5;\n this.mHighlightPathBogus = true;\n this.mCursorDrawableRes = 0;\n this.mTextSelectHandleLeftRes = 0;\n this.mTextSelectHandleRightRes = 0;\n this.mTextSelectHandleRes = 0;\n this.mTextEditSuggestionItemLayout = 0;\n this.mSkipDrawText = false;\n this.mText = \"\";\n this.mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);\n this.mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n this.mMovement = this.getDefaultMovementMethod();\n this.mTransformation = null;\n let textColorHighlight = 0;\n let textColor = null;\n let textColorHint = null;\n let textColorLink = null;\n let textSize = 14 * this.getResources().getDisplayMetrics().density;\n let allCaps = false;\n let shadowcolor = 0;\n let dx = 0, dy = 0, r = 0;\n let editable = this.getDefaultEditable();\n let numeric = 0;\n let digits = null;\n let drawableLeft = null, drawableTop = null, drawableRight = null, drawableBottom = null, drawableStart = null, drawableEnd = null;\n let drawablePadding = 0;\n let ellipsize;\n let singleLine = false;\n let maxlength = -1;\n let text = \"\";\n let hint = null;\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n for (let attr of a.getLowerCaseNoNamespaceAttrNames()) {\n switch (attr) {\n case 'editable':\n editable = a.getBoolean(attr, editable);\n break;\n case 'inputmethod':\n break;\n case 'numeric':\n numeric = a.getInt(attr, numeric);\n break;\n case 'digits':\n digits = a.getText(attr);\n break;\n case 'phonenumber':\n break;\n case 'autotext':\n break;\n case 'capitalize':\n break;\n case 'buffertype':\n break;\n case 'selectallonfocus':\n break;\n case 'autolink':\n this.mAutoLinkMask = a.getInt(attr, 0);\n break;\n case 'linksclickable':\n this.mLinksClickable = a.getBoolean(attr, true);\n break;\n case 'drawableleft':\n drawableLeft = a.getDrawable(attr);\n break;\n case 'drawabletop':\n drawableTop = a.getDrawable(attr);\n break;\n case 'drawableright':\n drawableRight = a.getDrawable(attr);\n break;\n case 'drawablebottom':\n drawableBottom = a.getDrawable(attr);\n break;\n case 'drawablestart':\n drawableStart = a.getDrawable(attr);\n break;\n case 'drawableend':\n drawableEnd = a.getDrawable(attr);\n break;\n case 'drawablepadding':\n drawablePadding = a.getDimensionPixelSize(attr, drawablePadding);\n break;\n case 'maxlines':\n this.setMaxLines(a.getInt(attr, -1));\n break;\n case 'maxheight':\n this.setMaxHeight(a.getDimensionPixelSize(attr, -1));\n break;\n case 'lines':\n this.setLines(a.getInt(attr, -1));\n break;\n case 'height':\n this.setHeight(a.getDimensionPixelSize(attr, -1));\n break;\n case 'minlines':\n this.setMinLines(a.getInt(attr, -1));\n break;\n case 'minheight':\n this.setMinHeight(a.getDimensionPixelSize(attr, -1));\n break;\n case 'maxems':\n this.setMaxEms(a.getInt(attr, -1));\n break;\n case 'maxwidth':\n this.setMaxWidth(a.getDimensionPixelSize(attr, -1));\n break;\n case 'ems':\n this.setEms(a.getInt(attr, -1));\n break;\n case 'width':\n this.setWidth(a.getDimensionPixelSize(attr, -1));\n break;\n case 'minems':\n this.setMinEms(a.getInt(attr, -1));\n break;\n case 'minwidth':\n this.setMinWidth(a.getDimensionPixelSize(attr, -1));\n break;\n case 'gravity':\n this.setGravity(Gravity.parseGravity(a.getAttrValue(attr), -1));\n break;\n case 'hint':\n hint = a.getText(attr);\n break;\n case 'text':\n text = a.getText(attr);\n break;\n case 'scrollhorizontally':\n if (a.getBoolean(attr, false)) {\n this.setHorizontallyScrolling(true);\n }\n break;\n case 'singleline':\n singleLine = a.getBoolean(attr, singleLine);\n break;\n case 'ellipsize':\n ellipsize = TextUtils.TruncateAt[(a.getAttrValue(attr) + '').toUpperCase()];\n break;\n case 'marqueerepeatlimit':\n this.setMarqueeRepeatLimit(a.getInt(attr, this.mMarqueeRepeatLimit));\n break;\n case 'includefontpadding':\n if (!a.getBoolean(attr, true)) {\n this.setIncludeFontPadding(false);\n }\n break;\n case 'cursorvisible':\n if (!a.getBoolean(attr, true)) {\n this.setCursorVisible(false);\n }\n break;\n case 'maxlength':\n maxlength = a.getInt(attr, -1);\n break;\n case 'textscalex':\n this.setTextScaleX(a.getFloat(attr, 1.0));\n break;\n case 'freezestext':\n this.mFreezesText = a.getBoolean(attr, false);\n break;\n case 'shadowcolor':\n shadowcolor = a.getInt(attr, 0);\n break;\n case 'shadowdx':\n dx = a.getFloat(attr, 0);\n break;\n case 'shadowdy':\n dy = a.getFloat(attr, 0);\n break;\n case 'shadowradius':\n r = a.getFloat(attr, 0);\n break;\n case 'enabled':\n this.setEnabled(a.getBoolean(attr, this.isEnabled()));\n break;\n case 'textcolorhighlight':\n textColorHighlight = a.getColor(attr, textColorHighlight);\n break;\n case 'textcolor':\n textColor = a.getColorStateList(attr);\n break;\n case 'textcolorhint':\n textColorHint = a.getColorStateList(attr);\n break;\n case 'textcolorlink':\n textColorLink = a.getColorStateList(attr);\n break;\n case 'textsize':\n textSize = a.getDimensionPixelSize(attr, textSize);\n break;\n case 'typeface':\n break;\n case 'textstyle':\n break;\n case 'fontfamily':\n break;\n case 'password':\n break;\n case 'linespacingextra':\n this.mSpacingAdd = a.getDimensionPixelSize(attr, Math.floor(this.mSpacingAdd));\n break;\n case 'linespacingmultiplier':\n this.mSpacingMult = a.getFloat(attr, this.mSpacingMult);\n break;\n case 'inputtype':\n break;\n case 'imeoptions':\n break;\n case 'imeactionlabel':\n break;\n case 'imeactionid':\n break;\n case 'privateimeoptions':\n break;\n case 'editorextras':\n break;\n case 'textcursordrawable':\n break;\n case 'textselecthandleleft':\n break;\n case 'textselecthandleright':\n break;\n case 'textselecthandle':\n break;\n case 'texteditsuggestionitemlayout':\n break;\n case 'textisselectable':\n this.setTextIsSelectable(a.getBoolean(attr, false));\n break;\n case 'textallcaps':\n allCaps = a.getBoolean(attr, false);\n break;\n }\n }\n a.recycle();\n let bufferType = this.mBufferType;\n this.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, drawableTop, drawableRight, drawableBottom);\n this.setRelativeDrawablesIfNeeded(drawableStart, drawableEnd);\n this.setCompoundDrawablePadding(drawablePadding);\n this.setInputTypeSingleLine(singleLine);\n this.applySingleLine(singleLine, singleLine, singleLine);\n if (singleLine && this.getKeyListener() == null && ellipsize == null) {\n ellipsize = TextUtils.TruncateAt.END;\n }\n switch (ellipsize) {\n case TextUtils.TruncateAt.START:\n this.setEllipsize(TextUtils.TruncateAt.START);\n break;\n case TextUtils.TruncateAt.MIDDLE:\n this.setEllipsize(TextUtils.TruncateAt.MIDDLE);\n break;\n case TextUtils.TruncateAt.END:\n this.setEllipsize(TextUtils.TruncateAt.END);\n break;\n case TextUtils.TruncateAt.MARQUEE:\n this.setHorizontalFadingEdgeEnabled(false);\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;\n this.setEllipsize(TextUtils.TruncateAt.MARQUEE);\n break;\n }\n this.setTextColor(textColor != null ? textColor : ColorStateList.valueOf(0xFF000000));\n this.setHintTextColor(textColorHint);\n this.setLinkTextColor(textColorLink);\n if (textColorHighlight != 0) {\n this.setHighlightColor(textColorHighlight);\n }\n this.setRawTextSize(textSize);\n if (allCaps) {\n this.setTransformationMethod(new AllCapsTransformationMethod(this.getContext()));\n }\n if (shadowcolor != 0) {\n this.setShadowLayer(r, dx, dy, shadowcolor);\n }\n this.setText(text, bufferType);\n if (hint != null)\n this.setHint(hint);\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder()\n .set('textColorHighlight', {\n setter(v, value, attrBinder) {\n v.setHighlightColor(attrBinder.parseColor(value, v.mHighlightColor));\n },\n getter(v) {\n return v.getHighlightColor();\n }\n }).set('textColor', {\n setter(v, value, attrBinder) {\n let color = attrBinder.parseColorList(value);\n if (color)\n v.setTextColor(color);\n },\n getter(v) {\n return v.mTextColor;\n }\n }).set('textColorHint', {\n setter(v, value, attrBinder) {\n let color = attrBinder.parseColorList(value);\n if (color)\n v.setHintTextColor(color);\n },\n getter(v) {\n return v.mHintTextColor;\n }\n }).set('textSize', {\n setter(v, value, attrBinder) {\n let size = attrBinder.parseNumberPixelSize(value, v.mTextPaint.getTextSize());\n v.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);\n },\n getter(v) {\n return v.mTextPaint.getTextSize();\n }\n }).set('textAllCaps', {\n setter(v, value, attrBinder) {\n v.setAllCaps(attrBinder.parseBoolean(value, true));\n }\n }).set('shadowColor', {\n setter(v, value, attrBinder) {\n v.setShadowLayer(v.mShadowRadius, v.mShadowDx, v.mShadowDy, attrBinder.parseColor(value, v.mTextPaint.shadowColor));\n },\n getter(v) {\n return v.getShadowColor();\n }\n }).set('shadowDx', {\n setter(v, value, attrBinder) {\n let dx = attrBinder.parseNumberPixelSize(value, v.mShadowDx);\n v.setShadowLayer(v.mShadowRadius, dx, v.mShadowDy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowDx();\n }\n }).set('shadowDy', {\n setter(v, value, attrBinder) {\n let dy = attrBinder.parseNumberPixelSize(value, v.mShadowDy);\n v.setShadowLayer(v.mShadowRadius, v.mShadowDx, dy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowDy();\n }\n }).set('shadowRadius', {\n setter(v, value, attrBinder) {\n let radius = attrBinder.parseNumberPixelSize(value, v.mShadowRadius);\n v.setShadowLayer(radius, v.mShadowDx, v.mShadowDy, v.mTextPaint.shadowColor);\n },\n getter(v) {\n return v.getShadowRadius();\n }\n }).set('drawableLeft', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[0];\n }\n }).set('drawableStart', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[0];\n }\n }).set('drawableTop', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[1];\n }\n }).set('drawableRight', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[2];\n }\n }).set('drawableEnd', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n },\n getter(v) {\n return v.getCompoundDrawables()[2];\n }\n }).set('drawableBottom', {\n setter(v, value, attrBinder) {\n let dr = v.mDrawables || {};\n let drawable = attrBinder.parseDrawable(value);\n v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable);\n },\n getter(v) {\n return v.getCompoundDrawables()[3];\n }\n }).set('drawablePadding', {\n setter(v, value, attrBinder) {\n v.setCompoundDrawablePadding(attrBinder.parseNumberPixelSize(value));\n },\n getter(v) {\n return v.getCompoundDrawablePadding();\n }\n }).set('maxLines', {\n setter(v, value, attrBinder) {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n v.setMaxLines(value);\n },\n getter(v) {\n return v.getMaxLines();\n }\n }).set('maxHeight', {\n setter(v, value, attrBinder) {\n v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.getMaxHeight()));\n },\n getter(v) {\n return v.getMaxHeight();\n }\n }).set('lines', {\n setter(v, value, attrBinder) {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n v.setLines(value);\n },\n getter(v) {\n if (v.getMaxLines() === v.getMinLines())\n return v.getMaxLines();\n return null;\n }\n }).set('height', {\n setter(v, value, attrBinder) {\n value = attrBinder.parseNumberPixelSize(value, -1);\n if (value >= 0)\n v.setHeight(value);\n },\n getter(v) {\n if (v.getMaxHeight() === v.getMinimumHeight())\n return v.getMaxHeight();\n return null;\n }\n }).set('minLines', {\n setter(v, value, attrBinder) {\n v.setMinLines(attrBinder.parseInt(value, v.getMinLines()));\n },\n getter(v) {\n return v.getMinLines();\n }\n }).set('minHeight', {\n setter(v, value, attrBinder) {\n v.setMinHeight(attrBinder.parseNumberPixelSize(value, v.getMinHeight()));\n },\n getter(v) {\n return v.getMinHeight();\n }\n }).set('maxEms', {\n setter(v, value, attrBinder) {\n v.setMaxEms(attrBinder.parseInt(value, v.getMaxEms()));\n },\n getter(v) {\n return v.getMaxEms();\n }\n }).set('maxWidth', {\n setter(v, value, attrBinder) {\n v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.getMaxWidth()));\n },\n getter(v) {\n return v.getMaxWidth();\n }\n }).set('ems', {\n setter(v, value, attrBinder) {\n let ems = attrBinder.parseInt(value, null);\n if (ems != null)\n v.setEms(ems);\n },\n getter(v) {\n if (v.getMinEms() === v.getMaxEms())\n return v.getMaxEms();\n return null;\n }\n }).set('width', {\n setter(v, value, attrBinder) {\n value = attrBinder.parseNumberPixelSize(value, -1);\n if (value >= 0)\n v.setWidth(value);\n },\n getter(v) {\n if (v.getMinWidth() === v.getMaxWidth())\n return v.getMinWidth();\n return null;\n }\n }).set('minEms', {\n setter(v, value, attrBinder) {\n v.setMinEms(attrBinder.parseInt(value, v.getMinEms()));\n },\n getter(v) {\n return v.getMinEms();\n }\n }).set('minWidth', {\n setter(v, value, attrBinder) {\n v.setMinWidth(attrBinder.parseNumberPixelSize(value, v.getMinWidth()));\n },\n getter(v) {\n return v.getMinWidth();\n }\n }).set('gravity', {\n setter(v, value, attrBinder) {\n v.setGravity(attrBinder.parseGravity(value, v.mGravity));\n },\n getter(v) {\n return v.mGravity;\n }\n }).set('hint', {\n setter(v, value, attrBinder) {\n v.setHint(attrBinder.parseString(value));\n },\n getter(v) {\n return v.getHint();\n }\n }).set('text', {\n setter(v, value, attrBinder) {\n v.setText(attrBinder.parseString(value));\n },\n getter(v) {\n return v.getText();\n }\n }).set('scrollHorizontally', {\n setter(v, value, attrBinder) {\n v.setHorizontallyScrolling(attrBinder.parseBoolean(value, false));\n }\n }).set('singleLine', {\n setter(v, value, attrBinder) {\n v.setSingleLine(attrBinder.parseBoolean(value, false));\n }\n }).set('ellipsize', {\n setter(v, value, attrBinder) {\n let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()];\n if (ellipsize)\n v.setEllipsize(ellipsize);\n }\n }).set('marqueeRepeatLimit', {\n setter(v, value, attrBinder) {\n let marqueeRepeatLimit = attrBinder.parseInt(value, -1);\n if (marqueeRepeatLimit >= 0)\n v.setMarqueeRepeatLimit(marqueeRepeatLimit);\n }\n }).set('includeFontPadding', {\n setter(v, value, attrBinder) {\n v.setIncludeFontPadding(attrBinder.parseBoolean(value, false));\n }\n }).set('enabled', {\n setter(v, value, attrBinder) {\n v.setEnabled(attrBinder.parseBoolean(value, v.isEnabled()));\n },\n getter(v) {\n return v.isEnabled();\n }\n }).set('lineSpacingExtra', {\n setter(v, value, attrBinder) {\n v.setLineSpacing(attrBinder.parseNumberPixelSize(value, v.mSpacingAdd), v.mSpacingMult);\n },\n getter(v) {\n return v.mSpacingAdd;\n }\n }).set('lineSpacingMultiplier', {\n setter(v, value, attrBinder) {\n v.setLineSpacing(v.mSpacingAdd, attrBinder.parseFloat(value, v.mSpacingMult));\n },\n getter(v) {\n return v.mSpacingMult;\n }\n });\n }\n setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex) {\n }\n setRelativeDrawablesIfNeeded(start, end) {\n let hasRelativeDrawables = (start != null) || (end != null);\n if (hasRelativeDrawables) {\n let dr = this.mDrawables;\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = true;\n const compoundRect = dr.mCompoundRect;\n let state = this.getDrawableState();\n if (start != null) {\n start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight());\n start.setState(state);\n start.copyBounds(compoundRect);\n start.setCallback(this);\n dr.mDrawableStart = start;\n dr.mDrawableSizeStart = compoundRect.width();\n dr.mDrawableHeightStart = compoundRect.height();\n }\n else {\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n }\n if (end != null) {\n end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight());\n end.setState(state);\n end.copyBounds(compoundRect);\n end.setCallback(this);\n dr.mDrawableEnd = end;\n dr.mDrawableSizeEnd = compoundRect.width();\n dr.mDrawableHeightEnd = compoundRect.height();\n }\n else {\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n }\n }\n setEnabled(enabled) {\n if (enabled == this.isEnabled()) {\n return;\n }\n super.setEnabled(enabled);\n }\n setTypeface(tf, style) {\n }\n getDefaultEditable() {\n return false;\n }\n getDefaultMovementMethod() {\n return null;\n }\n getText() {\n return this.mText;\n }\n length() {\n return this.mText.length;\n }\n getEditableText() {\n return null;\n }\n getLineHeight() {\n return Math.round(this.mTextPaint.getFontMetricsInt(null) * this.mSpacingMult + this.mSpacingAdd);\n }\n getLayout() {\n return this.mLayout;\n }\n getHintLayout() {\n return this.mHintLayout;\n }\n getUndoManager() {\n return null;\n }\n setUndoManager(undoManager, tag) {\n }\n getKeyListener() {\n return null;\n }\n setKeyListener(input) {\n }\n setKeyListenerOnly(input) {\n }\n getMovementMethod() {\n return this.mMovement;\n }\n setMovementMethod(movement) {\n if (this.mMovement != movement) {\n this.mMovement = movement;\n if (movement != null && !Spannable.isImpl(this.mText)) {\n this.setText(this.mText);\n }\n this.fixFocusableAndClickableSettings();\n }\n }\n fixFocusableAndClickableSettings() {\n if (this.mMovement != null) {\n this.setFocusable(true);\n this.setClickable(true);\n this.setLongClickable(true);\n }\n else {\n this.setFocusable(false);\n this.setClickable(false);\n this.setLongClickable(false);\n }\n }\n getTransformationMethod() {\n return this.mTransformation;\n }\n setTransformationMethod(method) {\n if (method == this.mTransformation) {\n return;\n }\n if (this.mTransformation != null) {\n if (Spannable.isImpl(this.mText)) {\n this.mText.removeSpan(this.mTransformation);\n }\n }\n this.mTransformation = method;\n if (TransformationMethod2.isImpl(method)) {\n let method2 = method;\n this.mAllowTransformationLengthChange = !this.isTextSelectable();\n method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange);\n }\n else {\n this.mAllowTransformationLengthChange = false;\n }\n this.setText(this.mText);\n }\n getCompoundPaddingTop() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableTop == null) {\n return this.mPaddingTop;\n }\n else {\n return this.mPaddingTop + dr.mDrawablePadding + dr.mDrawableSizeTop;\n }\n }\n getCompoundPaddingBottom() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableBottom == null) {\n return this.mPaddingBottom;\n }\n else {\n return this.mPaddingBottom + dr.mDrawablePadding + dr.mDrawableSizeBottom;\n }\n }\n getCompoundPaddingLeft() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableLeft == null) {\n return this.mPaddingLeft;\n }\n else {\n return this.mPaddingLeft + dr.mDrawablePadding + dr.mDrawableSizeLeft;\n }\n }\n getCompoundPaddingRight() {\n const dr = this.mDrawables;\n if (dr == null || dr.mDrawableRight == null) {\n return this.mPaddingRight;\n }\n else {\n return this.mPaddingRight + dr.mDrawablePadding + dr.mDrawableSizeRight;\n }\n }\n getCompoundPaddingStart() {\n this.resolveDrawables();\n return this.getCompoundPaddingLeft();\n }\n getCompoundPaddingEnd() {\n this.resolveDrawables();\n return this.getCompoundPaddingRight();\n }\n getExtendedPaddingTop() {\n if (this.mMaxMode != TextView.LINES) {\n return this.getCompoundPaddingTop();\n }\n if (this.mLayout.getLineCount() <= this.mMaximum) {\n return this.getCompoundPaddingTop();\n }\n let top = this.getCompoundPaddingTop();\n let bottom = this.getCompoundPaddingBottom();\n let viewht = this.getHeight() - top - bottom;\n let layoutht = this.mLayout.getLineTop(this.mMaximum);\n if (layoutht >= viewht) {\n return top;\n }\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (gravity == Gravity.TOP) {\n return top;\n }\n else if (gravity == Gravity.BOTTOM) {\n return top + viewht - layoutht;\n }\n else {\n return top + (viewht - layoutht) / 2;\n }\n }\n getExtendedPaddingBottom() {\n if (this.mMaxMode != TextView.LINES) {\n return this.getCompoundPaddingBottom();\n }\n if (this.mLayout.getLineCount() <= this.mMaximum) {\n return this.getCompoundPaddingBottom();\n }\n let top = this.getCompoundPaddingTop();\n let bottom = this.getCompoundPaddingBottom();\n let viewht = this.getHeight() - top - bottom;\n let layoutht = this.mLayout.getLineTop(this.mMaximum);\n if (layoutht >= viewht) {\n return bottom;\n }\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if (gravity == Gravity.TOP) {\n return bottom + viewht - layoutht;\n }\n else if (gravity == Gravity.BOTTOM) {\n return bottom;\n }\n else {\n return bottom + (viewht - layoutht) / 2;\n }\n }\n getTotalPaddingLeft() {\n return this.getCompoundPaddingLeft();\n }\n getTotalPaddingRight() {\n return this.getCompoundPaddingRight();\n }\n getTotalPaddingStart() {\n return this.getCompoundPaddingStart();\n }\n getTotalPaddingEnd() {\n return this.getCompoundPaddingEnd();\n }\n getTotalPaddingTop() {\n return this.getExtendedPaddingTop() + this.getVerticalOffset(true);\n }\n getTotalPaddingBottom() {\n return this.getExtendedPaddingBottom() + this.getBottomVerticalOffset(true);\n }\n setCompoundDrawables(left, top, right, bottom) {\n let dr = this.mDrawables;\n const drawables = left != null || top != null || right != null || bottom != null;\n if (!drawables) {\n if (dr != null) {\n if (dr.mDrawablePadding == 0) {\n this.mDrawables = null;\n }\n else {\n if (dr.mDrawableLeft != null) {\n dr.mDrawableLeft.setCallback(null);\n }\n dr.mDrawableLeft = null;\n if (dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = null;\n if (dr.mDrawableRight != null) {\n dr.mDrawableRight.setCallback(null);\n }\n dr.mDrawableRight = null;\n if (dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = null;\n dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0;\n dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0;\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = false;\n if (dr.mDrawableLeft != left && dr.mDrawableLeft != null) {\n dr.mDrawableLeft.setCallback(null);\n }\n dr.mDrawableLeft = left;\n if (dr.mDrawableTop != top && dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = top;\n if (dr.mDrawableRight != right && dr.mDrawableRight != null) {\n dr.mDrawableRight.setCallback(null);\n }\n dr.mDrawableRight = right;\n if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = bottom;\n const compoundRect = dr.mCompoundRect;\n let state;\n state = this.getDrawableState();\n if (left != null) {\n left.setState(state);\n left.copyBounds(compoundRect);\n left.setCallback(this);\n dr.mDrawableSizeLeft = compoundRect.width();\n dr.mDrawableHeightLeft = compoundRect.height();\n }\n else {\n dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0;\n }\n if (right != null) {\n right.setState(state);\n right.copyBounds(compoundRect);\n right.setCallback(this);\n dr.mDrawableSizeRight = compoundRect.width();\n dr.mDrawableHeightRight = compoundRect.height();\n }\n else {\n dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0;\n }\n if (top != null) {\n top.setState(state);\n top.copyBounds(compoundRect);\n top.setCallback(this);\n dr.mDrawableSizeTop = compoundRect.height();\n dr.mDrawableWidthTop = compoundRect.width();\n }\n else {\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n }\n if (bottom != null) {\n bottom.setState(state);\n bottom.copyBounds(compoundRect);\n bottom.setCallback(this);\n dr.mDrawableSizeBottom = compoundRect.height();\n dr.mDrawableWidthBottom = compoundRect.width();\n }\n else {\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n if (dr != null) {\n dr.mDrawableLeftInitial = left;\n dr.mDrawableRightInitial = right;\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n this.invalidate();\n this.requestLayout();\n }\n setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom) {\n if (left != null) {\n left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight());\n }\n if (right != null) {\n right.setBounds(0, 0, right.getIntrinsicWidth(), right.getIntrinsicHeight());\n }\n if (top != null) {\n top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight());\n }\n if (bottom != null) {\n bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight());\n }\n this.setCompoundDrawables(left, top, right, bottom);\n }\n setCompoundDrawablesRelative(start, top, end, bottom) {\n let dr = this.mDrawables;\n const drawables = start != null || top != null || end != null || bottom != null;\n if (!drawables) {\n if (dr != null) {\n if (dr.mDrawablePadding == 0) {\n this.mDrawables = null;\n }\n else {\n if (dr.mDrawableStart != null) {\n dr.mDrawableStart.setCallback(null);\n }\n dr.mDrawableStart = null;\n if (dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = null;\n if (dr.mDrawableEnd != null) {\n dr.mDrawableEnd.setCallback(null);\n }\n dr.mDrawableEnd = null;\n if (dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = null;\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n this.mDrawables.mOverride = true;\n if (dr.mDrawableStart != start && dr.mDrawableStart != null) {\n dr.mDrawableStart.setCallback(null);\n }\n dr.mDrawableStart = start;\n if (dr.mDrawableTop != top && dr.mDrawableTop != null) {\n dr.mDrawableTop.setCallback(null);\n }\n dr.mDrawableTop = top;\n if (dr.mDrawableEnd != end && dr.mDrawableEnd != null) {\n dr.mDrawableEnd.setCallback(null);\n }\n dr.mDrawableEnd = end;\n if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) {\n dr.mDrawableBottom.setCallback(null);\n }\n dr.mDrawableBottom = bottom;\n const compoundRect = dr.mCompoundRect;\n let state;\n state = this.getDrawableState();\n if (start != null) {\n start.setState(state);\n start.copyBounds(compoundRect);\n start.setCallback(this);\n dr.mDrawableSizeStart = compoundRect.width();\n dr.mDrawableHeightStart = compoundRect.height();\n }\n else {\n dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0;\n }\n if (end != null) {\n end.setState(state);\n end.copyBounds(compoundRect);\n end.setCallback(this);\n dr.mDrawableSizeEnd = compoundRect.width();\n dr.mDrawableHeightEnd = compoundRect.height();\n }\n else {\n dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0;\n }\n if (top != null) {\n top.setState(state);\n top.copyBounds(compoundRect);\n top.setCallback(this);\n dr.mDrawableSizeTop = compoundRect.height();\n dr.mDrawableWidthTop = compoundRect.width();\n }\n else {\n dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0;\n }\n if (bottom != null) {\n bottom.setState(state);\n bottom.copyBounds(compoundRect);\n bottom.setCallback(this);\n dr.mDrawableSizeBottom = compoundRect.height();\n dr.mDrawableWidthBottom = compoundRect.width();\n }\n else {\n dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0;\n }\n }\n this.resetResolvedDrawables();\n this.resolveDrawables();\n this.invalidate();\n this.requestLayout();\n }\n setCompoundDrawablesRelativeWithIntrinsicBounds(start, top, end, bottom) {\n if (start != null) {\n start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight());\n }\n if (end != null) {\n end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight());\n }\n if (top != null) {\n top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight());\n }\n if (bottom != null) {\n bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight());\n }\n this.setCompoundDrawablesRelative(start, top, end, bottom);\n }\n getCompoundDrawables() {\n const dr = this.mDrawables;\n if (dr != null) {\n return [dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom];\n }\n else {\n return [null, null, null, null];\n }\n }\n getCompoundDrawablesRelative() {\n const dr = this.mDrawables;\n if (dr != null) {\n return [dr.mDrawableStart, dr.mDrawableTop, dr.mDrawableEnd, dr.mDrawableBottom];\n }\n else {\n return [null, null, null, null];\n }\n }\n setCompoundDrawablePadding(pad) {\n let dr = this.mDrawables;\n if (pad == 0) {\n if (dr != null) {\n dr.mDrawablePadding = pad;\n }\n }\n else {\n if (dr == null) {\n this.mDrawables = dr = new TextView.Drawables();\n }\n dr.mDrawablePadding = pad;\n }\n this.invalidate();\n this.requestLayout();\n }\n getCompoundDrawablePadding() {\n const dr = this.mDrawables;\n return dr != null ? dr.mDrawablePadding : 0;\n }\n setPadding(left, top, right, bottom) {\n if (left != this.mPaddingLeft || right != this.mPaddingRight || top != this.mPaddingTop || bottom != this.mPaddingBottom) {\n this.nullLayouts();\n }\n super.setPadding(left, top, right, bottom);\n this.invalidate();\n }\n getAutoLinkMask() {\n return this.mAutoLinkMask;\n }\n getTextLocale() {\n return null;\n }\n setTextLocale(locale) {\n }\n getTextSize() {\n return this.mTextPaint.getTextSize();\n }\n setTextSize(...args) {\n if (args.length == 1) {\n this.setTextSize(TypedValue.COMPLEX_UNIT_SP, args[0]);\n return;\n }\n let [unit, size] = args;\n this.setRawTextSize(TypedValue.applyDimension(unit, size, this.getResources().getDisplayMetrics()));\n }\n setRawTextSize(size) {\n if (size != this.mTextPaint.getTextSize()) {\n this.mTextPaint.setTextSize(size);\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getTextScaleX() {\n return 1;\n }\n setTextScaleX(size) {\n }\n getTypeface() {\n return null;\n }\n setTextColor(colors) {\n if (typeof colors === 'number') {\n colors = ColorStateList.valueOf(colors);\n }\n if (colors == null) {\n throw Error(`new NullPointerException()`);\n }\n this.mTextColor = colors;\n this.updateTextColors();\n }\n getTextColors() {\n return this.mTextColor;\n }\n getCurrentTextColor() {\n return this.mCurTextColor;\n }\n setHighlightColor(color) {\n if (this.mHighlightColor != color) {\n this.mHighlightColor = color;\n this.invalidate();\n }\n }\n getHighlightColor() {\n return this.mHighlightColor;\n }\n setShowSoftInputOnFocus(show) {\n this.createEditorIfNeeded();\n }\n getShowSoftInputOnFocus() {\n return false;\n }\n setShadowLayer(radius, dx, dy, color) {\n this.mTextPaint.setShadowLayer(radius, dx, dy, color);\n this.mShadowRadius = radius;\n this.mShadowDx = dx;\n this.mShadowDy = dy;\n this.invalidate();\n }\n getShadowRadius() {\n return this.mShadowRadius;\n }\n getShadowDx() {\n return this.mShadowDx;\n }\n getShadowDy() {\n return this.mShadowDy;\n }\n getShadowColor() {\n return this.mTextPaint.shadowColor;\n }\n getPaint() {\n return this.mTextPaint;\n }\n setAutoLinkMask(mask) {\n this.mAutoLinkMask = mask;\n }\n setLinksClickable(whether) {\n this.mLinksClickable = whether;\n }\n getLinksClickable() {\n return this.mLinksClickable;\n }\n getUrls() {\n return new Array(0);\n }\n setHintTextColor(colors) {\n if (typeof colors === 'number') {\n colors = ColorStateList.valueOf(colors);\n }\n this.mHintTextColor = colors;\n this.updateTextColors();\n }\n getHintTextColors() {\n return this.mHintTextColor;\n }\n getCurrentHintTextColor() {\n return this.mHintTextColor != null ? this.mCurHintTextColor : this.mCurTextColor;\n }\n setLinkTextColor(colors) {\n if (typeof colors === 'number') {\n colors = ColorStateList.valueOf(colors);\n }\n this.mLinkTextColor = colors;\n this.updateTextColors();\n }\n getLinkTextColors() {\n return this.mLinkTextColor;\n }\n setGravity(gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.LEFT;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n let newLayout = false;\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) != (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK)) {\n newLayout = true;\n }\n if (gravity != this.mGravity) {\n this.invalidate();\n }\n this.mGravity = gravity;\n if (this.mLayout != null && newLayout) {\n let want = this.mLayout.getWidth();\n let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth();\n this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), true);\n }\n }\n getGravity() {\n return this.mGravity;\n }\n getPaintFlags() {\n return this.mTextPaint.getFlags();\n }\n setPaintFlags(flags) {\n if (this.mTextPaint.getFlags() != flags) {\n this.mTextPaint.setFlags(flags);\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n setHorizontallyScrolling(whether) {\n if (this.mHorizontallyScrolling != whether) {\n this.mHorizontallyScrolling = whether;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getHorizontallyScrolling() {\n return this.mHorizontallyScrolling;\n }\n setMinLines(minlines) {\n this.mMinimum = minlines;\n this.mMinMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n getMinLines() {\n return this.mMinMode == TextView.LINES ? this.mMinimum : -1;\n }\n setMinHeight(minHeight) {\n this.mMinimum = minHeight;\n this.mMinMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMinHeight() {\n return this.mMinMode == TextView.PIXELS ? this.mMinimum : -1;\n }\n setMaxLines(maxlines) {\n this.mMaximum = maxlines;\n this.mMaxMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n getMaxLines() {\n return this.mMaxMode == TextView.LINES ? this.mMaximum : -1;\n }\n setMaxHeight(maxHeight) {\n this.mMaximum = maxHeight;\n this.mMaxMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxHeight() {\n return this.mMaxMode == TextView.PIXELS ? this.mMaximum : -1;\n }\n setLines(lines) {\n this.mMaximum = this.mMinimum = lines;\n this.mMaxMode = this.mMinMode = TextView.LINES;\n this.requestLayout();\n this.invalidate();\n }\n setHeight(pixels) {\n this.mMaximum = this.mMinimum = pixels;\n this.mMaxMode = this.mMinMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n setMinEms(minems) {\n this.mMinWidthValue = minems;\n this.mMinWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n getMinEms() {\n return this.mMinWidthMode == TextView.EMS ? this.mMinWidthValue : -1;\n }\n setMinWidth(minpixels) {\n this.mMinWidthValue = minpixels;\n this.mMinWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMinWidth() {\n return this.mMinWidthMode == TextView.PIXELS ? this.mMinWidthValue : -1;\n }\n setMaxEms(maxems) {\n this.mMaxWidthValue = maxems;\n this.mMaxWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxEms() {\n return this.mMaxWidthMode == TextView.EMS ? this.mMaxWidthValue : -1;\n }\n setMaxWidth(maxpixels) {\n this.mMaxWidthValue = maxpixels;\n this.mMaxWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n getMaxWidth() {\n return this.mMaxWidthMode == TextView.PIXELS ? this.mMaxWidthValue : -1;\n }\n setEms(ems) {\n this.mMaxWidthValue = this.mMinWidthValue = ems;\n this.mMaxWidthMode = this.mMinWidthMode = TextView.EMS;\n this.requestLayout();\n this.invalidate();\n }\n setWidth(pixels) {\n this.mMaxWidthValue = this.mMinWidthValue = pixels;\n this.mMaxWidthMode = this.mMinWidthMode = TextView.PIXELS;\n this.requestLayout();\n this.invalidate();\n }\n setLineSpacing(add, mult) {\n if (this.mSpacingAdd != add || this.mSpacingMult != mult) {\n this.mSpacingAdd = add;\n this.mSpacingMult = mult;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getLineSpacingMultiplier() {\n return this.mSpacingMult;\n }\n getLineSpacingExtra() {\n return this.mSpacingAdd;\n }\n updateTextColors() {\n let inval = false;\n let color = this.mTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mCurTextColor) {\n this.mCurTextColor = color;\n inval = true;\n }\n if (this.mLinkTextColor != null) {\n color = this.mLinkTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mTextPaint.linkColor) {\n this.mTextPaint.linkColor = color;\n inval = true;\n }\n }\n if (this.mHintTextColor != null) {\n color = this.mHintTextColor.getColorForState(this.getDrawableState(), 0);\n if (color != this.mCurHintTextColor && this.mText.length == 0) {\n this.mCurHintTextColor = color;\n inval = true;\n }\n }\n if (inval) {\n this.invalidate();\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mTextColor != null && this.mTextColor.isStateful() || (this.mHintTextColor != null && this.mHintTextColor.isStateful()) || (this.mLinkTextColor != null && this.mLinkTextColor.isStateful())) {\n this.updateTextColors();\n }\n const dr = this.mDrawables;\n if (dr != null) {\n let state = this.getDrawableState();\n if (dr.mDrawableTop != null && dr.mDrawableTop.isStateful()) {\n dr.mDrawableTop.setState(state);\n }\n if (dr.mDrawableBottom != null && dr.mDrawableBottom.isStateful()) {\n dr.mDrawableBottom.setState(state);\n }\n if (dr.mDrawableLeft != null && dr.mDrawableLeft.isStateful()) {\n dr.mDrawableLeft.setState(state);\n }\n if (dr.mDrawableRight != null && dr.mDrawableRight.isStateful()) {\n dr.mDrawableRight.setState(state);\n }\n if (dr.mDrawableStart != null && dr.mDrawableStart.isStateful()) {\n dr.mDrawableStart.setState(state);\n }\n if (dr.mDrawableEnd != null && dr.mDrawableEnd.isStateful()) {\n dr.mDrawableEnd.setState(state);\n }\n }\n }\n removeMisspelledSpans(spannable) {\n }\n setFreezesText(freezesText) {\n this.mFreezesText = freezesText;\n }\n getFreezesText() {\n return this.mFreezesText;\n }\n setSpannableFactory(factory) {\n this.mSpannableFactory = factory;\n this.setText(this.mText);\n }\n setText(text, type = this.mBufferType, notifyBefore = true, oldlen = 0) {\n if (text == null) {\n text = \"\";\n }\n if (!this.isSuggestionsEnabled()) {\n text = this.removeSuggestionSpans(text);\n }\n if (Spanned.isImplements(text) && text.getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) {\n this.setHorizontalFadingEdgeEnabled(true);\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL;\n this.setEllipsize(TextUtils.TruncateAt.MARQUEE);\n }\n if (notifyBefore) {\n if (this.mText != null) {\n oldlen = this.mText.length;\n this.sendBeforeTextChanged(this.mText, 0, oldlen, text.length);\n }\n else {\n this.sendBeforeTextChanged(\"\", 0, 0, text.length);\n }\n }\n let needEditableForNotification = false;\n if (this.mListeners != null && this.mListeners.size() != 0) {\n needEditableForNotification = true;\n }\n if (type == TextView.BufferType.SPANNABLE || this.mMovement != null) {\n text = this.mSpannableFactory.newSpannable(text);\n }\n this.mBufferType = type;\n this.mText = text;\n if (this.mTransformation == null) {\n this.mTransformed = text;\n }\n else {\n this.mTransformed = this.mTransformation.getTransformation(text, this);\n }\n const textLength = text.length;\n if (this.mLayout != null) {\n this.checkForRelayout();\n }\n this.sendOnTextChanged(text, 0, oldlen, textLength);\n this.onTextChanged(text, 0, oldlen, textLength);\n }\n setHint(hint) {\n this.mHint = hint;\n if (this.mLayout != null) {\n this.checkForRelayout();\n }\n if (this.mText.length == 0) {\n this.invalidate();\n }\n }\n getHint() {\n return this.mHint;\n }\n isSingleLine() {\n return this.mSingleLine;\n }\n static isMultilineInputType(type) {\n return true;\n }\n removeSuggestionSpans(text) {\n return text;\n }\n hasPasswordTransformationMethod() {\n return false;\n }\n static isPasswordInputType(inputType) {\n return false;\n }\n static isVisiblePasswordInputType(inputType) {\n return true;\n }\n setRawInputType(type) {\n }\n setInputType(type, direct = false) {\n }\n getInputType() {\n return 0;\n }\n setImeOptions(imeOptions) {\n }\n getImeOptions() {\n return -1;\n }\n setImeActionLabel(label, actionId) {\n this.createEditorIfNeeded();\n }\n getImeActionLabel() {\n return '';\n }\n getImeActionId() {\n return 0;\n }\n setOnEditorActionListener(l) {\n this.createEditorIfNeeded();\n }\n setFrame(l, t, r, b) {\n let result = super.setFrame(l, t, r, b);\n this.restartMarqueeIfNeeded();\n return result;\n }\n restartMarqueeIfNeeded() {\n if (this.mRestartMarquee && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n this.mRestartMarquee = false;\n this.startMarquee();\n }\n }\n setFilters(...args) {\n }\n getFilters() {\n return this.mFilters;\n }\n getBoxHeight(l) {\n let padding = (l == this.mHintLayout) ? this.getCompoundPaddingTop() + this.getCompoundPaddingBottom() : this.getExtendedPaddingTop() + this.getExtendedPaddingBottom();\n return this.getMeasuredHeight() - padding;\n }\n getVerticalOffset(forceNormal) {\n let voffset = 0;\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n let l = this.mLayout;\n if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) {\n l = this.mHintLayout;\n }\n if (gravity != Gravity.TOP) {\n let boxht = this.getBoxHeight(l);\n let textht = l.getHeight();\n if (textht < boxht) {\n if (gravity == Gravity.BOTTOM)\n voffset = boxht - textht;\n else\n voffset = (boxht - textht) >> 1;\n }\n }\n return voffset;\n }\n getBottomVerticalOffset(forceNormal) {\n let voffset = 0;\n const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n let l = this.mLayout;\n if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) {\n l = this.mHintLayout;\n }\n if (gravity != Gravity.BOTTOM) {\n let boxht = this.getBoxHeight(l);\n let textht = l.getHeight();\n if (textht < boxht) {\n if (gravity == Gravity.TOP)\n voffset = boxht - textht;\n else\n voffset = (boxht - textht) >> 1;\n }\n }\n return voffset;\n }\n invalidateRegion(start, end, invalidateCursor) {\n if (this.mLayout == null) {\n this.invalidate();\n }\n else {\n let lineStart = this.mLayout.getLineForOffset(start);\n let top = this.mLayout.getLineTop(lineStart);\n if (lineStart > 0) {\n top -= this.mLayout.getLineDescent(lineStart - 1);\n }\n let lineEnd;\n if (start == end)\n lineEnd = lineStart;\n else\n lineEnd = this.mLayout.getLineForOffset(end);\n let bottom = this.mLayout.getLineBottom(lineEnd);\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const verticalPadding = this.getExtendedPaddingTop() + this.getVerticalOffset(true);\n let left, right;\n if (lineStart == lineEnd && !invalidateCursor) {\n left = Math.floor(this.mLayout.getPrimaryHorizontal(start));\n right = Math.floor((this.mLayout.getPrimaryHorizontal(end) + 1.0));\n left += compoundPaddingLeft;\n right += compoundPaddingLeft;\n }\n else {\n left = compoundPaddingLeft;\n right = this.getWidth() - this.getCompoundPaddingRight();\n }\n this.invalidate(this.mScrollX + left, verticalPadding + top, this.mScrollX + right, verticalPadding + bottom);\n }\n }\n registerForPreDraw() {\n if (!this.mPreDrawRegistered) {\n this.getViewTreeObserver().addOnPreDrawListener(this);\n this.mPreDrawRegistered = true;\n }\n }\n onPreDraw() {\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n if (this.mMovement != null) {\n let curs = this.getSelectionEnd();\n if (curs < 0 && (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n curs = this.mText.length;\n }\n if (curs >= 0) {\n this.bringPointIntoView(curs);\n }\n }\n else {\n this.bringTextIntoView();\n }\n this.getViewTreeObserver().removeOnPreDrawListener(this);\n this.mPreDrawRegistered = false;\n return true;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mTemporaryDetach = false;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mPreDrawRegistered) {\n this.getViewTreeObserver().removeOnPreDrawListener(this);\n this.mPreDrawRegistered = false;\n }\n this.resetResolvedDrawables();\n }\n isPaddingOffsetRequired() {\n return this.mShadowRadius != 0 || this.mDrawables != null;\n }\n getLeftPaddingOffset() {\n return this.getCompoundPaddingLeft() - this.mPaddingLeft + Math.floor(Math.min(0, this.mShadowDx - this.mShadowRadius));\n }\n getTopPaddingOffset() {\n return Math.floor(Math.min(0, this.mShadowDy - this.mShadowRadius));\n }\n getBottomPaddingOffset() {\n return Math.floor(Math.max(0, this.mShadowDy + this.mShadowRadius));\n }\n getRightPaddingOffset() {\n return -(this.getCompoundPaddingRight() - this.mPaddingRight) + Math.floor(Math.max(0, this.mShadowDx + this.mShadowRadius));\n }\n verifyDrawable(who) {\n const verified = super.verifyDrawable(who);\n if (!verified && this.mDrawables != null) {\n return who == this.mDrawables.mDrawableLeft || who == this.mDrawables.mDrawableTop || who == this.mDrawables.mDrawableRight || who == this.mDrawables.mDrawableBottom || who == this.mDrawables.mDrawableStart || who == this.mDrawables.mDrawableEnd;\n }\n return verified;\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mDrawables != null) {\n if (this.mDrawables.mDrawableLeft != null) {\n this.mDrawables.mDrawableLeft.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableTop != null) {\n this.mDrawables.mDrawableTop.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableRight != null) {\n this.mDrawables.mDrawableRight.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableBottom != null) {\n this.mDrawables.mDrawableBottom.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableStart != null) {\n this.mDrawables.mDrawableStart.jumpToCurrentState();\n }\n if (this.mDrawables.mDrawableEnd != null) {\n this.mDrawables.mDrawableEnd.jumpToCurrentState();\n }\n }\n }\n drawableSizeChange(d) {\n const drawables = this.mDrawables;\n const isCompoundDrawable = drawables != null && (d == drawables.mDrawableLeft || d == drawables.mDrawableTop\n || d == drawables.mDrawableRight || d == drawables.mDrawableBottom || d == drawables.mDrawableStart || d == drawables.mDrawableEnd);\n if (isCompoundDrawable) {\n d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());\n this.setCompoundDrawables(drawables.mDrawableLeft, drawables.mDrawableTop, drawables.mDrawableRight, drawables.mDrawableBottom);\n }\n else {\n super.drawableSizeChange(d);\n }\n }\n invalidateDrawable(drawable) {\n if (this.verifyDrawable(drawable)) {\n const dirty = drawable.getBounds();\n let scrollX = this.mScrollX;\n let scrollY = this.mScrollY;\n const drawables = this.mDrawables;\n if (drawables != null) {\n if (drawable == drawables.mDrawableLeft) {\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n scrollX += this.mPaddingLeft;\n scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2;\n }\n else if (drawable == drawables.mDrawableRight) {\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n scrollX += (this.mRight - this.mLeft - this.mPaddingRight - drawables.mDrawableSizeRight);\n scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2;\n }\n else if (drawable == drawables.mDrawableTop) {\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft;\n scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2;\n scrollY += this.mPaddingTop;\n }\n else if (drawable == drawables.mDrawableBottom) {\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft;\n scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2;\n scrollY += (this.mBottom - this.mTop - this.mPaddingBottom - drawables.mDrawableSizeBottom);\n }\n }\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n }\n isTextSelectable() {\n return false;\n }\n setTextIsSelectable(selectable) {\n }\n onCreateDrawableState(extraSpace) {\n let drawableState;\n if (this.mSingleLine) {\n drawableState = super.onCreateDrawableState(extraSpace);\n }\n else {\n drawableState = super.onCreateDrawableState(extraSpace + 1);\n TextView.mergeDrawableStates(drawableState, TextView.MULTILINE_STATE_SET);\n }\n if (this.isTextSelectable()) {\n const length = drawableState.length;\n for (let i = 0; i < length; i++) {\n if (drawableState[i] == View.VIEW_STATE_PRESSED) {\n const nonPressedState = androidui.util.ArrayCreator.newNumberArray(length - 1);\n System.arraycopy(drawableState, 0, nonPressedState, 0, i);\n System.arraycopy(drawableState, i + 1, nonPressedState, i, length - i - 1);\n return nonPressedState;\n }\n }\n }\n return drawableState;\n }\n getUpdatedHighlightPath() {\n let highlight = null;\n let highlightPaint = this.mHighlightPaint;\n const selStart = this.getSelectionStart();\n const selEnd = this.getSelectionEnd();\n if (this.mMovement != null && (this.isFocused() || this.isPressed()) && selStart >= 0) {\n if (selStart == selEnd) {\n }\n else {\n if (this.mHighlightPathBogus) {\n if (this.mHighlightPath == null)\n this.mHighlightPath = new Path();\n this.mHighlightPath.reset();\n this.mLayout.getSelectionPath(selStart, selEnd, this.mHighlightPath);\n this.mHighlightPathBogus = false;\n }\n highlightPaint.setColor(this.mHighlightColor);\n highlightPaint.setStyle(Paint.Style.FILL);\n highlight = this.mHighlightPath;\n }\n }\n return highlight;\n }\n getHorizontalOffsetForDrawables() {\n return 0;\n }\n onDraw(canvas) {\n this.restartMarqueeIfNeeded();\n super.onDraw(canvas);\n const compoundPaddingLeft = this.getCompoundPaddingLeft();\n const compoundPaddingTop = this.getCompoundPaddingTop();\n const compoundPaddingRight = this.getCompoundPaddingRight();\n const compoundPaddingBottom = this.getCompoundPaddingBottom();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n const right = this.mRight;\n const left = this.mLeft;\n const bottom = this.mBottom;\n const top = this.mTop;\n const isLayoutRtl = this.isLayoutRtl();\n const offset = this.getHorizontalOffsetForDrawables();\n const leftOffset = isLayoutRtl ? 0 : offset;\n const rightOffset = isLayoutRtl ? offset : 0;\n const dr = this.mDrawables;\n if (dr != null) {\n let vspace = bottom - top - compoundPaddingBottom - compoundPaddingTop;\n let hspace = right - left - compoundPaddingRight - compoundPaddingLeft;\n if (dr.mDrawableLeft != null) {\n canvas.save();\n canvas.translate(scrollX + this.mPaddingLeft + leftOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightLeft) / 2);\n dr.mDrawableLeft.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableRight != null) {\n canvas.save();\n canvas.translate(scrollX + right - left - this.mPaddingRight - dr.mDrawableSizeRight - rightOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightRight) / 2);\n dr.mDrawableRight.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableTop != null) {\n canvas.save();\n canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthTop) / 2, scrollY + this.mPaddingTop);\n dr.mDrawableTop.draw(canvas);\n canvas.restore();\n }\n if (dr.mDrawableBottom != null) {\n canvas.save();\n canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthBottom) / 2, scrollY + bottom - top - this.mPaddingBottom - dr.mDrawableSizeBottom);\n dr.mDrawableBottom.draw(canvas);\n canvas.restore();\n }\n }\n let color = this.mCurTextColor;\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n let layout = this.mLayout;\n if (this.mHint != null && this.mText.length == 0) {\n if (this.mHintTextColor != null) {\n color = this.mCurHintTextColor;\n }\n layout = this.mHintLayout;\n }\n this.mTextPaint.setColor(color);\n this.mTextPaint.drawableState = this.getDrawableState();\n if (this.mSkipDrawText)\n return;\n canvas.save();\n let extendedPaddingTop = this.getExtendedPaddingTop();\n let extendedPaddingBottom = this.getExtendedPaddingBottom();\n const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop;\n const maxScrollY = this.mLayout.getHeight() - vspace;\n let clipLeft = compoundPaddingLeft + scrollX;\n let clipTop = (scrollY == 0) ? 0 : extendedPaddingTop + scrollY;\n let clipRight = right - left - compoundPaddingRight + scrollX;\n let clipBottom = bottom - top + scrollY - ((scrollY == maxScrollY) ? 0 : extendedPaddingBottom);\n if (this.mShadowRadius != 0) {\n clipLeft += Math.min(0, this.mShadowDx - this.mShadowRadius);\n clipRight += Math.max(0, this.mShadowDx + this.mShadowRadius);\n clipTop += Math.min(0, this.mShadowDy - this.mShadowRadius);\n clipBottom += Math.max(0, this.mShadowDy + this.mShadowRadius);\n }\n canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);\n let voffsetText = 0;\n let voffsetCursor = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffsetText = this.getVerticalOffset(false);\n voffsetCursor = this.getVerticalOffset(true);\n }\n canvas.translate(compoundPaddingLeft, extendedPaddingTop + voffsetText);\n const absoluteGravity = this.mGravity;\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (!this.mSingleLine && this.getLineCount() == 1 && this.canMarquee() && (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != Gravity.LEFT) {\n const width = this.mRight - this.mLeft;\n const padding = this.getCompoundPaddingLeft() + this.getCompoundPaddingRight();\n const dx = this.mLayout.getLineRight(0) - (width - padding);\n canvas.translate(isLayoutRtl ? -dx : +dx, 0.0);\n }\n if (this.mMarquee != null && this.mMarquee.isRunning()) {\n const dx = -this.mMarquee.getScroll();\n canvas.translate(isLayoutRtl ? -dx : +dx, 0.0);\n }\n }\n const cursorOffsetVertical = voffsetCursor - voffsetText;\n let highlight = this.getUpdatedHighlightPath();\n layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical);\n if (this.mMarquee != null && this.mMarquee.shouldDrawGhost()) {\n const dx = Math.floor(this.mMarquee.getGhostOffset());\n canvas.translate(isLayoutRtl ? -dx : dx, 0.0);\n layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical);\n }\n canvas.restore();\n }\n getFocusedRect(r) {\n if (this.mLayout == null) {\n super.getFocusedRect(r);\n return;\n }\n let selEnd = this.getSelectionEnd();\n if (selEnd < 0) {\n super.getFocusedRect(r);\n return;\n }\n }\n getLineCount() {\n return this.mLayout != null ? this.mLayout.getLineCount() : 0;\n }\n getLineBounds(line, bounds) {\n if (this.mLayout == null) {\n if (bounds != null) {\n bounds.set(0, 0, 0, 0);\n }\n return 0;\n }\n else {\n let baseline = this.mLayout.getLineBounds(line, bounds);\n let voffset = this.getExtendedPaddingTop();\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset += this.getVerticalOffset(true);\n }\n if (bounds != null) {\n bounds.offset(this.getCompoundPaddingLeft(), voffset);\n }\n return baseline + voffset;\n }\n }\n getBaseline() {\n if (this.mLayout == null) {\n return super.getBaseline();\n }\n let voffset = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset = this.getVerticalOffset(true);\n }\n return this.getExtendedPaddingTop() + voffset + this.mLayout.getLineBaseline(0);\n }\n getFadeTop(offsetRequired) {\n if (this.mLayout == null)\n return 0;\n let voffset = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n voffset = this.getVerticalOffset(true);\n }\n if (offsetRequired)\n voffset += this.getTopPaddingOffset();\n return this.getExtendedPaddingTop() + voffset;\n }\n getFadeHeight(offsetRequired) {\n return this.mLayout != null ? this.mLayout.getHeight() : 0;\n }\n onKeyDown(keyCode, event) {\n let which = this.doKeyDown(keyCode, event, null);\n if (which == 0) {\n return super.onKeyDown(keyCode, event);\n }\n return true;\n }\n shouldAdvanceFocusOnEnter() {\n if (this.getKeyListener() == null) {\n return false;\n }\n if (this.mSingleLine) {\n return true;\n }\n return false;\n }\n shouldAdvanceFocusOnTab() {\n return true;\n }\n doKeyDown(keyCode, event, otherEvent) {\n return 0;\n }\n resetErrorChangedFlag() {\n }\n hideErrorIfUnchanged() {\n }\n onKeyUp(keyCode, event) {\n return super.onKeyUp(keyCode, event);\n }\n onCheckIsTextEditor() {\n return false;\n }\n nullLayouts() {\n if (this.mLayout instanceof BoringLayout && this.mSavedLayout == null) {\n this.mSavedLayout = this.mLayout;\n }\n if (this.mHintLayout instanceof BoringLayout && this.mSavedHintLayout == null) {\n this.mSavedHintLayout = this.mHintLayout;\n }\n this.mSavedMarqueeModeLayout = this.mLayout = this.mHintLayout = null;\n this.mBoring = this.mHintBoring = null;\n }\n assumeLayout() {\n let width = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n if (width < 1) {\n width = 0;\n }\n let physicalWidth = width;\n if (this.mHorizontallyScrolling) {\n width = TextView.VERY_WIDE;\n }\n this.makeNewLayout(width, physicalWidth, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, physicalWidth, false);\n }\n getLayoutAlignment() {\n let alignment;\n switch (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n alignment = Layout.Alignment.ALIGN_LEFT;\n break;\n case Gravity.RIGHT:\n alignment = Layout.Alignment.ALIGN_RIGHT;\n break;\n case Gravity.CENTER_HORIZONTAL:\n alignment = Layout.Alignment.ALIGN_CENTER;\n break;\n default:\n alignment = Layout.Alignment.ALIGN_NORMAL;\n break;\n }\n return alignment;\n }\n makeNewLayout(wantWidth, hintWidth, boring, hintBoring, ellipsisWidth, bringIntoView) {\n this.stopMarquee();\n this.mOldMaximum = this.mMaximum;\n this.mOldMaxMode = this.mMaxMode;\n this.mHighlightPathBogus = true;\n if (wantWidth < 0) {\n wantWidth = 0;\n }\n if (hintWidth < 0) {\n hintWidth = 0;\n }\n let alignment = this.getLayoutAlignment();\n const testDirChange = this.mSingleLine && this.mLayout != null && (alignment == Layout.Alignment.ALIGN_NORMAL || alignment == Layout.Alignment.ALIGN_OPPOSITE);\n let oldDir = 0;\n if (testDirChange)\n oldDir = this.mLayout.getParagraphDirection(0);\n let shouldEllipsize = this.mEllipsize != null && this.getKeyListener() == null;\n const switchEllipsize = this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL;\n let effectiveEllipsize = this.mEllipsize;\n if (this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n effectiveEllipsize = TruncateAt.END_SMALL;\n }\n if (this.mTextDir == null) {\n this.mTextDir = this.getTextDirectionHeuristic();\n }\n this.mLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, effectiveEllipsize == this.mEllipsize);\n if (switchEllipsize) {\n let oppositeEllipsize = effectiveEllipsize == TruncateAt.MARQUEE ? TruncateAt.END : TruncateAt.MARQUEE;\n this.mSavedMarqueeModeLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, oppositeEllipsize, effectiveEllipsize != this.mEllipsize);\n }\n shouldEllipsize = this.mEllipsize != null;\n this.mHintLayout = null;\n if (this.mHint != null) {\n if (shouldEllipsize)\n hintWidth = wantWidth;\n if (hintBoring == TextView.UNKNOWN_BORING) {\n hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring);\n if (hintBoring != null) {\n this.mHintBoring = hintBoring;\n }\n }\n if (hintBoring != null) {\n if (hintBoring.width <= hintWidth && (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) {\n if (this.mSavedHintLayout != null) {\n this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad);\n }\n else {\n this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad);\n }\n this.mSavedHintLayout = this.mHintLayout;\n }\n else if (shouldEllipsize && hintBoring.width <= hintWidth) {\n if (this.mSavedHintLayout != null) {\n this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth);\n }\n else {\n this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth);\n }\n }\n else if (shouldEllipsize) {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n else if (shouldEllipsize) {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n if (bringIntoView || (testDirChange && oldDir != this.mLayout.getParagraphDirection(0))) {\n this.registerForPreDraw();\n }\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (!this.compressText(ellipsisWidth)) {\n const height = this.mLayoutParams.height;\n if (height != LayoutParams.WRAP_CONTENT && height != LayoutParams.MATCH_PARENT) {\n this.startMarquee();\n }\n else {\n this.mRestartMarquee = true;\n }\n }\n }\n }\n makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, useSaved) {\n let result = null;\n if (Spannable.isImpl(this.mText)) {\n result = new DynamicLayout(this.mText, this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.getKeyListener() == null ? effectiveEllipsize : null, ellipsisWidth);\n }\n else {\n if (boring == TextView.UNKNOWN_BORING) {\n boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring);\n if (boring != null) {\n this.mBoring = boring;\n }\n }\n if (boring != null) {\n if (boring.width <= wantWidth && (effectiveEllipsize == null || boring.width <= ellipsisWidth)) {\n if (useSaved && this.mSavedLayout != null) {\n result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad);\n }\n else {\n result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad);\n }\n if (useSaved) {\n this.mSavedLayout = result;\n }\n }\n else if (shouldEllipsize && boring.width <= wantWidth) {\n if (useSaved && this.mSavedLayout != null) {\n result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth);\n }\n else {\n result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth);\n }\n }\n else if (shouldEllipsize) {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n else if (shouldEllipsize) {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE);\n }\n else {\n result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad);\n }\n }\n return result;\n }\n compressText(width) {\n if (this.isHardwareAccelerated())\n return false;\n if (width > 0.0 && this.mLayout != null && this.getLineCount() == 1 && !this.mUserSetTextScaleX && this.mTextPaint.getTextScaleX() == 1.0) {\n const textWidth = this.mLayout.getLineWidth(0);\n const overflow = (textWidth + 1.0 - width) / width;\n if (overflow > 0.0 && overflow <= TextView.Marquee.MARQUEE_DELTA_MAX) {\n this.mTextPaint.setTextScaleX(1.0 - overflow - 0.005);\n this.post((() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.requestLayout();\n }\n }\n return new _Inner();\n })());\n return true;\n }\n }\n return false;\n }\n static desired(layout) {\n let n = layout.getLineCount();\n let text = layout.getText();\n let max = 0;\n for (let i = 0; i < n - 1; i++) {\n if (text.charAt(layout.getLineEnd(i) - 1) != '\\n')\n return -1;\n }\n for (let i = 0; i < n; i++) {\n max = Math.max(max, layout.getLineWidth(i));\n }\n return Math.floor(Math.ceil(max));\n }\n setIncludeFontPadding(includepad) {\n if (this.mIncludePad != includepad) {\n this.mIncludePad = includepad;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n getIncludeFontPadding() {\n return this.mIncludePad;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = View.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = View.MeasureSpec.getSize(heightMeasureSpec);\n let width;\n let height;\n let boring = TextView.UNKNOWN_BORING;\n let hintBoring = TextView.UNKNOWN_BORING;\n if (this.mTextDir == null) {\n this.mTextDir = this.getTextDirectionHeuristic();\n }\n let des = -1;\n let fromexisting = false;\n if (widthMode == View.MeasureSpec.EXACTLY) {\n width = widthSize;\n }\n else {\n if (this.mLayout != null && this.mEllipsize == null) {\n des = TextView.desired(this.mLayout);\n }\n if (des < 0) {\n boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring);\n if (boring != null) {\n this.mBoring = boring;\n }\n }\n else {\n fromexisting = true;\n }\n if (boring == null || boring == TextView.UNKNOWN_BORING) {\n if (des < 0) {\n des = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed, this.mTextPaint)));\n }\n width = des;\n }\n else {\n width = boring.width;\n }\n const dr = this.mDrawables;\n if (dr != null) {\n width = Math.max(width, dr.mDrawableWidthTop);\n width = Math.max(width, dr.mDrawableWidthBottom);\n }\n if (this.mHint != null) {\n let hintDes = -1;\n let hintWidth;\n if (this.mHintLayout != null && this.mEllipsize == null) {\n hintDes = TextView.desired(this.mHintLayout);\n }\n if (hintDes < 0) {\n hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring);\n if (hintBoring != null) {\n this.mHintBoring = hintBoring;\n }\n }\n if (hintBoring == null || hintBoring == TextView.UNKNOWN_BORING) {\n if (hintDes < 0) {\n hintDes = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint, this.mTextPaint)));\n }\n hintWidth = hintDes;\n }\n else {\n hintWidth = hintBoring.width;\n }\n if (hintWidth > width) {\n width = hintWidth;\n }\n }\n width += this.getCompoundPaddingLeft() + this.getCompoundPaddingRight();\n if (this.mMaxWidthMode == TextView.EMS) {\n width = Math.min(width, this.mMaxWidthValue * this.getLineHeight());\n }\n else {\n width = Math.min(width, this.mMaxWidthValue);\n }\n if (this.mMinWidthMode == TextView.EMS) {\n width = Math.max(width, this.mMinWidthValue * this.getLineHeight());\n }\n else {\n width = Math.max(width, this.mMinWidthValue);\n }\n width = Math.max(width, this.getSuggestedMinimumWidth());\n if (widthMode == View.MeasureSpec.AT_MOST) {\n width = Math.min(widthSize, width);\n }\n }\n let want = width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let unpaddedWidth = want;\n if (this.mHorizontallyScrolling)\n want = TextView.VERY_WIDE;\n let hintWant = want;\n let hintWidth = (this.mHintLayout == null) ? hintWant : this.mHintLayout.getWidth();\n if (this.mLayout == null) {\n this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n }\n else {\n const layoutChanged = (this.mLayout.getWidth() != want) || (hintWidth != hintWant) || (this.mLayout.getEllipsizedWidth() != width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight());\n const widthChanged = (this.mHint == null) && (this.mEllipsize == null) && (want > this.mLayout.getWidth()) && (this.mLayout instanceof BoringLayout || (fromexisting && des >= 0 && des <= want));\n const maximumChanged = (this.mMaxMode != this.mOldMaxMode) || (this.mMaximum != this.mOldMaximum);\n if (layoutChanged || maximumChanged) {\n if (!maximumChanged && widthChanged) {\n this.mLayout.increaseWidthTo(want);\n }\n else {\n this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n }\n }\n else {\n }\n }\n if (heightMode == View.MeasureSpec.EXACTLY) {\n height = heightSize;\n this.mDesiredHeightAtMeasure = -1;\n }\n else {\n let desired = this.getDesiredHeight();\n height = desired;\n this.mDesiredHeightAtMeasure = desired;\n if (heightMode == View.MeasureSpec.AT_MOST) {\n height = Math.min(desired, heightSize);\n }\n }\n let unpaddedHeight = height - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n if (this.mMaxMode == TextView.LINES && this.mLayout.getLineCount() > this.mMaximum) {\n unpaddedHeight = Math.min(unpaddedHeight, this.mLayout.getLineTop(this.mMaximum));\n }\n if (this.mMovement != null || this.mLayout.getWidth() > unpaddedWidth || this.mLayout.getHeight() > unpaddedHeight) {\n this.registerForPreDraw();\n }\n else {\n this.scrollTo(0, 0);\n }\n this.setMeasuredDimension(width, height);\n }\n getDesiredHeight(layout, cap = true) {\n if (arguments.length === 0) {\n return Math.max(this.getDesiredHeight(this.mLayout, true), this.getDesiredHeight(this.mHintLayout, this.mEllipsize != null));\n }\n if (layout == null) {\n return 0;\n }\n let linecount = layout.getLineCount();\n let pad = this.getCompoundPaddingTop() + this.getCompoundPaddingBottom();\n let desired = layout.getLineTop(linecount);\n const dr = this.mDrawables;\n if (dr != null) {\n desired = Math.max(desired, dr.mDrawableHeightLeft);\n desired = Math.max(desired, dr.mDrawableHeightRight);\n }\n desired += pad;\n if (this.mMaxMode == TextView.LINES) {\n if (cap) {\n if (linecount > this.mMaximum) {\n desired = layout.getLineTop(this.mMaximum);\n if (dr != null) {\n desired = Math.max(desired, dr.mDrawableHeightLeft);\n desired = Math.max(desired, dr.mDrawableHeightRight);\n }\n desired += pad;\n linecount = this.mMaximum;\n }\n }\n }\n else {\n desired = Math.min(desired, this.mMaximum);\n }\n if (this.mMinMode == TextView.LINES) {\n if (linecount < this.mMinimum) {\n desired += this.getLineHeight() * (this.mMinimum - linecount);\n }\n }\n else {\n desired = Math.max(desired, this.mMinimum);\n }\n desired = Math.max(desired, this.getSuggestedMinimumHeight());\n return desired;\n }\n checkForResize() {\n let sizeChanged = false;\n if (this.mLayout != null) {\n if (this.mLayoutParams.width == LayoutParams.WRAP_CONTENT) {\n sizeChanged = true;\n this.invalidate();\n }\n if (this.mLayoutParams.height == LayoutParams.WRAP_CONTENT) {\n let desiredHeight = this.getDesiredHeight();\n if (desiredHeight != this.getHeight()) {\n sizeChanged = true;\n }\n }\n else if (this.mLayoutParams.height == LayoutParams.MATCH_PARENT) {\n if (this.mDesiredHeightAtMeasure >= 0) {\n let desiredHeight = this.getDesiredHeight();\n if (desiredHeight != this.mDesiredHeightAtMeasure) {\n sizeChanged = true;\n }\n }\n }\n }\n if (sizeChanged) {\n this.requestLayout();\n }\n }\n checkForRelayout() {\n if ((this.mLayoutParams.width != LayoutParams.WRAP_CONTENT || (this.mMaxWidthMode == this.mMinWidthMode && this.mMaxWidthValue == this.mMinWidthValue)) && (this.mHint == null || this.mHintLayout != null) && (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() > 0)) {\n let oldht = this.mLayout.getHeight();\n let want = this.mLayout.getWidth();\n let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth();\n this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false);\n if (this.mEllipsize != TextUtils.TruncateAt.MARQUEE) {\n if (this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) {\n this.invalidate();\n return;\n }\n if (this.mLayout.getHeight() == oldht && (this.mHintLayout == null || this.mHintLayout.getHeight() == oldht)) {\n this.invalidate();\n return;\n }\n }\n this.requestLayout();\n this.invalidate();\n }\n else {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n if (this.mDeferScroll >= 0) {\n let curs = this.mDeferScroll;\n this.mDeferScroll = -1;\n this.bringPointIntoView(Math.min(curs, this.mText.length));\n }\n }\n isShowingHint() {\n return TextUtils.isEmpty(this.mText) && !TextUtils.isEmpty(this.mHint);\n }\n bringTextIntoView() {\n let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout;\n let line = 0;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n line = layout.getLineCount() - 1;\n }\n let a = layout.getParagraphAlignment(line);\n let dir = layout.getParagraphDirection(line);\n let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom();\n let ht = layout.getHeight();\n let scrollx, scrolly;\n if (a == Layout.Alignment.ALIGN_NORMAL) {\n a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_LEFT : Layout.Alignment.ALIGN_RIGHT;\n }\n else if (a == Layout.Alignment.ALIGN_OPPOSITE) {\n a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_RIGHT : Layout.Alignment.ALIGN_LEFT;\n }\n if (a == Layout.Alignment.ALIGN_CENTER) {\n let left = Math.floor(Math.floor(layout.getLineLeft(line)));\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n if (right - left < hspace) {\n scrollx = (right + left) / 2 - hspace / 2;\n }\n else {\n if (dir < 0) {\n scrollx = right - hspace;\n }\n else {\n scrollx = left;\n }\n }\n }\n else if (a == Layout.Alignment.ALIGN_RIGHT) {\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n scrollx = right - hspace;\n }\n else {\n scrollx = Math.floor(Math.floor(layout.getLineLeft(line)));\n }\n if (ht < vspace) {\n scrolly = 0;\n }\n else {\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n scrolly = ht - vspace;\n }\n else {\n scrolly = 0;\n }\n }\n if (scrollx != this.mScrollX || scrolly != this.mScrollY) {\n this.scrollTo(scrollx, scrolly);\n return true;\n }\n else {\n return false;\n }\n }\n bringPointIntoView(offset) {\n if (this.isLayoutRequested()) {\n this.mDeferScroll = offset;\n return false;\n }\n let changed = false;\n let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout;\n if (layout == null)\n return changed;\n let line = layout.getLineForOffset(offset);\n let grav;\n switch (layout.getParagraphAlignment(line)) {\n case Layout.Alignment.ALIGN_LEFT:\n grav = 1;\n break;\n case Layout.Alignment.ALIGN_RIGHT:\n grav = -1;\n break;\n case Layout.Alignment.ALIGN_NORMAL:\n grav = layout.getParagraphDirection(line);\n break;\n case Layout.Alignment.ALIGN_OPPOSITE:\n grav = -layout.getParagraphDirection(line);\n break;\n case Layout.Alignment.ALIGN_CENTER:\n default:\n grav = 0;\n break;\n }\n const clamped = grav > 0;\n const x = Math.floor(layout.getPrimaryHorizontal(offset, clamped));\n const top = layout.getLineTop(line);\n const bottom = layout.getLineTop(line + 1);\n let left = Math.floor(Math.floor(layout.getLineLeft(line)));\n let right = Math.floor(Math.ceil(layout.getLineRight(line)));\n let ht = layout.getHeight();\n let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom();\n if (!this.mHorizontallyScrolling && right - left > hspace && right > x) {\n right = Math.max(x, left + hspace);\n }\n let hslack = (bottom - top) / 2;\n let vslack = hslack;\n if (vslack > vspace / 4)\n vslack = vspace / 4;\n if (hslack > hspace / 4)\n hslack = hspace / 4;\n let hs = this.mScrollX;\n let vs = this.mScrollY;\n if (top - vs < vslack)\n vs = top - vslack;\n if (bottom - vs > vspace - vslack)\n vs = bottom - (vspace - vslack);\n if (ht - vs < vspace)\n vs = ht - vspace;\n if (0 - vs > 0)\n vs = 0;\n if (grav != 0) {\n if (x - hs < hslack) {\n hs = x - hslack;\n }\n if (x - hs > hspace - hslack) {\n hs = x - (hspace - hslack);\n }\n }\n if (grav < 0) {\n if (left - hs > 0)\n hs = left;\n if (right - hs < hspace)\n hs = right - hspace;\n }\n else if (grav > 0) {\n if (right - hs < hspace)\n hs = right - hspace;\n if (left - hs > 0)\n hs = left;\n }\n else {\n if (right - left <= hspace) {\n hs = left - (hspace - (right - left)) / 2;\n }\n else if (x > right - hslack) {\n hs = right - hspace;\n }\n else if (x < left + hslack) {\n hs = left;\n }\n else if (left > hs) {\n hs = left;\n }\n else if (right < hs + hspace) {\n hs = right - hspace;\n }\n else {\n if (x - hs < hslack) {\n hs = x - hslack;\n }\n if (x - hs > hspace - hslack) {\n hs = x - (hspace - hslack);\n }\n }\n }\n if (hs != this.mScrollX || vs != this.mScrollY) {\n if (this.mScroller == null) {\n this.scrollTo(hs, vs);\n }\n else {\n let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll;\n let dx = hs - this.mScrollX;\n let dy = vs - this.mScrollY;\n if (duration > TextView.ANIMATED_SCROLL_GAP) {\n this.mScroller.startScroll(this.mScrollX, this.mScrollY, dx, dy);\n this.awakenScrollBars(this.mScroller.getDuration());\n this.invalidate();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = AnimationUtils.currentAnimationTimeMillis();\n }\n changed = true;\n }\n if (this.isFocused()) {\n if (this.mTempRect == null)\n this.mTempRect = new Rect();\n this.mTempRect.set(x - 2, top, x + 2, bottom);\n this.getInterestingRect(this.mTempRect, line);\n this.mTempRect.offset(this.mScrollX, this.mScrollY);\n }\n return changed;\n }\n moveCursorToVisibleOffset() {\n return false;\n }\n computeScroll() {\n if (this.mScroller != null) {\n if (this.mScroller.computeScrollOffset()) {\n this.mScrollX = this.mScroller.getCurrX();\n this.mScrollY = this.mScroller.getCurrY();\n this.invalidateParentCaches();\n this.postInvalidate();\n }\n }\n }\n getInterestingRect(r, line) {\n this.convertFromViewportToContentCoordinates(r);\n if (line == 0)\n r.top -= this.getExtendedPaddingTop();\n if (line == this.mLayout.getLineCount() - 1)\n r.bottom += this.getExtendedPaddingBottom();\n }\n convertFromViewportToContentCoordinates(r) {\n const horizontalOffset = this.viewportToContentHorizontalOffset();\n r.left += horizontalOffset;\n r.right += horizontalOffset;\n const verticalOffset = this.viewportToContentVerticalOffset();\n r.top += verticalOffset;\n r.bottom += verticalOffset;\n }\n viewportToContentHorizontalOffset() {\n return this.getCompoundPaddingLeft() - this.mScrollX;\n }\n viewportToContentVerticalOffset() {\n let offset = this.getExtendedPaddingTop() - this.mScrollY;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {\n offset += this.getVerticalOffset(false);\n }\n return offset;\n }\n getSelectionStart() {\n return -1;\n }\n getSelectionEnd() {\n return -1;\n }\n hasSelection() {\n const selectionStart = this.getSelectionStart();\n const selectionEnd = this.getSelectionEnd();\n return selectionStart >= 0 && selectionStart != selectionEnd;\n }\n setAllCaps(allCaps) {\n if (allCaps) {\n this.setTransformationMethod(new AllCapsTransformationMethod());\n }\n else {\n this.setTransformationMethod(null);\n }\n }\n setSingleLine(singleLine = true) {\n if (this.mSingleLine == singleLine)\n return;\n this.setInputTypeSingleLine(singleLine);\n this.applySingleLine(singleLine, true, true);\n }\n setInputTypeSingleLine(singleLine) {\n }\n applySingleLine(singleLine, applyTransformation, changeMaxLines) {\n this.mSingleLine = singleLine;\n if (singleLine) {\n this.setLines(1);\n this.setHorizontallyScrolling(true);\n if (applyTransformation) {\n this.setTransformationMethod(SingleLineTransformationMethod.getInstance());\n }\n }\n else {\n if (changeMaxLines) {\n this.setMaxLines(Integer.MAX_VALUE);\n }\n this.setHorizontallyScrolling(false);\n if (applyTransformation) {\n this.setTransformationMethod(null);\n }\n }\n }\n setEllipsize(where) {\n if (this.mEllipsize != where) {\n this.mEllipsize = where;\n if (this.mLayout != null) {\n this.nullLayouts();\n this.requestLayout();\n this.invalidate();\n }\n }\n }\n setMarqueeRepeatLimit(marqueeLimit) {\n this.mMarqueeRepeatLimit = marqueeLimit;\n }\n getMarqueeRepeatLimit() {\n return this.mMarqueeRepeatLimit;\n }\n getEllipsize() {\n return this.mEllipsize;\n }\n setSelectAllOnFocus(selectAllOnFocus) {\n this.createEditorIfNeeded();\n this.mEditor.mSelectAllOnFocus = selectAllOnFocus;\n if (selectAllOnFocus && !Spannable.isImpl(this.mText)) {\n this.setText(this.mText, TextView.BufferType.SPANNABLE);\n }\n }\n setCursorVisible(visible) {\n }\n isCursorVisible() {\n return null;\n }\n canMarquee() {\n let width = (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight());\n return width > 0 && (this.mLayout.getLineWidth(0) > width || (this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL && this.mSavedMarqueeModeLayout != null && this.mSavedMarqueeModeLayout.getLineWidth(0) > width));\n }\n startMarquee() {\n if (this.getKeyListener() != null)\n return;\n if (this.compressText(this.getWidth() - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) {\n return;\n }\n if ((this.mMarquee == null || this.mMarquee.isStopped()) && (this.isFocused() || this.isSelected()) && this.getLineCount() == 1 && this.canMarquee()) {\n if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_FADE;\n const tmp = this.mLayout;\n this.mLayout = this.mSavedMarqueeModeLayout;\n this.mSavedMarqueeModeLayout = tmp;\n this.setHorizontalFadingEdgeEnabled(true);\n this.requestLayout();\n this.invalidate();\n }\n if (this.mMarquee == null)\n this.mMarquee = new TextView.Marquee(this);\n this.mMarquee.start(this.mMarqueeRepeatLimit);\n }\n }\n stopMarquee() {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n this.mMarquee.stop();\n }\n if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_FADE) {\n this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS;\n const tmp = this.mSavedMarqueeModeLayout;\n this.mSavedMarqueeModeLayout = this.mLayout;\n this.mLayout = tmp;\n this.setHorizontalFadingEdgeEnabled(false);\n this.requestLayout();\n this.invalidate();\n }\n }\n startStopMarquee(start) {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (start) {\n this.startMarquee();\n }\n else {\n this.stopMarquee();\n }\n }\n }\n onTextChanged(text, start, lengthBefore, lengthAfter) {\n }\n onSelectionChanged(selStart, selEnd) {\n }\n addTextChangedListener(watcher) {\n if (this.mListeners == null) {\n this.mListeners = new ArrayList();\n }\n this.mListeners.add(watcher);\n }\n removeTextChangedListener(watcher) {\n if (this.mListeners != null) {\n let i = this.mListeners.indexOf(watcher);\n if (i >= 0) {\n this.mListeners.remove(i);\n }\n }\n }\n sendBeforeTextChanged(text, start, before, after) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).beforeTextChanged(text, start, before, after);\n }\n }\n }\n removeAdjacentSuggestionSpans(pos) {\n }\n sendOnTextChanged(text, start, before, after) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).onTextChanged(text, start, before, after);\n }\n }\n }\n sendAfterTextChanged(text) {\n if (this.mListeners != null) {\n const list = this.mListeners;\n const count = list.size();\n for (let i = 0; i < count; i++) {\n list.get(i).afterTextChanged(text + '');\n }\n }\n }\n updateAfterEdit() {\n this.invalidate();\n let curs = this.getSelectionStart();\n if (curs >= 0 || (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {\n this.registerForPreDraw();\n }\n this.checkForResize();\n if (curs >= 0) {\n this.mHighlightPathBogus = true;\n this.bringPointIntoView(curs);\n }\n }\n handleTextChanged(buffer, start, before, after) {\n this.updateAfterEdit();\n this.sendOnTextChanged(buffer, start, before, after);\n this.onTextChanged(buffer, start, before, after);\n }\n spanChange(buf, what, oldStart, newStart, oldEnd, newEnd) {\n let selChanged = false;\n let newSelStart = -1, newSelEnd = -1;\n this.invalidate();\n this.mHighlightPathBogus = true;\n this.checkForResize();\n }\n dispatchFinishTemporaryDetach() {\n this.mDispatchTemporaryDetach = true;\n super.dispatchFinishTemporaryDetach();\n this.mDispatchTemporaryDetach = false;\n }\n onStartTemporaryDetach() {\n super.onStartTemporaryDetach();\n if (!this.mDispatchTemporaryDetach)\n this.mTemporaryDetach = true;\n }\n onFinishTemporaryDetach() {\n super.onFinishTemporaryDetach();\n if (!this.mDispatchTemporaryDetach)\n this.mTemporaryDetach = false;\n }\n onFocusChanged(focused, direction, previouslyFocusedRect) {\n if (this.mTemporaryDetach) {\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n return;\n }\n this.startStopMarquee(focused);\n if (this.mTransformation != null) {\n this.mTransformation.onFocusChanged(this, this.mText, focused, direction, previouslyFocusedRect);\n }\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n }\n onWindowFocusChanged(hasWindowFocus) {\n super.onWindowFocusChanged(hasWindowFocus);\n this.startStopMarquee(hasWindowFocus);\n }\n onVisibilityChanged(changedView, visibility) {\n super.onVisibilityChanged(changedView, visibility);\n }\n clearComposingText() {\n }\n setSelected(selected) {\n let wasSelected = this.isSelected();\n super.setSelected(selected);\n if (selected != wasSelected && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) {\n if (selected) {\n this.startMarquee();\n }\n else {\n this.stopMarquee();\n }\n }\n }\n onTouchEvent(event) {\n const action = event.getActionMasked();\n const superResult = super.onTouchEvent(event);\n const touchIsFinished = (action == MotionEvent.ACTION_UP)\n && this.isFocused();\n if ((this.mMovement != null || this.onCheckIsTextEditor()) && this.isEnabled() && Spannable.isImpl(this.mText) && this.mLayout != null) {\n let handled = false;\n if (this.mMovement != null) {\n handled = this.mMovement.onTouchEvent(this, this.mText, event) || handled;\n }\n if (handled) {\n return true;\n }\n }\n return superResult;\n }\n onGenericMotionEvent(event) {\n if (this.mMovement != null && Spannable.isImpl(this.mText) && this.mLayout != null) {\n try {\n if (this.mMovement.onGenericMotionEvent(this, this.mText, event)) {\n return true;\n }\n }\n catch (e) {\n }\n }\n return super.onGenericMotionEvent(event);\n }\n isTextEditable() {\n return false;\n }\n didTouchFocusSelect() {\n return false;\n }\n cancelLongPress() {\n super.cancelLongPress();\n }\n setScroller(s) {\n this.mScroller = s;\n }\n getLeftFadingEdgeStrength() {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n const marquee = this.mMarquee;\n if (marquee.shouldDrawLeftFade()) {\n const scroll = marquee.getScroll();\n return scroll / this.getHorizontalFadingEdgeLength();\n }\n else {\n return 0.0;\n }\n }\n else if (this.getLineCount() == 1) {\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n return 0.0;\n case Gravity.RIGHT:\n return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength();\n case Gravity.CENTER_HORIZONTAL:\n case Gravity.FILL_HORIZONTAL:\n const textDirection = this.mLayout.getParagraphDirection(0);\n if (textDirection == Layout.DIR_LEFT_TO_RIGHT) {\n return 0.0;\n }\n else {\n return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength();\n }\n }\n }\n }\n return super.getLeftFadingEdgeStrength();\n }\n getRightFadingEdgeStrength() {\n if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {\n if (this.mMarquee != null && !this.mMarquee.isStopped()) {\n const marquee = this.mMarquee;\n const maxFadeScroll = marquee.getMaxFadeScroll();\n const scroll = marquee.getScroll();\n return (maxFadeScroll - scroll) / this.getHorizontalFadingEdgeLength();\n }\n else if (this.getLineCount() == 1) {\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n const textWidth = (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight();\n const lineWidth = this.mLayout.getLineWidth(0);\n return (lineWidth - textWidth) / this.getHorizontalFadingEdgeLength();\n case Gravity.RIGHT:\n return 0.0;\n case Gravity.CENTER_HORIZONTAL:\n case Gravity.FILL_HORIZONTAL:\n const textDirection = this.mLayout.getParagraphDirection(0);\n if (textDirection == Layout.DIR_RIGHT_TO_LEFT) {\n return 0.0;\n }\n else {\n return (this.mLayout.getLineWidth(0) - ((this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) / this.getHorizontalFadingEdgeLength();\n }\n }\n }\n }\n return super.getRightFadingEdgeStrength();\n }\n computeHorizontalScrollRange() {\n if (this.mLayout != null) {\n return this.mSingleLine && (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT ? Math.floor(this.mLayout.getLineWidth(0)) : this.mLayout.getWidth();\n }\n return super.computeHorizontalScrollRange();\n }\n computeVerticalScrollRange() {\n if (this.mLayout != null)\n return this.mLayout.getHeight();\n return super.computeVerticalScrollRange();\n }\n computeVerticalScrollExtent() {\n return this.getHeight() - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n }\n static getTextColors() {\n return android.R.color.textView_textColor;\n }\n static getTextColor(def) {\n let colors = this.getTextColors();\n if (colors == null) {\n return def;\n }\n else {\n return colors.getDefaultColor();\n }\n }\n canSelectText() {\n return false;\n }\n textCanBeSelected() {\n return false;\n }\n getTransformedText(start, end) {\n return this.removeSuggestionSpans(this.mTransformed.substring(start, end));\n }\n performLongClick() {\n let handled = false;\n if (super.performLongClick()) {\n handled = true;\n }\n if (handled) {\n this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);\n }\n return handled;\n }\n isSuggestionsEnabled() {\n return false;\n }\n setCustomSelectionActionModeCallback(actionModeCallback) {\n this.createEditorIfNeeded();\n }\n getCustomSelectionActionModeCallback() {\n return null;\n }\n stopSelectionActionMode() {\n }\n canCut() {\n return false;\n }\n canCopy() {\n return true;\n }\n canPaste() {\n return false;\n }\n selectAllText() {\n return false;\n }\n getOffsetForPosition(x, y) {\n if (this.getLayout() == null)\n return -1;\n const line = this.getLineAtCoordinate(y);\n const offset = this.getOffsetAtCoordinate(line, x);\n return offset;\n }\n convertToLocalHorizontalCoordinate(x) {\n x -= this.getTotalPaddingLeft();\n x = Math.max(0.0, x);\n x = Math.min(this.getWidth() - this.getTotalPaddingRight() - 1, x);\n x += this.getScrollX();\n return x;\n }\n getLineAtCoordinate(y) {\n y -= this.getTotalPaddingTop();\n y = Math.max(0.0, y);\n y = Math.min(this.getHeight() - this.getTotalPaddingBottom() - 1, y);\n y += this.getScrollY();\n return this.getLayout().getLineForVertical(Math.floor(y));\n }\n getOffsetAtCoordinate(line, x) {\n x = this.convertToLocalHorizontalCoordinate(x);\n return this.getLayout().getOffsetForHorizontal(line, x);\n }\n isInBatchEditMode() {\n return false;\n }\n getTextDirectionHeuristic() {\n return TextDirectionHeuristics.LTR;\n }\n onResolveDrawables(layoutDirection) {\n if (this.mLastLayoutDirection == layoutDirection) {\n return;\n }\n this.mLastLayoutDirection = layoutDirection;\n if (this.mDrawables != null) {\n this.mDrawables.resolveWithLayoutDirection(layoutDirection);\n }\n }\n resetResolvedDrawables() {\n this.mLastLayoutDirection = -1;\n }\n deleteText_internal(start, end) {\n }\n replaceText_internal(start, end, text) {\n }\n setSpan_internal(span, start, end, flags) {\n }\n setCursorPosition_internal(start, end) {\n }\n createEditorIfNeeded() {\n }\n }\n TextView.LOG_TAG = \"TextView\";\n TextView.DEBUG_EXTRACT = false;\n TextView.SANS = 1;\n TextView.SERIF = 2;\n TextView.MONOSPACE = 3;\n TextView.SIGNED = 2;\n TextView.DECIMAL = 4;\n TextView.MARQUEE_FADE_NORMAL = 0;\n TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS = 1;\n TextView.MARQUEE_FADE_SWITCH_SHOW_FADE = 2;\n TextView.LINES = 1;\n TextView.EMS = TextView.LINES;\n TextView.PIXELS = 2;\n TextView.TEMP_RECTF = new RectF();\n TextView.VERY_WIDE = 1024 * 1024;\n TextView.ANIMATED_SCROLL_GAP = 250;\n TextView.NO_FILTERS = new Array(0);\n TextView.CHANGE_WATCHER_PRIORITY = 100;\n TextView.MULTILINE_STATE_SET = [View.VIEW_STATE_MULTILINE];\n TextView.LAST_CUT_OR_COPY_TIME = 0;\n TextView.UNKNOWN_BORING = new BoringLayout.Metrics();\n widget.TextView = TextView;\n (function (TextView) {\n class Drawables {\n constructor(context) {\n this.mCompoundRect = new Rect();\n this.mDrawableSizeTop = 0;\n this.mDrawableSizeBottom = 0;\n this.mDrawableSizeLeft = 0;\n this.mDrawableSizeRight = 0;\n this.mDrawableSizeStart = 0;\n this.mDrawableSizeEnd = 0;\n this.mDrawableSizeError = 0;\n this.mDrawableSizeTemp = 0;\n this.mDrawableWidthTop = 0;\n this.mDrawableWidthBottom = 0;\n this.mDrawableHeightLeft = 0;\n this.mDrawableHeightRight = 0;\n this.mDrawableHeightStart = 0;\n this.mDrawableHeightEnd = 0;\n this.mDrawableHeightError = 0;\n this.mDrawableHeightTemp = 0;\n this.mDrawablePadding = 0;\n this.mDrawableSaved = Drawables.DRAWABLE_NONE;\n this.mIsRtlCompatibilityMode = false;\n this.mOverride = false;\n }\n resolveWithLayoutDirection(layoutDirection) {\n this.mDrawableLeft = this.mDrawableLeftInitial;\n this.mDrawableRight = this.mDrawableRightInitial;\n if (this.mOverride) {\n this.mDrawableLeft = this.mDrawableStart;\n this.mDrawableSizeLeft = this.mDrawableSizeStart;\n this.mDrawableHeightLeft = this.mDrawableHeightStart;\n this.mDrawableRight = this.mDrawableEnd;\n this.mDrawableSizeRight = this.mDrawableSizeEnd;\n this.mDrawableHeightRight = this.mDrawableHeightEnd;\n }\n this.applyErrorDrawableIfNeeded(layoutDirection);\n this.updateDrawablesLayoutDirection(layoutDirection);\n }\n updateDrawablesLayoutDirection(layoutDirection) {\n }\n setErrorDrawable(dr, tv) {\n if (this.mDrawableError != dr && this.mDrawableError != null) {\n this.mDrawableError.setCallback(null);\n }\n this.mDrawableError = dr;\n const compoundRect = this.mCompoundRect;\n let state = tv.getDrawableState();\n if (this.mDrawableError != null) {\n this.mDrawableError.setState(state);\n this.mDrawableError.copyBounds(compoundRect);\n this.mDrawableError.setCallback(tv);\n this.mDrawableSizeError = compoundRect.width();\n this.mDrawableHeightError = compoundRect.height();\n }\n else {\n this.mDrawableSizeError = this.mDrawableHeightError = 0;\n }\n }\n applyErrorDrawableIfNeeded(layoutDirection) {\n switch (this.mDrawableSaved) {\n case Drawables.DRAWABLE_LEFT:\n this.mDrawableLeft = this.mDrawableTemp;\n this.mDrawableSizeLeft = this.mDrawableSizeTemp;\n this.mDrawableHeightLeft = this.mDrawableHeightTemp;\n break;\n case Drawables.DRAWABLE_RIGHT:\n this.mDrawableRight = this.mDrawableTemp;\n this.mDrawableSizeRight = this.mDrawableSizeTemp;\n this.mDrawableHeightRight = this.mDrawableHeightTemp;\n break;\n case Drawables.DRAWABLE_NONE:\n default:\n }\n this.mDrawableSaved = Drawables.DRAWABLE_RIGHT;\n this.mDrawableTemp = this.mDrawableRight;\n this.mDrawableSizeTemp = this.mDrawableSizeRight;\n this.mDrawableHeightTemp = this.mDrawableHeightRight;\n this.mDrawableRight = this.mDrawableError;\n this.mDrawableSizeRight = this.mDrawableSizeError;\n this.mDrawableHeightRight = this.mDrawableHeightError;\n }\n }\n Drawables.DRAWABLE_NONE = -1;\n Drawables.DRAWABLE_RIGHT = 0;\n Drawables.DRAWABLE_LEFT = 1;\n TextView.Drawables = Drawables;\n class Marquee extends Handler {\n constructor(v) {\n super();\n this.mStatus = Marquee.MARQUEE_STOPPED;\n this.mScrollUnit = 0;\n this.mMaxScroll = 0;\n this.mMaxFadeScroll = 0;\n this.mGhostStart = 0;\n this.mGhostOffset = 0;\n this.mFadeStop = 0;\n this.mRepeatLimit = 0;\n this.mScroll = 0;\n const density = v.getResources().getDisplayMetrics().density;\n this.mScrollUnit = (Marquee.MARQUEE_PIXELS_PER_SECOND * density) / Marquee.MARQUEE_RESOLUTION;\n this.mView = new WeakReference(v);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case Marquee.MESSAGE_START:\n this.mStatus = Marquee.MARQUEE_RUNNING;\n this.tick();\n break;\n case Marquee.MESSAGE_TICK:\n this.tick();\n break;\n case Marquee.MESSAGE_RESTART:\n if (this.mStatus == Marquee.MARQUEE_RUNNING) {\n if (this.mRepeatLimit >= 0) {\n this.mRepeatLimit--;\n }\n this.start(this.mRepeatLimit);\n }\n break;\n }\n }\n tick() {\n if (this.mStatus != Marquee.MARQUEE_RUNNING) {\n return;\n }\n this.removeMessages(Marquee.MESSAGE_TICK);\n const textView = this.mView.get();\n if (textView != null && (textView.isFocused() || textView.isSelected())) {\n this.mScroll += this.mScrollUnit;\n if (this.mScroll > this.mMaxScroll) {\n this.mScroll = this.mMaxScroll;\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART, Marquee.MARQUEE_RESTART_DELAY);\n }\n else {\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK, Marquee.MARQUEE_RESOLUTION);\n }\n textView.invalidate();\n }\n }\n stop() {\n this.mStatus = Marquee.MARQUEE_STOPPED;\n this.removeMessages(Marquee.MESSAGE_START);\n this.removeMessages(Marquee.MESSAGE_RESTART);\n this.removeMessages(Marquee.MESSAGE_TICK);\n this.resetScroll();\n }\n resetScroll() {\n this.mScroll = 0.0;\n const textView = this.mView.get();\n if (textView != null)\n textView.invalidate();\n }\n start(repeatLimit) {\n if (repeatLimit == 0) {\n this.stop();\n return;\n }\n this.mRepeatLimit = repeatLimit;\n const textView = this.mView.get();\n if (textView != null && textView.mLayout != null) {\n this.mStatus = Marquee.MARQUEE_STARTING;\n this.mScroll = 0.0;\n const textWidth = textView.getWidth() - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight();\n const lineWidth = textView.mLayout.getLineWidth(0);\n const gap = textWidth / 3.0;\n this.mGhostStart = lineWidth - textWidth + gap;\n this.mMaxScroll = this.mGhostStart + textWidth;\n this.mGhostOffset = lineWidth + gap;\n this.mFadeStop = lineWidth + textWidth / 6.0;\n this.mMaxFadeScroll = this.mGhostStart + lineWidth + lineWidth;\n textView.invalidate();\n this.sendEmptyMessageDelayed(Marquee.MESSAGE_START, Marquee.MARQUEE_DELAY);\n }\n }\n getGhostOffset() {\n return this.mGhostOffset;\n }\n getScroll() {\n return this.mScroll;\n }\n getMaxFadeScroll() {\n return this.mMaxFadeScroll;\n }\n shouldDrawLeftFade() {\n return this.mScroll <= this.mFadeStop;\n }\n shouldDrawGhost() {\n return this.mStatus == Marquee.MARQUEE_RUNNING && this.mScroll > this.mGhostStart;\n }\n isRunning() {\n return this.mStatus == Marquee.MARQUEE_RUNNING;\n }\n isStopped() {\n return this.mStatus == Marquee.MARQUEE_STOPPED;\n }\n }\n Marquee.MARQUEE_DELTA_MAX = 0.07;\n Marquee.MARQUEE_DELAY = 1200;\n Marquee.MARQUEE_RESTART_DELAY = 1200;\n Marquee.MARQUEE_RESOLUTION = 1000 / 30;\n Marquee.MARQUEE_PIXELS_PER_SECOND = 30;\n Marquee.MARQUEE_STOPPED = 0x0;\n Marquee.MARQUEE_STARTING = 0x1;\n Marquee.MARQUEE_RUNNING = 0x2;\n Marquee.MESSAGE_START = 0x1;\n Marquee.MESSAGE_TICK = 0x2;\n Marquee.MESSAGE_RESTART = 0x3;\n TextView.Marquee = Marquee;\n class ChangeWatcher {\n constructor(arg) {\n this._TextView_this = arg;\n }\n beforeTextChanged(buffer, start, before, after) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"beforeTextChanged start=\" + start + \" before=\" + before + \" after=\" + after + \": \" + buffer);\n this._TextView_this.sendBeforeTextChanged(buffer, start, before, after);\n }\n onTextChanged(buffer, start, before, after) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onTextChanged start=\" + start + \" before=\" + before + \" after=\" + after + \": \" + buffer);\n this._TextView_this.handleTextChanged(buffer, start, before, after);\n }\n afterTextChanged(buffer) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"afterTextChanged: \" + buffer);\n this._TextView_this.sendAfterTextChanged(buffer);\n }\n onSpanChanged(buf, what, s, e, st, en) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanChanged s=\" + s + \" e=\" + e + \" st=\" + st + \" en=\" + en + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, s, st, e, en);\n }\n onSpanAdded(buf, what, s, e) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanAdded s=\" + s + \" e=\" + e + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, -1, s, -1, e);\n }\n onSpanRemoved(buf, what, s, e) {\n if (TextView.DEBUG_EXTRACT)\n Log.v(TextView.LOG_TAG, \"onSpanRemoved s=\" + s + \" e=\" + e + \" what=\" + what + \": \" + buf);\n this._TextView_this.spanChange(buf, what, s, -1, e, -1);\n }\n }\n TextView.ChangeWatcher = ChangeWatcher;\n var BufferType;\n (function (BufferType) {\n BufferType[BufferType[\"NORMAL\"] = 0] = \"NORMAL\";\n BufferType[BufferType[\"SPANNABLE\"] = 1] = \"SPANNABLE\";\n BufferType[BufferType[\"EDITABLE\"] = 2] = \"EDITABLE\";\n })(BufferType = TextView.BufferType || (TextView.BufferType = {}));\n })(TextView = widget.TextView || (widget.TextView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class Button extends widget.TextView {\n constructor(context, bindElement, defStyle = android.R.attr.buttonStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.Button = Button;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ListAdapter;\n (function (ListAdapter) {\n function isImpl(obj) {\n return obj && obj['areAllItemsEnabled'] && obj['isEnabled'];\n }\n ListAdapter.isImpl = isImpl;\n })(ListAdapter = widget.ListAdapter || (widget.ListAdapter = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var LongSparseArray = android.util.LongSparseArray;\n var SparseArray = android.util.SparseArray;\n var SparseBooleanArray = android.util.SparseBooleanArray;\n var StateSet = android.util.StateSet;\n var HapticFeedbackConstants = android.view.HapticFeedbackConstants;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var AdapterView = android.widget.AdapterView;\n var OverScroller = android.widget.OverScroller;\n class AbsListView extends AdapterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mChoiceMode = AbsListView.CHOICE_MODE_NONE;\n this.mCheckedItemCount = 0;\n this.mDeferNotifyDataSetChanged = false;\n this.mDrawSelectorOnTop = false;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.mSelectorRect = new Rect();\n this.mRecycler = new AbsListView.RecycleBin(this);\n this.mSelectionLeftPadding = 0;\n this.mSelectionTopPadding = 0;\n this.mSelectionRightPadding = 0;\n this.mSelectionBottomPadding = 0;\n this.mListPadding = new Rect();\n this.mWidthMeasureSpec = 0;\n this.mMotionPosition = 0;\n this.mMotionViewOriginalTop = 0;\n this.mMotionViewNewTop = 0;\n this.mMotionX = 0;\n this.mMotionY = 0;\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.mLastY = 0;\n this.mMotionCorrection = 0;\n this.mSelectedTop = 0;\n this.mSmoothScrollbarEnabled = true;\n this.mResurrectToPosition = AbsListView.INVALID_POSITION;\n this.mOverscrollMax = 0;\n this.mLastTouchMode = AbsListView.TOUCH_MODE_UNKNOWN;\n this.mScrollProfilingStarted = false;\n this.mFlingProfilingStarted = false;\n this.mTranscriptMode = 0;\n this.mCacheColorHint = 0;\n this.mLastScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;\n this.mDensityScale = 0;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mVelocityScale = 1.0;\n this.mIsScrap = new Array(1);\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n this.mOverscrollDistance = 0;\n this._mOverflingDistance = 0;\n this.mFirstPositionDistanceGuess = 0;\n this.mLastPositionDistanceGuess = 0;\n this.mDirection = 0;\n this.mGlowPaddingLeft = 0;\n this.mGlowPaddingRight = 0;\n this.mLastHandledItemCount = 0;\n this.initAbsListView();\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n let d = a.getDrawable('listSelector');\n if (d != null) {\n this.setSelector(d);\n }\n this.mDrawSelectorOnTop = a.getBoolean('drawSelectorOnTop', false);\n let stackFromBottom = a.getBoolean('stackFromBottom', false);\n this.setStackFromBottom(stackFromBottom);\n let scrollingCacheEnabled = a.getBoolean('scrollingCache', true);\n this.setScrollingCacheEnabled(scrollingCacheEnabled);\n let useTextFilter = a.getBoolean('textFilterEnabled', false);\n this.setTextFilterEnabled(useTextFilter);\n let transcriptModeValue = a.getAttrValue('transcriptMode');\n let transcriptMode = AbsListView.TRANSCRIPT_MODE_DISABLED;\n if (transcriptModeValue === \"disabled\")\n transcriptMode = AbsListView.TRANSCRIPT_MODE_DISABLED;\n else if (transcriptModeValue === \"normal\")\n transcriptMode = AbsListView.TRANSCRIPT_MODE_NORMAL;\n else if (transcriptModeValue === \"alwaysScroll\")\n transcriptMode = AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL;\n this.setTranscriptMode(transcriptMode);\n let color = a.getColor('cacheColorHint', 0);\n this.setCacheColorHint(color);\n let enableFastScroll = a.getBoolean('fastScrollEnabled', false);\n this.setFastScrollEnabled(enableFastScroll);\n let smoothScrollbar = a.getBoolean('smoothScrollbar', true);\n this.setSmoothScrollbarEnabled(smoothScrollbar);\n let choiceModeValue = a.getAttrValue('choiceMode');\n let choiceMode = AbsListView.CHOICE_MODE_NONE;\n if (choiceModeValue === \"none\")\n choiceMode = AbsListView.CHOICE_MODE_NONE;\n else if (choiceModeValue === \"singleChoice\")\n choiceMode = AbsListView.CHOICE_MODE_SINGLE;\n else if (choiceModeValue === \"multipleChoice\")\n choiceMode = AbsListView.CHOICE_MODE_MULTIPLE;\n this.setChoiceMode(choiceMode);\n this.setFastScrollAlwaysVisible(a.getBoolean('fastScrollAlwaysVisible', false));\n a.recycle();\n }\n get mOverflingDistance() {\n if (this.mScrollY <= 0) {\n if (this.mScrollY < -this._mOverflingDistance)\n return -this.mScrollY;\n return this._mOverflingDistance;\n }\n let overDistance = this.mScrollY;\n if (overDistance > this._mOverflingDistance)\n return overDistance;\n return this._mOverflingDistance;\n }\n set mOverflingDistance(value) {\n this._mOverflingDistance = value;\n }\n initAbsListView() {\n this.setClickable(true);\n this.setFocusableInTouchMode(true);\n this.setWillNotDraw(false);\n this.setAlwaysDrawnWithCacheEnabled(false);\n this.setScrollingCacheEnabled(true);\n const configuration = ViewConfiguration.get();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this.mOverflingDistance = configuration.getScaledOverflingDistance();\n this.mDensityScale = android.content.res.Resources.getDisplayMetrics().density;\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder()\n .set('listSelector', {\n setter(v, value, attrBinder) {\n let d = attrBinder.parseDrawable(value);\n if (d)\n v.setSelector(d);\n }, getter(v) {\n return v.getSelector();\n }\n })\n .set('drawSelectorOnTop', {\n setter(v, value, attrBinder) {\n v.setDrawSelectorOnTop(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.mDrawSelectorOnTop;\n }\n })\n .set('stackFromBottom', {\n setter(v, value, attrBinder) {\n v.setStackFromBottom(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.isStackFromBottom();\n }\n })\n .set('scrollingCache', {\n setter(v, value, attrBinder) {\n v.setScrollingCacheEnabled(attrBinder.parseBoolean(value, true));\n }, getter(v) {\n return v.isScrollingCacheEnabled();\n }\n })\n .set('transcriptMode', {\n setter(v, value, attrBinder) {\n v.setTranscriptMode(attrBinder.parseEnum(value, new Map()\n .set(\"disabled\", AbsListView.TRANSCRIPT_MODE_DISABLED)\n .set(\"normal\", AbsListView.TRANSCRIPT_MODE_NORMAL)\n .set(\"alwaysScroll\", AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL), AbsListView.TRANSCRIPT_MODE_DISABLED));\n }, getter(v) {\n return v.getTranscriptMode();\n }\n })\n .set('cacheColorHint', {\n setter(v, value, attrBinder) {\n let color = attrBinder.parseColor(value, 0);\n v.setCacheColorHint(color);\n }, getter(v) {\n return v.getCacheColorHint();\n }\n })\n .set('fastScrollEnabled', {\n setter(v, value, attrBinder) {\n let enableFastScroll = attrBinder.parseBoolean(value, false);\n v.setFastScrollEnabled(enableFastScroll);\n }, getter(v) {\n return v.isFastScrollEnabled();\n }\n })\n .set('fastScrollAlwaysVisible', {\n setter(v, value, attrBinder) {\n let fastScrollAlwaysVisible = attrBinder.parseBoolean(value, false);\n v.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);\n }, getter(v) {\n return v.isFastScrollAlwaysVisible();\n }\n })\n .set('smoothScrollbar', {\n setter(v, value, attrBinder) {\n let smoothScrollbar = attrBinder.parseBoolean(value, true);\n v.setSmoothScrollbarEnabled(smoothScrollbar);\n }, getter(v) {\n return v.isSmoothScrollbarEnabled();\n }\n })\n .set('choiceMode', {\n setter(v, value, attrBinder) {\n v.setChoiceMode(attrBinder.parseEnum(value, new Map()\n .set(\"none\", AbsListView.CHOICE_MODE_NONE)\n .set(\"singleChoice\", AbsListView.CHOICE_MODE_SINGLE)\n .set(\"multipleChoice\", AbsListView.CHOICE_MODE_MULTIPLE), AbsListView.CHOICE_MODE_NONE));\n }, getter(v) {\n return v.getChoiceMode();\n }\n });\n }\n setOverScrollMode(mode) {\n if (mode != AbsListView.OVER_SCROLL_NEVER) {\n }\n else {\n }\n super.setOverScrollMode(mode);\n }\n setAdapter(adapter) {\n if (adapter != null) {\n this.mAdapterHasStableIds = this.mAdapter.hasStableIds();\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapterHasStableIds && this.mCheckedIdStates == null) {\n this.mCheckedIdStates = new LongSparseArray();\n }\n }\n if (this.mCheckStates != null) {\n this.mCheckStates.clear();\n }\n if (this.mCheckedIdStates != null) {\n this.mCheckedIdStates.clear();\n }\n }\n getCheckedItemCount() {\n return this.mCheckedItemCount;\n }\n isItemChecked(position) {\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n return this.mCheckStates.get(position);\n }\n return false;\n }\n getCheckedItemPosition() {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE && this.mCheckStates != null && this.mCheckStates.size() == 1) {\n return this.mCheckStates.keyAt(0);\n }\n return AbsListView.INVALID_POSITION;\n }\n getCheckedItemPositions() {\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n return this.mCheckStates;\n }\n return null;\n }\n getCheckedItemIds() {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE || this.mCheckedIdStates == null || this.mAdapter == null) {\n return [0];\n }\n const idStates = this.mCheckedIdStates;\n const count = idStates.size();\n const ids = [count];\n for (let i = 0; i < count; i++) {\n ids[i] = idStates.keyAt(i);\n }\n return ids;\n }\n clearChoices() {\n if (this.mCheckStates != null) {\n this.mCheckStates.clear();\n }\n if (this.mCheckedIdStates != null) {\n this.mCheckedIdStates.clear();\n }\n this.mCheckedItemCount = 0;\n }\n setItemChecked(position, value) {\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE) {\n return;\n }\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) {\n let oldValue = this.mCheckStates.get(position);\n this.mCheckStates.put(position, value);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n if (value) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n else {\n this.mCheckedIdStates.delete(this.mAdapter.getItemId(position));\n }\n }\n if (oldValue != value) {\n if (value) {\n this.mCheckedItemCount++;\n }\n else {\n this.mCheckedItemCount--;\n }\n }\n }\n else {\n let updateIds = this.mCheckedIdStates != null && this.mAdapter.hasStableIds();\n if (value || this.isItemChecked(position)) {\n this.mCheckStates.clear();\n if (updateIds) {\n this.mCheckedIdStates.clear();\n }\n }\n if (value) {\n this.mCheckStates.put(position, true);\n if (updateIds) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n this.mCheckedItemCount = 1;\n }\n else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) {\n this.mCheckedItemCount = 0;\n }\n }\n if (!this.mInLayout && !this.mBlockLayoutRequests) {\n this.mDataChanged = true;\n this.rememberSyncState();\n this.requestLayout();\n }\n }\n performItemClick(view, position, id) {\n let handled = false;\n let dispatchItemClick = true;\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n handled = true;\n let checkedStateChanged = false;\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL && this.mChoiceActionMode != null)) {\n let checked = !this.mCheckStates.get(position, false);\n this.mCheckStates.put(position, checked);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n if (checked) {\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n else {\n this.mCheckedIdStates.delete(this.mAdapter.getItemId(position));\n }\n }\n if (checked) {\n this.mCheckedItemCount++;\n }\n else {\n this.mCheckedItemCount--;\n }\n checkedStateChanged = true;\n }\n else if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE) {\n let checked = !this.mCheckStates.get(position, false);\n if (checked) {\n this.mCheckStates.clear();\n this.mCheckStates.put(position, true);\n if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) {\n this.mCheckedIdStates.clear();\n this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position);\n }\n this.mCheckedItemCount = 1;\n }\n else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) {\n this.mCheckedItemCount = 0;\n }\n checkedStateChanged = true;\n }\n if (checkedStateChanged) {\n this.updateOnScreenCheckedViews();\n }\n }\n if (dispatchItemClick) {\n handled = super.performItemClick(view, position, id) || handled;\n }\n return handled;\n }\n updateOnScreenCheckedViews() {\n const firstPos = this.mFirstPosition;\n const count = this.getChildCount();\n const useActivated = true;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n const position = firstPos + i;\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else if (useActivated) {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n }\n getChoiceMode() {\n return this.mChoiceMode;\n }\n setChoiceMode(choiceMode) {\n this.mChoiceMode = choiceMode;\n if (this.mChoiceActionMode != null) {\n this.mChoiceActionMode.finish();\n this.mChoiceActionMode = null;\n }\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) {\n if (this.mCheckStates == null) {\n this.mCheckStates = new SparseBooleanArray(0);\n }\n if (this.mCheckedIdStates == null && this.mAdapter != null && this.mAdapter.hasStableIds()) {\n this.mCheckedIdStates = new LongSparseArray(0);\n }\n if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) {\n this.clearChoices();\n this.setLongClickable(true);\n }\n }\n }\n contentFits() {\n const childCount = this.getChildCount();\n if (childCount == 0)\n return true;\n if (childCount != this.mItemCount)\n return false;\n return this.getChildAt(0).getTop() >= this.mListPadding.top && this.getChildAt(childCount - 1).getBottom() <= this.getHeight() - this.mListPadding.bottom;\n }\n setFastScrollEnabled(enabled) {\n if (this.mFastScrollEnabled != enabled) {\n this.mFastScrollEnabled = enabled;\n this.setFastScrollerEnabledUiThread(enabled);\n }\n }\n setFastScrollerEnabledUiThread(enabled) {\n }\n setFastScrollAlwaysVisible(alwaysShow) {\n if (this.mFastScrollAlwaysVisible != alwaysShow) {\n if (alwaysShow && !this.mFastScrollEnabled) {\n this.setFastScrollEnabled(true);\n }\n this.mFastScrollAlwaysVisible = alwaysShow;\n this.setFastScrollerAlwaysVisibleUiThread(alwaysShow);\n }\n }\n setFastScrollerAlwaysVisibleUiThread(alwaysShow) {\n }\n isOwnerThread() {\n return true;\n }\n isFastScrollAlwaysVisible() {\n return false;\n }\n getVerticalScrollbarWidth() {\n return super.getVerticalScrollbarWidth();\n }\n isFastScrollEnabled() {\n return false;\n }\n setVerticalScrollbarPosition(position) {\n super.setVerticalScrollbarPosition(position);\n }\n setScrollBarStyle(style) {\n super.setScrollBarStyle(style);\n }\n isVerticalScrollBarHidden() {\n return this.isFastScrollEnabled();\n }\n setSmoothScrollbarEnabled(enabled) {\n this.mSmoothScrollbarEnabled = enabled;\n }\n isSmoothScrollbarEnabled() {\n return this.mSmoothScrollbarEnabled;\n }\n setOnScrollListener(l) {\n this.mOnScrollListener = l;\n this.invokeOnItemScrollListener();\n }\n invokeOnItemScrollListener() {\n if (this.mOnScrollListener != null) {\n this.mOnScrollListener.onScroll(this, this.mFirstPosition, this.getChildCount(), this.mItemCount);\n }\n this.onScrollChanged(0, 0, 0, 0);\n }\n isScrollingCacheEnabled() {\n return this.mScrollingCacheEnabled;\n }\n setScrollingCacheEnabled(enabled) {\n if (this.mScrollingCacheEnabled && !enabled) {\n this.clearScrollingCache();\n }\n this.mScrollingCacheEnabled = enabled;\n }\n setTextFilterEnabled(textFilterEnabled) {\n this.mTextFilterEnabled = textFilterEnabled;\n }\n isTextFilterEnabled() {\n return this.mTextFilterEnabled;\n }\n getFocusedRect(r) {\n let view = this.getSelectedView();\n if (view != null && view.getParent() == this) {\n view.getFocusedRect(r);\n this.offsetDescendantRectToMyCoords(view, r);\n }\n else {\n super.getFocusedRect(r);\n }\n }\n useDefaultSelector() {\n this.setSelector(android.R.drawable.list_selector_background);\n }\n isStackFromBottom() {\n return this.mStackFromBottom;\n }\n setStackFromBottom(stackFromBottom) {\n if (this.mStackFromBottom != stackFromBottom) {\n this.mStackFromBottom = stackFromBottom;\n this.requestLayoutIfNecessary();\n }\n }\n requestLayoutIfNecessary() {\n if (this.getChildCount() > 0) {\n this.resetList();\n this.requestLayout();\n this.invalidate();\n }\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n if (gainFocus && this.mSelectedPosition < 0 && !this.isInTouchMode()) {\n if (!this.isAttachedToWindow() && this.mAdapter != null) {\n this.mDataChanged = true;\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n }\n this.resurrectSelection();\n }\n }\n requestLayout() {\n if (!this.mBlockLayoutRequests && !this.mInLayout) {\n super.requestLayout();\n }\n }\n resetList() {\n this.removeAllViewsInLayout();\n this.mFirstPosition = 0;\n this.mDataChanged = false;\n this.mPositionScrollAfterLayout = null;\n this.mNeedSync = false;\n this.mPendingSync = null;\n this.mOldSelectedPosition = AbsListView.INVALID_POSITION;\n this.mOldSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.setSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.mSelectedTop = 0;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.mSelectorRect.setEmpty();\n this.invalidate();\n }\n computeVerticalScrollExtent() {\n const count = this.getChildCount();\n if (count > 0) {\n if (this.mSmoothScrollbarEnabled) {\n let extent = count * 100;\n let view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n extent += (top * 100) / height;\n }\n view = this.getChildAt(count - 1);\n const bottom = view.getBottom();\n height = view.getHeight();\n if (height > 0) {\n extent -= ((bottom - this.getHeight()) * 100) / height;\n }\n return extent;\n }\n else {\n return 1;\n }\n }\n return 0;\n }\n computeVerticalScrollOffset() {\n const firstPosition = this.mFirstPosition;\n const childCount = this.getChildCount();\n if (firstPosition >= 0 && childCount > 0) {\n if (this.mSmoothScrollbarEnabled) {\n const view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n return Math.max(firstPosition * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)), 0);\n }\n }\n else {\n let index;\n const count = this.mItemCount;\n if (firstPosition == 0) {\n index = 0;\n }\n else if (firstPosition + childCount == count) {\n index = count;\n }\n else {\n index = firstPosition + childCount / 2;\n }\n return Math.floor((firstPosition + childCount * (index / count)));\n }\n }\n return 0;\n }\n computeVerticalScrollRange() {\n let result;\n if (this.mSmoothScrollbarEnabled) {\n result = Math.max(this.mItemCount * 100, 0);\n if (this.mScrollY != 0) {\n result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)));\n }\n }\n else {\n result = this.mItemCount;\n }\n return result;\n }\n getTopFadingEdgeStrength() {\n const count = this.getChildCount();\n const fadeEdge = super.getTopFadingEdgeStrength();\n if (count == 0) {\n return fadeEdge;\n }\n else {\n if (this.mFirstPosition > 0) {\n return 1.0;\n }\n const top = this.getChildAt(0).getTop();\n const fadeLength = this.getVerticalFadingEdgeLength();\n return top < this.mPaddingTop ? -(top - this.mPaddingTop) / fadeLength : fadeEdge;\n }\n }\n getBottomFadingEdgeStrength() {\n const count = this.getChildCount();\n const fadeEdge = super.getBottomFadingEdgeStrength();\n if (count == 0) {\n return fadeEdge;\n }\n else {\n if (this.mFirstPosition + count - 1 < this.mItemCount - 1) {\n return 1.0;\n }\n const bottom = this.getChildAt(count - 1).getBottom();\n const height = this.getHeight();\n const fadeLength = this.getVerticalFadingEdgeLength();\n return bottom > height - this.mPaddingBottom ? (bottom - height + this.mPaddingBottom) / fadeLength : fadeEdge;\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mSelector == null) {\n this.useDefaultSelector();\n }\n const listPadding = this.mListPadding;\n listPadding.left = this.mSelectionLeftPadding + this.mPaddingLeft;\n listPadding.top = this.mSelectionTopPadding + this.mPaddingTop;\n listPadding.right = this.mSelectionRightPadding + this.mPaddingRight;\n listPadding.bottom = this.mSelectionBottomPadding + this.mPaddingBottom;\n if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) {\n const childCount = this.getChildCount();\n const listBottom = this.getHeight() - this.getPaddingBottom();\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;\n this.mForceTranscriptScroll = this.mFirstPosition + childCount >= this.mLastHandledItemCount && lastBottom <= listBottom;\n }\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mInLayout = true;\n if (changed) {\n let childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n this.getChildAt(i).forceLayout();\n }\n this.mRecycler.markChildrenDirty();\n }\n this.layoutChildren();\n this.mInLayout = false;\n this.mOverscrollMax = (b - t) / AbsListView.OVERSCROLL_LIMIT_DIVISOR;\n }\n setFrame(left, top, right, bottom) {\n const changed = super.setFrame(left, top, right, bottom);\n if (changed) {\n const visible = this.getWindowVisibility() == View.VISIBLE;\n }\n return changed;\n }\n layoutChildren() {\n }\n updateScrollIndicators() {\n if (this.mScrollUp != null) {\n let canScrollUp;\n canScrollUp = this.mFirstPosition > 0;\n if (!canScrollUp) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n canScrollUp = child.getTop() < this.mListPadding.top;\n }\n }\n this.mScrollUp.setVisibility(canScrollUp ? View.VISIBLE : View.INVISIBLE);\n }\n if (this.mScrollDown != null) {\n let canScrollDown;\n let count = this.getChildCount();\n canScrollDown = (this.mFirstPosition + count) < this.mItemCount;\n if (!canScrollDown && count > 0) {\n let child = this.getChildAt(count - 1);\n canScrollDown = child.getBottom() > this.mBottom - this.mListPadding.bottom;\n }\n this.mScrollDown.setVisibility(canScrollDown ? View.VISIBLE : View.INVISIBLE);\n }\n }\n getSelectedView() {\n if (this.mItemCount > 0 && this.mSelectedPosition >= 0) {\n return this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n }\n else {\n return null;\n }\n }\n getListPaddingTop() {\n return this.mListPadding.top;\n }\n getListPaddingBottom() {\n return this.mListPadding.bottom;\n }\n getListPaddingLeft() {\n return this.mListPadding.left;\n }\n getListPaddingRight() {\n return this.mListPadding.right;\n }\n obtainView(position, isScrap) {\n isScrap[0] = false;\n let scrapView;\n scrapView = this.mRecycler.getTransientStateView(position);\n if (scrapView == null) {\n scrapView = this.mRecycler.getScrapView(position);\n }\n let child;\n if (scrapView != null) {\n child = this.mAdapter.getView(position, scrapView, this);\n if (child != scrapView) {\n this.mRecycler.addScrapView(scrapView, position);\n if (this.mCacheColorHint != 0) {\n child.setDrawingCacheBackgroundColor(this.mCacheColorHint);\n }\n }\n else {\n isScrap[0] = true;\n child.dispatchFinishTemporaryDetach();\n }\n }\n else {\n child = this.mAdapter.getView(position, null, this);\n if (this.mCacheColorHint != 0) {\n child.setDrawingCacheBackgroundColor(this.mCacheColorHint);\n }\n }\n if (this.mAdapterHasStableIds) {\n const vlp = child.getLayoutParams();\n let lp;\n if (vlp == null) {\n lp = this.generateDefaultLayoutParams();\n }\n else if (!this.checkLayoutParams(vlp)) {\n lp = this.generateLayoutParams(vlp);\n }\n else {\n lp = vlp;\n }\n lp.itemId = this.mAdapter.getItemId(position);\n child.setLayoutParams(lp);\n }\n return child;\n }\n positionSelector(...args) {\n if (args.length === 4) {\n let [l, t, r, b] = args;\n this.mSelectorRect.set(l - this.mSelectionLeftPadding, t - this.mSelectionTopPadding, r + this.mSelectionRightPadding, b + this.mSelectionBottomPadding);\n }\n else {\n let position = args[0];\n let sel = args[1];\n if (position != AbsListView.INVALID_POSITION) {\n this.mSelectorPosition = position;\n }\n const selectorRect = this.mSelectorRect;\n selectorRect.set(sel.getLeft(), sel.getTop(), sel.getRight(), sel.getBottom());\n if (sel['adjustListItemSelectionBounds']) {\n sel.adjustListItemSelectionBounds(selectorRect);\n }\n this.positionSelector(selectorRect.left, selectorRect.top, selectorRect.right, selectorRect.bottom);\n const isChildViewEnabled = this.mIsChildViewEnabled;\n if (sel.isEnabled() != isChildViewEnabled) {\n this.mIsChildViewEnabled = !isChildViewEnabled;\n if (this.getSelectedItemPosition() != AbsListView.INVALID_POSITION) {\n this.refreshDrawableState();\n }\n }\n }\n }\n dispatchDraw(canvas) {\n let saveCount = 0;\n const clipToPadding = (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n this.mGroupFlags &= ~AbsListView.CLIP_TO_PADDING_MASK;\n }\n const drawSelectorOnTop = this.mDrawSelectorOnTop;\n if (!drawSelectorOnTop) {\n this.drawSelector(canvas);\n }\n super.dispatchDraw(canvas);\n if (drawSelectorOnTop) {\n this.drawSelector(canvas);\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n this.mGroupFlags |= AbsListView.CLIP_TO_PADDING_MASK;\n }\n }\n isPaddingOffsetRequired() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) != AbsListView.CLIP_TO_PADDING_MASK;\n }\n getLeftPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingLeft;\n }\n getTopPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingTop;\n }\n getRightPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingRight;\n }\n getBottomPaddingOffset() {\n return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingBottom;\n }\n onSizeChanged(w, h, oldw, oldh) {\n if (this.getChildCount() > 0) {\n this.mDataChanged = true;\n this.rememberSyncState();\n }\n }\n touchModeDrawsInPressedState() {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n return true;\n default:\n return false;\n }\n }\n shouldShowSelector() {\n return (!this.isInTouchMode()) || (this.touchModeDrawsInPressedState() && this.isPressed());\n }\n drawSelector(canvas) {\n if (!this.mSelectorRect.isEmpty()) {\n const selector = this.mSelector;\n selector.setBounds(this.mSelectorRect);\n selector.draw(canvas);\n }\n }\n setDrawSelectorOnTop(onTop) {\n this.mDrawSelectorOnTop = onTop;\n }\n setSelector(sel) {\n if (this.mSelector != null) {\n this.mSelector.setCallback(null);\n this.unscheduleDrawable(this.mSelector);\n }\n this.mSelector = sel;\n let padding = new Rect();\n sel.getPadding(padding);\n this.mSelectionLeftPadding = padding.left;\n this.mSelectionTopPadding = padding.top;\n this.mSelectionRightPadding = padding.right;\n this.mSelectionBottomPadding = padding.bottom;\n sel.setCallback(this);\n this.updateSelectorState();\n }\n getSelector() {\n return this.mSelector;\n }\n keyPressed() {\n if (!this.isEnabled() || !this.isClickable()) {\n return;\n }\n let selector = this.mSelector;\n let selectorRect = this.mSelectorRect;\n if (selector != null && (this.isFocused() || this.touchModeDrawsInPressedState()) && !selectorRect.isEmpty()) {\n const v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n if (v != null) {\n if (v.hasFocusable())\n return;\n v.setPressed(true);\n }\n this.setPressed(true);\n const longClickable = this.isLongClickable();\n let d = selector.getCurrent();\n if (longClickable && !this.mDataChanged) {\n if (this.mPendingCheckForKeyLongPress == null) {\n this.mPendingCheckForKeyLongPress = new AbsListView.CheckForKeyLongPress(this);\n }\n this.mPendingCheckForKeyLongPress.rememberWindowAttachCount();\n this.postDelayed(this.mPendingCheckForKeyLongPress, ViewConfiguration.getLongPressTimeout());\n }\n }\n }\n setScrollIndicators(up, down) {\n this.mScrollUp = up;\n this.mScrollDown = down;\n }\n updateSelectorState() {\n if (this.mSelector != null) {\n if (this.shouldShowSelector()) {\n this.mSelector.setState(this.getDrawableState());\n }\n else {\n this.mSelector.setState(StateSet.NOTHING);\n }\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n this.updateSelectorState();\n }\n onCreateDrawableState(extraSpace) {\n if (this.mIsChildViewEnabled) {\n return super.onCreateDrawableState(extraSpace);\n }\n const enabledState = AbsListView.ENABLED_STATE_SET[0];\n let state = super.onCreateDrawableState(extraSpace + 1);\n let enabledPos = -1;\n for (let i = state.length - 1; i >= 0; i--) {\n if (state[i] == enabledState) {\n enabledPos = i;\n break;\n }\n }\n if (enabledPos >= 0) {\n System.arraycopy(state, enabledPos + 1, state, enabledPos, state.length - enabledPos - 1);\n }\n return state;\n }\n verifyDrawable(dr) {\n return this.mSelector == dr || super.verifyDrawable(dr);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mSelector != null)\n this.mSelector.jumpToCurrentState();\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n const treeObserver = this.getViewTreeObserver();\n treeObserver.addOnTouchModeChangeListener(this);\n if (this.mAdapter != null && this.mDataSetObserver == null) {\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mDataChanged = true;\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.dismissPopup();\n this.mRecycler.clear();\n const treeObserver = this.getViewTreeObserver();\n treeObserver.removeOnTouchModeChangeListener(this);\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n this.mDataSetObserver = null;\n }\n if (this.mFlingRunnable != null) {\n this.removeCallbacks(this.mFlingRunnable);\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mClearScrollingCache != null) {\n this.removeCallbacks(this.mClearScrollingCache);\n }\n if (this.mPerformClick_ != null) {\n this.removeCallbacks(this.mPerformClick_);\n }\n if (this.mTouchModeReset != null) {\n this.removeCallbacks(this.mTouchModeReset);\n this.mTouchModeReset.run();\n }\n }\n onWindowFocusChanged(hasWindowFocus) {\n super.onWindowFocusChanged(hasWindowFocus);\n const touchMode = this.isInTouchMode() ? AbsListView.TOUCH_MODE_ON : AbsListView.TOUCH_MODE_OFF;\n if (!hasWindowFocus) {\n this.setChildrenDrawingCacheEnabled(false);\n if (this.mFlingRunnable != null) {\n this.removeCallbacks(this.mFlingRunnable);\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentCaches();\n this.finishGlows();\n this.invalidate();\n }\n }\n this.dismissPopup();\n if (touchMode == AbsListView.TOUCH_MODE_OFF) {\n this.mResurrectToPosition = this.mSelectedPosition;\n }\n }\n else {\n if (this.mFiltered && !this.mPopupHidden) {\n this.showPopup();\n }\n if (touchMode != this.mLastTouchMode && this.mLastTouchMode != AbsListView.TOUCH_MODE_UNKNOWN) {\n if (touchMode == AbsListView.TOUCH_MODE_OFF) {\n this.resurrectSelection();\n }\n else {\n this.hideSelector();\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n this.layoutChildren();\n }\n }\n }\n this.mLastTouchMode = touchMode;\n }\n onCancelPendingInputEvents() {\n super.onCancelPendingInputEvents();\n if (this.mPerformClick_ != null) {\n this.removeCallbacks(this.mPerformClick_);\n }\n if (this.mPendingCheckForTap_ != null) {\n this.removeCallbacks(this.mPendingCheckForTap_);\n }\n if (this.mPendingCheckForLongPress_List != null) {\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n }\n if (this.mPendingCheckForKeyLongPress != null) {\n this.removeCallbacks(this.mPendingCheckForKeyLongPress);\n }\n }\n performLongPress(child, longPressPosition, longPressId) {\n let handled = false;\n if (this.mOnItemLongClickListener != null) {\n handled = this.mOnItemLongClickListener.onItemLongClick(this, child, longPressPosition, longPressId);\n }\n if (handled) {\n this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);\n }\n return handled;\n }\n onKeyDown(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (KeyEvent.isConfirmKey(keyCode)) {\n if (!this.isEnabled()) {\n return true;\n }\n if (this.isClickable() && this.isPressed() && this.mSelectedPosition >= 0\n && this.mAdapter != null && this.mSelectedPosition < this.mAdapter.getCount()) {\n const view = this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n if (view != null) {\n this.performItemClick(view, this.mSelectedPosition, this.mSelectedRowId);\n view.setPressed(false);\n }\n this.setPressed(false);\n return true;\n }\n }\n return super.onKeyUp(keyCode, event);\n }\n dispatchSetPressed(pressed) {\n }\n pointToPosition(x, y) {\n let frame = this.mTouchFrame;\n if (frame == null) {\n this.mTouchFrame = new Rect();\n frame = this.mTouchFrame;\n }\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n child.getHitRect(frame);\n if (frame.contains(x, y)) {\n return this.mFirstPosition + i;\n }\n }\n }\n return AbsListView.INVALID_POSITION;\n }\n pointToRowId(x, y) {\n let position = this.pointToPosition(x, y);\n if (position >= 0) {\n return this.mAdapter.getItemId(position);\n }\n return AbsListView.INVALID_ROW_ID;\n }\n checkOverScrollStartScrollIfNeeded() {\n return this.mScrollY != 0;\n }\n startScrollIfNeeded(y) {\n const deltaY = y - this.mMotionY;\n const distance = Math.abs(deltaY);\n const overscroll = this.checkOverScrollStartScrollIfNeeded();\n if (overscroll || distance > this.mTouchSlop) {\n this.createScrollingCache();\n if (this.mScrollY != 0) {\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n this.mMotionCorrection = 0;\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n this.mMotionCorrection = deltaY > 0 ? this.mTouchSlop : -this.mTouchSlop;\n }\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.scrollIfNeeded(y);\n return true;\n }\n return false;\n }\n scrollIfNeeded(y) {\n const rawDeltaY = y - this.mMotionY;\n const deltaY = rawDeltaY - this.mMotionCorrection;\n let incrementalDeltaY = this.mLastY != Integer.MIN_VALUE ? y - this.mLastY : deltaY;\n if (this.mTouchMode == AbsListView.TOUCH_MODE_SCROLL) {\n if (AbsListView.PROFILE_SCROLLING) {\n if (!this.mScrollProfilingStarted) {\n this.mScrollProfilingStarted = true;\n }\n }\n if (y != this.mLastY) {\n if ((this.mGroupFlags & AbsListView.FLAG_DISALLOW_INTERCEPT) == 0 && Math.abs(rawDeltaY) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n let motionIndex;\n if (this.mMotionPosition >= 0) {\n motionIndex = this.mMotionPosition - this.mFirstPosition;\n }\n else {\n motionIndex = this.getChildCount() / 2;\n }\n let motionViewPrevTop = 0;\n let motionView = this.getChildAt(motionIndex);\n if (motionView != null) {\n motionViewPrevTop = motionView.getTop();\n }\n let atEdge = false;\n if (incrementalDeltaY != 0) {\n atEdge = this.trackMotionScroll(deltaY, incrementalDeltaY);\n }\n motionView = this.getChildAt(motionIndex);\n if (motionView != null) {\n const motionViewRealTop = motionView.getTop();\n if (atEdge) {\n let overscroll = -incrementalDeltaY - (motionViewRealTop - motionViewPrevTop);\n this.overScrollBy(0, overscroll, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true);\n if (Math.abs(this.mOverscrollDistance) == Math.abs(this.mScrollY)) {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n const overscrollMode = this.getOverScrollMode();\n if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this.contentFits())) {\n this.mDirection = 0;\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n if (rawDeltaY > 0) {\n }\n else if (rawDeltaY < 0) {\n }\n }\n }\n this.mMotionY = y;\n }\n this.mLastY = y;\n }\n }\n else if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERSCROLL) {\n if (y != this.mLastY) {\n const oldScroll = this.mScrollY;\n const newScroll = oldScroll - incrementalDeltaY;\n let newDirection = y > this.mLastY ? 1 : -1;\n if (this.mDirection == 0) {\n this.mDirection = newDirection;\n }\n let overScrollDistance = -incrementalDeltaY;\n if ((newScroll < 0 && oldScroll >= 0) || (newScroll > 0 && oldScroll <= 0)) {\n overScrollDistance = -oldScroll;\n incrementalDeltaY += overScrollDistance;\n }\n else {\n incrementalDeltaY = 0;\n }\n if (overScrollDistance != 0) {\n this.overScrollBy(0, overScrollDistance, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true);\n }\n if (incrementalDeltaY != 0) {\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentIfNeeded();\n }\n this.trackMotionScroll(incrementalDeltaY, incrementalDeltaY);\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n const motionPosition = this.findClosestMotionRow(y);\n this.mMotionCorrection = 0;\n let motionView = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = motionView != null ? motionView.getTop() : 0;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n this.mDirection = newDirection;\n }\n }\n }\n onTouchModeChanged(isInTouchMode) {\n if (isInTouchMode) {\n this.hideSelector();\n if (this.getHeight() > 0 && this.getChildCount() > 0) {\n this.layoutChildren();\n }\n this.updateSelectorState();\n }\n else {\n let touchMode = this.mTouchMode;\n if (touchMode == AbsListView.TOUCH_MODE_OVERSCROLL || touchMode == AbsListView.TOUCH_MODE_OVERFLING) {\n if (this.mFlingRunnable != null) {\n this.mFlingRunnable.endFling();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (this.mScrollY != 0) {\n this.mScrollY = 0;\n this.invalidateParentCaches();\n this.finishGlows();\n this.invalidate();\n }\n }\n }\n }\n onTouchEvent(ev) {\n if (!this.isEnabled()) {\n return this.isClickable() || this.isLongClickable();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (!this.isAttachedToWindow()) {\n return false;\n }\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const actionMasked = ev.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_DOWN:\n {\n this.onTouchDown(ev);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n this.onTouchMove(ev);\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n this.onTouchUp(ev);\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n this.onTouchCancel();\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n this.onSecondaryPointerUp(ev);\n const x = this.mMotionX;\n const y = this.mMotionY;\n const motionPosition = this.pointToPosition(x, y);\n if (motionPosition >= 0) {\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = child.getTop();\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const index = ev.getActionIndex();\n const id = ev.getPointerId(index);\n const x = Math.floor(ev.getX(index));\n const y = Math.floor(ev.getY(index));\n this.mMotionCorrection = 0;\n this.mActivePointerId = id;\n this.mMotionX = x;\n this.mMotionY = y;\n const motionPosition = this.pointToPosition(x, y);\n if (motionPosition >= 0) {\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = child.getTop();\n this.mMotionPosition = motionPosition;\n }\n this.mLastY = y;\n break;\n }\n }\n return true;\n }\n onTouchDown(ev) {\n this.mActivePointerId = ev.getPointerId(0);\n if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERFLING) {\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL;\n this.mMotionX = Math.floor(ev.getX());\n this.mMotionY = Math.floor(ev.getY());\n this.mLastY = this.mMotionY;\n this.mMotionCorrection = 0;\n this.mDirection = 0;\n }\n else {\n const x = Math.floor(ev.getX());\n const y = Math.floor(ev.getY());\n let motionPosition = this.pointToPosition(x, y);\n if (!this.mDataChanged) {\n if (this.mTouchMode == AbsListView.TOUCH_MODE_FLING) {\n this.createScrollingCache();\n this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n this.mMotionCorrection = 0;\n motionPosition = this.findMotionRow(y);\n this.mFlingRunnable.flywheelTouch();\n }\n else if ((motionPosition >= 0) && this.getAdapter().isEnabled(motionPosition)) {\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n if (this.mPendingCheckForTap_ == null) {\n this.mPendingCheckForTap_ = new AbsListView.CheckForTap(this);\n }\n this.postDelayed(this.mPendingCheckForTap_, ViewConfiguration.getTapTimeout());\n }\n else if (motionPosition < 0) {\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n }\n }\n if (motionPosition >= 0) {\n const v = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = v.getTop();\n }\n this.mMotionX = x;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n this.mLastY = Integer.MIN_VALUE;\n }\n if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN && this.mMotionPosition != AbsListView.INVALID_POSITION\n && this.performButtonActionOnTouchDown(ev)) {\n this.removeCallbacks(this.mPendingCheckForTap_);\n }\n }\n onTouchMove(ev) {\n let pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n pointerIndex = 0;\n this.mActivePointerId = ev.getPointerId(pointerIndex);\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n const y = Math.floor(ev.getY(pointerIndex));\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n if (this.startScrollIfNeeded(y)) {\n break;\n }\n const x = ev.getX(pointerIndex);\n if (!this.pointInView(x, y, this.mTouchSlop)) {\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List);\n this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n this.updateSelectorState();\n }\n break;\n case AbsListView.TOUCH_MODE_SCROLL:\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n this.scrollIfNeeded(y);\n break;\n }\n }\n onTouchUp(ev) {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n case AbsListView.TOUCH_MODE_TAP:\n case AbsListView.TOUCH_MODE_DONE_WAITING:\n const motionPosition = this.mMotionPosition;\n const child = this.getChildAt(motionPosition - this.mFirstPosition);\n if (child != null) {\n if (this.mTouchMode != AbsListView.TOUCH_MODE_DOWN) {\n child.setPressed(false);\n }\n const x = ev.getX();\n const inList = x > this.mListPadding.left && x < this.getWidth() - this.mListPadding.right;\n if (inList && !child.hasFocusable()) {\n if (this.mPerformClick_ == null) {\n this.mPerformClick_ = new AbsListView.PerformClick(this);\n }\n const performClick = this.mPerformClick_;\n performClick.mClickMotionPosition = motionPosition;\n performClick.rememberWindowAttachCount();\n this.mResurrectToPosition = motionPosition;\n if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN || this.mTouchMode == AbsListView.TOUCH_MODE_TAP) {\n this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List);\n this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) {\n this.mTouchMode = AbsListView.TOUCH_MODE_TAP;\n this.setSelectedPositionInt(this.mMotionPosition);\n this.layoutChildren();\n child.setPressed(true);\n this.positionSelector(this.mMotionPosition, child);\n this.setPressed(true);\n if (this.mSelector != null) {\n let d = this.mSelector.getCurrent();\n }\n if (this.mTouchModeReset != null) {\n this.removeCallbacks(this.mTouchModeReset);\n }\n this.mTouchModeReset = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.mTouchModeReset = null;\n inner_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n child.setPressed(false);\n inner_this.setPressed(false);\n if (!inner_this.mDataChanged && inner_this.isAttachedToWindow()) {\n performClick.run();\n }\n }\n }\n return new _Inner();\n })();\n this.postDelayed(this.mTouchModeReset, ViewConfiguration.getPressedStateDuration());\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.updateSelectorState();\n }\n return;\n }\n else if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) {\n performClick.run();\n }\n }\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.updateSelectorState();\n break;\n case AbsListView.TOUCH_MODE_SCROLL:\n const childCount = this.getChildCount();\n if (childCount > 0) {\n const firstChildTop = this.getChildAt(0).getTop();\n const lastChildBottom = this.getChildAt(childCount - 1).getBottom();\n const contentTop = this.mListPadding.top;\n const contentBottom = this.getHeight() - this.mListPadding.bottom;\n if (this.mFirstPosition == 0 && firstChildTop >= contentTop && this.mFirstPosition + childCount < this.mItemCount\n && lastChildBottom <= this.getHeight() - contentBottom) {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n const initialVelocity = Math.floor((velocityTracker.getYVelocity(this.mActivePointerId) * this.mVelocityScale));\n if (Math.abs(initialVelocity) > this.mMinimumVelocity\n && !((this.mFirstPosition == 0 && firstChildTop == contentTop - this.mOverscrollDistance)\n || (this.mFirstPosition + childCount == this.mItemCount\n && lastChildBottom == contentBottom + this.mOverscrollDistance))) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.mFlingRunnable.start(-initialVelocity);\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n if (this.mFlingRunnable != null) {\n this.mFlingRunnable.endFling();\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n }\n }\n }\n else {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n }\n break;\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n const initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId));\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n if (Math.abs(initialVelocity) > this.mMinimumVelocity) {\n this.mFlingRunnable.startOverfling(-initialVelocity);\n }\n else {\n this.mFlingRunnable.startSpringback();\n }\n break;\n }\n this.setPressed(false);\n this.invalidate();\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.recycleVelocityTracker();\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n if (AbsListView.PROFILE_SCROLLING) {\n if (this.mScrollProfilingStarted) {\n this.mScrollProfilingStarted = false;\n }\n }\n }\n onTouchCancel() {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_OVERSCROLL:\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.mFlingRunnable.startSpringback();\n break;\n case AbsListView.TOUCH_MODE_OVERFLING:\n break;\n default:\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.setPressed(false);\n const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (motionView != null) {\n motionView.setPressed(false);\n }\n this.clearScrollingCache();\n this.removeCallbacks(this.mPendingCheckForLongPress_List);\n this.recycleVelocityTracker();\n }\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (this.mScrollY != scrollY) {\n this.onScrollChanged(this.mScrollX, scrollY, this.mScrollX, this.mScrollY);\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.awakenScrollBars();\n }\n }\n onGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL:\n {\n if (this.mTouchMode == AbsListView.TOUCH_MODE_REST) {\n const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (vscroll != 0) {\n const delta = Math.floor((vscroll * this.getVerticalScrollFactor()));\n if (!this.trackMotionScroll(delta, delta)) {\n return true;\n }\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n draw(canvas) {\n super.draw(canvas);\n }\n setOverScrollEffectPadding(leftPadding, rightPadding) {\n this.mGlowPaddingLeft = leftPadding;\n this.mGlowPaddingRight = rightPadding;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n let action = ev.getAction();\n let v;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n if (!this.isAttachedToWindow()) {\n return false;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n let touchMode = this.mTouchMode;\n if (touchMode == AbsListView.TOUCH_MODE_OVERFLING || touchMode == AbsListView.TOUCH_MODE_OVERSCROLL) {\n this.mMotionCorrection = 0;\n return true;\n }\n const x = Math.floor(ev.getX());\n const y = Math.floor(ev.getY());\n this.mActivePointerId = ev.getPointerId(0);\n let motionPosition = this.findMotionRow(y);\n if (touchMode != AbsListView.TOUCH_MODE_FLING && motionPosition >= 0) {\n v = this.getChildAt(motionPosition - this.mFirstPosition);\n this.mMotionViewOriginalTop = v.getTop();\n this.mMotionX = x;\n this.mMotionY = y;\n this.mMotionPosition = motionPosition;\n this.mTouchMode = AbsListView.TOUCH_MODE_DOWN;\n this.clearScrollingCache();\n }\n this.mLastY = Integer.MIN_VALUE;\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n if (touchMode == AbsListView.TOUCH_MODE_FLING) {\n return true;\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n switch (this.mTouchMode) {\n case AbsListView.TOUCH_MODE_DOWN:\n let pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n pointerIndex = 0;\n this.mActivePointerId = ev.getPointerId(pointerIndex);\n }\n const y = Math.floor(ev.getY(pointerIndex));\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n if (this.startScrollIfNeeded(y)) {\n return true;\n }\n break;\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n {\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.mActivePointerId = AbsListView.INVALID_POINTER;\n this.recycleVelocityTracker();\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n this.onSecondaryPointerUp(ev);\n break;\n }\n }\n return false;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mMotionX = Math.floor(ev.getX(newPointerIndex));\n this.mMotionY = Math.floor(ev.getY(newPointerIndex));\n this.mMotionCorrection = 0;\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n }\n }\n addTouchables(views) {\n const count = this.getChildCount();\n const firstPosition = this.mFirstPosition;\n const adapter = this.mAdapter;\n if (adapter == null) {\n return;\n }\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (adapter.isEnabled(firstPosition + i)) {\n views.add(child);\n }\n child.addTouchables(views);\n }\n }\n reportScrollStateChange(newState) {\n if (newState != this.mLastScrollState) {\n if (this.mOnScrollListener != null) {\n this.mLastScrollState = newState;\n this.mOnScrollListener.onScrollStateChanged(this, newState);\n }\n }\n }\n setFriction(friction) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n this.mFlingRunnable.mScroller.setFriction(friction);\n }\n setVelocityScale(scale) {\n this.mVelocityScale = scale;\n }\n smoothScrollToPositionFromTop(position, offset, duration) {\n if (this.mPositionScroller == null) {\n this.mPositionScroller = new AbsListView.PositionScroller(this);\n }\n this.mPositionScroller.startWithOffset(position, offset, duration);\n }\n smoothScrollToPosition(position, boundPosition) {\n if (this.mPositionScroller == null) {\n this.mPositionScroller = new AbsListView.PositionScroller(this);\n }\n this.mPositionScroller.start(position, boundPosition);\n }\n smoothScrollBy(distance, duration, linear = false) {\n if (this.mFlingRunnable == null) {\n this.mFlingRunnable = new AbsListView.FlingRunnable(this);\n }\n const firstPos = this.mFirstPosition;\n const childCount = this.getChildCount();\n const lastPos = firstPos + childCount;\n const topLimit = this.getPaddingTop();\n const bottomLimit = this.getHeight() - this.getPaddingBottom();\n if (distance == 0 || this.mItemCount == 0 || childCount == 0\n || (firstPos == 0 && this.getChildAt(0).getTop() == topLimit && distance < 0)\n || (lastPos == this.mItemCount && this.getChildAt(childCount - 1).getBottom() == bottomLimit && distance > 0)) {\n this.mFlingRunnable.endFling();\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n }\n else {\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.mFlingRunnable.startScroll(distance, duration, linear);\n }\n }\n smoothScrollByOffset(position) {\n let index = -1;\n if (position < 0) {\n index = this.getFirstVisiblePosition();\n }\n else if (position > 0) {\n index = this.getLastVisiblePosition();\n }\n if (index > -1) {\n let child = this.getChildAt(index - this.getFirstVisiblePosition());\n if (child != null) {\n let visibleRect = new Rect();\n if (child.getGlobalVisibleRect(visibleRect)) {\n let childRectArea = child.getWidth() * child.getHeight();\n let visibleRectArea = visibleRect.width() * visibleRect.height();\n let visibleArea = (visibleRectArea / childRectArea);\n const visibleThreshold = 0.75;\n if ((position < 0) && (visibleArea < visibleThreshold)) {\n ++index;\n }\n else if ((position > 0) && (visibleArea < visibleThreshold)) {\n --index;\n }\n }\n this.smoothScrollToPosition(Math.max(0, Math.min(this.getCount(), index + position)));\n }\n }\n }\n createScrollingCache() {\n if (this.mScrollingCacheEnabled && !this.mCachingStarted && !this.isHardwareAccelerated()) {\n this.setChildrenDrawnWithCacheEnabled(true);\n this.setChildrenDrawingCacheEnabled(true);\n this.mCachingStarted = this.mCachingActive = true;\n }\n }\n clearScrollingCache() {\n if (!this.isHardwareAccelerated()) {\n if (this.mClearScrollingCache == null) {\n this.mClearScrollingCache = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n if (inner_this.mCachingStarted) {\n inner_this.mCachingStarted = inner_this.mCachingActive = false;\n inner_this.setChildrenDrawnWithCacheEnabled(false);\n if ((inner_this.mPersistentDrawingCache & AbsListView.PERSISTENT_SCROLLING_CACHE) == 0) {\n inner_this.setChildrenDrawingCacheEnabled(false);\n }\n if (!inner_this.isAlwaysDrawnWithCacheEnabled()) {\n inner_this.invalidate();\n }\n }\n }\n }\n return new _Inner();\n })();\n }\n this.post(this.mClearScrollingCache);\n }\n }\n scrollListBy(y) {\n this.trackMotionScroll(-y, -y);\n }\n canScrollList(direction) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return false;\n }\n const firstPosition = this.mFirstPosition;\n const listPadding = this.mListPadding;\n if (direction > 0) {\n const lastBottom = this.getChildAt(childCount - 1).getBottom();\n const lastPosition = firstPosition + childCount;\n return lastPosition < this.mItemCount || lastBottom > this.getHeight() - listPadding.bottom;\n }\n else {\n const firstTop = this.getChildAt(0).getTop();\n return firstPosition > 0 || firstTop < listPadding.top;\n }\n }\n trackMotionScroll(deltaY, incrementalDeltaY) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return true;\n }\n const firstTop = this.getChildAt(0).getTop();\n const lastBottom = this.getChildAt(childCount - 1).getBottom();\n const listPadding = this.mListPadding;\n let effectivePaddingTop = 0;\n let effectivePaddingBottom = 0;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n effectivePaddingTop = listPadding.top;\n effectivePaddingBottom = listPadding.bottom;\n }\n const spaceAbove = effectivePaddingTop - firstTop;\n const end = this.getHeight() - effectivePaddingBottom;\n const spaceBelow = lastBottom - end;\n const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n if (deltaY < 0) {\n deltaY = Math.max(-(height - 1), deltaY);\n }\n else {\n deltaY = Math.min(height - 1, deltaY);\n }\n if (incrementalDeltaY < 0) {\n incrementalDeltaY = Math.max(-(height - 1), incrementalDeltaY);\n }\n else {\n incrementalDeltaY = Math.min(height - 1, incrementalDeltaY);\n }\n const firstPosition = this.mFirstPosition;\n if (firstPosition == 0) {\n this.mFirstPositionDistanceGuess = firstTop - listPadding.top;\n }\n else {\n this.mFirstPositionDistanceGuess += incrementalDeltaY;\n }\n if (firstPosition + childCount == this.mItemCount) {\n this.mLastPositionDistanceGuess = lastBottom + listPadding.bottom;\n }\n else {\n this.mLastPositionDistanceGuess += incrementalDeltaY;\n }\n const cannotScrollDown = (firstPosition == 0 && firstTop >= listPadding.top && incrementalDeltaY >= 0);\n const cannotScrollUp = (firstPosition + childCount == this.mItemCount && lastBottom <= this.getHeight() - listPadding.bottom && incrementalDeltaY <= 0);\n if (cannotScrollDown || cannotScrollUp) {\n return incrementalDeltaY != 0;\n }\n const down = incrementalDeltaY < 0;\n const inTouchMode = this.isInTouchMode();\n if (inTouchMode) {\n this.hideSelector();\n }\n const headerViewsCount = this.getHeaderViewsCount();\n const footerViewsStart = this.mItemCount - this.getFooterViewsCount();\n let start = 0;\n let count = 0;\n if (down) {\n let top = -incrementalDeltaY;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n top += listPadding.top;\n }\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getBottom() >= top) {\n break;\n }\n else {\n count++;\n let position = firstPosition + i;\n if (position >= headerViewsCount && position < footerViewsStart) {\n this.mRecycler.addScrapView(child, position);\n }\n }\n }\n }\n else {\n let bottom = this.getHeight() - incrementalDeltaY;\n if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) {\n bottom -= listPadding.bottom;\n }\n for (let i = childCount - 1; i >= 0; i--) {\n const child = this.getChildAt(i);\n if (child.getTop() <= bottom) {\n break;\n }\n else {\n start = i;\n count++;\n let position = firstPosition + i;\n if (position >= headerViewsCount && position < footerViewsStart) {\n this.mRecycler.addScrapView(child, position);\n }\n }\n }\n }\n this.mMotionViewNewTop = this.mMotionViewOriginalTop + deltaY;\n this.mBlockLayoutRequests = true;\n if (count > 0) {\n this.detachViewsFromParent(start, count);\n this.mRecycler.removeSkippedScrap();\n }\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n this.offsetChildrenTopAndBottom(incrementalDeltaY);\n if (down) {\n this.mFirstPosition += count;\n }\n const absIncrementalDeltaY = Math.abs(incrementalDeltaY);\n if (spaceAbove < absIncrementalDeltaY || spaceBelow < absIncrementalDeltaY) {\n this.fillGap(down);\n }\n if (!inTouchMode && this.mSelectedPosition != AbsListView.INVALID_POSITION) {\n const childIndex = this.mSelectedPosition - this.mFirstPosition;\n if (childIndex >= 0 && childIndex < this.getChildCount()) {\n this.positionSelector(this.mSelectedPosition, this.getChildAt(childIndex));\n }\n }\n else if (this.mSelectorPosition != AbsListView.INVALID_POSITION) {\n const childIndex = this.mSelectorPosition - this.mFirstPosition;\n if (childIndex >= 0 && childIndex < this.getChildCount()) {\n this.positionSelector(AbsListView.INVALID_POSITION, this.getChildAt(childIndex));\n }\n }\n else {\n this.mSelectorRect.setEmpty();\n }\n this.mBlockLayoutRequests = false;\n this.invokeOnItemScrollListener();\n return false;\n }\n getHeaderViewsCount() {\n return 0;\n }\n getFooterViewsCount() {\n return 0;\n }\n hideSelector() {\n if (this.mSelectedPosition != AbsListView.INVALID_POSITION) {\n if (this.mLayoutMode != AbsListView.LAYOUT_SPECIFIC) {\n this.mResurrectToPosition = this.mSelectedPosition;\n }\n if (this.mNextSelectedPosition >= 0 && this.mNextSelectedPosition != this.mSelectedPosition) {\n this.mResurrectToPosition = this.mNextSelectedPosition;\n }\n this.setSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION);\n this.mSelectedTop = 0;\n }\n }\n reconcileSelectedPosition() {\n let position = this.mSelectedPosition;\n if (position < 0) {\n position = this.mResurrectToPosition;\n }\n position = Math.max(0, position);\n position = Math.min(position, this.mItemCount - 1);\n return position;\n }\n findClosestMotionRow(y) {\n const childCount = this.getChildCount();\n if (childCount == 0) {\n return AbsListView.INVALID_POSITION;\n }\n const motionRow = this.findMotionRow(y);\n return motionRow != AbsListView.INVALID_POSITION ? motionRow : this.mFirstPosition + childCount - 1;\n }\n invalidateViews() {\n this.mDataChanged = true;\n this.rememberSyncState();\n this.requestLayout();\n this.invalidate();\n }\n resurrectSelectionIfNeeded() {\n if (this.mSelectedPosition < 0 && this.resurrectSelection()) {\n this.updateSelectorState();\n return true;\n }\n return false;\n }\n resurrectSelection() {\n const childCount = this.getChildCount();\n if (childCount <= 0) {\n return false;\n }\n let selectedTop = 0;\n let selectedPos;\n let childrenTop = this.mListPadding.top;\n let childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n const firstPosition = this.mFirstPosition;\n const toPosition = this.mResurrectToPosition;\n let down = true;\n if (toPosition >= firstPosition && toPosition < firstPosition + childCount) {\n selectedPos = toPosition;\n const selected = this.getChildAt(selectedPos - this.mFirstPosition);\n selectedTop = selected.getTop();\n let selectedBottom = selected.getBottom();\n if (selectedTop < childrenTop) {\n selectedTop = childrenTop + this.getVerticalFadingEdgeLength();\n }\n else if (selectedBottom > childrenBottom) {\n selectedTop = childrenBottom - selected.getMeasuredHeight() - this.getVerticalFadingEdgeLength();\n }\n }\n else {\n if (toPosition < firstPosition) {\n selectedPos = firstPosition;\n for (let i = 0; i < childCount; i++) {\n const v = this.getChildAt(i);\n const top = v.getTop();\n if (i == 0) {\n selectedTop = top;\n if (firstPosition > 0 || top < childrenTop) {\n childrenTop += this.getVerticalFadingEdgeLength();\n }\n }\n if (top >= childrenTop) {\n selectedPos = firstPosition + i;\n selectedTop = top;\n break;\n }\n }\n }\n else {\n const itemCount = this.mItemCount;\n down = false;\n selectedPos = firstPosition + childCount - 1;\n for (let i = childCount - 1; i >= 0; i--) {\n const v = this.getChildAt(i);\n const top = v.getTop();\n const bottom = v.getBottom();\n if (i == childCount - 1) {\n selectedTop = top;\n if (firstPosition + childCount < itemCount || bottom > childrenBottom) {\n childrenBottom -= this.getVerticalFadingEdgeLength();\n }\n }\n if (bottom <= childrenBottom) {\n selectedPos = firstPosition + i;\n selectedTop = top;\n break;\n }\n }\n }\n }\n this.mResurrectToPosition = AbsListView.INVALID_POSITION;\n this.removeCallbacks(this.mFlingRunnable);\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this.clearScrollingCache();\n this.mSpecificTop = selectedTop;\n selectedPos = this.lookForSelectablePosition(selectedPos, down);\n if (selectedPos >= firstPosition && selectedPos <= this.getLastVisiblePosition()) {\n this.mLayoutMode = AbsListView.LAYOUT_SPECIFIC;\n this.updateSelectorState();\n this.setSelectionInt(selectedPos);\n this.invokeOnItemScrollListener();\n }\n else {\n selectedPos = AbsListView.INVALID_POSITION;\n }\n this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE);\n return selectedPos >= 0;\n }\n confirmCheckedPositionsById() {\n this.mCheckStates.clear();\n let checkedCountChanged = false;\n for (let checkedIndex = 0; checkedIndex < this.mCheckedIdStates.size(); checkedIndex++) {\n const id = this.mCheckedIdStates.keyAt(checkedIndex);\n const lastPos = this.mCheckedIdStates.valueAt(checkedIndex);\n const lastPosId = this.mAdapter.getItemId(lastPos);\n if (id != lastPosId) {\n const start = Math.max(0, lastPos - AbsListView.CHECK_POSITION_SEARCH_DISTANCE);\n const end = Math.min(lastPos + AbsListView.CHECK_POSITION_SEARCH_DISTANCE, this.mItemCount);\n let found = false;\n for (let searchPos = start; searchPos < end; searchPos++) {\n const searchId = this.mAdapter.getItemId(searchPos);\n if (id == searchId) {\n found = true;\n this.mCheckStates.put(searchPos, true);\n this.mCheckedIdStates.setValueAt(checkedIndex, searchPos);\n break;\n }\n }\n if (!found) {\n this.mCheckedIdStates.delete(id);\n checkedIndex--;\n this.mCheckedItemCount--;\n checkedCountChanged = true;\n }\n }\n else {\n this.mCheckStates.put(lastPos, true);\n }\n }\n if (checkedCountChanged && this.mChoiceActionMode != null) {\n this.mChoiceActionMode.invalidate();\n }\n }\n handleDataChanged() {\n let count = this.mItemCount;\n let lastHandledItemCount = this.mLastHandledItemCount;\n this.mLastHandledItemCount = this.mItemCount;\n if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapter != null && this.mAdapter.hasStableIds()) {\n this.confirmCheckedPositionsById();\n }\n this.mRecycler.clearTransientStateViews();\n if (count > 0) {\n let newPos;\n let selectablePos;\n if (this.mNeedSync) {\n this.mNeedSync = false;\n this.mPendingSync = null;\n if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL) {\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n else if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) {\n if (this.mForceTranscriptScroll) {\n this.mForceTranscriptScroll = false;\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n const childCount = this.getChildCount();\n const listBottom = this.getHeight() - this.getPaddingBottom();\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;\n if (this.mFirstPosition + childCount >= lastHandledItemCount && lastBottom <= listBottom) {\n this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM;\n return;\n }\n this.awakenScrollBars();\n }\n switch (this.mSyncMode) {\n case AbsListView.SYNC_SELECTED_POSITION:\n if (this.isInTouchMode()) {\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1);\n return;\n }\n else {\n newPos = this.findSyncPosition();\n if (newPos >= 0) {\n selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos == newPos) {\n this.mSyncPosition = newPos;\n if (this.mSyncHeight == this.getHeight()) {\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n }\n else {\n this.mLayoutMode = AbsListView.LAYOUT_SET_SELECTION;\n }\n this.setNextSelectedPositionInt(newPos);\n return;\n }\n }\n }\n break;\n case AbsListView.SYNC_FIRST_POSITION:\n this.mLayoutMode = AbsListView.LAYOUT_SYNC;\n this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1);\n return;\n }\n }\n if (!this.isInTouchMode()) {\n newPos = this.getSelectedItemPosition();\n if (newPos >= count) {\n newPos = count - 1;\n }\n if (newPos < 0) {\n newPos = 0;\n }\n selectablePos = this.lookForSelectablePosition(newPos, true);\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n return;\n }\n else {\n selectablePos = this.lookForSelectablePosition(newPos, false);\n if (selectablePos >= 0) {\n this.setNextSelectedPositionInt(selectablePos);\n return;\n }\n }\n }\n else {\n if (this.mResurrectToPosition >= 0) {\n return;\n }\n }\n }\n this.mLayoutMode = this.mStackFromBottom ? AbsListView.LAYOUT_FORCE_BOTTOM : AbsListView.LAYOUT_FORCE_TOP;\n this.mSelectedPosition = AbsListView.INVALID_POSITION;\n this.mSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.mNextSelectedPosition = AbsListView.INVALID_POSITION;\n this.mNextSelectedRowId = AbsListView.INVALID_ROW_ID;\n this.mNeedSync = false;\n this.mPendingSync = null;\n this.mSelectorPosition = AbsListView.INVALID_POSITION;\n this.checkSelectionChanged();\n }\n onDisplayHint(hint) {\n super.onDisplayHint(hint);\n this.mPopupHidden = hint == AbsListView.INVISIBLE;\n }\n dismissPopup() {\n }\n showPopup() {\n }\n positionPopup() {\n }\n static getDistance(source, dest, direction) {\n let sX, sY;\n let dX, dY;\n switch (direction) {\n case View.FOCUS_RIGHT:\n sX = source.right;\n sY = source.top + source.height() / 2;\n dX = dest.left;\n dY = dest.top + dest.height() / 2;\n break;\n case View.FOCUS_DOWN:\n sX = source.left + source.width() / 2;\n sY = source.bottom;\n dX = dest.left + dest.width() / 2;\n dY = dest.top;\n break;\n case View.FOCUS_LEFT:\n sX = source.left;\n sY = source.top + source.height() / 2;\n dX = dest.right;\n dY = dest.top + dest.height() / 2;\n break;\n case View.FOCUS_UP:\n sX = source.left + source.width() / 2;\n sY = source.top;\n dX = dest.left + dest.width() / 2;\n dY = dest.bottom;\n break;\n case View.FOCUS_FORWARD:\n case View.FOCUS_BACKWARD:\n sX = source.right + source.width() / 2;\n sY = source.top + source.height() / 2;\n dX = dest.left + dest.width() / 2;\n dY = dest.top + dest.height() / 2;\n break;\n default:\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, \" + \"FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n let deltaX = dX - sX;\n let deltaY = dY - sY;\n return deltaY * deltaY + deltaX * deltaX;\n }\n isInFilterMode() {\n return this.mFiltered;\n }\n hasTextFilter() {\n return this.mFiltered;\n }\n onGlobalLayout() {\n if (this.isShown()) {\n }\n else {\n }\n }\n generateDefaultLayoutParams() {\n return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0);\n }\n generateLayoutParams(p) {\n return new AbsListView.LayoutParams(p);\n }\n generateLayoutParamsFromAttr(attrs) {\n return new AbsListView.LayoutParams(this.getContext(), attrs);\n }\n checkLayoutParams(p) {\n return p instanceof AbsListView.LayoutParams;\n }\n setTranscriptMode(mode) {\n this.mTranscriptMode = mode;\n }\n getTranscriptMode() {\n return this.mTranscriptMode;\n }\n getSolidColor() {\n return this.mCacheColorHint;\n }\n setCacheColorHint(color) {\n if (color != this.mCacheColorHint) {\n this.mCacheColorHint = color;\n let count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n this.getChildAt(i).setDrawingCacheBackgroundColor(color);\n }\n this.mRecycler.setCacheColorHint(color);\n }\n }\n getCacheColorHint() {\n return this.mCacheColorHint;\n }\n reclaimViews(views) {\n let childCount = this.getChildCount();\n let listener = this.mRecycler.mRecyclerListener;\n for (let i = 0; i < childCount; i++) {\n let child = this.getChildAt(i);\n let lp = child.getLayoutParams();\n if (lp != null && this.mRecycler.shouldRecycleViewType(lp.viewType)) {\n views.add(child);\n if (listener != null) {\n listener.onMovedToScrapHeap(child);\n }\n }\n }\n this.mRecycler.reclaimScrapViews(views);\n this.removeAllViewsInLayout();\n }\n finishGlows() {\n }\n setVisibleRangeHint(start, end) {\n }\n setRecyclerListener(listener) {\n this.mRecycler.mRecyclerListener = listener;\n }\n static retrieveFromScrap(scrapViews, position) {\n let size = scrapViews.size();\n if (size > 0) {\n for (let i = 0; i < size; i++) {\n let view = scrapViews.get(i);\n if (view.getLayoutParams().scrappedFromPosition == position) {\n scrapViews.remove(i);\n return view;\n }\n }\n return scrapViews.remove(size - 1);\n }\n else {\n return null;\n }\n }\n }\n AbsListView.TAG_AbsListView = \"AbsListView\";\n AbsListView.TRANSCRIPT_MODE_DISABLED = 0;\n AbsListView.TRANSCRIPT_MODE_NORMAL = 1;\n AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL = 2;\n AbsListView.TOUCH_MODE_REST = -1;\n AbsListView.TOUCH_MODE_DOWN = 0;\n AbsListView.TOUCH_MODE_TAP = 1;\n AbsListView.TOUCH_MODE_DONE_WAITING = 2;\n AbsListView.TOUCH_MODE_SCROLL = 3;\n AbsListView.TOUCH_MODE_FLING = 4;\n AbsListView.TOUCH_MODE_OVERSCROLL = 5;\n AbsListView.TOUCH_MODE_OVERFLING = 6;\n AbsListView.LAYOUT_NORMAL = 0;\n AbsListView.LAYOUT_FORCE_TOP = 1;\n AbsListView.LAYOUT_SET_SELECTION = 2;\n AbsListView.LAYOUT_FORCE_BOTTOM = 3;\n AbsListView.LAYOUT_SPECIFIC = 4;\n AbsListView.LAYOUT_SYNC = 5;\n AbsListView.LAYOUT_MOVE_SELECTION = 6;\n AbsListView.CHOICE_MODE_NONE = 0;\n AbsListView.CHOICE_MODE_SINGLE = 1;\n AbsListView.CHOICE_MODE_MULTIPLE = 2;\n AbsListView.CHOICE_MODE_MULTIPLE_MODAL = 3;\n AbsListView.OVERSCROLL_LIMIT_DIVISOR = 3;\n AbsListView.CHECK_POSITION_SEARCH_DISTANCE = 20;\n AbsListView.TOUCH_MODE_UNKNOWN = -1;\n AbsListView.TOUCH_MODE_ON = 0;\n AbsListView.TOUCH_MODE_OFF = 1;\n AbsListView.PROFILE_SCROLLING = false;\n AbsListView.PROFILE_FLINGING = false;\n AbsListView.INVALID_POINTER = -1;\n AbsListView.sLinearInterpolator = new LinearInterpolator();\n widget.AbsListView = AbsListView;\n (function (AbsListView) {\n var OnScrollListener;\n (function (OnScrollListener) {\n OnScrollListener.SCROLL_STATE_IDLE = 0;\n OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1;\n OnScrollListener.SCROLL_STATE_FLING = 2;\n })(OnScrollListener = AbsListView.OnScrollListener || (AbsListView.OnScrollListener = {}));\n class WindowRunnnable {\n constructor(arg) {\n this._AbsListView_this = arg;\n }\n rememberWindowAttachCount() {\n this.mOriginalAttachCount = this._AbsListView_this.getWindowAttachCount();\n }\n sameWindow() {\n return this._AbsListView_this.getWindowAttachCount() == this.mOriginalAttachCount;\n }\n }\n AbsListView.WindowRunnnable = WindowRunnnable;\n class PerformClick extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this.mClickMotionPosition = 0;\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.mDataChanged)\n return;\n const adapter = this._AbsListView_this.mAdapter;\n const motionPosition = this.mClickMotionPosition;\n if (adapter != null && this._AbsListView_this.mItemCount > 0 && motionPosition != AbsListView.INVALID_POSITION\n && motionPosition < adapter.getCount() && this.sameWindow()) {\n const view = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition);\n if (view != null) {\n this._AbsListView_this.performItemClick(view, motionPosition, adapter.getItemId(motionPosition));\n }\n }\n }\n }\n AbsListView.PerformClick = PerformClick;\n class CheckForLongPress extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n run() {\n const motionPosition = this._AbsListView_this.mMotionPosition;\n const child = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition);\n if (child != null) {\n const longPressPosition = this._AbsListView_this.mMotionPosition;\n const longPressId = this._AbsListView_this.mAdapter.getItemId(this._AbsListView_this.mMotionPosition);\n let handled = false;\n if (this.sameWindow() && !this._AbsListView_this.mDataChanged) {\n handled = this._AbsListView_this.performLongPress(child, longPressPosition, longPressId);\n }\n if (handled) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.setPressed(false);\n child.setPressed(false);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n }\n }\n AbsListView.CheckForLongPress = CheckForLongPress;\n class CheckForKeyLongPress extends AbsListView.WindowRunnnable {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.isPressed() && this._AbsListView_this.mSelectedPosition >= 0) {\n let index = this._AbsListView_this.mSelectedPosition - this._AbsListView_this.mFirstPosition;\n let v = this._AbsListView_this.getChildAt(index);\n if (!this._AbsListView_this.mDataChanged) {\n let handled = false;\n if (this.sameWindow()) {\n handled = this._AbsListView_this.performLongPress(v, this._AbsListView_this.mSelectedPosition, this._AbsListView_this.mSelectedRowId);\n }\n if (handled) {\n this._AbsListView_this.setPressed(false);\n v.setPressed(false);\n }\n }\n else {\n this._AbsListView_this.setPressed(false);\n if (v != null)\n v.setPressed(false);\n }\n }\n }\n }\n AbsListView.CheckForKeyLongPress = CheckForKeyLongPress;\n class CheckForTap {\n constructor(arg) {\n this._AbsListView_this = arg;\n }\n run() {\n if (this._AbsListView_this.mTouchMode == AbsListView.TOUCH_MODE_DOWN) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_TAP;\n const child = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition);\n if (child != null && !child.hasFocusable()) {\n this._AbsListView_this.mLayoutMode = AbsListView.LAYOUT_NORMAL;\n if (!this._AbsListView_this.mDataChanged) {\n child.setPressed(true);\n this._AbsListView_this.setPressed(true);\n this._AbsListView_this.layoutChildren();\n this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition, child);\n this._AbsListView_this.refreshDrawableState();\n const longPressTimeout = ViewConfiguration.getLongPressTimeout();\n const longClickable = this._AbsListView_this.isLongClickable();\n if (this._AbsListView_this.mSelector != null) {\n let d = this._AbsListView_this.mSelector.getCurrent();\n }\n if (longClickable) {\n if (this._AbsListView_this.mPendingCheckForLongPress_List == null) {\n this._AbsListView_this.mPendingCheckForLongPress_List = new AbsListView.CheckForLongPress(this._AbsListView_this);\n }\n this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount();\n this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List, longPressTimeout);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING;\n }\n }\n }\n }\n }\n AbsListView.CheckForTap = CheckForTap;\n class FlingRunnable {\n constructor(arg) {\n this.mLastFlingY = 0;\n this.mCheckFlywheel = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n const activeId = inner_this._AbsListView_this.mActivePointerId;\n const vt = inner_this._AbsListView_this.mVelocityTracker;\n const scroller = inner_this.mScroller;\n if (vt == null || activeId == AbsListView.INVALID_POINTER) {\n return;\n }\n vt.computeCurrentVelocity(1000, inner_this._AbsListView_this.mMaximumVelocity);\n const yvel = -vt.getYVelocity(activeId);\n if (Math.abs(yvel) >= inner_this._AbsListView_this.mMinimumVelocity && scroller.isScrollingInDirection(0, yvel)) {\n inner_this._AbsListView_this.postDelayed(inner_this, FlingRunnable.FLYWHEEL_TIMEOUT);\n }\n else {\n inner_this.endFling();\n inner_this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL;\n inner_this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n }\n }\n }\n return new _Inner();\n })();\n this._AbsListView_this = arg;\n this.mScroller = new OverScroller();\n }\n start(initialVelocity) {\n let initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0;\n this.mLastFlingY = initialY;\n this.mScroller.setInterpolator(null);\n this.mScroller.fling(0, initialY, 0, initialVelocity, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING;\n this._AbsListView_this.postOnAnimation(this);\n if (AbsListView.PROFILE_FLINGING) {\n if (!this._AbsListView_this.mFlingProfilingStarted) {\n this._AbsListView_this.mFlingProfilingStarted = true;\n }\n }\n }\n startSpringback() {\n if (this.mScroller.springBack(0, this._AbsListView_this.mScrollY, 0, 0, 0, 0)) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);\n }\n }\n startOverfling(initialVelocity) {\n this.mScroller.setInterpolator(null);\n let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE;\n if (this._AbsListView_this.mScrollY < 0)\n minY = 0;\n else if (this._AbsListView_this.mScrollY > 0)\n maxY = 0;\n this.mScroller.fling(0, this._AbsListView_this.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, this._AbsListView_this.getHeight());\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n edgeReached(delta) {\n this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY, 0, this._AbsListView_this.mOverflingDistance);\n const overscrollMode = this._AbsListView_this.getOverScrollMode();\n if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this._AbsListView_this.contentFits())) {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n }\n else {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n if (this._AbsListView_this.mPositionScroller != null) {\n this._AbsListView_this.mPositionScroller.stop();\n }\n }\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n startScroll(distance, duration, linear) {\n let initialY = distance < 0 ? Integer.MAX_VALUE : 0;\n this.mLastFlingY = initialY;\n this.mScroller.setInterpolator(linear ? AbsListView.sLinearInterpolator : null);\n this.mScroller.startScroll(0, initialY, 0, distance, duration);\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING;\n this._AbsListView_this.postOnAnimation(this);\n }\n endFling() {\n this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST;\n this._AbsListView_this.removeCallbacks(this);\n this._AbsListView_this.removeCallbacks(this.mCheckFlywheel);\n this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);\n this._AbsListView_this.clearScrollingCache();\n this.mScroller.abortAnimation();\n }\n flywheelTouch() {\n this._AbsListView_this.postDelayed(this.mCheckFlywheel, FlingRunnable.FLYWHEEL_TIMEOUT);\n }\n run() {\n switch (this._AbsListView_this.mTouchMode) {\n default:\n this.endFling();\n return;\n case AbsListView.TOUCH_MODE_SCROLL:\n if (this.mScroller.isFinished()) {\n return;\n }\n case AbsListView.TOUCH_MODE_FLING:\n {\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.layoutChildren();\n }\n if (this._AbsListView_this.mItemCount == 0 || this._AbsListView_this.getChildCount() == 0) {\n this.endFling();\n return;\n }\n const scroller = this.mScroller;\n let more = scroller.computeScrollOffset();\n const y = scroller.getCurrY();\n let delta = this.mLastFlingY - y;\n if (delta > 0) {\n this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition;\n const firstView = this._AbsListView_this.getChildAt(0);\n this._AbsListView_this.mMotionViewOriginalTop = firstView.getTop();\n delta = Math.min(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1, delta);\n }\n else {\n let offsetToLast = this._AbsListView_this.getChildCount() - 1;\n this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition + offsetToLast;\n const lastView = this._AbsListView_this.getChildAt(offsetToLast);\n this._AbsListView_this.mMotionViewOriginalTop = lastView.getTop();\n delta = Math.max(-(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1), delta);\n }\n let motionView = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition);\n let oldTop = 0;\n if (motionView != null) {\n oldTop = motionView.getTop();\n }\n const atEdge = this._AbsListView_this.trackMotionScroll(delta, delta);\n const atEnd = atEdge && (delta != 0);\n if (atEnd) {\n if (motionView != null) {\n let overshoot = -(delta - (motionView.getTop() - oldTop));\n this._AbsListView_this.overScrollBy(0, overshoot, 0, this._AbsListView_this.mScrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false);\n }\n if (more) {\n this.edgeReached(delta);\n }\n break;\n }\n if (more && !atEnd) {\n if (atEdge)\n this._AbsListView_this.invalidate();\n this.mLastFlingY = y;\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n this.endFling();\n if (AbsListView.PROFILE_FLINGING) {\n if (this._AbsListView_this.mFlingProfilingStarted) {\n this._AbsListView_this.mFlingProfilingStarted = false;\n }\n }\n }\n break;\n }\n case AbsListView.TOUCH_MODE_OVERFLING:\n {\n const scroller = this.mScroller;\n if (scroller.computeScrollOffset()) {\n const scrollY = this._AbsListView_this.mScrollY;\n const currY = scroller.getCurrY();\n let deltaY = currY - scrollY;\n const crossDown = scrollY <= 0 && currY > 0;\n const crossUp = scrollY >= 0 && currY < 0;\n if (crossDown || crossUp) {\n let velocity = Math.floor(scroller.getCurrVelocity());\n if (crossUp)\n velocity = -velocity;\n scroller.abortAnimation();\n this.start(velocity);\n deltaY = -scrollY;\n }\n if (this._AbsListView_this.overScrollBy(0, deltaY, 0, scrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false)) {\n this.startSpringback();\n }\n else {\n this._AbsListView_this.invalidate();\n this._AbsListView_this.postOnAnimation(this);\n }\n }\n else {\n this.endFling();\n }\n break;\n }\n }\n }\n }\n FlingRunnable.FLYWHEEL_TIMEOUT = 40;\n AbsListView.FlingRunnable = FlingRunnable;\n class PositionScroller {\n constructor(arg) {\n this.mMode = 0;\n this.mTargetPos = 0;\n this.mBoundPos = 0;\n this.mLastSeenPos = 0;\n this.mScrollDuration = 0;\n this.mExtraScroll = 0;\n this.mOffsetFromTop = 0;\n this._AbsListView_this = arg;\n this.mExtraScroll = ViewConfiguration.get().getScaledFadingEdgeLength();\n }\n start(position, boundPosition) {\n if (boundPosition == null)\n this._start_1(position);\n else\n this._start_2(position, boundPosition);\n }\n _start_1(position) {\n this.stop();\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.start(position);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n if (clampedPosition < firstPos) {\n viewTravelCount = firstPos - clampedPosition + 1;\n this.mMode = PositionScroller.MOVE_UP_POS;\n }\n else if (clampedPosition > lastPos) {\n viewTravelCount = clampedPosition - lastPos + 1;\n this.mMode = PositionScroller.MOVE_DOWN_POS;\n }\n else {\n this.scrollToVisible(clampedPosition, AbsListView.INVALID_POSITION, PositionScroller.SCROLL_DURATION);\n return;\n }\n if (viewTravelCount > 0) {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount;\n }\n else {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION;\n }\n this.mTargetPos = clampedPosition;\n this.mBoundPos = AbsListView.INVALID_POSITION;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n _start_2(position, boundPosition) {\n this.stop();\n if (boundPosition == AbsListView.INVALID_POSITION) {\n this.start(position);\n return;\n }\n if (this._AbsListView_this.mDataChanged) {\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.start(position, boundPosition);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n if (clampedPosition < firstPos) {\n const boundPosFromLast = lastPos - boundPosition;\n if (boundPosFromLast < 1) {\n return;\n }\n const posTravel = firstPos - clampedPosition + 1;\n const boundTravel = boundPosFromLast - 1;\n if (boundTravel < posTravel) {\n viewTravelCount = boundTravel;\n this.mMode = PositionScroller.MOVE_UP_BOUND;\n }\n else {\n viewTravelCount = posTravel;\n this.mMode = PositionScroller.MOVE_UP_POS;\n }\n }\n else if (clampedPosition > lastPos) {\n const boundPosFromFirst = boundPosition - firstPos;\n if (boundPosFromFirst < 1) {\n return;\n }\n const posTravel = clampedPosition - lastPos + 1;\n const boundTravel = boundPosFromFirst - 1;\n if (boundTravel < posTravel) {\n viewTravelCount = boundTravel;\n this.mMode = PositionScroller.MOVE_DOWN_BOUND;\n }\n else {\n viewTravelCount = posTravel;\n this.mMode = PositionScroller.MOVE_DOWN_POS;\n }\n }\n else {\n this.scrollToVisible(clampedPosition, boundPosition, PositionScroller.SCROLL_DURATION);\n return;\n }\n if (viewTravelCount > 0) {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount;\n }\n else {\n this.mScrollDuration = PositionScroller.SCROLL_DURATION;\n }\n this.mTargetPos = clampedPosition;\n this.mBoundPos = boundPosition;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n startWithOffset(position, offset, duration = PositionScroller.SCROLL_DURATION) {\n this.stop();\n if (this._AbsListView_this.mDataChanged) {\n const postOffset = offset;\n this._AbsListView_this.mPositionScrollAfterLayout = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.startWithOffset(position, postOffset, duration);\n }\n }\n return new _Inner();\n })();\n return;\n }\n const childCount = this._AbsListView_this.getChildCount();\n if (childCount == 0) {\n return;\n }\n offset += this._AbsListView_this.getPaddingTop();\n this.mTargetPos = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position));\n this.mOffsetFromTop = offset;\n this.mBoundPos = AbsListView.INVALID_POSITION;\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this.mMode = PositionScroller.MOVE_OFFSET;\n const firstPos = this._AbsListView_this.mFirstPosition;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount;\n if (this.mTargetPos < firstPos) {\n viewTravelCount = firstPos - this.mTargetPos;\n }\n else if (this.mTargetPos > lastPos) {\n viewTravelCount = this.mTargetPos - lastPos;\n }\n else {\n const targetTop = this._AbsListView_this.getChildAt(this.mTargetPos - firstPos).getTop();\n this._AbsListView_this.smoothScrollBy(targetTop - offset, duration, true);\n return;\n }\n const screenTravelCount = viewTravelCount / childCount;\n this.mScrollDuration = screenTravelCount < 1 ? duration : Math.floor((duration / screenTravelCount));\n this.mLastSeenPos = AbsListView.INVALID_POSITION;\n this._AbsListView_this.postOnAnimation(this);\n }\n scrollToVisible(targetPos, boundPos, duration) {\n const firstPos = this._AbsListView_this.mFirstPosition;\n const childCount = this._AbsListView_this.getChildCount();\n const lastPos = firstPos + childCount - 1;\n const paddedTop = this._AbsListView_this.mListPadding.top;\n const paddedBottom = this._AbsListView_this.getHeight() - this._AbsListView_this.mListPadding.bottom;\n if (targetPos < firstPos || targetPos > lastPos) {\n Log.w(AbsListView.TAG_AbsListView, \"scrollToVisible called with targetPos \" + targetPos + \" not visible [\" + firstPos + \", \" + lastPos + \"]\");\n }\n if (boundPos < firstPos || boundPos > lastPos) {\n boundPos = AbsListView.INVALID_POSITION;\n }\n const targetChild = this._AbsListView_this.getChildAt(targetPos - firstPos);\n const targetTop = targetChild.getTop();\n const targetBottom = targetChild.getBottom();\n let scrollBy = 0;\n if (targetBottom > paddedBottom) {\n scrollBy = targetBottom - paddedBottom;\n }\n if (targetTop < paddedTop) {\n scrollBy = targetTop - paddedTop;\n }\n if (scrollBy == 0) {\n return;\n }\n if (boundPos >= 0) {\n const boundChild = this._AbsListView_this.getChildAt(boundPos - firstPos);\n const boundTop = boundChild.getTop();\n const boundBottom = boundChild.getBottom();\n const absScroll = Math.abs(scrollBy);\n if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) {\n scrollBy = Math.max(0, boundBottom - paddedBottom);\n }\n else if (scrollBy > 0 && boundTop - absScroll < paddedTop) {\n scrollBy = Math.min(0, boundTop - paddedTop);\n }\n }\n this._AbsListView_this.smoothScrollBy(scrollBy, duration);\n }\n stop() {\n this._AbsListView_this.removeCallbacks(this);\n }\n run() {\n const listHeight = this._AbsListView_this.getHeight();\n const firstPos = this._AbsListView_this.mFirstPosition;\n switch (this.mMode) {\n case PositionScroller.MOVE_DOWN_POS:\n {\n const lastViewIndex = this._AbsListView_this.getChildCount() - 1;\n const lastPos = firstPos + lastViewIndex;\n if (lastViewIndex < 0) {\n return;\n }\n if (lastPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const lastView = this._AbsListView_this.getChildAt(lastViewIndex);\n const lastViewHeight = lastView.getHeight();\n const lastViewTop = lastView.getTop();\n const lastViewPixelsShowing = listHeight - lastViewTop;\n const extraScroll = lastPos < this._AbsListView_this.mItemCount - 1 ? Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll) : this._AbsListView_this.mListPadding.bottom;\n const scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll;\n this._AbsListView_this.smoothScrollBy(scrollBy, this.mScrollDuration, true);\n this.mLastSeenPos = lastPos;\n if (lastPos < this.mTargetPos) {\n this._AbsListView_this.postOnAnimation(this);\n }\n break;\n }\n case PositionScroller.MOVE_DOWN_BOUND:\n {\n const nextViewIndex = 1;\n const childCount = this._AbsListView_this.getChildCount();\n if (firstPos == this.mBoundPos || childCount <= nextViewIndex || firstPos + childCount >= this._AbsListView_this.mItemCount) {\n return;\n }\n const nextPos = firstPos + nextViewIndex;\n if (nextPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const nextView = this._AbsListView_this.getChildAt(nextViewIndex);\n const nextViewHeight = nextView.getHeight();\n const nextViewTop = nextView.getTop();\n const extraScroll = Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll);\n if (nextPos < this.mBoundPos) {\n this._AbsListView_this.smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll), this.mScrollDuration, true);\n this.mLastSeenPos = nextPos;\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n if (nextViewTop > extraScroll) {\n this._AbsListView_this.smoothScrollBy(nextViewTop - extraScroll, this.mScrollDuration, true);\n }\n }\n break;\n }\n case PositionScroller.MOVE_UP_POS:\n {\n if (firstPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const firstView = this._AbsListView_this.getChildAt(0);\n if (firstView == null) {\n return;\n }\n const firstViewTop = firstView.getTop();\n const extraScroll = firstPos > 0 ? Math.max(this.mExtraScroll, this._AbsListView_this.mListPadding.top) : this._AbsListView_this.mListPadding.top;\n this._AbsListView_this.smoothScrollBy(firstViewTop - extraScroll, this.mScrollDuration, true);\n this.mLastSeenPos = firstPos;\n if (firstPos > this.mTargetPos) {\n this._AbsListView_this.postOnAnimation(this);\n }\n break;\n }\n case PositionScroller.MOVE_UP_BOUND:\n {\n const lastViewIndex = this._AbsListView_this.getChildCount() - 2;\n if (lastViewIndex < 0) {\n return;\n }\n const lastPos = firstPos + lastViewIndex;\n if (lastPos == this.mLastSeenPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n const lastView = this._AbsListView_this.getChildAt(lastViewIndex);\n const lastViewHeight = lastView.getHeight();\n const lastViewTop = lastView.getTop();\n const lastViewPixelsShowing = listHeight - lastViewTop;\n const extraScroll = Math.max(this._AbsListView_this.mListPadding.top, this.mExtraScroll);\n this.mLastSeenPos = lastPos;\n if (lastPos > this.mBoundPos) {\n this._AbsListView_this.smoothScrollBy(-(lastViewPixelsShowing - extraScroll), this.mScrollDuration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n const bottom = listHeight - extraScroll;\n const lastViewBottom = lastViewTop + lastViewHeight;\n if (bottom > lastViewBottom) {\n this._AbsListView_this.smoothScrollBy(-(bottom - lastViewBottom), this.mScrollDuration, true);\n }\n }\n break;\n }\n case PositionScroller.MOVE_OFFSET:\n {\n if (this.mLastSeenPos == firstPos) {\n this._AbsListView_this.postOnAnimation(this);\n return;\n }\n this.mLastSeenPos = firstPos;\n const childCount = this._AbsListView_this.getChildCount();\n const position = this.mTargetPos;\n const lastPos = firstPos + childCount - 1;\n let viewTravelCount = 0;\n if (position < firstPos) {\n viewTravelCount = firstPos - position + 1;\n }\n else if (position > lastPos) {\n viewTravelCount = position - lastPos;\n }\n const screenTravelCount = viewTravelCount / childCount;\n const modifier = Math.min(Math.abs(screenTravelCount), 1.);\n if (position < firstPos) {\n const distance = Math.floor((-this._AbsListView_this.getHeight() * modifier));\n const duration = Math.floor((this.mScrollDuration * modifier));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else if (position > lastPos) {\n const distance = Math.floor((this._AbsListView_this.getHeight() * modifier));\n const duration = Math.floor((this.mScrollDuration * modifier));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n this._AbsListView_this.postOnAnimation(this);\n }\n else {\n const targetTop = this._AbsListView_this.getChildAt(position - firstPos).getTop();\n const distance = targetTop - this.mOffsetFromTop;\n const duration = Math.floor((this.mScrollDuration * (Math.abs(distance) / this._AbsListView_this.getHeight())));\n this._AbsListView_this.smoothScrollBy(distance, duration, true);\n }\n break;\n }\n default:\n break;\n }\n }\n }\n PositionScroller.SCROLL_DURATION = 200;\n PositionScroller.MOVE_DOWN_POS = 1;\n PositionScroller.MOVE_UP_POS = 2;\n PositionScroller.MOVE_DOWN_BOUND = 3;\n PositionScroller.MOVE_UP_BOUND = 4;\n PositionScroller.MOVE_OFFSET = 5;\n AbsListView.PositionScroller = PositionScroller;\n class AdapterDataSetObserver extends AdapterView.AdapterDataSetObserver {\n constructor(arg) {\n super(arg);\n this._AbsListView_this = arg;\n }\n onChanged() {\n super.onChanged();\n }\n onInvalidated() {\n super.onInvalidated();\n }\n }\n AbsListView.AdapterDataSetObserver = AdapterDataSetObserver;\n class LayoutParams extends ViewGroup.LayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number')\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.viewType = 0;\n this.scrappedFromPosition = 0;\n this.itemId = -1;\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) {\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') {\n this.viewType = args[2];\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n }\n AbsListView.LayoutParams = LayoutParams;\n class RecycleBin {\n constructor(arg) {\n this.mFirstActivePosition = 0;\n this.mActiveViews = [];\n this.mViewTypeCount = 0;\n this._AbsListView_this = arg;\n }\n setViewTypeCount(viewTypeCount) {\n if (viewTypeCount < 1) {\n throw Error(`new IllegalArgumentException(\"Can't have a viewTypeCount < 1\")`);\n }\n let scrapViews = new Array(viewTypeCount);\n for (let i = 0; i < viewTypeCount; i++) {\n scrapViews[i] = new ArrayList();\n }\n this.mViewTypeCount = viewTypeCount;\n this.mCurrentScrap = scrapViews[0];\n this.mScrapViews = scrapViews;\n }\n markChildrenDirty() {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n scrap.get(i).forceLayout();\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n scrap.get(j).forceLayout();\n }\n }\n }\n if (this.mTransientStateViews != null) {\n const count = this.mTransientStateViews.size();\n for (let i = 0; i < count; i++) {\n this.mTransientStateViews.valueAt(i).forceLayout();\n }\n }\n if (this.mTransientStateViewsById != null) {\n const count = this.mTransientStateViewsById.size();\n for (let i = 0; i < count; i++) {\n this.mTransientStateViewsById.valueAt(i).forceLayout();\n }\n }\n }\n shouldRecycleViewType(viewType) {\n return viewType >= 0;\n }\n clear() {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - i), false);\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - j), false);\n }\n }\n }\n if (this.mTransientStateViews != null) {\n this.mTransientStateViews.clear();\n }\n if (this.mTransientStateViewsById != null) {\n this.mTransientStateViewsById.clear();\n }\n }\n fillActiveViews(childCount, firstActivePosition) {\n if (this.mActiveViews.length < childCount) {\n this.mActiveViews = new Array(childCount);\n }\n this.mFirstActivePosition = firstActivePosition;\n const activeViews = this.mActiveViews;\n for (let i = 0; i < childCount; i++) {\n let child = this._AbsListView_this.getChildAt(i);\n let lp = child.getLayoutParams();\n if (lp != null && lp.viewType != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {\n activeViews[i] = child;\n }\n }\n }\n getActiveView(position) {\n let index = position - this.mFirstActivePosition;\n const activeViews = this.mActiveViews;\n if (index >= 0 && index < activeViews.length) {\n const match = activeViews[index];\n activeViews[index] = null;\n return match;\n }\n return null;\n }\n getTransientStateView(position) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds && this.mTransientStateViewsById != null) {\n let id = this._AbsListView_this.mAdapter.getItemId(position);\n let result = this.mTransientStateViewsById.get(id);\n this.mTransientStateViewsById.remove(id);\n return result;\n }\n if (this.mTransientStateViews != null) {\n const index = this.mTransientStateViews.indexOfKey(position);\n if (index >= 0) {\n let result = this.mTransientStateViews.valueAt(index);\n this.mTransientStateViews.removeAt(index);\n return result;\n }\n }\n return null;\n }\n clearTransientStateViews() {\n if (this.mTransientStateViews != null) {\n this.mTransientStateViews.clear();\n }\n if (this.mTransientStateViewsById != null) {\n this.mTransientStateViewsById.clear();\n }\n }\n getScrapView(position) {\n if (this.mViewTypeCount == 1) {\n return AbsListView.retrieveFromScrap(this.mCurrentScrap, position);\n }\n else {\n let whichScrap = this._AbsListView_this.mAdapter.getItemViewType(position);\n if (whichScrap >= 0 && whichScrap < this.mScrapViews.length) {\n return AbsListView.retrieveFromScrap(this.mScrapViews[whichScrap], position);\n }\n }\n return null;\n }\n addScrapView(scrap, position) {\n const lp = scrap.getLayoutParams();\n if (lp == null) {\n return;\n }\n lp.scrappedFromPosition = position;\n const viewType = lp.viewType;\n if (!this.shouldRecycleViewType(viewType)) {\n return;\n }\n scrap.dispatchStartTemporaryDetach();\n const scrapHasTransientState = scrap.hasTransientState();\n if (scrapHasTransientState) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) {\n if (this.mTransientStateViewsById == null) {\n this.mTransientStateViewsById = new LongSparseArray();\n }\n this.mTransientStateViewsById.put(lp.itemId, scrap);\n }\n else if (!this._AbsListView_this.mDataChanged) {\n if (this.mTransientStateViews == null) {\n this.mTransientStateViews = new SparseArray();\n }\n this.mTransientStateViews.put(position, scrap);\n }\n else {\n if (this.mSkippedScrap == null) {\n this.mSkippedScrap = new ArrayList();\n }\n this.mSkippedScrap.add(scrap);\n }\n }\n else {\n if (this.mViewTypeCount == 1) {\n this.mCurrentScrap.add(scrap);\n }\n else {\n this.mScrapViews[viewType].add(scrap);\n }\n if (this.mRecyclerListener != null) {\n this.mRecyclerListener.onMovedToScrapHeap(scrap);\n }\n }\n }\n removeSkippedScrap() {\n if (this.mSkippedScrap == null) {\n return;\n }\n const count = this.mSkippedScrap.size();\n for (let i = 0; i < count; i++) {\n this._AbsListView_this.removeDetachedView(this.mSkippedScrap.get(i), false);\n }\n this.mSkippedScrap.clear();\n }\n scrapActiveViews() {\n const activeViews = this.mActiveViews;\n const hasListener = this.mRecyclerListener != null;\n const multipleScraps = this.mViewTypeCount > 1;\n let scrapViews = this.mCurrentScrap;\n const count = activeViews.length;\n for (let i = count - 1; i >= 0; i--) {\n const victim = activeViews[i];\n if (victim != null) {\n const lp = victim.getLayoutParams();\n let whichScrap = lp.viewType;\n activeViews[i] = null;\n const scrapHasTransientState = victim.hasTransientState();\n if (!this.shouldRecycleViewType(whichScrap) || scrapHasTransientState) {\n if (whichScrap != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER && scrapHasTransientState) {\n this._AbsListView_this.removeDetachedView(victim, false);\n }\n if (scrapHasTransientState) {\n if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) {\n if (this.mTransientStateViewsById == null) {\n this.mTransientStateViewsById = new LongSparseArray();\n }\n let id = this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition + i);\n this.mTransientStateViewsById.put(id, victim);\n }\n else {\n if (this.mTransientStateViews == null) {\n this.mTransientStateViews = new SparseArray();\n }\n this.mTransientStateViews.put(this.mFirstActivePosition + i, victim);\n }\n }\n continue;\n }\n if (multipleScraps) {\n scrapViews = this.mScrapViews[whichScrap];\n }\n victim.dispatchStartTemporaryDetach();\n lp.scrappedFromPosition = this.mFirstActivePosition + i;\n scrapViews.add(victim);\n if (hasListener) {\n this.mRecyclerListener.onMovedToScrapHeap(victim);\n }\n }\n }\n this.pruneScrapViews();\n }\n pruneScrapViews() {\n const maxViews = this.mActiveViews.length;\n const viewTypeCount = this.mViewTypeCount;\n const scrapViews = this.mScrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n let size = scrapPile.size();\n const extras = size - maxViews;\n size--;\n for (let j = 0; j < extras; j++) {\n this._AbsListView_this.removeDetachedView(scrapPile.remove(size--), false);\n }\n }\n if (this.mTransientStateViews != null) {\n for (let i = 0; i < this.mTransientStateViews.size(); i++) {\n const v = this.mTransientStateViews.valueAt(i);\n if (!v.hasTransientState()) {\n this.mTransientStateViews.removeAt(i);\n i--;\n }\n }\n }\n if (this.mTransientStateViewsById != null) {\n for (let i = 0; i < this.mTransientStateViewsById.size(); i++) {\n const v = this.mTransientStateViewsById.valueAt(i);\n if (!v.hasTransientState()) {\n this.mTransientStateViewsById.removeAt(i);\n i--;\n }\n }\n }\n }\n reclaimScrapViews(views) {\n if (this.mViewTypeCount == 1) {\n views.addAll(this.mCurrentScrap);\n }\n else {\n const viewTypeCount = this.mViewTypeCount;\n const scrapViews = this.mScrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n views.addAll(scrapPile);\n }\n }\n }\n setCacheColorHint(color) {\n if (this.mViewTypeCount == 1) {\n const scrap = this.mCurrentScrap;\n const scrapCount = scrap.size();\n for (let i = 0; i < scrapCount; i++) {\n scrap.get(i).setDrawingCacheBackgroundColor(color);\n }\n }\n else {\n const typeCount = this.mViewTypeCount;\n for (let i = 0; i < typeCount; i++) {\n const scrap = this.mScrapViews[i];\n const scrapCount = scrap.size();\n for (let j = 0; j < scrapCount; j++) {\n scrap.get(j).setDrawingCacheBackgroundColor(color);\n }\n }\n }\n const activeViews = this.mActiveViews;\n const count = activeViews.length;\n for (let i = 0; i < count; ++i) {\n const victim = activeViews[i];\n if (victim != null) {\n victim.setDrawingCacheBackgroundColor(color);\n }\n }\n }\n }\n AbsListView.RecycleBin = RecycleBin;\n })(AbsListView = widget.AbsListView || (widget.AbsListView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayList = java.util.ArrayList;\n var AdapterView = android.widget.AdapterView;\n class HeaderViewListAdapter {\n constructor(headerViewInfos, footerViewInfos, adapter) {\n this.mAdapter = adapter;\n this.mIsFilterable = false;\n if (headerViewInfos == null) {\n this.mHeaderViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST;\n }\n else {\n this.mHeaderViewInfos = headerViewInfos;\n }\n if (footerViewInfos == null) {\n this.mFooterViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST;\n }\n else {\n this.mFooterViewInfos = footerViewInfos;\n }\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n }\n getHeadersCount() {\n return this.mHeaderViewInfos.size();\n }\n getFootersCount() {\n return this.mFooterViewInfos.size();\n }\n isEmpty() {\n return this.mAdapter == null || this.mAdapter.isEmpty();\n }\n areAllListInfosSelectable(infos) {\n if (infos != null) {\n for (let info of infos.array) {\n if (!info.isSelectable) {\n return false;\n }\n }\n }\n return true;\n }\n removeHeader(v) {\n for (let i = 0; i < this.mHeaderViewInfos.size(); i++) {\n let info = this.mHeaderViewInfos.get(i);\n if (info.view == v) {\n this.mHeaderViewInfos.remove(i);\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n return true;\n }\n }\n return false;\n }\n removeFooter(v) {\n for (let i = 0; i < this.mFooterViewInfos.size(); i++) {\n let info = this.mFooterViewInfos.get(i);\n if (info.view == v) {\n this.mFooterViewInfos.remove(i);\n this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos);\n return true;\n }\n }\n return false;\n }\n getCount() {\n if (this.mAdapter != null) {\n return this.getFootersCount() + this.getHeadersCount() + this.mAdapter.getCount();\n }\n else {\n return this.getFootersCount() + this.getHeadersCount();\n }\n }\n areAllItemsEnabled() {\n if (this.mAdapter != null) {\n return this.mAreAllFixedViewsSelectable && this.mAdapter.areAllItemsEnabled();\n }\n else {\n return true;\n }\n }\n isEnabled(position) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).isSelectable;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.isEnabled(adjPosition);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).isSelectable;\n }\n getItem(position) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).data;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItem(adjPosition);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).data;\n }\n getItemId(position) {\n let numHeaders = this.getHeadersCount();\n if (this.mAdapter != null && position >= numHeaders) {\n let adjPosition = position - numHeaders;\n let adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItemId(adjPosition);\n }\n }\n return -1;\n }\n hasStableIds() {\n if (this.mAdapter != null) {\n return this.mAdapter.hasStableIds();\n }\n return false;\n }\n getView(position, convertView, parent) {\n let numHeaders = this.getHeadersCount();\n if (position < numHeaders) {\n return this.mHeaderViewInfos.get(position).view;\n }\n const adjPosition = position - numHeaders;\n let adapterCount = 0;\n if (this.mAdapter != null) {\n adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getView(adjPosition, convertView, parent);\n }\n }\n return this.mFooterViewInfos.get(adjPosition - adapterCount).view;\n }\n getItemViewType(position) {\n let numHeaders = this.getHeadersCount();\n if (this.mAdapter != null && position >= numHeaders) {\n let adjPosition = position - numHeaders;\n let adapterCount = this.mAdapter.getCount();\n if (adjPosition < adapterCount) {\n return this.mAdapter.getItemViewType(adjPosition);\n }\n }\n return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER;\n }\n getViewTypeCount() {\n if (this.mAdapter != null) {\n return this.mAdapter.getViewTypeCount();\n }\n return 1;\n }\n registerDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.registerDataSetObserver(observer);\n }\n }\n unregisterDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(observer);\n }\n }\n getFilter() {\n return null;\n }\n getWrappedAdapter() {\n return this.mAdapter;\n }\n }\n HeaderViewListAdapter.EMPTY_INFO_LIST = new ArrayList();\n widget.HeaderViewListAdapter = HeaderViewListAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n var ArrayList = java.util.ArrayList;\n class Observable {\n constructor() {\n this.mObservers = new ArrayList();\n }\n registerObserver(observer) {\n if (observer == null) {\n throw new Error(\"The observer is null.\");\n }\n if (this.mObservers.contains(observer)) {\n throw new Error(\"Observer \" + observer + \" is already registered.\");\n }\n this.mObservers.add(observer);\n }\n unregisterObserver(observer) {\n if (observer == null) {\n throw new Error(\"The observer is null.\");\n }\n let index = this.mObservers.indexOf(observer);\n if (index == -1) {\n throw new Error(\"Observer \" + observer + \" was not registered.\");\n }\n this.mObservers.remove(index);\n }\n unregisterAll() {\n this.mObservers.clear();\n }\n }\n database.Observable = Observable;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var database;\n (function (database) {\n var Observable = android.database.Observable;\n class DataSetObservable extends Observable {\n notifyChanged() {\n for (let i = this.mObservers.size() - 1; i >= 0; i--) {\n this.mObservers.get(i).onChanged();\n }\n }\n notifyInvalidated() {\n for (let i = this.mObservers.size() - 1; i >= 0; i--) {\n this.mObservers.get(i).onInvalidated();\n }\n }\n }\n database.DataSetObservable = DataSetObservable;\n })(database = android.database || (android.database = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObservable = android.database.DataSetObservable;\n class BaseAdapter {\n constructor() {\n this.mDataSetObservable = new DataSetObservable();\n }\n hasStableIds() {\n return false;\n }\n registerDataSetObserver(observer) {\n this.mDataSetObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mDataSetObservable.unregisterObserver(observer);\n }\n notifyDataSetChanged() {\n this.mDataSetObservable.notifyChanged();\n }\n notifyDataSetInvalidated() {\n this.mDataSetObservable.notifyInvalidated();\n }\n areAllItemsEnabled() {\n return true;\n }\n isEnabled(position) {\n return true;\n }\n getDropDownView(position, convertView, parent) {\n return this.getView(position, convertView, parent);\n }\n getItemViewType(position) {\n return 0;\n }\n getViewTypeCount() {\n return 1;\n }\n isEmpty() {\n return this.getCount() == 0;\n }\n }\n widget.BaseAdapter = BaseAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Paint = android.graphics.Paint;\n var PixelFormat = android.graphics.PixelFormat;\n var Rect = android.graphics.Rect;\n var MathUtils = android.util.MathUtils;\n var FocusFinder = android.view.FocusFinder;\n var KeyEvent = android.view.KeyEvent;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Trace = android.os.Trace;\n var ArrayList = java.util.ArrayList;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var AbsListView = android.widget.AbsListView;\n var AdapterView = android.widget.AdapterView;\n var HeaderViewListAdapter = android.widget.HeaderViewListAdapter;\n class ListView extends AbsListView {\n constructor(context, bindElement, defStyle = android.R.attr.listViewStyle) {\n super(context, bindElement, defStyle);\n this.mHeaderViewInfos = new ArrayList();\n this.mFooterViewInfos = new ArrayList();\n this.mDividerHeight = 0;\n this.mIsCacheColorOpaque = false;\n this.mDividerIsOpaque = false;\n this.mHeaderDividersEnabled = true;\n this.mFooterDividersEnabled = true;\n this.mAreAllItemsSelectable = true;\n this.mItemsCanFocus = false;\n this.mTempRect = new Rect();\n this.mArrowScrollFocusResult = new ListView.ArrowScrollFocusResult();\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n const d = a.getDrawable('divider');\n if (d != null) {\n this.setDivider(d);\n }\n const osHeader = a.getDrawable('overScrollHeader');\n if (osHeader != null) {\n this.setOverscrollHeader(osHeader);\n }\n const osFooter = a.getDrawable('overScrollFooter');\n if (osFooter != null) {\n this.setOverscrollFooter(osFooter);\n }\n const dividerHeight = a.getDimensionPixelSize('dividerHeight', 0);\n if (dividerHeight != 0) {\n this.setDividerHeight(dividerHeight);\n }\n this.mHeaderDividersEnabled = a.getBoolean('headerDividersEnabled', true);\n this.mFooterDividersEnabled = a.getBoolean('footerDividersEnabled', true);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('divider', {\n setter(v, value, attrBinder) {\n let divider = attrBinder.parseDrawable(value);\n if (divider)\n v.setDivider(divider);\n }, getter(v) {\n return v.mDivider;\n }\n }).set('overScrollHeader', {\n setter(v, value, attrBinder) {\n let header = attrBinder.parseDrawable(value);\n if (header)\n v.setOverscrollHeader(header);\n }, getter(v) {\n return v.getOverscrollHeader();\n }\n }).set('overScrollFooter', {\n setter(v, value, attrBinder) {\n let footer = attrBinder.parseDrawable(value);\n if (footer)\n v.setOverscrollFooter(footer);\n }, getter(v) {\n return v.getOverscrollFooter();\n }\n }).set('dividerHeight', {\n setter(v, value, attrBinder) {\n v.setDividerHeight(attrBinder.parseNumberPixelSize(value, v.getDividerHeight()));\n }, getter(v) {\n return v.getDividerHeight();\n }\n }).set('headerDividersEnabled', {\n setter(v, value, attrBinder) {\n v.setHeaderDividersEnabled(attrBinder.parseBoolean(value, v.mHeaderDividersEnabled));\n }, getter(v) {\n return v.mHeaderDividersEnabled;\n }\n }).set('dividerHeight', {\n setter(v, value, attrBinder) {\n v.setFooterDividersEnabled(attrBinder.parseBoolean(value, v.mFooterDividersEnabled));\n }, getter(v) {\n return v.mFooterDividersEnabled;\n }\n });\n }\n getMaxScrollAmount() {\n return Math.floor((ListView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop)));\n }\n adjustViewsUpOrDown() {\n const childCount = this.getChildCount();\n let delta;\n if (childCount > 0) {\n let child;\n if (!this.mStackFromBottom) {\n child = this.getChildAt(0);\n delta = child.getTop() - this.mListPadding.top;\n if (this.mFirstPosition != 0) {\n delta -= this.mDividerHeight;\n }\n if (delta < 0) {\n delta = 0;\n }\n }\n else {\n child = this.getChildAt(childCount - 1);\n delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom);\n if (this.mFirstPosition + childCount < this.mItemCount) {\n delta += this.mDividerHeight;\n }\n if (delta > 0) {\n delta = 0;\n }\n }\n if (delta != 0) {\n this.offsetChildrenTopAndBottom(-delta);\n }\n }\n }\n addHeaderView(v, data = null, isSelectable = true) {\n const info = new ListView.FixedViewInfo(this);\n info.view = v;\n info.data = data;\n info.isSelectable = isSelectable;\n this.mHeaderViewInfos.add(info);\n if (this.mAdapter != null) {\n if (!(this.mAdapter instanceof HeaderViewListAdapter)) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter);\n }\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n }\n }\n getHeaderViewsCount() {\n return this.mHeaderViewInfos.size();\n }\n removeHeaderView(v) {\n if (this.mHeaderViewInfos.size() > 0) {\n let result = false;\n if (this.mAdapter != null && this.mAdapter.removeHeader(v)) {\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n result = true;\n }\n this.removeFixedViewInfo(v, this.mHeaderViewInfos);\n return result;\n }\n return false;\n }\n removeFixedViewInfo(v, where) {\n let len = where.size();\n for (let i = 0; i < len; ++i) {\n let info = where.get(i);\n if (info.view == v) {\n where.remove(i);\n break;\n }\n }\n }\n addFooterView(v, data = null, isSelectable = true) {\n const info = new ListView.FixedViewInfo(this);\n info.view = v;\n info.data = data;\n info.isSelectable = isSelectable;\n this.mFooterViewInfos.add(info);\n if (this.mAdapter != null) {\n if (!(this.mAdapter instanceof HeaderViewListAdapter)) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter);\n }\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n }\n }\n getFooterViewsCount() {\n return this.mFooterViewInfos.size();\n }\n removeFooterView(v) {\n if (this.mFooterViewInfos.size() > 0) {\n let result = false;\n if (this.mAdapter != null && this.mAdapter.removeFooter(v)) {\n if (this.mDataSetObserver != null) {\n this.mDataSetObserver.onChanged();\n }\n result = true;\n }\n this.removeFixedViewInfo(v, this.mFooterViewInfos);\n return result;\n }\n return false;\n }\n getAdapter() {\n return this.mAdapter;\n }\n setAdapter(adapter) {\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.resetList();\n this.mRecycler.clear();\n if (this.mHeaderViewInfos.size() > 0 || this.mFooterViewInfos.size() > 0) {\n this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, adapter);\n }\n else {\n this.mAdapter = adapter;\n }\n this.mOldSelectedPosition = ListView.INVALID_POSITION;\n this.mOldSelectedRowId = ListView.INVALID_ROW_ID;\n super.setAdapter(adapter);\n if (this.mAdapter != null) {\n this.mAreAllItemsSelectable = this.mAdapter.areAllItemsEnabled();\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.checkFocus();\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());\n let position;\n if (this.mStackFromBottom) {\n position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n }\n else {\n position = this.lookForSelectablePosition(0, true);\n }\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n if (this.mItemCount == 0) {\n this.checkSelectionChanged();\n }\n }\n else {\n this.mAreAllItemsSelectable = true;\n this.checkFocus();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n resetList() {\n this.clearRecycledState(this.mHeaderViewInfos);\n this.clearRecycledState(this.mFooterViewInfos);\n super.resetList();\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n }\n clearRecycledState(infos) {\n if (infos != null) {\n const count = infos.size();\n for (let i = 0; i < count; i++) {\n const child = infos.get(i).view;\n const p = child.getLayoutParams();\n if (p != null) {\n p.recycledHeaderFooter = false;\n }\n }\n }\n }\n showingTopFadingEdge() {\n const listTop = this.mScrollY + this.mListPadding.top;\n return (this.mFirstPosition > 0) || (this.getChildAt(0).getTop() > listTop);\n }\n showingBottomFadingEdge() {\n const childCount = this.getChildCount();\n const bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom();\n const lastVisiblePosition = this.mFirstPosition + childCount - 1;\n const listBottom = this.mScrollY + this.getHeight() - this.mListPadding.bottom;\n return (lastVisiblePosition < this.mItemCount - 1) || (bottomOfBottomChild < listBottom);\n }\n requestChildRectangleOnScreen(child, rect, immediate) {\n let rectTopWithinChild = rect.top;\n rect.offset(child.getLeft(), child.getTop());\n rect.offset(-child.getScrollX(), -child.getScrollY());\n const height = this.getHeight();\n let listUnfadedTop = this.getScrollY();\n let listUnfadedBottom = listUnfadedTop + height;\n const fadingEdge = this.getVerticalFadingEdgeLength();\n if (this.showingTopFadingEdge()) {\n if ((this.mSelectedPosition > 0) || (rectTopWithinChild > fadingEdge)) {\n listUnfadedTop += fadingEdge;\n }\n }\n let childCount = this.getChildCount();\n let bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom();\n if (this.showingBottomFadingEdge()) {\n if ((this.mSelectedPosition < this.mItemCount - 1) || (rect.bottom < (bottomOfBottomChild - fadingEdge))) {\n listUnfadedBottom -= fadingEdge;\n }\n }\n let scrollYDelta = 0;\n if (rect.bottom > listUnfadedBottom && rect.top > listUnfadedTop) {\n if (rect.height() > height) {\n scrollYDelta += (rect.top - listUnfadedTop);\n }\n else {\n scrollYDelta += (rect.bottom - listUnfadedBottom);\n }\n let distanceToBottom = bottomOfBottomChild - listUnfadedBottom;\n scrollYDelta = Math.min(scrollYDelta, distanceToBottom);\n }\n else if (rect.top < listUnfadedTop && rect.bottom < listUnfadedBottom) {\n if (rect.height() > height) {\n scrollYDelta -= (listUnfadedBottom - rect.bottom);\n }\n else {\n scrollYDelta -= (listUnfadedTop - rect.top);\n }\n let top = this.getChildAt(0).getTop();\n let deltaToTop = top - listUnfadedTop;\n scrollYDelta = Math.max(scrollYDelta, deltaToTop);\n }\n const scroll = scrollYDelta != 0;\n if (scroll) {\n this.scrollListItemsBy(-scrollYDelta);\n this.positionSelector(ListView.INVALID_POSITION, child);\n this.mSelectedTop = child.getTop();\n this.invalidate();\n }\n return scroll;\n }\n fillGap(down) {\n const count = this.getChildCount();\n if (down) {\n let paddingTop = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n paddingTop = this.getListPaddingTop();\n }\n const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + this.mDividerHeight : paddingTop;\n this.fillDown(this.mFirstPosition + count, startOffset);\n this.correctTooHigh(this.getChildCount());\n }\n else {\n let paddingBottom = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n paddingBottom = this.getListPaddingBottom();\n }\n const startOffset = count > 0 ? this.getChildAt(0).getTop() - this.mDividerHeight : this.getHeight() - paddingBottom;\n this.fillUp(this.mFirstPosition - 1, startOffset);\n this.correctTooLow(this.getChildCount());\n }\n }\n fillDown(pos, nextTop) {\n let selectedView = null;\n let end = (this.mBottom - this.mTop);\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n end -= this.mListPadding.bottom;\n }\n while (nextTop < end && pos < this.mItemCount) {\n let selected = pos == this.mSelectedPosition;\n let child = this.makeAndAddView(pos, nextTop, true, this.mListPadding.left, selected);\n nextTop = child.getBottom() + this.mDividerHeight;\n if (selected) {\n selectedView = child;\n }\n pos++;\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillUp(pos, nextBottom) {\n let selectedView = null;\n let end = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n end = this.mListPadding.top;\n }\n while (nextBottom > end && pos >= 0) {\n let selected = pos == this.mSelectedPosition;\n let child = this.makeAndAddView(pos, nextBottom, false, this.mListPadding.left, selected);\n nextBottom = child.getTop() - this.mDividerHeight;\n if (selected) {\n selectedView = child;\n }\n pos--;\n }\n this.mFirstPosition = pos + 1;\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillFromTop(nextTop) {\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition);\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1);\n if (this.mFirstPosition < 0) {\n this.mFirstPosition = 0;\n }\n return this.fillDown(this.mFirstPosition, nextTop);\n }\n fillFromMiddle(childrenTop, childrenBottom) {\n let height = childrenBottom - childrenTop;\n let position = this.reconcileSelectedPosition();\n let sel = this.makeAndAddView(position, childrenTop, true, this.mListPadding.left, true);\n this.mFirstPosition = position;\n let selHeight = sel.getMeasuredHeight();\n if (selHeight <= height) {\n sel.offsetTopAndBottom((height - selHeight) / 2);\n }\n this.fillAboveAndBelow(sel, position);\n if (!this.mStackFromBottom) {\n this.correctTooHigh(this.getChildCount());\n }\n else {\n this.correctTooLow(this.getChildCount());\n }\n return sel;\n }\n fillAboveAndBelow(sel, position) {\n const dividerHeight = this.mDividerHeight;\n if (!this.mStackFromBottom) {\n this.fillUp(position - 1, sel.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillDown(position + 1, sel.getBottom() + dividerHeight);\n }\n else {\n this.fillDown(position + 1, sel.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillUp(position - 1, sel.getTop() - dividerHeight);\n }\n }\n fillFromSelection(selectedTop, childrenTop, childrenBottom) {\n let fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n let sel;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition);\n sel = this.makeAndAddView(selectedPosition, selectedTop, true, this.mListPadding.left, true);\n if (sel.getBottom() > bottomSelectionPixel) {\n const spaceAbove = sel.getTop() - topSelectionPixel;\n const spaceBelow = sel.getBottom() - bottomSelectionPixel;\n const offset = Math.min(spaceAbove, spaceBelow);\n sel.offsetTopAndBottom(-offset);\n }\n else if (sel.getTop() < topSelectionPixel) {\n const spaceAbove = topSelectionPixel - sel.getTop();\n const spaceBelow = bottomSelectionPixel - sel.getBottom();\n const offset = Math.min(spaceAbove, spaceBelow);\n sel.offsetTopAndBottom(offset);\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n if (!this.mStackFromBottom) {\n this.correctTooHigh(this.getChildCount());\n }\n else {\n this.correctTooLow(this.getChildCount());\n }\n return sel;\n }\n getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition) {\n let bottomSelectionPixel = childrenBottom;\n if (selectedPosition != this.mItemCount - 1) {\n bottomSelectionPixel -= fadingEdgeLength;\n }\n return bottomSelectionPixel;\n }\n getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition) {\n let topSelectionPixel = childrenTop;\n if (selectedPosition > 0) {\n topSelectionPixel += fadingEdgeLength;\n }\n return topSelectionPixel;\n }\n smoothScrollToPosition(position, boundPosition) {\n super.smoothScrollToPosition(position, boundPosition);\n }\n smoothScrollByOffset(offset) {\n super.smoothScrollByOffset(offset);\n }\n moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom) {\n let fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n let sel;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition);\n if (delta > 0) {\n oldSel = this.makeAndAddView(selectedPosition - 1, oldSel.getTop(), true, this.mListPadding.left, false);\n const dividerHeight = this.mDividerHeight;\n sel = this.makeAndAddView(selectedPosition, oldSel.getBottom() + dividerHeight, true, this.mListPadding.left, true);\n if (sel.getBottom() > bottomSelectionPixel) {\n let spaceAbove = sel.getTop() - topSelectionPixel;\n let spaceBelow = sel.getBottom() - bottomSelectionPixel;\n let halfVerticalSpace = (childrenBottom - childrenTop) / 2;\n let offset = Math.min(spaceAbove, spaceBelow);\n offset = Math.min(offset, halfVerticalSpace);\n oldSel.offsetTopAndBottom(-offset);\n sel.offsetTopAndBottom(-offset);\n }\n if (!this.mStackFromBottom) {\n this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight);\n }\n else {\n this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight);\n }\n }\n else if (delta < 0) {\n if (newSel != null) {\n sel = this.makeAndAddView(selectedPosition, newSel.getTop(), true, this.mListPadding.left, true);\n }\n else {\n sel = this.makeAndAddView(selectedPosition, oldSel.getTop(), false, this.mListPadding.left, true);\n }\n if (sel.getTop() < topSelectionPixel) {\n let spaceAbove = topSelectionPixel - sel.getTop();\n let spaceBelow = bottomSelectionPixel - sel.getBottom();\n let halfVerticalSpace = (childrenBottom - childrenTop) / 2;\n let offset = Math.min(spaceAbove, spaceBelow);\n offset = Math.min(offset, halfVerticalSpace);\n sel.offsetTopAndBottom(offset);\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n }\n else {\n let oldTop = oldSel.getTop();\n sel = this.makeAndAddView(selectedPosition, oldTop, true, this.mListPadding.left, true);\n if (oldTop < childrenTop) {\n let newBottom = sel.getBottom();\n if (newBottom < childrenTop + 20) {\n sel.offsetTopAndBottom(childrenTop - sel.getTop());\n }\n }\n this.fillAboveAndBelow(sel, selectedPosition);\n }\n return sel;\n }\n onSizeChanged(w, h, oldw, oldh) {\n if (this.getChildCount() > 0) {\n let focusedChild = this.getFocusedChild();\n if (focusedChild != null) {\n const childPosition = this.mFirstPosition + this.indexOfChild(focusedChild);\n const childBottom = focusedChild.getBottom();\n const offset = Math.max(0, childBottom - (h - this.mPaddingTop));\n const top = focusedChild.getTop() - offset;\n if (this.mFocusSelector == null) {\n this.mFocusSelector = new ListView.FocusSelector(this);\n }\n this.post(this.mFocusSelector.setup(childPosition, top));\n }\n }\n super.onSizeChanged(w, h, oldw, oldh);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n let widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = View.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = View.MeasureSpec.getSize(heightMeasureSpec);\n let childWidth = 0;\n let childHeight = 0;\n let childState = 0;\n this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount();\n if (this.mItemCount > 0 && (widthMode == View.MeasureSpec.UNSPECIFIED || heightMode == View.MeasureSpec.UNSPECIFIED)) {\n const child = this.obtainView(0, this.mIsScrap);\n this.measureScrapChild(child, 0, widthMeasureSpec);\n childWidth = child.getMeasuredWidth();\n childHeight = child.getMeasuredHeight();\n childState = ListView.combineMeasuredStates(childState, child.getMeasuredState());\n if (this.recycleOnMeasure() && this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)) {\n this.mRecycler.addScrapView(child, -1);\n }\n }\n if (widthMode == View.MeasureSpec.UNSPECIFIED) {\n widthSize = this.mListPadding.left + this.mListPadding.right + childWidth + this.getVerticalScrollbarWidth();\n }\n else {\n widthSize |= (childState & ListView.MEASURED_STATE_MASK);\n }\n if (heightMode == View.MeasureSpec.UNSPECIFIED) {\n heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2;\n }\n if (heightMode == View.MeasureSpec.AT_MOST) {\n heightSize = this.measureHeightOfChildren(widthMeasureSpec, 0, ListView.NO_POSITION, heightSize, -1);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n measureScrapChild(child, position, widthMeasureSpec) {\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n child.setLayoutParams(p);\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n p.forceAdd = true;\n let childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n recycleOnMeasure() {\n return true;\n }\n measureHeightOfChildren(widthMeasureSpec, startPosition, endPosition, maxHeight, disallowPartialChildPosition) {\n const adapter = this.mAdapter;\n if (adapter == null) {\n return this.mListPadding.top + this.mListPadding.bottom;\n }\n let returnedHeight = this.mListPadding.top + this.mListPadding.bottom;\n const dividerHeight = ((this.mDividerHeight > 0) && this.mDivider != null) ? this.mDividerHeight : 0;\n let prevHeightWithoutPartialChild = 0;\n let i;\n let child;\n endPosition = (endPosition == ListView.NO_POSITION) ? adapter.getCount() - 1 : endPosition;\n const recycleBin = this.mRecycler;\n const recyle = this.recycleOnMeasure();\n const isScrap = this.mIsScrap;\n for (i = startPosition; i <= endPosition; ++i) {\n child = this.obtainView(i, isScrap);\n this.measureScrapChild(child, i, widthMeasureSpec);\n if (i > 0) {\n returnedHeight += dividerHeight;\n }\n if (recyle && recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)) {\n recycleBin.addScrapView(child, -1);\n }\n returnedHeight += child.getMeasuredHeight();\n if (returnedHeight >= maxHeight) {\n return (disallowPartialChildPosition >= 0) &&\n (i > disallowPartialChildPosition) &&\n (prevHeightWithoutPartialChild > 0) &&\n (returnedHeight != maxHeight) ? prevHeightWithoutPartialChild : maxHeight;\n }\n if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) {\n prevHeightWithoutPartialChild = returnedHeight;\n }\n }\n return returnedHeight;\n }\n findMotionRow(y) {\n let childCount = this.getChildCount();\n if (childCount > 0) {\n if (!this.mStackFromBottom) {\n for (let i = 0; i < childCount; i++) {\n let v = this.getChildAt(i);\n if (y <= v.getBottom()) {\n return this.mFirstPosition + i;\n }\n }\n }\n else {\n for (let i = childCount - 1; i >= 0; i--) {\n let v = this.getChildAt(i);\n if (y >= v.getTop()) {\n return this.mFirstPosition + i;\n }\n }\n }\n }\n return ListView.INVALID_POSITION;\n }\n fillSpecific(position, top) {\n let tempIsSelected = position == this.mSelectedPosition;\n let temp = this.makeAndAddView(position, top, true, this.mListPadding.left, tempIsSelected);\n this.mFirstPosition = position;\n let above;\n let below;\n const dividerHeight = this.mDividerHeight;\n if (!this.mStackFromBottom) {\n above = this.fillUp(position - 1, temp.getTop() - dividerHeight);\n this.adjustViewsUpOrDown();\n below = this.fillDown(position + 1, temp.getBottom() + dividerHeight);\n let childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooHigh(childCount);\n }\n }\n else {\n below = this.fillDown(position + 1, temp.getBottom() + dividerHeight);\n this.adjustViewsUpOrDown();\n above = this.fillUp(position - 1, temp.getTop() - dividerHeight);\n let childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooLow(childCount);\n }\n }\n if (tempIsSelected) {\n return temp;\n }\n else if (above != null) {\n return above;\n }\n else {\n return below;\n }\n }\n correctTooHigh(childCount) {\n let lastPosition = this.mFirstPosition + childCount - 1;\n if (lastPosition == this.mItemCount - 1 && childCount > 0) {\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let bottomOffset = end - lastBottom;\n let firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) {\n if (this.mFirstPosition == 0) {\n bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop);\n }\n this.offsetChildrenTopAndBottom(bottomOffset);\n if (this.mFirstPosition > 0) {\n this.fillUp(this.mFirstPosition - 1, firstChild.getTop() - this.mDividerHeight);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n correctTooLow(childCount) {\n if (this.mFirstPosition == 0 && childCount > 0) {\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n const start = this.mListPadding.top;\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let topOffset = firstTop - start;\n let lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n let lastPosition = this.mFirstPosition + childCount - 1;\n if (topOffset > 0) {\n if (lastPosition < this.mItemCount - 1 || lastBottom > end) {\n if (lastPosition == this.mItemCount - 1) {\n topOffset = Math.min(topOffset, lastBottom - end);\n }\n this.offsetChildrenTopAndBottom(-topOffset);\n if (lastPosition < this.mItemCount - 1) {\n this.fillDown(lastPosition + 1, lastChild.getBottom() + this.mDividerHeight);\n this.adjustViewsUpOrDown();\n }\n }\n else if (lastPosition == this.mItemCount - 1) {\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n layoutChildren() {\n const blockLayoutRequests = this.mBlockLayoutRequests;\n if (blockLayoutRequests) {\n return;\n }\n this.mBlockLayoutRequests = true;\n try {\n super.layoutChildren();\n this.invalidate();\n if (this.mAdapter == null) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n const childrenTop = this.mListPadding.top;\n const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n const childCount = this.getChildCount();\n let index = 0;\n let delta = 0;\n let sel;\n let oldSel = null;\n let oldFirst = null;\n let newSel = null;\n switch (this.mLayoutMode) {\n case ListView.LAYOUT_SET_SELECTION:\n index = this.mNextSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n newSel = this.getChildAt(index);\n }\n break;\n case ListView.LAYOUT_FORCE_TOP:\n case ListView.LAYOUT_FORCE_BOTTOM:\n case ListView.LAYOUT_SPECIFIC:\n case ListView.LAYOUT_SYNC:\n break;\n case ListView.LAYOUT_MOVE_SELECTION:\n default:\n index = this.mSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n oldSel = this.getChildAt(index);\n }\n oldFirst = this.getChildAt(0);\n if (this.mNextSelectedPosition >= 0) {\n delta = this.mNextSelectedPosition - this.mSelectedPosition;\n }\n newSel = this.getChildAt(index + delta);\n }\n let dataChanged = this.mDataChanged;\n if (dataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n else if (this.mItemCount != this.mAdapter.getCount()) {\n throw Error(`IllegalStateException(\"The content of the adapter has changed but\n ListView did not receive a notification. Make sure the content of\n your adapter is not modified from a background thread, but only from\n the UI thread. Make sure your adapter calls notifyDataSetChanged()\n when its content changes. [in ListView(${this.getId()},${this.constructor.name})\n with Adapter(${this.mAdapter.constructor.name})]\")`);\n }\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n const accessFocusedChild = null;\n const focusedChild = this.getFocusedChild();\n if (focusedChild != null) {\n focusedChild.setHasTransientState(true);\n }\n const firstPosition = this.mFirstPosition;\n const recycleBin = this.mRecycler;\n if (dataChanged) {\n for (let i = 0; i < childCount; i++) {\n recycleBin.addScrapView(this.getChildAt(i), firstPosition + i);\n }\n }\n else {\n recycleBin.fillActiveViews(childCount, firstPosition);\n }\n this.detachAllViewsFromParent();\n recycleBin.removeSkippedScrap();\n switch (this.mLayoutMode) {\n case ListView.LAYOUT_SET_SELECTION:\n if (newSel != null) {\n sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom);\n }\n else {\n sel = this.fillFromMiddle(childrenTop, childrenBottom);\n }\n break;\n case ListView.LAYOUT_SYNC:\n sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop);\n break;\n case ListView.LAYOUT_FORCE_BOTTOM:\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n this.adjustViewsUpOrDown();\n break;\n case ListView.LAYOUT_FORCE_TOP:\n this.mFirstPosition = 0;\n sel = this.fillFromTop(childrenTop);\n this.adjustViewsUpOrDown();\n break;\n case ListView.LAYOUT_SPECIFIC:\n sel = this.fillSpecific(this.reconcileSelectedPosition(), this.mSpecificTop);\n break;\n case ListView.LAYOUT_MOVE_SELECTION:\n sel = this.moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom);\n break;\n default:\n if (childCount == 0) {\n if (!this.mStackFromBottom) {\n const position = this.lookForSelectablePosition(0, true);\n this.setSelectedPositionInt(position);\n sel = this.fillFromTop(childrenTop);\n }\n else {\n const position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n this.setSelectedPositionInt(position);\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n }\n }\n else {\n if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop());\n }\n else if (this.mFirstPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop());\n }\n else {\n sel = this.fillSpecific(0, childrenTop);\n }\n }\n break;\n }\n recycleBin.scrapActiveViews();\n if (sel != null) {\n const shouldPlaceFocus = this.mItemsCanFocus && this.hasFocus();\n const maintainedFocus = focusedChild != null && focusedChild.hasFocus();\n if (shouldPlaceFocus && !maintainedFocus && !sel.hasFocus()) {\n if (sel.requestFocus()) {\n sel.setSelected(false);\n this.mSelectorRect.setEmpty();\n }\n else {\n const focused = this.getFocusedChild();\n if (focused != null) {\n focused.clearFocus();\n }\n this.positionSelector(ListView.INVALID_POSITION, sel);\n }\n }\n else {\n this.positionSelector(ListView.INVALID_POSITION, sel);\n }\n this.mSelectedTop = sel.getTop();\n }\n else {\n if (this.mTouchMode == ListView.TOUCH_MODE_TAP || this.mTouchMode == ListView.TOUCH_MODE_DONE_WAITING) {\n const child = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (child != null) {\n this.positionSelector(this.mMotionPosition, child);\n }\n }\n else {\n this.mSelectedTop = 0;\n this.mSelectorRect.setEmpty();\n }\n }\n if (accessFocusedChild != null) {\n accessFocusedChild.setHasTransientState(false);\n }\n if (focusedChild != null) {\n focusedChild.setHasTransientState(false);\n }\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n this.mDataChanged = false;\n if (this.mPositionScrollAfterLayout != null) {\n this.post(this.mPositionScrollAfterLayout);\n this.mPositionScrollAfterLayout = null;\n }\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n this.updateScrollIndicators();\n if (this.mItemCount > 0) {\n this.checkSelectionChanged();\n }\n this.invokeOnItemScrollListener();\n }\n finally {\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = false;\n }\n }\n }\n makeAndAddView(position, y, flow, childrenLeft, selected) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.getActiveView(position);\n if (child != null) {\n this.setupChild(child, position, y, flow, childrenLeft, selected, true);\n return child;\n }\n }\n child = this.obtainView(position, this.mIsScrap);\n this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0]);\n return child;\n }\n setupChild(child, position, y, flowDown, childrenLeft, selected, recycled) {\n Trace.traceBegin(Trace.TRACE_TAG_VIEW, \"setupListItem\");\n const isSelected = selected && this.shouldShowSelector();\n const updateChildSelected = isSelected != child.isSelected();\n const mode = this.mTouchMode;\n const isPressed = mode > ListView.TOUCH_MODE_DOWN && mode < ListView.TOUCH_MODE_SCROLL && this.mMotionPosition == position;\n const updateChildPressed = isPressed != child.isPressed();\n const needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n }\n if (!(p instanceof AbsListView.LayoutParams)) {\n const name = p instanceof Function ? p.constructor.name : p + '';\n throw Error('ClassCaseException(' + name + ' can\\'t case to AbsListView.LayoutParams)');\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {\n this.attachViewToParent(child, flowDown ? -1 : 0, p);\n }\n else {\n p.forceAdd = false;\n if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {\n p.recycledHeaderFooter = true;\n }\n this.addViewInLayout(child, flowDown ? -1 : 0, p, true);\n }\n if (updateChildSelected) {\n child.setSelected(isSelected);\n }\n if (updateChildPressed) {\n child.setPressed(isPressed);\n }\n if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n if (needToMeasure) {\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n else {\n this.cleanupLayoutState(child);\n }\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n const childTop = flowDown ? y : y - h;\n if (needToMeasure) {\n const childRight = childrenLeft + w;\n const childBottom = childTop + h;\n child.layout(childrenLeft, childTop, childRight, childBottom);\n }\n else {\n child.offsetLeftAndRight(childrenLeft - child.getLeft());\n child.offsetTopAndBottom(childTop - child.getTop());\n }\n if (this.mCachingStarted && !child.isDrawingCacheEnabled()) {\n child.setDrawingCacheEnabled(true);\n }\n if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) {\n child.jumpDrawablesToCurrentState();\n }\n Trace.traceEnd(Trace.TRACE_TAG_VIEW);\n }\n canAnimate() {\n return super.canAnimate() && this.mItemCount > 0;\n }\n setSelection(position) {\n this.setSelectionFromTop(position, 0);\n }\n setSelectionFromTop(position, y) {\n if (this.mAdapter == null) {\n return;\n }\n if (!this.isInTouchMode()) {\n position = this.lookForSelectablePosition(position, true);\n if (position >= 0) {\n this.setNextSelectedPositionInt(position);\n }\n }\n else {\n this.mResurrectToPosition = position;\n }\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_SPECIFIC;\n this.mSpecificTop = this.mListPadding.top + y;\n if (this.mNeedSync) {\n this.mSyncPosition = position;\n this.mSyncRowId = this.mAdapter.getItemId(position);\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.requestLayout();\n }\n }\n setSelectionInt(position) {\n this.setNextSelectedPositionInt(position);\n let awakeScrollbars = false;\n const selectedPosition = this.mSelectedPosition;\n if (selectedPosition >= 0) {\n if (position == selectedPosition - 1) {\n awakeScrollbars = true;\n }\n else if (position == selectedPosition + 1) {\n awakeScrollbars = true;\n }\n }\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.layoutChildren();\n if (awakeScrollbars) {\n this.awakenScrollBars();\n }\n }\n lookForSelectablePosition(position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return ListView.INVALID_POSITION;\n }\n const count = adapter.getCount();\n if (!this.mAreAllItemsSelectable) {\n if (lookDown) {\n position = Math.max(0, position);\n while (position < count && !adapter.isEnabled(position)) {\n position++;\n }\n }\n else {\n position = Math.min(position, count - 1);\n while (position >= 0 && !adapter.isEnabled(position)) {\n position--;\n }\n }\n }\n if (position < 0 || position >= count) {\n return ListView.INVALID_POSITION;\n }\n return position;\n }\n lookForSelectablePositionAfter(current, position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return ListView.INVALID_POSITION;\n }\n const after = this.lookForSelectablePosition(position, lookDown);\n if (after != ListView.INVALID_POSITION) {\n return after;\n }\n const count = adapter.getCount();\n current = MathUtils.constrain(current, -1, count - 1);\n if (lookDown) {\n position = Math.min(position - 1, count - 1);\n while ((position > current) && !adapter.isEnabled(position)) {\n position--;\n }\n if (position <= current) {\n return ListView.INVALID_POSITION;\n }\n }\n else {\n position = Math.max(0, position + 1);\n while ((position < current) && !adapter.isEnabled(position)) {\n position++;\n }\n if (position >= current) {\n return ListView.INVALID_POSITION;\n }\n }\n return position;\n }\n setSelectionAfterHeaderView() {\n const count = this.mHeaderViewInfos.size();\n if (count > 0) {\n this.mNextSelectedPosition = 0;\n return;\n }\n if (this.mAdapter != null) {\n this.setSelection(count);\n }\n else {\n this.mNextSelectedPosition = count;\n this.mLayoutMode = ListView.LAYOUT_SET_SELECTION;\n }\n }\n dispatchKeyEvent(event) {\n let handled = super.dispatchKeyEvent(event);\n if (!handled) {\n let focused = this.getFocusedChild();\n if (focused != null && event.getAction() == KeyEvent.ACTION_DOWN) {\n handled = this.onKeyDown(event.getKeyCode(), event);\n }\n }\n return handled;\n }\n onKeyDown(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return this.commonKey(keyCode, repeatCount, event);\n }\n onKeyUp(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n commonKey(keyCode, count, event) {\n if (this.mAdapter == null || !this.isAttachedToWindow()) {\n return false;\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n let handled = false;\n let action = event.getAction();\n if (action != KeyEvent.ACTION_UP) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled) {\n while (count-- > 0) {\n if (this.arrowScroll(ListView.FOCUS_UP)) {\n handled = true;\n }\n else {\n break;\n }\n }\n }\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled) {\n while (count-- > 0) {\n if (this.arrowScroll(ListView.FOCUS_DOWN)) {\n handled = true;\n }\n else {\n break;\n }\n }\n }\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (event.hasNoModifiers()) {\n handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (event.hasNoModifiers()) {\n handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) {\n this.keyPressed();\n handled = true;\n }\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP);\n }\n handled = true;\n break;\n case KeyEvent.KEYCODE_PAGE_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_HOME:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_END:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_TAB:\n break;\n }\n }\n if (handled) {\n return true;\n }\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return super.onKeyDown(keyCode, event);\n case KeyEvent.ACTION_UP:\n return super.onKeyUp(keyCode, event);\n default:\n return false;\n }\n }\n pageScroll(direction) {\n let nextPage;\n let down;\n if (direction == ListView.FOCUS_UP) {\n nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount() - 1);\n down = false;\n }\n else if (direction == ListView.FOCUS_DOWN) {\n nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount() - 1);\n down = true;\n }\n else {\n return false;\n }\n if (nextPage >= 0) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, nextPage, down);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_SPECIFIC;\n this.mSpecificTop = this.mPaddingTop + this.getVerticalFadingEdgeLength();\n if (down && (position > (this.mItemCount - this.getChildCount()))) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM;\n }\n if (!down && (position < this.getChildCount())) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_TOP;\n }\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n return true;\n }\n }\n return false;\n }\n fullScroll(direction) {\n let moved = false;\n if (direction == ListView.FOCUS_UP) {\n if (this.mSelectedPosition != 0) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, 0, true);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_TOP;\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n }\n moved = true;\n }\n }\n else if (direction == ListView.FOCUS_DOWN) {\n const lastItem = (this.mItemCount - 1);\n if (this.mSelectedPosition < lastItem) {\n const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, lastItem, false);\n if (position >= 0) {\n this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM;\n this.setSelectionInt(position);\n this.invokeOnItemScrollListener();\n }\n moved = true;\n }\n }\n if (moved && !this.awakenScrollBars()) {\n this.awakenScrollBars();\n this.invalidate();\n }\n return moved;\n }\n handleHorizontalFocusWithinListItem(direction) {\n if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT) {\n throw Error(`new IllegalArgumentException(\"direction must be one of\" + \" {View.FOCUS_LEFT, View.FOCUS_RIGHT}\")`);\n }\n const numChildren = this.getChildCount();\n if (this.mItemsCanFocus && numChildren > 0 && this.mSelectedPosition != ListView.INVALID_POSITION) {\n const selectedView = this.getSelectedView();\n if (selectedView != null && selectedView.hasFocus() && selectedView instanceof ViewGroup) {\n const currentFocus = selectedView.findFocus();\n const nextFocus = FocusFinder.getInstance().findNextFocus(selectedView, currentFocus, direction);\n if (nextFocus != null) {\n currentFocus.getFocusedRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocus, this.mTempRect);\n this.offsetRectIntoDescendantCoords(nextFocus, this.mTempRect);\n if (nextFocus.requestFocus(direction, this.mTempRect)) {\n return true;\n }\n }\n const globalNextFocus = FocusFinder.getInstance().findNextFocus(this.getRootView(), currentFocus, direction);\n if (globalNextFocus != null) {\n return this.isViewAncestorOf(globalNextFocus, this);\n }\n }\n }\n return false;\n }\n arrowScroll(direction) {\n try {\n this.mInLayout = true;\n const handled = this.arrowScrollImpl(direction);\n if (handled) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n }\n return handled;\n }\n finally {\n this.mInLayout = false;\n }\n }\n nextSelectedPositionForDirection(selectedView, selectedPos, direction) {\n let nextSelected;\n if (direction == View.FOCUS_DOWN) {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n if (selectedView != null && selectedView.getBottom() <= listBottom) {\n nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos >= this.mFirstPosition ? selectedPos + 1 : this.mFirstPosition;\n }\n else {\n return ListView.INVALID_POSITION;\n }\n }\n else {\n const listTop = this.mListPadding.top;\n if (selectedView != null && selectedView.getTop() >= listTop) {\n const lastPos = this.mFirstPosition + this.getChildCount() - 1;\n nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos <= lastPos ? selectedPos - 1 : lastPos;\n }\n else {\n return ListView.INVALID_POSITION;\n }\n }\n if (nextSelected < 0 || nextSelected >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n return this.lookForSelectablePosition(nextSelected, direction == View.FOCUS_DOWN);\n }\n arrowScrollImpl(direction) {\n if (this.getChildCount() <= 0) {\n return false;\n }\n let selectedView = this.getSelectedView();\n let selectedPos = this.mSelectedPosition;\n let nextSelectedPosition = this.nextSelectedPositionForDirection(selectedView, selectedPos, direction);\n let amountToScroll = this.amountToScroll(direction, nextSelectedPosition);\n const focusResult = this.mItemsCanFocus ? this.arrowScrollFocused(direction) : null;\n if (focusResult != null) {\n nextSelectedPosition = focusResult.getSelectedPosition();\n amountToScroll = focusResult.getAmountToScroll();\n }\n let needToRedraw = focusResult != null;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n this.handleNewSelectionChange(selectedView, direction, nextSelectedPosition, focusResult != null);\n this.setSelectedPositionInt(nextSelectedPosition);\n this.setNextSelectedPositionInt(nextSelectedPosition);\n selectedView = this.getSelectedView();\n selectedPos = nextSelectedPosition;\n if (this.mItemsCanFocus && focusResult == null) {\n const focused = this.getFocusedChild();\n if (focused != null) {\n focused.clearFocus();\n }\n }\n needToRedraw = true;\n this.checkSelectionChanged();\n }\n if (amountToScroll > 0) {\n this.scrollListItemsBy((direction == View.FOCUS_UP) ? amountToScroll : -amountToScroll);\n needToRedraw = true;\n }\n if (this.mItemsCanFocus && (focusResult == null) && selectedView != null && selectedView.hasFocus()) {\n const focused = selectedView.findFocus();\n if (!this.isViewAncestorOf(focused, this) || this.distanceToView(focused) > 0) {\n focused.clearFocus();\n }\n }\n if (nextSelectedPosition == ListView.INVALID_POSITION && selectedView != null && !this.isViewAncestorOf(selectedView, this)) {\n selectedView = null;\n this.hideSelector();\n this.mResurrectToPosition = ListView.INVALID_POSITION;\n }\n if (needToRedraw) {\n if (selectedView != null) {\n this.positionSelector(selectedPos, selectedView);\n this.mSelectedTop = selectedView.getTop();\n }\n if (!this.awakenScrollBars()) {\n this.invalidate();\n }\n this.invokeOnItemScrollListener();\n return true;\n }\n return false;\n }\n handleNewSelectionChange(selectedView, direction, newSelectedPosition, newFocusAssigned) {\n if (newSelectedPosition == ListView.INVALID_POSITION) {\n throw Error(`new IllegalArgumentException(\"newSelectedPosition needs to be valid\")`);\n }\n let topView;\n let bottomView;\n let topViewIndex, bottomViewIndex;\n let topSelected = false;\n const selectedIndex = this.mSelectedPosition - this.mFirstPosition;\n const nextSelectedIndex = newSelectedPosition - this.mFirstPosition;\n if (direction == View.FOCUS_UP) {\n topViewIndex = nextSelectedIndex;\n bottomViewIndex = selectedIndex;\n topView = this.getChildAt(topViewIndex);\n bottomView = selectedView;\n topSelected = true;\n }\n else {\n topViewIndex = selectedIndex;\n bottomViewIndex = nextSelectedIndex;\n topView = selectedView;\n bottomView = this.getChildAt(bottomViewIndex);\n }\n const numChildren = this.getChildCount();\n if (topView != null) {\n topView.setSelected(!newFocusAssigned && topSelected);\n this.measureAndAdjustDown(topView, topViewIndex, numChildren);\n }\n if (bottomView != null) {\n bottomView.setSelected(!newFocusAssigned && !topSelected);\n this.measureAndAdjustDown(bottomView, bottomViewIndex, numChildren);\n }\n }\n measureAndAdjustDown(child, childIndex, numChildren) {\n let oldHeight = child.getHeight();\n this.measureItem(child);\n if (child.getMeasuredHeight() != oldHeight) {\n this.relayoutMeasuredItem(child);\n const heightDelta = child.getMeasuredHeight() - oldHeight;\n for (let i = childIndex + 1; i < numChildren; i++) {\n this.getChildAt(i).offsetTopAndBottom(heightDelta);\n }\n }\n }\n measureItem(child) {\n let p = child.getLayoutParams();\n if (p == null) {\n p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width);\n let lpHeight = p.height;\n let childHeightSpec;\n if (lpHeight > 0) {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n }\n child.measure(childWidthSpec, childHeightSpec);\n }\n relayoutMeasuredItem(child) {\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n const childLeft = this.mListPadding.left;\n const childRight = childLeft + w;\n const childTop = child.getTop();\n const childBottom = childTop + h;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n getArrowScrollPreviewLength() {\n return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS, this.getVerticalFadingEdgeLength());\n }\n amountToScroll(direction, nextSelectedPosition) {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n const listTop = this.mListPadding.top;\n let numChildren = this.getChildCount();\n if (direction == View.FOCUS_DOWN) {\n let indexToMakeVisible = numChildren - 1;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n while (numChildren <= indexToMakeVisible) {\n this.addViewBelow(this.getChildAt(numChildren - 1), this.mFirstPosition + numChildren - 1);\n numChildren++;\n }\n const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible;\n const viewToMakeVisible = this.getChildAt(indexToMakeVisible);\n let goalBottom = listBottom;\n if (positionToMakeVisible < this.mItemCount - 1) {\n goalBottom -= this.getArrowScrollPreviewLength();\n }\n if (viewToMakeVisible.getBottom() <= goalBottom) {\n return 0;\n }\n if (nextSelectedPosition != ListView.INVALID_POSITION && (goalBottom - viewToMakeVisible.getTop()) >= this.getMaxScrollAmount()) {\n return 0;\n }\n let amountToScroll = (viewToMakeVisible.getBottom() - goalBottom);\n if ((this.mFirstPosition + numChildren) == this.mItemCount) {\n const max = this.getChildAt(numChildren - 1).getBottom() - listBottom;\n amountToScroll = Math.min(amountToScroll, max);\n }\n return Math.min(amountToScroll, this.getMaxScrollAmount());\n }\n else {\n let indexToMakeVisible = 0;\n if (nextSelectedPosition != ListView.INVALID_POSITION) {\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n while (indexToMakeVisible < 0) {\n this.addViewAbove(this.getChildAt(0), this.mFirstPosition);\n this.mFirstPosition--;\n indexToMakeVisible = nextSelectedPosition - this.mFirstPosition;\n }\n const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible;\n const viewToMakeVisible = this.getChildAt(indexToMakeVisible);\n let goalTop = listTop;\n if (positionToMakeVisible > 0) {\n goalTop += this.getArrowScrollPreviewLength();\n }\n if (viewToMakeVisible.getTop() >= goalTop) {\n return 0;\n }\n if (nextSelectedPosition != ListView.INVALID_POSITION && (viewToMakeVisible.getBottom() - goalTop) >= this.getMaxScrollAmount()) {\n return 0;\n }\n let amountToScroll = (goalTop - viewToMakeVisible.getTop());\n if (this.mFirstPosition == 0) {\n const max = listTop - this.getChildAt(0).getTop();\n amountToScroll = Math.min(amountToScroll, max);\n }\n return Math.min(amountToScroll, this.getMaxScrollAmount());\n }\n }\n lookForSelectablePositionOnScreen(direction) {\n const firstPosition = this.mFirstPosition;\n if (direction == View.FOCUS_DOWN) {\n let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition + 1 : firstPosition;\n if (startPos >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n if (startPos < firstPosition) {\n startPos = firstPosition;\n }\n const lastVisiblePos = this.getLastVisiblePosition();\n const adapter = this.getAdapter();\n for (let pos = startPos; pos <= lastVisiblePos; pos++) {\n if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) {\n return pos;\n }\n }\n }\n else {\n let last = firstPosition + this.getChildCount() - 1;\n let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition - 1 : firstPosition + this.getChildCount() - 1;\n if (startPos < 0 || startPos >= this.mAdapter.getCount()) {\n return ListView.INVALID_POSITION;\n }\n if (startPos > last) {\n startPos = last;\n }\n const adapter = this.getAdapter();\n for (let pos = startPos; pos >= firstPosition; pos--) {\n if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) {\n return pos;\n }\n }\n }\n return ListView.INVALID_POSITION;\n }\n arrowScrollFocused(direction) {\n const selectedView = this.getSelectedView();\n let newFocus;\n if (selectedView != null && selectedView.hasFocus()) {\n let oldFocus = selectedView.findFocus();\n newFocus = FocusFinder.getInstance().findNextFocus(this, oldFocus, direction);\n }\n else {\n if (direction == View.FOCUS_DOWN) {\n const topFadingEdgeShowing = (this.mFirstPosition > 0);\n const listTop = this.mListPadding.top + (topFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0);\n const ySearchPoint = (selectedView != null && selectedView.getTop() > listTop) ? selectedView.getTop() : listTop;\n this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint);\n }\n else {\n const bottomFadingEdgeShowing = (this.mFirstPosition + this.getChildCount() - 1) < this.mItemCount;\n const listBottom = this.getHeight() - this.mListPadding.bottom - (bottomFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0);\n const ySearchPoint = (selectedView != null && selectedView.getBottom() < listBottom) ? selectedView.getBottom() : listBottom;\n this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint);\n }\n newFocus = FocusFinder.getInstance().findNextFocusFromRect(this, this.mTempRect, direction);\n }\n if (newFocus != null) {\n const positionOfNewFocus = this.positionOfNewFocus(newFocus);\n if (this.mSelectedPosition != ListView.INVALID_POSITION && positionOfNewFocus != this.mSelectedPosition) {\n const selectablePosition = this.lookForSelectablePositionOnScreen(direction);\n if (selectablePosition != ListView.INVALID_POSITION && ((direction == View.FOCUS_DOWN && selectablePosition < positionOfNewFocus) || (direction == View.FOCUS_UP && selectablePosition > positionOfNewFocus))) {\n return null;\n }\n }\n let focusScroll = this.amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus);\n const maxScrollAmount = this.getMaxScrollAmount();\n if (focusScroll < maxScrollAmount) {\n newFocus.requestFocus(direction);\n this.mArrowScrollFocusResult.populate(positionOfNewFocus, focusScroll);\n return this.mArrowScrollFocusResult;\n }\n else if (this.distanceToView(newFocus) < maxScrollAmount) {\n newFocus.requestFocus(direction);\n this.mArrowScrollFocusResult.populate(positionOfNewFocus, maxScrollAmount);\n return this.mArrowScrollFocusResult;\n }\n }\n return null;\n }\n positionOfNewFocus(newFocus) {\n const numChildren = this.getChildCount();\n for (let i = 0; i < numChildren; i++) {\n const child = this.getChildAt(i);\n if (this.isViewAncestorOf(newFocus, child)) {\n return this.mFirstPosition + i;\n }\n }\n throw Error(`new IllegalArgumentException(\"newFocus is not a child of any of the\" + \" children of the list!\")`);\n }\n isViewAncestorOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && this.isViewAncestorOf(theParent, parent);\n }\n amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus) {\n let amountToScroll = 0;\n newFocus.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(newFocus, this.mTempRect);\n if (direction == View.FOCUS_UP) {\n if (this.mTempRect.top < this.mListPadding.top) {\n amountToScroll = this.mListPadding.top - this.mTempRect.top;\n if (positionOfNewFocus > 0) {\n amountToScroll += this.getArrowScrollPreviewLength();\n }\n }\n }\n else {\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n if (this.mTempRect.bottom > listBottom) {\n amountToScroll = this.mTempRect.bottom - listBottom;\n if (positionOfNewFocus < this.mItemCount - 1) {\n amountToScroll += this.getArrowScrollPreviewLength();\n }\n }\n }\n return amountToScroll;\n }\n distanceToView(descendant) {\n let distance = 0;\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n const listBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n if (this.mTempRect.bottom < this.mListPadding.top) {\n distance = this.mListPadding.top - this.mTempRect.bottom;\n }\n else if (this.mTempRect.top > listBottom) {\n distance = this.mTempRect.top - listBottom;\n }\n return distance;\n }\n scrollListItemsBy(amount) {\n this.offsetChildrenTopAndBottom(amount);\n const listBottom = this.getHeight() - this.mListPadding.bottom;\n const listTop = this.mListPadding.top;\n const recycleBin = this.mRecycler;\n if (amount < 0) {\n let numChildren = this.getChildCount();\n let last = this.getChildAt(numChildren - 1);\n while (last.getBottom() < listBottom) {\n const lastVisiblePosition = this.mFirstPosition + numChildren - 1;\n if (lastVisiblePosition < this.mItemCount - 1) {\n last = this.addViewBelow(last, lastVisiblePosition);\n numChildren++;\n }\n else {\n break;\n }\n }\n if (last.getBottom() < listBottom) {\n this.offsetChildrenTopAndBottom(listBottom - last.getBottom());\n }\n let first = this.getChildAt(0);\n while (first.getBottom() < listTop) {\n let layoutParams = first.getLayoutParams();\n if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {\n recycleBin.addScrapView(first, this.mFirstPosition);\n }\n this.detachViewFromParent(first);\n first = this.getChildAt(0);\n this.mFirstPosition++;\n }\n }\n else {\n let first = this.getChildAt(0);\n while ((first.getTop() > listTop) && (this.mFirstPosition > 0)) {\n first = this.addViewAbove(first, this.mFirstPosition);\n this.mFirstPosition--;\n }\n if (first.getTop() > listTop) {\n this.offsetChildrenTopAndBottom(listTop - first.getTop());\n }\n let lastIndex = this.getChildCount() - 1;\n let last = this.getChildAt(lastIndex);\n while (last.getTop() > listBottom) {\n let layoutParams = last.getLayoutParams();\n if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {\n recycleBin.addScrapView(last, this.mFirstPosition + lastIndex);\n }\n this.detachViewFromParent(last);\n last = this.getChildAt(--lastIndex);\n }\n }\n }\n addViewAbove(theView, position) {\n let abovePosition = position - 1;\n let view = this.obtainView(abovePosition, this.mIsScrap);\n let edgeOfNewChild = theView.getTop() - this.mDividerHeight;\n this.setupChild(view, abovePosition, edgeOfNewChild, false, this.mListPadding.left, false, this.mIsScrap[0]);\n return view;\n }\n addViewBelow(theView, position) {\n let belowPosition = position + 1;\n let view = this.obtainView(belowPosition, this.mIsScrap);\n let edgeOfNewChild = theView.getBottom() + this.mDividerHeight;\n this.setupChild(view, belowPosition, edgeOfNewChild, true, this.mListPadding.left, false, this.mIsScrap[0]);\n return view;\n }\n setItemsCanFocus(itemsCanFocus) {\n this.mItemsCanFocus = itemsCanFocus;\n if (!itemsCanFocus) {\n this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);\n }\n }\n getItemsCanFocus() {\n return this.mItemsCanFocus;\n }\n isOpaque() {\n let retValue = (this.mCachingActive && this.mIsCacheColorOpaque && this.mDividerIsOpaque && this.hasOpaqueScrollbars()) || super.isOpaque();\n if (retValue) {\n const listTop = this.mListPadding != null ? this.mListPadding.top : this.mPaddingTop;\n let first = this.getChildAt(0);\n if (first == null || first.getTop() > listTop) {\n return false;\n }\n const listBottom = this.getHeight() - (this.mListPadding != null ? this.mListPadding.bottom : this.mPaddingBottom);\n let last = this.getChildAt(this.getChildCount() - 1);\n if (last == null || last.getBottom() < listBottom) {\n return false;\n }\n }\n return retValue;\n }\n setCacheColorHint(color) {\n const opaque = (color >>> 24) == 0xFF;\n this.mIsCacheColorOpaque = opaque;\n if (opaque) {\n if (this.mDividerPaint == null) {\n this.mDividerPaint = new Paint();\n }\n this.mDividerPaint.setColor(color);\n }\n super.setCacheColorHint(color);\n }\n drawOverscrollHeader(canvas, drawable, bounds) {\n const height = drawable.getMinimumHeight();\n canvas.save();\n canvas.clipRect(bounds);\n const span = bounds.bottom - bounds.top;\n if (span < height) {\n bounds.top = bounds.bottom - height;\n }\n drawable.setBounds(bounds);\n drawable.draw(canvas);\n canvas.restore();\n }\n drawOverscrollFooter(canvas, drawable, bounds) {\n const height = drawable.getMinimumHeight();\n canvas.save();\n canvas.clipRect(bounds);\n const span = bounds.bottom - bounds.top;\n if (span < height) {\n bounds.bottom = bounds.top + height;\n }\n drawable.setBounds(bounds);\n drawable.draw(canvas);\n canvas.restore();\n }\n dispatchDraw(canvas) {\n if (this.mCachingStarted) {\n this.mCachingActive = true;\n }\n const dividerHeight = this.mDividerHeight;\n const overscrollHeader = this.mOverScrollHeader;\n const overscrollFooter = this.mOverScrollFooter;\n const drawOverscrollHeader = overscrollHeader != null;\n const drawOverscrollFooter = overscrollFooter != null;\n const drawDividers = dividerHeight > 0 && this.mDivider != null;\n if (drawDividers || drawOverscrollHeader || drawOverscrollFooter) {\n const bounds = this.mTempRect;\n bounds.left = this.mPaddingLeft;\n bounds.right = this.mRight - this.mLeft - this.mPaddingRight;\n const count = this.getChildCount();\n const headerCount = this.mHeaderViewInfos.size();\n const itemCount = this.mItemCount;\n const footerLimit = (itemCount - this.mFooterViewInfos.size());\n const headerDividers = this.mHeaderDividersEnabled;\n const footerDividers = this.mFooterDividersEnabled;\n const first = this.mFirstPosition;\n const areAllItemsSelectable = this.mAreAllItemsSelectable;\n const adapter = this.mAdapter;\n const fillForMissingDividers = this.isOpaque() && !super.isOpaque();\n if (fillForMissingDividers && this.mDividerPaint == null && this.mIsCacheColorOpaque) {\n this.mDividerPaint = new Paint();\n this.mDividerPaint.setColor(this.getCacheColorHint());\n }\n const paint = this.mDividerPaint;\n let effectivePaddingTop = 0;\n let effectivePaddingBottom = 0;\n if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) {\n effectivePaddingTop = this.mListPadding.top;\n effectivePaddingBottom = this.mListPadding.bottom;\n }\n const listBottom = this.mBottom - this.mTop - effectivePaddingBottom + this.mScrollY;\n if (!this.mStackFromBottom) {\n let bottom = 0;\n const scrollY = this.mScrollY;\n if (count > 0 && scrollY < 0) {\n if (drawOverscrollHeader) {\n bounds.bottom = 0;\n bounds.top = scrollY;\n this.drawOverscrollHeader(canvas, overscrollHeader, bounds);\n }\n else if (drawDividers) {\n bounds.bottom = 0;\n bounds.top = -dividerHeight;\n this.drawDivider(canvas, bounds, -1);\n }\n }\n for (let i = 0; i < count; i++) {\n const itemIndex = (first + i);\n const isHeader = (itemIndex < headerCount);\n const isFooter = (itemIndex >= footerLimit);\n if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) {\n const child = this.getChildAt(i);\n bottom = child.getBottom();\n const isLastItem = (i == (count - 1));\n if (drawDividers && (bottom < listBottom) && !(drawOverscrollFooter && isLastItem)) {\n const nextIndex = (itemIndex + 1);\n if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isLastItem || adapter.isEnabled(nextIndex) || (headerDividers && (nextIndex < headerCount)) || (footerDividers && (nextIndex >= footerLimit))))) {\n bounds.top = bottom;\n bounds.bottom = bottom + dividerHeight;\n this.drawDivider(canvas, bounds, i);\n }\n else if (fillForMissingDividers) {\n bounds.top = bottom;\n bounds.bottom = bottom + dividerHeight;\n canvas.drawRect(bounds, paint);\n }\n }\n }\n }\n const overFooterBottom = this.mBottom + this.mScrollY;\n if (drawOverscrollFooter && first + count == itemCount && overFooterBottom > bottom) {\n bounds.top = bottom;\n bounds.bottom = overFooterBottom;\n this.drawOverscrollFooter(canvas, overscrollFooter, bounds);\n }\n }\n else {\n let top;\n const scrollY = this.mScrollY;\n if (count > 0 && drawOverscrollHeader) {\n bounds.top = scrollY;\n bounds.bottom = this.getChildAt(0).getTop();\n this.drawOverscrollHeader(canvas, overscrollHeader, bounds);\n }\n const start = drawOverscrollHeader ? 1 : 0;\n for (let i = start; i < count; i++) {\n const itemIndex = (first + i);\n const isHeader = (itemIndex < headerCount);\n const isFooter = (itemIndex >= footerLimit);\n if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) {\n const child = this.getChildAt(i);\n top = child.getTop();\n if (drawDividers && (top > effectivePaddingTop)) {\n const isFirstItem = (i == start);\n const previousIndex = (itemIndex - 1);\n if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isFirstItem || adapter.isEnabled(previousIndex) || (headerDividers && (previousIndex < headerCount)) || (footerDividers && (previousIndex >= footerLimit))))) {\n bounds.top = top - dividerHeight;\n bounds.bottom = top;\n this.drawDivider(canvas, bounds, i - 1);\n }\n else if (fillForMissingDividers) {\n bounds.top = top - dividerHeight;\n bounds.bottom = top;\n canvas.drawRect(bounds, paint);\n }\n }\n }\n }\n if (count > 0 && scrollY > 0) {\n if (drawOverscrollFooter) {\n const absListBottom = this.mBottom;\n bounds.top = absListBottom;\n bounds.bottom = absListBottom + scrollY;\n this.drawOverscrollFooter(canvas, overscrollFooter, bounds);\n }\n else if (drawDividers) {\n bounds.top = listBottom;\n bounds.bottom = listBottom + dividerHeight;\n this.drawDivider(canvas, bounds, -1);\n }\n }\n }\n }\n super.dispatchDraw(canvas);\n }\n drawChild(canvas, child, drawingTime) {\n let more = super.drawChild(canvas, child, drawingTime);\n if (this.mCachingActive && child.mCachingFailed) {\n this.mCachingActive = false;\n }\n return more;\n }\n drawDivider(canvas, bounds, childIndex) {\n const divider = this.mDivider;\n divider.setBounds(bounds);\n divider.draw(canvas);\n }\n getDivider() {\n return this.mDivider;\n }\n setDivider(divider) {\n if (divider != null) {\n this.mDividerHeight = divider.getIntrinsicHeight();\n }\n else {\n this.mDividerHeight = 0;\n }\n this.mDivider = divider;\n this.mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE;\n this.requestLayout();\n this.invalidate();\n }\n getDividerHeight() {\n return this.mDividerHeight;\n }\n setDividerHeight(height) {\n this.mDividerHeight = height;\n this.requestLayout();\n this.invalidate();\n }\n setHeaderDividersEnabled(headerDividersEnabled) {\n this.mHeaderDividersEnabled = headerDividersEnabled;\n this.invalidate();\n }\n areHeaderDividersEnabled() {\n return this.mHeaderDividersEnabled;\n }\n setFooterDividersEnabled(footerDividersEnabled) {\n this.mFooterDividersEnabled = footerDividersEnabled;\n this.invalidate();\n }\n areFooterDividersEnabled() {\n return this.mFooterDividersEnabled;\n }\n setOverscrollHeader(header) {\n this.mOverScrollHeader = header;\n if (this.mScrollY < 0) {\n this.invalidate();\n }\n }\n getOverscrollHeader() {\n return this.mOverScrollHeader;\n }\n setOverscrollFooter(footer) {\n this.mOverScrollFooter = footer;\n this.invalidate();\n }\n getOverscrollFooter() {\n return this.mOverScrollFooter;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n const adapter = this.mAdapter;\n let closetChildIndex = -1;\n let closestChildTop = 0;\n if (adapter != null && gainFocus && previouslyFocusedRect != null) {\n previouslyFocusedRect.offset(this.mScrollX, this.mScrollY);\n if (adapter.getCount() < this.getChildCount() + this.mFirstPosition) {\n this.mLayoutMode = ListView.LAYOUT_NORMAL;\n this.layoutChildren();\n }\n let otherRect = this.mTempRect;\n let minDistance = Integer.MAX_VALUE;\n const childCount = this.getChildCount();\n const firstPosition = this.mFirstPosition;\n for (let i = 0; i < childCount; i++) {\n if (!adapter.isEnabled(firstPosition + i)) {\n continue;\n }\n let other = this.getChildAt(i);\n other.getDrawingRect(otherRect);\n this.offsetDescendantRectToMyCoords(other, otherRect);\n let distance = ListView.getDistance(previouslyFocusedRect, otherRect, direction);\n if (distance < minDistance) {\n minDistance = distance;\n closetChildIndex = i;\n closestChildTop = other.getTop();\n }\n }\n }\n if (closetChildIndex >= 0) {\n this.setSelectionFromTop(closetChildIndex + this.mFirstPosition, closestChildTop);\n }\n else {\n this.requestLayout();\n }\n }\n onFinishInflate() {\n super.onFinishInflate();\n let count = this.getChildCount();\n if (count > 0) {\n for (let i = 0; i < count; ++i) {\n this.addHeaderView(this.getChildAt(i));\n }\n this.removeAllViews();\n }\n }\n findViewTraversal(id) {\n let v;\n v = super.findViewTraversal(id);\n if (v == null) {\n v = this.findViewInHeadersOrFooters(this.mHeaderViewInfos, id);\n if (v != null) {\n return v;\n }\n v = this.findViewInHeadersOrFooters(this.mFooterViewInfos, id);\n if (v != null) {\n return v;\n }\n }\n return v;\n }\n findViewInHeadersOrFooters(where, id) {\n if (where != null) {\n let len = where.size();\n let v;\n for (let i = 0; i < len; i++) {\n v = where.get(i).view;\n if (!v.isRootNamespace()) {\n v = v.findViewById(id);\n if (v != null) {\n return v;\n }\n }\n }\n }\n return null;\n }\n findViewByPredicateTraversal(predicate, childToSkip) {\n let v;\n v = super.findViewByPredicateTraversal(predicate, childToSkip);\n if (v == null) {\n v = this.findViewByPredicateInHeadersOrFooters(this.mHeaderViewInfos, predicate, childToSkip);\n if (v != null) {\n return v;\n }\n v = this.findViewByPredicateInHeadersOrFooters(this.mFooterViewInfos, predicate, childToSkip);\n if (v != null) {\n return v;\n }\n }\n return v;\n }\n findViewByPredicateInHeadersOrFooters(where, predicate, childToSkip) {\n if (where != null) {\n let len = where.size();\n let v;\n for (let i = 0; i < len; i++) {\n v = where.get(i).view;\n if (v != childToSkip && !v.isRootNamespace()) {\n v = v.findViewByPredicate(predicate);\n if (v != null) {\n return v;\n }\n }\n }\n }\n return null;\n }\n getCheckItemIds() {\n if (this.mAdapter != null && this.mAdapter.hasStableIds()) {\n return this.getCheckedItemIds();\n }\n if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null && this.mAdapter != null) {\n const states = this.mCheckStates;\n const count = states.size();\n const ids = androidui.util.ArrayCreator.newNumberArray(count);\n const adapter = this.mAdapter;\n let checkedCount = 0;\n for (let i = 0; i < count; i++) {\n if (states.valueAt(i)) {\n ids[checkedCount++] = adapter.getItemId(states.keyAt(i));\n }\n }\n if (checkedCount == count) {\n return ids;\n }\n else {\n const result = androidui.util.ArrayCreator.newNumberArray(checkedCount);\n System.arraycopy(ids, 0, result, 0, checkedCount);\n return result;\n }\n }\n return androidui.util.ArrayCreator.newNumberArray(0);\n }\n }\n ListView.NO_POSITION = -1;\n ListView.MAX_SCROLL_FACTOR = 0.33;\n ListView.MIN_SCROLL_PREVIEW_PIXELS = 2;\n widget.ListView = ListView;\n (function (ListView) {\n class FixedViewInfo {\n constructor(arg) {\n this._ListView_this = arg;\n }\n }\n ListView.FixedViewInfo = FixedViewInfo;\n class FocusSelector {\n constructor(arg) {\n this.mPosition = 0;\n this.mPositionTop = 0;\n this._ListView_this = arg;\n }\n setup(position, top) {\n this.mPosition = position;\n this.mPositionTop = top;\n return this;\n }\n run() {\n this._ListView_this.setSelectionFromTop(this.mPosition, this.mPositionTop);\n }\n }\n ListView.FocusSelector = FocusSelector;\n class ArrowScrollFocusResult {\n constructor() {\n this.mSelectedPosition = 0;\n this.mAmountToScroll = 0;\n }\n populate(selectedPosition, amountToScroll) {\n this.mSelectedPosition = selectedPosition;\n this.mAmountToScroll = amountToScroll;\n }\n getSelectedPosition() {\n return this.mSelectedPosition;\n }\n getAmountToScroll() {\n return this.mAmountToScroll;\n }\n }\n ListView.ArrowScrollFocusResult = ArrowScrollFocusResult;\n })(ListView = widget.ListView || (widget.ListView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class Scroller extends widget.OverScroller {\n }\n widget.Scroller = Scroller;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var FocusFinder = android.view.FocusFinder;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var FrameLayout = android.widget.FrameLayout;\n var OverScroller = android.widget.OverScroller;\n class ScrollView extends FrameLayout {\n constructor(context, bindElement, defStyle = android.R.attr.scrollViewStyle) {\n super(context, bindElement, defStyle);\n this.mLastScroll = 0;\n this.mTempRect = new Rect();\n this.mLastMotionY = 0;\n this.mIsLayoutDirty = true;\n this.mChildToScrollTo = null;\n this.mIsBeingDragged = false;\n this.mSmoothScrollingEnabled = true;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mOverscrollDistance = 0;\n this.mOverflingDistance = 0;\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.initScrollView();\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n this.setFillViewport(a.getBoolean('fillViewport', false));\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('fillViewport', {\n setter(v, value, attrBinder) {\n v.setFillViewport(attrBinder.parseBoolean(value));\n }, getter(v) {\n return v.isFillViewport();\n }\n });\n }\n shouldDelayChildPressedState() {\n return true;\n }\n getTopFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getVerticalFadingEdgeLength();\n if (this.mScrollY < length) {\n return this.mScrollY / length;\n }\n return 1.0;\n }\n getBottomFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getVerticalFadingEdgeLength();\n const bottomEdge = this.getHeight() - this.mPaddingBottom;\n const span = this.getChildAt(0).getBottom() - this.mScrollY - bottomEdge;\n if (span < length) {\n return span / length;\n }\n return 1.0;\n }\n getMaxScrollAmount() {\n return Math.floor((ScrollView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop)));\n }\n initScrollView() {\n this.mScroller = new OverScroller();\n this.setFocusable(true);\n this.setDescendantFocusability(ScrollView.FOCUS_AFTER_DESCENDANTS);\n this.setWillNotDraw(false);\n const configuration = ViewConfiguration.get(this.mContext);\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this.mOverflingDistance = configuration.getScaledOverflingDistance();\n }\n addView(...args) {\n if (this.getChildCount() > 0) {\n throw new Error(\"ScrollView can host only one direct child\");\n }\n return super.addView(...args);\n }\n canScroll() {\n let child = this.getChildAt(0);\n if (child != null) {\n let childHeight = child.getHeight();\n return this.getHeight() < childHeight + this.mPaddingTop + this.mPaddingBottom;\n }\n return false;\n }\n isFillViewport() {\n return this.mFillViewport;\n }\n setFillViewport(fillViewport) {\n if (fillViewport != this.mFillViewport) {\n this.mFillViewport = fillViewport;\n this.requestLayout();\n }\n }\n isSmoothScrollingEnabled() {\n return this.mSmoothScrollingEnabled;\n }\n setSmoothScrollingEnabled(smoothScrollingEnabled) {\n this.mSmoothScrollingEnabled = smoothScrollingEnabled;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (!this.mFillViewport) {\n return;\n }\n const heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n if (heightMode == View.MeasureSpec.UNSPECIFIED) {\n return;\n }\n if (this.getChildCount() > 0) {\n const child = this.getChildAt(0);\n let height = this.getMeasuredHeight();\n if (child.getMeasuredHeight() < height) {\n const lp = child.getLayoutParams();\n let childWidthMeasureSpec = ScrollView.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width);\n height -= this.mPaddingTop;\n height -= this.mPaddingBottom;\n let childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n this.mTempRect.setEmpty();\n if (!this.canScroll()) {\n if (this.isFocused() && event.getKeyCode() != KeyEvent.KEYCODE_BACK) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_DOWN);\n return nextFocused != null && nextFocused != this && nextFocused.requestFocus(View.FOCUS_DOWN);\n }\n return false;\n }\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_UP:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_UP);\n }\n else {\n handled = this.fullScroll(View.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_DOWN);\n }\n else {\n handled = this.fullScroll(View.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n this.pageScroll(event.isShiftPressed() ? View.FOCUS_UP : View.FOCUS_DOWN);\n break;\n }\n }\n return handled;\n }\n inChild(x, y) {\n if (this.getChildCount() > 0) {\n const scrollY = this.mScrollY;\n const child = this.getChildAt(0);\n return !(y < child.getTop() - scrollY || y >= child.getBottom() - scrollY || x < child.getLeft() || x >= child.getRight());\n }\n return false;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction();\n if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) {\n return true;\n }\n if (this.getScrollY() == 0 && !this.canScrollVertically(1)) {\n return false;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_MOVE: {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == ScrollView.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n if (pointerIndex == -1) {\n Log.e(ScrollView.TAG, \"Invalid pointerId=\" + activePointerId + \" in onInterceptTouchEvent\");\n break;\n }\n const y = Math.floor(ev.getY(pointerIndex));\n const yDiff = Math.abs(y - this.mLastMotionY);\n if (yDiff > this.mTouchSlop) {\n this.mIsBeingDragged = true;\n this.mLastMotionY = y;\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n break;\n }\n case MotionEvent.ACTION_DOWN: {\n const y = Math.floor(ev.getY());\n if (!this.inChild(Math.floor(ev.getX()), Math.floor(y))) {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n break;\n }\n this.mLastMotionY = y;\n this.mActivePointerId = ev.getPointerId(0);\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n this.mIsBeingDragged = !this.mScroller.isFinished();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mIsBeingDragged = false;\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.recycleVelocityTracker();\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN: {\n if (this.getChildCount() == 0) {\n return false;\n }\n if ((this.mIsBeingDragged = !this.mScroller.isFinished())) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.mLastMotionY = Math.floor(ev.getY());\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex == -1) {\n Log.e(ScrollView.TAG, \"Invalid pointerId=\" + this.mActivePointerId + \" in onTouchEvent\");\n break;\n }\n const y = Math.floor(ev.getY(activePointerIndex));\n let deltaY = this.mLastMotionY - y;\n if (!this.mIsBeingDragged && Math.abs(deltaY) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.mIsBeingDragged = true;\n if (deltaY > 0) {\n deltaY -= this.mTouchSlop;\n }\n else {\n deltaY += this.mTouchSlop;\n }\n }\n if (this.mIsBeingDragged) {\n this.mLastMotionY = y;\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n if (this.overScrollBy(0, deltaY, 0, this.mScrollY, 0, range, 0, this.mOverscrollDistance, true)) {\n this.mVelocityTracker.clear();\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId));\n if (this.getChildCount() > 0) {\n const springBack = this.mScrollY < -this.mOverflingDistance || this.mScrollY - this.getScrollRange() > this.mOverflingDistance;\n if (!springBack && (Math.abs(initialVelocity) > this.mMinimumVelocity)) {\n this.fling(-initialVelocity);\n }\n else {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.endDrag();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged && this.getChildCount() > 0) {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) {\n this.postInvalidateOnAnimation();\n }\n this.mActivePointerId = ScrollView.INVALID_POINTER;\n this.endDrag();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN: {\n const index = ev.getActionIndex();\n this.mLastMotionY = Math.floor(ev.getY(index));\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionY = Math.floor(ev.getY(ev.findPointerIndex(this.mActivePointerId)));\n break;\n }\n return true;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionY = Math.floor(ev.getY(newPointerIndex));\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n onGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL: {\n if (!this.mIsBeingDragged) {\n const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (vscroll != 0) {\n const delta = Math.floor((vscroll * this.getVerticalScrollFactor()));\n const range = this.getScrollRange();\n let oldScrollY = this.mScrollY;\n let newScrollY = oldScrollY - delta;\n if (newScrollY < 0) {\n newScrollY = 0;\n }\n else if (newScrollY > range) {\n newScrollY = range;\n }\n if (newScrollY != oldScrollY) {\n super.scrollTo(this.mScrollX, newScrollY);\n return true;\n }\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (!this.mScroller.isFinished()) {\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n this.mScrollX = scrollX;\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (clampedY) {\n this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange());\n }\n }\n else {\n super.scrollTo(scrollX, scrollY);\n }\n this.awakenScrollBars();\n }\n getScrollRange() {\n let scrollRange = 0;\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n scrollRange = Math.max(0, child.getHeight() - (this.getHeight() - this.mPaddingBottom - this.mPaddingTop));\n }\n return scrollRange;\n }\n findFocusableViewInBounds(topFocus, top, bottom) {\n let focusables = this.getFocusables(View.FOCUS_FORWARD);\n let focusCandidate = null;\n let foundFullyContainedFocusable = false;\n let count = focusables.size();\n for (let i = 0; i < count; i++) {\n let view = focusables.get(i);\n let viewTop = view.getTop();\n let viewBottom = view.getBottom();\n if (top < viewBottom && viewTop < bottom) {\n const viewIsFullyContained = (top < viewTop) && (viewBottom < bottom);\n if (focusCandidate == null) {\n focusCandidate = view;\n foundFullyContainedFocusable = viewIsFullyContained;\n }\n else {\n const viewIsCloserToBoundary = (topFocus && viewTop < focusCandidate.getTop()) || (!topFocus && viewBottom > focusCandidate.getBottom());\n if (foundFullyContainedFocusable) {\n if (viewIsFullyContained && viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n else {\n if (viewIsFullyContained) {\n focusCandidate = view;\n foundFullyContainedFocusable = true;\n }\n else if (viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n }\n }\n }\n return focusCandidate;\n }\n pageScroll(direction) {\n let down = direction == View.FOCUS_DOWN;\n let height = this.getHeight();\n if (down) {\n this.mTempRect.top = this.getScrollY() + height;\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(count - 1);\n if (this.mTempRect.top + height > view.getBottom()) {\n this.mTempRect.top = view.getBottom() - height;\n }\n }\n }\n else {\n this.mTempRect.top = this.getScrollY() - height;\n if (this.mTempRect.top < 0) {\n this.mTempRect.top = 0;\n }\n }\n this.mTempRect.bottom = this.mTempRect.top + height;\n return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom);\n }\n fullScroll(direction) {\n let down = direction == View.FOCUS_DOWN;\n let height = this.getHeight();\n this.mTempRect.top = 0;\n this.mTempRect.bottom = height;\n if (down) {\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(count - 1);\n this.mTempRect.bottom = view.getBottom() + this.mPaddingBottom;\n this.mTempRect.top = this.mTempRect.bottom - height;\n }\n }\n return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom);\n }\n scrollAndFocus(direction, top, bottom) {\n let handled = true;\n let height = this.getHeight();\n let containerTop = this.getScrollY();\n let containerBottom = containerTop + height;\n let up = direction == View.FOCUS_UP;\n let newFocused = this.findFocusableViewInBounds(up, top, bottom);\n if (newFocused == null) {\n newFocused = this;\n }\n if (top >= containerTop && bottom <= containerBottom) {\n handled = false;\n }\n else {\n let delta = up ? (top - containerTop) : (bottom - containerBottom);\n this.doScrollY(delta);\n }\n if (newFocused != this.findFocus())\n newFocused.requestFocus(direction);\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n const maxJump = this.getMaxScrollAmount();\n if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump, this.getHeight())) {\n nextFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollY(scrollDelta);\n nextFocused.requestFocus(direction);\n }\n else {\n let scrollDelta = maxJump;\n if (direction == View.FOCUS_UP && this.getScrollY() < scrollDelta) {\n scrollDelta = this.getScrollY();\n }\n else if (direction == View.FOCUS_DOWN) {\n if (this.getChildCount() > 0) {\n let daBottom = this.getChildAt(0).getBottom();\n let screenBottom = this.getScrollY() + this.getHeight() - this.mPaddingBottom;\n if (daBottom - screenBottom < maxJump) {\n scrollDelta = daBottom - screenBottom;\n }\n }\n }\n if (scrollDelta == 0) {\n return false;\n }\n this.doScrollY(direction == View.FOCUS_DOWN ? scrollDelta : -scrollDelta);\n }\n if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) {\n const descendantFocusability = this.getDescendantFocusability();\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.requestFocus();\n this.setDescendantFocusability(descendantFocusability);\n }\n return true;\n }\n isOffScreen(descendant) {\n return !this.isWithinDeltaOfScreen(descendant, 0, this.getHeight());\n }\n isWithinDeltaOfScreen(descendant, delta, height) {\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n return (this.mTempRect.bottom + delta) >= this.getScrollY() && (this.mTempRect.top - delta) <= (this.getScrollY() + height);\n }\n doScrollY(delta) {\n if (delta != 0) {\n if (this.mSmoothScrollingEnabled) {\n this.smoothScrollBy(0, delta);\n }\n else {\n this.scrollBy(0, delta);\n }\n }\n }\n smoothScrollBy(dx, dy) {\n if (this.getChildCount() == 0) {\n return;\n }\n let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll;\n if (duration > ScrollView.ANIMATED_SCROLL_GAP) {\n const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n const bottom = this.getChildAt(0).getHeight();\n const maxY = Math.max(0, bottom - height);\n const scrollY = this.mScrollY;\n dy = Math.max(0, Math.min(scrollY + dy, maxY)) - scrollY;\n this.mScroller.startScroll(this.mScrollX, scrollY, 0, dy);\n this.postInvalidateOnAnimation();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = AnimationUtils.currentAnimationTimeMillis();\n }\n smoothScrollTo(x, y) {\n this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY);\n }\n computeVerticalScrollRange() {\n const count = this.getChildCount();\n const contentHeight = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n if (count == 0) {\n return contentHeight;\n }\n let scrollRange = this.getChildAt(0).getBottom();\n const scrollY = this.mScrollY;\n const overscrollBottom = Math.max(0, scrollRange - contentHeight);\n if (scrollY < 0) {\n scrollRange -= scrollY;\n }\n else if (scrollY > overscrollBottom) {\n scrollRange += scrollY - overscrollBottom;\n }\n return scrollRange;\n }\n computeVerticalScrollOffset() {\n return Math.max(0, super.computeVerticalScrollOffset());\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width);\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n const lp = child.getLayoutParams();\n const childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin + widthUsed, lp.width);\n const childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(lp.topMargin + lp.bottomMargin, View.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n computeScroll() {\n if (this.mScroller.computeScrollOffset()) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n this.overScrollBy(x - oldX, y - oldY, oldX, oldY, 0, range, 0, this.getHeight() / 2, false);\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n }\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n else {\n }\n }\n scrollToChild(child) {\n child.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(child, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n if (scrollDelta != 0) {\n this.scrollBy(0, scrollDelta);\n }\n }\n scrollToChildRect(rect, immediate) {\n const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect);\n const scroll = delta != 0;\n if (scroll) {\n if (immediate) {\n this.scrollBy(0, delta);\n }\n else {\n this.smoothScrollBy(0, delta);\n }\n }\n return scroll;\n }\n computeScrollDeltaToGetChildRectOnScreen(rect) {\n if (this.getChildCount() == 0)\n return 0;\n let height = this.getHeight();\n let screenTop = this.getScrollY();\n let screenBottom = screenTop + height;\n let fadingEdge = this.getVerticalFadingEdgeLength();\n if (rect.top > 0) {\n screenTop += fadingEdge;\n }\n if (rect.bottom < this.getChildAt(0).getHeight()) {\n screenBottom -= fadingEdge;\n }\n let scrollYDelta = 0;\n if (rect.bottom > screenBottom && rect.top > screenTop) {\n if (rect.height() > height) {\n scrollYDelta += (rect.top - screenTop);\n }\n else {\n scrollYDelta += (rect.bottom - screenBottom);\n }\n let bottom = this.getChildAt(0).getBottom();\n let distanceToBottom = bottom - screenBottom;\n scrollYDelta = Math.min(scrollYDelta, distanceToBottom);\n }\n else if (rect.top < screenTop && rect.bottom < screenBottom) {\n if (rect.height() > height) {\n scrollYDelta -= (screenBottom - rect.bottom);\n }\n else {\n scrollYDelta -= (screenTop - rect.top);\n }\n scrollYDelta = Math.max(scrollYDelta, -this.getScrollY());\n }\n return scrollYDelta;\n }\n requestChildFocus(child, focused) {\n if (!this.mIsLayoutDirty) {\n this.scrollToChild(focused);\n }\n else {\n this.mChildToScrollTo = focused;\n }\n super.requestChildFocus(child, focused);\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n if (direction == View.FOCUS_FORWARD) {\n direction = View.FOCUS_DOWN;\n }\n else if (direction == View.FOCUS_BACKWARD) {\n direction = View.FOCUS_UP;\n }\n const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction);\n if (nextFocus == null) {\n return false;\n }\n if (this.isOffScreen(nextFocus)) {\n return false;\n }\n return nextFocus.requestFocus(direction, previouslyFocusedRect);\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY());\n return this.scrollToChildRect(rectangle, immediate);\n }\n requestLayout() {\n this.mIsLayoutDirty = true;\n super.requestLayout();\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mIsLayoutDirty = false;\n if (this.mChildToScrollTo != null && ScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) {\n this.scrollToChild(this.mChildToScrollTo);\n }\n this.mChildToScrollTo = null;\n if (!this.isLaidOut()) {\n const childHeight = (this.getChildCount() > 0) ? this.getChildAt(0).getMeasuredHeight() : 0;\n const scrollRange = Math.max(0, childHeight - (b - t - this.mPaddingBottom - this.mPaddingTop));\n if (this.mScrollY > scrollRange) {\n this.mScrollY = scrollRange;\n }\n else if (this.mScrollY < 0) {\n this.mScrollY = 0;\n }\n }\n this.scrollTo(this.mScrollX, this.mScrollY);\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n let currentFocused = this.findFocus();\n if (null == currentFocused || this == currentFocused)\n return;\n if (this.isWithinDeltaOfScreen(currentFocused, 0, oldh)) {\n currentFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollY(scrollDelta);\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && ScrollView.isViewDescendantOf(theParent, parent);\n }\n fling(velocityY) {\n if (this.getChildCount() > 0) {\n let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop;\n let bottom = this.getChildAt(0).getHeight();\n this.mScroller.fling(this.mScrollX, this.mScrollY, 0, velocityY, 0, 0, 0, Math.max(0, bottom - height), 0, this.mOverflingDistance);\n this.postInvalidateOnAnimation();\n }\n }\n endDrag() {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n scrollTo(x, y) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n x = ScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth());\n y = ScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight());\n if (x != this.mScrollX || y != this.mScrollY) {\n super.scrollTo(x, y);\n }\n }\n }\n draw(canvas) {\n super.draw(canvas);\n }\n static clamp(n, my, child) {\n if (my >= child || n < 0) {\n return 0;\n }\n if ((my + n) > child) {\n return child - my;\n }\n return n;\n }\n }\n ScrollView.ANIMATED_SCROLL_GAP = 250;\n ScrollView.MAX_SCROLL_FACTOR = 0.5;\n ScrollView.TAG = \"ScrollView\";\n ScrollView.INVALID_POINTER = -1;\n widget.ScrollView = ScrollView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var util;\n (function (util) {\n class ArrayMap {\n constructor(capacity) {\n this.map = new Map();\n }\n clear() {\n this.map.clear();\n }\n erase() {\n this.map.clear();\n }\n ensureCapacity(minimumCapacity) {\n }\n containsKey(key) {\n return this.map.has(key);\n }\n indexOfValue(value) {\n return [...this.map.values()].indexOf(value);\n }\n containsValue(value) {\n return this.indexOfValue(value) >= 0;\n }\n get(key) {\n return this.map.get(key);\n }\n keyAt(index) {\n return [...this.map.keys()][index];\n }\n valueAt(index) {\n return [...this.map.values()][index];\n }\n setValueAt(index, value) {\n let key = this.keyAt(index);\n if (key == null)\n throw Error('index error');\n let oldV = this.get(key);\n this.map.set(key, value);\n return oldV;\n }\n isEmpty() {\n return this.map.size <= 0;\n }\n put(key, value) {\n let oldV = this.get(key);\n this.map.set(key, value);\n return oldV;\n }\n append(key, value) {\n this.map.set(key, value);\n }\n remove(key) {\n let oldV = this.get(key);\n this.map.delete(key);\n return oldV;\n }\n removeAt(index) {\n let key = this.keyAt(index);\n if (key == null)\n throw Error('index error');\n let oldV = this.get(key);\n this.map.delete(key);\n return oldV;\n }\n keySet() {\n return new Set(this.map.keys());\n }\n size() {\n return this.map.size;\n }\n }\n util.ArrayMap = ArrayMap;\n })(util = android.util || (android.util = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n class ArrayDeque extends util.ArrayList {\n addFirst(e) {\n this.add(0, e);\n }\n addLast(e) {\n this.add(e);\n }\n offerFirst(e) {\n this.addFirst(e);\n return true;\n }\n offerLast(e) {\n this.addLast(e);\n return true;\n }\n removeFirst() {\n let x = this.pollFirst();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n removeLast() {\n let x = this.pollLast();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n pollFirst() {\n return this.array.shift();\n }\n pollLast() {\n return this.array.splice(this.array.length - 1)[0];\n }\n getFirst() {\n let x = this.peekFirst();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n getLast() {\n let x = this.peekLast();\n if (x == null)\n throw Error('NoSuchElementException');\n return x;\n }\n peekFirst() {\n return this.array[0];\n }\n peekLast() {\n return this.array[this.array.length - 1];\n }\n removeFirstOccurrence(o) {\n if (o == null)\n return false;\n for (let i = 0, count = this.size(); i < count; i++) {\n if (this.array[i] == o) {\n this.delete(i);\n return true;\n }\n }\n return false;\n }\n removeLastOccurrence(o) {\n if (o == null)\n return false;\n for (let i = this.size(); i >= 0; i--) {\n if (this.array[i] == o) {\n this.delete(i);\n return true;\n }\n }\n return false;\n }\n offer(e) {\n return this.offerLast(e);\n }\n remove() {\n return this.removeFirst();\n }\n poll() {\n return this.pollFirst();\n }\n element() {\n return this.getFirst();\n }\n peek() {\n return this.peekFirst();\n }\n push(e) {\n this.addFirst(e);\n }\n pop() {\n return this.removeFirst();\n }\n delete(i) {\n if (i >= this.array.length)\n return false;\n this.array.splice(i, 1);\n return true;\n }\n }\n util.ArrayDeque = ArrayDeque;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var FocusFinder = android.view.FocusFinder;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var AnimationUtils = android.view.animation.AnimationUtils;\n var FrameLayout = android.widget.FrameLayout;\n var OverScroller = android.widget.OverScroller;\n var ScrollView = android.widget.ScrollView;\n class HorizontalScrollView extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mLastScroll = 0;\n this.mTempRect = new Rect();\n this.mLastMotionX = 0;\n this.mIsLayoutDirty = true;\n this.mChildToScrollTo = null;\n this.mIsBeingDragged = false;\n this.mSmoothScrollingEnabled = true;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mOverscrollDistance = 0;\n this._mOverflingDistance = 0;\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.initScrollView();\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n this.setFillViewport(a.getBoolean('fillViewport', false));\n a.recycle();\n }\n get mOverflingDistance() {\n if (this.mScrollX < -this._mOverflingDistance)\n return -this.mScrollX;\n let overDistance = this.mScrollX - this.getScrollRange();\n if (overDistance > this._mOverflingDistance)\n return overDistance;\n return this._mOverflingDistance;\n }\n set mOverflingDistance(value) {\n this._mOverflingDistance = value;\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('', {\n setter(v, value, attrBinder) {\n v.setFillViewport(attrBinder.parseBoolean(value));\n }, getter(v) {\n return v.isFillViewport();\n }\n });\n }\n getLeftFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getHorizontalFadingEdgeLength();\n if (this.mScrollX < length) {\n return this.mScrollX / length;\n }\n return 1.0;\n }\n getRightFadingEdgeStrength() {\n if (this.getChildCount() == 0) {\n return 0.0;\n }\n const length = this.getHorizontalFadingEdgeLength();\n const rightEdge = this.getWidth() - this.mPaddingRight;\n const span = this.getChildAt(0).getRight() - this.mScrollX - rightEdge;\n if (span < length) {\n return span / length;\n }\n return 1.0;\n }\n getMaxScrollAmount() {\n return Math.floor((HorizontalScrollView.MAX_SCROLL_FACTOR * (this.mRight - this.mLeft)));\n }\n initScrollView() {\n this.mScroller = new OverScroller();\n this.setFocusable(true);\n this.setDescendantFocusability(HorizontalScrollView.FOCUS_AFTER_DESCENDANTS);\n this.setWillNotDraw(false);\n const configuration = ViewConfiguration.get();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();\n this.mOverscrollDistance = configuration.getScaledOverscrollDistance();\n this._mOverflingDistance = configuration.getScaledOverflingDistance();\n this.initScrollCache();\n this.setHorizontalScrollBarEnabled(true);\n }\n addView(...args) {\n if (this.getChildCount() > 0) {\n throw new Error(\"ScrollView can host only one direct child\");\n }\n return super.addView(...args);\n }\n canScroll() {\n let child = this.getChildAt(0);\n if (child != null) {\n let childWidth = child.getWidth();\n return this.getWidth() < childWidth + this.mPaddingLeft + this.mPaddingRight;\n }\n return false;\n }\n isFillViewport() {\n return this.mFillViewport;\n }\n setFillViewport(fillViewport) {\n if (fillViewport != this.mFillViewport) {\n this.mFillViewport = fillViewport;\n this.requestLayout();\n }\n }\n isSmoothScrollingEnabled() {\n return this.mSmoothScrollingEnabled;\n }\n setSmoothScrollingEnabled(smoothScrollingEnabled) {\n this.mSmoothScrollingEnabled = smoothScrollingEnabled;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (!this.mFillViewport) {\n return;\n }\n const widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n if (widthMode == View.MeasureSpec.UNSPECIFIED) {\n return;\n }\n if (this.getChildCount() > 0) {\n const child = this.getChildAt(0);\n let width = this.getMeasuredWidth();\n if (child.getMeasuredWidth() < width) {\n const lp = child.getLayoutParams();\n let childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n width -= this.mPaddingLeft;\n width -= this.mPaddingRight;\n let childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n }\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n this.mTempRect.setEmpty();\n if (!this.canScroll()) {\n if (this.isFocused()) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_RIGHT);\n return nextFocused != null && nextFocused != this && nextFocused.requestFocus(View.FOCUS_RIGHT);\n }\n return false;\n }\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_LEFT);\n }\n else {\n handled = this.fullScroll(View.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (!event.isAltPressed()) {\n handled = this.arrowScroll(View.FOCUS_RIGHT);\n }\n else {\n handled = this.fullScroll(View.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n this.pageScroll(event.isShiftPressed() ? View.FOCUS_LEFT : View.FOCUS_RIGHT);\n break;\n }\n }\n return handled;\n }\n inChild(x, y) {\n if (this.getChildCount() > 0) {\n const scrollX = this.mScrollX;\n const child = this.getChildAt(0);\n return !(y < child.getTop() || y >= child.getBottom() || x < child.getLeft() - scrollX || x >= child.getRight() - scrollX);\n }\n return false;\n }\n initOrResetVelocityTracker() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n }\n initVelocityTrackerIfNotExists() {\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n }\n recycleVelocityTracker() {\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (disallowIntercept) {\n this.recycleVelocityTracker();\n }\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction();\n if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) {\n return true;\n }\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_MOVE:\n {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == HorizontalScrollView.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n if (pointerIndex == -1) {\n Log.e(HorizontalScrollView.TAG, \"Invalid pointerId=\" + activePointerId + \" in onInterceptTouchEvent\");\n break;\n }\n const x = Math.floor(ev.getX(pointerIndex));\n const xDiff = Math.floor(Math.abs(x - this.mLastMotionX));\n if (xDiff > this.mTouchSlop) {\n this.mIsBeingDragged = true;\n this.mLastMotionX = x;\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n if (this.mParent != null)\n this.mParent.requestDisallowInterceptTouchEvent(true);\n }\n break;\n }\n case MotionEvent.ACTION_DOWN:\n {\n const x = Math.floor(ev.getX());\n if (!this.inChild(Math.floor(x), Math.floor(ev.getY()))) {\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n break;\n }\n this.mLastMotionX = x;\n this.mActivePointerId = ev.getPointerId(0);\n this.initOrResetVelocityTracker();\n this.mVelocityTracker.addMovement(ev);\n this.mIsBeingDragged = !this.mScroller.isFinished();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mIsBeingDragged = false;\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const index = ev.getActionIndex();\n this.mLastMotionX = Math.floor(ev.getX(index));\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionX = Math.floor(ev.getX(ev.findPointerIndex(this.mActivePointerId)));\n break;\n }\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n this.initVelocityTrackerIfNotExists();\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n if (this.getChildCount() == 0) {\n return false;\n }\n if ((this.mIsBeingDragged = !this.mScroller.isFinished())) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.mLastMotionX = Math.floor(ev.getX());\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex == -1) {\n Log.e(HorizontalScrollView.TAG, \"Invalid pointerId=\" + this.mActivePointerId + \" in onTouchEvent\");\n break;\n }\n const x = Math.floor(ev.getX(activePointerIndex));\n let deltaX = this.mLastMotionX - x;\n if (!this.mIsBeingDragged && Math.abs(deltaX) > this.mTouchSlop) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n this.mIsBeingDragged = true;\n if (deltaX > 0) {\n deltaX -= this.mTouchSlop;\n }\n else {\n deltaX += this.mTouchSlop;\n }\n }\n if (this.mIsBeingDragged) {\n this.mLastMotionX = x;\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == HorizontalScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n if (this.overScrollBy(deltaX, 0, this.mScrollX, 0, range, 0, this.mOverscrollDistance, 0, true)) {\n this.mVelocityTracker.clear();\n }\n if (canOverscroll) {\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));\n if (this.getChildCount() > 0) {\n let isOverDrag = this.mScrollX < 0 || this.mScrollX > this.getScrollRange();\n if (!isOverDrag && (Math.abs(initialVelocity) > this.mMinimumVelocity)) {\n this.fling(-initialVelocity);\n }\n else {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged && this.getChildCount() > 0) {\n if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0)) {\n this.postInvalidateOnAnimation();\n }\n this.mActivePointerId = HorizontalScrollView.INVALID_POINTER;\n this.mIsBeingDragged = false;\n this.recycleVelocityTracker();\n }\n break;\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n return true;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionX = Math.floor(ev.getX(newPointerIndex));\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n onGenericMotionEvent(event) {\n if (event.isPointerEvent()) {\n switch (event.getAction()) {\n case MotionEvent.ACTION_SCROLL:\n {\n if (!this.mIsBeingDragged) {\n let hscroll;\n hscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);\n if (hscroll != 0) {\n const delta = Math.floor((hscroll * this.getHorizontalScrollFactor()));\n const range = this.getScrollRange();\n let oldScrollX = this.mScrollX;\n let newScrollX = oldScrollX + delta;\n if (newScrollX < 0) {\n newScrollX = 0;\n }\n else if (newScrollX > range) {\n newScrollX = range;\n }\n if (newScrollX != oldScrollX) {\n super.scrollTo(newScrollX, this.mScrollY);\n return true;\n }\n }\n }\n }\n }\n }\n return super.onGenericMotionEvent(event);\n }\n shouldDelayChildPressedState() {\n return true;\n }\n onOverScrolled(scrollX, scrollY, clampedX, clampedY) {\n if (!this.mScroller.isFinished()) {\n const oldX = this.mScrollX;\n const oldY = this.mScrollY;\n this.mScrollX = scrollX;\n this.mScrollY = scrollY;\n this.invalidateParentIfNeeded();\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (clampedX) {\n this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, this.getScrollRange(), 0, 0);\n }\n }\n else {\n super.scrollTo(scrollX, scrollY);\n }\n this.awakenScrollBars();\n }\n getScrollRange() {\n let scrollRange = 0;\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n scrollRange = Math.max(0, child.getWidth() - (this.getWidth() - this.mPaddingLeft - this.mPaddingRight));\n }\n return scrollRange;\n }\n findFocusableViewInMyBounds(leftFocus, left, preferredFocusable) {\n const fadingEdgeLength = this.getHorizontalFadingEdgeLength() / 2;\n const leftWithoutFadingEdge = left + fadingEdgeLength;\n const rightWithoutFadingEdge = left + this.getWidth() - fadingEdgeLength;\n if ((preferredFocusable != null) && (preferredFocusable.getLeft() < rightWithoutFadingEdge) && (preferredFocusable.getRight() > leftWithoutFadingEdge)) {\n return preferredFocusable;\n }\n return this.findFocusableViewInBounds(leftFocus, leftWithoutFadingEdge, rightWithoutFadingEdge);\n }\n findFocusableViewInBounds(leftFocus, left, right) {\n let focusables = this.getFocusables(View.FOCUS_FORWARD);\n let focusCandidate = null;\n let foundFullyContainedFocusable = false;\n let count = focusables.size();\n for (let i = 0; i < count; i++) {\n let view = focusables.get(i);\n let viewLeft = view.getLeft();\n let viewRight = view.getRight();\n if (left < viewRight && viewLeft < right) {\n const viewIsFullyContained = (left < viewLeft) && (viewRight < right);\n if (focusCandidate == null) {\n focusCandidate = view;\n foundFullyContainedFocusable = viewIsFullyContained;\n }\n else {\n const viewIsCloserToBoundary = (leftFocus && viewLeft < focusCandidate.getLeft()) || (!leftFocus && viewRight > focusCandidate.getRight());\n if (foundFullyContainedFocusable) {\n if (viewIsFullyContained && viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n else {\n if (viewIsFullyContained) {\n focusCandidate = view;\n foundFullyContainedFocusable = true;\n }\n else if (viewIsCloserToBoundary) {\n focusCandidate = view;\n }\n }\n }\n }\n }\n return focusCandidate;\n }\n pageScroll(direction) {\n let right = direction == View.FOCUS_RIGHT;\n let width = this.getWidth();\n if (right) {\n this.mTempRect.left = this.getScrollX() + width;\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(0);\n if (this.mTempRect.left + width > view.getRight()) {\n this.mTempRect.left = view.getRight() - width;\n }\n }\n }\n else {\n this.mTempRect.left = this.getScrollX() - width;\n if (this.mTempRect.left < 0) {\n this.mTempRect.left = 0;\n }\n }\n this.mTempRect.right = this.mTempRect.left + width;\n return this.scrollAndFocus(direction, this.mTempRect.left, this.mTempRect.right);\n }\n fullScroll(direction) {\n let right = direction == View.FOCUS_RIGHT;\n let width = this.getWidth();\n this.mTempRect.left = 0;\n this.mTempRect.right = width;\n if (right) {\n let count = this.getChildCount();\n if (count > 0) {\n let view = this.getChildAt(0);\n this.mTempRect.right = view.getRight();\n this.mTempRect.left = this.mTempRect.right - width;\n }\n }\n return this.scrollAndFocus(direction, this.mTempRect.left, this.mTempRect.right);\n }\n scrollAndFocus(direction, left, right) {\n let handled = true;\n let width = this.getWidth();\n let containerLeft = this.getScrollX();\n let containerRight = containerLeft + width;\n let goLeft = direction == View.FOCUS_LEFT;\n let newFocused = this.findFocusableViewInBounds(goLeft, left, right);\n if (newFocused == null) {\n newFocused = this;\n }\n if (left >= containerLeft && right <= containerRight) {\n handled = false;\n }\n else {\n let delta = goLeft ? (left - containerLeft) : (right - containerRight);\n this.doScrollX(delta);\n }\n if (newFocused != this.findFocus())\n newFocused.requestFocus(direction);\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this)\n currentFocused = null;\n let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n const maxJump = this.getMaxScrollAmount();\n if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump)) {\n nextFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollX(scrollDelta);\n nextFocused.requestFocus(direction);\n }\n else {\n let scrollDelta = maxJump;\n if (direction == View.FOCUS_LEFT && this.getScrollX() < scrollDelta) {\n scrollDelta = this.getScrollX();\n }\n else if (direction == View.FOCUS_RIGHT && this.getChildCount() > 0) {\n let daRight = this.getChildAt(0).getRight();\n let screenRight = this.getScrollX() + this.getWidth();\n if (daRight - screenRight < maxJump) {\n scrollDelta = daRight - screenRight;\n }\n }\n if (scrollDelta == 0) {\n return false;\n }\n this.doScrollX(direction == View.FOCUS_RIGHT ? scrollDelta : -scrollDelta);\n }\n if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) {\n const descendantFocusability = this.getDescendantFocusability();\n this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);\n this.requestFocus();\n this.setDescendantFocusability(descendantFocusability);\n }\n return true;\n }\n isOffScreen(descendant) {\n return !this.isWithinDeltaOfScreen(descendant, 0);\n }\n isWithinDeltaOfScreen(descendant, delta) {\n descendant.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(descendant, this.mTempRect);\n return (this.mTempRect.right + delta) >= this.getScrollX() && (this.mTempRect.left - delta) <= (this.getScrollX() + this.getWidth());\n }\n doScrollX(delta) {\n if (delta != 0) {\n if (this.mSmoothScrollingEnabled) {\n this.smoothScrollBy(delta, 0);\n }\n else {\n this.scrollBy(delta, 0);\n }\n }\n }\n smoothScrollBy(dx, dy) {\n if (this.getChildCount() == 0) {\n return;\n }\n let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll;\n if (duration > HorizontalScrollView.ANIMATED_SCROLL_GAP) {\n const width = this.getWidth() - this.mPaddingRight - this.mPaddingLeft;\n const right = this.getChildAt(0).getWidth();\n const maxX = Math.max(0, right - width);\n const scrollX = this.mScrollX;\n dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX;\n this.mScroller.startScroll(scrollX, this.mScrollY, dx, 0);\n this.postInvalidateOnAnimation();\n }\n else {\n if (!this.mScroller.isFinished()) {\n this.mScroller.abortAnimation();\n }\n this.scrollBy(dx, dy);\n }\n this.mLastScroll = AnimationUtils.currentAnimationTimeMillis();\n }\n smoothScrollTo(x, y) {\n this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY);\n }\n computeHorizontalScrollRange() {\n const count = this.getChildCount();\n const contentWidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n if (count == 0) {\n return contentWidth;\n }\n let scrollRange = this.getChildAt(0).getRight();\n const scrollX = this.mScrollX;\n const overscrollRight = Math.max(0, scrollRange - contentWidth);\n if (scrollX < 0) {\n scrollRange -= scrollX;\n }\n else if (scrollX > overscrollRight) {\n scrollRange += scrollX - overscrollRight;\n }\n return scrollRange;\n }\n computeHorizontalScrollOffset() {\n return Math.max(0, super.computeHorizontalScrollOffset());\n }\n measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) {\n let lp = child.getLayoutParams();\n let childWidthMeasureSpec;\n let childHeightMeasureSpec;\n childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height);\n childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) {\n const lp = child.getLayoutParams();\n const childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin + heightUsed, lp.height);\n const childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(lp.leftMargin + lp.rightMargin, View.MeasureSpec.UNSPECIFIED);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n computeScroll() {\n if (this.mScroller.computeScrollOffset()) {\n let oldX = this.mScrollX;\n let oldY = this.mScrollY;\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n const range = this.getScrollRange();\n const overscrollMode = this.getOverScrollMode();\n const canOverscroll = overscrollMode == HorizontalScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == HorizontalScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);\n this.overScrollBy(x - oldX, y - oldY, oldX, oldY, range, 0, this.mOverflingDistance, 0, false);\n this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY);\n if (canOverscroll) {\n }\n }\n if (!this.awakenScrollBars()) {\n this.postInvalidateOnAnimation();\n }\n }\n }\n scrollToChild(child) {\n child.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(child, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n if (scrollDelta != 0) {\n this.scrollBy(scrollDelta, 0);\n }\n }\n scrollToChildRect(rect, immediate) {\n const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect);\n const scroll = delta != 0;\n if (scroll) {\n if (immediate) {\n this.scrollBy(delta, 0);\n }\n else {\n this.smoothScrollBy(delta, 0);\n }\n }\n return scroll;\n }\n computeScrollDeltaToGetChildRectOnScreen(rect) {\n if (this.getChildCount() == 0)\n return 0;\n let width = this.getWidth();\n let screenLeft = this.getScrollX();\n let screenRight = screenLeft + width;\n let fadingEdge = this.getHorizontalFadingEdgeLength();\n if (rect.left > 0) {\n screenLeft += fadingEdge;\n }\n if (rect.right < this.getChildAt(0).getWidth()) {\n screenRight -= fadingEdge;\n }\n let scrollXDelta = 0;\n if (rect.right > screenRight && rect.left > screenLeft) {\n if (rect.width() > width) {\n scrollXDelta += (rect.left - screenLeft);\n }\n else {\n scrollXDelta += (rect.right - screenRight);\n }\n let right = this.getChildAt(0).getRight();\n let distanceToRight = right - screenRight;\n scrollXDelta = Math.min(scrollXDelta, distanceToRight);\n }\n else if (rect.left < screenLeft && rect.right < screenRight) {\n if (rect.width() > width) {\n scrollXDelta -= (screenRight - rect.right);\n }\n else {\n scrollXDelta -= (screenLeft - rect.left);\n }\n scrollXDelta = Math.max(scrollXDelta, -this.getScrollX());\n }\n return scrollXDelta;\n }\n requestChildFocus(child, focused) {\n if (!this.mIsLayoutDirty) {\n this.scrollToChild(focused);\n }\n else {\n this.mChildToScrollTo = focused;\n }\n super.requestChildFocus(child, focused);\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n if (direction == View.FOCUS_FORWARD) {\n direction = View.FOCUS_RIGHT;\n }\n else if (direction == View.FOCUS_BACKWARD) {\n direction = View.FOCUS_LEFT;\n }\n const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction);\n if (nextFocus == null) {\n return false;\n }\n if (this.isOffScreen(nextFocus)) {\n return false;\n }\n return nextFocus.requestFocus(direction, previouslyFocusedRect);\n }\n requestChildRectangleOnScreen(child, rectangle, immediate) {\n rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY());\n return this.scrollToChildRect(rectangle, immediate);\n }\n requestLayout() {\n this.mIsLayoutDirty = true;\n super.requestLayout();\n }\n onLayout(changed, l, t, r, b) {\n let childWidth = 0;\n let childMargins = 0;\n if (this.getChildCount() > 0) {\n childWidth = this.getChildAt(0).getMeasuredWidth();\n let childParams = this.getChildAt(0).getLayoutParams();\n childMargins = childParams.leftMargin + childParams.rightMargin;\n }\n const available = r - l - this.getPaddingLeftWithForeground() - this.getPaddingRightWithForeground() - childMargins;\n const forceLeftGravity = (childWidth > available);\n this.layoutChildren(l, t, r, b, forceLeftGravity);\n this.mIsLayoutDirty = false;\n if (this.mChildToScrollTo != null && HorizontalScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) {\n this.scrollToChild(this.mChildToScrollTo);\n }\n this.mChildToScrollTo = null;\n if (!this.isLaidOut()) {\n const scrollRange = Math.max(0, childWidth - (r - l - this.mPaddingLeft - this.mPaddingRight));\n {\n if (this.isLayoutRtl()) {\n this.mScrollX = scrollRange - this.mScrollX;\n }\n }\n if (this.mScrollX > scrollRange) {\n this.mScrollX = scrollRange;\n }\n else if (this.mScrollX < 0) {\n this.mScrollX = 0;\n }\n }\n this.scrollTo(this.mScrollX, this.mScrollY);\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n let currentFocused = this.findFocus();\n if (null == currentFocused || this == currentFocused)\n return;\n const maxJump = this.mRight - this.mLeft;\n if (this.isWithinDeltaOfScreen(currentFocused, maxJump)) {\n currentFocused.getDrawingRect(this.mTempRect);\n this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect);\n let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect);\n this.doScrollX(scrollDelta);\n }\n }\n static isViewDescendantOf(child, parent) {\n if (child == parent) {\n return true;\n }\n const theParent = child.getParent();\n return (theParent instanceof ViewGroup) && HorizontalScrollView.isViewDescendantOf(theParent, parent);\n }\n fling(velocityX) {\n if (this.getChildCount() > 0) {\n let width = this.getWidth() - this.mPaddingRight - this.mPaddingLeft;\n let right = this.getChildAt(0).getWidth();\n this.mScroller.fling(this.mScrollX, this.mScrollY, velocityX, 0, 0, Math.max(0, right - width), 0, 0, width / 2, 0);\n const movingRight = velocityX > 0;\n let currentFocused = this.findFocus();\n let newFocused = this.findFocusableViewInMyBounds(movingRight, this.mScroller.getFinalX(), currentFocused);\n if (newFocused == null) {\n newFocused = this;\n }\n if (newFocused != currentFocused) {\n newFocused.requestFocus(movingRight ? View.FOCUS_RIGHT : View.FOCUS_LEFT);\n }\n this.postInvalidateOnAnimation();\n }\n }\n scrollTo(x, y) {\n if (this.getChildCount() > 0) {\n let child = this.getChildAt(0);\n x = HorizontalScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth());\n y = HorizontalScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight());\n if (x != this.mScrollX || y != this.mScrollY) {\n super.scrollTo(x, y);\n }\n }\n }\n setOverScrollMode(mode) {\n super.setOverScrollMode(mode);\n }\n draw(canvas) {\n super.draw(canvas);\n }\n static clamp(n, my, child) {\n if (my >= child || n < 0) {\n return 0;\n }\n if ((my + n) > child) {\n return child - my;\n }\n return n;\n }\n }\n HorizontalScrollView.ANIMATED_SCROLL_GAP = ScrollView.ANIMATED_SCROLL_GAP;\n HorizontalScrollView.MAX_SCROLL_FACTOR = ScrollView.MAX_SCROLL_FACTOR;\n HorizontalScrollView.TAG = \"HorizontalScrollView\";\n HorizontalScrollView.INVALID_POINTER = -1;\n widget.HorizontalScrollView = HorizontalScrollView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayMap = android.util.ArrayMap;\n var ArrayDeque = java.util.ArrayDeque;\n var ArrayList = java.util.ArrayList;\n var Rect = android.graphics.Rect;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var SparseMap = android.util.SparseMap;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var System = java.lang.System;\n var Context = android.content.Context;\n class RelativeLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBaselineView = null;\n this.mGravity = Gravity.START | Gravity.TOP;\n this.mContentBounds = new Rect();\n this.mSelfBounds = new Rect();\n this.mIgnoreGravity = View.NO_ID;\n this.mGraph = new RelativeLayout.DependencyGraph();\n this.mAllowBrokenMeasureSpecs = false;\n this.mMeasureVerticalWithPaddingMargin = false;\n if (bindElement || defStyle) {\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n this.mIgnoreGravity = a.getResourceId('ignoreGravity', View.NO_ID);\n this.mGravity = Gravity.parseGravity(a.getAttrValue('gravity'), this.mGravity);\n a.recycle();\n }\n this.queryCompatibilityModes();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('ignoreGravity', {\n setter(v, value, a) {\n v.setIgnoreGravity(value + '');\n }, getter(v) {\n return v.mIgnoreGravity;\n }\n }).set('gravity', {\n setter(v, value, a) {\n v.setGravity(a.parseGravity(value, v.mGravity));\n }, getter(v) {\n return v.mGravity;\n }\n });\n }\n queryCompatibilityModes() {\n this.mAllowBrokenMeasureSpecs = false;\n this.mMeasureVerticalWithPaddingMargin = true;\n }\n shouldDelayChildPressedState() {\n return false;\n }\n setIgnoreGravity(viewId) {\n this.mIgnoreGravity = viewId;\n }\n getGravity() {\n return this.mGravity;\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.START;\n }\n if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.TOP;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n setHorizontalGravity(horizontalGravity) {\n const gravity = horizontalGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n setVerticalGravity(verticalGravity) {\n const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK;\n if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {\n this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;\n this.requestLayout();\n }\n }\n getBaseline() {\n return this.mBaselineView != null ? this.mBaselineView.getBaseline() : super.getBaseline();\n }\n requestLayout() {\n super.requestLayout();\n this.mDirtyHierarchy = true;\n }\n sortChildren() {\n const count = this.getChildCount();\n if (this.mSortedVerticalChildren == null || this.mSortedVerticalChildren.length != count) {\n this.mSortedVerticalChildren = new Array(count);\n }\n if (this.mSortedHorizontalChildren == null || this.mSortedHorizontalChildren.length != count) {\n this.mSortedHorizontalChildren = new Array(count);\n }\n const graph = this.mGraph;\n graph.clear();\n for (let i = 0; i < count; i++) {\n graph.add(this.getChildAt(i));\n }\n graph.getSortedViews(this.mSortedVerticalChildren, RelativeLayout.RULES_VERTICAL);\n graph.getSortedViews(this.mSortedHorizontalChildren, RelativeLayout.RULES_HORIZONTAL);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (this.mDirtyHierarchy) {\n this.mDirtyHierarchy = false;\n this.sortChildren();\n }\n let myWidth = -1;\n let myHeight = -1;\n let width = 0;\n let height = 0;\n const widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n const heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n const widthSize = View.MeasureSpec.getSize(widthMeasureSpec);\n const heightSize = View.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode != View.MeasureSpec.UNSPECIFIED) {\n myWidth = widthSize;\n }\n if (heightMode != View.MeasureSpec.UNSPECIFIED) {\n myHeight = heightSize;\n }\n if (widthMode == View.MeasureSpec.EXACTLY) {\n width = myWidth;\n }\n if (heightMode == View.MeasureSpec.EXACTLY) {\n height = myHeight;\n }\n this.mHasBaselineAlignedChild = false;\n let ignore = null;\n let gravity = this.mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;\n const horizontalGravity = gravity != Gravity.START && gravity != 0;\n gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK;\n const verticalGravity = gravity != Gravity.TOP && gravity != 0;\n let left = Integer.MAX_VALUE;\n let top = Integer.MAX_VALUE;\n let right = Integer.MIN_VALUE;\n let bottom = Integer.MIN_VALUE;\n let offsetHorizontalAxis = false;\n let offsetVerticalAxis = false;\n if ((horizontalGravity || verticalGravity) && this.mIgnoreGravity != View.NO_ID) {\n ignore = this.findViewById(this.mIgnoreGravity);\n }\n const isWrapContentWidth = widthMode != View.MeasureSpec.EXACTLY;\n const isWrapContentHeight = heightMode != View.MeasureSpec.EXACTLY;\n const layoutDirection = this.getLayoutDirection();\n if (this.isLayoutRtl() && myWidth == -1) {\n myWidth = RelativeLayout.DEFAULT_WIDTH;\n }\n let views = this.mSortedHorizontalChildren;\n let count = views.length;\n for (let i = 0; i < count; i++) {\n let child = views[i];\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n let rules = params.getRules(layoutDirection);\n this.applyHorizontalSizeRules(params, myWidth, rules);\n this.measureChildHorizontal(child, params, myWidth, myHeight);\n if (this.positionChildHorizontal(child, params, myWidth, isWrapContentWidth)) {\n offsetHorizontalAxis = true;\n }\n }\n }\n views = this.mSortedVerticalChildren;\n count = views.length;\n for (let i = 0; i < count; i++) {\n let child = views[i];\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n this.applyVerticalSizeRules(params, myHeight);\n this._measureChild(child, params, myWidth, myHeight);\n if (this.positionChildVertical(child, params, myHeight, isWrapContentHeight)) {\n offsetVerticalAxis = true;\n }\n if (isWrapContentWidth) {\n if (this.isLayoutRtl()) {\n width = Math.max(width, myWidth - params.mLeft - params.leftMargin);\n }\n else {\n width = Math.max(width, params.mRight + params.rightMargin);\n }\n }\n if (isWrapContentHeight) {\n height = Math.max(height, params.mBottom + params.bottomMargin);\n }\n if (child != ignore || verticalGravity) {\n left = Math.min(left, params.mLeft - params.leftMargin);\n top = Math.min(top, params.mTop - params.topMargin);\n }\n if (child != ignore || horizontalGravity) {\n right = Math.max(right, params.mRight + params.rightMargin);\n bottom = Math.max(bottom, params.mBottom + params.bottomMargin);\n }\n }\n }\n if (this.mHasBaselineAlignedChild) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n this.alignBaseline(child, params);\n if (child != ignore || verticalGravity) {\n left = Math.min(left, params.mLeft - params.leftMargin);\n top = Math.min(top, params.mTop - params.topMargin);\n }\n if (child != ignore || horizontalGravity) {\n right = Math.max(right, params.mRight + params.rightMargin);\n bottom = Math.max(bottom, params.mBottom + params.bottomMargin);\n }\n }\n }\n }\n if (isWrapContentWidth) {\n width += this.mPaddingRight;\n if (this.mLayoutParams != null && this.mLayoutParams.width >= 0) {\n width = Math.max(width, this.mLayoutParams.width);\n }\n width = Math.max(width, this.getSuggestedMinimumWidth());\n width = RelativeLayout.resolveSize(width, widthMeasureSpec);\n if (offsetHorizontalAxis) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n const rules = params.getRules(layoutDirection);\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_HORIZONTAL] != null) {\n RelativeLayout.centerHorizontal(child, params, width);\n }\n else if (rules[RelativeLayout.ALIGN_PARENT_RIGHT] != null) {\n const childWidth = child.getMeasuredWidth();\n params.mLeft = width - this.mPaddingRight - childWidth;\n params.mRight = params.mLeft + childWidth;\n }\n }\n }\n }\n }\n if (isWrapContentHeight) {\n height += this.mPaddingBottom;\n if (this.mLayoutParams != null && this.mLayoutParams.height >= 0) {\n height = Math.max(height, this.mLayoutParams.height);\n }\n height = Math.max(height, this.getSuggestedMinimumHeight());\n height = RelativeLayout.resolveSize(height, heightMeasureSpec);\n if (offsetVerticalAxis) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n const rules = params.getRules(layoutDirection);\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_VERTICAL] != null) {\n RelativeLayout.centerVertical(child, params, height);\n }\n else if (rules[RelativeLayout.ALIGN_PARENT_BOTTOM] != null) {\n const childHeight = child.getMeasuredHeight();\n params.mTop = height - this.mPaddingBottom - childHeight;\n params.mBottom = params.mTop + childHeight;\n }\n }\n }\n }\n }\n if (horizontalGravity || verticalGravity) {\n const selfBounds = this.mSelfBounds;\n selfBounds.set(this.mPaddingLeft, this.mPaddingTop, width - this.mPaddingRight, height - this.mPaddingBottom);\n const contentBounds = this.mContentBounds;\n Gravity.apply(this.mGravity, right - left, bottom - top, selfBounds, contentBounds, layoutDirection);\n const horizontalOffset = contentBounds.left - left;\n const verticalOffset = contentBounds.top - top;\n if (horizontalOffset != 0 || verticalOffset != 0) {\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE && child != ignore) {\n let params = child.getLayoutParams();\n if (horizontalGravity) {\n params.mLeft += horizontalOffset;\n params.mRight += horizontalOffset;\n }\n if (verticalGravity) {\n params.mTop += verticalOffset;\n params.mBottom += verticalOffset;\n }\n }\n }\n }\n }\n if (this.isLayoutRtl()) {\n const offsetWidth = myWidth - width;\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let params = child.getLayoutParams();\n params.mLeft -= offsetWidth;\n params.mRight -= offsetWidth;\n }\n }\n }\n this.setMeasuredDimension(width, height);\n }\n alignBaseline(child, params) {\n const layoutDirection = this.getLayoutDirection();\n let rules = params.getRules(layoutDirection);\n let anchorBaseline = this.getRelatedViewBaseline(rules, RelativeLayout.ALIGN_BASELINE);\n if (anchorBaseline != -1) {\n let anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_BASELINE);\n if (anchorParams != null) {\n let offset = anchorParams.mTop + anchorBaseline;\n let baseline = child.getBaseline();\n if (baseline != -1) {\n offset -= baseline;\n }\n let height = params.mBottom - params.mTop;\n params.mTop = offset;\n params.mBottom = params.mTop + height;\n }\n }\n if (this.mBaselineView == null) {\n this.mBaselineView = child;\n }\n else {\n let lp = this.mBaselineView.getLayoutParams();\n if (params.mTop < lp.mTop || (params.mTop == lp.mTop && params.mLeft < lp.mLeft)) {\n this.mBaselineView = child;\n }\n }\n }\n _measureChild(child, params, myWidth, myHeight) {\n let childWidthMeasureSpec = this.getChildMeasureSpec(params.mLeft, params.mRight, params.width, params.leftMargin, params.rightMargin, this.mPaddingLeft, this.mPaddingRight, myWidth);\n let childHeightMeasureSpec = this.getChildMeasureSpec(params.mTop, params.mBottom, params.height, params.topMargin, params.bottomMargin, this.mPaddingTop, this.mPaddingBottom, myHeight);\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n measureChildHorizontal(child, params, myWidth, myHeight) {\n let childWidthMeasureSpec = this.getChildMeasureSpec(params.mLeft, params.mRight, params.width, params.leftMargin, params.rightMargin, this.mPaddingLeft, this.mPaddingRight, myWidth);\n let maxHeight = myHeight;\n if (this.mMeasureVerticalWithPaddingMargin) {\n maxHeight = Math.max(0, myHeight - this.mPaddingTop - this.mPaddingBottom - params.topMargin - params.bottomMargin);\n }\n let childHeightMeasureSpec;\n if (myHeight < 0 && !this.mAllowBrokenMeasureSpecs) {\n if (params.height >= 0) {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(params.height, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n }\n }\n else if (params.width == RelativeLayout.LayoutParams.MATCH_PARENT) {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(maxHeight, View.MeasureSpec.EXACTLY);\n }\n else {\n childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(maxHeight, View.MeasureSpec.AT_MOST);\n }\n child.measure(childWidthMeasureSpec, childHeightMeasureSpec);\n }\n getChildMeasureSpec(childStart, childEnd, childSize, startMargin, endMargin, startPadding, endPadding, mySize) {\n if (mySize < 0 && !this.mAllowBrokenMeasureSpecs) {\n if (childSize >= 0) {\n return View.MeasureSpec.makeMeasureSpec(childSize, View.MeasureSpec.EXACTLY);\n }\n return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n }\n let childSpecMode = 0;\n let childSpecSize = 0;\n let tempStart = childStart;\n let tempEnd = childEnd;\n if (tempStart < 0) {\n tempStart = startPadding + startMargin;\n }\n if (tempEnd < 0) {\n tempEnd = mySize - endPadding - endMargin;\n }\n let maxAvailable = tempEnd - tempStart;\n if (childStart >= 0 && childEnd >= 0) {\n childSpecMode = View.MeasureSpec.EXACTLY;\n childSpecSize = maxAvailable;\n }\n else {\n if (childSize >= 0) {\n childSpecMode = View.MeasureSpec.EXACTLY;\n if (maxAvailable >= 0) {\n childSpecSize = Math.min(maxAvailable, childSize);\n }\n else {\n childSpecSize = childSize;\n }\n }\n else if (childSize == RelativeLayout.LayoutParams.MATCH_PARENT) {\n childSpecMode = View.MeasureSpec.EXACTLY;\n childSpecSize = maxAvailable;\n }\n else if (childSize == RelativeLayout.LayoutParams.WRAP_CONTENT) {\n if (maxAvailable >= 0) {\n childSpecMode = View.MeasureSpec.AT_MOST;\n childSpecSize = maxAvailable;\n }\n else {\n childSpecMode = View.MeasureSpec.UNSPECIFIED;\n childSpecSize = 0;\n }\n }\n }\n return View.MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode);\n }\n positionChildHorizontal(child, params, myWidth, wrapContent) {\n const layoutDirection = this.getLayoutDirection();\n let rules = params.getRules(layoutDirection);\n if (params.mLeft < 0 && params.mRight >= 0) {\n params.mLeft = params.mRight - child.getMeasuredWidth();\n }\n else if (params.mLeft >= 0 && params.mRight < 0) {\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n else if (params.mLeft < 0 && params.mRight < 0) {\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_HORIZONTAL] != null) {\n if (!wrapContent) {\n RelativeLayout.centerHorizontal(child, params, myWidth);\n }\n else {\n params.mLeft = this.mPaddingLeft + params.leftMargin;\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n return true;\n }\n else {\n if (this.isLayoutRtl()) {\n params.mRight = myWidth - this.mPaddingRight - params.rightMargin;\n params.mLeft = params.mRight - child.getMeasuredWidth();\n }\n else {\n params.mLeft = this.mPaddingLeft + params.leftMargin;\n params.mRight = params.mLeft + child.getMeasuredWidth();\n }\n }\n }\n return rules[RelativeLayout.ALIGN_PARENT_END] != null;\n }\n positionChildVertical(child, params, myHeight, wrapContent) {\n let rules = params.getRules();\n if (params.mTop < 0 && params.mBottom >= 0) {\n params.mTop = params.mBottom - child.getMeasuredHeight();\n }\n else if (params.mTop >= 0 && params.mBottom < 0) {\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n else if (params.mTop < 0 && params.mBottom < 0) {\n if (rules[RelativeLayout.CENTER_IN_PARENT] != null || rules[RelativeLayout.CENTER_VERTICAL] != null) {\n if (!wrapContent) {\n RelativeLayout.centerVertical(child, params, myHeight);\n }\n else {\n params.mTop = this.mPaddingTop + params.topMargin;\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n return true;\n }\n else {\n params.mTop = this.mPaddingTop + params.topMargin;\n params.mBottom = params.mTop + child.getMeasuredHeight();\n }\n }\n return rules[RelativeLayout.ALIGN_PARENT_BOTTOM] != null;\n }\n applyHorizontalSizeRules(childParams, myWidth, rules) {\n let anchorParams;\n childParams.mLeft = -1;\n childParams.mRight = -1;\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.LEFT_OF);\n if (anchorParams != null) {\n childParams.mRight = anchorParams.mLeft - (anchorParams.leftMargin + childParams.rightMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.LEFT_OF] != null) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.RIGHT_OF);\n if (anchorParams != null) {\n childParams.mLeft = anchorParams.mRight + (anchorParams.rightMargin + childParams.leftMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.RIGHT_OF] != null) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_LEFT);\n if (anchorParams != null) {\n childParams.mLeft = anchorParams.mLeft + childParams.leftMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_LEFT] != null) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_RIGHT);\n if (anchorParams != null) {\n childParams.mRight = anchorParams.mRight - childParams.rightMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_RIGHT] != null) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_LEFT]) {\n childParams.mLeft = this.mPaddingLeft + childParams.leftMargin;\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_RIGHT]) {\n if (myWidth >= 0) {\n childParams.mRight = myWidth - this.mPaddingRight - childParams.rightMargin;\n }\n }\n }\n applyVerticalSizeRules(childParams, myHeight) {\n let rules = childParams.getRules();\n let anchorParams;\n childParams.mTop = -1;\n childParams.mBottom = -1;\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ABOVE);\n if (anchorParams != null) {\n childParams.mBottom = anchorParams.mTop - (anchorParams.topMargin + childParams.bottomMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ABOVE] != null) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.BELOW);\n if (anchorParams != null) {\n childParams.mTop = anchorParams.mBottom + (anchorParams.bottomMargin + childParams.topMargin);\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.BELOW] != null) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_TOP);\n if (anchorParams != null) {\n childParams.mTop = anchorParams.mTop + childParams.topMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_TOP] != null) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n anchorParams = this.getRelatedViewParams(rules, RelativeLayout.ALIGN_BOTTOM);\n if (anchorParams != null) {\n childParams.mBottom = anchorParams.mBottom - childParams.bottomMargin;\n }\n else if (childParams.alignWithParent && rules[RelativeLayout.ALIGN_BOTTOM] != null) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_TOP]) {\n childParams.mTop = this.mPaddingTop + childParams.topMargin;\n }\n if (null != rules[RelativeLayout.ALIGN_PARENT_BOTTOM]) {\n if (myHeight >= 0) {\n childParams.mBottom = myHeight - this.mPaddingBottom - childParams.bottomMargin;\n }\n }\n if (rules[RelativeLayout.ALIGN_BASELINE] != null) {\n this.mHasBaselineAlignedChild = true;\n }\n }\n getRelatedView(rules, relation) {\n let id = rules[relation];\n if (id != null) {\n let node = this.mGraph.mKeyNodes.get(id);\n if (node == null)\n return null;\n let v = node.view;\n while (v.getVisibility() == View.GONE) {\n rules = v.getLayoutParams().getRules(v.getLayoutDirection());\n node = this.mGraph.mKeyNodes.get((rules[relation]));\n if (node == null)\n return null;\n v = node.view;\n }\n return v;\n }\n return null;\n }\n getRelatedViewParams(rules, relation) {\n let v = this.getRelatedView(rules, relation);\n if (v != null) {\n let params = v.getLayoutParams();\n if (params instanceof RelativeLayout.LayoutParams) {\n return v.getLayoutParams();\n }\n }\n return null;\n }\n getRelatedViewBaseline(rules, relation) {\n let v = this.getRelatedView(rules, relation);\n if (v != null) {\n return v.getBaseline();\n }\n return -1;\n }\n static centerHorizontal(child, params, myWidth) {\n let childWidth = child.getMeasuredWidth();\n let left = (myWidth - childWidth) / 2;\n params.mLeft = left;\n params.mRight = left + childWidth;\n }\n static centerVertical(child, params, myHeight) {\n let childHeight = child.getMeasuredHeight();\n let top = (myHeight - childHeight) / 2;\n params.mTop = top;\n params.mBottom = top + childHeight;\n }\n onLayout(changed, l, t, r, b) {\n const count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n let child = this.getChildAt(i);\n if (child.getVisibility() != RelativeLayout.GONE) {\n let st = child.getLayoutParams();\n child.layout(st.mLeft, st.mTop, st.mRight, st.mBottom);\n }\n }\n }\n generateLayoutParamsFromAttr(attrs) {\n return new RelativeLayout.LayoutParams(this.getContext(), attrs);\n }\n generateDefaultLayoutParams() {\n return new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);\n }\n checkLayoutParams(p) {\n return p instanceof RelativeLayout.LayoutParams;\n }\n generateLayoutParams(p) {\n return new RelativeLayout.LayoutParams(p);\n }\n }\n RelativeLayout.TRUE = \"\";\n RelativeLayout.LEFT_OF = 0;\n RelativeLayout.RIGHT_OF = 1;\n RelativeLayout.ABOVE = 2;\n RelativeLayout.BELOW = 3;\n RelativeLayout.ALIGN_BASELINE = 4;\n RelativeLayout.ALIGN_LEFT = 5;\n RelativeLayout.ALIGN_TOP = 6;\n RelativeLayout.ALIGN_RIGHT = 7;\n RelativeLayout.ALIGN_BOTTOM = 8;\n RelativeLayout.ALIGN_PARENT_LEFT = 9;\n RelativeLayout.ALIGN_PARENT_TOP = 10;\n RelativeLayout.ALIGN_PARENT_RIGHT = 11;\n RelativeLayout.ALIGN_PARENT_BOTTOM = 12;\n RelativeLayout.CENTER_IN_PARENT = 13;\n RelativeLayout.CENTER_HORIZONTAL = 14;\n RelativeLayout.CENTER_VERTICAL = 15;\n RelativeLayout.START_OF = 16;\n RelativeLayout.END_OF = 17;\n RelativeLayout.ALIGN_START = 18;\n RelativeLayout.ALIGN_END = 19;\n RelativeLayout.ALIGN_PARENT_START = 20;\n RelativeLayout.ALIGN_PARENT_END = 21;\n RelativeLayout.VERB_COUNT = 22;\n RelativeLayout.RULES_VERTICAL = [RelativeLayout.ABOVE, RelativeLayout.BELOW, RelativeLayout.ALIGN_BASELINE, RelativeLayout.ALIGN_TOP, RelativeLayout.ALIGN_BOTTOM];\n RelativeLayout.RULES_HORIZONTAL = [RelativeLayout.LEFT_OF, RelativeLayout.RIGHT_OF, RelativeLayout.ALIGN_LEFT, RelativeLayout.ALIGN_RIGHT, RelativeLayout.START_OF, RelativeLayout.END_OF, RelativeLayout.ALIGN_START, RelativeLayout.ALIGN_END];\n RelativeLayout.DEFAULT_WIDTH = 0x00010000;\n widget.RelativeLayout = RelativeLayout;\n (function (RelativeLayout) {\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof RelativeLayout.LayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.MarginLayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.mRules = new Array(RelativeLayout.VERB_COUNT);\n this.mInitialRules = new Array(RelativeLayout.VERB_COUNT);\n this.mLeft = 0;\n this.mTop = 0;\n this.mRight = 0;\n this.mBottom = 0;\n this.mStart = LayoutParams.DEFAULT_MARGIN_RELATIVE;\n this.mEnd = LayoutParams.DEFAULT_MARGIN_RELATIVE;\n this.mRulesChanged = false;\n this.mIsRtlCompatibilityMode = false;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const c = args[0];\n const attrs = args[1];\n let a = c.obtainStyledAttributes(attrs);\n this.mIsRtlCompatibilityMode = false;\n const rules = this.mRules;\n const initialRules = this.mInitialRules;\n for (let attr of a.getLowerCaseNoNamespaceAttrNames()) {\n switch (attr) {\n case 'layout_alignwithparentifmissing':\n this.alignWithParent = a.getBoolean(attr, false);\n break;\n case 'layout_toleftof':\n rules[RelativeLayout.LEFT_OF] = a.getResourceId(attr, null);\n break;\n case 'layout_torightof':\n rules[RelativeLayout.RIGHT_OF] = a.getResourceId(attr, null);\n break;\n case 'layout_above':\n rules[RelativeLayout.ABOVE] = a.getResourceId(attr, null);\n break;\n case 'layout_below':\n rules[RelativeLayout.BELOW] = a.getResourceId(attr, null);\n break;\n case 'layout_alignbaseline':\n rules[RelativeLayout.ALIGN_BASELINE] = a.getResourceId(attr, null);\n break;\n case 'layout_alignleft':\n rules[RelativeLayout.ALIGN_LEFT] = a.getResourceId(attr, null);\n break;\n case 'layout_aligntop':\n rules[RelativeLayout.ALIGN_TOP] = a.getResourceId(attr, null);\n break;\n case 'layout_alignright':\n rules[RelativeLayout.ALIGN_RIGHT] = a.getResourceId(attr, null);\n break;\n case 'layout_alignbottom':\n rules[RelativeLayout.ALIGN_BOTTOM] = a.getResourceId(attr, null);\n break;\n case 'layout_alignparentleft':\n rules[RelativeLayout.ALIGN_PARENT_LEFT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_alignparenttop':\n rules[RelativeLayout.ALIGN_PARENT_TOP] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_alignparentright':\n rules[RelativeLayout.ALIGN_PARENT_RIGHT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_alignparentbottom':\n rules[RelativeLayout.ALIGN_PARENT_BOTTOM] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_centerinparent':\n rules[RelativeLayout.CENTER_IN_PARENT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_centerhorizontal':\n rules[RelativeLayout.CENTER_HORIZONTAL] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_centervertical':\n rules[RelativeLayout.CENTER_VERTICAL] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_tostartof':\n rules[RelativeLayout.START_OF] = a.getResourceId(attr, null);\n break;\n case 'layout_toendof':\n rules[RelativeLayout.END_OF] = a.getResourceId(attr, null);\n break;\n case 'layout_alignstart':\n rules[RelativeLayout.ALIGN_START] = a.getResourceId(attr, null);\n break;\n case 'layout_alignend':\n rules[RelativeLayout.ALIGN_END] = a.getResourceId(attr, null);\n break;\n case 'layout_alignparentstart':\n rules[RelativeLayout.ALIGN_PARENT_START] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n case 'layout_alignparentend':\n rules[RelativeLayout.ALIGN_PARENT_END] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null;\n break;\n }\n }\n this.mRulesChanged = true;\n System.arraycopy(rules, RelativeLayout.LEFT_OF, initialRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n super(args[0], args[1]);\n }\n else if (args[0] instanceof RelativeLayout.LayoutParams) {\n const source = args[0];\n this.mIsRtlCompatibilityMode = source.mIsRtlCompatibilityMode;\n this.mRulesChanged = source.mRulesChanged;\n this.alignWithParent = source.alignWithParent;\n System.arraycopy(source.mRules, RelativeLayout.LEFT_OF, this.mRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n System.arraycopy(source.mInitialRules, RelativeLayout.LEFT_OF, this.mInitialRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n }\n else if (args[0] instanceof ViewGroup.MarginLayoutParams) {\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_alignWithParentIfMissing', {\n setter(param, value, attrBinder) {\n param.alignWithParent = attrBinder.parseBoolean(value, false);\n }, getter(param) {\n return param.alignWithParent;\n }\n }).set('layout_toLeftOf', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.LEFT_OF, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.LEFT_OF];\n }\n }).set('layout_toRightOf', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.RIGHT_OF, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.RIGHT_OF];\n }\n }).set('layout_above', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ABOVE, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ABOVE];\n }\n }).set('layout_below', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.BELOW, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.BELOW];\n }\n }).set('layout_alignBaseline', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_BASELINE, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_BASELINE];\n }\n }).set('layout_alignLeft', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_LEFT, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_LEFT];\n }\n }).set('layout_alignTop', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_TOP, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_TOP];\n }\n }).set('layout_alignRight', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_RIGHT, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_RIGHT];\n }\n }).set('layout_alignBottom', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_BOTTOM, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_BOTTOM];\n }\n }).set('layout_alignParentLeft', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_LEFT];\n }\n }).set('layout_alignParentTop', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_TOP, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_TOP];\n }\n }).set('layout_alignParentRight', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_RIGHT];\n }\n }).set('layout_alignParentBottom', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_BOTTOM];\n }\n }).set('layout_centerInParent', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_IN_PARENT, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.CENTER_IN_PARENT];\n }\n }).set('layout_centerHorizontal', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_HORIZONTAL, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.CENTER_HORIZONTAL];\n }\n }).set('layout_centerVertical', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.CENTER_VERTICAL, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.CENTER_VERTICAL];\n }\n }).set('layout_toStartOf', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.LEFT_OF, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.LEFT_OF];\n }\n }).set('layout_toEndOf', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.RIGHT_OF, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.RIGHT_OF];\n }\n }).set('layout_alignStart', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_LEFT, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_LEFT];\n }\n }).set('layout_alignEnd', {\n setter(param, value, attrBinder) {\n this.addRule(RelativeLayout.ALIGN_RIGHT, value + '');\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_RIGHT];\n }\n }).set('layout_alignParentStart', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_LEFT];\n }\n }).set('layout_alignParentEnd', {\n setter(param, value, attrBinder) {\n const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null;\n this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor);\n }, getter(param) {\n return param.mRules[RelativeLayout.ALIGN_PARENT_RIGHT];\n }\n });\n }\n addRule(verb, anchor = RelativeLayout.TRUE) {\n this.mRules[verb] = anchor;\n this.mInitialRules[verb] = anchor;\n this.mRulesChanged = true;\n }\n removeRule(verb) {\n this.mRules[verb] = null;\n this.mInitialRules[verb] = null;\n this.mRulesChanged = true;\n }\n hasRelativeRules() {\n return (this.mInitialRules[RelativeLayout.START_OF] != null || this.mInitialRules[RelativeLayout.END_OF] != null\n || this.mInitialRules[RelativeLayout.ALIGN_START] != null || this.mInitialRules[RelativeLayout.ALIGN_END] != null\n || this.mInitialRules[RelativeLayout.ALIGN_PARENT_START] != null || this.mInitialRules[RelativeLayout.ALIGN_PARENT_END] != null);\n }\n resolveRules(layoutDirection) {\n const isLayoutRtl = (layoutDirection == View.LAYOUT_DIRECTION_RTL);\n System.arraycopy(this.mInitialRules, RelativeLayout.LEFT_OF, this.mRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT);\n if (this.mIsRtlCompatibilityMode) {\n if (this.mRules[RelativeLayout.ALIGN_START] != null) {\n if (this.mRules[RelativeLayout.ALIGN_LEFT] == null) {\n this.mRules[RelativeLayout.ALIGN_LEFT] = this.mRules[RelativeLayout.ALIGN_START];\n }\n this.mRules[RelativeLayout.ALIGN_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_END] != null) {\n if (this.mRules[RelativeLayout.ALIGN_RIGHT] == null) {\n this.mRules[RelativeLayout.ALIGN_RIGHT] = this.mRules[RelativeLayout.ALIGN_END];\n }\n this.mRules[RelativeLayout.ALIGN_END] = null;\n }\n if (this.mRules[RelativeLayout.START_OF] != null) {\n if (this.mRules[RelativeLayout.LEFT_OF] == null) {\n this.mRules[RelativeLayout.LEFT_OF] = this.mRules[RelativeLayout.START_OF];\n }\n this.mRules[RelativeLayout.START_OF] = null;\n }\n if (this.mRules[RelativeLayout.END_OF] != null) {\n if (this.mRules[RelativeLayout.RIGHT_OF] == null) {\n this.mRules[RelativeLayout.RIGHT_OF] = this.mRules[RelativeLayout.END_OF];\n }\n this.mRules[RelativeLayout.END_OF] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_START] != null) {\n if (this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] == null) {\n this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] = this.mRules[RelativeLayout.ALIGN_PARENT_START];\n }\n this.mRules[RelativeLayout.ALIGN_PARENT_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] == null) {\n if (this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] == null) {\n this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] = this.mRules[RelativeLayout.ALIGN_PARENT_END];\n }\n this.mRules[RelativeLayout.ALIGN_PARENT_END] = null;\n }\n }\n else {\n if ((this.mRules[RelativeLayout.ALIGN_START] != null || this.mRules[RelativeLayout.ALIGN_END] != null)\n && (this.mRules[RelativeLayout.ALIGN_LEFT] != null || this.mRules[RelativeLayout.ALIGN_RIGHT] != null)) {\n this.mRules[RelativeLayout.ALIGN_LEFT] = null;\n this.mRules[RelativeLayout.ALIGN_RIGHT] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_START] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_RIGHT : RelativeLayout.ALIGN_LEFT] = this.mRules[RelativeLayout.ALIGN_START];\n this.mRules[RelativeLayout.ALIGN_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_END] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_LEFT : RelativeLayout.ALIGN_RIGHT] = this.mRules[RelativeLayout.ALIGN_END];\n this.mRules[RelativeLayout.ALIGN_END] = null;\n }\n if ((this.mRules[RelativeLayout.START_OF] != null || this.mRules[RelativeLayout.END_OF] != null)\n && (this.mRules[RelativeLayout.LEFT_OF] != null || this.mRules[RelativeLayout.RIGHT_OF] != null)) {\n this.mRules[RelativeLayout.LEFT_OF] = null;\n this.mRules[RelativeLayout.RIGHT_OF] = null;\n }\n if (this.mRules[RelativeLayout.START_OF] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.RIGHT_OF : RelativeLayout.LEFT_OF] = this.mRules[RelativeLayout.START_OF];\n this.mRules[RelativeLayout.START_OF] = null;\n }\n if (this.mRules[RelativeLayout.END_OF] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.LEFT_OF : RelativeLayout.RIGHT_OF] = this.mRules[RelativeLayout.END_OF];\n this.mRules[RelativeLayout.END_OF] = null;\n }\n if ((this.mRules[RelativeLayout.ALIGN_PARENT_START] != null || this.mRules[RelativeLayout.ALIGN_PARENT_END] != null)\n && (this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] != null || this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] != null)) {\n this.mRules[RelativeLayout.ALIGN_PARENT_LEFT] = null;\n this.mRules[RelativeLayout.ALIGN_PARENT_RIGHT] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_START] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_PARENT_RIGHT : RelativeLayout.ALIGN_PARENT_LEFT] = this.mRules[RelativeLayout.ALIGN_PARENT_START];\n this.mRules[RelativeLayout.ALIGN_PARENT_START] = null;\n }\n if (this.mRules[RelativeLayout.ALIGN_PARENT_END] != null) {\n this.mRules[isLayoutRtl ? RelativeLayout.ALIGN_PARENT_LEFT : RelativeLayout.ALIGN_PARENT_RIGHT] = this.mRules[RelativeLayout.ALIGN_PARENT_END];\n this.mRules[RelativeLayout.ALIGN_PARENT_END] = null;\n }\n }\n this.mRulesChanged = false;\n }\n getRules(layoutDirection) {\n if (layoutDirection != null) {\n if (this.hasRelativeRules() && (this.mRulesChanged || layoutDirection != this.getLayoutDirection())) {\n this.resolveRules(layoutDirection);\n if (layoutDirection != this.getLayoutDirection()) {\n this.setLayoutDirection(layoutDirection);\n }\n }\n }\n return this.mRules;\n }\n resolveLayoutDirection(layoutDirection) {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mStart != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mRight = this.mStart;\n if (this.mEnd != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mLeft = this.mEnd;\n }\n else {\n if (this.mStart != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mLeft = this.mStart;\n if (this.mEnd != LayoutParams.DEFAULT_MARGIN_RELATIVE)\n this.mRight = this.mEnd;\n }\n if (this.hasRelativeRules() && layoutDirection != this.getLayoutDirection()) {\n this.resolveRules(layoutDirection);\n }\n super.resolveLayoutDirection(layoutDirection);\n }\n }\n RelativeLayout.LayoutParams = LayoutParams;\n class DependencyGraph {\n constructor() {\n this.mNodes = new ArrayList();\n this.mKeyNodes = new SparseMap();\n this.mRoots = new ArrayDeque();\n }\n clear() {\n const nodes = this.mNodes;\n const count = nodes.size();\n for (let i = 0; i < count; i++) {\n nodes.get(i).release();\n }\n nodes.clear();\n this.mKeyNodes.clear();\n this.mRoots.clear();\n }\n add(view) {\n const id = view.getId();\n const node = DependencyGraph.Node.acquire(view);\n if (id != View.NO_ID) {\n this.mKeyNodes.put(id, node);\n }\n this.mNodes.add(node);\n }\n getSortedViews(sorted, rules) {\n const roots = this.findRoots(rules);\n let index = 0;\n let node;\n while ((node = roots.pollLast()) != null) {\n const view = node.view;\n const key = view.getId();\n sorted[index++] = view;\n const dependents = node.dependents;\n const count = dependents.size();\n for (let i = 0; i < count; i++) {\n const dependent = dependents.keyAt(i);\n const dependencies = dependent.dependencies;\n dependencies.remove(key);\n if (dependencies.size() == 0) {\n roots.add(dependent);\n }\n }\n }\n if (index < sorted.length) {\n throw Error(`new IllegalStateException(\"Circular dependencies cannot exist\" + \" in RelativeLayout\")`);\n }\n }\n findRoots(rulesFilter) {\n const keyNodes = this.mKeyNodes;\n const nodes = this.mNodes;\n const count = nodes.size();\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n node.dependents.clear();\n node.dependencies.clear();\n }\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n const layoutParams = node.view.getLayoutParams();\n const rules = layoutParams.mRules;\n const rulesCount = rulesFilter.length;\n for (let j = 0; j < rulesCount; j++) {\n const rule = rules[rulesFilter[j]];\n if (rule != null) {\n const dependency = keyNodes.get(rule);\n if (dependency == null || dependency == node) {\n continue;\n }\n dependency.dependents.put(node, this);\n node.dependencies.put(rule, dependency);\n }\n }\n }\n const roots = this.mRoots;\n roots.clear();\n for (let i = 0; i < count; i++) {\n const node = nodes.get(i);\n if (node.dependencies.size() == 0)\n roots.addLast(node);\n }\n return roots;\n }\n }\n RelativeLayout.DependencyGraph = DependencyGraph;\n (function (DependencyGraph) {\n class Node {\n constructor() {\n this.dependents = new ArrayMap();\n this.dependencies = new SparseMap();\n }\n static acquire(view) {\n let node = Node.sPool.acquire();\n if (node == null) {\n node = new Node();\n }\n node.view = view;\n return node;\n }\n release() {\n this.view = null;\n this.dependents.clear();\n this.dependencies.clear();\n Node.sPool.release(this);\n }\n }\n Node.POOL_LIMIT = 100;\n Node.sPool = new SynchronizedPool(Node.POOL_LIMIT);\n DependencyGraph.Node = Node;\n })(DependencyGraph = RelativeLayout.DependencyGraph || (RelativeLayout.DependencyGraph = {}));\n })(RelativeLayout = widget.RelativeLayout || (widget.RelativeLayout = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var text;\n (function (text) {\n var method;\n (function (method) {\n class PasswordTransformationMethod extends method.SingleLineTransformationMethod {\n getTransformation(source, v) {\n let transform = super.getTransformation(source, v);\n if (transform)\n transform = new Array(transform.length + 1).join('•');\n return transform;\n }\n static getInstance() {\n if (PasswordTransformationMethod.instance != null)\n return PasswordTransformationMethod.instance;\n PasswordTransformationMethod.instance = new PasswordTransformationMethod();\n return PasswordTransformationMethod.instance;\n }\n }\n method.PasswordTransformationMethod = PasswordTransformationMethod;\n })(method = text.method || (text.method = {}));\n })(text = android.text || (android.text = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var TextUtils = android.text.TextUtils;\n var TextView = android.widget.TextView;\n var Gravity = android.view.Gravity;\n var Color = android.graphics.Color;\n var Canvas = android.graphics.Canvas;\n var Integer = java.lang.Integer;\n var InputType = android.text.InputType;\n var PasswordTransformationMethod = android.text.method.PasswordTransformationMethod;\n var Platform = androidui.util.Platform;\n class EditText extends TextView {\n constructor(context, bindElement, defStyle = android.R.attr.editTextStyle) {\n super(context, bindElement, defStyle);\n this.mInputType = InputType.TYPE_NULL;\n this.mForceDisableDraw = false;\n this.mMaxLength = Integer.MAX_VALUE;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const inputTypeS = a.getAttrValue(\"inputType\");\n if (inputTypeS) {\n this._setInputType(inputTypeS);\n }\n this.mMaxLength = a.getInteger('maxLength', this.mMaxLength);\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('inputType', {\n setter(v, value, attrBinder) {\n if (Number.isInteger(Number.parseInt(value))) {\n v.setInputType(Number.parseInt(value));\n }\n else {\n v._setInputType(value + '');\n }\n }, getter(v) {\n return v.getInputType();\n }\n }).set('maxLength', {\n setter(v, value, attrBinder) {\n v.mMaxLength = attrBinder.parseInt(value, v.mMaxLength);\n }, getter(v) {\n return v.mMaxLength;\n }\n });\n }\n initBindElement(bindElement) {\n super.initBindElement(bindElement);\n this.switchToMultiLineInputElement();\n }\n onInputValueChange(e) {\n let text = this.inputElement.value;\n let filterText = '';\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.codePointAt(i);\n if (!this.filterKeyCodeByInputType(c) && filterText.length < this.mMaxLength) {\n filterText += text[i];\n }\n }\n if (text != filterText) {\n text = filterText;\n this.inputElement.value = text;\n }\n if (!text || text.length === 0) {\n this.setForceDisableDrawText(false);\n }\n else {\n this.setForceDisableDrawText(true);\n }\n this.setText(text);\n }\n onDomTextInput(e) {\n let text = e['data'];\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.codePointAt(i);\n if (!this.filterKeyCodeOnInput(c)) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }\n switchToInputElement(inputElement) {\n if (this.inputElement === inputElement)\n return;\n inputElement.onblur = () => {\n inputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n this.onInputElementFocusChanged(false);\n };\n inputElement.onfocus = () => {\n inputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n this.onInputElementFocusChanged(true);\n };\n inputElement.oninput = (e) => this.onInputValueChange(e);\n inputElement.removeEventListener('textInput', (e) => this.onDomTextInput(e));\n inputElement.addEventListener('textInput', (e) => this.onDomTextInput(e));\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(inputElement);\n }\n this.inputElement = inputElement;\n }\n switchToSingleLineInputElement() {\n if (!this.mSingleLineInputElement) {\n this.mSingleLineInputElement = document.createElement('input');\n this.mSingleLineInputElement.style.position = 'absolute';\n this.mSingleLineInputElement.style['webkitAppearance'] = 'none';\n this.mSingleLineInputElement.style.borderRadius = '0';\n this.mSingleLineInputElement.style.overflow = 'auto';\n this.mSingleLineInputElement.style.background = 'transparent';\n this.mSingleLineInputElement.style.fontFamily = Canvas.getMeasureTextFontFamily();\n }\n this.switchToInputElement(this.mSingleLineInputElement);\n }\n switchToMultiLineInputElement() {\n if (!this.mMultiLineInputElement) {\n this.mMultiLineInputElement = document.createElement('textarea');\n this.mMultiLineInputElement.style.position = 'absolute';\n this.mMultiLineInputElement.style['webkitAppearance'] = 'none';\n this.mMultiLineInputElement.style['resize'] = 'none';\n this.mMultiLineInputElement.style.borderRadius = '0';\n this.mMultiLineInputElement.style.overflow = 'auto';\n this.mMultiLineInputElement.style.background = 'transparent';\n this.mMultiLineInputElement.style.boxSizing = 'border-box';\n this.mMultiLineInputElement.style.fontFamily = Canvas.getMeasureTextFontFamily();\n }\n this.switchToInputElement(this.mMultiLineInputElement);\n }\n tryShowInputElement() {\n if (!this.isInputElementShowed()) {\n this.inputElement.value = this.getText().toString();\n this.bindElement.appendChild(this.inputElement);\n this.inputElement.focus();\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n this.syncTextBoundInfoToInputElement();\n }\n }\n tryDismissInputElement() {\n try {\n if (this.inputElement.parentNode)\n this.bindElement.removeChild(this.inputElement);\n }\n catch (e) {\n }\n this.setForceDisableDrawText(false);\n }\n onInputElementFocusChanged(focused) {\n }\n isInputElementShowed() {\n return this.inputElement.parentElement != null && this.inputElement.style.opacity != '0';\n }\n performClick(event) {\n this.tryShowInputElement();\n return super.performClick(event);\n }\n onFocusChanged(focused, direction, previouslyFocusedRect) {\n super.onFocusChanged(focused, direction, previouslyFocusedRect);\n if (focused) {\n this.tryShowInputElement();\n }\n else {\n this.tryDismissInputElement();\n }\n }\n setForceDisableDrawText(disable) {\n if (this.mForceDisableDraw == disable)\n return;\n this.mForceDisableDraw = disable;\n if (disable) {\n this.mSkipDrawText = true;\n }\n else {\n this.mSkipDrawText = false;\n }\n this.invalidate();\n }\n updateTextColors() {\n super.updateTextColors();\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onTouchEvent(event) {\n const superResult = super.onTouchEvent(event);\n if (this.isInputElementShowed()) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n if (this.inputElement.scrollHeight > this.inputElement.offsetHeight || this.inputElement.scrollWidth > this.inputElement.offsetWidth) {\n this.getParent().requestDisallowInterceptTouchEvent(true);\n }\n return true;\n }\n return superResult;\n }\n filterKeyEvent(event) {\n let keyCode = event.getKeyCode();\n if (keyCode == android.view.KeyEvent.KEYCODE_Backspace || keyCode == android.view.KeyEvent.KEYCODE_Del\n || event.isCtrlPressed() || event.isAltPressed() || event.isMetaPressed()) {\n return false;\n }\n if (keyCode == android.view.KeyEvent.KEYCODE_ENTER && this.isSingleLine()) {\n return true;\n }\n if (event.mIsTypingKey) {\n if (this.getText().length >= this.mMaxLength) {\n return true;\n }\n return this.filterKeyCodeOnInput(keyCode);\n }\n return false;\n }\n filterKeyCodeByInputType(keyCode) {\n let filter = false;\n const inputType = this.mInputType;\n const typeClass = inputType & InputType.TYPE_MASK_CLASS;\n if (typeClass === InputType.TYPE_CLASS_NUMBER) {\n filter = InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode) === -1;\n if ((inputType & InputType.TYPE_NUMBER_FLAG_SIGNED) === InputType.TYPE_NUMBER_FLAG_SIGNED) {\n filter = filter && keyCode !== android.view.KeyEvent.KEYCODE_Minus;\n }\n if ((inputType & InputType.TYPE_NUMBER_FLAG_DECIMAL) === InputType.TYPE_NUMBER_FLAG_DECIMAL) {\n filter = filter && keyCode !== android.view.KeyEvent.KEYCODE_Period;\n }\n }\n else if (typeClass === InputType.TYPE_CLASS_PHONE) {\n filter = InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode) === -1;\n }\n return filter;\n }\n filterKeyCodeOnInput(keyCode) {\n let filter = false;\n const inputType = this.mInputType;\n const typeClass = inputType & InputType.TYPE_MASK_CLASS;\n if (typeClass === InputType.TYPE_CLASS_NUMBER) {\n if ((inputType & InputType.TYPE_NUMBER_FLAG_SIGNED) === InputType.TYPE_NUMBER_FLAG_SIGNED) {\n if (keyCode === android.view.KeyEvent.KEYCODE_Minus && this.getText().length > 0) {\n filter = true;\n }\n }\n if ((inputType & InputType.TYPE_NUMBER_FLAG_DECIMAL) === InputType.TYPE_NUMBER_FLAG_DECIMAL) {\n if (keyCode === android.view.KeyEvent.KEYCODE_Period && (this.getText().includes('.') || this.getText().length === 0)) {\n filter = true;\n }\n }\n }\n return filter || this.filterKeyCodeByInputType(keyCode);\n }\n checkFilterKeyEventToDom(event) {\n if (this.isInputElementShowed()) {\n if (this.filterKeyEvent(event)) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = false;\n }\n else {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n }\n return true;\n }\n return false;\n }\n onKeyDown(keyCode, event) {\n const filter = this.checkFilterKeyEventToDom(event);\n return super.onKeyDown(keyCode, event) || filter;\n }\n onKeyUp(keyCode, event) {\n const filter = this.checkFilterKeyEventToDom(event);\n return super.onKeyUp(keyCode, event) || filter;\n }\n requestSyncBoundToElement(immediately = false) {\n if (this.isInputElementShowed()) {\n immediately = true;\n }\n super.requestSyncBoundToElement(immediately);\n }\n setRawTextSize(size) {\n super.setRawTextSize(size);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onTextChanged(text, start, lengthBefore, lengthAfter) {\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n setGravity(gravity) {\n super.setGravity(gravity);\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n setSingleLine(singleLine = true) {\n if (singleLine) {\n this.switchToSingleLineInputElement();\n }\n else {\n this.switchToMultiLineInputElement();\n }\n super.setSingleLine(singleLine);\n }\n _setInputType(value) {\n switch (value + '') {\n case 'none':\n this.setInputType(InputType.TYPE_NULL);\n break;\n case 'text':\n this.setInputType(InputType.TYPE_CLASS_TEXT);\n break;\n case 'textUri':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);\n break;\n case 'textEmailAddress':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);\n break;\n case 'textPassword':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n break;\n case 'textVisiblePassword':\n this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);\n break;\n case 'number':\n this.setInputType(InputType.TYPE_CLASS_NUMBER);\n break;\n case 'numberSigned':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);\n break;\n case 'numberDecimal':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);\n break;\n case 'numberPassword':\n this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);\n break;\n case 'phone':\n this.setInputType(InputType.TYPE_CLASS_PHONE);\n break;\n case 'datetime':\n this.setInputType(InputType.TYPE_CLASS_DATETIME);\n break;\n case 'date':\n this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE);\n break;\n case 'time':\n this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME);\n break;\n }\n }\n setInputType(type) {\n this.mInputType = type;\n const typeClass = type & InputType.TYPE_MASK_CLASS;\n this.inputElement.style['webkitTextSecurity'] = '';\n this.setTransformationMethod(null);\n switch (typeClass) {\n case InputType.TYPE_NULL:\n this.setSingleLine(false);\n this.inputElement.removeAttribute('type');\n break;\n case InputType.TYPE_CLASS_TEXT:\n if ((type & InputType.TYPE_TEXT_VARIATION_URI) === InputType.TYPE_TEXT_VARIATION_URI) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'url');\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) === InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'email');\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_PASSWORD) === InputType.TYPE_TEXT_VARIATION_PASSWORD) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'password');\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n }\n else if ((type & InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) === InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'email');\n }\n else {\n this.setSingleLine(false);\n this.inputElement.removeAttribute('type');\n }\n break;\n case InputType.TYPE_CLASS_NUMBER:\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'number');\n if ((type & InputType.TYPE_NUMBER_VARIATION_PASSWORD) === InputType.TYPE_NUMBER_VARIATION_PASSWORD) {\n this.inputElement.style['webkitTextSecurity'] = 'disc';\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n }\n break;\n case InputType.TYPE_CLASS_PHONE:\n this.setSingleLine(true);\n this.inputElement.setAttribute('type', 'tel');\n break;\n case InputType.TYPE_CLASS_DATETIME:\n this.setSingleLine(true);\n if ((type & InputType.TYPE_DATETIME_VARIATION_DATE) === InputType.TYPE_DATETIME_VARIATION_DATE) {\n this.inputElement.setAttribute('type', 'date');\n }\n else if ((type & InputType.TYPE_DATETIME_VARIATION_TIME) === InputType.TYPE_DATETIME_VARIATION_TIME) {\n this.inputElement.setAttribute('type', 'time');\n }\n else {\n this.inputElement.setAttribute('type', 'datetime');\n }\n break;\n }\n }\n getInputType() {\n return this.mInputType;\n }\n syncTextBoundInfoToInputElement() {\n let left = this.getLeft();\n let top = this.getTop();\n let right = this.getRight();\n let bottom = this.getBottom();\n const density = this.getResources().getDisplayMetrics().density;\n let maxHeight = this.getMaxHeight();\n if (maxHeight <= 0 || maxHeight >= Integer.MAX_VALUE) {\n let maxLine = this.getMaxLines();\n if (maxLine > 0 && maxLine < Integer.MAX_VALUE) {\n maxHeight = maxLine * this.getLineHeight();\n }\n }\n let textHeight = bottom - top - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom();\n if (maxHeight <= 0 || maxHeight > textHeight) {\n maxHeight = textHeight;\n }\n let layout = this.mLayout;\n if (this.mHint != null && this.mText.length == 0) {\n layout = this.mHintLayout;\n }\n let height = layout ? Math.min(layout.getLineTop(layout.getLineCount()), maxHeight) : maxHeight;\n this.inputElement.style.height = height / density + 1 + 'px';\n this.inputElement.style.top = '';\n this.inputElement.style.bottom = '';\n this.inputElement.style.transform = this.inputElement.style.webkitTransform = '';\n let gravity = this.getGravity();\n switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {\n case Gravity.TOP:\n this.inputElement.style.top = this.getCompoundPaddingTop() / density + 'px';\n break;\n case Gravity.BOTTOM:\n this.inputElement.style.bottom = this.getCompoundPaddingBottom() / density + 'px';\n break;\n default:\n this.inputElement.style.top = '50%';\n this.inputElement.style.transform = this.inputElement.style.webkitTransform = 'translate(0, -50%)';\n break;\n }\n switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n this.inputElement.style.textAlign = 'left';\n break;\n case Gravity.RIGHT:\n this.inputElement.style.textAlign = 'right';\n break;\n default:\n this.inputElement.style.textAlign = 'center';\n break;\n }\n const isIOS = Platform.isIOS;\n this.inputElement.style.left = this.getCompoundPaddingLeft() / density - (isIOS ? 3 : 0) + 'px';\n this.inputElement.style.width = (right - left - this.getCompoundPaddingRight() - this.getCompoundPaddingLeft()) / density + (isIOS ? 6 : 1) + 'px';\n this.inputElement.style.lineHeight = this.getLineHeight() / density + 'px';\n if (this.getLineCount() == 1) {\n this.inputElement.style.whiteSpace = 'nowrap';\n }\n else {\n this.inputElement.style.whiteSpace = '';\n }\n let text = this.getText().toString();\n if (text != this.inputElement.value)\n this.inputElement.value = text;\n this.inputElement.style.fontSize = this.getTextSize() / density + 'px';\n this.inputElement.style.color = Color.toRGBAFunc(this.getCurrentTextColor());\n if (this.inputElement == this.mMultiLineInputElement) {\n this.inputElement.style.padding = (this.getTextSize() / density / 5).toFixed(1) + 'px 0px 0px 0px';\n }\n else {\n this.inputElement.style.padding = '0px';\n }\n }\n dependOnDebugLayout() {\n return true;\n }\n setEllipsize(ellipsis) {\n if (ellipsis == TextUtils.TruncateAt.MARQUEE) {\n throw Error(`new IllegalArgumentException(\"EditText cannot use the ellipsize mode \" + \"TextUtils.TruncateAt.MARQUEE\")`);\n }\n super.setEllipsize(ellipsis);\n }\n }\n widget.EditText = EditText;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Matrix = android.graphics.Matrix;\n var RectF = android.graphics.RectF;\n var View = android.view.View;\n var Integer = java.lang.Integer;\n var NetDrawable = androidui.image.NetDrawable;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n class ImageView extends View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHaveFrame = false;\n this.mAdjustViewBounds = false;\n this.mMaxWidth = Integer.MAX_VALUE;\n this.mMaxHeight = Integer.MAX_VALUE;\n this.mAlpha = 255;\n this.mViewAlphaScale = 256;\n this.mColorMod = false;\n this.mDrawable = null;\n this.mState = null;\n this.mMergeState = false;\n this.mLevel = 0;\n this.mDrawableWidth = 0;\n this.mDrawableHeight = 0;\n this.mDrawMatrix = null;\n this.mTempSrc = new RectF();\n this.mTempDst = new RectF();\n this.mBaseline = -1;\n this.mBaselineAlignBottom = false;\n this.mAdjustViewBoundsCompat = false;\n this.initImageView();\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n let d = a.getDrawable('src');\n if (d != null) {\n this.setImageDrawable(d);\n }\n this.mBaselineAlignBottom = a.getBoolean('baselineAlignBottom', false);\n this.mBaseline = a.getDimensionPixelSize('baseline', -1);\n this.setAdjustViewBounds(a.getBoolean('adjustViewBounds', false));\n this.setMaxWidth(a.getDimensionPixelSize('maxWidth', Integer.MAX_VALUE));\n this.setMaxHeight(a.getDimensionPixelSize('maxHeight', Integer.MAX_VALUE));\n let scaleType = ImageView.parseScaleType(a.getString('scaleType'), null);\n if (scaleType != null) {\n this.setScaleType(scaleType);\n }\n let alpha = a.getInt('drawableAlpha', 255);\n if (alpha != 255) {\n this.setAlpha(alpha);\n }\n this.mCropToPadding = a.getBoolean('cropToPadding', false);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder()\n .set('src', {\n setter(v, value, attrBinder) {\n let d = attrBinder.parseDrawable(value);\n if (d)\n v.setImageDrawable(d);\n else\n v.setImageURI(value);\n }, getter(v) {\n return v.mDrawable;\n }\n }).set('baselineAlignBottom', {\n setter(v, value, attrBinder) {\n v.setBaselineAlignBottom(attrBinder.parseBoolean(value, v.mBaselineAlignBottom));\n }, getter(v) {\n return v.getBaselineAlignBottom();\n }\n }).set('baseline', {\n setter(v, value, attrBinder) {\n v.setBaseline(attrBinder.parseNumberPixelSize(value, v.mBaseline));\n }, getter(v) {\n return v.mBaseline;\n }\n }).set('adjustViewBounds', {\n setter(v, value, attrBinder) {\n v.setAdjustViewBounds(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.getAdjustViewBounds();\n }\n }).set('maxWidth', {\n setter(v, value, attrBinder) {\n let baseValue = v.getParent() instanceof View ? v.getParent().getWidth() : 0;\n v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.mMaxWidth, baseValue));\n }, getter(v) {\n return v.mMaxWidth;\n }\n }).set('maxHeight', {\n setter(v, value, attrBinder) {\n let baseValue = v.getParent() instanceof View ? v.getParent().getHeight() : 0;\n v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.mMaxHeight, baseValue));\n }, getter(v) {\n return v.mMaxHeight;\n }\n }).set('scaleType', {\n setter(v, value, attrBinder) {\n if (typeof value === 'number') {\n v.setScaleType(value);\n }\n else {\n v.setScaleType(ImageView.parseScaleType(value, v.mScaleType));\n }\n }, getter(v) {\n return v.mScaleType;\n }\n }).set('drawableAlpha', {\n setter(v, value, attrBinder) {\n v.setImageAlpha(attrBinder.parseInt(value, v.mAlpha));\n }, getter(v) {\n return v.mAlpha;\n }\n }).set('cropToPadding', {\n setter(v, value, attrBinder) {\n v.setCropToPadding(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.getCropToPadding();\n }\n });\n }\n initImageView() {\n this.mMatrix = new Matrix();\n this.mScaleType = ImageView.ScaleType.FIT_CENTER;\n }\n verifyDrawable(dr) {\n return this.mDrawable == dr || super.verifyDrawable(dr);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mDrawable != null)\n this.mDrawable.jumpToCurrentState();\n }\n invalidateDrawable(dr) {\n if (dr == this.mDrawable) {\n this.invalidate();\n }\n else {\n super.invalidateDrawable(dr);\n }\n }\n drawableSizeChange(who) {\n if (who == this.mDrawable) {\n this.resizeFromDrawable();\n }\n else {\n super.drawableSizeChange(who);\n }\n }\n hasOverlappingRendering() {\n return (this.getBackground() != null && this.getBackground().getCurrent() != null);\n }\n getAdjustViewBounds() {\n return this.mAdjustViewBounds;\n }\n setAdjustViewBounds(adjustViewBounds) {\n this.mAdjustViewBounds = adjustViewBounds;\n if (adjustViewBounds) {\n this.setScaleType(ImageView.ScaleType.FIT_CENTER);\n }\n }\n getMaxWidth() {\n return this.mMaxWidth;\n }\n setMaxWidth(maxWidth) {\n this.mMaxWidth = maxWidth;\n }\n getMaxHeight() {\n return this.mMaxHeight;\n }\n setMaxHeight(maxHeight) {\n this.mMaxHeight = maxHeight;\n }\n getDrawable() {\n return this.mDrawable;\n }\n setImageURI(uri) {\n if (this.mUri != uri) {\n if (this.mDrawable instanceof NetDrawable) {\n this.mUri = uri;\n this.mDrawable.setURL(uri);\n this.invalidate();\n }\n else {\n this.updateDrawable(null);\n this.mUri = uri;\n const oldWidth = this.mDrawableWidth;\n const oldHeight = this.mDrawableHeight;\n this.resolveUri();\n if (oldWidth != this.mDrawableWidth || oldHeight != this.mDrawableHeight) {\n this.requestLayout();\n }\n this.invalidate();\n }\n }\n }\n setImageDrawable(drawable) {\n if (this.mDrawable != drawable) {\n this.mUri = null;\n const oldWidth = this.mDrawableWidth;\n const oldHeight = this.mDrawableHeight;\n this.updateDrawable(drawable);\n if (oldWidth != this.mDrawableWidth || oldHeight != this.mDrawableHeight) {\n this.requestLayout();\n }\n this.invalidate();\n }\n }\n setImageState(state, merge) {\n this.mState = state;\n this.mMergeState = merge;\n if (this.mDrawable != null) {\n this.refreshDrawableState();\n this.resizeFromDrawable();\n }\n }\n setSelected(selected) {\n super.setSelected(selected);\n this.resizeFromDrawable();\n }\n setImageLevel(level) {\n this.mLevel = level;\n if (this.mDrawable != null) {\n this.mDrawable.setLevel(level);\n this.resizeFromDrawable();\n }\n }\n setScaleType(scaleType) {\n if (scaleType == null) {\n throw Error(`new NullPointerException()`);\n }\n if (this.mScaleType != scaleType) {\n this.mScaleType = scaleType;\n this.setWillNotCacheDrawing(this.mScaleType == ImageView.ScaleType.CENTER);\n this.requestLayout();\n this.invalidate();\n }\n }\n getScaleType() {\n return this.mScaleType;\n }\n getImageMatrix() {\n if (this.mDrawMatrix == null) {\n return new Matrix(Matrix.IDENTITY_MATRIX);\n }\n return this.mDrawMatrix;\n }\n setImageMatrix(matrix) {\n if (matrix != null && matrix.isIdentity()) {\n matrix = null;\n }\n if (matrix == null && !this.mMatrix.isIdentity() || matrix != null && !this.mMatrix.equals(matrix)) {\n this.mMatrix.set(matrix);\n this.configureBounds();\n this.invalidate();\n }\n }\n getCropToPadding() {\n return this.mCropToPadding;\n }\n setCropToPadding(cropToPadding) {\n if (this.mCropToPadding != cropToPadding) {\n this.mCropToPadding = cropToPadding;\n this.requestLayout();\n this.invalidate();\n }\n }\n resolveUri() {\n if (this.mDrawable != null) {\n return;\n }\n let d = null;\n if (this.mUri != null) {\n d = new androidui.image.NetDrawable(this.mUri);\n }\n else {\n return;\n }\n this.updateDrawable(d);\n }\n onCreateDrawableState(extraSpace) {\n if (this.mState == null) {\n return super.onCreateDrawableState(extraSpace);\n }\n else if (!this.mMergeState) {\n return this.mState;\n }\n else {\n return ImageView.mergeDrawableStates(super.onCreateDrawableState(extraSpace + this.mState.length), this.mState);\n }\n }\n updateDrawable(d) {\n if (this.mDrawable != null) {\n this.mDrawable.setCallback(null);\n this.unscheduleDrawable(this.mDrawable);\n }\n this.mDrawable = d;\n if (d != null) {\n d.setCallback(this);\n if (d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n d.setLevel(this.mLevel);\n d.setVisible(this.getVisibility() == ImageView.VISIBLE, true);\n this.mDrawableWidth = d.getIntrinsicWidth();\n this.mDrawableHeight = d.getIntrinsicHeight();\n this.applyColorMod();\n this.configureBounds();\n }\n else {\n this.mDrawableWidth = this.mDrawableHeight = -1;\n }\n }\n resizeFromDrawable() {\n let d = this.mDrawable;\n if (d != null) {\n let w = d.getIntrinsicWidth();\n if (w < 0)\n w = this.mDrawableWidth;\n let h = d.getIntrinsicHeight();\n if (h < 0)\n h = this.mDrawableHeight;\n if (w != this.mDrawableWidth || h != this.mDrawableHeight) {\n this.mDrawableWidth = w;\n this.mDrawableHeight = h;\n if (this.mLayoutParams != null\n && this.mLayoutParams.width != LayoutParams.WRAP_CONTENT && this.mLayoutParams.width != LayoutParams.MATCH_PARENT\n && this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) {\n this.configureBounds();\n }\n else {\n this.requestLayout();\n }\n this.invalidate();\n return true;\n }\n }\n return false;\n }\n static scaleTypeToScaleToFit(st) {\n return ImageView.sS2FArray[st - 1];\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.resolveUri();\n let w;\n let h;\n let desiredAspect = 0.0;\n let resizeWidth = false;\n let resizeHeight = false;\n const widthSpecMode = View.MeasureSpec.getMode(widthMeasureSpec);\n const heightSpecMode = View.MeasureSpec.getMode(heightMeasureSpec);\n if (this.mDrawable == null) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n w = h = 0;\n }\n else {\n w = this.mDrawableWidth;\n h = this.mDrawableHeight;\n if (w <= 0)\n w = 1;\n if (h <= 0)\n h = 1;\n if (this.mAdjustViewBounds) {\n resizeWidth = widthSpecMode != View.MeasureSpec.EXACTLY;\n resizeHeight = heightSpecMode != View.MeasureSpec.EXACTLY;\n desiredAspect = w / h;\n }\n }\n let pleft = this.mPaddingLeft;\n let pright = this.mPaddingRight;\n let ptop = this.mPaddingTop;\n let pbottom = this.mPaddingBottom;\n let widthSize;\n let heightSize;\n if (resizeWidth || resizeHeight) {\n widthSize = this.resolveAdjustedSize(w + pleft + pright, this.mMaxWidth, widthMeasureSpec);\n heightSize = this.resolveAdjustedSize(h + ptop + pbottom, this.mMaxHeight, heightMeasureSpec);\n if (desiredAspect != 0.0) {\n let actualAspect = (widthSize - pleft - pright) / (heightSize - ptop - pbottom);\n if (Math.abs(actualAspect - desiredAspect) > 0.0000001) {\n let done = false;\n if (resizeWidth) {\n let newWidth = Math.floor((desiredAspect * (heightSize - ptop - pbottom))) + pleft + pright;\n if (!resizeHeight && !this.mAdjustViewBoundsCompat) {\n widthSize = this.resolveAdjustedSize(newWidth, this.mMaxWidth, widthMeasureSpec);\n }\n if (newWidth <= widthSize) {\n widthSize = newWidth;\n done = true;\n }\n }\n if (!done && resizeHeight) {\n let newHeight = Math.floor(((widthSize - pleft - pright) / desiredAspect)) + ptop + pbottom;\n if (!resizeWidth && !this.mAdjustViewBoundsCompat) {\n heightSize = this.resolveAdjustedSize(newHeight, this.mMaxHeight, heightMeasureSpec);\n }\n if (newHeight <= heightSize) {\n heightSize = newHeight;\n }\n }\n }\n }\n }\n else {\n w += pleft + pright;\n h += ptop + pbottom;\n w = Math.max(w, this.getSuggestedMinimumWidth());\n h = Math.max(h, this.getSuggestedMinimumHeight());\n widthSize = ImageView.resolveSizeAndState(w, widthMeasureSpec, 0);\n heightSize = ImageView.resolveSizeAndState(h, heightMeasureSpec, 0);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n }\n resolveAdjustedSize(desiredSize, maxSize, measureSpec) {\n let result = desiredSize;\n let specMode = View.MeasureSpec.getMode(measureSpec);\n let specSize = View.MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case View.MeasureSpec.UNSPECIFIED:\n result = Math.min(desiredSize, maxSize);\n break;\n case View.MeasureSpec.AT_MOST:\n result = Math.min(Math.min(desiredSize, specSize), maxSize);\n break;\n case View.MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n setFrame(l, t, r, b) {\n let changed = super.setFrame(l, t, r, b);\n this.mHaveFrame = true;\n this.configureBounds();\n return changed;\n }\n configureBounds() {\n if (this.mDrawable == null || !this.mHaveFrame) {\n return;\n }\n let dwidth = this.mDrawableWidth;\n let dheight = this.mDrawableHeight;\n let vwidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n let vheight = this.getHeight() - this.mPaddingTop - this.mPaddingBottom;\n let fits = (dwidth < 0 || vwidth == dwidth) && (dheight < 0 || vheight == dheight);\n if (dwidth <= 0 || dheight <= 0 || ImageView.ScaleType.FIT_XY == this.mScaleType) {\n this.mDrawable.setBounds(0, 0, vwidth, vheight);\n this.mDrawMatrix = null;\n }\n else {\n this.mDrawable.setBounds(0, 0, dwidth, dheight);\n if (ImageView.ScaleType.MATRIX == this.mScaleType) {\n if (this.mMatrix.isIdentity()) {\n this.mDrawMatrix = null;\n }\n else {\n this.mDrawMatrix = this.mMatrix;\n }\n }\n else if (fits) {\n this.mDrawMatrix = null;\n }\n else if (ImageView.ScaleType.CENTER == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n this.mDrawMatrix.setTranslate(Math.floor(((vwidth - dwidth) * 0.5 + 0.5)), Math.floor(((vheight - dheight) * 0.5 + 0.5)));\n }\n else if (ImageView.ScaleType.CENTER_CROP == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n let scale;\n let dx = 0, dy = 0;\n if (dwidth * vheight > vwidth * dheight) {\n scale = vheight / dheight;\n dx = (vwidth - dwidth * scale) * 0.5;\n }\n else {\n scale = vwidth / dwidth;\n dy = (vheight - dheight * scale) * 0.5;\n }\n this.mDrawMatrix.setScale(scale, scale);\n this.mDrawMatrix.postTranslate(Math.floor((dx + 0.5)), Math.floor((dy + 0.5)));\n }\n else if (ImageView.ScaleType.CENTER_INSIDE == this.mScaleType) {\n this.mDrawMatrix = this.mMatrix;\n let scale;\n let dx;\n let dy;\n if (dwidth <= vwidth && dheight <= vheight) {\n scale = 1.0;\n }\n else {\n scale = Math.min(vwidth / dwidth, vheight / dheight);\n }\n dx = Math.floor(((vwidth - dwidth * scale) * 0.5 + 0.5));\n dy = Math.floor(((vheight - dheight * scale) * 0.5 + 0.5));\n this.mDrawMatrix.setScale(scale, scale);\n this.mDrawMatrix.postTranslate(dx, dy);\n }\n else {\n this.mTempSrc.set(0, 0, dwidth, dheight);\n this.mTempDst.set(0, 0, vwidth, vheight);\n this.mDrawMatrix = this.mMatrix;\n this.mDrawMatrix.setRectToRect(this.mTempSrc, this.mTempDst, ImageView.scaleTypeToScaleToFit(this.mScaleType));\n }\n }\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n let d = this.mDrawable;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mDrawable == null) {\n return;\n }\n if (this.mDrawableWidth == 0 || this.mDrawableHeight == 0) {\n return;\n }\n if (this.mDrawMatrix == null && this.mPaddingTop == 0 && this.mPaddingLeft == 0) {\n this.mDrawable.draw(canvas);\n }\n else {\n let saveCount = canvas.getSaveCount();\n canvas.save();\n if (this.mCropToPadding) {\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n canvas.translate(this.mPaddingLeft, this.mPaddingTop);\n if (this.mDrawMatrix != null) {\n canvas.concat(this.mDrawMatrix);\n }\n this.mDrawable.draw(canvas);\n canvas.restoreToCount(saveCount);\n }\n }\n getBaseline() {\n if (this.mBaselineAlignBottom) {\n return this.getMeasuredHeight();\n }\n else {\n return this.mBaseline;\n }\n }\n setBaseline(baseline) {\n if (this.mBaseline != baseline) {\n this.mBaseline = baseline;\n this.requestLayout();\n }\n }\n setBaselineAlignBottom(aligned) {\n if (this.mBaselineAlignBottom != aligned) {\n this.mBaselineAlignBottom = aligned;\n this.requestLayout();\n }\n }\n getBaselineAlignBottom() {\n return this.mBaselineAlignBottom;\n }\n getImageAlpha() {\n return this.mAlpha;\n }\n setImageAlpha(alpha) {\n alpha &= 0xFF;\n if (this.mAlpha != alpha) {\n this.mAlpha = alpha;\n this.mColorMod = true;\n this.applyColorMod();\n this.invalidate();\n }\n }\n applyColorMod() {\n if (this.mDrawable != null && this.mColorMod) {\n this.mDrawable = this.mDrawable.mutate();\n this.mDrawable.setAlpha(this.mAlpha * this.mViewAlphaScale >> 8);\n }\n }\n setVisibility(visibility) {\n super.setVisibility(visibility);\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(visibility == ImageView.VISIBLE, false);\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(this.getVisibility() == ImageView.VISIBLE, false);\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mDrawable != null) {\n this.mDrawable.setVisible(false, false);\n }\n }\n static parseScaleType(s, defaultType) {\n if (s == null)\n return defaultType;\n s = s.toLowerCase();\n if (s === 'matrix'.toLowerCase())\n return ImageView.ScaleType.MATRIX;\n if (s === 'fitXY'.toLowerCase())\n return ImageView.ScaleType.FIT_XY;\n if (s === 'fitStart'.toLowerCase())\n return ImageView.ScaleType.FIT_START;\n if (s === 'fitCenter'.toLowerCase())\n return ImageView.ScaleType.FIT_CENTER;\n if (s === 'fitEnd'.toLowerCase())\n return ImageView.ScaleType.FIT_END;\n if (s === 'center'.toLowerCase())\n return ImageView.ScaleType.CENTER;\n if (s === 'centerCrop'.toLowerCase())\n return ImageView.ScaleType.CENTER_CROP;\n if (s === 'centerInside'.toLowerCase())\n return ImageView.ScaleType.CENTER_INSIDE;\n return defaultType;\n }\n }\n ImageView.sS2FArray = [Matrix.ScaleToFit.FILL, Matrix.ScaleToFit.START, Matrix.ScaleToFit.CENTER, Matrix.ScaleToFit.END];\n widget.ImageView = ImageView;\n (function (ImageView) {\n var ScaleType;\n (function (ScaleType) {\n ScaleType[ScaleType[\"MATRIX\"] = 0] = \"MATRIX\";\n ScaleType[ScaleType[\"FIT_XY\"] = 1] = \"FIT_XY\";\n ScaleType[ScaleType[\"FIT_START\"] = 2] = \"FIT_START\";\n ScaleType[ScaleType[\"FIT_CENTER\"] = 3] = \"FIT_CENTER\";\n ScaleType[ScaleType[\"FIT_END\"] = 4] = \"FIT_END\";\n ScaleType[ScaleType[\"CENTER\"] = 5] = \"CENTER\";\n ScaleType[ScaleType[\"CENTER_CROP\"] = 6] = \"CENTER_CROP\";\n ScaleType[ScaleType[\"CENTER_INSIDE\"] = 7] = \"CENTER_INSIDE\";\n })(ScaleType = ImageView.ScaleType || (ImageView.ScaleType = {}));\n })(ImageView = widget.ImageView || (widget.ImageView = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n class ImageButton extends widget.ImageView {\n constructor(context, bindElement, defStyle = android.R.attr.imageButtonStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.ImageButton = ImageButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var Trace = android.os.Trace;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var AbsListView = android.widget.AbsListView;\n class GridView extends AbsListView {\n constructor(context, attrs, defStyle = android.R.attr.gridViewStyle) {\n super(context, attrs, defStyle);\n this.mNumColumns = GridView.AUTO_FIT;\n this.mHorizontalSpacing = 0;\n this.mRequestedHorizontalSpacing = 0;\n this.mVerticalSpacing = 0;\n this.mStretchMode = GridView.STRETCH_COLUMN_WIDTH;\n this.mColumnWidth = 0;\n this.mRequestedColumnWidth = 0;\n this.mRequestedNumColumns = 0;\n this.mReferenceView = null;\n this.mReferenceViewInSelectedRow = null;\n this.mGravity = Gravity.LEFT;\n this.mTempRect = new Rect();\n let a = context.obtainStyledAttributes(attrs, defStyle);\n let hSpacing = a.getDimensionPixelOffset('horizontalSpacing', 0);\n this.setHorizontalSpacing(hSpacing);\n let vSpacing = a.getDimensionPixelOffset('verticalSpacing', 0);\n this.setVerticalSpacing(vSpacing);\n let stretchModeS = a.getAttrValue('stretchMode');\n if (stretchModeS) {\n switch (stretchModeS) {\n case \"none\":\n this.setStretchMode(GridView.NO_STRETCH);\n break;\n case \"spacingWidth\":\n this.setStretchMode(GridView.STRETCH_SPACING);\n break;\n case \"columnWidth\":\n this.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);\n break;\n case \"spacingWidthUniform\":\n this.setStretchMode(GridView.STRETCH_SPACING_UNIFORM);\n break;\n }\n }\n let columnWidth = a.getDimensionPixelOffset('columnWidth', -1);\n if (columnWidth > 0) {\n this.setColumnWidth(columnWidth);\n }\n let numColumns = a.getInt('numColumns', 1);\n this.setNumColumns(numColumns);\n let gravityS = a.getAttrValue('gravity');\n if (gravityS) {\n this.setGravity(Gravity.parseGravity(gravityS, this.mGravity));\n }\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('horizontalSpacing', {\n setter(v, value, attrBinder) {\n v.setHorizontalSpacing(attrBinder.parseNumberPixelOffset(value, 0));\n }, getter(v) {\n return v.getHorizontalSpacing();\n }\n }).set('verticalSpacing', {\n setter(v, value, attrBinder) {\n v.setVerticalSpacing(attrBinder.parseNumberPixelOffset(value, 0));\n }, getter(v) {\n return v.getVerticalSpacing();\n }\n }).set('stretchMode', {\n setter(v, value, attrBinder) {\n v.setStretchMode(attrBinder.parseEnum(value, new Map()\n .set(\"none\", GridView.NO_STRETCH)\n .set(\"spacingWidth\", GridView.STRETCH_SPACING)\n .set(\"columnWidth\", GridView.STRETCH_COLUMN_WIDTH)\n .set(\"spacingWidthUniform\", GridView.STRETCH_SPACING_UNIFORM), GridView.STRETCH_COLUMN_WIDTH));\n }, getter(v) {\n return v.getStretchMode();\n }\n }).set('columnWidth', {\n setter(v, value, attrBinder) {\n let columnWidth = attrBinder.parseNumberPixelOffset(value, -1);\n if (columnWidth > 0) {\n this.setColumnWidth(columnWidth);\n }\n }, getter(v) {\n return v.getColumnWidth();\n }\n }).set('numColumns', {\n setter(v, value, attrBinder) {\n v.setNumColumns(attrBinder.parseInt(value, 1));\n }, getter(v) {\n return v.getNumColumns();\n }\n }).set('gravity', {\n setter(v, value, attrBinder) {\n v.setGravity(attrBinder.parseGravity(value, v.getGravity()));\n }, getter(v) {\n return v.getGravity();\n }\n });\n }\n getAdapter() {\n return this.mAdapter;\n }\n setAdapter(adapter) {\n if (this.mAdapter != null && this.mDataSetObserver != null) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.resetList();\n this.mRecycler.clear();\n this.mAdapter = adapter;\n this.mOldSelectedPosition = GridView.INVALID_POSITION;\n this.mOldSelectedRowId = GridView.INVALID_ROW_ID;\n super.setAdapter(adapter);\n if (this.mAdapter != null) {\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.mDataChanged = true;\n this.checkFocus();\n this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount());\n let position;\n if (this.mStackFromBottom) {\n position = this.lookForSelectablePosition(this.mItemCount - 1, false);\n }\n else {\n position = this.lookForSelectablePosition(0, true);\n }\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n this.checkSelectionChanged();\n }\n else {\n this.checkFocus();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n lookForSelectablePosition(position, lookDown) {\n const adapter = this.mAdapter;\n if (adapter == null || this.isInTouchMode()) {\n return GridView.INVALID_POSITION;\n }\n if (position < 0 || position >= this.mItemCount) {\n return GridView.INVALID_POSITION;\n }\n return position;\n }\n fillGap(down) {\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n const count = this.getChildCount();\n if (down) {\n let paddingTop = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n paddingTop = this.getListPaddingTop();\n }\n const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + verticalSpacing : paddingTop;\n let position = this.mFirstPosition + count;\n if (this.mStackFromBottom) {\n position += numColumns - 1;\n }\n this.fillDown(position, startOffset);\n this.correctTooHigh(numColumns, verticalSpacing, this.getChildCount());\n }\n else {\n let paddingBottom = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n paddingBottom = this.getListPaddingBottom();\n }\n const startOffset = count > 0 ? this.getChildAt(0).getTop() - verticalSpacing : this.getHeight() - paddingBottom;\n let position = this.mFirstPosition;\n if (!this.mStackFromBottom) {\n position -= numColumns;\n }\n else {\n position--;\n }\n this.fillUp(position, startOffset);\n this.correctTooLow(numColumns, verticalSpacing, this.getChildCount());\n }\n }\n fillDown(pos, nextTop) {\n let selectedView = null;\n let end = (this.mBottom - this.mTop);\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n end -= this.mListPadding.bottom;\n }\n while (nextTop < end && pos < this.mItemCount) {\n let temp = this.makeRow(pos, nextTop, true);\n if (temp != null) {\n selectedView = temp;\n }\n nextTop = this.mReferenceView.getBottom() + this.mVerticalSpacing;\n pos += this.mNumColumns;\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n makeRow(startPos, y, flow) {\n const columnWidth = this.mColumnWidth;\n const horizontalSpacing = this.mHorizontalSpacing;\n const isLayoutRtl = this.isLayoutRtl();\n let last;\n let nextLeft;\n if (isLayoutRtl) {\n nextLeft = this.getWidth() - this.mListPadding.right - columnWidth - ((this.mStretchMode == GridView.STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);\n }\n else {\n nextLeft = this.mListPadding.left + ((this.mStretchMode == GridView.STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);\n }\n if (!this.mStackFromBottom) {\n last = Math.min(startPos + this.mNumColumns, this.mItemCount);\n }\n else {\n last = startPos + 1;\n startPos = Math.max(0, startPos - this.mNumColumns + 1);\n if (last - startPos < this.mNumColumns) {\n const deltaLeft = (this.mNumColumns - (last - startPos)) * (columnWidth + horizontalSpacing);\n nextLeft += (isLayoutRtl ? -1 : +1) * deltaLeft;\n }\n }\n let selectedView = null;\n const hasFocus = this.shouldShowSelector();\n const inClick = this.touchModeDrawsInPressedState();\n const selectedPosition = this.mSelectedPosition;\n let child = null;\n for (let pos = startPos; pos < last; pos++) {\n let selected = pos == selectedPosition;\n const where = flow ? -1 : pos - startPos;\n child = this.makeAndAddView(pos, y, flow, nextLeft, selected, where);\n nextLeft += (isLayoutRtl ? -1 : +1) * columnWidth;\n if (pos < last - 1) {\n nextLeft += horizontalSpacing;\n }\n if (selected && (hasFocus || inClick)) {\n selectedView = child;\n }\n }\n this.mReferenceView = child;\n if (selectedView != null) {\n this.mReferenceViewInSelectedRow = this.mReferenceView;\n }\n return selectedView;\n }\n fillUp(pos, nextBottom) {\n let selectedView = null;\n let end = 0;\n if ((this.mGroupFlags & GridView.CLIP_TO_PADDING_MASK) == GridView.CLIP_TO_PADDING_MASK) {\n end = this.mListPadding.top;\n }\n while (nextBottom > end && pos >= 0) {\n let temp = this.makeRow(pos, nextBottom, false);\n if (temp != null) {\n selectedView = temp;\n }\n nextBottom = this.mReferenceView.getTop() - this.mVerticalSpacing;\n this.mFirstPosition = pos;\n pos -= this.mNumColumns;\n }\n if (this.mStackFromBottom) {\n this.mFirstPosition = Math.max(0, pos + 1);\n }\n this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1);\n return selectedView;\n }\n fillFromTop(nextTop) {\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition);\n this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1);\n if (this.mFirstPosition < 0) {\n this.mFirstPosition = 0;\n }\n this.mFirstPosition -= this.mFirstPosition % this.mNumColumns;\n return this.fillDown(this.mFirstPosition, nextTop);\n }\n fillFromBottom(lastPosition, nextBottom) {\n lastPosition = Math.max(lastPosition, this.mSelectedPosition);\n lastPosition = Math.min(lastPosition, this.mItemCount - 1);\n const invertedPosition = this.mItemCount - 1 - lastPosition;\n lastPosition = this.mItemCount - 1 - (invertedPosition - (invertedPosition % this.mNumColumns));\n return this.fillUp(lastPosition, nextBottom);\n }\n fillSelection(childrenTop, childrenBottom) {\n const selectedPosition = this.reconcileSelectedPosition();\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n }\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n const sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, topSelectionPixel, true);\n this.mFirstPosition = rowStart;\n const referenceView = this.mReferenceView;\n if (!this.mStackFromBottom) {\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n this.pinToBottom(childrenBottom);\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n else {\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n const offset = bottomSelectionPixel - referenceView.getBottom();\n this.offsetChildrenTopAndBottom(offset);\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n this.pinToTop(childrenTop);\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n return sel;\n }\n pinToTop(childrenTop) {\n if (this.mFirstPosition == 0) {\n const top = this.getChildAt(0).getTop();\n const offset = childrenTop - top;\n if (offset < 0) {\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n }\n pinToBottom(childrenBottom) {\n const count = this.getChildCount();\n if (this.mFirstPosition + count == this.mItemCount) {\n const bottom = this.getChildAt(count - 1).getBottom();\n const offset = childrenBottom - bottom;\n if (offset > 0) {\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n }\n findMotionRow(y) {\n const childCount = this.getChildCount();\n if (childCount > 0) {\n const numColumns = this.mNumColumns;\n if (!this.mStackFromBottom) {\n for (let i = 0; i < childCount; i += numColumns) {\n if (y <= this.getChildAt(i).getBottom()) {\n return this.mFirstPosition + i;\n }\n }\n }\n else {\n for (let i = childCount - 1; i >= 0; i -= numColumns) {\n if (y >= this.getChildAt(i).getTop()) {\n return this.mFirstPosition + i;\n }\n }\n }\n }\n return GridView.INVALID_POSITION;\n }\n fillSpecific(position, top) {\n const numColumns = this.mNumColumns;\n let motionRowStart;\n let motionRowEnd = -1;\n if (!this.mStackFromBottom) {\n motionRowStart = position - (position % numColumns);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - position;\n motionRowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n motionRowStart = Math.max(0, motionRowEnd - numColumns + 1);\n }\n const temp = this.makeRow(this.mStackFromBottom ? motionRowEnd : motionRowStart, top, true);\n this.mFirstPosition = motionRowStart;\n const referenceView = this.mReferenceView;\n if (referenceView == null) {\n return null;\n }\n const verticalSpacing = this.mVerticalSpacing;\n let above;\n let below;\n if (!this.mStackFromBottom) {\n above = this.fillUp(motionRowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n below = this.fillDown(motionRowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n const childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooHigh(numColumns, verticalSpacing, childCount);\n }\n }\n else {\n below = this.fillDown(motionRowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n above = this.fillUp(motionRowStart - 1, referenceView.getTop() - verticalSpacing);\n const childCount = this.getChildCount();\n if (childCount > 0) {\n this.correctTooLow(numColumns, verticalSpacing, childCount);\n }\n }\n if (temp != null) {\n return temp;\n }\n else if (above != null) {\n return above;\n }\n else {\n return below;\n }\n }\n correctTooHigh(numColumns, verticalSpacing, childCount) {\n const lastPosition = this.mFirstPosition + childCount - 1;\n if (lastPosition == this.mItemCount - 1 && childCount > 0) {\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let bottomOffset = end - lastBottom;\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) {\n if (this.mFirstPosition == 0) {\n bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop);\n }\n this.offsetChildrenTopAndBottom(bottomOffset);\n if (this.mFirstPosition > 0) {\n this.fillUp(this.mFirstPosition - (this.mStackFromBottom ? 1 : numColumns), firstChild.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n correctTooLow(numColumns, verticalSpacing, childCount) {\n if (this.mFirstPosition == 0 && childCount > 0) {\n const firstChild = this.getChildAt(0);\n const firstTop = firstChild.getTop();\n const start = this.mListPadding.top;\n const end = (this.mBottom - this.mTop) - this.mListPadding.bottom;\n let topOffset = firstTop - start;\n const lastChild = this.getChildAt(childCount - 1);\n const lastBottom = lastChild.getBottom();\n const lastPosition = this.mFirstPosition + childCount - 1;\n if (topOffset > 0 && (lastPosition < this.mItemCount - 1 || lastBottom > end)) {\n if (lastPosition == this.mItemCount - 1) {\n topOffset = Math.min(topOffset, lastBottom - end);\n }\n this.offsetChildrenTopAndBottom(-topOffset);\n if (lastPosition < this.mItemCount - 1) {\n this.fillDown(lastPosition + (!this.mStackFromBottom ? 1 : numColumns), lastChild.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n }\n }\n }\n }\n fillFromSelection(selectedTop, childrenTop, childrenBottom) {\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n let invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n }\n let sel;\n let referenceView;\n let topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n let bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, selectedTop, true);\n this.mFirstPosition = rowStart;\n referenceView = this.mReferenceView;\n this.adjustForTopFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n this.adjustForBottomFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n if (!this.mStackFromBottom) {\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n }\n else {\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n }\n return sel;\n }\n getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart) {\n let bottomSelectionPixel = childrenBottom;\n if (rowStart + numColumns - 1 < this.mItemCount - 1) {\n bottomSelectionPixel -= fadingEdgeLength;\n }\n return bottomSelectionPixel;\n }\n getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart) {\n let topSelectionPixel = childrenTop;\n if (rowStart > 0) {\n topSelectionPixel += fadingEdgeLength;\n }\n return topSelectionPixel;\n }\n adjustForBottomFadingEdge(childInSelectedRow, topSelectionPixel, bottomSelectionPixel) {\n if (childInSelectedRow.getBottom() > bottomSelectionPixel) {\n let spaceAbove = childInSelectedRow.getTop() - topSelectionPixel;\n let spaceBelow = childInSelectedRow.getBottom() - bottomSelectionPixel;\n let offset = Math.min(spaceAbove, spaceBelow);\n this.offsetChildrenTopAndBottom(-offset);\n }\n }\n adjustForTopFadingEdge(childInSelectedRow, topSelectionPixel, bottomSelectionPixel) {\n if (childInSelectedRow.getTop() < topSelectionPixel) {\n let spaceAbove = topSelectionPixel - childInSelectedRow.getTop();\n let spaceBelow = bottomSelectionPixel - childInSelectedRow.getBottom();\n let offset = Math.min(spaceAbove, spaceBelow);\n this.offsetChildrenTopAndBottom(offset);\n }\n }\n smoothScrollToPosition(position) {\n super.smoothScrollToPosition(position);\n }\n smoothScrollByOffset(offset) {\n super.smoothScrollByOffset(offset);\n }\n moveSelection(delta, childrenTop, childrenBottom) {\n const fadingEdgeLength = this.getVerticalFadingEdgeLength();\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n const verticalSpacing = this.mVerticalSpacing;\n let oldRowStart;\n let rowStart;\n let rowEnd = -1;\n if (!this.mStackFromBottom) {\n oldRowStart = (selectedPosition - delta) - ((selectedPosition - delta) % numColumns);\n rowStart = selectedPosition - (selectedPosition % numColumns);\n }\n else {\n let invertedSelection = this.mItemCount - 1 - selectedPosition;\n rowEnd = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n rowStart = Math.max(0, rowEnd - numColumns + 1);\n invertedSelection = this.mItemCount - 1 - (selectedPosition - delta);\n oldRowStart = this.mItemCount - 1 - (invertedSelection - (invertedSelection % numColumns));\n oldRowStart = Math.max(0, oldRowStart - numColumns + 1);\n }\n const rowDelta = rowStart - oldRowStart;\n const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, rowStart);\n const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, numColumns, rowStart);\n this.mFirstPosition = rowStart;\n let sel;\n let referenceView;\n if (rowDelta > 0) {\n const oldBottom = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getBottom();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldBottom + verticalSpacing, true);\n referenceView = this.mReferenceView;\n this.adjustForBottomFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n }\n else if (rowDelta < 0) {\n const oldTop = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getTop();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldTop - verticalSpacing, false);\n referenceView = this.mReferenceView;\n this.adjustForTopFadingEdge(referenceView, topSelectionPixel, bottomSelectionPixel);\n }\n else {\n const oldTop = this.mReferenceViewInSelectedRow == null ? 0 : this.mReferenceViewInSelectedRow.getTop();\n sel = this.makeRow(this.mStackFromBottom ? rowEnd : rowStart, oldTop, true);\n referenceView = this.mReferenceView;\n }\n if (!this.mStackFromBottom) {\n this.fillUp(rowStart - numColumns, referenceView.getTop() - verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillDown(rowStart + numColumns, referenceView.getBottom() + verticalSpacing);\n }\n else {\n this.fillDown(rowEnd + numColumns, referenceView.getBottom() + verticalSpacing);\n this.adjustViewsUpOrDown();\n this.fillUp(rowStart - 1, referenceView.getTop() - verticalSpacing);\n }\n return sel;\n }\n determineColumns(availableSpace) {\n const requestedHorizontalSpacing = this.mRequestedHorizontalSpacing;\n const stretchMode = this.mStretchMode;\n const requestedColumnWidth = this.mRequestedColumnWidth;\n let didNotInitiallyFit = false;\n if (this.mRequestedNumColumns == GridView.AUTO_FIT) {\n if (requestedColumnWidth > 0) {\n this.mNumColumns = (availableSpace + requestedHorizontalSpacing) / (requestedColumnWidth + requestedHorizontalSpacing);\n }\n else {\n this.mNumColumns = 2;\n }\n }\n else {\n this.mNumColumns = this.mRequestedNumColumns;\n }\n if (this.mNumColumns <= 0) {\n this.mNumColumns = 1;\n }\n switch (stretchMode) {\n case GridView.NO_STRETCH:\n this.mColumnWidth = requestedColumnWidth;\n this.mHorizontalSpacing = requestedHorizontalSpacing;\n break;\n default:\n let spaceLeftOver = availableSpace - (this.mNumColumns * requestedColumnWidth) - ((this.mNumColumns - 1) * requestedHorizontalSpacing);\n if (spaceLeftOver < 0) {\n didNotInitiallyFit = true;\n }\n switch (stretchMode) {\n case GridView.STRETCH_COLUMN_WIDTH:\n this.mColumnWidth = requestedColumnWidth + spaceLeftOver / this.mNumColumns;\n this.mHorizontalSpacing = requestedHorizontalSpacing;\n break;\n case GridView.STRETCH_SPACING:\n this.mColumnWidth = requestedColumnWidth;\n if (this.mNumColumns > 1) {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver / (this.mNumColumns - 1);\n }\n else {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver;\n }\n break;\n case GridView.STRETCH_SPACING_UNIFORM:\n this.mColumnWidth = requestedColumnWidth;\n if (this.mNumColumns > 1) {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver / (this.mNumColumns + 1);\n }\n else {\n this.mHorizontalSpacing = requestedHorizontalSpacing + spaceLeftOver;\n }\n break;\n }\n break;\n }\n return didNotInitiallyFit;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n let widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = View.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = View.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode == View.MeasureSpec.UNSPECIFIED) {\n if (this.mColumnWidth > 0) {\n widthSize = this.mColumnWidth + this.mListPadding.left + this.mListPadding.right;\n }\n else {\n widthSize = this.mListPadding.left + this.mListPadding.right;\n }\n widthSize += this.getVerticalScrollbarWidth();\n }\n let childWidth = widthSize - this.mListPadding.left - this.mListPadding.right;\n let didNotInitiallyFit = this.determineColumns(childWidth);\n let childHeight = 0;\n let childState = 0;\n this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount();\n const count = this.mItemCount;\n if (count > 0) {\n const child = this.obtainView(0, this.mIsScrap);\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n child.setLayoutParams(p);\n }\n p.viewType = this.mAdapter.getItemViewType(0);\n p.forceAdd = true;\n let childHeightSpec = GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 0, p.height);\n let childWidthSpec = GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(this.mColumnWidth, View.MeasureSpec.EXACTLY), 0, p.width);\n child.measure(childWidthSpec, childHeightSpec);\n childHeight = child.getMeasuredHeight();\n childState = GridView.combineMeasuredStates(childState, child.getMeasuredState());\n if (this.mRecycler.shouldRecycleViewType(p.viewType)) {\n this.mRecycler.addScrapView(child, -1);\n }\n }\n if (heightMode == View.MeasureSpec.UNSPECIFIED) {\n heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2;\n }\n if (heightMode == View.MeasureSpec.AT_MOST) {\n let ourSize = this.mListPadding.top + this.mListPadding.bottom;\n const numColumns = this.mNumColumns;\n for (let i = 0; i < count; i += numColumns) {\n ourSize += childHeight;\n if (i + numColumns < count) {\n ourSize += this.mVerticalSpacing;\n }\n if (ourSize >= heightSize) {\n ourSize = heightSize;\n break;\n }\n }\n heightSize = ourSize;\n }\n if (widthMode == View.MeasureSpec.AT_MOST && this.mRequestedNumColumns != GridView.AUTO_FIT) {\n let ourSize = (this.mRequestedNumColumns * this.mColumnWidth) + ((this.mRequestedNumColumns - 1) * this.mHorizontalSpacing) + this.mListPadding.left + this.mListPadding.right;\n if (ourSize > widthSize || didNotInitiallyFit) {\n widthSize |= GridView.MEASURED_STATE_TOO_SMALL;\n }\n }\n this.setMeasuredDimension(widthSize, heightSize);\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n layoutChildren() {\n const blockLayoutRequests = this.mBlockLayoutRequests;\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = true;\n }\n try {\n super.layoutChildren();\n this.invalidate();\n if (this.mAdapter == null) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n const childrenTop = this.mListPadding.top;\n const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom;\n let childCount = this.getChildCount();\n let index;\n let delta = 0;\n let sel;\n let oldSel = null;\n let oldFirst = null;\n let newSel = null;\n switch (this.mLayoutMode) {\n case GridView.LAYOUT_SET_SELECTION:\n index = this.mNextSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n newSel = this.getChildAt(index);\n }\n break;\n case GridView.LAYOUT_FORCE_TOP:\n case GridView.LAYOUT_FORCE_BOTTOM:\n case GridView.LAYOUT_SPECIFIC:\n case GridView.LAYOUT_SYNC:\n break;\n case GridView.LAYOUT_MOVE_SELECTION:\n if (this.mNextSelectedPosition >= 0) {\n delta = this.mNextSelectedPosition - this.mSelectedPosition;\n }\n break;\n default:\n index = this.mSelectedPosition - this.mFirstPosition;\n if (index >= 0 && index < childCount) {\n oldSel = this.getChildAt(index);\n }\n oldFirst = this.getChildAt(0);\n }\n let dataChanged = this.mDataChanged;\n if (dataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n this.invokeOnItemScrollListener();\n return;\n }\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n const firstPosition = this.mFirstPosition;\n const recycleBin = this.mRecycler;\n if (dataChanged) {\n for (let i = 0; i < childCount; i++) {\n recycleBin.addScrapView(this.getChildAt(i), firstPosition + i);\n }\n }\n else {\n recycleBin.fillActiveViews(childCount, firstPosition);\n }\n this.detachAllViewsFromParent();\n recycleBin.removeSkippedScrap();\n switch (this.mLayoutMode) {\n case GridView.LAYOUT_SET_SELECTION:\n if (newSel != null) {\n sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom);\n }\n else {\n sel = this.fillSelection(childrenTop, childrenBottom);\n }\n break;\n case GridView.LAYOUT_FORCE_TOP:\n this.mFirstPosition = 0;\n sel = this.fillFromTop(childrenTop);\n this.adjustViewsUpOrDown();\n break;\n case GridView.LAYOUT_FORCE_BOTTOM:\n sel = this.fillUp(this.mItemCount - 1, childrenBottom);\n this.adjustViewsUpOrDown();\n break;\n case GridView.LAYOUT_SPECIFIC:\n sel = this.fillSpecific(this.mSelectedPosition, this.mSpecificTop);\n break;\n case GridView.LAYOUT_SYNC:\n sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop);\n break;\n case GridView.LAYOUT_MOVE_SELECTION:\n sel = this.moveSelection(delta, childrenTop, childrenBottom);\n break;\n default:\n if (childCount == 0) {\n if (!this.mStackFromBottom) {\n this.setSelectedPositionInt(this.mAdapter == null || this.isInTouchMode() ? GridView.INVALID_POSITION : 0);\n sel = this.fillFromTop(childrenTop);\n }\n else {\n const last = this.mItemCount - 1;\n this.setSelectedPositionInt(this.mAdapter == null || this.isInTouchMode() ? GridView.INVALID_POSITION : last);\n sel = this.fillFromBottom(last, childrenBottom);\n }\n }\n else {\n if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop());\n }\n else if (this.mFirstPosition < this.mItemCount) {\n sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop());\n }\n else {\n sel = this.fillSpecific(0, childrenTop);\n }\n }\n break;\n }\n recycleBin.scrapActiveViews();\n if (sel != null) {\n this.positionSelector(GridView.INVALID_POSITION, sel);\n this.mSelectedTop = sel.getTop();\n }\n else if (this.mTouchMode > GridView.TOUCH_MODE_DOWN && this.mTouchMode < GridView.TOUCH_MODE_SCROLL) {\n let child = this.getChildAt(this.mMotionPosition - this.mFirstPosition);\n if (child != null)\n this.positionSelector(this.mMotionPosition, child);\n }\n else {\n this.mSelectedTop = 0;\n this.mSelectorRect.setEmpty();\n }\n this.mLayoutMode = GridView.LAYOUT_NORMAL;\n this.mDataChanged = false;\n if (this.mPositionScrollAfterLayout != null) {\n this.post(this.mPositionScrollAfterLayout);\n this.mPositionScrollAfterLayout = null;\n }\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n this.updateScrollIndicators();\n if (this.mItemCount > 0) {\n this.checkSelectionChanged();\n }\n this.invokeOnItemScrollListener();\n }\n finally {\n if (!blockLayoutRequests) {\n this.mBlockLayoutRequests = false;\n }\n }\n }\n makeAndAddView(position, y, flow, childrenLeft, selected, where) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.getActiveView(position);\n if (child != null) {\n this.setupChild(child, position, y, flow, childrenLeft, selected, true, where);\n return child;\n }\n }\n child = this.obtainView(position, this.mIsScrap);\n this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0], where);\n return child;\n }\n setupChild(child, position, y, flow, childrenLeft, selected, recycled, where) {\n Trace.traceBegin(Trace.TRACE_TAG_VIEW, \"setupGridItem\");\n let isSelected = selected && this.shouldShowSelector();\n const updateChildSelected = isSelected != child.isSelected();\n const mode = this.mTouchMode;\n const isPressed = mode > GridView.TOUCH_MODE_DOWN && mode < GridView.TOUCH_MODE_SCROLL && this.mMotionPosition == position;\n const updateChildPressed = isPressed != child.isPressed();\n let needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();\n let p = child.getLayoutParams();\n if (p == null) {\n p = this.generateDefaultLayoutParams();\n }\n p.viewType = this.mAdapter.getItemViewType(position);\n if (recycled && !p.forceAdd) {\n this.attachViewToParent(child, where, p);\n }\n else {\n p.forceAdd = false;\n this.addViewInLayout(child, where, p, true);\n }\n if (updateChildSelected) {\n child.setSelected(isSelected);\n if (isSelected) {\n this.requestFocus();\n }\n }\n if (updateChildPressed) {\n child.setPressed(isPressed);\n }\n if (this.mChoiceMode != GridView.CHOICE_MODE_NONE && this.mCheckStates != null) {\n if (child['setChecked']) {\n child.setChecked(this.mCheckStates.get(position));\n }\n else {\n child.setActivated(this.mCheckStates.get(position));\n }\n }\n if (needToMeasure) {\n let childHeightSpec = ViewGroup.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 0, p.height);\n let childWidthSpec = ViewGroup.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(this.mColumnWidth, View.MeasureSpec.EXACTLY), 0, p.width);\n child.measure(childWidthSpec, childHeightSpec);\n }\n else {\n this.cleanupLayoutState(child);\n }\n const w = child.getMeasuredWidth();\n const h = child.getMeasuredHeight();\n let childLeft;\n const childTop = flow ? y : y - h;\n const absoluteGravity = this.mGravity;\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.LEFT:\n childLeft = childrenLeft;\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = childrenLeft + ((this.mColumnWidth - w) / 2);\n break;\n case Gravity.RIGHT:\n childLeft = childrenLeft + this.mColumnWidth - w;\n break;\n default:\n childLeft = childrenLeft;\n break;\n }\n if (needToMeasure) {\n const childRight = childLeft + w;\n const childBottom = childTop + h;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n else {\n child.offsetLeftAndRight(childLeft - child.getLeft());\n child.offsetTopAndBottom(childTop - child.getTop());\n }\n if (this.mCachingStarted) {\n child.setDrawingCacheEnabled(true);\n }\n if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) {\n child.jumpDrawablesToCurrentState();\n }\n Trace.traceEnd(Trace.TRACE_TAG_VIEW);\n }\n setSelection(position) {\n if (!this.isInTouchMode()) {\n this.setNextSelectedPositionInt(position);\n }\n else {\n this.mResurrectToPosition = position;\n }\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.requestLayout();\n }\n setSelectionInt(position) {\n let previousSelectedPosition = this.mNextSelectedPosition;\n if (this.mPositionScroller != null) {\n this.mPositionScroller.stop();\n }\n this.setNextSelectedPositionInt(position);\n this.layoutChildren();\n const next = this.mStackFromBottom ? this.mItemCount - 1 - this.mNextSelectedPosition : this.mNextSelectedPosition;\n const previous = this.mStackFromBottom ? this.mItemCount - 1 - previousSelectedPosition : previousSelectedPosition;\n const nextRow = next / this.mNumColumns;\n const previousRow = previous / this.mNumColumns;\n if (nextRow != previousRow) {\n this.awakenScrollBars();\n }\n }\n onKeyDown(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return this.commonKey(keyCode, repeatCount, event);\n }\n onKeyUp(keyCode, event) {\n return this.commonKey(keyCode, 1, event);\n }\n commonKey(keyCode, count, event) {\n if (this.mAdapter == null) {\n return false;\n }\n if (this.mDataChanged) {\n this.layoutChildren();\n }\n let handled = false;\n let action = event.getAction();\n if (action != KeyEvent.ACTION_UP) {\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_LEFT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_RIGHT);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded();\n if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) {\n this.keyPressed();\n handled = true;\n }\n }\n break;\n case KeyEvent.KEYCODE_SPACE:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_UP:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_UP);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_PAGE_DOWN:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.pageScroll(GridView.FOCUS_DOWN);\n }\n else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_HOME:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_UP);\n }\n break;\n case KeyEvent.KEYCODE_MOVE_END:\n if (event.hasNoModifiers()) {\n handled = this.resurrectSelectionIfNeeded() || this.fullScroll(GridView.FOCUS_DOWN);\n }\n break;\n case KeyEvent.KEYCODE_TAB:\n break;\n }\n }\n if (handled) {\n return true;\n }\n switch (action) {\n case KeyEvent.ACTION_DOWN:\n return super.onKeyDown(keyCode, event);\n case KeyEvent.ACTION_UP:\n return super.onKeyUp(keyCode, event);\n default:\n return false;\n }\n }\n pageScroll(direction) {\n let nextPage = -1;\n if (direction == GridView.FOCUS_UP) {\n nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount());\n }\n else if (direction == GridView.FOCUS_DOWN) {\n nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount());\n }\n if (nextPage >= 0) {\n this.setSelectionInt(nextPage);\n this.invokeOnItemScrollListener();\n this.awakenScrollBars();\n return true;\n }\n return false;\n }\n fullScroll(direction) {\n let moved = false;\n if (direction == GridView.FOCUS_UP) {\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n this.setSelectionInt(0);\n this.invokeOnItemScrollListener();\n moved = true;\n }\n else if (direction == GridView.FOCUS_DOWN) {\n this.mLayoutMode = GridView.LAYOUT_SET_SELECTION;\n this.setSelectionInt(this.mItemCount - 1);\n this.invokeOnItemScrollListener();\n moved = true;\n }\n if (moved) {\n this.awakenScrollBars();\n }\n return moved;\n }\n arrowScroll(direction) {\n const selectedPosition = this.mSelectedPosition;\n const numColumns = this.mNumColumns;\n let startOfRowPos;\n let endOfRowPos;\n let moved = false;\n if (!this.mStackFromBottom) {\n startOfRowPos = Math.floor(selectedPosition / numColumns) * numColumns;\n endOfRowPos = Math.min(startOfRowPos + numColumns - 1, this.mItemCount - 1);\n }\n else {\n const invertedSelection = this.mItemCount - 1 - selectedPosition;\n endOfRowPos = this.mItemCount - 1 - (invertedSelection / numColumns) * numColumns;\n startOfRowPos = Math.max(0, endOfRowPos - numColumns + 1);\n }\n switch (direction) {\n case GridView.FOCUS_UP:\n if (startOfRowPos > 0) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.max(0, selectedPosition - numColumns));\n moved = true;\n }\n break;\n case GridView.FOCUS_DOWN:\n if (endOfRowPos < this.mItemCount - 1) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.min(selectedPosition + numColumns, this.mItemCount - 1));\n moved = true;\n }\n break;\n case GridView.FOCUS_LEFT:\n if (selectedPosition > startOfRowPos) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.max(0, selectedPosition - 1));\n moved = true;\n }\n break;\n case GridView.FOCUS_RIGHT:\n if (selectedPosition < endOfRowPos) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(Math.min(selectedPosition + 1, this.mItemCount - 1));\n moved = true;\n }\n break;\n }\n if (moved) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n this.invokeOnItemScrollListener();\n }\n if (moved) {\n this.awakenScrollBars();\n }\n return moved;\n }\n sequenceScroll(direction) {\n let selectedPosition = this.mSelectedPosition;\n let numColumns = this.mNumColumns;\n let count = this.mItemCount;\n let startOfRow;\n let endOfRow;\n if (!this.mStackFromBottom) {\n startOfRow = (selectedPosition / numColumns) * numColumns;\n endOfRow = Math.min(startOfRow + numColumns - 1, count - 1);\n }\n else {\n let invertedSelection = count - 1 - selectedPosition;\n endOfRow = count - 1 - (invertedSelection / numColumns) * numColumns;\n startOfRow = Math.max(0, endOfRow - numColumns + 1);\n }\n let moved = false;\n let showScroll = false;\n switch (direction) {\n case GridView.FOCUS_FORWARD:\n if (selectedPosition < count - 1) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(selectedPosition + 1);\n moved = true;\n showScroll = selectedPosition == endOfRow;\n }\n break;\n case GridView.FOCUS_BACKWARD:\n if (selectedPosition > 0) {\n this.mLayoutMode = GridView.LAYOUT_MOVE_SELECTION;\n this.setSelectionInt(selectedPosition - 1);\n moved = true;\n showScroll = selectedPosition == startOfRow;\n }\n break;\n }\n if (moved) {\n this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction));\n this.invokeOnItemScrollListener();\n }\n if (showScroll) {\n this.awakenScrollBars();\n }\n return moved;\n }\n onFocusChanged(gainFocus, direction, previouslyFocusedRect) {\n super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);\n let closestChildIndex = -1;\n if (gainFocus && previouslyFocusedRect != null) {\n previouslyFocusedRect.offset(this.mScrollX, this.mScrollY);\n let otherRect = this.mTempRect;\n let minDistance = Integer.MAX_VALUE;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n if (!this.isCandidateSelection(i, direction)) {\n continue;\n }\n const other = this.getChildAt(i);\n other.getDrawingRect(otherRect);\n this.offsetDescendantRectToMyCoords(other, otherRect);\n let distance = GridView.getDistance(previouslyFocusedRect, otherRect, direction);\n if (distance < minDistance) {\n minDistance = distance;\n closestChildIndex = i;\n }\n }\n }\n if (closestChildIndex >= 0) {\n this.setSelection(closestChildIndex + this.mFirstPosition);\n }\n else {\n this.requestLayout();\n }\n }\n isCandidateSelection(childIndex, direction) {\n const count = this.getChildCount();\n const invertedIndex = count - 1 - childIndex;\n let rowStart;\n let rowEnd;\n if (!this.mStackFromBottom) {\n rowStart = childIndex - (childIndex % this.mNumColumns);\n rowEnd = Math.max(rowStart + this.mNumColumns - 1, count);\n }\n else {\n rowEnd = count - 1 - (invertedIndex - (invertedIndex % this.mNumColumns));\n rowStart = Math.max(0, rowEnd - this.mNumColumns + 1);\n }\n switch (direction) {\n case View.FOCUS_RIGHT:\n return childIndex == rowStart;\n case View.FOCUS_DOWN:\n return rowStart == 0;\n case View.FOCUS_LEFT:\n return childIndex == rowEnd;\n case View.FOCUS_UP:\n return rowEnd == count - 1;\n case View.FOCUS_FORWARD:\n return childIndex == rowStart && rowStart == 0;\n case View.FOCUS_BACKWARD:\n return childIndex == rowEnd && rowEnd == count - 1;\n default:\n throw Error(`new IllegalArgumentException(\"direction must be one of \" + \"{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, \" + \"FOCUS_FORWARD, FOCUS_BACKWARD}.\")`);\n }\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n this.mGravity = gravity;\n this.requestLayoutIfNecessary();\n }\n }\n getGravity() {\n return this.mGravity;\n }\n setHorizontalSpacing(horizontalSpacing) {\n if (horizontalSpacing != this.mRequestedHorizontalSpacing) {\n this.mRequestedHorizontalSpacing = horizontalSpacing;\n this.requestLayoutIfNecessary();\n }\n }\n getHorizontalSpacing() {\n return this.mHorizontalSpacing;\n }\n getRequestedHorizontalSpacing() {\n return this.mRequestedHorizontalSpacing;\n }\n setVerticalSpacing(verticalSpacing) {\n if (verticalSpacing != this.mVerticalSpacing) {\n this.mVerticalSpacing = verticalSpacing;\n this.requestLayoutIfNecessary();\n }\n }\n getVerticalSpacing() {\n return this.mVerticalSpacing;\n }\n setStretchMode(stretchMode) {\n if (stretchMode != this.mStretchMode) {\n this.mStretchMode = stretchMode;\n this.requestLayoutIfNecessary();\n }\n }\n getStretchMode() {\n return this.mStretchMode;\n }\n setColumnWidth(columnWidth) {\n if (columnWidth != this.mRequestedColumnWidth) {\n this.mRequestedColumnWidth = columnWidth;\n this.requestLayoutIfNecessary();\n }\n }\n getColumnWidth() {\n return this.mColumnWidth;\n }\n getRequestedColumnWidth() {\n return this.mRequestedColumnWidth;\n }\n setNumColumns(numColumns) {\n if (numColumns != this.mRequestedNumColumns) {\n this.mRequestedNumColumns = numColumns;\n this.requestLayoutIfNecessary();\n }\n }\n getNumColumns() {\n return this.mNumColumns;\n }\n adjustViewsUpOrDown() {\n const childCount = this.getChildCount();\n if (childCount > 0) {\n let delta;\n let child;\n if (!this.mStackFromBottom) {\n child = this.getChildAt(0);\n delta = child.getTop() - this.mListPadding.top;\n if (this.mFirstPosition != 0) {\n delta -= this.mVerticalSpacing;\n }\n if (delta < 0) {\n delta = 0;\n }\n }\n else {\n child = this.getChildAt(childCount - 1);\n delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom);\n if (this.mFirstPosition + childCount < this.mItemCount) {\n delta += this.mVerticalSpacing;\n }\n if (delta > 0) {\n delta = 0;\n }\n }\n if (delta != 0) {\n this.offsetChildrenTopAndBottom(-delta);\n }\n }\n }\n computeVerticalScrollExtent() {\n const count = this.getChildCount();\n if (count > 0) {\n const numColumns = this.mNumColumns;\n const rowCount = (count + numColumns - 1) / numColumns;\n let extent = rowCount * 100;\n let view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n extent += (top * 100) / height;\n }\n view = this.getChildAt(count - 1);\n const bottom = view.getBottom();\n height = view.getHeight();\n if (height > 0) {\n extent -= ((bottom - this.getHeight()) * 100) / height;\n }\n return extent;\n }\n return 0;\n }\n computeVerticalScrollOffset() {\n if (this.mFirstPosition >= 0 && this.getChildCount() > 0) {\n const view = this.getChildAt(0);\n const top = view.getTop();\n let height = view.getHeight();\n if (height > 0) {\n const numColumns = this.mNumColumns;\n const rowCount = (this.mItemCount + numColumns - 1) / numColumns;\n const oddItemsOnFirstRow = this.isStackFromBottom() ? ((rowCount * numColumns) - this.mItemCount) : 0;\n const whichRow = (this.mFirstPosition + oddItemsOnFirstRow) / numColumns;\n return Math.max(whichRow * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * rowCount * 100)), 0);\n }\n }\n return 0;\n }\n computeVerticalScrollRange() {\n const numColumns = this.mNumColumns;\n const rowCount = (this.mItemCount + numColumns - 1) / numColumns;\n let result = Math.max(rowCount * 100, 0);\n if (this.mScrollY != 0) {\n result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * rowCount * 100)));\n }\n return result;\n }\n }\n GridView.NO_STRETCH = 0;\n GridView.STRETCH_SPACING = 1;\n GridView.STRETCH_COLUMN_WIDTH = 2;\n GridView.STRETCH_SPACING_UNIFORM = 3;\n GridView.AUTO_FIT = -1;\n widget.GridView = GridView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar java;\n(function (java) {\n var lang;\n (function (lang) {\n var Comparable;\n (function (Comparable) {\n function isImpl(obj) {\n return obj && obj['compareTo'];\n }\n Comparable.isImpl = isImpl;\n })(Comparable = lang.Comparable || (lang.Comparable = {}));\n })(lang = java.lang || (java.lang = {}));\n})(java || (java = {}));\nvar java;\n(function (java) {\n var util;\n (function (util) {\n var Comparable = java.lang.Comparable;\n class Collections {\n static emptyList() {\n return Collections.EMPTY_LIST;\n }\n static sort(list, c) {\n if (c) {\n list.sort((t1, t2) => {\n return c.compare(t1, t2);\n });\n }\n else {\n list.sort((t1, t2) => {\n if (Comparable.isImpl(t1) && Comparable.isImpl(t2)) {\n return t1.compareTo(t2);\n }\n return 0;\n });\n }\n }\n }\n Collections.EMPTY_LIST = new util.ArrayList();\n util.Collections = Collections;\n })(util = java.util || (java.util = {}));\n})(java || (java = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Color = android.graphics.Color;\n var Paint = android.graphics.Paint;\n var Align = android.graphics.Paint.Align;\n var SparseArray = android.util.SparseArray;\n var TypedValue = android.util.TypedValue;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var View = android.view.View;\n var ViewConfiguration = android.view.ViewConfiguration;\n var DecelerateInterpolator = android.view.animation.DecelerateInterpolator;\n var Integer = java.lang.Integer;\n var LinearLayout = android.widget.LinearLayout;\n var OverScroller = android.widget.OverScroller;\n class NumberPicker extends LinearLayout {\n constructor(context, bindElement, defStyle = android.R.attr.numberPickerStyle) {\n super(context, bindElement, defStyle);\n this.SELECTOR_WHEEL_ITEM_COUNT = 3;\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectionDividersDistance = 0;\n this.mMinHeight_ = NumberPicker.SIZE_UNSPECIFIED;\n this.mMaxHeight = NumberPicker.SIZE_UNSPECIFIED;\n this.mMinWidth_ = NumberPicker.SIZE_UNSPECIFIED;\n this.mMaxWidth = NumberPicker.SIZE_UNSPECIFIED;\n this.mTextSize = 0;\n this.mSelectorTextGapHeight = 0;\n this.mMinValue = 0;\n this.mMaxValue = 0;\n this.mValue = 0;\n this.mLongPressUpdateInterval = NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;\n this.mSelectorIndexToStringCache = new SparseArray();\n this.mSelectorElementHeight = 0;\n this.mInitialScrollOffset = Integer.MIN_VALUE;\n this.mCurrentScrollOffset = 0;\n this.mPreviousScrollerY = 0;\n this.mLastDownEventY = 0;\n this.mLastDownEventTime = 0;\n this.mLastDownOrMoveEventY = 0;\n this.mMinimumFlingVelocity = 0;\n this.mMaximumFlingVelocity = 0;\n this.mSolidColor = 0;\n this.mSelectionDividerHeight = 0;\n this.mScrollState = NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;\n this.mTopSelectionDividerTop = 0;\n this.mBottomSelectionDividerBottom = 0;\n this.mLastHoveredChildVirtualViewId = 0;\n this.mLastHandledDownDpadKeyCode = -1;\n let attributesArray = context.obtainStyledAttributes(bindElement, defStyle);\n this.mHasSelectorWheel = true;\n this.mSolidColor = attributesArray.getColor('solidColor', 0);\n this.mSelectionDivider = attributesArray.getDrawable('selectionDivider');\n const defSelectionDividerHeight = Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT, this.getResources().getDisplayMetrics()));\n this.mSelectionDividerHeight = attributesArray.getDimensionPixelSize('selectionDividerHeight', defSelectionDividerHeight);\n const defSelectionDividerDistance = Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE, this.getResources().getDisplayMetrics()));\n this.mSelectionDividersDistance = attributesArray.getDimensionPixelSize('selectionDividersDistance', defSelectionDividerDistance);\n this.mMinHeight = attributesArray.getDimensionPixelSize('internalMinHeight', NumberPicker.SIZE_UNSPECIFIED);\n this.mMaxHeight = attributesArray.getDimensionPixelSize('internalMaxHeight', NumberPicker.SIZE_UNSPECIFIED);\n if (this.mMinHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMaxHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMinHeight > this.mMaxHeight) {\n throw Error(`new IllegalArgumentException(\"minHeight > maxHeight\")`);\n }\n this.mMinWidth = attributesArray.getDimensionPixelSize('internalMinWidth', NumberPicker.SIZE_UNSPECIFIED);\n this.mMaxWidth = attributesArray.getDimensionPixelSize('internalMaxWidth', NumberPicker.SIZE_UNSPECIFIED);\n if (this.mMinWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMaxWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMinWidth > this.mMaxWidth) {\n throw Error(`new IllegalArgumentException(\"minWidth > maxWidth\")`);\n }\n this.mComputeMaxWidth = (this.mMaxWidth == NumberPicker.SIZE_UNSPECIFIED);\n this.mVirtualButtonPressedDrawable = attributesArray.getDrawable('virtualButtonPressedDrawable');\n this.mTextSize = attributesArray.getDimensionPixelSize('textSize', Math.floor(16 * this.getResources().getDisplayMetrics().density));\n let paint = new Paint();\n paint.setAntiAlias(true);\n paint.setTextAlign(Align.CENTER);\n paint.setTextSize(this.mTextSize);\n paint.setColor(attributesArray.getColor('textColor', Color.DKGRAY));\n this.mSelectorWheelPaint = paint;\n this.SELECTOR_WHEEL_ITEM_COUNT = attributesArray.getInt('itemCount', this.SELECTOR_WHEEL_ITEM_COUNT);\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectorIndices = androidui.util.ArrayCreator.newNumberArray(this.SELECTOR_WHEEL_ITEM_COUNT);\n if (this.mMinHeight_ != NumberPicker.SIZE_UNSPECIFIED && this.mMaxHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMinHeight_ > this.mMaxHeight) {\n throw Error(`new IllegalArgumentException(\"minHeight > maxHeight\")`);\n }\n if (this.mMinWidth_ != NumberPicker.SIZE_UNSPECIFIED && this.mMaxWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMinWidth_ > this.mMaxWidth) {\n throw Error(`new IllegalArgumentException(\"minWidth > maxWidth\")`);\n }\n this.mComputeMaxWidth = (this.mMaxWidth == NumberPicker.SIZE_UNSPECIFIED);\n this.setMinValue(attributesArray.getInt('minValue', this.mMinValue));\n this.setMaxValue(attributesArray.getInt('maxValue', this.mMaxValue));\n attributesArray.recycle();\n this.mPressedStateHelper = new NumberPicker.PressedStateHelper(this);\n this.setWillNotDraw(!this.mHasSelectorWheel);\n let configuration = ViewConfiguration.get();\n this.mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity() / NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;\n this.mFlingScroller = new OverScroller(null, true);\n this.mAdjustScroller = new OverScroller(new DecelerateInterpolator(2.5));\n this.updateInputTextView();\n }\n static getTwoDigitFormatter() {\n if (!NumberPicker.sTwoDigitFormatter) {\n NumberPicker.sTwoDigitFormatter = new NumberPicker.TwoDigitFormatter();\n }\n return NumberPicker.sTwoDigitFormatter;\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('solidColor', {\n setter(v, value, attrBinder) {\n v.mSolidColor = attrBinder.parseColor(value, v.mSolidColor);\n v.invalidate();\n }, getter(v) {\n return v.mSolidColor;\n }\n }).set('selectionDivider', {\n setter(v, value, attrBinder) {\n v.mSelectionDivider = attrBinder.parseDrawable(value);\n v.invalidate();\n }, getter(v) {\n return v.mSelectionDivider;\n }\n }).set('selectionDividerHeight', {\n setter(v, value, attrBinder) {\n v.mSelectionDividerHeight = attrBinder.parseNumberPixelSize(value, v.mSelectionDividerHeight);\n v.invalidate();\n }, getter(v) {\n return v.mSelectionDividerHeight;\n }\n }).set('selectionDividersDistance', {\n setter(v, value, attrBinder) {\n v.mSelectionDividersDistance = attrBinder.parseNumberPixelSize(value, v.mSelectionDividersDistance);\n v.invalidate();\n }, getter(v) {\n return v.mSelectionDividersDistance;\n }\n }).set('internalMinHeight', {\n setter(v, value, attrBinder) {\n v.mMinHeight_ = attrBinder.parseNumberPixelSize(value, v.mMinHeight_);\n v.invalidate();\n }, getter(v) {\n return v.mMinHeight_;\n }\n }).set('internalMaxHeight', {\n setter(v, value, attrBinder) {\n v.mMaxHeight = attrBinder.parseNumberPixelSize(value, v.mMaxHeight);\n v.invalidate();\n }, getter(v) {\n return v.mMaxHeight;\n }\n }).set('internalMinWidth', {\n setter(v, value, attrBinder) {\n v.mMinWidth_ = attrBinder.parseNumberPixelSize(value, v.mMinWidth_);\n v.invalidate();\n }, getter(v) {\n return v.mMinWidth_;\n }\n }).set('internalMaxWidth', {\n setter(v, value, attrBinder) {\n v.mMaxWidth = attrBinder.parseNumberPixelSize(value, v.mMaxWidth);\n v.invalidate();\n }, getter(v) {\n return v.mMaxWidth;\n }\n }).set('virtualButtonPressedDrawable', {\n setter(v, value, attrBinder) {\n v.mVirtualButtonPressedDrawable = attrBinder.parseDrawable(value);\n v.invalidate();\n }, getter(v) {\n return v.mVirtualButtonPressedDrawable;\n }\n });\n }\n onLayout(changed, left, top, right, bottom) {\n if (!this.mHasSelectorWheel) {\n super.onLayout(changed, left, top, right, bottom);\n return;\n }\n const msrdWdth = this.getMeasuredWidth();\n const msrdHght = this.getMeasuredHeight();\n if (changed) {\n this.initializeSelectorWheel();\n this.initializeFadingEdges();\n this.mTopSelectionDividerTop = (this.getHeight() - this.mSelectionDividersDistance) / 2 - this.mSelectionDividerHeight;\n this.mBottomSelectionDividerBottom = this.mTopSelectionDividerTop + 2 * this.mSelectionDividerHeight + this.mSelectionDividersDistance;\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n if (!this.mHasSelectorWheel) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n return;\n }\n const newWidthMeasureSpec = this.makeMeasureSpec(widthMeasureSpec, this.mMaxWidth);\n const newHeightMeasureSpec = this.makeMeasureSpec(heightMeasureSpec, this.mMaxHeight);\n super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec);\n const widthSize = this.resolveSizeAndStateRespectingMinSize(this.mMinWidth_, this.getMeasuredWidth(), widthMeasureSpec);\n const heightSize = this.resolveSizeAndStateRespectingMinSize(this.mMinHeight_, this.getMeasuredHeight(), heightMeasureSpec);\n this.setMeasuredDimension(widthSize, heightSize);\n }\n moveToFinalScrollerPosition(scroller) {\n scroller.forceFinished(true);\n let amountToScroll = scroller.getFinalY() - scroller.getCurrY();\n let futureScrollOffset = (this.mCurrentScrollOffset + amountToScroll) % this.mSelectorElementHeight;\n let overshootAdjustment = this.mInitialScrollOffset - futureScrollOffset;\n if (overshootAdjustment != 0) {\n if (Math.abs(overshootAdjustment) > this.mSelectorElementHeight / 2) {\n if (overshootAdjustment > 0) {\n overshootAdjustment -= this.mSelectorElementHeight;\n }\n else {\n overshootAdjustment += this.mSelectorElementHeight;\n }\n }\n amountToScroll += overshootAdjustment;\n this.scrollBy(0, amountToScroll);\n return true;\n }\n return false;\n }\n onInterceptTouchEvent(event) {\n if (!this.mHasSelectorWheel || !this.isEnabled()) {\n return false;\n }\n const action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n this.removeAllCallbacks();\n this.mLastDownOrMoveEventY = this.mLastDownEventY = event.getY();\n this.mLastDownEventTime = event.getEventTime();\n this.mIngonreMoveEvents = false;\n this.mShowSoftInputOnTap = false;\n if (this.mLastDownEventY < this.mTopSelectionDividerTop) {\n if (this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);\n }\n }\n else if (this.mLastDownEventY > this.mBottomSelectionDividerBottom) {\n if (this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n this.mPressedStateHelper.buttonPressDelayed(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);\n }\n }\n this.getParent().requestDisallowInterceptTouchEvent(true);\n if (!this.mFlingScroller.isFinished()) {\n this.mFlingScroller.forceFinished(true);\n this.mAdjustScroller.forceFinished(true);\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else if (!this.mAdjustScroller.isFinished()) {\n this.mFlingScroller.forceFinished(true);\n this.mAdjustScroller.forceFinished(true);\n }\n else if (this.mLastDownEventY < this.mTopSelectionDividerTop) {\n this.hideSoftInput();\n this.postChangeCurrentByOneFromLongPress(false, ViewConfiguration.getLongPressTimeout());\n }\n else if (this.mLastDownEventY > this.mBottomSelectionDividerBottom) {\n this.hideSoftInput();\n this.postChangeCurrentByOneFromLongPress(true, ViewConfiguration.getLongPressTimeout());\n }\n else {\n this.mShowSoftInputOnTap = true;\n this.postBeginSoftInputOnLongPressCommand();\n }\n return true;\n }\n }\n return false;\n }\n onTouchEvent(event) {\n if (!this.isEnabled() || !this.mHasSelectorWheel) {\n return false;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(event);\n let action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mIngonreMoveEvents) {\n break;\n }\n let currentMoveY = event.getY();\n if (this.mScrollState != NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {\n let deltaDownY = Math.floor(Math.abs(currentMoveY - this.mLastDownEventY));\n if (deltaDownY > this.mTouchSlop) {\n this.removeAllCallbacks();\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);\n }\n }\n else {\n let deltaMoveY = Math.floor(((currentMoveY - this.mLastDownOrMoveEventY)));\n this.scrollBy(0, deltaMoveY);\n this.invalidate();\n }\n this.mLastDownOrMoveEventY = currentMoveY;\n }\n break;\n case MotionEvent.ACTION_UP:\n {\n this.removeBeginSoftInputCommand();\n this.removeChangeCurrentByOneFromLongPress();\n this.mPressedStateHelper.cancel();\n let velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumFlingVelocity);\n let initialVelocity = Math.floor(velocityTracker.getYVelocity());\n if (Math.abs(initialVelocity) > this.mMinimumFlingVelocity) {\n this.fling(initialVelocity);\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_FLING);\n }\n else {\n let eventY = Math.floor(event.getY());\n let deltaMoveY = Math.floor(Math.abs(eventY - this.mLastDownEventY));\n let deltaTime = event.getEventTime() - this.mLastDownEventTime;\n if (deltaMoveY <= this.mTouchSlop && deltaTime < ViewConfiguration.getTapTimeout()) {\n if (this.mShowSoftInputOnTap) {\n this.mShowSoftInputOnTap = false;\n this.showSoftInput();\n }\n else {\n let selectorIndexOffset = (eventY / this.mSelectorElementHeight) - this.SELECTOR_MIDDLE_ITEM_INDEX;\n if (selectorIndexOffset > 0) {\n this.changeValueByOne(true);\n this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_INCREMENT);\n }\n else if (selectorIndexOffset < 0) {\n this.changeValueByOne(false);\n this.mPressedStateHelper.buttonTapped(NumberPicker.PressedStateHelper.BUTTON_DECREMENT);\n }\n }\n }\n else {\n this.ensureScrollWheelAdjusted();\n }\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n return true;\n }\n dispatchTouchEvent(event) {\n const action = event.getActionMasked();\n switch (action) {\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.removeAllCallbacks();\n break;\n }\n return super.dispatchTouchEvent(event);\n }\n dispatchKeyEvent(event) {\n const keyCode = event.getKeyCode();\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_ENTER:\n this.removeAllCallbacks();\n break;\n case KeyEvent.KEYCODE_DPAD_DOWN:\n case KeyEvent.KEYCODE_DPAD_UP:\n if (!this.mHasSelectorWheel) {\n break;\n }\n switch (event.getAction()) {\n case KeyEvent.ACTION_DOWN:\n if (this.mWrapSelectorWheel || (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) ? this.getValue() < this.getMaxValue() : this.getValue() > this.getMinValue()) {\n this.requestFocus();\n this.mLastHandledDownDpadKeyCode = keyCode;\n this.removeAllCallbacks();\n if (this.mFlingScroller.isFinished()) {\n this.changeValueByOne(keyCode == KeyEvent.KEYCODE_DPAD_DOWN);\n }\n return true;\n }\n break;\n case KeyEvent.ACTION_UP:\n if (this.mLastHandledDownDpadKeyCode == keyCode) {\n this.mLastHandledDownDpadKeyCode = -1;\n return true;\n }\n break;\n }\n }\n return super.dispatchKeyEvent(event);\n }\n computeScroll() {\n let scroller = this.mFlingScroller;\n if (scroller.isFinished()) {\n scroller = this.mAdjustScroller;\n if (scroller.isFinished()) {\n return;\n }\n }\n scroller.computeScrollOffset();\n let currentScrollerY = scroller.getCurrY();\n if (this.mPreviousScrollerY == 0) {\n this.mPreviousScrollerY = scroller.getStartY();\n }\n this.scrollBy(0, currentScrollerY - this.mPreviousScrollerY);\n this.mPreviousScrollerY = currentScrollerY;\n if (scroller.isFinished()) {\n this.onScrollerFinished(scroller);\n }\n else {\n this.invalidate();\n }\n }\n setEnabled(enabled) {\n super.setEnabled(enabled);\n if (!this.mHasSelectorWheel) {\n }\n if (!this.mHasSelectorWheel) {\n }\n }\n scrollBy(x, y) {\n let selectorIndices = this.mSelectorIndices;\n if (!this.mWrapSelectorWheel && y > 0 && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] <= this.mMinValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n return;\n }\n if (!this.mWrapSelectorWheel && y < 0 && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] >= this.mMaxValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n return;\n }\n this.mCurrentScrollOffset += y;\n while (this.mCurrentScrollOffset - this.mInitialScrollOffset > this.mSelectorTextGapHeight) {\n this.mCurrentScrollOffset -= this.mSelectorElementHeight;\n this.decrementSelectorIndices(selectorIndices);\n this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX], true);\n if (!this.mWrapSelectorWheel && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] <= this.mMinValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n }\n }\n while (this.mCurrentScrollOffset - this.mInitialScrollOffset < -this.mSelectorTextGapHeight) {\n this.mCurrentScrollOffset += this.mSelectorElementHeight;\n this.incrementSelectorIndices(selectorIndices);\n this.setValueInternal(selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX], true);\n if (!this.mWrapSelectorWheel && selectorIndices[this.SELECTOR_MIDDLE_ITEM_INDEX] >= this.mMaxValue) {\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n }\n }\n }\n computeVerticalScrollOffset() {\n return this.mCurrentScrollOffset;\n }\n computeVerticalScrollRange() {\n return (this.mMaxValue - this.mMinValue + 1) * this.mSelectorElementHeight;\n }\n computeVerticalScrollExtent() {\n return this.getHeight();\n }\n getSolidColor() {\n return this.mSolidColor;\n }\n setOnValueChangedListener(onValueChangedListener) {\n this.mOnValueChangeListener = onValueChangedListener;\n }\n setOnScrollListener(onScrollListener) {\n this.mOnScrollListener = onScrollListener;\n }\n setFormatter(formatter) {\n if (formatter == this.mFormatter) {\n return;\n }\n this.mFormatter = formatter;\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n }\n setValue(value) {\n this.setValueInternal(value, false);\n }\n showSoftInput() {\n }\n hideSoftInput() {\n }\n tryComputeMaxWidth() {\n if (!this.mComputeMaxWidth) {\n return;\n }\n let maxTextWidth = 0;\n if (this.mDisplayedValues == null) {\n let maxDigitWidth = 0;\n for (let i = 0; i <= 9; i++) {\n const digitWidth = this.mSelectorWheelPaint.measureText(NumberPicker.formatNumberWithLocale(i));\n if (digitWidth > maxDigitWidth) {\n maxDigitWidth = digitWidth;\n }\n }\n let numberOfDigits = 0;\n let current = this.mMaxValue;\n while (current > 0) {\n numberOfDigits++;\n current = current / 10;\n }\n maxTextWidth = Math.floor((numberOfDigits * maxDigitWidth));\n }\n else {\n const valueCount = this.mDisplayedValues.length;\n for (let i = 0; i < valueCount; i++) {\n const textWidth = this.mSelectorWheelPaint.measureText(this.mDisplayedValues[i]);\n if (textWidth > maxTextWidth) {\n maxTextWidth = Math.floor(textWidth);\n }\n }\n }\n if (this.mMaxWidth != maxTextWidth) {\n if (maxTextWidth > this.mMinWidth_) {\n this.mMaxWidth = maxTextWidth;\n }\n else {\n this.mMaxWidth = this.mMinWidth_;\n }\n this.invalidate();\n }\n }\n getWrapSelectorWheel() {\n return this.mWrapSelectorWheel;\n }\n setWrapSelectorWheel(wrapSelectorWheel) {\n const wrappingAllowed = (this.mMaxValue - this.mMinValue) >= this.mSelectorIndices.length;\n if ((!wrapSelectorWheel || wrappingAllowed) && wrapSelectorWheel != this.mWrapSelectorWheel) {\n this.mWrapSelectorWheel = wrapSelectorWheel;\n }\n }\n setOnLongPressUpdateInterval(intervalMillis) {\n this.mLongPressUpdateInterval = intervalMillis;\n }\n getValue() {\n return this.mValue;\n }\n getMinValue() {\n return this.mMinValue;\n }\n setMinValue(minValue) {\n if (this.mMinValue == minValue) {\n return;\n }\n if (minValue < 0) {\n throw Error(`new IllegalArgumentException(\"minValue must be >= 0\")`);\n }\n this.mMinValue = minValue;\n if (this.mMinValue > this.mValue) {\n this.mValue = this.mMinValue;\n }\n let wrapSelectorWheel = this.mMaxValue - this.mMinValue > this.mSelectorIndices.length;\n this.setWrapSelectorWheel(wrapSelectorWheel);\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n this.tryComputeMaxWidth();\n this.invalidate();\n }\n getMaxValue() {\n return this.mMaxValue;\n }\n setMaxValue(maxValue) {\n if (this.mMaxValue == maxValue) {\n return;\n }\n if (maxValue < 0) {\n throw Error(`new IllegalArgumentException(\"maxValue must be >= 0\")`);\n }\n this.mMaxValue = maxValue;\n if (this.mMaxValue < this.mValue) {\n this.mValue = this.mMaxValue;\n }\n let wrapSelectorWheel = this.mMaxValue - this.mMinValue > this.mSelectorIndices.length;\n this.setWrapSelectorWheel(wrapSelectorWheel);\n this.initializeSelectorWheelIndices();\n this.updateInputTextView();\n this.tryComputeMaxWidth();\n this.invalidate();\n }\n getDisplayedValues() {\n return this.mDisplayedValues;\n }\n setDisplayedValues(displayedValues) {\n if (this.mDisplayedValues == displayedValues) {\n return;\n }\n this.mDisplayedValues = displayedValues;\n if (this.mDisplayedValues != null) {\n }\n else {\n }\n this.updateInputTextView();\n this.initializeSelectorWheelIndices();\n this.tryComputeMaxWidth();\n }\n getTopFadingEdgeStrength() {\n return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;\n }\n getBottomFadingEdgeStrength() {\n return NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.removeAllCallbacks();\n }\n onDraw(canvas) {\n if (!this.mHasSelectorWheel) {\n super.onDraw(canvas);\n return;\n }\n let x = (this.mRight - this.mLeft) / 2;\n let y = this.mCurrentScrollOffset;\n if (this.mVirtualButtonPressedDrawable != null && this.mScrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {\n if (this.mDecrementVirtualButtonPressed) {\n this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);\n this.mVirtualButtonPressedDrawable.setBounds(0, 0, this.mRight, this.mTopSelectionDividerTop);\n this.mVirtualButtonPressedDrawable.draw(canvas);\n }\n if (this.mIncrementVirtualButtonPressed) {\n this.mVirtualButtonPressedDrawable.setState(NumberPicker.PRESSED_STATE_SET);\n this.mVirtualButtonPressedDrawable.setBounds(0, this.mBottomSelectionDividerBottom, this.mRight, this.mBottom);\n this.mVirtualButtonPressedDrawable.draw(canvas);\n }\n }\n let selectorIndices = this.mSelectorIndices;\n for (let i = 0; i < selectorIndices.length; i++) {\n let selectorIndex = selectorIndices[i];\n let scrollSelectorValue = this.mSelectorIndexToStringCache.get(selectorIndex);\n canvas.drawText(scrollSelectorValue, x, y, this.mSelectorWheelPaint);\n y += this.mSelectorElementHeight;\n }\n if (this.mSelectionDivider != null) {\n let topOfTopDivider = this.mTopSelectionDividerTop;\n let bottomOfTopDivider = topOfTopDivider + this.mSelectionDividerHeight;\n this.mSelectionDivider.setBounds(0, topOfTopDivider, this.mRight, bottomOfTopDivider);\n this.mSelectionDivider.draw(canvas);\n let bottomOfBottomDivider = this.mBottomSelectionDividerBottom;\n let topOfBottomDivider = bottomOfBottomDivider - this.mSelectionDividerHeight;\n this.mSelectionDivider.setBounds(0, topOfBottomDivider, this.mRight, bottomOfBottomDivider);\n this.mSelectionDivider.draw(canvas);\n }\n }\n makeMeasureSpec(measureSpec, maxSize) {\n if (maxSize == NumberPicker.SIZE_UNSPECIFIED) {\n return measureSpec;\n }\n const size = View.MeasureSpec.getSize(measureSpec);\n const mode = View.MeasureSpec.getMode(measureSpec);\n switch (mode) {\n case View.MeasureSpec.EXACTLY:\n return measureSpec;\n case View.MeasureSpec.AT_MOST:\n return View.MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), View.MeasureSpec.EXACTLY);\n case View.MeasureSpec.UNSPECIFIED:\n return View.MeasureSpec.makeMeasureSpec(maxSize, View.MeasureSpec.EXACTLY);\n default:\n throw Error(`new IllegalArgumentException(\"Unknown measure mode: \" + mode)`);\n }\n }\n resolveSizeAndStateRespectingMinSize(minSize, measuredSize, measureSpec) {\n if (minSize != NumberPicker.SIZE_UNSPECIFIED) {\n const desiredWidth = Math.max(minSize, measuredSize);\n return NumberPicker.resolveSizeAndState(desiredWidth, measureSpec, 0);\n }\n else {\n return measuredSize;\n }\n }\n initializeSelectorWheelIndices() {\n this.mSelectorIndexToStringCache.clear();\n let selectorIndices = this.mSelectorIndices;\n let current = this.getValue();\n for (let i = 0; i < this.mSelectorIndices.length; i++) {\n let selectorIndex = Math.floor(current + (i - this.SELECTOR_MIDDLE_ITEM_INDEX));\n if (this.mWrapSelectorWheel) {\n selectorIndex = this.getWrappedSelectorIndex(selectorIndex);\n }\n selectorIndices[i] = selectorIndex;\n this.ensureCachedScrollSelectorValue(selectorIndices[i]);\n }\n }\n setValueInternal(current, notifyChange) {\n if (this.mValue == current) {\n return;\n }\n if (this.mWrapSelectorWheel) {\n current = this.getWrappedSelectorIndex(current);\n }\n else {\n current = Math.max(current, this.mMinValue);\n current = Math.min(current, this.mMaxValue);\n }\n let previous = this.mValue;\n this.mValue = current;\n this.updateInputTextView();\n if (notifyChange) {\n this.notifyChange(previous, current);\n }\n this.initializeSelectorWheelIndices();\n this.invalidate();\n }\n changeValueByOne(increment) {\n if (this.mHasSelectorWheel) {\n if (!this.moveToFinalScrollerPosition(this.mFlingScroller)) {\n this.moveToFinalScrollerPosition(this.mAdjustScroller);\n }\n this.mPreviousScrollerY = 0;\n if (increment) {\n this.mFlingScroller.startScroll(0, 0, 0, -this.mSelectorElementHeight, NumberPicker.SNAP_SCROLL_DURATION);\n }\n else {\n this.mFlingScroller.startScroll(0, 0, 0, this.mSelectorElementHeight, NumberPicker.SNAP_SCROLL_DURATION);\n }\n this.invalidate();\n }\n else {\n if (increment) {\n this.setValueInternal(this.mValue + 1, true);\n }\n else {\n this.setValueInternal(this.mValue - 1, true);\n }\n }\n }\n initializeSelectorWheel() {\n this.initializeSelectorWheelIndices();\n let selectorIndices = this.mSelectorIndices;\n let totalTextHeight = selectorIndices.length * this.mTextSize;\n let totalTextGapHeight = (this.mBottom - this.mTop) - totalTextHeight;\n let textGapCount = selectorIndices.length;\n this.mSelectorTextGapHeight = Math.floor((totalTextGapHeight / textGapCount + 0.5));\n this.mSelectorElementHeight = this.mTextSize + this.mSelectorTextGapHeight;\n let editTextTextPosition = this.getHeight() / 2 + this.mTextSize / 2;\n this.mInitialScrollOffset = editTextTextPosition - (this.mSelectorElementHeight * this.SELECTOR_MIDDLE_ITEM_INDEX);\n this.mCurrentScrollOffset = this.mInitialScrollOffset;\n this.updateInputTextView();\n }\n initializeFadingEdges() {\n this.setVerticalFadingEdgeEnabled(true);\n this.setFadingEdgeLength((this.mBottom - this.mTop - this.mTextSize) / 2);\n }\n onScrollerFinished(scroller) {\n if (scroller == this.mFlingScroller) {\n if (!this.ensureScrollWheelAdjusted()) {\n this.updateInputTextView();\n }\n this.onScrollStateChange(NumberPicker.OnScrollListener.SCROLL_STATE_IDLE);\n }\n else {\n if (this.mScrollState != NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {\n this.updateInputTextView();\n }\n }\n }\n onScrollStateChange(scrollState) {\n if (this.mScrollState == scrollState) {\n return;\n }\n this.mScrollState = scrollState;\n if (this.mOnScrollListener != null) {\n this.mOnScrollListener.onScrollStateChange(this, scrollState);\n }\n }\n fling(velocityY) {\n this.mPreviousScrollerY = 0;\n if (velocityY > 0) {\n this.mFlingScroller.fling(0, 0, 0, velocityY, 0, 0, 0, Integer.MAX_VALUE);\n }\n else {\n this.mFlingScroller.fling(0, Integer.MAX_VALUE, 0, velocityY, 0, 0, 0, Integer.MAX_VALUE);\n }\n this.invalidate();\n }\n getWrappedSelectorIndex(selectorIndex) {\n if (selectorIndex > this.mMaxValue) {\n return this.mMinValue + (selectorIndex - this.mMaxValue) % (this.mMaxValue - this.mMinValue) - 1;\n }\n else if (selectorIndex < this.mMinValue) {\n return this.mMaxValue - (this.mMinValue - selectorIndex) % (this.mMaxValue - this.mMinValue) + 1;\n }\n return selectorIndex;\n }\n incrementSelectorIndices(selectorIndices) {\n for (let i = 0; i < selectorIndices.length - 1; i++) {\n selectorIndices[i] = selectorIndices[i + 1];\n }\n let nextScrollSelectorIndex = selectorIndices[selectorIndices.length - 2] + 1;\n if (this.mWrapSelectorWheel && nextScrollSelectorIndex > this.mMaxValue) {\n nextScrollSelectorIndex = this.mMinValue;\n }\n selectorIndices[selectorIndices.length - 1] = nextScrollSelectorIndex;\n this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);\n }\n decrementSelectorIndices(selectorIndices) {\n for (let i = selectorIndices.length - 1; i > 0; i--) {\n selectorIndices[i] = selectorIndices[i - 1];\n }\n let nextScrollSelectorIndex = selectorIndices[1] - 1;\n if (this.mWrapSelectorWheel && nextScrollSelectorIndex < this.mMinValue) {\n nextScrollSelectorIndex = this.mMaxValue;\n }\n selectorIndices[0] = nextScrollSelectorIndex;\n this.ensureCachedScrollSelectorValue(nextScrollSelectorIndex);\n }\n ensureCachedScrollSelectorValue(selectorIndex) {\n let cache = this.mSelectorIndexToStringCache;\n let scrollSelectorValue = cache.get(selectorIndex);\n if (scrollSelectorValue != null) {\n return;\n }\n if (selectorIndex < this.mMinValue || selectorIndex > this.mMaxValue) {\n scrollSelectorValue = \"\";\n }\n else {\n if (this.mDisplayedValues != null) {\n let displayedValueIndex = selectorIndex - this.mMinValue;\n scrollSelectorValue = this.mDisplayedValues[displayedValueIndex];\n }\n else {\n scrollSelectorValue = this.formatNumber(selectorIndex);\n }\n }\n cache.put(selectorIndex, scrollSelectorValue);\n }\n formatNumber(value) {\n return (this.mFormatter != null) ? this.mFormatter.format(value) : NumberPicker.formatNumberWithLocale(value);\n }\n validateInputTextView(v) {\n }\n updateInputTextView() {\n return false;\n }\n notifyChange(previous, current) {\n if (this.mOnValueChangeListener != null) {\n this.mOnValueChangeListener.onValueChange(this, previous, this.mValue);\n }\n }\n postChangeCurrentByOneFromLongPress(increment, delayMillis) {\n if (this.mChangeCurrentByOneFromLongPressCommand == null) {\n this.mChangeCurrentByOneFromLongPressCommand = new NumberPicker.ChangeCurrentByOneFromLongPressCommand(this);\n }\n else {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n this.mChangeCurrentByOneFromLongPressCommand.setStep(increment);\n this.postDelayed(this.mChangeCurrentByOneFromLongPressCommand, delayMillis);\n }\n removeChangeCurrentByOneFromLongPress() {\n if (this.mChangeCurrentByOneFromLongPressCommand != null) {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n }\n postBeginSoftInputOnLongPressCommand() {\n if (this.mBeginSoftInputOnLongPressCommand == null) {\n this.mBeginSoftInputOnLongPressCommand = new NumberPicker.BeginSoftInputOnLongPressCommand(this);\n }\n else {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n this.postDelayed(this.mBeginSoftInputOnLongPressCommand, ViewConfiguration.getLongPressTimeout());\n }\n removeBeginSoftInputCommand() {\n if (this.mBeginSoftInputOnLongPressCommand != null) {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n }\n removeAllCallbacks() {\n if (this.mChangeCurrentByOneFromLongPressCommand != null) {\n this.removeCallbacks(this.mChangeCurrentByOneFromLongPressCommand);\n }\n if (this.mSetSelectionCommand != null) {\n this.removeCallbacks(this.mSetSelectionCommand);\n }\n if (this.mBeginSoftInputOnLongPressCommand != null) {\n this.removeCallbacks(this.mBeginSoftInputOnLongPressCommand);\n }\n this.mPressedStateHelper.cancel();\n }\n getSelectedPos(value) {\n if (this.mDisplayedValues == null) {\n try {\n return Integer.parseInt(value);\n }\n catch (e) {\n }\n }\n else {\n for (let i = 0; i < this.mDisplayedValues.length; i++) {\n value = value.toLowerCase();\n if (this.mDisplayedValues[i].toLowerCase().startsWith(value)) {\n return this.mMinValue + i;\n }\n }\n try {\n return Integer.parseInt(value);\n }\n catch (e) {\n }\n }\n return this.mMinValue;\n }\n postSetSelectionCommand(selectionStart, selectionEnd) {\n if (this.mSetSelectionCommand == null) {\n this.mSetSelectionCommand = new NumberPicker.SetSelectionCommand(this);\n }\n else {\n this.removeCallbacks(this.mSetSelectionCommand);\n }\n this.mSetSelectionCommand.mSelectionStart = selectionStart;\n this.mSetSelectionCommand.mSelectionEnd = selectionEnd;\n this.post(this.mSetSelectionCommand);\n }\n ensureScrollWheelAdjusted() {\n let deltaY = this.mInitialScrollOffset - this.mCurrentScrollOffset;\n if (deltaY != 0) {\n this.mPreviousScrollerY = 0;\n if (Math.abs(deltaY) > this.mSelectorElementHeight / 2) {\n deltaY += (deltaY > 0) ? -this.mSelectorElementHeight : this.mSelectorElementHeight;\n }\n this.mAdjustScroller.startScroll(0, 0, 0, deltaY, NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS);\n this.invalidate();\n return true;\n }\n return false;\n }\n static formatNumberWithLocale(value) {\n return value + '';\n }\n }\n NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL = 300;\n NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT = 8;\n NumberPicker.SELECTOR_ADJUSTMENT_DURATION_MILLIS = 800;\n NumberPicker.SNAP_SCROLL_DURATION = 300;\n NumberPicker.TOP_AND_BOTTOM_FADING_EDGE_STRENGTH = 0.9;\n NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT = 2;\n NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE = 48;\n NumberPicker.SIZE_UNSPECIFIED = -1;\n widget.NumberPicker = NumberPicker;\n (function (NumberPicker) {\n class TwoDigitFormatter {\n format(value) {\n let s = value + '';\n if (s.length === 1)\n s = '0' + s;\n return s;\n }\n }\n NumberPicker.TwoDigitFormatter = TwoDigitFormatter;\n var OnScrollListener;\n (function (OnScrollListener) {\n OnScrollListener.SCROLL_STATE_IDLE = 0;\n OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1;\n OnScrollListener.SCROLL_STATE_FLING = 2;\n })(OnScrollListener = NumberPicker.OnScrollListener || (NumberPicker.OnScrollListener = {}));\n class PressedStateHelper {\n constructor(arg) {\n this.MODE_PRESS = 1;\n this.MODE_TAPPED = 2;\n this.mManagedButton = 0;\n this.mMode = 0;\n this._NumberPicker_this = arg;\n }\n cancel() {\n this.mMode = 0;\n this.mManagedButton = 0;\n this._NumberPicker_this.removeCallbacks(this);\n if (this._NumberPicker_this.mIncrementVirtualButtonPressed) {\n this._NumberPicker_this.mIncrementVirtualButtonPressed = false;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n if (this._NumberPicker_this.mDecrementVirtualButtonPressed) {\n this._NumberPicker_this.mDecrementVirtualButtonPressed = false;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n buttonPressDelayed(button) {\n this.cancel();\n this.mMode = this.MODE_PRESS;\n this.mManagedButton = button;\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getTapTimeout());\n }\n buttonTapped(button) {\n this.cancel();\n this.mMode = this.MODE_TAPPED;\n this.mManagedButton = button;\n this._NumberPicker_this.post(this);\n }\n run() {\n switch (this.mMode) {\n case this.MODE_PRESS:\n {\n switch (this.mManagedButton) {\n case PressedStateHelper.BUTTON_INCREMENT:\n {\n this._NumberPicker_this.mIncrementVirtualButtonPressed = true;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n break;\n case PressedStateHelper.BUTTON_DECREMENT:\n {\n this._NumberPicker_this.mDecrementVirtualButtonPressed = true;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n }\n break;\n case this.MODE_TAPPED:\n {\n switch (this.mManagedButton) {\n case PressedStateHelper.BUTTON_INCREMENT:\n {\n if (!this._NumberPicker_this.mIncrementVirtualButtonPressed) {\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getPressedStateDuration());\n }\n this._NumberPicker_this.mIncrementVirtualButtonPressed = !this._NumberPicker_this.mIncrementVirtualButtonPressed;\n this._NumberPicker_this.invalidate(0, this._NumberPicker_this.mBottomSelectionDividerBottom, this._NumberPicker_this.mRight, this._NumberPicker_this.mBottom);\n }\n break;\n case PressedStateHelper.BUTTON_DECREMENT:\n {\n if (!this._NumberPicker_this.mDecrementVirtualButtonPressed) {\n this._NumberPicker_this.postDelayed(this, ViewConfiguration.getPressedStateDuration());\n }\n this._NumberPicker_this.mDecrementVirtualButtonPressed = !this._NumberPicker_this.mDecrementVirtualButtonPressed;\n this._NumberPicker_this.invalidate(0, 0, this._NumberPicker_this.mRight, this._NumberPicker_this.mTopSelectionDividerTop);\n }\n }\n }\n break;\n }\n }\n }\n PressedStateHelper.BUTTON_INCREMENT = 1;\n PressedStateHelper.BUTTON_DECREMENT = 2;\n NumberPicker.PressedStateHelper = PressedStateHelper;\n class SetSelectionCommand {\n constructor(arg) {\n this.mSelectionStart = 0;\n this.mSelectionEnd = 0;\n this._NumberPicker_this = arg;\n }\n run() {\n }\n }\n NumberPicker.SetSelectionCommand = SetSelectionCommand;\n class ChangeCurrentByOneFromLongPressCommand {\n constructor(arg) {\n this._NumberPicker_this = arg;\n }\n setStep(increment) {\n this.mIncrement = increment;\n }\n run() {\n this._NumberPicker_this.changeValueByOne(this.mIncrement);\n this._NumberPicker_this.postDelayed(this, this._NumberPicker_this.mLongPressUpdateInterval);\n }\n }\n NumberPicker.ChangeCurrentByOneFromLongPressCommand = ChangeCurrentByOneFromLongPressCommand;\n class BeginSoftInputOnLongPressCommand {\n constructor(arg) {\n this._NumberPicker_this = arg;\n }\n run() {\n this._NumberPicker_this.showSoftInput();\n this._NumberPicker_this.mIngonreMoveEvents = true;\n }\n }\n NumberPicker.BeginSoftInputOnLongPressCommand = BeginSoftInputOnLongPressCommand;\n })(NumberPicker = widget.NumberPicker || (widget.NumberPicker = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var graphics;\n (function (graphics) {\n var drawable;\n (function (drawable_8) {\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var Drawable = android.graphics.drawable.Drawable;\n class ClipDrawable extends Drawable {\n constructor(...args) {\n super();\n this.mTmpRect = new Rect();\n if (args.length <= 1) {\n this.mClipState = new ClipDrawable.ClipState(args[0], this);\n }\n else {\n this.mClipState = new ClipDrawable.ClipState(null, this);\n let drawable = args[0];\n let gravity = args[1];\n let orientation = args[2];\n this.mClipState.mDrawable = drawable;\n this.mClipState.mGravity = gravity;\n this.mClipState.mOrientation = orientation;\n if (drawable != null) {\n drawable.setCallback(this);\n }\n }\n }\n inflate(r, parser) {\n super.inflate(r, parser);\n let a = r.obtainAttributes(parser);\n let orientation = a.getInt(\"android:clipOrientation\", ClipDrawable.HORIZONTAL);\n let gStr = a.getString(\"android:gravity\");\n let g = Gravity.parseGravity(gStr, Gravity.LEFT);\n let dr = a.getDrawable(\"android:drawable\");\n a.recycle();\n if (!dr && parser.children[0] instanceof HTMLElement) {\n dr = Drawable.createFromXml(r, parser.children[0]);\n }\n if (dr == null) {\n throw Error(`new IllegalArgumentException(\"No drawable specified for \")`);\n }\n this.mClipState.mDrawable = dr;\n this.mClipState.mOrientation = orientation;\n this.mClipState.mGravity = g;\n dr.setCallback(this);\n }\n drawableSizeChange(who) {\n const callback = this.getCallback();\n if (callback != null && callback.drawableSizeChange) {\n callback.drawableSizeChange(this);\n }\n }\n invalidateDrawable(who) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.invalidateDrawable(this);\n }\n }\n scheduleDrawable(who, what, when) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.scheduleDrawable(this, what, when);\n }\n }\n unscheduleDrawable(who, what) {\n const callback = this.getCallback();\n if (callback != null) {\n callback.unscheduleDrawable(this, what);\n }\n }\n getPadding(padding) {\n return this.mClipState.mDrawable.getPadding(padding);\n }\n setVisible(visible, restart) {\n this.mClipState.mDrawable.setVisible(visible, restart);\n return super.setVisible(visible, restart);\n }\n setAlpha(alpha) {\n this.mClipState.mDrawable.setAlpha(alpha);\n }\n getAlpha() {\n return this.mClipState.mDrawable.getAlpha();\n }\n getOpacity() {\n return this.mClipState.mDrawable.getOpacity();\n }\n isStateful() {\n return this.mClipState.mDrawable.isStateful();\n }\n onStateChange(state) {\n return this.mClipState.mDrawable.setState(state);\n }\n onLevelChange(level) {\n this.mClipState.mDrawable.setLevel(level);\n this.invalidateSelf();\n return true;\n }\n onBoundsChange(bounds) {\n this.mClipState.mDrawable.setBounds(bounds);\n }\n draw(canvas) {\n if (this.mClipState.mDrawable.getLevel() == 0) {\n return;\n }\n const r = this.mTmpRect;\n const bounds = this.getBounds();\n let level = this.getLevel();\n let w = bounds.width();\n const iw = 0;\n if ((this.mClipState.mOrientation & ClipDrawable.HORIZONTAL) != 0) {\n w -= (w - iw) * (10000 - level) / 10000;\n }\n let h = bounds.height();\n const ih = 0;\n if ((this.mClipState.mOrientation & ClipDrawable.VERTICAL) != 0) {\n h -= (h - ih) * (10000 - level) / 10000;\n }\n Gravity.apply(this.mClipState.mGravity, w, h, bounds, r);\n if (w > 0 && h > 0) {\n canvas.save();\n canvas.clipRect(r);\n this.mClipState.mDrawable.draw(canvas);\n canvas.restore();\n }\n }\n getIntrinsicWidth() {\n return this.mClipState.mDrawable.getIntrinsicWidth();\n }\n getIntrinsicHeight() {\n return this.mClipState.mDrawable.getIntrinsicHeight();\n }\n getConstantState() {\n if (this.mClipState.canConstantState()) {\n return this.mClipState;\n }\n return null;\n }\n }\n ClipDrawable.HORIZONTAL = 1;\n ClipDrawable.VERTICAL = 2;\n drawable_8.ClipDrawable = ClipDrawable;\n (function (ClipDrawable) {\n class ClipState {\n constructor(orig, owner) {\n this.mOrientation = 0;\n this.mGravity = 0;\n if (orig != null) {\n this.mDrawable = orig.mDrawable.getConstantState().newDrawable();\n this.mDrawable.setCallback(owner);\n this.mOrientation = orig.mOrientation;\n this.mGravity = orig.mGravity;\n this.mCheckedConstantState = this.mCanConstantState = true;\n }\n }\n newDrawable() {\n return new ClipDrawable(this);\n }\n canConstantState() {\n if (!this.mCheckedConstantState) {\n this.mCanConstantState = this.mDrawable.getConstantState() != null;\n this.mCheckedConstantState = true;\n }\n return this.mCanConstantState;\n }\n }\n ClipDrawable.ClipState = ClipState;\n })(ClipDrawable = drawable_8.ClipDrawable || (drawable_8.ClipDrawable = {}));\n })(drawable = graphics.drawable || (graphics.drawable = {}));\n })(graphics = android.graphics || (android.graphics = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Animatable = android.graphics.drawable.Animatable;\n var AnimationDrawable = android.graphics.drawable.AnimationDrawable;\n var LayerDrawable = android.graphics.drawable.LayerDrawable;\n var StateListDrawable = android.graphics.drawable.StateListDrawable;\n var ClipDrawable = android.graphics.drawable.ClipDrawable;\n var SynchronizedPool = android.util.Pools.SynchronizedPool;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var AlphaAnimation = android.view.animation.AlphaAnimation;\n var Animation = android.view.animation.Animation;\n var LinearInterpolator = android.view.animation.LinearInterpolator;\n var Transformation = android.view.animation.Transformation;\n var ArrayList = java.util.ArrayList;\n var R = android.R;\n var NetDrawable = androidui.image.NetDrawable;\n class ProgressBar extends View {\n constructor(context, bindElement, defStyle = android.R.attr.progressBarStyle) {\n super(context, bindElement, defStyle);\n this.mMinWidth = 0;\n this.mMaxWidth = 0;\n this.mMinHeight = 0;\n this.mMaxHeight = 0;\n this.mProgress = 0;\n this.mSecondaryProgress = 0;\n this.mMax = 0;\n this.mBehavior = 0;\n this.mDuration = 0;\n this.mMirrorForRtl = false;\n this.mRefreshData = new ArrayList();\n this.initProgressBar();\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n this.mNoInvalidate = true;\n let drawable = a.getDrawable('progressDrawable');\n if (drawable != null) {\n drawable = this.tileify(drawable, false);\n this.setProgressDrawable(drawable);\n }\n this.mDuration = a.getInt('indeterminateDuration', this.mDuration);\n this.mMinWidth = a.getDimensionPixelSize('minWidth', this.mMinWidth);\n this.mMaxWidth = a.getDimensionPixelSize('maxWidth', this.mMaxWidth);\n this.mMinHeight = a.getDimensionPixelSize('minHeight', this.mMinHeight);\n this.mMaxHeight = a.getDimensionPixelSize('maxHeight', this.mMaxHeight);\n if (a.getAttrValue('indeterminateBehavior') == 'cycle') {\n this.mBehavior = Animation.REVERSE;\n }\n else {\n this.mBehavior = Animation.RESTART;\n }\n this.setMax(a.getInt('max', this.mMax));\n this.setProgress(a.getInt('progress', this.mProgress));\n this.setSecondaryProgress(a.getInt('secondaryProgress', this.mSecondaryProgress));\n drawable = a.getDrawable('indeterminateDrawable');\n if (drawable != null) {\n drawable = this.tileifyIndeterminate(drawable);\n this.setIndeterminateDrawable(drawable);\n }\n this.mOnlyIndeterminate = a.getBoolean('indeterminateOnly', this.mOnlyIndeterminate);\n this.mNoInvalidate = false;\n this.setIndeterminate(this.mOnlyIndeterminate || a.getBoolean('indeterminate', this.mIndeterminate));\n this.mMirrorForRtl = a.getBoolean('mirrorForRtl', this.mMirrorForRtl);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('progressDrawable', {\n setter(v, value, a) {\n let drawable = a.parseDrawable(value);\n if (drawable != null) {\n drawable = v.tileify(drawable, false);\n v.setProgressDrawable(drawable);\n }\n }, getter(v) {\n return v.getProgressDrawable();\n }\n }).set('indeterminateDuration', {\n setter(v, value, a) {\n v.mDuration = Math.floor(a.parseInt(value, v.mDuration));\n }, getter(v) {\n return v.mDuration;\n }\n }).set('minWidth', {\n setter(v, value, a) {\n v.mMinWidth = Math.floor(a.parseNumberPixelSize(value, v.mMinWidth));\n }, getter(v) {\n return v.mMinWidth;\n }\n }).set('maxWidth', {\n setter(v, value, a) {\n v.mMaxWidth = Math.floor(a.parseNumberPixelSize(value, v.mMaxWidth));\n }, getter(v) {\n return v.mMaxWidth;\n }\n }).set('minHeight', {\n setter(v, value, a) {\n v.mMinHeight = Math.floor(a.parseNumberPixelSize(value, v.mMinHeight));\n }, getter(v) {\n return v.mMinHeight;\n }\n }).set('maxHeight', {\n setter(v, value, a) {\n v.mMaxHeight = Math.floor(a.parseNumberPixelSize(value, v.mMaxHeight));\n }, getter(v) {\n return v.mMaxHeight;\n }\n }).set('indeterminateBehavior', {\n setter(v, value, a) {\n if (Number.isInteger(Number.parseInt(value))) {\n v.mBehavior = Number.parseInt(value);\n }\n else {\n if (value + ''.toLowerCase() == 'cycle') {\n v.mBehavior = Animation.REVERSE;\n }\n else {\n v.mBehavior = Animation.RESTART;\n }\n }\n }, getter(v) {\n return v.mBehavior;\n }\n }).set('interpolator', {\n setter(v, value, a) {\n }, getter(v) {\n }\n }).set('max', {\n setter(v, value, a) {\n v.setMax(a.parseInt(value, v.mMax));\n }, getter(v) {\n return v.mMax;\n }\n }).set('progress', {\n setter(v, value, a) {\n v.setProgress(a.parseInt(value, v.mProgress));\n }, getter(v) {\n return v.mProgress;\n }\n }).set('secondaryProgress', {\n setter(v, value, a) {\n v.setSecondaryProgress(a.parseInt(value, v.mSecondaryProgress));\n }, getter(v) {\n return v.mSecondaryProgress;\n }\n }).set('indeterminateDrawable', {\n setter(v, value, a) {\n let drawable = a.parseDrawable(value);\n if (drawable != null) {\n drawable = v.tileifyIndeterminate(drawable);\n v.setIndeterminateDrawable(drawable);\n }\n }, getter(v) {\n return v.mIndeterminateDrawable;\n }\n }).set('indeterminateOnly', {\n setter(v, value, a) {\n v.mOnlyIndeterminate = a.parseBoolean(value, v.mOnlyIndeterminate);\n v.setIndeterminate(v.mOnlyIndeterminate || v.mIndeterminate);\n }, getter(v) {\n return v.mOnlyIndeterminate;\n }\n }).set('indeterminate', {\n setter(v, value, a) {\n v.setIndeterminate(v.mOnlyIndeterminate || a.parseBoolean(value, v.mIndeterminate));\n }, getter(v) {\n return v.mIndeterminate;\n }\n });\n }\n tileify(drawable, clip) {\n if (drawable instanceof LayerDrawable) {\n let background = drawable;\n const N = background.getNumberOfLayers();\n let outDrawables = new Array(N);\n let drawableChange = false;\n for (let i = 0; i < N; i++) {\n let id = background.getId(i);\n let orig = background.getDrawable(i);\n outDrawables[i] = this.tileify(orig, (id == R.id.progress || id == R.id.secondaryProgress));\n drawableChange = drawableChange || outDrawables[i] !== orig;\n }\n if (!drawableChange)\n return background;\n let newBg = new LayerDrawable(outDrawables);\n for (let i = 0; i < N; i++) {\n newBg.setId(i, background.getId(i));\n }\n return newBg;\n }\n else if (drawable instanceof StateListDrawable) {\n let _in = drawable;\n let out = new StateListDrawable();\n let numStates = _in.getStateCount();\n for (let i = 0; i < numStates; i++) {\n out.addState(_in.getStateSet(i), this.tileify(_in.getStateDrawable(i), clip));\n }\n return out;\n }\n else if (drawable instanceof NetDrawable) {\n const netDrawable = drawable;\n if (this.mSampleTile == null) {\n this.mSampleTile = netDrawable;\n }\n netDrawable.setTileMode(NetDrawable.TileMode.REPEAT, null);\n return (clip) ? new ClipDrawable(netDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL) : netDrawable;\n }\n return drawable;\n }\n tileifyIndeterminate(drawable) {\n if (drawable instanceof AnimationDrawable) {\n let background = drawable;\n const N = background.getNumberOfFrames();\n let newBg = new AnimationDrawable();\n newBg.setOneShot(background.isOneShot());\n for (let i = 0; i < N; i++) {\n let frame = this.tileify(background.getFrame(i), true);\n frame.setLevel(10000);\n newBg.addFrame(frame, background.getDuration(i));\n }\n newBg.setLevel(10000);\n drawable = newBg;\n }\n return drawable;\n }\n initProgressBar() {\n this.mMax = 100;\n this.mProgress = 0;\n this.mSecondaryProgress = 0;\n this.mIndeterminate = false;\n this.mOnlyIndeterminate = false;\n this.mDuration = 4000;\n this.mBehavior = AlphaAnimation.RESTART;\n this.mMinWidth = 24;\n this.mMaxWidth = 48;\n this.mMinHeight = 24;\n this.mMaxHeight = 48;\n }\n isIndeterminate() {\n return this.mIndeterminate;\n }\n setIndeterminate(indeterminate) {\n if ((!this.mOnlyIndeterminate || !this.mIndeterminate) && indeterminate != this.mIndeterminate) {\n this.mIndeterminate = indeterminate;\n if (indeterminate) {\n this.mCurrentDrawable = this.mIndeterminateDrawable;\n this.startAnimation();\n }\n else {\n this.mCurrentDrawable = this.mProgressDrawable;\n this.stopAnimation();\n }\n }\n }\n getIndeterminateDrawable() {\n return this.mIndeterminateDrawable;\n }\n setIndeterminateDrawable(d) {\n if (d != null) {\n d.setCallback(this);\n }\n this.mIndeterminateDrawable = d;\n if (this.mIndeterminate) {\n this.mCurrentDrawable = d;\n this.postInvalidate();\n }\n }\n getProgressDrawable() {\n return this.mProgressDrawable;\n }\n setProgressDrawable(d) {\n let needUpdate;\n if (this.mProgressDrawable != null && d != this.mProgressDrawable) {\n this.mProgressDrawable.setCallback(null);\n needUpdate = true;\n }\n else {\n needUpdate = false;\n }\n if (d != null) {\n d.setCallback(this);\n let drawableHeight = d.getMinimumHeight();\n if (this.mMaxHeight < drawableHeight) {\n this.mMaxHeight = drawableHeight;\n this.requestLayout();\n }\n }\n this.mProgressDrawable = d;\n if (!this.mIndeterminate) {\n this.mCurrentDrawable = d;\n this.postInvalidate();\n }\n if (needUpdate) {\n this.updateDrawableBounds(this.getWidth(), this.getHeight());\n this.updateDrawableState();\n this.doRefreshProgress(R.id.progress, this.mProgress, false, false);\n this.doRefreshProgress(R.id.secondaryProgress, this.mSecondaryProgress, false, false);\n }\n }\n getCurrentDrawable() {\n return this.mCurrentDrawable;\n }\n verifyDrawable(who) {\n return who == this.mProgressDrawable || who == this.mIndeterminateDrawable || super.verifyDrawable(who);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mProgressDrawable != null)\n this.mProgressDrawable.jumpToCurrentState();\n if (this.mIndeterminateDrawable != null)\n this.mIndeterminateDrawable.jumpToCurrentState();\n }\n postInvalidate() {\n if (!this.mNoInvalidate) {\n super.postInvalidate();\n }\n }\n doRefreshProgress(id, progress, fromUser, callBackToApp) {\n let scale = this.mMax > 0 ? progress / this.mMax : 0;\n const d = this.mCurrentDrawable;\n if (d != null) {\n let progressDrawable = null;\n if (d instanceof LayerDrawable) {\n progressDrawable = d.findDrawableByLayerId(id);\n }\n const level = Math.floor((scale * ProgressBar.MAX_LEVEL));\n (progressDrawable != null ? progressDrawable : d).setLevel(level);\n }\n else {\n this.invalidate();\n }\n if (callBackToApp && id == R.id.progress) {\n this.onProgressRefresh(scale, fromUser);\n }\n }\n onProgressRefresh(scale, fromUser) {\n }\n refreshProgress(id, progress, fromUser) {\n this.doRefreshProgress(id, progress, fromUser, true);\n }\n setProgress(progress, fromUser = false) {\n if (this.mIndeterminate) {\n return;\n }\n if (progress < 0) {\n progress = 0;\n }\n if (progress > this.mMax) {\n progress = this.mMax;\n }\n if (progress != this.mProgress) {\n this.mProgress = progress;\n this.refreshProgress(R.id.progress, this.mProgress, fromUser);\n }\n }\n setSecondaryProgress(secondaryProgress) {\n if (this.mIndeterminate) {\n return;\n }\n if (secondaryProgress < 0) {\n secondaryProgress = 0;\n }\n if (secondaryProgress > this.mMax) {\n secondaryProgress = this.mMax;\n }\n if (secondaryProgress != this.mSecondaryProgress) {\n this.mSecondaryProgress = secondaryProgress;\n this.refreshProgress(R.id.secondaryProgress, this.mSecondaryProgress, false);\n }\n }\n getProgress() {\n return this.mIndeterminate ? 0 : this.mProgress;\n }\n getSecondaryProgress() {\n return this.mIndeterminate ? 0 : this.mSecondaryProgress;\n }\n getMax() {\n return this.mMax;\n }\n setMax(max) {\n if (max < 0) {\n max = 0;\n }\n if (max != this.mMax) {\n this.mMax = max;\n this.postInvalidate();\n if (this.mProgress > max) {\n this.mProgress = max;\n }\n this.refreshProgress(R.id.progress, this.mProgress, false);\n }\n }\n incrementProgressBy(diff) {\n this.setProgress(this.mProgress + diff);\n }\n incrementSecondaryProgressBy(diff) {\n this.setSecondaryProgress(this.mSecondaryProgress + diff);\n }\n startAnimation() {\n if (this.getVisibility() != ProgressBar.VISIBLE) {\n return;\n }\n if (Animatable.isImpl(this.mIndeterminateDrawable)) {\n this.mShouldStartAnimationDrawable = true;\n this.mHasAnimation = false;\n }\n else {\n this.mHasAnimation = true;\n if (this.mInterpolator == null) {\n this.mInterpolator = new LinearInterpolator();\n }\n if (this.mTransformation == null) {\n this.mTransformation = new Transformation();\n }\n else {\n this.mTransformation.clear();\n }\n if (this.mAnimation == null) {\n this.mAnimation = new AlphaAnimation(0.0, 1.0);\n }\n else {\n this.mAnimation.reset();\n }\n this.mAnimation.setRepeatMode(this.mBehavior);\n this.mAnimation.setRepeatCount(Animation.INFINITE);\n this.mAnimation.setDuration(this.mDuration);\n this.mAnimation.setInterpolator(this.mInterpolator);\n this.mAnimation.setStartTime(Animation.START_ON_FIRST_FRAME);\n }\n this.postInvalidate();\n }\n stopAnimation() {\n this.mHasAnimation = false;\n if (Animatable.isImpl(this.mIndeterminateDrawable)) {\n this.mIndeterminateDrawable.stop();\n this.mShouldStartAnimationDrawable = false;\n }\n this.postInvalidate();\n }\n setInterpolator(interpolator) {\n this.mInterpolator = interpolator;\n }\n getInterpolator() {\n return this.mInterpolator;\n }\n setVisibility(v) {\n if (this.getVisibility() != v) {\n super.setVisibility(v);\n if (this.mIndeterminate) {\n if (v == ProgressBar.GONE || v == ProgressBar.INVISIBLE) {\n this.stopAnimation();\n }\n else {\n this.startAnimation();\n }\n }\n }\n }\n onVisibilityChanged(changedView, visibility) {\n super.onVisibilityChanged(changedView, visibility);\n if (this.mIndeterminate) {\n if (visibility == ProgressBar.GONE || visibility == ProgressBar.INVISIBLE) {\n this.stopAnimation();\n }\n else {\n this.startAnimation();\n }\n }\n }\n invalidateDrawable(dr) {\n if (!this.mInDrawing) {\n if (this.verifyDrawable(dr)) {\n const dirty = dr.getBounds();\n const scrollX = this.mScrollX + this.mPaddingLeft;\n const scrollY = this.mScrollY + this.mPaddingTop;\n this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY);\n }\n else {\n super.invalidateDrawable(dr);\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n this.updateDrawableBounds(w, h);\n }\n updateDrawableBounds(w, h) {\n w -= this.mPaddingRight + this.mPaddingLeft;\n h -= this.mPaddingTop + this.mPaddingBottom;\n let right = w;\n let bottom = h;\n let top = 0;\n let left = 0;\n if (this.mIndeterminateDrawable != null) {\n if (this.mOnlyIndeterminate && !(this.mIndeterminateDrawable instanceof AnimationDrawable)) {\n const intrinsicWidth = this.mIndeterminateDrawable.getIntrinsicWidth();\n const intrinsicHeight = this.mIndeterminateDrawable.getIntrinsicHeight();\n const intrinsicAspect = intrinsicWidth / intrinsicHeight;\n const boundAspect = w / h;\n if (intrinsicAspect != boundAspect) {\n if (boundAspect > intrinsicAspect) {\n const width = Math.floor((h * intrinsicAspect));\n left = (w - width) / 2;\n right = left + width;\n }\n else {\n const height = Math.floor((w * (1 / intrinsicAspect)));\n top = (h - height) / 2;\n bottom = top + height;\n }\n }\n }\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n let tempLeft = left;\n left = w - right;\n right = w - tempLeft;\n }\n this.mIndeterminateDrawable.setBounds(left, top, right, bottom);\n }\n if (this.mProgressDrawable != null) {\n this.mProgressDrawable.setBounds(0, 0, right, bottom);\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n let d = this.mCurrentDrawable;\n if (d != null) {\n canvas.save();\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n canvas.translate(this.getWidth() - this.mPaddingRight, this.mPaddingTop);\n canvas.scale(-1.0, 1.0);\n }\n else {\n canvas.translate(this.mPaddingLeft, this.mPaddingTop);\n }\n let time = this.getDrawingTime();\n if (this.mHasAnimation) {\n this.mAnimation.getTransformation(time, this.mTransformation);\n let scale = this.mTransformation.getAlpha();\n try {\n this.mInDrawing = true;\n d.setLevel(Math.floor((scale * ProgressBar.MAX_LEVEL)));\n }\n finally {\n this.mInDrawing = false;\n }\n this.postInvalidateOnAnimation();\n }\n d.draw(canvas);\n canvas.restore();\n if (this.mShouldStartAnimationDrawable && Animatable.isImpl(d)) {\n d.start();\n this.mShouldStartAnimationDrawable = false;\n }\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let d = this.mCurrentDrawable;\n let dw = 0;\n let dh = 0;\n if (d != null) {\n dw = Math.max(this.mMinWidth, Math.min(this.mMaxWidth, d.getIntrinsicWidth()));\n dh = Math.max(this.mMinHeight, Math.min(this.mMaxHeight, d.getIntrinsicHeight()));\n }\n this.updateDrawableState();\n dw += this.mPaddingLeft + this.mPaddingRight;\n dh += this.mPaddingTop + this.mPaddingBottom;\n this.setMeasuredDimension(ProgressBar.resolveSizeAndState(dw, widthMeasureSpec, 0), ProgressBar.resolveSizeAndState(dh, heightMeasureSpec, 0));\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n this.updateDrawableState();\n }\n updateDrawableState() {\n let state = this.getDrawableState();\n if (this.mProgressDrawable != null && this.mProgressDrawable.isStateful()) {\n this.mProgressDrawable.setState(state);\n }\n if (this.mIndeterminateDrawable != null && this.mIndeterminateDrawable.isStateful()) {\n this.mIndeterminateDrawable.setState(state);\n }\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n if (this.mIndeterminate) {\n this.startAnimation();\n }\n if (this.mRefreshData != null) {\n {\n const count = this.mRefreshData.size();\n for (let i = 0; i < count; i++) {\n const rd = this.mRefreshData.get(i);\n this.doRefreshProgress(rd.id, rd.progress, rd.fromUser, true);\n rd.recycle();\n }\n this.mRefreshData.clear();\n }\n }\n this.mAttached = true;\n }\n onDetachedFromWindow() {\n if (this.mIndeterminate) {\n this.stopAnimation();\n }\n super.onDetachedFromWindow();\n this.mAttached = false;\n }\n }\n ProgressBar.MAX_LEVEL = 10000;\n ProgressBar.TIMEOUT_SEND_ACCESSIBILITY_EVENT = 200;\n widget.ProgressBar = ProgressBar;\n (function (ProgressBar) {\n class RefreshData {\n constructor() {\n this.progress = 0;\n }\n static obtain(id, progress, fromUser) {\n let rd = RefreshData.sPool.acquire();\n if (rd == null) {\n rd = new RefreshData();\n }\n rd.id = id;\n rd.progress = progress;\n rd.fromUser = fromUser;\n return rd;\n }\n recycle() {\n RefreshData.sPool.release(this);\n }\n }\n RefreshData.POOL_MAX = 24;\n RefreshData.sPool = new SynchronizedPool(RefreshData.POOL_MAX);\n ProgressBar.RefreshData = RefreshData;\n })(ProgressBar = widget.ProgressBar || (widget.ProgressBar = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var Button = android.widget.Button;\n class CompoundButton extends Button {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mButtonResource = 0;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const d = a.getDrawable('button');\n if (d != null) {\n this.setButtonDrawable(d);\n }\n const checked = a.getBoolean('checked', false);\n this.setChecked(checked);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('button', {\n setter(v, value, attrBinder) {\n v.setButtonDrawable(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mButtonDrawable;\n }\n }).set('checked', {\n setter(v, value, attrBinder) {\n v.setChecked(attrBinder.parseBoolean(value, v.isChecked()));\n }, getter(v) {\n return v.isChecked();\n }\n });\n }\n toggle() {\n this.setChecked(!this.mChecked);\n }\n performClick() {\n this.toggle();\n return super.performClick();\n }\n isChecked() {\n return this.mChecked;\n }\n setChecked(checked) {\n if (this.mChecked != checked) {\n this.mChecked = checked;\n this.refreshDrawableState();\n if (this.mBroadcasting) {\n return;\n }\n this.mBroadcasting = true;\n if (this.mOnCheckedChangeListener != null) {\n this.mOnCheckedChangeListener.onCheckedChanged(this, this.mChecked);\n }\n if (this.mOnCheckedChangeWidgetListener != null) {\n this.mOnCheckedChangeWidgetListener.onCheckedChanged(this, this.mChecked);\n }\n this.mBroadcasting = false;\n }\n }\n setOnCheckedChangeListener(listener) {\n this.mOnCheckedChangeListener = listener;\n }\n setOnCheckedChangeWidgetListener(listener) {\n this.mOnCheckedChangeWidgetListener = listener;\n }\n setButtonDrawable(d) {\n if (d != null) {\n if (this.mButtonDrawable != null) {\n this.mButtonDrawable.setCallback(null);\n this.unscheduleDrawable(this.mButtonDrawable);\n }\n d.setCallback(this);\n d.setVisible(this.getVisibility() == CompoundButton.VISIBLE, false);\n this.mButtonDrawable = d;\n this.setMinHeight(this.mButtonDrawable.getIntrinsicHeight());\n }\n this.refreshDrawableState();\n }\n getCompoundPaddingLeft() {\n let padding = super.getCompoundPaddingLeft();\n if (!this.isLayoutRtl()) {\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n padding += buttonDrawable.getIntrinsicWidth();\n }\n }\n return padding;\n }\n getCompoundPaddingRight() {\n let padding = super.getCompoundPaddingRight();\n if (this.isLayoutRtl()) {\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n padding += buttonDrawable.getIntrinsicWidth();\n }\n }\n return padding;\n }\n getHorizontalOffsetForDrawables() {\n const buttonDrawable = this.mButtonDrawable;\n return (buttonDrawable != null) ? buttonDrawable.getIntrinsicWidth() : 0;\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n const buttonDrawable = this.mButtonDrawable;\n if (buttonDrawable != null) {\n const verticalGravity = this.getGravity() & Gravity.VERTICAL_GRAVITY_MASK;\n const drawableHeight = buttonDrawable.getIntrinsicHeight();\n const drawableWidth = buttonDrawable.getIntrinsicWidth();\n let top = 0;\n switch (verticalGravity) {\n case Gravity.BOTTOM:\n top = this.getHeight() - drawableHeight;\n break;\n case Gravity.CENTER_VERTICAL:\n top = (this.getHeight() - drawableHeight) / 2;\n break;\n }\n let bottom = top + drawableHeight;\n let left = this.isLayoutRtl() ? this.getWidth() - drawableWidth : 0;\n let right = this.isLayoutRtl() ? this.getWidth() : drawableWidth;\n buttonDrawable.setBounds(left, top, right, bottom);\n buttonDrawable.draw(canvas);\n }\n }\n onCreateDrawableState(extraSpace) {\n const drawableState = super.onCreateDrawableState(extraSpace + 1);\n if (this.isChecked()) {\n CompoundButton.mergeDrawableStates(drawableState, CompoundButton.CHECKED_STATE_SET);\n }\n return drawableState;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mButtonDrawable != null) {\n let myDrawableState = this.getDrawableState();\n this.mButtonDrawable.setState(myDrawableState);\n this.invalidate();\n }\n }\n drawableSizeChange(d) {\n if (d == this.mButtonDrawable) {\n this.setButtonDrawable(d);\n this.requestLayout();\n }\n else {\n super.drawableSizeChange(d);\n }\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || who == this.mButtonDrawable;\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mButtonDrawable != null)\n this.mButtonDrawable.jumpToCurrentState();\n }\n }\n CompoundButton.CHECKED_STATE_SET = [View.VIEW_STATE_CHECKED];\n widget.CompoundButton = CompoundButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var CompoundButton = android.widget.CompoundButton;\n class CheckBox extends CompoundButton {\n constructor(context, bindElement, defStyle = android.R.attr.checkboxStyle) {\n super(context, bindElement, defStyle);\n }\n }\n widget.CheckBox = CheckBox;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var CompoundButton = android.widget.CompoundButton;\n class RadioButton extends CompoundButton {\n constructor(context, bindElement, defStyle = android.R.attr.radiobuttonStyle) {\n super(context, bindElement, defStyle);\n }\n toggle() {\n if (!this.isChecked()) {\n super.toggle();\n }\n }\n }\n widget.RadioButton = RadioButton;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var LinearLayout = android.widget.LinearLayout;\n var RadioButton = android.widget.RadioButton;\n class RadioGroup extends LinearLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mCheckedId = View.NO_ID;\n this.mProtectFromCheckedChange = false;\n let attributes = context.obtainStyledAttributes(bindElement, defStyle);\n let value = attributes.getString('checkedButton');\n if (value) {\n this.mCheckedId = value;\n }\n const orientation = attributes.getString('orientation');\n if (orientation === 'horizontal') {\n this.setOrientation(RadioGroup.HORIZONTAL);\n }\n else {\n this.setOrientation(RadioGroup.VERTICAL);\n }\n attributes.recycle();\n this.init();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('checkedButton', {\n setter(v, value) {\n if (typeof value === 'string' || value == null) {\n v.setCheckedId(value);\n }\n }\n });\n }\n init() {\n this.mChildOnCheckedChangeListener = new RadioGroup.CheckedStateTracker(this);\n this.mPassThroughListener = new RadioGroup.PassThroughHierarchyChangeListener(this);\n super.setOnHierarchyChangeListener(this.mPassThroughListener);\n }\n setOnHierarchyChangeListener(listener) {\n this.mPassThroughListener.mOnHierarchyChangeListener = listener;\n }\n onFinishInflate() {\n super.onFinishInflate();\n if (this.mCheckedId != null) {\n this.mProtectFromCheckedChange = true;\n this.setCheckedStateForView(this.mCheckedId, true);\n this.mProtectFromCheckedChange = false;\n this.setCheckedId(this.mCheckedId);\n }\n }\n addView(...args) {\n let child = args[0];\n if (child instanceof RadioButton) {\n const button = child;\n if (button.isChecked()) {\n this.mProtectFromCheckedChange = true;\n if (this.mCheckedId != null) {\n this.setCheckedStateForView(this.mCheckedId, false);\n }\n this.mProtectFromCheckedChange = false;\n this.setCheckedId(button.getId());\n }\n }\n super.addView(...args);\n }\n check(id) {\n if (id != null && (id == this.mCheckedId)) {\n return;\n }\n if (this.mCheckedId != null) {\n this.setCheckedStateForView(this.mCheckedId, false);\n }\n if (id != null) {\n this.setCheckedStateForView(id, true);\n }\n this.setCheckedId(id);\n }\n setCheckedId(id) {\n this.mCheckedId = id;\n if (this.mOnCheckedChangeListener != null) {\n this.mOnCheckedChangeListener.onCheckedChanged(this, this.mCheckedId);\n }\n }\n setCheckedStateForView(viewId, checked) {\n let checkedView = this.findViewById(viewId);\n if (checkedView != null && checkedView instanceof RadioButton) {\n checkedView.setChecked(checked);\n }\n }\n getCheckedRadioButtonId() {\n return this.mCheckedId;\n }\n clearCheck() {\n this.check(null);\n }\n setOnCheckedChangeListener(listener) {\n this.mOnCheckedChangeListener = listener;\n }\n generateLayoutParamsFromAttr(attrs) {\n return new RadioGroup.LayoutParams(this.getContext(), attrs);\n }\n checkLayoutParams(p) {\n return p instanceof RadioGroup.LayoutParams;\n }\n generateDefaultLayoutParams() {\n return new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT);\n }\n }\n widget.RadioGroup = RadioGroup;\n (function (RadioGroup) {\n class LayoutParams extends LinearLayout.LayoutParams {\n setBaseAttributes(a, widthAttr, heightAttr) {\n if (a.hasValue(widthAttr)) {\n this.width = a.getLayoutDimension(widthAttr, LayoutParams.WRAP_CONTENT);\n }\n else {\n this.width = LayoutParams.WRAP_CONTENT;\n }\n if (a.hasValue(heightAttr)) {\n this.height = a.getLayoutDimension(heightAttr, LayoutParams.WRAP_CONTENT);\n }\n else {\n this.height = LayoutParams.WRAP_CONTENT;\n }\n }\n }\n RadioGroup.LayoutParams = LayoutParams;\n class CheckedStateTracker {\n constructor(arg) {\n this._RadioGroup_this = arg;\n }\n onCheckedChanged(buttonView, isChecked) {\n if (this._RadioGroup_this.mProtectFromCheckedChange) {\n return;\n }\n this._RadioGroup_this.mProtectFromCheckedChange = true;\n if (this._RadioGroup_this.mCheckedId != null) {\n this._RadioGroup_this.setCheckedStateForView(this._RadioGroup_this.mCheckedId, false);\n }\n this._RadioGroup_this.mProtectFromCheckedChange = false;\n let id = buttonView.getId();\n this._RadioGroup_this.setCheckedId(id);\n }\n }\n RadioGroup.CheckedStateTracker = CheckedStateTracker;\n class PassThroughHierarchyChangeListener {\n constructor(arg) {\n this._RadioGroup_this = arg;\n }\n onChildViewAdded(parent, child) {\n if (parent == this._RadioGroup_this && child instanceof RadioButton) {\n let id = child.getId();\n if (id == View.NO_ID) {\n id = 'hash' + child.hashCode();\n child.setId(id);\n }\n child.setOnCheckedChangeWidgetListener(this._RadioGroup_this.mChildOnCheckedChangeListener);\n }\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewAdded(parent, child);\n }\n }\n onChildViewRemoved(parent, child) {\n if (parent == this._RadioGroup_this && child instanceof RadioButton) {\n child.setOnCheckedChangeWidgetListener(null);\n }\n if (this.mOnHierarchyChangeListener != null) {\n this.mOnHierarchyChangeListener.onChildViewRemoved(parent, child);\n }\n }\n }\n RadioGroup.PassThroughHierarchyChangeListener = PassThroughHierarchyChangeListener;\n })(RadioGroup = widget.RadioGroup || (widget.RadioGroup = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Gravity = android.view.Gravity;\n var TextView = android.widget.TextView;\n var View = android.view.View;\n class CheckedTextView extends TextView {\n constructor(context, bindElement, defStyle = android.R.attr.checkedTextViewStyle) {\n super(context, bindElement, defStyle);\n this.mCheckMarkResource = 0;\n this.mBasePadding = 0;\n this.mCheckMarkWidth = 0;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const d = a.getDrawable('checkMark');\n if (d != null) {\n this.setCheckMarkDrawable(d);\n }\n const checked = a.getBoolean('checked', false);\n this.setChecked(checked);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('checkMark', {\n setter(v, value, attrBinder) {\n v.setCheckMarkDrawable(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.getCheckMarkDrawable();\n }\n }).set('checked', {\n setter(v, value, attrBinder) {\n v.setChecked(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.isChecked();\n }\n });\n }\n toggle() {\n this.setChecked(!this.mChecked);\n }\n isChecked() {\n return this.mChecked;\n }\n setChecked(checked) {\n if (this.mChecked != checked) {\n this.mChecked = checked;\n this.refreshDrawableState();\n }\n }\n setCheckMarkDrawable(d) {\n if (this.mCheckMarkDrawable != null) {\n this.mCheckMarkDrawable.setCallback(null);\n this.unscheduleDrawable(this.mCheckMarkDrawable);\n }\n this.mNeedRequestlayout = (d != this.mCheckMarkDrawable);\n if (d != null) {\n d.setCallback(this);\n d.setVisible(this.getVisibility() == CheckedTextView.VISIBLE, false);\n d.setState(CheckedTextView.CHECKED_STATE_SET);\n this.setMinHeight(d.getIntrinsicHeight());\n this.mCheckMarkWidth = d.getIntrinsicWidth();\n d.setState(this.getDrawableState());\n }\n else {\n this.mCheckMarkWidth = 0;\n }\n this.mCheckMarkDrawable = d;\n this.resolvePadding();\n }\n getCheckMarkDrawable() {\n return this.mCheckMarkDrawable;\n }\n setPadding(left, top, right, bottom) {\n super.setPadding(left, top, right, bottom);\n this.setBasePadding(this.isLayoutRtl());\n }\n updatePadding() {\n let newPadding = (this.mCheckMarkDrawable != null) ? this.mCheckMarkWidth + this.mBasePadding : this.mBasePadding;\n if (this.isLayoutRtl()) {\n this.mNeedRequestlayout = (this.mPaddingLeft != newPadding) || this.mNeedRequestlayout;\n this.mPaddingLeft = newPadding;\n }\n else {\n this.mNeedRequestlayout = (this.mPaddingRight != newPadding) || this.mNeedRequestlayout;\n this.mPaddingRight = newPadding;\n }\n if (this.mNeedRequestlayout) {\n this.requestLayout();\n this.mNeedRequestlayout = false;\n }\n }\n setBasePadding(isLayoutRtl) {\n if (isLayoutRtl) {\n this.mBasePadding = this.mPaddingLeft;\n }\n else {\n this.mBasePadding = this.mPaddingRight;\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n const checkMarkDrawable = this.mCheckMarkDrawable;\n if (checkMarkDrawable != null) {\n const verticalGravity = this.getGravity() & Gravity.VERTICAL_GRAVITY_MASK;\n const height = checkMarkDrawable.getIntrinsicHeight();\n let y = 0;\n switch (verticalGravity) {\n case Gravity.BOTTOM:\n y = this.getHeight() - height;\n break;\n case Gravity.CENTER_VERTICAL:\n y = (this.getHeight() - height) / 2;\n break;\n }\n const isLayoutRtl = this.isLayoutRtl();\n const width = this.getWidth();\n const top = y;\n const bottom = top + height;\n let left;\n let right;\n if (isLayoutRtl) {\n left = this.mBasePadding;\n right = left + this.mCheckMarkWidth;\n }\n else {\n right = width - this.mBasePadding;\n left = right - this.mCheckMarkWidth;\n }\n checkMarkDrawable.setBounds(this.mScrollX + left, top, this.mScrollX + right, bottom);\n checkMarkDrawable.draw(canvas);\n }\n }\n onCreateDrawableState(extraSpace) {\n const drawableState = super.onCreateDrawableState(extraSpace + 1);\n if (this.isChecked()) {\n CheckedTextView.mergeDrawableStates(drawableState, CheckedTextView.CHECKED_STATE_SET);\n }\n return drawableState;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n if (this.mCheckMarkDrawable != null) {\n let myDrawableState = this.getDrawableState();\n this.mCheckMarkDrawable.setState(myDrawableState);\n this.invalidate();\n }\n }\n }\n CheckedTextView.CHECKED_STATE_SET = [View.VIEW_STATE_CHECKED];\n widget.CheckedTextView = CheckedTextView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var Integer = java.lang.Integer;\n var ProgressBar = android.widget.ProgressBar;\n class AbsSeekBar extends ProgressBar {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mThumbOffset = 0;\n this.mTouchProgressOffset = 0;\n this.mIsUserSeekable = true;\n this.mKeyProgressIncrement = 1;\n this.mDisabledAlpha = 0;\n this.mTouchDownX = 0;\n let a = context.obtainStyledAttributes(bindElement, defStyle);\n const thumb = a.getDrawable('thumb');\n this.setThumb(thumb);\n const thumbOffset = a.getDimensionPixelOffset('thumbOffset', this.getThumbOffset());\n this.setThumbOffset(thumbOffset);\n a.recycle();\n a = context.obtainStyledAttributes(bindElement, defStyle);\n this.mDisabledAlpha = a.getFloat('disabledAlpha', 0.5);\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('thumb', {\n setter(v, value, attrBinder) {\n v.setThumb(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mThumb;\n }\n }).set('thumbOffset', {\n setter(v, value, attrBinder) {\n v.setThumbOffset(attrBinder.parseNumberPixelOffset(value));\n }, getter(v) {\n return v.mThumbOffset;\n }\n }).set('disabledAlpha', {\n setter(v, value, attrBinder) {\n v.mDisabledAlpha = attrBinder.parseFloat(value, 0.5);\n }, getter(v) {\n return v.mDisabledAlpha;\n }\n });\n }\n setThumb(thumb) {\n let needUpdate;\n if (this.mThumb != null && thumb != this.mThumb) {\n this.mThumb.setCallback(null);\n needUpdate = true;\n }\n else {\n needUpdate = false;\n }\n if (thumb != null) {\n thumb.setCallback(this);\n this.mThumbOffset = thumb.getIntrinsicWidth() / 2;\n if (needUpdate && (thumb.getIntrinsicWidth() != this.mThumb.getIntrinsicWidth() || thumb.getIntrinsicHeight() != this.mThumb.getIntrinsicHeight())) {\n this.requestLayout();\n }\n }\n this.mThumb = thumb;\n this.invalidate();\n if (needUpdate) {\n this.updateThumbPos(this.getWidth(), this.getHeight());\n if (thumb != null && thumb.isStateful()) {\n let state = this.getDrawableState();\n thumb.setState(state);\n }\n }\n }\n getThumb() {\n return this.mThumb;\n }\n getThumbOffset() {\n return this.mThumbOffset;\n }\n setThumbOffset(thumbOffset) {\n this.mThumbOffset = thumbOffset;\n this.invalidate();\n }\n setKeyProgressIncrement(increment) {\n this.mKeyProgressIncrement = increment < 0 ? -increment : increment;\n }\n getKeyProgressIncrement() {\n return this.mKeyProgressIncrement;\n }\n setMax(max) {\n super.setMax(max);\n if ((this.mKeyProgressIncrement == 0) || (this.getMax() / this.mKeyProgressIncrement > 20)) {\n this.setKeyProgressIncrement(Math.max(1, Math.round(this.getMax() / 20)));\n }\n }\n verifyDrawable(who) {\n return who == this.mThumb || super.verifyDrawable(who);\n }\n jumpDrawablesToCurrentState() {\n super.jumpDrawablesToCurrentState();\n if (this.mThumb != null)\n this.mThumb.jumpToCurrentState();\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n let progressDrawable = this.getProgressDrawable();\n if (progressDrawable != null) {\n progressDrawable.setAlpha(this.isEnabled() ? AbsSeekBar.NO_ALPHA : Math.floor((AbsSeekBar.NO_ALPHA * this.mDisabledAlpha)));\n }\n if (this.mThumb != null && this.mThumb.isStateful()) {\n let state = this.getDrawableState();\n this.mThumb.setState(state);\n }\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n let thumb = this.mThumb;\n if (thumb != null) {\n this.setThumbPos(this.getWidth(), thumb, scale, Integer.MIN_VALUE);\n this.invalidate();\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n this.updateThumbPos(w, h);\n }\n updateThumbPos(w, h) {\n let d = this.getCurrentDrawable();\n let thumb = this.mThumb;\n let thumbHeight = thumb == null ? 0 : thumb.getIntrinsicHeight();\n let trackHeight = Math.min(this.mMaxHeight, h - this.mPaddingTop - this.mPaddingBottom);\n let max = this.getMax();\n let scale = max > 0 ? this.getProgress() / max : 0;\n if (thumbHeight > trackHeight) {\n if (thumb != null) {\n this.setThumbPos(w, thumb, scale, 0);\n }\n let gapForCenteringTrack = (thumbHeight - trackHeight) / 2;\n if (d != null) {\n d.setBounds(0, gapForCenteringTrack, w - this.mPaddingRight - this.mPaddingLeft, h - this.mPaddingBottom - gapForCenteringTrack - this.mPaddingTop);\n }\n }\n else {\n if (d != null) {\n d.setBounds(0, 0, w - this.mPaddingRight - this.mPaddingLeft, h - this.mPaddingBottom - this.mPaddingTop);\n }\n let gap = (trackHeight - thumbHeight) / 2;\n if (thumb != null) {\n this.setThumbPos(w, thumb, scale, gap);\n }\n }\n }\n setThumbPos(w, thumb, scale, gap) {\n let available = w - this.mPaddingLeft - this.mPaddingRight;\n let thumbWidth = thumb.getIntrinsicWidth();\n let thumbHeight = thumb.getIntrinsicHeight();\n available -= thumbWidth;\n available += this.mThumbOffset * 2;\n let thumbPos = Math.floor((scale * available));\n let topBound, bottomBound;\n if (gap == Integer.MIN_VALUE) {\n let oldBounds = thumb.getBounds();\n topBound = oldBounds.top;\n bottomBound = oldBounds.bottom;\n }\n else {\n topBound = gap;\n bottomBound = gap + thumbHeight;\n }\n const left = (this.isLayoutRtl() && this.mMirrorForRtl) ? available - thumbPos : thumbPos;\n thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mThumb != null) {\n canvas.save();\n canvas.translate(this.mPaddingLeft - this.mThumbOffset, this.mPaddingTop);\n this.mThumb.draw(canvas);\n canvas.restore();\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let d = this.getCurrentDrawable();\n let thumbHeight = this.mThumb == null ? 0 : this.mThumb.getIntrinsicHeight();\n let dw = 0;\n let dh = 0;\n if (d != null) {\n dw = Math.max(this.mMinWidth, Math.min(this.mMaxWidth, d.getIntrinsicWidth()));\n dh = Math.max(this.mMinHeight, Math.min(this.mMaxHeight, d.getIntrinsicHeight()));\n dh = Math.max(thumbHeight, dh);\n }\n dw += this.mPaddingLeft + this.mPaddingRight;\n dh += this.mPaddingTop + this.mPaddingBottom;\n this.setMeasuredDimension(AbsSeekBar.resolveSizeAndState(dw, widthMeasureSpec, 0), AbsSeekBar.resolveSizeAndState(dh, heightMeasureSpec, 0));\n }\n onTouchEvent(event) {\n if (!this.mIsUserSeekable || !this.isEnabled()) {\n return false;\n }\n switch (event.getAction()) {\n case MotionEvent.ACTION_DOWN:\n if (this.isInScrollingContainer()) {\n this.mTouchDownX = event.getX();\n }\n else {\n this.setPressed(true);\n if (this.mThumb != null) {\n this.invalidate(this.mThumb.getBounds());\n }\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.attemptClaimDrag();\n }\n break;\n case MotionEvent.ACTION_MOVE:\n if (this.mIsDragging) {\n this.trackTouchEvent(event);\n }\n else {\n const x = event.getX();\n if (Math.abs(x - this.mTouchDownX) > this.mTouchSlop) {\n this.setPressed(true);\n if (this.mThumb != null) {\n this.invalidate(this.mThumb.getBounds());\n }\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.attemptClaimDrag();\n }\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsDragging) {\n this.trackTouchEvent(event);\n this.onStopTrackingTouch();\n this.setPressed(false);\n }\n else {\n this.onStartTrackingTouch();\n this.trackTouchEvent(event);\n this.onStopTrackingTouch();\n }\n this.invalidate();\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsDragging) {\n this.onStopTrackingTouch();\n this.setPressed(false);\n }\n this.invalidate();\n break;\n }\n return true;\n }\n trackTouchEvent(event) {\n const width = this.getWidth();\n const available = width - this.mPaddingLeft - this.mPaddingRight;\n let x = Math.floor(event.getX());\n let scale;\n let progress = 0;\n if (this.isLayoutRtl() && this.mMirrorForRtl) {\n if (x > width - this.mPaddingRight) {\n scale = 0.0;\n }\n else if (x < this.mPaddingLeft) {\n scale = 1.0;\n }\n else {\n scale = (available - x + this.mPaddingLeft) / available;\n progress = this.mTouchProgressOffset;\n }\n }\n else {\n if (x < this.mPaddingLeft) {\n scale = 0.0;\n }\n else if (x > width - this.mPaddingRight) {\n scale = 1.0;\n }\n else {\n scale = (x - this.mPaddingLeft) / available;\n progress = this.mTouchProgressOffset;\n }\n }\n const max = this.getMax();\n progress += scale * max;\n this.setProgress(Math.floor(progress), true);\n }\n attemptClaimDrag() {\n if (this.mParent != null) {\n this.mParent.requestDisallowInterceptTouchEvent(true);\n }\n }\n onStartTrackingTouch() {\n this.mIsDragging = true;\n }\n onStopTrackingTouch() {\n this.mIsDragging = false;\n }\n onKeyChange() {\n }\n onKeyDown(keyCode, event) {\n if (this.isEnabled()) {\n let progress = this.getProgress();\n switch (keyCode) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n if (progress <= 0)\n break;\n this.setProgress(progress - this.mKeyProgressIncrement, true);\n this.onKeyChange();\n return true;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n if (progress >= this.getMax())\n break;\n this.setProgress(progress + this.mKeyProgressIncrement, true);\n this.onKeyChange();\n return true;\n }\n }\n return super.onKeyDown(keyCode, event);\n }\n }\n AbsSeekBar.NO_ALPHA = 0xFF;\n widget.AbsSeekBar = AbsSeekBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AbsSeekBar = android.widget.AbsSeekBar;\n class SeekBar extends AbsSeekBar {\n constructor(context, bindElement, defStyle = android.R.attr.seekBarStyle) {\n super(context, bindElement, defStyle);\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onProgressChanged(this, this.getProgress(), fromUser);\n }\n }\n setOnSeekBarChangeListener(l) {\n this.mOnSeekBarChangeListener = l;\n }\n onStartTrackingTouch() {\n super.onStartTrackingTouch();\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onStartTrackingTouch(this);\n }\n }\n onStopTrackingTouch() {\n super.onStopTrackingTouch();\n if (this.mOnSeekBarChangeListener != null) {\n this.mOnSeekBarChangeListener.onStopTrackingTouch(this);\n }\n }\n }\n widget.SeekBar = SeekBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AbsSeekBar = android.widget.AbsSeekBar;\n class RatingBar extends AbsSeekBar {\n constructor(context, bindElement, defStyle = android.R.attr.ratingBarStyle) {\n super(context, bindElement, defStyle);\n this.mNumStars = 5;\n this.mProgressOnStartTracking = 0;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const numStars = a.getInt('numStars', this.mNumStars);\n this.setIsIndicator(a.getBoolean('isIndicator', !this.mIsUserSeekable));\n const rating = a.getFloat('rating', -1);\n const stepSize = a.getFloat('stepSize', -1);\n a.recycle();\n if (numStars > 0 && numStars != this.mNumStars) {\n this.setNumStars(numStars);\n }\n if (stepSize >= 0) {\n this.setStepSize(stepSize);\n }\n else {\n this.setStepSize(0.5);\n }\n if (rating >= 0) {\n this.setRating(rating);\n }\n this.mTouchProgressOffset = 1.1;\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('numStars', {\n setter(v, value, a) {\n v.setNumStars(a.parseInt(value, v.mNumStars));\n }, getter(v) {\n return v.mNumStars;\n }\n }).set('isIndicator', {\n setter(v, value, a) {\n v.setIsIndicator(a.parseBoolean(value, !v.mIsUserSeekable));\n }, getter(v) {\n return v.isIndicator();\n }\n }).set('stepSize', {\n setter(v, value, a) {\n v.setStepSize(a.parseFloat(value, 0.5));\n }, getter(v) {\n return v.getStepSize();\n }\n }).set('rating', {\n setter(v, value, a) {\n v.setRating(a.parseFloat(value, v.getRating()));\n }, getter(v) {\n return v.getRating();\n }\n });\n }\n setOnRatingBarChangeListener(listener) {\n this.mOnRatingBarChangeListener = listener;\n }\n getOnRatingBarChangeListener() {\n return this.mOnRatingBarChangeListener;\n }\n setIsIndicator(isIndicator) {\n this.mIsUserSeekable = !isIndicator;\n this.setFocusable(!isIndicator);\n }\n isIndicator() {\n return !this.mIsUserSeekable;\n }\n setNumStars(numStars) {\n if (numStars <= 0) {\n return;\n }\n let step = this.getStepSize();\n this.mNumStars = numStars;\n this.setStepSize(step);\n this.requestLayout();\n }\n getNumStars() {\n return this.mNumStars;\n }\n setRating(rating) {\n this.setProgress(Math.round(rating * this.getProgressPerStar()));\n }\n getRating() {\n return this.getProgress() / this.getProgressPerStar();\n }\n setStepSize(stepSize) {\n if (Number.isNaN(stepSize) || !Number.isFinite(stepSize) || stepSize <= 0) {\n return;\n }\n const newMax = this.mNumStars / stepSize;\n let newProgress = Math.floor((newMax / this.getMax() * this.getProgress()));\n if (Number.isNaN(newProgress))\n newProgress = 0;\n this.setMax(Math.floor(newMax));\n this.setProgress(newProgress);\n }\n getStepSize() {\n return this.getNumStars() / this.getMax();\n }\n getProgressPerStar() {\n if (this.mNumStars > 0) {\n return 1 * this.getMax() / this.mNumStars;\n }\n else {\n return 1;\n }\n }\n onProgressRefresh(scale, fromUser) {\n super.onProgressRefresh(scale, fromUser);\n this.updateSecondaryProgress(this.getProgress());\n if (!fromUser) {\n this.dispatchRatingChange(false);\n }\n }\n updateSecondaryProgress(progress) {\n const ratio = this.getProgressPerStar();\n if (ratio > 0) {\n const progressInStars = progress / ratio;\n const secondaryProgress = Math.floor((Math.ceil(progressInStars) * ratio));\n this.setSecondaryProgress(secondaryProgress);\n }\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (this.mSampleTile != null) {\n const width = this.mSampleTile.getIntrinsicWidth() * this.mNumStars;\n this.setMeasuredDimension(RatingBar.resolveSizeAndState(width, widthMeasureSpec, 0), this.getMeasuredHeight());\n }\n }\n onStartTrackingTouch() {\n this.mProgressOnStartTracking = this.getProgress();\n super.onStartTrackingTouch();\n }\n onStopTrackingTouch() {\n super.onStopTrackingTouch();\n if (this.getProgress() != this.mProgressOnStartTracking) {\n this.dispatchRatingChange(true);\n }\n }\n onKeyChange() {\n super.onKeyChange();\n this.dispatchRatingChange(true);\n }\n dispatchRatingChange(fromUser) {\n if (this.mOnRatingBarChangeListener != null) {\n this.mOnRatingBarChangeListener.onRatingChanged(this, this.getRating(), fromUser);\n }\n }\n setMax(max) {\n if (max <= 0) {\n return;\n }\n super.setMax(max);\n }\n }\n widget.RatingBar = RatingBar;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var ArrayList = java.util.ArrayList;\n var ExpandableListView = android.widget.ExpandableListView;\n class ExpandableListPosition {\n constructor() {\n this.groupPos = 0;\n this.childPos = 0;\n this.flatListPos = 0;\n this.type = 0;\n }\n resetState() {\n this.groupPos = 0;\n this.childPos = 0;\n this.flatListPos = 0;\n this.type = 0;\n }\n getPackedPosition() {\n if (this.type == ExpandableListPosition.CHILD)\n return ExpandableListView.getPackedPositionForChild(this.groupPos, this.childPos);\n else\n return ExpandableListView.getPackedPositionForGroup(this.groupPos);\n }\n static obtainGroupPosition(groupPosition) {\n return ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPosition, 0, 0);\n }\n static obtainChildPosition(groupPosition, childPosition) {\n return ExpandableListPosition.obtain(ExpandableListPosition.CHILD, groupPosition, childPosition, 0);\n }\n static obtainPosition(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL) {\n return null;\n }\n let elp = ExpandableListPosition.getRecycledOrCreate();\n elp.groupPos = ExpandableListView.getPackedPositionGroup(packedPosition);\n if (ExpandableListView.getPackedPositionType(packedPosition) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {\n elp.type = ExpandableListPosition.CHILD;\n elp.childPos = ExpandableListView.getPackedPositionChild(packedPosition);\n }\n else {\n elp.type = ExpandableListPosition.GROUP;\n }\n return elp;\n }\n static obtain(type, groupPos, childPos, flatListPos) {\n let elp = ExpandableListPosition.getRecycledOrCreate();\n elp.type = type;\n elp.groupPos = groupPos;\n elp.childPos = childPos;\n elp.flatListPos = flatListPos;\n return elp;\n }\n static getRecycledOrCreate() {\n let elp;\n {\n if (ExpandableListPosition.sPool.size() > 0) {\n elp = ExpandableListPosition.sPool.remove(0);\n }\n else {\n return new ExpandableListPosition();\n }\n }\n elp.resetState();\n return elp;\n }\n recycle() {\n {\n if (ExpandableListPosition.sPool.size() < ExpandableListPosition.MAX_POOL_SIZE) {\n ExpandableListPosition.sPool.add(this);\n }\n }\n }\n }\n ExpandableListPosition.MAX_POOL_SIZE = 5;\n ExpandableListPosition.sPool = new ArrayList(ExpandableListPosition.MAX_POOL_SIZE);\n ExpandableListPosition.CHILD = 1;\n ExpandableListPosition.GROUP = 2;\n widget.ExpandableListPosition = ExpandableListPosition;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var HeterogeneousExpandableList;\n (function (HeterogeneousExpandableList) {\n function isImpl(obj) {\n return obj && obj['getGroupType'] && obj['getChildType'] && obj['getGroupTypeCount'] && obj['getChildTypeCount'];\n }\n HeterogeneousExpandableList.isImpl = isImpl;\n })(HeterogeneousExpandableList = widget.HeterogeneousExpandableList || (widget.HeterogeneousExpandableList = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var SystemClock = android.os.SystemClock;\n var ArrayList = java.util.ArrayList;\n var Collections = java.util.Collections;\n var Integer = java.lang.Integer;\n var AdapterView = android.widget.AdapterView;\n var BaseAdapter = android.widget.BaseAdapter;\n var ExpandableListPosition = android.widget.ExpandableListPosition;\n var HeterogeneousExpandableList = android.widget.HeterogeneousExpandableList;\n class ExpandableListConnector extends BaseAdapter {\n constructor(expandableListAdapter) {\n super();\n this.mTotalExpChildrenCount = 0;\n this.mMaxExpGroupCount = Integer.MAX_VALUE;\n this.mDataSetObserver = new ExpandableListConnector.MyDataSetObserver(this);\n this.mExpGroupMetadataList = new ArrayList();\n this.setExpandableListAdapter(expandableListAdapter);\n }\n setExpandableListAdapter(expandableListAdapter) {\n if (this.mExpandableListAdapter != null) {\n this.mExpandableListAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n }\n this.mExpandableListAdapter = expandableListAdapter;\n expandableListAdapter.registerDataSetObserver(this.mDataSetObserver);\n }\n getUnflattenedPos(flPos) {\n const egml = this.mExpGroupMetadataList;\n const numExpGroups = egml.size();\n let leftExpGroupIndex = 0;\n let rightExpGroupIndex = numExpGroups - 1;\n let midExpGroupIndex = 0;\n let midExpGm;\n if (numExpGroups == 0) {\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, flPos, -1, null, 0);\n }\n while (leftExpGroupIndex <= rightExpGroupIndex) {\n midExpGroupIndex = Math.floor((rightExpGroupIndex - leftExpGroupIndex) / 2 + leftExpGroupIndex);\n midExpGm = egml.get(midExpGroupIndex);\n if (flPos > midExpGm.lastChildFlPos) {\n leftExpGroupIndex = midExpGroupIndex + 1;\n }\n else if (flPos < midExpGm.flPos) {\n rightExpGroupIndex = midExpGroupIndex - 1;\n }\n else if (flPos == midExpGm.flPos) {\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, midExpGm.gPos, -1, midExpGm, midExpGroupIndex);\n }\n else if (flPos <= midExpGm.lastChildFlPos) {\n const childPos = flPos - (midExpGm.flPos + 1);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.CHILD, midExpGm.gPos, childPos, midExpGm, midExpGroupIndex);\n }\n }\n let insertPosition = 0;\n let groupPos = 0;\n if (leftExpGroupIndex > midExpGroupIndex) {\n const leftExpGm = egml.get(leftExpGroupIndex - 1);\n insertPosition = leftExpGroupIndex;\n groupPos = (flPos - leftExpGm.lastChildFlPos) + leftExpGm.gPos;\n }\n else if (rightExpGroupIndex < midExpGroupIndex) {\n const rightExpGm = egml.get(++rightExpGroupIndex);\n insertPosition = rightExpGroupIndex;\n groupPos = rightExpGm.gPos - (rightExpGm.flPos - flPos);\n }\n else {\n throw Error(`new RuntimeException(\"Unknown state\")`);\n }\n return ExpandableListConnector.PositionMetadata.obtain(flPos, ExpandableListPosition.GROUP, groupPos, -1, null, insertPosition);\n }\n getFlattenedPos(pos) {\n const egml = this.mExpGroupMetadataList;\n const numExpGroups = egml.size();\n let leftExpGroupIndex = 0;\n let rightExpGroupIndex = numExpGroups - 1;\n let midExpGroupIndex = 0;\n let midExpGm;\n if (numExpGroups == 0) {\n return ExpandableListConnector.PositionMetadata.obtain(pos.groupPos, pos.type, pos.groupPos, pos.childPos, null, 0);\n }\n while (leftExpGroupIndex <= rightExpGroupIndex) {\n midExpGroupIndex = Math.floor((rightExpGroupIndex - leftExpGroupIndex) / 2 + leftExpGroupIndex);\n midExpGm = egml.get(midExpGroupIndex);\n if (pos.groupPos > midExpGm.gPos) {\n leftExpGroupIndex = midExpGroupIndex + 1;\n }\n else if (pos.groupPos < midExpGm.gPos) {\n rightExpGroupIndex = midExpGroupIndex - 1;\n }\n else if (pos.groupPos == midExpGm.gPos) {\n if (pos.type == ExpandableListPosition.GROUP) {\n return ExpandableListConnector.PositionMetadata.obtain(midExpGm.flPos, pos.type, pos.groupPos, pos.childPos, midExpGm, midExpGroupIndex);\n }\n else if (pos.type == ExpandableListPosition.CHILD) {\n return ExpandableListConnector.PositionMetadata.obtain(midExpGm.flPos + pos.childPos + 1, pos.type, pos.groupPos, pos.childPos, midExpGm, midExpGroupIndex);\n }\n else {\n return null;\n }\n }\n }\n if (pos.type != ExpandableListPosition.GROUP) {\n return null;\n }\n if (leftExpGroupIndex > midExpGroupIndex) {\n const leftExpGm = egml.get(leftExpGroupIndex - 1);\n const flPos = leftExpGm.lastChildFlPos + (pos.groupPos - leftExpGm.gPos);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, pos.type, pos.groupPos, pos.childPos, null, leftExpGroupIndex);\n }\n else if (rightExpGroupIndex < midExpGroupIndex) {\n const rightExpGm = egml.get(++rightExpGroupIndex);\n const flPos = rightExpGm.flPos - (rightExpGm.gPos - pos.groupPos);\n return ExpandableListConnector.PositionMetadata.obtain(flPos, pos.type, pos.groupPos, pos.childPos, null, rightExpGroupIndex);\n }\n else {\n return null;\n }\n }\n areAllItemsEnabled() {\n return this.mExpandableListAdapter.areAllItemsEnabled();\n }\n isEnabled(flatListPos) {\n const metadata = this.getUnflattenedPos(flatListPos);\n const pos = metadata.position;\n let retValue;\n if (pos.type == ExpandableListPosition.CHILD) {\n retValue = this.mExpandableListAdapter.isChildSelectable(pos.groupPos, pos.childPos);\n }\n else {\n retValue = true;\n }\n metadata.recycle();\n return retValue;\n }\n getCount() {\n return this.mExpandableListAdapter.getGroupCount() + this.mTotalExpChildrenCount;\n }\n getItem(flatListPos) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getGroup(posMetadata.position.groupPos);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n retValue = this.mExpandableListAdapter.getChild(posMetadata.position.groupPos, posMetadata.position.childPos);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getItemId(flatListPos) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n const groupId = this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getCombinedGroupId(groupId);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n const childId = this.mExpandableListAdapter.getChildId(posMetadata.position.groupPos, posMetadata.position.childPos);\n retValue = this.mExpandableListAdapter.getCombinedChildId(groupId, childId);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getView(flatListPos, convertView, parent) {\n const posMetadata = this.getUnflattenedPos(flatListPos);\n let retValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n retValue = this.mExpandableListAdapter.getGroupView(posMetadata.position.groupPos, posMetadata.isExpanded(), convertView, parent);\n }\n else if (posMetadata.position.type == ExpandableListPosition.CHILD) {\n const isLastChild = posMetadata.groupMetadata.lastChildFlPos == flatListPos;\n retValue = this.mExpandableListAdapter.getChildView(posMetadata.position.groupPos, posMetadata.position.childPos, isLastChild, convertView, parent);\n }\n else {\n throw Error(`new RuntimeException(\"Flat list position is of unknown type\")`);\n }\n posMetadata.recycle();\n return retValue;\n }\n getItemViewType(flatListPos) {\n const metadata = this.getUnflattenedPos(flatListPos);\n const pos = metadata.position;\n let retValue;\n if (HeterogeneousExpandableList.isImpl(this.mExpandableListAdapter)) {\n let adapter = this.mExpandableListAdapter;\n if (pos.type == ExpandableListPosition.GROUP) {\n retValue = adapter.getGroupType(pos.groupPos);\n }\n else {\n const childType = adapter.getChildType(pos.groupPos, pos.childPos);\n retValue = adapter.getGroupTypeCount() + childType;\n }\n }\n else {\n if (pos.type == ExpandableListPosition.GROUP) {\n retValue = 0;\n }\n else {\n retValue = 1;\n }\n }\n metadata.recycle();\n return retValue;\n }\n getViewTypeCount() {\n if (HeterogeneousExpandableList.isImpl(this.mExpandableListAdapter)) {\n let adapter = this.mExpandableListAdapter;\n return adapter.getGroupTypeCount() + adapter.getChildTypeCount();\n }\n else {\n return 2;\n }\n }\n hasStableIds() {\n return this.mExpandableListAdapter.hasStableIds();\n }\n refreshExpGroupMetadataList(forceChildrenCountRefresh, syncGroupPositions) {\n const egml = this.mExpGroupMetadataList;\n let egmlSize = egml.size();\n let curFlPos = 0;\n this.mTotalExpChildrenCount = 0;\n if (syncGroupPositions) {\n let positionsChanged = false;\n for (let i = egmlSize - 1; i >= 0; i--) {\n let curGm = egml.get(i);\n let newGPos = this.findGroupPosition(curGm.gId, curGm.gPos);\n if (newGPos != curGm.gPos) {\n if (newGPos == AdapterView.INVALID_POSITION) {\n egml.remove(i);\n egmlSize--;\n }\n curGm.gPos = newGPos;\n if (!positionsChanged)\n positionsChanged = true;\n }\n }\n if (positionsChanged) {\n Collections.sort(egml);\n }\n }\n let gChildrenCount;\n let lastGPos = 0;\n for (let i = 0; i < egmlSize; i++) {\n let curGm = egml.get(i);\n if ((curGm.lastChildFlPos == ExpandableListConnector.GroupMetadata.REFRESH) || forceChildrenCountRefresh) {\n gChildrenCount = this.mExpandableListAdapter.getChildrenCount(curGm.gPos);\n }\n else {\n gChildrenCount = curGm.lastChildFlPos - curGm.flPos;\n }\n this.mTotalExpChildrenCount += gChildrenCount;\n curFlPos += (curGm.gPos - lastGPos);\n lastGPos = curGm.gPos;\n curGm.flPos = curFlPos;\n curFlPos += gChildrenCount;\n curGm.lastChildFlPos = curFlPos;\n }\n }\n collapseGroup(groupPos) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n if (pm == null)\n return false;\n let retValue = this.collapseGroupWithMeta(pm);\n pm.recycle();\n return retValue;\n }\n collapseGroupWithMeta(posMetadata) {\n if (posMetadata.groupMetadata == null)\n return false;\n this.mExpGroupMetadataList.remove(posMetadata.groupMetadata);\n this.refreshExpGroupMetadataList(false, false);\n this.notifyDataSetChanged();\n this.mExpandableListAdapter.onGroupCollapsed(posMetadata.groupMetadata.gPos);\n return true;\n }\n expandGroup(groupPos) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n let retValue = this.expandGroupWithMeta(pm);\n pm.recycle();\n return retValue;\n }\n expandGroupWithMeta(posMetadata) {\n if (posMetadata.position.groupPos < 0) {\n throw Error(`new RuntimeException(\"Need group\")`);\n }\n if (this.mMaxExpGroupCount == 0)\n return false;\n if (posMetadata.groupMetadata != null)\n return false;\n if (this.mExpGroupMetadataList.size() >= this.mMaxExpGroupCount) {\n let collapsedGm = this.mExpGroupMetadataList.get(0);\n let collapsedIndex = this.mExpGroupMetadataList.indexOf(collapsedGm);\n this.collapseGroup(collapsedGm.gPos);\n if (posMetadata.groupInsertIndex > collapsedIndex) {\n posMetadata.groupInsertIndex--;\n }\n }\n let expandedGm = ExpandableListConnector.GroupMetadata.obtain(ExpandableListConnector.GroupMetadata.REFRESH, ExpandableListConnector.GroupMetadata.REFRESH, posMetadata.position.groupPos, this.mExpandableListAdapter.getGroupId(posMetadata.position.groupPos));\n this.mExpGroupMetadataList.add(posMetadata.groupInsertIndex, expandedGm);\n this.refreshExpGroupMetadataList(false, false);\n this.notifyDataSetChanged();\n this.mExpandableListAdapter.onGroupExpanded(expandedGm.gPos);\n return true;\n }\n isGroupExpanded(groupPosition) {\n let groupMetadata;\n for (let i = this.mExpGroupMetadataList.size() - 1; i >= 0; i--) {\n groupMetadata = this.mExpGroupMetadataList.get(i);\n if (groupMetadata.gPos == groupPosition) {\n return true;\n }\n }\n return false;\n }\n setMaxExpGroupCount(maxExpGroupCount) {\n this.mMaxExpGroupCount = maxExpGroupCount;\n }\n getAdapter() {\n return this.mExpandableListAdapter;\n }\n getExpandedGroupMetadataList() {\n return this.mExpGroupMetadataList;\n }\n setExpandedGroupMetadataList(expandedGroupMetadataList) {\n if ((expandedGroupMetadataList == null) || (this.mExpandableListAdapter == null)) {\n return;\n }\n let numGroups = this.mExpandableListAdapter.getGroupCount();\n for (let i = expandedGroupMetadataList.size() - 1; i >= 0; i--) {\n if (expandedGroupMetadataList.get(i).gPos >= numGroups) {\n return;\n }\n }\n this.mExpGroupMetadataList = expandedGroupMetadataList;\n this.refreshExpGroupMetadataList(true, false);\n }\n isEmpty() {\n let adapter = this.getAdapter();\n return adapter != null ? adapter.isEmpty() : true;\n }\n findGroupPosition(groupIdToMatch, seedGroupPosition) {\n let count = this.mExpandableListAdapter.getGroupCount();\n if (count == 0) {\n return AdapterView.INVALID_POSITION;\n }\n if (groupIdToMatch == AdapterView.INVALID_ROW_ID) {\n return AdapterView.INVALID_POSITION;\n }\n seedGroupPosition = Math.max(0, seedGroupPosition);\n seedGroupPosition = Math.min(count - 1, seedGroupPosition);\n let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS;\n let rowId;\n let first = seedGroupPosition;\n let last = seedGroupPosition;\n let next = false;\n let hitFirst;\n let hitLast;\n let adapter = this.getAdapter();\n if (adapter == null) {\n return AdapterView.INVALID_POSITION;\n }\n while (SystemClock.uptimeMillis() <= endTime) {\n rowId = adapter.getGroupId(seedGroupPosition);\n if (rowId == groupIdToMatch) {\n return seedGroupPosition;\n }\n hitLast = last == count - 1;\n hitFirst = first == 0;\n if (hitLast && hitFirst) {\n break;\n }\n if (hitFirst || (next && !hitLast)) {\n last++;\n seedGroupPosition = last;\n next = false;\n }\n else if (hitLast || (!next && !hitFirst)) {\n first--;\n seedGroupPosition = first;\n next = true;\n }\n }\n return AdapterView.INVALID_POSITION;\n }\n }\n widget.ExpandableListConnector = ExpandableListConnector;\n (function (ExpandableListConnector) {\n class MyDataSetObserver extends DataSetObserver {\n constructor(arg) {\n super();\n this._ExpandableListConnector_this = arg;\n }\n onChanged() {\n this._ExpandableListConnector_this.refreshExpGroupMetadataList(true, true);\n this._ExpandableListConnector_this.notifyDataSetChanged();\n }\n onInvalidated() {\n this._ExpandableListConnector_this.refreshExpGroupMetadataList(true, true);\n this._ExpandableListConnector_this.notifyDataSetInvalidated();\n }\n }\n ExpandableListConnector.MyDataSetObserver = MyDataSetObserver;\n class GroupMetadata {\n constructor() {\n this.flPos = 0;\n this.lastChildFlPos = 0;\n this.gPos = 0;\n this.gId = 0;\n }\n static obtain(flPos, lastChildFlPos, gPos, gId) {\n let gm = new GroupMetadata();\n gm.flPos = flPos;\n gm.lastChildFlPos = lastChildFlPos;\n gm.gPos = gPos;\n gm.gId = gId;\n return gm;\n }\n compareTo(another) {\n if (another == null) {\n throw Error(`new IllegalArgumentException()`);\n }\n return this.gPos - another.gPos;\n }\n }\n GroupMetadata.REFRESH = -1;\n ExpandableListConnector.GroupMetadata = GroupMetadata;\n class PositionMetadata {\n constructor() {\n this.groupInsertIndex = 0;\n }\n resetState() {\n if (this.position != null) {\n this.position.recycle();\n this.position = null;\n }\n this.groupMetadata = null;\n this.groupInsertIndex = 0;\n }\n static obtain(flatListPos, type, groupPos, childPos, groupMetadata, groupInsertIndex) {\n let pm = PositionMetadata.getRecycledOrCreate();\n pm.position = ExpandableListPosition.obtain(type, groupPos, childPos, flatListPos);\n pm.groupMetadata = groupMetadata;\n pm.groupInsertIndex = groupInsertIndex;\n return pm;\n }\n static getRecycledOrCreate() {\n let pm;\n {\n if (PositionMetadata.sPool.size() > 0) {\n pm = PositionMetadata.sPool.remove(0);\n }\n else {\n return new PositionMetadata();\n }\n }\n pm.resetState();\n return pm;\n }\n recycle() {\n this.resetState();\n {\n if (PositionMetadata.sPool.size() < PositionMetadata.MAX_POOL_SIZE) {\n PositionMetadata.sPool.add(this);\n }\n }\n }\n isExpanded() {\n return this.groupMetadata != null;\n }\n }\n PositionMetadata.MAX_POOL_SIZE = 5;\n PositionMetadata.sPool = new ArrayList(PositionMetadata.MAX_POOL_SIZE);\n ExpandableListConnector.PositionMetadata = PositionMetadata;\n })(ExpandableListConnector = widget.ExpandableListConnector || (widget.ExpandableListConnector = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var SoundEffectConstants = android.view.SoundEffectConstants;\n var View = android.view.View;\n var ExpandableListConnector = android.widget.ExpandableListConnector;\n var ExpandableListPosition = android.widget.ExpandableListPosition;\n var ListView = android.widget.ListView;\n var Long = goog.math.Long;\n class ExpandableListView extends ListView {\n constructor(context, attrs, defStyle = android.R.attr.expandableListViewStyle) {\n super(context, attrs, defStyle);\n this.mIndicatorLeft = 0;\n this.mIndicatorRight = 0;\n this.mIndicatorStart = 0;\n this.mIndicatorEnd = 0;\n this.mChildIndicatorLeft = 0;\n this.mChildIndicatorRight = 0;\n this.mChildIndicatorStart = 0;\n this.mChildIndicatorEnd = 0;\n this.mIndicatorRect = new Rect();\n let a = context.obtainStyledAttributes(attrs, defStyle);\n this.mGroupIndicator = a.getDrawable('groupIndicator');\n this.mChildIndicator = a.getDrawable('childIndicator');\n this.mIndicatorLeft = a.getDimensionPixelSize('indicatorLeft', 0);\n this.mIndicatorRight = a.getDimensionPixelSize('indicatorRight', 0);\n if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) {\n this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n this.mChildIndicatorLeft = a.getDimensionPixelSize('childIndicatorLeft', ExpandableListView.CHILD_INDICATOR_INHERIT);\n this.mChildIndicatorRight = a.getDimensionPixelSize('childIndicatorRight', ExpandableListView.CHILD_INDICATOR_INHERIT);\n this.mChildDivider = a.getDrawable('childDivider');\n if (!this.isRtlCompatibilityMode()) {\n this.mIndicatorStart = a.getDimensionPixelSize('indicatorStart', ExpandableListView.INDICATOR_UNDEFINED);\n this.mIndicatorEnd = a.getDimensionPixelSize('indicatorEnd', ExpandableListView.INDICATOR_UNDEFINED);\n this.mChildIndicatorStart = a.getDimensionPixelSize('childIndicatorStart', ExpandableListView.CHILD_INDICATOR_INHERIT);\n this.mChildIndicatorEnd = a.getDimensionPixelSize('childIndicatorEnd', ExpandableListView.CHILD_INDICATOR_INHERIT);\n }\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('groupIndicator', {\n setter(v, value, attrBinder) {\n v.setGroupIndicator(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mGroupIndicator;\n }\n }).set('childIndicator', {\n setter(v, value, attrBinder) {\n v.setChildIndicator(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mChildIndicator;\n }\n }).set('indicatorLeft', {\n setter(v, value, attrBinder) {\n v.setIndicatorBounds(attrBinder.parseNumberPixelOffset(value, 0), v.mIndicatorRight);\n }, getter(v) {\n return v.mIndicatorLeft;\n }\n }).set('indicatorRight', {\n setter(v, value, attrBinder) {\n let num = attrBinder.parseNumberPixelOffset(value, 0);\n if (num == 0 && v.mGroupIndicator != null) {\n num = v.mIndicatorLeft + v.mGroupIndicator.getIntrinsicWidth();\n }\n this.setIndicatorBounds(v.mIndicatorLeft, num);\n }, getter(v) {\n return v.mIndicatorRight;\n }\n }).set('childIndicatorLeft', {\n setter(v, value, attrBinder) {\n v.setChildIndicatorBounds(attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT), v.mChildIndicatorRight);\n }, getter(v) {\n return v.mChildIndicatorLeft;\n }\n }).set('childIndicatorRight', {\n setter(v, value, attrBinder) {\n let num = attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT);\n if (num == 0 && v.mChildIndicator != null) {\n num = v.mChildIndicatorLeft + v.mChildIndicator.getIntrinsicWidth();\n }\n v.setIndicatorBounds(v.mChildIndicatorLeft, num);\n }, getter(v) {\n return v.mChildIndicatorRight;\n }\n }).set('childDivider', {\n setter(v, value, attrBinder) {\n v.setChildDivider(attrBinder.parseDrawable(value));\n }, getter(v) {\n return v.mChildDivider;\n }\n });\n }\n isRtlCompatibilityMode() {\n return !this.hasRtlSupport();\n }\n hasRtlSupport() {\n return false;\n }\n onRtlPropertiesChanged(layoutDirection) {\n this.resolveIndicator();\n this.resolveChildIndicator();\n }\n resolveIndicator() {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mIndicatorStart >= 0) {\n this.mIndicatorRight = this.mIndicatorStart;\n }\n if (this.mIndicatorEnd >= 0) {\n this.mIndicatorLeft = this.mIndicatorEnd;\n }\n }\n else {\n if (this.mIndicatorStart >= 0) {\n this.mIndicatorLeft = this.mIndicatorStart;\n }\n if (this.mIndicatorEnd >= 0) {\n this.mIndicatorRight = this.mIndicatorEnd;\n }\n }\n if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) {\n this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n }\n resolveChildIndicator() {\n const isLayoutRtl = this.isLayoutRtl();\n if (isLayoutRtl) {\n if (this.mChildIndicatorStart >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorRight = this.mChildIndicatorStart;\n }\n if (this.mChildIndicatorEnd >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorLeft = this.mChildIndicatorEnd;\n }\n }\n else {\n if (this.mChildIndicatorStart >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorLeft = this.mChildIndicatorStart;\n }\n if (this.mChildIndicatorEnd >= ExpandableListView.CHILD_INDICATOR_INHERIT) {\n this.mChildIndicatorRight = this.mChildIndicatorEnd;\n }\n }\n }\n dispatchDraw(canvas) {\n super.dispatchDraw(canvas);\n if ((this.mChildIndicator == null) && (this.mGroupIndicator == null)) {\n return;\n }\n let saveCount = 0;\n const clipToPadding = (this.mGroupFlags & ExpandableListView.CLIP_TO_PADDING_MASK) == ExpandableListView.CLIP_TO_PADDING_MASK;\n if (clipToPadding) {\n saveCount = canvas.save();\n const scrollX = this.mScrollX;\n const scrollY = this.mScrollY;\n canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom);\n }\n const headerViewsCount = this.getHeaderViewsCount();\n const lastChildFlPos = this.mItemCount - this.getFooterViewsCount() - headerViewsCount - 1;\n const myB = this.mBottom;\n let pos;\n let item;\n let indicator;\n let t, b;\n let lastItemType = ~(ExpandableListPosition.CHILD | ExpandableListPosition.GROUP);\n const indicatorRect = this.mIndicatorRect;\n const childCount = this.getChildCount();\n for (let i = 0, childFlPos = this.mFirstPosition - headerViewsCount; i < childCount; i++, childFlPos++) {\n if (childFlPos < 0) {\n continue;\n }\n else if (childFlPos > lastChildFlPos) {\n break;\n }\n item = this.getChildAt(i);\n t = item.getTop();\n b = item.getBottom();\n if ((b < 0) || (t > myB))\n continue;\n pos = this.mConnector.getUnflattenedPos(childFlPos);\n const isLayoutRtl = this.isLayoutRtl();\n const width = this.getWidth();\n if (pos.position.type != lastItemType) {\n if (pos.position.type == ExpandableListPosition.CHILD) {\n indicatorRect.left = (this.mChildIndicatorLeft == ExpandableListView.CHILD_INDICATOR_INHERIT) ? this.mIndicatorLeft : this.mChildIndicatorLeft;\n indicatorRect.right = (this.mChildIndicatorRight == ExpandableListView.CHILD_INDICATOR_INHERIT) ? this.mIndicatorRight : this.mChildIndicatorRight;\n }\n else {\n indicatorRect.left = this.mIndicatorLeft;\n indicatorRect.right = this.mIndicatorRight;\n }\n if (isLayoutRtl) {\n const temp = indicatorRect.left;\n indicatorRect.left = width - indicatorRect.right;\n indicatorRect.right = width - temp;\n indicatorRect.left -= this.mPaddingRight;\n indicatorRect.right -= this.mPaddingRight;\n }\n else {\n indicatorRect.left += this.mPaddingLeft;\n indicatorRect.right += this.mPaddingLeft;\n }\n lastItemType = pos.position.type;\n }\n if (indicatorRect.left != indicatorRect.right) {\n if (this.mStackFromBottom) {\n indicatorRect.top = t;\n indicatorRect.bottom = b;\n }\n else {\n indicatorRect.top = t;\n indicatorRect.bottom = b;\n }\n indicator = this.getIndicator(pos);\n if (indicator != null) {\n indicator.setBounds(indicatorRect);\n indicator.draw(canvas);\n }\n }\n pos.recycle();\n }\n if (clipToPadding) {\n canvas.restoreToCount(saveCount);\n }\n }\n getIndicator(pos) {\n let indicator;\n if (pos.position.type == ExpandableListPosition.GROUP) {\n indicator = this.mGroupIndicator;\n if (indicator != null && indicator.isStateful()) {\n let isEmpty = (pos.groupMetadata == null) || (pos.groupMetadata.lastChildFlPos == pos.groupMetadata.flPos);\n const stateSetIndex = (pos.isExpanded() ? 1 : 0) |\n (isEmpty ? 2 : 0);\n indicator.setState(ExpandableListView.GROUP_STATE_SETS[stateSetIndex]);\n }\n }\n else {\n indicator = this.mChildIndicator;\n if (indicator != null && indicator.isStateful()) {\n const stateSet = pos.position.flatListPos == pos.groupMetadata.lastChildFlPos ? ExpandableListView.CHILD_LAST_STATE_SET : ExpandableListView.EMPTY_STATE_SET;\n indicator.setState(stateSet);\n }\n }\n return indicator;\n }\n setChildDivider(childDivider) {\n this.mChildDivider = childDivider;\n }\n drawDivider(canvas, bounds, childIndex) {\n let flatListPosition = childIndex + this.mFirstPosition;\n if (flatListPosition >= 0) {\n const adjustedPosition = this.getFlatPositionForConnector(flatListPosition);\n let pos = this.mConnector.getUnflattenedPos(adjustedPosition);\n if ((pos.position.type == ExpandableListPosition.CHILD) || (pos.isExpanded() && pos.groupMetadata.lastChildFlPos != pos.groupMetadata.flPos)) {\n const divider = this.mChildDivider;\n divider.setBounds(bounds);\n divider.draw(canvas);\n pos.recycle();\n return;\n }\n pos.recycle();\n }\n super.drawDivider(canvas, bounds, flatListPosition);\n }\n setAdapter(adapter) {\n throw Error(`new RuntimeException(\"For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of \" + \"setAdapter(ListAdapter)\")`);\n }\n getAdapter() {\n return super.getAdapter();\n }\n setOnItemClickListener(l) {\n super.setOnItemClickListener(l);\n }\n setExpandableAdapter(adapter) {\n this.mExpandAdapter = adapter;\n if (adapter != null) {\n this.mConnector = new ExpandableListConnector(adapter);\n }\n else {\n this.mConnector = null;\n }\n super.setAdapter(this.mConnector);\n }\n getExpandableListAdapter() {\n return this.mExpandAdapter;\n }\n isHeaderOrFooterPosition(position) {\n const footerViewsStart = this.mItemCount - this.getFooterViewsCount();\n return (position < this.getHeaderViewsCount() || position >= footerViewsStart);\n }\n getFlatPositionForConnector(flatListPosition) {\n return flatListPosition - this.getHeaderViewsCount();\n }\n getAbsoluteFlatPosition(flatListPosition) {\n return flatListPosition + this.getHeaderViewsCount();\n }\n performItemClick(v, position, id) {\n if (this.isHeaderOrFooterPosition(position)) {\n return super.performItemClick(v, position, id);\n }\n const adjustedPosition = this.getFlatPositionForConnector(position);\n return this.handleItemClick(v, adjustedPosition, id);\n }\n handleItemClick(v, position, id) {\n const posMetadata = this.mConnector.getUnflattenedPos(position);\n id = this.getChildOrGroupId(posMetadata.position);\n let returnValue;\n if (posMetadata.position.type == ExpandableListPosition.GROUP) {\n if (this.mOnGroupClickListener != null) {\n if (this.mOnGroupClickListener.onGroupClick(this, v, posMetadata.position.groupPos, id)) {\n posMetadata.recycle();\n return true;\n }\n }\n if (posMetadata.isExpanded()) {\n this.mConnector.collapseGroupWithMeta(posMetadata);\n this.playSoundEffect(SoundEffectConstants.CLICK);\n if (this.mOnGroupCollapseListener != null) {\n this.mOnGroupCollapseListener.onGroupCollapse(posMetadata.position.groupPos);\n }\n }\n else {\n this.mConnector.expandGroupWithMeta(posMetadata);\n this.playSoundEffect(SoundEffectConstants.CLICK);\n if (this.mOnGroupExpandListener != null) {\n this.mOnGroupExpandListener.onGroupExpand(posMetadata.position.groupPos);\n }\n const groupPos = posMetadata.position.groupPos;\n const groupFlatPos = posMetadata.position.flatListPos;\n const shiftedGroupPosition = groupFlatPos + this.getHeaderViewsCount();\n this.smoothScrollToPosition(shiftedGroupPosition + this.mExpandAdapter.getChildrenCount(groupPos), shiftedGroupPosition);\n }\n returnValue = true;\n }\n else {\n if (this.mOnChildClickListener != null) {\n this.playSoundEffect(SoundEffectConstants.CLICK);\n return this.mOnChildClickListener.onChildClick(this, v, posMetadata.position.groupPos, posMetadata.position.childPos, id);\n }\n returnValue = false;\n }\n posMetadata.recycle();\n return returnValue;\n }\n expandGroup(groupPos, animate = false) {\n let elGroupPos = ExpandableListPosition.obtain(ExpandableListPosition.GROUP, groupPos, -1, -1);\n let pm = this.mConnector.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n let retValue = this.mConnector.expandGroupWithMeta(pm);\n if (this.mOnGroupExpandListener != null) {\n this.mOnGroupExpandListener.onGroupExpand(groupPos);\n }\n if (animate) {\n const groupFlatPos = pm.position.flatListPos;\n const shiftedGroupPosition = groupFlatPos + this.getHeaderViewsCount();\n this.smoothScrollToPosition(shiftedGroupPosition + this.mExpandAdapter.getChildrenCount(groupPos), shiftedGroupPosition);\n }\n pm.recycle();\n return retValue;\n }\n collapseGroup(groupPos) {\n let retValue = this.mConnector.collapseGroup(groupPos);\n if (this.mOnGroupCollapseListener != null) {\n this.mOnGroupCollapseListener.onGroupCollapse(groupPos);\n }\n return retValue;\n }\n setOnGroupCollapseListener(onGroupCollapseListener) {\n this.mOnGroupCollapseListener = onGroupCollapseListener;\n }\n setOnGroupExpandListener(onGroupExpandListener) {\n this.mOnGroupExpandListener = onGroupExpandListener;\n }\n setOnGroupClickListener(onGroupClickListener) {\n this.mOnGroupClickListener = onGroupClickListener;\n }\n setOnChildClickListener(onChildClickListener) {\n this.mOnChildClickListener = onChildClickListener;\n }\n getExpandableListPosition(flatListPosition) {\n if (this.isHeaderOrFooterPosition(flatListPosition)) {\n return ExpandableListView.PACKED_POSITION_VALUE_NULL;\n }\n const adjustedPosition = this.getFlatPositionForConnector(flatListPosition);\n let pm = this.mConnector.getUnflattenedPos(adjustedPosition);\n let packedPos = pm.position.getPackedPosition();\n pm.recycle();\n return packedPos;\n }\n getFlatListPosition(packedPosition) {\n let elPackedPos = ExpandableListPosition.obtainPosition(packedPosition);\n let pm = this.mConnector.getFlattenedPos(elPackedPos);\n elPackedPos.recycle();\n const flatListPosition = pm.position.flatListPos;\n pm.recycle();\n return this.getAbsoluteFlatPosition(flatListPosition);\n }\n getSelectedPosition() {\n const selectedPos = this.getSelectedItemPosition();\n return this.getExpandableListPosition(selectedPos);\n }\n getSelectedId() {\n let packedPos = this.getSelectedPosition();\n if (packedPos == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n let groupPos = ExpandableListView.getPackedPositionGroup(packedPos);\n if (ExpandableListView.getPackedPositionType(packedPos) == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {\n return this.mExpandAdapter.getGroupId(groupPos);\n }\n else {\n return this.mExpandAdapter.getChildId(groupPos, ExpandableListView.getPackedPositionChild(packedPos));\n }\n }\n setSelectedGroup(groupPosition) {\n let elGroupPos = ExpandableListPosition.obtainGroupPosition(groupPosition);\n let pm = this.mConnector.getFlattenedPos(elGroupPos);\n elGroupPos.recycle();\n const absoluteFlatPosition = this.getAbsoluteFlatPosition(pm.position.flatListPos);\n super.setSelection(absoluteFlatPosition);\n pm.recycle();\n }\n setSelectedChild(groupPosition, childPosition, shouldExpandGroup) {\n let elChildPos = ExpandableListPosition.obtainChildPosition(groupPosition, childPosition);\n let flatChildPos = this.mConnector.getFlattenedPos(elChildPos);\n if (flatChildPos == null) {\n if (!shouldExpandGroup)\n return false;\n this.expandGroup(groupPosition);\n flatChildPos = this.mConnector.getFlattenedPos(elChildPos);\n if (flatChildPos == null) {\n throw Error(`new IllegalStateException(\"Could not find child\")`);\n }\n }\n let absoluteFlatPosition = this.getAbsoluteFlatPosition(flatChildPos.position.flatListPos);\n super.setSelection(absoluteFlatPosition);\n elChildPos.recycle();\n flatChildPos.recycle();\n return true;\n }\n isGroupExpanded(groupPosition) {\n return this.mConnector.isGroupExpanded(groupPosition);\n }\n static getPackedPositionType(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL) {\n return ExpandableListView.PACKED_POSITION_TYPE_NULL;\n }\n return (Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE)).equals(ExpandableListView.PACKED_POSITION_MASK_TYPE)\n ? ExpandableListView.PACKED_POSITION_TYPE_CHILD : ExpandableListView.PACKED_POSITION_TYPE_GROUP;\n }\n static getPackedPositionGroup(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n return (Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_GROUP))\n .shiftRight(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();\n }\n static getPackedPositionChild(packedPosition) {\n if (packedPosition == ExpandableListView.PACKED_POSITION_VALUE_NULL)\n return -1;\n if ((Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_TYPE)).notEquals(ExpandableListView.PACKED_POSITION_MASK_TYPE))\n return -1;\n return Long.fromNumber(packedPosition).and(ExpandableListView.PACKED_POSITION_MASK_CHILD).toNumber();\n }\n static getPackedPositionForChild(groupPosition, childPosition) {\n return Long.fromInt(ExpandableListView.PACKED_POSITION_TYPE_CHILD).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_TYPE)\n .or(Long.fromNumber(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP).shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP))\n .or(Long.fromNumber(childPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_CHILD)).toNumber();\n }\n static getPackedPositionForGroup(groupPosition) {\n return Long.fromInt(groupPosition).and(ExpandableListView.PACKED_POSITION_INT_MASK_GROUP)\n .shiftLeft(ExpandableListView.PACKED_POSITION_SHIFT_GROUP).toNumber();\n }\n getChildOrGroupId(position) {\n if (position.type == ExpandableListPosition.CHILD) {\n return this.mExpandAdapter.getChildId(position.groupPos, position.childPos);\n }\n else {\n return this.mExpandAdapter.getGroupId(position.groupPos);\n }\n }\n setChildIndicator(childIndicator) {\n this.mChildIndicator = childIndicator;\n }\n setChildIndicatorBounds(left, right) {\n this.mChildIndicatorLeft = left;\n this.mChildIndicatorRight = right;\n this.resolveChildIndicator();\n }\n setChildIndicatorBoundsRelative(start, end) {\n this.mChildIndicatorStart = start;\n this.mChildIndicatorEnd = end;\n this.resolveChildIndicator();\n }\n setGroupIndicator(groupIndicator) {\n this.mGroupIndicator = groupIndicator;\n if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) {\n this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth();\n }\n }\n setIndicatorBounds(left, right) {\n this.mIndicatorLeft = left;\n this.mIndicatorRight = right;\n this.resolveIndicator();\n }\n setIndicatorBoundsRelative(start, end) {\n this.mIndicatorStart = start;\n this.mIndicatorEnd = end;\n this.resolveIndicator();\n }\n }\n ExpandableListView.PACKED_POSITION_TYPE_GROUP = 0;\n ExpandableListView.PACKED_POSITION_TYPE_CHILD = 1;\n ExpandableListView.PACKED_POSITION_TYPE_NULL = 2;\n ExpandableListView.PACKED_POSITION_VALUE_NULL = 0x00000000FFFFFFFF;\n ExpandableListView.PACKED_POSITION_MASK_CHILD = Long.fromNumber(0x00000000FFFFFFFF);\n ExpandableListView.PACKED_POSITION_MASK_GROUP = Long.fromNumber(0x7FFFFFFF00000000);\n ExpandableListView.PACKED_POSITION_MASK_TYPE = Long.fromNumber(0x8000000000000000);\n ExpandableListView.PACKED_POSITION_SHIFT_GROUP = 32;\n ExpandableListView.PACKED_POSITION_SHIFT_TYPE = 63;\n ExpandableListView.PACKED_POSITION_INT_MASK_CHILD = Long.fromNumber(0xFFFFFFFF);\n ExpandableListView.PACKED_POSITION_INT_MASK_GROUP = Long.fromNumber(0x7FFFFFFF);\n ExpandableListView.CHILD_INDICATOR_INHERIT = -1;\n ExpandableListView.INDICATOR_UNDEFINED = -2;\n ExpandableListView.GROUP_EXPANDED_STATE_SET = [View.VIEW_STATE_EXPANDED];\n ExpandableListView.GROUP_EMPTY_STATE_SET = [View.VIEW_STATE_EMPTY];\n ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET = [View.VIEW_STATE_EXPANDED, View.VIEW_STATE_EMPTY];\n ExpandableListView.GROUP_STATE_SETS = [\n ExpandableListView.EMPTY_STATE_SET,\n ExpandableListView.GROUP_EXPANDED_STATE_SET,\n ExpandableListView.GROUP_EMPTY_STATE_SET,\n ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET\n ];\n ExpandableListView.CHILD_LAST_STATE_SET = [View.VIEW_STATE_LAST];\n widget.ExpandableListView = ExpandableListView;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObservable = android.database.DataSetObservable;\n var Long = goog.math.Long;\n const _0x8000000000000000 = Long.fromNumber(0x8000000000000000);\n const _0x7FFFFFFF = Long.fromNumber(0x7FFFFFFF);\n const _0xFFFFFFFF = Long.fromNumber(0xFFFFFFFF);\n class BaseExpandableListAdapter {\n constructor() {\n this.mDataSetObservable = new DataSetObservable();\n }\n registerDataSetObserver(observer) {\n this.mDataSetObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mDataSetObservable.unregisterObserver(observer);\n }\n notifyDataSetInvalidated() {\n this.mDataSetObservable.notifyInvalidated();\n }\n notifyDataSetChanged() {\n this.mDataSetObservable.notifyChanged();\n }\n areAllItemsEnabled() {\n return true;\n }\n onGroupCollapsed(groupPosition) {\n }\n onGroupExpanded(groupPosition) {\n }\n getCombinedChildId(groupId, childId) {\n const _groupId = Long.fromNumber(groupId);\n const _childId = Long.fromNumber(childId);\n return _0x8000000000000000.or(_groupId.and(_0x7FFFFFFF).shiftLeft(32)).or(_childId.and(_0xFFFFFFFF)).toNumber();\n }\n getCombinedGroupId(groupId) {\n const _groupId = Long.fromNumber(groupId);\n return _groupId.add(_0x7FFFFFFF).shiftLeft(32).toNumber();\n }\n isEmpty() {\n return this.getGroupCount() == 0;\n }\n getChildType(groupPosition, childPosition) {\n return 0;\n }\n getChildTypeCount() {\n return 1;\n }\n getGroupType(groupPosition) {\n return 0;\n }\n getGroupTypeCount() {\n return 1;\n }\n }\n widget.BaseExpandableListAdapter = BaseExpandableListAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Handler = android.os.Handler;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var WindowManager = android.view.WindowManager;\n var Window = android.view.Window;\n class Toast {\n constructor(context) {\n this.mDuration = 0;\n this.mHandler = new Handler();\n this.mDelayHide = (() => {\n const inner_this = this;\n return {\n run() {\n inner_this.mTN.hide();\n }\n };\n })();\n this.mContext = context;\n this.mTN = new Toast.TN();\n this.mTN.mY = context.getResources().getDisplayMetrics().density * 64;\n this.mTN.mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;\n }\n show() {\n if (this.mNextView == null) {\n throw Error(`new RuntimeException(\"setView must have been called\")`);\n }\n let tn = this.mTN;\n tn.mNextView = this.mNextView;\n tn.show();\n this.mHandler.removeCallbacks(this.mDelayHide);\n let showDuration = this.mDuration === Toast.LENGTH_LONG ? 3500 : (this.mDuration === Toast.LENGTH_SHORT ? 2000 : this.mDuration);\n this.mHandler.postDelayed(this.mDelayHide, showDuration);\n }\n cancel() {\n this.mTN.hide();\n }\n setView(view) {\n this.mNextView = view;\n }\n getView() {\n return this.mNextView;\n }\n setDuration(duration) {\n this.mDuration = duration;\n }\n getDuration() {\n return this.mDuration;\n }\n setGravity(gravity, xOffset, yOffset) {\n this.mTN.mGravity = gravity;\n this.mTN.mX = xOffset;\n this.mTN.mY = yOffset;\n }\n getGravity() {\n return this.mTN.mGravity;\n }\n getXOffset() {\n return this.mTN.mX;\n }\n getYOffset() {\n return this.mTN.mY;\n }\n static makeText(context, text, duration) {\n let result = new Toast(context);\n let inflate = context.getLayoutInflater();\n let v = inflate.inflate(android.R.layout.transient_notification, null);\n let tv = v.findViewById(android.R.id.message);\n tv.setMaxWidth(260 * context.getResources().getDisplayMetrics().density);\n tv.setText(text);\n result.mNextView = v;\n result.mDuration = duration;\n return result;\n }\n setText(s) {\n if (this.mNextView == null) {\n throw Error(`new RuntimeException(\"This Toast was not created with Toast.makeText()\")`);\n }\n let tv = this.mNextView.findViewById(android.R.id.message);\n if (tv == null) {\n throw Error(`new RuntimeException(\"This Toast was not created with Toast.makeText()\")`);\n }\n tv.setText(s);\n }\n }\n Toast.TAG = \"Toast\";\n Toast.localLOGV = false;\n Toast.LENGTH_SHORT = 0;\n Toast.LENGTH_LONG = 1;\n widget.Toast = Toast;\n (function (Toast) {\n class TN {\n constructor() {\n this.mShow = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.handleShow();\n }\n }\n return new _Inner();\n })();\n this.mHide = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.handleHide();\n inner_this.mNextView = null;\n }\n }\n return new _Inner();\n })();\n this.mHandler = new Handler();\n this.mGravity = 0;\n this.mX = 0;\n this.mY = 0;\n }\n show() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"SHOW: \" + this);\n this.mHandler.post(this.mShow);\n }\n hide() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HIDE: \" + this);\n this.mHandler.post(this.mHide);\n }\n handleShow() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HANDLE SHOW: \" + this + \" mView=\" + this.mView + \" mNextView=\" + this.mNextView);\n if (this.mView != this.mNextView) {\n this.handleHide();\n this.mView = this.mNextView;\n if (!this.mWindow) {\n this.mWindow = new Window(this.mView.getContext().getApplicationContext());\n const params = this.mWindow.getAttributes();\n params.height = WindowManager.LayoutParams.WRAP_CONTENT;\n params.width = WindowManager.LayoutParams.WRAP_CONTENT;\n params.dimAmount = 0;\n params.type = WindowManager.LayoutParams.TYPE_TOAST;\n params.setTitle(\"Toast\");\n params.leftMargin = params.rightMargin = 36 * this.mView.getContext().getResources().getDisplayMetrics().density;\n params.flags =\n WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;\n this.mWindow.setFloating(true);\n this.mWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mWindow.setWindowAnimations(android.R.anim.toast_enter, android.R.anim.toast_exit, null, null);\n }\n const params = this.mWindow.getAttributes();\n this.mWindow.setContentView(this.mView);\n let context = this.mView.getContext().getApplicationContext();\n this.mWM = context.getWindowManager();\n const gravity = Gravity.getAbsoluteGravity(this.mGravity);\n params.gravity = gravity;\n params.x = this.mX;\n params.y = this.mY;\n if (this.mWindow.getDecorView().getParent() != null) {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"REMOVE! \" + this.mView + \" in \" + this);\n this.mWM.removeWindow(this.mWindow);\n }\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"ADD! \" + this.mView + \" in \" + this);\n this.mWM.addWindow(this.mWindow);\n }\n }\n handleHide() {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"HANDLE HIDE: \" + this + \" mView=\" + this.mView);\n if (this.mView != null) {\n if (this.mView.getParent() != null) {\n if (Toast.localLOGV)\n Log.v(Toast.TAG, \"REMOVE! \" + this.mView + \" in \" + this);\n this.mWM.removeWindow(this.mWindow);\n }\n this.mView = null;\n }\n }\n }\n Toast.TN = TN;\n })(Toast = widget.Toast || (widget.Toast = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var content;\n (function (content) {\n var DialogInterface;\n (function (DialogInterface) {\n DialogInterface.BUTTON_POSITIVE = -1;\n DialogInterface.BUTTON_NEGATIVE = -2;\n DialogInterface.BUTTON_NEUTRAL = -3;\n DialogInterface.BUTTON1 = DialogInterface.BUTTON_POSITIVE;\n DialogInterface.BUTTON2 = DialogInterface.BUTTON_NEGATIVE;\n DialogInterface.BUTTON3 = DialogInterface.BUTTON_NEUTRAL;\n })(DialogInterface = content.DialogInterface || (content.DialogInterface = {}));\n })(content = android.content || (android.content = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Handler = android.os.Handler;\n var Message = android.os.Message;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var Window = android.view.Window;\n var WindowManager = android.view.WindowManager;\n var WeakReference = java.lang.ref.WeakReference;\n class Dialog {\n constructor(context, cancelable, cancelListener) {\n this.mCancelable = true;\n this.mCreated = false;\n this.mShowing = false;\n this.mCanceled = false;\n this.mHandler = new Handler();\n this.mDismissAction = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.dismissDialog();\n }\n }\n return new _Inner();\n })();\n this.mContext = context;\n this.mWindowManager = context.getWindowManager();\n let w = new Window(context);\n w.setFloating(true);\n w.setDimAmount(0.7);\n w.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mWindow = w;\n let dm = context.getResources().getDisplayMetrics();\n let decor = w.getDecorView();\n decor.setMinimumWidth(dm.density * 280);\n decor.setMinimumHeight(dm.density * 20);\n const onMeasure = decor.onMeasure;\n decor.onMeasure = (widthMeasureSpec, heightMeasureSpec) => {\n onMeasure.call(decor, widthMeasureSpec, heightMeasureSpec);\n let width = decor.getMeasuredWidth();\n if (width > 360 * dm.density) {\n let widthSpec = View.MeasureSpec.makeMeasureSpec(360 * dm.density, View.MeasureSpec.EXACTLY);\n onMeasure.call(decor, widthSpec, heightMeasureSpec);\n }\n };\n let wp = w.getAttributes();\n wp.flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n wp.height = wp.width = ViewGroup.LayoutParams.WRAP_CONTENT;\n wp.leftMargin = wp.rightMargin = wp.topMargin = wp.bottomMargin = dm.density * 16;\n w.setWindowAnimations(android.R.anim.dialog_enter, android.R.anim.dialog_exit, null, null);\n w.setChildWindowManager(this.mWindowManager);\n w.setGravity(Gravity.CENTER);\n w.setCallback(this);\n this.mListenersHandler = new Dialog.ListenersHandler(this);\n this.mCancelable = cancelable;\n this.setOnCancelListener(cancelListener);\n }\n getContext() {\n return this.mContext;\n }\n isShowing() {\n return this.mShowing;\n }\n show() {\n if (this.mShowing) {\n if (this.mDecor != null) {\n this.mDecor.setVisibility(View.VISIBLE);\n }\n return;\n }\n this.mCanceled = false;\n if (!this.mCreated) {\n this.dispatchOnCreate(null);\n }\n this.onStart();\n this.mDecor = this.mWindow.getDecorView();\n try {\n this.mWindowManager.addWindow(this.mWindow);\n this.mShowing = true;\n this.sendShowMessage();\n }\n finally {\n }\n }\n hide() {\n if (this.mDecor != null) {\n this.mDecor.setVisibility(View.GONE);\n }\n }\n dismiss() {\n this.dismissDialog();\n }\n dismissDialog() {\n if (this.mDecor == null || !this.mShowing) {\n return;\n }\n if (this.mWindow.isDestroyed()) {\n Log.e(Dialog.TAG, \"Tried to dismissDialog() but the Dialog's window was already destroyed!\");\n return;\n }\n try {\n this.mWindowManager.removeWindow(this.mWindow);\n }\n finally {\n this.mDecor = null;\n this.onStop();\n this.mShowing = false;\n this.sendDismissMessage();\n }\n }\n sendDismissMessage() {\n if (this.mDismissMessage != null) {\n Message.obtain(this.mDismissMessage).sendToTarget();\n }\n }\n sendShowMessage() {\n if (this.mShowMessage != null) {\n Message.obtain(this.mShowMessage).sendToTarget();\n }\n }\n dispatchOnCreate(savedInstanceState) {\n if (!this.mCreated) {\n this.onCreate(savedInstanceState);\n this.mCreated = true;\n }\n }\n onCreate(savedInstanceState) {\n }\n onStart() {\n }\n onStop() {\n }\n getWindow() {\n return this.mWindow;\n }\n getCurrentFocus() {\n return this.mWindow != null ? this.mWindow.getCurrentFocus() : null;\n }\n findViewById(id) {\n return this.mWindow.findViewById(id);\n }\n setContentView(view, params) {\n this.mWindow.setContentView(view, params);\n }\n addContentView(view, params) {\n this.mWindow.addContentView(view, params);\n }\n setTitle(title) {\n this.mWindow.setTitle(title);\n this.mWindow.getAttributes().setTitle(title);\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n event.startTracking();\n return true;\n }\n return false;\n }\n onKeyLongPress(keyCode, event) {\n return false;\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) {\n this.onBackPressed();\n return true;\n }\n return false;\n }\n onKeyMultiple(keyCode, repeatCount, event) {\n return false;\n }\n onBackPressed() {\n if (this.mCancelable) {\n this.cancel();\n }\n }\n onTouchEvent(event) {\n if (this.mCancelable && this.mShowing && this.mWindow.shouldCloseOnTouch(this.mContext, event)) {\n this.cancel();\n return true;\n }\n return false;\n }\n onTrackballEvent(event) {\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onWindowAttributesChanged(params) {\n if (this.mDecor != null) {\n this.mWindowManager.updateWindowLayout(this.mWindow, params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n dispatchKeyEvent(event) {\n if ((this.mOnKeyListener != null) && (this.mOnKeyListener.onKey(this, event.getKeyCode(), event))) {\n return true;\n }\n if (this.mWindow.superDispatchKeyEvent(event)) {\n return true;\n }\n return event.dispatch(this, this.mDecor != null ? this.mDecor.getKeyDispatcherState() : null, this);\n }\n dispatchTouchEvent(ev) {\n if (this.mWindow.superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n if (this.mWindow.superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n takeKeyEvents(get) {\n this.mWindow.takeKeyEvents(get);\n }\n getLayoutInflater() {\n return this.getWindow().getLayoutInflater();\n }\n setCancelable(flag) {\n this.mCancelable = flag;\n }\n setCanceledOnTouchOutside(cancel) {\n if (cancel && !this.mCancelable) {\n this.mCancelable = true;\n }\n this.mWindow.setCloseOnTouchOutside(cancel);\n }\n cancel() {\n if (!this.mCanceled && this.mCancelMessage != null) {\n this.mCanceled = true;\n Message.obtain(this.mCancelMessage).sendToTarget();\n }\n this.dismiss();\n }\n setOnCancelListener(listener) {\n if (this.mCancelAndDismissTaken != null) {\n throw Error(`new IllegalStateException(\"OnCancelListener is already taken by \" + this.mCancelAndDismissTaken + \" and can not be replaced.\")`);\n }\n if (listener != null) {\n this.mCancelMessage = this.mListenersHandler.obtainMessage(Dialog.CANCEL, listener);\n }\n else {\n this.mCancelMessage = null;\n }\n }\n setCancelMessage(msg) {\n this.mCancelMessage = msg;\n }\n setOnDismissListener(listener) {\n if (this.mCancelAndDismissTaken != null) {\n throw Error(`new IllegalStateException(\"OnDismissListener is already taken by \" + this.mCancelAndDismissTaken + \" and can not be replaced.\")`);\n }\n if (listener != null) {\n this.mDismissMessage = this.mListenersHandler.obtainMessage(Dialog.DISMISS, listener);\n }\n else {\n this.mDismissMessage = null;\n }\n }\n setOnShowListener(listener) {\n if (listener != null) {\n this.mShowMessage = this.mListenersHandler.obtainMessage(Dialog.SHOW, listener);\n }\n else {\n this.mShowMessage = null;\n }\n }\n setDismissMessage(msg) {\n this.mDismissMessage = msg;\n }\n takeCancelAndDismissListeners(msg, cancel, dismiss) {\n if (this.mCancelAndDismissTaken != null) {\n this.mCancelAndDismissTaken = null;\n }\n else if (this.mCancelMessage != null || this.mDismissMessage != null) {\n return false;\n }\n this.setOnCancelListener(cancel);\n this.setOnDismissListener(dismiss);\n this.mCancelAndDismissTaken = msg;\n return true;\n }\n setOnKeyListener(onKeyListener) {\n this.mOnKeyListener = onKeyListener;\n }\n }\n Dialog.TAG = \"Dialog\";\n Dialog.DISMISS = 0x43;\n Dialog.CANCEL = 0x44;\n Dialog.SHOW = 0x45;\n Dialog.DIALOG_SHOWING_TAG = \"android:dialogShowing\";\n Dialog.DIALOG_HIERARCHY_TAG = \"android:dialogHierarchy\";\n app.Dialog = Dialog;\n (function (Dialog) {\n class ListenersHandler extends Handler {\n constructor(dialog) {\n super();\n this.mDialog = new WeakReference(dialog);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case Dialog.DISMISS:\n msg.obj.onDismiss(this.mDialog.get());\n break;\n case Dialog.CANCEL:\n msg.obj.onCancel(this.mDialog.get());\n break;\n case Dialog.SHOW:\n msg.obj.onShow(this.mDialog.get());\n break;\n }\n }\n }\n Dialog.ListenersHandler = ListenersHandler;\n })(Dialog = app.Dialog || (app.Dialog = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Log = android.util.Log;\n var ArrayList = java.util.ArrayList;\n var Arrays = java.util.Arrays;\n var Collections = java.util.Collections;\n var BaseAdapter = android.widget.BaseAdapter;\n class ArrayAdapter extends BaseAdapter {\n constructor(...args) {\n super();\n this.mNotifyOnChange = true;\n if (args.length === 2) {\n this.init(args[0], args[1], null, new ArrayList());\n }\n else if (args.length === 3) {\n if (args[2] instanceof Array) {\n this.init(args[0], args[1], null, Arrays.asList(args[2]));\n }\n else {\n this.init(args[0], args[1], args[2], new ArrayList());\n }\n }\n else if (args.length === 4) {\n this.init(args[0], args[1], args[2], args[3]);\n }\n }\n add(object) {\n {\n this.mObjects.add(object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n addAll(collection) {\n {\n this.mObjects.addAll(collection);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n insert(object, index) {\n {\n this.mObjects.add(index, object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n remove(object) {\n {\n this.mObjects.remove(object);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n clear() {\n {\n this.mObjects.clear();\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n sort(comparator) {\n {\n Collections.sort(this.mObjects, comparator);\n }\n if (this.mNotifyOnChange)\n this.notifyDataSetChanged();\n }\n notifyDataSetChanged() {\n super.notifyDataSetChanged();\n this.mNotifyOnChange = true;\n }\n setNotifyOnChange(notifyOnChange) {\n this.mNotifyOnChange = notifyOnChange;\n }\n init(context, resource, textViewResourceId, objects) {\n this.mContext = context;\n this.mInflater = context.getLayoutInflater();\n this.mResource = this.mDropDownResource = resource;\n if (objects instanceof Array)\n objects = Arrays.asList(objects);\n this.mObjects = objects;\n this.mFieldId = textViewResourceId;\n }\n getContext() {\n return this.mContext;\n }\n getCount() {\n return this.mObjects.size();\n }\n getItem(position) {\n return this.mObjects.get(position);\n }\n getPosition(item) {\n return this.mObjects.indexOf(item);\n }\n getItemId(position) {\n return position;\n }\n getView(position, convertView, parent) {\n return this.createViewFromResource(position, convertView, parent, this.mResource);\n }\n createViewFromResource(position, convertView, parent, resource) {\n let view;\n let text;\n if (convertView == null) {\n view = this.mInflater.inflate(this.mContext.getResources().getLayout(resource), parent, false);\n }\n else {\n view = convertView;\n }\n try {\n if (this.mFieldId == null) {\n text = view;\n }\n else {\n text = view.findViewById(this.mFieldId);\n }\n }\n catch (e) {\n Log.e(\"ArrayAdapter\", \"You must supply a resource ID for a TextView\");\n throw Error(`new IllegalStateException(\"ArrayAdapter requires the resource ID to be a TextView\", e)`);\n }\n let item = this.getItem(position);\n if (typeof item === 'string') {\n text.setText(item);\n }\n else {\n text.setText(item.toString());\n }\n return view;\n }\n setDropDownViewResource(resource) {\n this.mDropDownResource = resource;\n }\n getDropDownView(position, convertView, parent) {\n return this.createViewFromResource(position, convertView, parent, this.mDropDownResource);\n }\n }\n widget.ArrayAdapter = ArrayAdapter;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n const MATCH_PARENT = android.view.ViewGroup.LayoutParams.MATCH_PARENT;\n var R = android.R;\n var DialogInterface = android.content.DialogInterface;\n var Handler = android.os.Handler;\n var Message = android.os.Message;\n var TextUtils = android.text.TextUtils;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var LayoutParams = android.view.ViewGroup.LayoutParams;\n var ArrayAdapter = android.widget.ArrayAdapter;\n var LinearLayout = android.widget.LinearLayout;\n var ListView = android.widget.ListView;\n var WeakReference = java.lang.ref.WeakReference;\n class AlertController {\n constructor(context, di, window) {\n this.mViewSpacingLeft = 0;\n this.mViewSpacingTop = 0;\n this.mViewSpacingRight = 0;\n this.mViewSpacingBottom = 0;\n this.mViewSpacingSpecified = false;\n this.mCheckedItem = -1;\n this.mButtonHandler = (() => {\n const inner_this = this;\n class _Inner {\n onClick(v) {\n let m = null;\n if (v == inner_this.mButtonPositive && inner_this.mButtonPositiveMessage != null) {\n m = Message.obtain(inner_this.mButtonPositiveMessage);\n }\n else if (v == inner_this.mButtonNegative && inner_this.mButtonNegativeMessage != null) {\n m = Message.obtain(inner_this.mButtonNegativeMessage);\n }\n else if (v == inner_this.mButtonNeutral && inner_this.mButtonNeutralMessage != null) {\n m = Message.obtain(inner_this.mButtonNeutralMessage);\n }\n if (m != null) {\n m.sendToTarget();\n }\n inner_this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG, inner_this.mDialogInterface).sendToTarget();\n }\n }\n return new _Inner();\n })();\n this.mContext = context;\n this.mDialogInterface = di;\n this.mWindow = window;\n this.mHandler = new AlertController.ButtonHandler(di);\n this.mAlertDialogLayout = R.layout.alert_dialog;\n this.mListLayout = R.layout.select_dialog;\n this.mMultiChoiceItemLayout = R.layout.select_dialog_multichoice;\n this.mSingleChoiceItemLayout = R.layout.select_dialog_singlechoice;\n this.mListItemLayout = R.layout.select_dialog_item;\n }\n static shouldCenterSingleButton(context) {\n return true;\n }\n installContent() {\n let layout = this.mContext.getLayoutInflater().inflate(this.mAlertDialogLayout, this.mWindow.getContentParent(), false);\n this.mWindow.setContentView(layout);\n this.setupView();\n }\n setTitle(title) {\n this.mTitle = title;\n if (this.mTitleView != null) {\n this.mTitleView.setText(title);\n }\n }\n setCustomTitle(customTitleView) {\n this.mCustomTitleView = customTitleView;\n }\n setMessage(message) {\n this.mMessage = message;\n if (this.mMessageView != null) {\n this.mMessageView.setText(message);\n }\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.mView = view;\n if (!viewSpacingLeft && !viewSpacingTop && !viewSpacingRight && !viewSpacingBottom) {\n this.mViewSpacingSpecified = false;\n }\n else {\n this.mViewSpacingSpecified = true;\n this.mViewSpacingLeft = viewSpacingLeft;\n this.mViewSpacingTop = viewSpacingTop;\n this.mViewSpacingRight = viewSpacingRight;\n this.mViewSpacingBottom = viewSpacingBottom;\n }\n }\n setButton(whichButton, text, listener, msg) {\n if (msg == null && listener != null) {\n msg = this.mHandler.obtainMessage(whichButton, listener);\n }\n switch (whichButton) {\n case DialogInterface.BUTTON_POSITIVE:\n this.mButtonPositiveText = text;\n this.mButtonPositiveMessage = msg;\n break;\n case DialogInterface.BUTTON_NEGATIVE:\n this.mButtonNegativeText = text;\n this.mButtonNegativeMessage = msg;\n break;\n case DialogInterface.BUTTON_NEUTRAL:\n this.mButtonNeutralText = text;\n this.mButtonNeutralMessage = msg;\n break;\n default:\n throw Error(`new IllegalArgumentException(\"Button does not exist\")`);\n }\n }\n setIcon(icon) {\n this.mIcon = icon;\n if ((this.mIconView != null) && (this.mIcon != null)) {\n this.mIconView.setImageDrawable(icon);\n }\n }\n setInverseBackgroundForced(forceInverseBackground) {\n this.mForceInverseBackground = forceInverseBackground;\n }\n getListView() {\n return this.mListView;\n }\n getButton(whichButton) {\n switch (whichButton) {\n case DialogInterface.BUTTON_POSITIVE:\n return this.mButtonPositive;\n case DialogInterface.BUTTON_NEGATIVE:\n return this.mButtonNegative;\n case DialogInterface.BUTTON_NEUTRAL:\n return this.mButtonNeutral;\n default:\n return null;\n }\n }\n onKeyDown(keyCode, event) {\n return this.mScrollView != null && this.mScrollView.executeKeyEvent(event);\n }\n onKeyUp(keyCode, event) {\n return this.mScrollView != null && this.mScrollView.executeKeyEvent(event);\n }\n setupView() {\n let contentPanel = this.mWindow.findViewById(R.id.contentPanel);\n this.setupContent(contentPanel);\n let hasButtons = this.setupButtons();\n let topPanel = this.mWindow.findViewById(R.id.topPanel);\n let hasTitle = this.setupTitle(topPanel);\n let buttonPanel = this.mWindow.findViewById(R.id.buttonPanel);\n if (!hasButtons) {\n buttonPanel.setVisibility(View.GONE);\n this.mWindow.setCloseOnTouchOutsideIfNotSet(true);\n }\n let customPanel = null;\n if (this.mView != null) {\n customPanel = this.mWindow.findViewById(R.id.customPanel);\n let custom = this.mWindow.findViewById(R.id.custom);\n custom.addView(this.mView, new LayoutParams(MATCH_PARENT, MATCH_PARENT));\n if (this.mViewSpacingSpecified) {\n custom.setPadding(this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom);\n }\n if (this.mListView != null) {\n customPanel.getLayoutParams().weight = 0;\n }\n }\n else {\n this.mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);\n }\n if (hasTitle) {\n let divider = null;\n if (this.mMessage != null || this.mView != null || this.mListView != null) {\n divider = this.mWindow.findViewById(R.id.titleDivider);\n }\n else {\n divider = this.mWindow.findViewById(R.id.titleDividerTop);\n }\n if (divider != null) {\n divider.setVisibility(View.VISIBLE);\n }\n }\n this.setBackground(topPanel, contentPanel, customPanel, hasButtons, hasTitle, buttonPanel);\n }\n setupTitle(topPanel) {\n let hasTitle = true;\n if (this.mCustomTitleView != null) {\n let lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n topPanel.addView(this.mCustomTitleView, 0, lp);\n let titleTemplate = this.mWindow.findViewById(R.id.title_template);\n titleTemplate.setVisibility(View.GONE);\n }\n else {\n const hasTextTitle = !TextUtils.isEmpty(this.mTitle);\n this.mIconView = this.mWindow.findViewById(R.id.icon);\n if (hasTextTitle) {\n this.mTitleView = this.mWindow.findViewById(R.id.alertTitle);\n this.mTitleView.setText(this.mTitle);\n if (this.mIcon != null) {\n this.mIconView.setImageDrawable(this.mIcon);\n }\n else {\n this.mTitleView.setPadding(this.mIconView.getPaddingLeft(), this.mIconView.getPaddingTop(), this.mIconView.getPaddingRight(), this.mIconView.getPaddingBottom());\n this.mIconView.setVisibility(View.GONE);\n }\n }\n else {\n let titleTemplate = this.mWindow.findViewById(R.id.title_template);\n titleTemplate.setVisibility(View.GONE);\n this.mIconView.setVisibility(View.GONE);\n topPanel.setVisibility(View.GONE);\n hasTitle = false;\n }\n }\n return hasTitle;\n }\n setupContent(contentPanel) {\n this.mScrollView = this.mWindow.findViewById(R.id.scrollView);\n this.mScrollView.setFocusable(false);\n this.mMessageView = this.mWindow.findViewById(R.id.message);\n if (this.mMessageView == null) {\n return;\n }\n if (this.mMessage != null) {\n this.mMessageView.setText(this.mMessage);\n }\n else {\n this.mMessageView.setVisibility(View.GONE);\n this.mScrollView.removeView(this.mMessageView);\n if (this.mListView != null) {\n contentPanel.removeView(this.mWindow.findViewById(R.id.scrollView));\n contentPanel.addView(this.mListView, new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));\n contentPanel.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, 0, 1.0));\n }\n else {\n contentPanel.setVisibility(View.GONE);\n }\n }\n }\n setupButtons() {\n let BIT_BUTTON_POSITIVE = 1;\n let BIT_BUTTON_NEGATIVE = 2;\n let BIT_BUTTON_NEUTRAL = 4;\n let whichButtons = 0;\n this.mButtonPositive = this.mWindow.findViewById(R.id.button1);\n this.mButtonPositive.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonPositiveText)) {\n this.mButtonPositive.setVisibility(View.GONE);\n }\n else {\n this.mButtonPositive.setText(this.mButtonPositiveText);\n this.mButtonPositive.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_POSITIVE;\n }\n this.mButtonNegative = this.mWindow.findViewById(R.id.button2);\n this.mButtonNegative.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonNegativeText)) {\n this.mButtonNegative.setVisibility(View.GONE);\n }\n else {\n this.mButtonNegative.setText(this.mButtonNegativeText);\n this.mButtonNegative.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_NEGATIVE;\n }\n this.mButtonNeutral = this.mWindow.findViewById(R.id.button3);\n this.mButtonNeutral.setOnClickListener(this.mButtonHandler);\n if (TextUtils.isEmpty(this.mButtonNeutralText)) {\n this.mButtonNeutral.setVisibility(View.GONE);\n }\n else {\n this.mButtonNeutral.setText(this.mButtonNeutralText);\n this.mButtonNeutral.setVisibility(View.VISIBLE);\n whichButtons = whichButtons | BIT_BUTTON_NEUTRAL;\n }\n if (AlertController.shouldCenterSingleButton(this.mContext)) {\n if (whichButtons == BIT_BUTTON_POSITIVE) {\n this.centerButton(this.mButtonPositive);\n }\n else if (whichButtons == BIT_BUTTON_NEGATIVE) {\n this.centerButton(this.mButtonNegative);\n }\n else if (whichButtons == BIT_BUTTON_NEUTRAL) {\n this.centerButton(this.mButtonNeutral);\n }\n }\n return whichButtons != 0;\n }\n centerButton(button) {\n let params = button.getLayoutParams();\n params.gravity = Gravity.CENTER_HORIZONTAL;\n params.weight = 0.5;\n button.setLayoutParams(params);\n let leftSpacer = this.mWindow.findViewById(R.id.leftSpacer);\n if (leftSpacer != null) {\n leftSpacer.setVisibility(View.VISIBLE);\n }\n let rightSpacer = this.mWindow.findViewById(R.id.rightSpacer);\n if (rightSpacer != null) {\n rightSpacer.setVisibility(View.VISIBLE);\n }\n }\n setBackground(topPanel, contentPanel, customPanel, hasButtons, hasTitle, buttonPanel) {\n let fullDark = R.image.popup_full_bright;\n let topDark = R.image.popup_top_bright;\n let centerDark = R.image.popup_center_bright;\n let bottomDark = R.image.popup_bottom_bright;\n let fullBright = R.image.popup_full_bright;\n let topBright = R.image.popup_top_bright;\n let centerBright = R.image.popup_center_bright;\n let bottomBright = R.image.popup_bottom_bright;\n let bottomMedium = R.image.popup_bottom_bright;\n let views = new Array(4);\n let light = new Array(4);\n let lastView = null;\n let lastLight = false;\n let pos = 0;\n if (hasTitle) {\n views[pos] = topPanel;\n light[pos] = false;\n pos++;\n }\n views[pos] = (contentPanel.getVisibility() == View.GONE) ? null : contentPanel;\n light[pos] = this.mListView != null;\n pos++;\n if (customPanel != null) {\n views[pos] = customPanel;\n light[pos] = this.mForceInverseBackground;\n pos++;\n }\n if (hasButtons) {\n views[pos] = buttonPanel;\n light[pos] = true;\n }\n let setView = false;\n for (pos = 0; pos < views.length; pos++) {\n let v = views[pos];\n if (v == null) {\n continue;\n }\n if (lastView != null) {\n if (!setView) {\n lastView.setBackground(lastLight ? topBright : topDark);\n }\n else {\n lastView.setBackground(lastLight ? centerBright : centerDark);\n }\n setView = true;\n }\n lastView = v;\n lastLight = light[pos];\n }\n if (lastView != null) {\n if (setView) {\n lastView.setBackground(lastLight ? (hasButtons ? bottomMedium : bottomBright) : bottomDark);\n }\n else {\n lastView.setBackground(lastLight ? fullBright : fullDark);\n }\n }\n if ((this.mListView != null) && (this.mAdapter != null)) {\n this.mListView.setAdapter(this.mAdapter);\n if (this.mCheckedItem > -1) {\n this.mListView.setItemChecked(this.mCheckedItem, true);\n this.mListView.setSelection(this.mCheckedItem);\n }\n }\n }\n }\n app.AlertController = AlertController;\n (function (AlertController) {\n class ButtonHandler extends Handler {\n constructor(dialog) {\n super();\n this.mDialog = new WeakReference(dialog);\n }\n handleMessage(msg) {\n switch (msg.what) {\n case DialogInterface.BUTTON_POSITIVE:\n case DialogInterface.BUTTON_NEGATIVE:\n case DialogInterface.BUTTON_NEUTRAL:\n msg.obj.onClick(this.mDialog.get(), msg.what);\n break;\n case ButtonHandler.MSG_DISMISS_DIALOG:\n msg.obj.dismiss();\n }\n }\n }\n ButtonHandler.MSG_DISMISS_DIALOG = 1;\n AlertController.ButtonHandler = ButtonHandler;\n class RecycleListView extends ListView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mRecycleOnMeasure = true;\n }\n recycleOnMeasure() {\n return this.mRecycleOnMeasure;\n }\n }\n AlertController.RecycleListView = RecycleListView;\n class AlertParams {\n constructor(context) {\n this.mIconId = 0;\n this.mViewSpacingLeft = 0;\n this.mViewSpacingTop = 0;\n this.mViewSpacingRight = 0;\n this.mViewSpacingBottom = 0;\n this.mViewSpacingSpecified = false;\n this.mCheckedItem = -1;\n this.mRecycleOnMeasure = true;\n this.mContext = context;\n this.mCancelable = true;\n this.mInflater = context.getLayoutInflater();\n }\n apply(dialog) {\n if (this.mCustomTitleView != null) {\n dialog.setCustomTitle(this.mCustomTitleView);\n }\n else {\n if (this.mTitle != null) {\n dialog.setTitle(this.mTitle);\n }\n if (this.mIcon != null) {\n dialog.setIcon(this.mIcon);\n }\n }\n if (this.mMessage != null) {\n dialog.setMessage(this.mMessage);\n }\n if (this.mPositiveButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_POSITIVE, this.mPositiveButtonText, this.mPositiveButtonListener, null);\n }\n if (this.mNegativeButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_NEGATIVE, this.mNegativeButtonText, this.mNegativeButtonListener, null);\n }\n if (this.mNeutralButtonText != null) {\n dialog.setButton(DialogInterface.BUTTON_NEUTRAL, this.mNeutralButtonText, this.mNeutralButtonListener, null);\n }\n if (this.mForceInverseBackground) {\n dialog.setInverseBackgroundForced(true);\n }\n if ((this.mItems != null) || (this.mAdapter != null)) {\n this.createListView(dialog);\n }\n if (this.mView != null) {\n if (this.mViewSpacingSpecified) {\n dialog.setView(this.mView, this.mViewSpacingLeft, this.mViewSpacingTop, this.mViewSpacingRight, this.mViewSpacingBottom);\n }\n else {\n dialog.setView(this.mView);\n }\n }\n }\n createListView(dialog) {\n const listView = this.mInflater.inflate(dialog.mListLayout, null);\n let adapter;\n if (this.mIsMultiChoice) {\n adapter = (() => {\n const inner_this = this;\n class _Inner extends ArrayAdapter {\n getView(position, convertView, parent) {\n let view = super.getView(position, convertView, parent);\n if (inner_this.mCheckedItems != null) {\n let isItemChecked = inner_this.mCheckedItems[position];\n if (isItemChecked) {\n listView.setItemChecked(position, true);\n }\n }\n return view;\n }\n }\n return new _Inner(this.mContext, dialog.mMultiChoiceItemLayout, R.id.text1, this.mItems);\n })();\n }\n else {\n let layout = this.mIsSingleChoice ? dialog.mSingleChoiceItemLayout : dialog.mListItemLayout;\n adapter = (this.mAdapter != null) ? this.mAdapter : new ArrayAdapter(this.mContext, layout, R.id.text1, this.mItems);\n }\n if (this.mOnPrepareListViewListener != null) {\n this.mOnPrepareListViewListener.onPrepareListView(listView);\n }\n dialog.mAdapter = adapter;\n dialog.mCheckedItem = this.mCheckedItem;\n const inner_this = this;\n if (this.mOnClickListener != null) {\n listView.setOnItemClickListener({\n onItemClick(parent, v, position, id) {\n inner_this.mOnClickListener.onClick(dialog.mDialogInterface, position);\n if (!inner_this.mIsSingleChoice) {\n dialog.mDialogInterface.dismiss();\n }\n }\n });\n }\n else if (this.mOnCheckboxClickListener != null) {\n listView.setOnItemClickListener({\n onItemClick(parent, v, position, id) {\n if (inner_this.mCheckedItems != null) {\n inner_this.mCheckedItems[position] = listView.isItemChecked(position);\n }\n inner_this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface, position, listView.isItemChecked(position));\n }\n });\n }\n if (this.mOnItemSelectedListener != null) {\n listView.setOnItemSelectedListener(this.mOnItemSelectedListener);\n }\n if (this.mIsSingleChoice) {\n listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);\n }\n else if (this.mIsMultiChoice) {\n listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);\n }\n listView.mRecycleOnMeasure = this.mRecycleOnMeasure;\n dialog.mListView = listView;\n }\n }\n AlertController.AlertParams = AlertParams;\n })(AlertController = app.AlertController || (app.AlertController = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var Dialog = android.app.Dialog;\n class AlertDialog extends Dialog {\n constructor(context, cancelable, cancelListener) {\n super(context);\n this.setCancelable(cancelable);\n this.setOnCancelListener(cancelListener);\n this.mAlert = new app.AlertController(context, this, this.getWindow());\n }\n getButton(whichButton) {\n return this.mAlert.getButton(whichButton);\n }\n getListView() {\n return this.mAlert.getListView();\n }\n setTitle(title) {\n super.setTitle(title);\n this.mAlert.setTitle(title);\n }\n setCustomTitle(customTitleView) {\n this.mAlert.setCustomTitle(customTitleView);\n }\n setMessage(message) {\n this.mAlert.setMessage(message);\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.mAlert.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, viewSpacingBottom);\n }\n setButton(whichButton, text, listener) {\n this.mAlert.setButton(whichButton, text, listener, null);\n }\n setIcon(icon) {\n this.mAlert.setIcon(icon);\n }\n onCreate(savedInstanceState) {\n super.onCreate(savedInstanceState);\n this.mAlert.installContent();\n }\n onKeyDown(keyCode, event) {\n if (this.mAlert.onKeyDown(keyCode, event))\n return true;\n return super.onKeyDown(keyCode, event);\n }\n onKeyUp(keyCode, event) {\n if (this.mAlert.onKeyUp(keyCode, event))\n return true;\n return super.onKeyUp(keyCode, event);\n }\n }\n AlertDialog.THEME_TRADITIONAL = 1;\n AlertDialog.THEME_HOLO_DARK = 2;\n AlertDialog.THEME_HOLO_LIGHT = 3;\n AlertDialog.THEME_DEVICE_DEFAULT_DARK = 4;\n AlertDialog.THEME_DEVICE_DEFAULT_LIGHT = 5;\n app.AlertDialog = AlertDialog;\n (function (AlertDialog) {\n class Builder {\n constructor(context) {\n this.P = new app.AlertController.AlertParams(context);\n }\n getContext() {\n return this.P.mContext;\n }\n setTitle(title) {\n this.P.mTitle = title;\n return this;\n }\n setCustomTitle(customTitleView) {\n this.P.mCustomTitleView = customTitleView;\n return this;\n }\n setMessage(message) {\n this.P.mMessage = message;\n return this;\n }\n setIcon(icon) {\n this.P.mIcon = icon;\n return this;\n }\n setPositiveButton(text, listener) {\n this.P.mPositiveButtonText = text;\n this.P.mPositiveButtonListener = listener;\n return this;\n }\n setNegativeButton(text, listener) {\n this.P.mNegativeButtonText = text;\n this.P.mNegativeButtonListener = listener;\n return this;\n }\n setNeutralButton(text, listener) {\n this.P.mNeutralButtonText = text;\n this.P.mNeutralButtonListener = listener;\n return this;\n }\n setCancelable(cancelable) {\n this.P.mCancelable = cancelable;\n return this;\n }\n setOnCancelListener(onCancelListener) {\n this.P.mOnCancelListener = onCancelListener;\n return this;\n }\n setOnDismissListener(onDismissListener) {\n this.P.mOnDismissListener = onDismissListener;\n return this;\n }\n setOnKeyListener(onKeyListener) {\n this.P.mOnKeyListener = onKeyListener;\n return this;\n }\n setItems(items, listener) {\n this.P.mItems = items;\n this.P.mOnClickListener = listener;\n return this;\n }\n setAdapter(adapter, listener) {\n this.P.mAdapter = adapter;\n this.P.mOnClickListener = listener;\n return this;\n }\n setMultiChoiceItems(items, checkedItems, listener) {\n this.P.mItems = items;\n this.P.mOnCheckboxClickListener = listener;\n this.P.mCheckedItems = checkedItems;\n this.P.mIsMultiChoice = true;\n return this;\n }\n setSingleChoiceItems(items, checkedItem, listener) {\n this.P.mItems = items;\n this.P.mOnClickListener = listener;\n this.P.mCheckedItem = checkedItem;\n this.P.mIsSingleChoice = true;\n return this;\n }\n setSingleChoiceItemsWithAdapter(adapter, checkedItem, listener) {\n this.P.mAdapter = adapter;\n this.P.mOnClickListener = listener;\n this.P.mCheckedItem = checkedItem;\n this.P.mIsSingleChoice = true;\n return this;\n }\n setOnItemSelectedListener(listener) {\n this.P.mOnItemSelectedListener = listener;\n return this;\n }\n setView(view, viewSpacingLeft = 0, viewSpacingTop = 0, viewSpacingRight = 0, viewSpacingBottom = 0) {\n this.P.mView = view;\n if (!viewSpacingLeft && !viewSpacingTop && !viewSpacingRight && !viewSpacingBottom) {\n this.P.mViewSpacingSpecified = false;\n }\n else {\n this.P.mViewSpacingSpecified = true;\n this.P.mViewSpacingLeft = viewSpacingLeft;\n this.P.mViewSpacingTop = viewSpacingTop;\n this.P.mViewSpacingRight = viewSpacingRight;\n this.P.mViewSpacingBottom = viewSpacingBottom;\n }\n return this;\n }\n setInverseBackgroundForced(useInverseBackground) {\n this.P.mForceInverseBackground = useInverseBackground;\n return this;\n }\n setRecycleOnMeasureEnabled(enabled) {\n this.P.mRecycleOnMeasure = enabled;\n return this;\n }\n create() {\n const dialog = new AlertDialog(this.P.mContext);\n this.P.apply(dialog.mAlert);\n dialog.setCancelable(this.P.mCancelable);\n if (this.P.mCancelable) {\n dialog.setCanceledOnTouchOutside(true);\n }\n dialog.setOnCancelListener(this.P.mOnCancelListener);\n dialog.setOnDismissListener(this.P.mOnDismissListener);\n if (this.P.mOnKeyListener != null) {\n dialog.setOnKeyListener(this.P.mOnKeyListener);\n }\n return dialog;\n }\n show() {\n let dialog = this.create();\n dialog.show();\n return dialog;\n }\n }\n AlertDialog.Builder = Builder;\n })(AlertDialog = app.AlertDialog || (app.AlertDialog = {}));\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var Rect = android.graphics.Rect;\n var SparseArray = android.util.SparseArray;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var AdapterView = android.widget.AdapterView;\n var ArrayAdapter = android.widget.ArrayAdapter;\n class AbsSpinner extends AdapterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHeightMeasureSpec = 0;\n this.mWidthMeasureSpec = 0;\n this.mSelectionLeftPadding = 0;\n this.mSelectionTopPadding = 0;\n this.mSelectionRightPadding = 0;\n this.mSelectionBottomPadding = 0;\n this.mSpinnerPadding = new Rect();\n this.mRecycler = new AbsSpinner.RecycleBin(this);\n this.initAbsSpinner();\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const entries = a.getTextArray('entries');\n if (entries != null) {\n const adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, entries);\n adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n this.setAdapter(adapter);\n }\n a.recycle();\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('entries', {\n setter(v, value, attrBinder) {\n let entries = attrBinder.parseStringArray(value);\n if (entries != null) {\n let adapter = new ArrayAdapter(v.getContext(), android.R.layout.simple_spinner_item, entries);\n adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n v.setAdapter(adapter);\n }\n }\n });\n }\n initAbsSpinner() {\n this.setFocusable(true);\n this.setWillNotDraw(false);\n }\n setAdapter(adapter) {\n if (null != this.mAdapter) {\n this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver);\n this.resetList();\n }\n this.mAdapter = adapter;\n this.mOldSelectedPosition = AbsSpinner.INVALID_POSITION;\n this.mOldSelectedRowId = AbsSpinner.INVALID_ROW_ID;\n if (this.mAdapter != null) {\n this.mOldItemCount = this.mItemCount;\n this.mItemCount = this.mAdapter.getCount();\n this.checkFocus();\n this.mDataSetObserver = new AdapterView.AdapterDataSetObserver(this);\n this.mAdapter.registerDataSetObserver(this.mDataSetObserver);\n let position = this.mItemCount > 0 ? 0 : AbsSpinner.INVALID_POSITION;\n this.setSelectedPositionInt(position);\n this.setNextSelectedPositionInt(position);\n if (this.mItemCount == 0) {\n this.checkSelectionChanged();\n }\n }\n else {\n this.checkFocus();\n this.resetList();\n this.checkSelectionChanged();\n }\n this.requestLayout();\n }\n resetList() {\n this.mDataChanged = false;\n this.mNeedSync = false;\n this.removeAllViewsInLayout();\n this.mOldSelectedPosition = AbsSpinner.INVALID_POSITION;\n this.mOldSelectedRowId = AbsSpinner.INVALID_ROW_ID;\n this.setSelectedPositionInt(AbsSpinner.INVALID_POSITION);\n this.setNextSelectedPositionInt(AbsSpinner.INVALID_POSITION);\n this.invalidate();\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n let widthSize;\n let heightSize;\n this.mSpinnerPadding.left = this.mPaddingLeft > this.mSelectionLeftPadding ? this.mPaddingLeft : this.mSelectionLeftPadding;\n this.mSpinnerPadding.top = this.mPaddingTop > this.mSelectionTopPadding ? this.mPaddingTop : this.mSelectionTopPadding;\n this.mSpinnerPadding.right = this.mPaddingRight > this.mSelectionRightPadding ? this.mPaddingRight : this.mSelectionRightPadding;\n this.mSpinnerPadding.bottom = this.mPaddingBottom > this.mSelectionBottomPadding ? this.mPaddingBottom : this.mSelectionBottomPadding;\n if (this.mDataChanged) {\n this.handleDataChanged();\n }\n let preferredHeight = 0;\n let preferredWidth = 0;\n let needsMeasuring = true;\n let selectedPosition = this.getSelectedItemPosition();\n if (selectedPosition >= 0 && this.mAdapter != null && selectedPosition < this.mAdapter.getCount()) {\n let view = this.mRecycler.get(selectedPosition);\n if (view == null) {\n view = this.mAdapter.getView(selectedPosition, null, this);\n }\n if (view != null) {\n this.mRecycler.put(selectedPosition, view);\n if (view.getLayoutParams() == null) {\n this.mBlockLayoutRequests = true;\n view.setLayoutParams(this.generateDefaultLayoutParams());\n this.mBlockLayoutRequests = false;\n }\n this.measureChild(view, widthMeasureSpec, heightMeasureSpec);\n preferredHeight = this.getChildHeight(view) + this.mSpinnerPadding.top + this.mSpinnerPadding.bottom;\n preferredWidth = this.getChildWidth(view) + this.mSpinnerPadding.left + this.mSpinnerPadding.right;\n needsMeasuring = false;\n }\n }\n if (needsMeasuring) {\n preferredHeight = this.mSpinnerPadding.top + this.mSpinnerPadding.bottom;\n if (widthMode == View.MeasureSpec.UNSPECIFIED) {\n preferredWidth = this.mSpinnerPadding.left + this.mSpinnerPadding.right;\n }\n }\n preferredHeight = Math.max(preferredHeight, this.getSuggestedMinimumHeight());\n preferredWidth = Math.max(preferredWidth, this.getSuggestedMinimumWidth());\n heightSize = AbsSpinner.resolveSizeAndState(preferredHeight, heightMeasureSpec, 0);\n widthSize = AbsSpinner.resolveSizeAndState(preferredWidth, widthMeasureSpec, 0);\n this.setMeasuredDimension(widthSize, heightSize);\n this.mHeightMeasureSpec = heightMeasureSpec;\n this.mWidthMeasureSpec = widthMeasureSpec;\n }\n getChildHeight(child) {\n return child.getMeasuredHeight();\n }\n getChildWidth(child) {\n return child.getMeasuredWidth();\n }\n generateDefaultLayoutParams() {\n return new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n }\n recycleAllViews() {\n const childCount = this.getChildCount();\n const recycleBin = this.mRecycler;\n const position = this.mFirstPosition;\n for (let i = 0; i < childCount; i++) {\n let v = this.getChildAt(i);\n let index = position + i;\n recycleBin.put(index, v);\n }\n }\n setSelection(position, animate) {\n if (arguments.length === 1) {\n this.setNextSelectedPositionInt(position);\n this.requestLayout();\n this.invalidate();\n }\n else {\n let shouldAnimate = animate && this.mFirstPosition <= position && position <= this.mFirstPosition + this.getChildCount() - 1;\n this.setSelectionInt(position, shouldAnimate);\n }\n }\n setSelectionInt(position, animate) {\n if (position != this.mOldSelectedPosition) {\n this.mBlockLayoutRequests = true;\n let delta = position - this.mSelectedPosition;\n this.setNextSelectedPositionInt(position);\n this.layoutSpinner(delta, animate);\n this.mBlockLayoutRequests = false;\n }\n }\n getSelectedView() {\n if (this.mItemCount > 0 && this.mSelectedPosition >= 0) {\n return this.getChildAt(this.mSelectedPosition - this.mFirstPosition);\n }\n else {\n return null;\n }\n }\n requestLayout() {\n if (!this.mBlockLayoutRequests) {\n super.requestLayout();\n }\n }\n getAdapter() {\n return this.mAdapter;\n }\n getCount() {\n return this.mItemCount;\n }\n pointToPosition(x, y) {\n let frame = this.mTouchFrame;\n if (frame == null) {\n this.mTouchFrame = new Rect();\n frame = this.mTouchFrame;\n }\n const count = this.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n let child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n child.getHitRect(frame);\n if (frame.contains(x, y)) {\n return this.mFirstPosition + i;\n }\n }\n }\n return AbsSpinner.INVALID_POSITION;\n }\n }\n widget.AbsSpinner = AbsSpinner;\n (function (AbsSpinner) {\n class RecycleBin {\n constructor(arg) {\n this.mScrapHeap = new SparseArray();\n this._AbsSpinner_this = arg;\n }\n put(position, v) {\n this.mScrapHeap.put(position, v);\n }\n get(position) {\n let result = this.mScrapHeap.get(position);\n if (result != null) {\n this.mScrapHeap.delete(position);\n }\n else {\n }\n return result;\n }\n clear() {\n const scrapHeap = this.mScrapHeap;\n const count = scrapHeap.size();\n for (let i = 0; i < count; i++) {\n const view = scrapHeap.valueAt(i);\n if (view != null) {\n this._AbsSpinner_this.removeDetachedView(view, true);\n }\n }\n scrapHeap.clear();\n }\n }\n AbsSpinner.RecycleBin = RecycleBin;\n })(AbsSpinner = widget.AbsSpinner || (widget.AbsSpinner = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var R = android.R;\n var Context = android.content.Context;\n var Rect = android.graphics.Rect;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var WindowManager = android.view.WindowManager;\n var Window = android.view.Window;\n var WeakReference = java.lang.ref.WeakReference;\n var AnimationUtils = android.view.animation.AnimationUtils;\n class PopupWindow {\n constructor(...args) {\n this.mInputMethodMode = PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;\n this.mTouchable = true;\n this.mOutsideTouchable = false;\n this.mSplitTouchEnabled = -1;\n this.mAllowScrollingAnchorParent = true;\n this.mDrawingLocation = [0, 0];\n this.mScreenLocation = [0, 0];\n this.mTempRect = new Rect();\n this.mWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;\n this.mDefaultDropdownAboveEnterAnimation = R.anim.grow_fade_in_from_bottom;\n this.mDefaultDropdownBelowEnterAnimation = R.anim.grow_fade_in;\n this.mDefaultDropdownAboveExitAnimation = R.anim.shrink_fade_out_from_bottom;\n this.mDefaultDropdownBelowExitAnimation = R.anim.shrink_fade_out;\n this.mOnScrollChangedListener = (() => {\n const inner_this = this;\n class _Inner {\n onScrollChanged() {\n let anchor = inner_this.mAnchor != null ? inner_this.mAnchor.get() : null;\n if (anchor != null && inner_this.mPopupView != null) {\n let p = inner_this.mPopupView.getLayoutParams();\n inner_this.updateAboveAnchor(inner_this.findDropDownPosition(anchor, p, inner_this.mAnchorXoff, inner_this.mAnchorYoff, inner_this.mAnchoredGravity));\n inner_this.update(p.x, p.y, -1, -1, true);\n }\n }\n }\n return new _Inner();\n })();\n if (args[0] instanceof Context) {\n let context = args[0];\n let styleAttr = args.length == 1 ? R.attr.popupWindowStyle : args[1];\n this.mContext = context;\n this.mWindowManager = context.getWindowManager();\n this.mPopupWindow = new Window(context);\n this.mPopupWindow.setCallback(this);\n let a = context.obtainStyledAttributes(null, styleAttr);\n this.mBackground = a.getDrawable('popupBackground');\n this.mEnterAnimation = AnimationUtils.loadAnimation(context, a.getAttrValue('popupEnterAnimation'));\n this.mExitAnimation = AnimationUtils.loadAnimation(context, a.getAttrValue('popupExitAnimation'));\n }\n else {\n let [contentView = null, width = 0, height = 0, focusable = false] = args;\n if (contentView != null) {\n this.mContext = contentView.getContext();\n this.mWindowManager = this.mContext.getWindowManager();\n this.mPopupWindow = new Window(this.mContext);\n this.mPopupWindow.setCallback(this);\n }\n this.setContentView(contentView);\n this.setWidth(width);\n this.setHeight(height);\n this.setFocusable(focusable);\n }\n }\n getBackground() {\n return this.mBackground;\n }\n setBackgroundDrawable(background) {\n this.mBackground = background;\n }\n getEnterAnimation() {\n return this.mEnterAnimation;\n }\n getExitAnimation() {\n return this.mExitAnimation;\n }\n setWindowAnimation(enterAnimation, exitAnimation) {\n this.mEnterAnimation = enterAnimation;\n this.mExitAnimation = exitAnimation;\n }\n getContentView() {\n return this.mContentView;\n }\n setContentView(contentView) {\n if (this.isShowing()) {\n return;\n }\n this.mContentView = contentView;\n if (this.mContext == null && this.mContentView != null) {\n this.mContext = this.mContentView.getContext();\n }\n if (this.mWindowManager == null && this.mContentView != null) {\n this.mWindowManager = this.mContext.getWindowManager();\n }\n if (this.mPopupWindow == null && this.mContext != null) {\n this.mPopupWindow = new Window(this.mContext);\n this.mPopupWindow.setCallback(this);\n }\n }\n setTouchInterceptor(l) {\n this.mTouchInterceptor = l;\n }\n isFocusable() {\n return this.mFocusable;\n }\n setFocusable(focusable) {\n this.mFocusable = focusable;\n }\n getInputMethodMode() {\n return this.mInputMethodMode;\n }\n setInputMethodMode(mode) {\n this.mInputMethodMode = mode;\n }\n isTouchable() {\n return this.mTouchable;\n }\n setTouchable(touchable) {\n this.mTouchable = touchable;\n }\n isOutsideTouchable() {\n return this.mOutsideTouchable;\n }\n setOutsideTouchable(touchable) {\n this.mOutsideTouchable = touchable;\n }\n setClipToScreenEnabled(enabled) {\n this.mClipToScreen = enabled;\n }\n setAllowScrollingAnchorParent(enabled) {\n this.mAllowScrollingAnchorParent = enabled;\n }\n isSplitTouchEnabled() {\n if (this.mSplitTouchEnabled < 0 && this.mContext != null) {\n return true;\n }\n return this.mSplitTouchEnabled == 1;\n }\n setSplitTouchEnabled(enabled) {\n this.mSplitTouchEnabled = enabled ? 1 : 0;\n }\n setWindowLayoutType(layoutType) {\n this.mWindowLayoutType = layoutType;\n }\n getWindowLayoutType() {\n return this.mWindowLayoutType;\n }\n setTouchModal(touchModal) {\n this.mNotTouchModal = !touchModal;\n }\n setWindowLayoutMode(widthSpec, heightSpec) {\n this.mWidthMode = widthSpec;\n this.mHeightMode = heightSpec;\n }\n getHeight() {\n return this.mHeight;\n }\n setHeight(height) {\n this.mHeight = height;\n }\n getWidth() {\n return this.mWidth;\n }\n setWidth(width) {\n this.mWidth = width;\n }\n isShowing() {\n return this.mIsShowing;\n }\n showAtLocation(parent, gravity, x, y) {\n if (this.isShowing() || this.mContentView == null) {\n return;\n }\n this.unregisterForScrollChanged();\n this.mIsShowing = true;\n this.mIsDropdown = false;\n let p = this.createPopupLayout();\n p.enterAnimation = this.computeWindowEnterAnimation();\n p.exitAnimation = this.computeWindowExitAnimation();\n this.preparePopup(p);\n if (gravity == Gravity.NO_GRAVITY) {\n gravity = Gravity.TOP | Gravity.START;\n }\n p.gravity = gravity;\n p.x = x;\n p.y = y;\n if (this.mHeightMode < 0)\n p.height = this.mLastHeight = this.mHeightMode;\n if (this.mWidthMode < 0)\n p.width = this.mLastWidth = this.mWidthMode;\n this.invokePopup(p);\n }\n showAsDropDown(anchor, xoff = 0, yoff = 0, gravity = PopupWindow.DEFAULT_ANCHORED_GRAVITY) {\n if (this.isShowing() || this.mContentView == null) {\n return;\n }\n this.registerForScrollChanged(anchor, xoff, yoff, gravity);\n this.mIsShowing = true;\n this.mIsDropdown = true;\n let p = this.createPopupLayout();\n this.preparePopup(p);\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, xoff, yoff, gravity));\n if (this.mHeightMode < 0)\n p.height = this.mLastHeight = this.mHeightMode;\n if (this.mWidthMode < 0)\n p.width = this.mLastWidth = this.mWidthMode;\n p.enterAnimation = this.computeWindowEnterAnimation();\n p.exitAnimation = this.computeWindowExitAnimation();\n this.invokePopup(p);\n }\n updateAboveAnchor(aboveAnchor) {\n if (aboveAnchor != this.mAboveAnchor) {\n this.mAboveAnchor = aboveAnchor;\n if (this.mBackground != null) {\n if (this.mAboveAnchorBackgroundDrawable != null) {\n if (this.mAboveAnchor) {\n this.mPopupView.setBackgroundDrawable(this.mAboveAnchorBackgroundDrawable);\n }\n else {\n this.mPopupView.setBackgroundDrawable(this.mBelowAnchorBackgroundDrawable);\n }\n }\n else {\n this.mPopupView.refreshDrawableState();\n }\n }\n }\n }\n isAboveAnchor() {\n return this.mAboveAnchor;\n }\n preparePopup(p) {\n if (this.mContentView == null || this.mContext == null || this.mWindowManager == null) {\n throw Error(`new IllegalStateException(\"You must specify a valid content view by \" + \"calling setContentView() before attempting to show the popup.\")`);\n }\n this.mPopupWindow.setContentView(this.mContentView);\n this.mPopupWindow.setFloating(true);\n this.mPopupWindow.setBackgroundColor(android.graphics.Color.TRANSPARENT);\n this.mPopupWindow.setDimAmount(0);\n this.mPopupView = this.mPopupWindow.getDecorView();\n if (this.mBackground != null) {\n this.mPopupView.setBackground(this.mBackground);\n }\n this.mPopupViewInitialLayoutDirectionInherited = false;\n this.mPopupWidth = p.width;\n this.mPopupHeight = p.height;\n }\n invokePopup(p) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.addWindow(this.mPopupWindow);\n }\n setLayoutDirectionFromAnchor() {\n if (this.mAnchor != null) {\n let anchor = this.mAnchor.get();\n if (anchor != null && this.mPopupViewInitialLayoutDirectionInherited) {\n this.mPopupView.setLayoutDirection(anchor.getLayoutDirection());\n }\n }\n }\n createPopupLayout() {\n let p = this.mPopupWindow.getAttributes();\n p.gravity = Gravity.START | Gravity.TOP;\n p.width = this.mLastWidth = this.mWidth;\n p.height = this.mLastHeight = this.mHeight;\n p.flags = this.computeFlags(p.flags);\n p.type = this.mWindowLayoutType;\n p.setTitle(\"PopupWindow\");\n return p;\n }\n computeFlags(curFlags) {\n curFlags &= ~(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |\n WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |\n WindowManager.LayoutParams.FLAG_SPLIT_TOUCH);\n if (!this.mFocusable) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;\n }\n if (!this.mTouchable) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;\n }\n if (this.mOutsideTouchable) {\n curFlags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;\n }\n if (this.isSplitTouchEnabled()) {\n curFlags |= WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;\n }\n if (this.mNotTouchModal) {\n curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;\n }\n return curFlags;\n }\n computeWindowEnterAnimation() {\n if (this.mEnterAnimation == null) {\n if (this.mIsDropdown) {\n return this.mAboveAnchor ? this.mDefaultDropdownAboveEnterAnimation : this.mDefaultDropdownBelowEnterAnimation;\n }\n return null;\n }\n return this.mEnterAnimation;\n }\n computeWindowExitAnimation() {\n if (this.mExitAnimation == null) {\n if (this.mIsDropdown) {\n return this.mAboveAnchor ? this.mDefaultDropdownAboveExitAnimation : this.mDefaultDropdownBelowExitAnimation;\n }\n return null;\n }\n return this.mExitAnimation;\n }\n findDropDownPosition(anchor, p, xoff, yoff, gravity) {\n const anchorHeight = anchor.getHeight();\n anchor.getLocationInWindow(this.mDrawingLocation);\n p.x = this.mDrawingLocation[0] + xoff;\n p.y = this.mDrawingLocation[1] + anchorHeight + yoff;\n const hgrav = Gravity.getAbsoluteGravity(gravity, anchor.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;\n if (hgrav == Gravity.RIGHT) {\n p.x -= this.mPopupWidth - anchor.getWidth();\n }\n let onTop = false;\n p.gravity = Gravity.LEFT | Gravity.TOP;\n anchor.getLocationOnScreen(this.mScreenLocation);\n const displayFrame = new Rect();\n anchor.getWindowVisibleDisplayFrame(displayFrame);\n let screenY = this.mScreenLocation[1] + anchorHeight + yoff;\n const root = anchor.getRootView();\n if (screenY + this.mPopupHeight > displayFrame.bottom || p.x + this.mPopupWidth - root.getWidth() > 0) {\n if (this.mAllowScrollingAnchorParent) {\n let scrollX = anchor.getScrollX();\n let scrollY = anchor.getScrollY();\n let r = new Rect(scrollX, scrollY, scrollX + this.mPopupWidth + xoff, scrollY + this.mPopupHeight + anchor.getHeight() + yoff);\n anchor.requestRectangleOnScreen(r, true);\n }\n anchor.getLocationInWindow(this.mDrawingLocation);\n p.x = this.mDrawingLocation[0] + xoff;\n p.y = this.mDrawingLocation[1] + anchor.getHeight() + yoff;\n if (hgrav == Gravity.RIGHT) {\n p.x -= this.mPopupWidth - anchor.getWidth();\n }\n anchor.getLocationOnScreen(this.mScreenLocation);\n onTop = (displayFrame.bottom - this.mScreenLocation[1] - anchor.getHeight() - yoff) < (this.mScreenLocation[1] - yoff - displayFrame.top);\n if (onTop) {\n p.gravity = Gravity.LEFT | Gravity.BOTTOM;\n p.y = root.getHeight() - this.mDrawingLocation[1] + yoff;\n }\n else {\n p.y = this.mDrawingLocation[1] + anchor.getHeight() + yoff;\n }\n }\n if (this.mClipToScreen) {\n const displayFrameWidth = displayFrame.right - displayFrame.left;\n let right = p.x + p.width;\n if (right > displayFrameWidth) {\n p.x -= right - displayFrameWidth;\n }\n if (p.x < displayFrame.left) {\n p.x = displayFrame.left;\n p.width = Math.min(p.width, displayFrameWidth);\n }\n if (onTop) {\n let popupTop = this.mScreenLocation[1] + yoff - this.mPopupHeight;\n if (popupTop < 0) {\n p.y += popupTop;\n }\n }\n else {\n p.y = Math.max(p.y, displayFrame.top);\n }\n }\n p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL;\n return onTop;\n }\n getMaxAvailableHeight(anchor, yOffset = 0, ignoreBottomDecorations = false) {\n const displayFrame = new Rect();\n anchor.getWindowVisibleDisplayFrame(displayFrame);\n const anchorPos = this.mDrawingLocation;\n anchor.getLocationOnScreen(anchorPos);\n let bottomEdge = displayFrame.bottom;\n if (ignoreBottomDecorations) {\n let res = anchor.getContext().getResources();\n bottomEdge = res.getDisplayMetrics().heightPixels;\n }\n const distanceToBottom = bottomEdge - (anchorPos[1] + anchor.getHeight()) - yOffset;\n const distanceToTop = anchorPos[1] - displayFrame.top + yOffset;\n let returnedHeight = Math.max(distanceToBottom, distanceToTop);\n if (this.mBackground != null) {\n this.mBackground.getPadding(this.mTempRect);\n returnedHeight -= this.mTempRect.top + this.mTempRect.bottom;\n }\n return returnedHeight;\n }\n dismiss() {\n if (this.isShowing() && this.mPopupView != null) {\n this.mIsShowing = false;\n this.unregisterForScrollChanged();\n try {\n this.mWindowManager.removeWindow(this.mPopupWindow);\n }\n finally {\n if (this.mPopupView != this.mContentView && this.mPopupView instanceof ViewGroup) {\n this.mPopupView.removeView(this.mContentView);\n }\n this.mPopupView = null;\n if (this.mOnDismissListener != null) {\n this.mOnDismissListener.onDismiss();\n }\n }\n }\n }\n setOnDismissListener(onDismissListener) {\n this.mOnDismissListener = onDismissListener;\n }\n update(...args) {\n if (args.length == 0) {\n this._update();\n }\n else if (args.length == 2) {\n this._update_w_h(args[0], args[1]);\n }\n else if (args.length == 3) {\n this._update_a_w_h(args[0], args[1], args[2]);\n }\n else if (args.length == 4) {\n this._update_x_y_w_h_f(args[0], args[1], args[2], args[3]);\n }\n else if (args.length == 5) {\n if (args[0] instanceof View)\n this._update_a_x_y_w_h(args[0], args[1], args[2], args[3], args[4]);\n else\n this._update_x_y_w_h_f(args[0], args[1], args[2], args[3], args[4]);\n }\n }\n _update() {\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let p = this.mPopupView.getLayoutParams();\n let update = false;\n const enterAnim = this.computeWindowEnterAnimation();\n const exitAnim = this.computeWindowExitAnimation();\n if (enterAnim != p.enterAnimation) {\n p.enterAnimation = enterAnim;\n update = true;\n }\n if (exitAnim != p.exitAnimation) {\n p.exitAnimation = exitAnim;\n update = true;\n }\n const newFlags = this.computeFlags(p.flags);\n if (newFlags != p.flags) {\n p.flags = newFlags;\n update = true;\n }\n if (update) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, p);\n }\n }\n _update_w_h(width, height) {\n let p = this.mPopupView.getLayoutParams();\n this.update(p.x, p.y, width, height, false);\n }\n _update_x_y_w_h_f(x, y, width, height, force = false) {\n if (width != -1) {\n this.mLastWidth = width;\n this.setWidth(width);\n }\n if (height != -1) {\n this.mLastHeight = height;\n this.setHeight(height);\n }\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let p = this.mPopupView.getLayoutParams();\n let update = force;\n const finalWidth = this.mWidthMode < 0 ? this.mWidthMode : this.mLastWidth;\n if (width != -1 && p.width != finalWidth) {\n p.width = this.mLastWidth = finalWidth;\n update = true;\n }\n const finalHeight = this.mHeightMode < 0 ? this.mHeightMode : this.mLastHeight;\n if (height != -1 && p.height != finalHeight) {\n p.height = this.mLastHeight = finalHeight;\n update = true;\n }\n if (p.x != x) {\n p.x = x;\n update = true;\n }\n if (p.y != y) {\n p.y = y;\n update = true;\n }\n const enterAnim = this.computeWindowEnterAnimation();\n const exitAnim = this.computeWindowExitAnimation();\n if (enterAnim != p.enterAnimation) {\n p.enterAnimation = enterAnim;\n update = true;\n }\n if (exitAnim != p.exitAnimation) {\n p.exitAnimation = exitAnim;\n update = true;\n }\n const newFlags = this.computeFlags(p.flags);\n if (newFlags != p.flags) {\n p.flags = newFlags;\n update = true;\n }\n if (update) {\n this.setLayoutDirectionFromAnchor();\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, p);\n }\n }\n _update_a_w_h(anchor, width, height) {\n this._update_all_args(anchor, false, 0, 0, true, width, height, this.mAnchoredGravity);\n }\n _update_a_x_y_w_h(anchor, xoff, yoff, width, height) {\n this._update_all_args(anchor, true, xoff, yoff, true, width, height, this.mAnchoredGravity);\n }\n _update_all_args(anchor, updateLocation, xoff, yoff, updateDimension, width, height, gravity) {\n if (!this.isShowing() || this.mContentView == null) {\n return;\n }\n let oldAnchor = this.mAnchor;\n const needsUpdate = updateLocation && (this.mAnchorXoff != xoff || this.mAnchorYoff != yoff);\n if (oldAnchor == null || oldAnchor.get() != anchor || (needsUpdate && !this.mIsDropdown)) {\n this.registerForScrollChanged(anchor, xoff, yoff, gravity);\n }\n else if (needsUpdate) {\n this.mAnchorXoff = xoff;\n this.mAnchorYoff = yoff;\n this.mAnchoredGravity = gravity;\n }\n let p = this.mPopupView.getLayoutParams();\n if (updateDimension) {\n if (width == -1) {\n width = this.mPopupWidth;\n }\n else {\n this.mPopupWidth = width;\n }\n if (height == -1) {\n height = this.mPopupHeight;\n }\n else {\n this.mPopupHeight = height;\n }\n }\n let x = p.x;\n let y = p.y;\n if (updateLocation) {\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, xoff, yoff, gravity));\n }\n else {\n this.updateAboveAnchor(this.findDropDownPosition(anchor, p, this.mAnchorXoff, this.mAnchorYoff, this.mAnchoredGravity));\n }\n this.update(p.x, p.y, width, height, x != p.x || y != p.y);\n }\n unregisterForScrollChanged() {\n let anchorRef = this.mAnchor;\n let anchor = null;\n if (anchorRef != null) {\n anchor = anchorRef.get();\n }\n if (anchor != null) {\n let vto = anchor.getViewTreeObserver();\n vto.removeOnScrollChangedListener(this.mOnScrollChangedListener);\n }\n this.mAnchor = null;\n }\n registerForScrollChanged(anchor, xoff, yoff, gravity) {\n this.unregisterForScrollChanged();\n this.mAnchor = new WeakReference(anchor);\n let vto = anchor.getViewTreeObserver();\n if (vto != null) {\n vto.addOnScrollChangedListener(this.mOnScrollChangedListener);\n }\n this.mAnchorXoff = xoff;\n this.mAnchorYoff = yoff;\n this.mAnchoredGravity = gravity;\n }\n onTouchEvent(event) {\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n if ((event.getAction() == MotionEvent.ACTION_DOWN) && ((x < 0) || (x >= this.mPopupView.getWidth()) || (y < 0) || (y >= this.mPopupView.getHeight()))) {\n this.dismiss();\n return true;\n }\n else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {\n this.dismiss();\n return true;\n }\n else if (this.mPopupView) {\n return this.mPopupView.onTouchEvent(event);\n }\n return false;\n }\n onGenericMotionEvent(event) {\n return false;\n }\n onWindowAttributesChanged(params) {\n if (this.mPopupWindow != null) {\n this.mWindowManager.updateWindowLayout(this.mPopupWindow, params);\n }\n }\n onContentChanged() {\n }\n onWindowFocusChanged(hasFocus) {\n }\n onAttachedToWindow() {\n }\n onDetachedFromWindow() {\n }\n dispatchKeyEvent(event) {\n if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {\n if (this.mPopupView.getKeyDispatcherState() == null) {\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {\n let state = this.mPopupView.getKeyDispatcherState();\n if (state != null) {\n state.startTracking(event, this);\n }\n return true;\n }\n else if (event.getAction() == KeyEvent.ACTION_UP) {\n let state = this.mPopupView.getKeyDispatcherState();\n if (state != null && state.isTracking(event) && !event.isCanceled()) {\n this.dismiss();\n return true;\n }\n }\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n else {\n return this.mPopupWindow.superDispatchKeyEvent(event);\n }\n }\n dispatchTouchEvent(ev) {\n if (this.mTouchInterceptor != null && this.mTouchInterceptor.onTouch(this.mPopupView, ev)) {\n return true;\n }\n if (this.mPopupWindow.superDispatchTouchEvent(ev)) {\n return true;\n }\n return this.onTouchEvent(ev);\n }\n dispatchGenericMotionEvent(ev) {\n if (this.mPopupWindow.superDispatchGenericMotionEvent(ev)) {\n return true;\n }\n return this.onGenericMotionEvent(ev);\n }\n }\n PopupWindow.INPUT_METHOD_FROM_FOCUSABLE = 0;\n PopupWindow.INPUT_METHOD_NEEDED = 1;\n PopupWindow.INPUT_METHOD_NOT_NEEDED = 2;\n PopupWindow.DEFAULT_ANCHORED_GRAVITY = Gravity.TOP | Gravity.START;\n widget.PopupWindow = PopupWindow;\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var DataSetObserver = android.database.DataSetObserver;\n var Rect = android.graphics.Rect;\n var Handler = android.os.Handler;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var MeasureSpec = android.view.View.MeasureSpec;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var Integer = java.lang.Integer;\n var AbsListView = android.widget.AbsListView;\n var LinearLayout = android.widget.LinearLayout;\n var ListView = android.widget.ListView;\n var PopupWindow = android.widget.PopupWindow;\n var TextView = android.widget.TextView;\n class ListPopupWindow {\n constructor(context, styleAttr = android.R.attr.listPopupWindowStyle) {\n this.mDropDownHeight = ViewGroup.LayoutParams.WRAP_CONTENT;\n this.mDropDownWidth = ViewGroup.LayoutParams.WRAP_CONTENT;\n this.mDropDownHorizontalOffset = 0;\n this.mDropDownVerticalOffset = 0;\n this.mDropDownGravity = Gravity.NO_GRAVITY;\n this.mDropDownAlwaysVisible = false;\n this.mForceIgnoreOutsideTouch = false;\n this.mListItemExpandMaximum = Integer.MAX_VALUE;\n this.mPromptPosition = ListPopupWindow.POSITION_PROMPT_ABOVE;\n this.mResizePopupRunnable = new ListPopupWindow.ResizePopupRunnable(this);\n this.mTouchInterceptor = new ListPopupWindow.PopupTouchInterceptor(this);\n this.mScrollListener = new ListPopupWindow.PopupScrollListener(this);\n this.mHideSelector = new ListPopupWindow.ListSelectorHider(this);\n this.mHandler = new Handler();\n this.mTempRect = new Rect();\n this.mLayoutDirection = 0;\n this.mContext = context;\n this.mPopup = new PopupWindow(context, styleAttr);\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);\n this.mLayoutDirection = View.LAYOUT_DIRECTION_LTR;\n }\n setAdapter(adapter) {\n if (this.mObserver == null) {\n this.mObserver = new ListPopupWindow.PopupDataSetObserver(this);\n }\n else if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(this.mObserver);\n }\n this.mAdapter = adapter;\n if (this.mAdapter != null) {\n adapter.registerDataSetObserver(this.mObserver);\n }\n if (this.mDropDownList != null) {\n this.mDropDownList.setAdapter(this.mAdapter);\n }\n }\n setPromptPosition(position) {\n this.mPromptPosition = position;\n }\n getPromptPosition() {\n return this.mPromptPosition;\n }\n setModal(modal) {\n this.mModal = true;\n this.mPopup.setFocusable(modal);\n }\n isModal() {\n return this.mModal;\n }\n setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch) {\n this.mForceIgnoreOutsideTouch = forceIgnoreOutsideTouch;\n }\n setDropDownAlwaysVisible(dropDownAlwaysVisible) {\n this.mDropDownAlwaysVisible = dropDownAlwaysVisible;\n }\n isDropDownAlwaysVisible() {\n return this.mDropDownAlwaysVisible;\n }\n getBackground() {\n return this.mPopup.getBackground();\n }\n setBackgroundDrawable(d) {\n this.mPopup.setBackgroundDrawable(d);\n }\n setWindowAnimation(enterAnimation, exitAnimation) {\n this.mPopup.setWindowAnimation(enterAnimation, exitAnimation);\n }\n getEnterAnimation() {\n return this.mPopup.mEnterAnimation;\n }\n getExitAnimation() {\n return this.mPopup.mExitAnimation;\n }\n getAnchorView() {\n return this.mDropDownAnchorView;\n }\n setAnchorView(anchor) {\n this.mDropDownAnchorView = anchor;\n }\n getHorizontalOffset() {\n return this.mDropDownHorizontalOffset;\n }\n setHorizontalOffset(offset) {\n this.mDropDownHorizontalOffset = offset;\n }\n getVerticalOffset() {\n if (!this.mDropDownVerticalOffsetSet) {\n return 0;\n }\n return this.mDropDownVerticalOffset;\n }\n setVerticalOffset(offset) {\n this.mDropDownVerticalOffset = offset;\n this.mDropDownVerticalOffsetSet = true;\n }\n setDropDownGravity(gravity) {\n this.mDropDownGravity = gravity;\n }\n getWidth() {\n return this.mDropDownWidth;\n }\n setWidth(width) {\n this.mDropDownWidth = width;\n }\n setContentWidth(width) {\n let popupBackground = this.mPopup.getBackground();\n if (popupBackground != null) {\n popupBackground.getPadding(this.mTempRect);\n this.mDropDownWidth = this.mTempRect.left + this.mTempRect.right + width;\n }\n else {\n this.setWidth(width);\n }\n }\n getHeight() {\n return this.mDropDownHeight;\n }\n setHeight(height) {\n this.mDropDownHeight = height;\n }\n setOnItemClickListener(clickListener) {\n this.mItemClickListener = clickListener;\n }\n setOnItemSelectedListener(selectedListener) {\n this.mItemSelectedListener = selectedListener;\n }\n setPromptView(prompt) {\n let showing = this.isShowing();\n if (showing) {\n this.removePromptView();\n }\n this.mPromptView = prompt;\n if (showing) {\n this.show();\n }\n }\n postShow() {\n this.mHandler.post(this.mShowDropDownRunnable);\n }\n show() {\n let height = this.buildDropDown();\n let widthSpec = 0;\n let heightSpec = 0;\n let noInputMethod = this.isInputMethodNotNeeded();\n this.mPopup.setAllowScrollingAnchorParent(!noInputMethod);\n if (this.mPopup.isShowing()) {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {\n widthSpec = -1;\n }\n else if (this.mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {\n widthSpec = this.getAnchorView().getWidth();\n }\n else {\n widthSpec = this.mDropDownWidth;\n }\n if (this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.MATCH_PARENT;\n if (noInputMethod) {\n this.mPopup.setWindowLayoutMode(this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? ViewGroup.LayoutParams.MATCH_PARENT : 0, 0);\n }\n else {\n this.mPopup.setWindowLayoutMode(this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ? ViewGroup.LayoutParams.MATCH_PARENT : 0, ViewGroup.LayoutParams.MATCH_PARENT);\n }\n }\n else if (this.mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {\n heightSpec = height;\n }\n else {\n heightSpec = this.mDropDownHeight;\n }\n this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch && !this.mDropDownAlwaysVisible);\n this.mPopup.update(this.getAnchorView(), this.mDropDownHorizontalOffset, this.mDropDownVerticalOffset, widthSpec, heightSpec);\n }\n else {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {\n widthSpec = ViewGroup.LayoutParams.MATCH_PARENT;\n }\n else {\n if (this.mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {\n this.mPopup.setWidth(this.getAnchorView().getWidth());\n }\n else {\n this.mPopup.setWidth(this.mDropDownWidth);\n }\n }\n if (this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n heightSpec = ViewGroup.LayoutParams.MATCH_PARENT;\n }\n else {\n if (this.mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {\n this.mPopup.setHeight(height);\n }\n else {\n this.mPopup.setHeight(this.mDropDownHeight);\n }\n }\n this.mPopup.setWindowLayoutMode(widthSpec, heightSpec);\n this.mPopup.setClipToScreenEnabled(true);\n this.mPopup.setOutsideTouchable(!this.mForceIgnoreOutsideTouch && !this.mDropDownAlwaysVisible);\n this.mPopup.setTouchInterceptor(this.mTouchInterceptor);\n this.mPopup.showAsDropDown(this.getAnchorView(), this.mDropDownHorizontalOffset, this.mDropDownVerticalOffset, this.mDropDownGravity);\n this.mDropDownList.setSelection(ListView.INVALID_POSITION);\n if (!this.mModal || this.mDropDownList.isInTouchMode()) {\n this.clearListSelection();\n }\n if (!this.mModal) {\n this.mHandler.post(this.mHideSelector);\n }\n }\n }\n dismiss() {\n this.mPopup.dismiss();\n this.removePromptView();\n this.mPopup.setContentView(null);\n this.mDropDownList = null;\n this.mHandler.removeCallbacks(this.mResizePopupRunnable);\n }\n setOnDismissListener(listener) {\n this.mPopup.setOnDismissListener(listener);\n }\n removePromptView() {\n if (this.mPromptView != null) {\n const parent = this.mPromptView.getParent();\n if (parent instanceof ViewGroup) {\n const group = parent;\n group.removeView(this.mPromptView);\n }\n }\n }\n setInputMethodMode(mode) {\n this.mPopup.setInputMethodMode(mode);\n }\n getInputMethodMode() {\n return this.mPopup.getInputMethodMode();\n }\n setSelection(position) {\n let list = this.mDropDownList;\n if (this.isShowing() && list != null) {\n list.mListSelectionHidden = false;\n list.setSelection(position);\n if (list.getChoiceMode() != ListView.CHOICE_MODE_NONE) {\n list.setItemChecked(position, true);\n }\n }\n }\n clearListSelection() {\n const list = this.mDropDownList;\n if (list != null) {\n list.mListSelectionHidden = true;\n list.hideSelector();\n list.requestLayout();\n }\n }\n isShowing() {\n return this.mPopup.isShowing();\n }\n isInputMethodNotNeeded() {\n return this.mPopup.getInputMethodMode() == ListPopupWindow.INPUT_METHOD_NOT_NEEDED;\n }\n performItemClick(position) {\n if (this.isShowing()) {\n if (this.mItemClickListener != null) {\n const list = this.mDropDownList;\n const child = list.getChildAt(position - list.getFirstVisiblePosition());\n const adapter = list.getAdapter();\n this.mItemClickListener.onItemClick(list, child, position, adapter.getItemId(position));\n }\n return true;\n }\n return false;\n }\n getSelectedItem() {\n if (!this.isShowing()) {\n return null;\n }\n return this.mDropDownList.getSelectedItem();\n }\n getSelectedItemPosition() {\n if (!this.isShowing()) {\n return ListView.INVALID_POSITION;\n }\n return this.mDropDownList.getSelectedItemPosition();\n }\n getSelectedItemId() {\n if (!this.isShowing()) {\n return ListView.INVALID_ROW_ID;\n }\n return this.mDropDownList.getSelectedItemId();\n }\n getSelectedView() {\n if (!this.isShowing()) {\n return null;\n }\n return this.mDropDownList.getSelectedView();\n }\n getListView() {\n return this.mDropDownList;\n }\n setListItemExpandMax(max) {\n this.mListItemExpandMaximum = max;\n }\n onKeyDown(keyCode, event) {\n if (this.isShowing()) {\n if (keyCode != KeyEvent.KEYCODE_SPACE && (this.mDropDownList.getSelectedItemPosition() >= 0 || !KeyEvent.isConfirmKey(keyCode))) {\n let curIndex = this.mDropDownList.getSelectedItemPosition();\n let consumed;\n const below = !this.mPopup.isAboveAnchor();\n const adapter = this.mAdapter;\n let allEnabled;\n let firstItem = Integer.MAX_VALUE;\n let lastItem = Integer.MIN_VALUE;\n if (adapter != null) {\n allEnabled = adapter.areAllItemsEnabled();\n firstItem = allEnabled ? 0 : this.mDropDownList.lookForSelectablePosition(0, true);\n lastItem = allEnabled ? adapter.getCount() - 1 : this.mDropDownList.lookForSelectablePosition(adapter.getCount() - 1, false);\n }\n if ((below && keyCode == KeyEvent.KEYCODE_DPAD_UP && curIndex <= firstItem) || (!below && keyCode == KeyEvent.KEYCODE_DPAD_DOWN && curIndex >= lastItem)) {\n this.clearListSelection();\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);\n this.show();\n return true;\n }\n else {\n this.mDropDownList.mListSelectionHidden = false;\n }\n consumed = this.mDropDownList.onKeyDown(keyCode, event);\n if (ListPopupWindow.DEBUG)\n Log.v(ListPopupWindow.TAG, \"Key down: code=\" + keyCode + \" list consumed=\" + consumed);\n if (consumed) {\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this.mDropDownList.requestFocusFromTouch();\n this.show();\n switch (keyCode) {\n case KeyEvent.KEYCODE_ENTER:\n case KeyEvent.KEYCODE_DPAD_CENTER:\n case KeyEvent.KEYCODE_DPAD_DOWN:\n case KeyEvent.KEYCODE_DPAD_UP:\n return true;\n }\n }\n else {\n if (below && keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {\n if (curIndex == lastItem) {\n return true;\n }\n }\n else if (!below && keyCode == KeyEvent.KEYCODE_DPAD_UP && curIndex == firstItem) {\n return true;\n }\n }\n }\n }\n return false;\n }\n onKeyUp(keyCode, event) {\n if (this.isShowing() && this.mDropDownList.getSelectedItemPosition() >= 0) {\n let consumed = this.mDropDownList.onKeyUp(keyCode, event);\n if (consumed && KeyEvent.isConfirmKey(keyCode)) {\n this.dismiss();\n }\n return consumed;\n }\n return false;\n }\n onKeyPreIme(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && this.isShowing()) {\n const anchorView = this.mDropDownAnchorView;\n if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {\n let state = anchorView.getKeyDispatcherState();\n if (state != null) {\n state.startTracking(event, this);\n }\n return true;\n }\n else if (event.getAction() == KeyEvent.ACTION_UP) {\n let state = anchorView.getKeyDispatcherState();\n if (state != null) {\n state.handleUpEvent(event);\n }\n if (event.isTracking() && !event.isCanceled()) {\n this.dismiss();\n return true;\n }\n }\n }\n return false;\n }\n createDragToOpenListener(src) {\n return (() => {\n const inner_this = this;\n class _Inner extends ListPopupWindow.ForwardingListener {\n getPopup() {\n return inner_this;\n }\n }\n return new _Inner(src);\n })();\n }\n buildDropDown() {\n let dropDownView;\n let otherHeights = 0;\n if (this.mDropDownList == null) {\n let context = this.mContext;\n this.mShowDropDownRunnable = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n let view = inner_this.getAnchorView();\n if (view != null && view.isAttachedToWindow()) {\n inner_this.show();\n }\n }\n }\n return new _Inner();\n })();\n this.mDropDownList = new ListPopupWindow.DropDownListView(context, !this.mModal);\n if (this.mDropDownListHighlight != null) {\n this.mDropDownList.setSelector(this.mDropDownListHighlight);\n }\n this.mDropDownList.setAdapter(this.mAdapter);\n this.mDropDownList.setOnItemClickListener(this.mItemClickListener);\n this.mDropDownList.setFocusable(true);\n this.mDropDownList.setFocusableInTouchMode(true);\n this.mDropDownList.setOnItemSelectedListener((() => {\n const inner_this = this;\n class _Inner {\n onItemSelected(parent, view, position, id) {\n if (position != -1) {\n let dropDownList = inner_this.mDropDownList;\n if (dropDownList != null) {\n dropDownList.mListSelectionHidden = false;\n }\n }\n }\n onNothingSelected(parent) {\n }\n }\n return new _Inner();\n })());\n this.mDropDownList.setOnScrollListener(this.mScrollListener);\n if (this.mItemSelectedListener != null) {\n this.mDropDownList.setOnItemSelectedListener(this.mItemSelectedListener);\n }\n dropDownView = this.mDropDownList;\n let hintView = this.mPromptView;\n if (hintView != null) {\n let hintContainer = new LinearLayout(context);\n hintContainer.setOrientation(LinearLayout.VERTICAL);\n let hintParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1.0);\n switch (this.mPromptPosition) {\n case ListPopupWindow.POSITION_PROMPT_BELOW:\n hintContainer.addView(dropDownView, hintParams);\n hintContainer.addView(hintView);\n break;\n case ListPopupWindow.POSITION_PROMPT_ABOVE:\n hintContainer.addView(hintView);\n hintContainer.addView(dropDownView, hintParams);\n break;\n default:\n Log.e(ListPopupWindow.TAG, \"Invalid hint position \" + this.mPromptPosition);\n break;\n }\n let widthSpec = MeasureSpec.makeMeasureSpec(this.mDropDownWidth, MeasureSpec.AT_MOST);\n let heightSpec = MeasureSpec.UNSPECIFIED;\n hintView.measure(widthSpec, heightSpec);\n hintParams = hintView.getLayoutParams();\n otherHeights = hintView.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin;\n dropDownView = hintContainer;\n }\n this.mPopup.setContentView(dropDownView);\n }\n else {\n dropDownView = this.mPopup.getContentView();\n const view = this.mPromptView;\n if (view != null) {\n let hintParams = view.getLayoutParams();\n otherHeights = view.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin;\n }\n }\n let padding = 0;\n let background = this.mPopup.getBackground();\n if (background != null) {\n background.getPadding(this.mTempRect);\n padding = this.mTempRect.top + this.mTempRect.bottom;\n if (!this.mDropDownVerticalOffsetSet) {\n this.mDropDownVerticalOffset = -this.mTempRect.top;\n }\n }\n else {\n this.mTempRect.setEmpty();\n }\n let ignoreBottomDecorations = this.mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED;\n const maxHeight = this.mPopup.getMaxAvailableHeight(this.getAnchorView(), this.mDropDownVerticalOffset, ignoreBottomDecorations);\n if (this.mDropDownAlwaysVisible || this.mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {\n return maxHeight + padding;\n }\n let childWidthSpec;\n switch (this.mDropDownWidth) {\n case ViewGroup.LayoutParams.WRAP_CONTENT:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels - (this.mTempRect.left + this.mTempRect.right), MeasureSpec.AT_MOST);\n break;\n case ViewGroup.LayoutParams.MATCH_PARENT:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mContext.getResources().getDisplayMetrics().widthPixels - (this.mTempRect.left + this.mTempRect.right), MeasureSpec.EXACTLY);\n break;\n default:\n childWidthSpec = MeasureSpec.makeMeasureSpec(this.mDropDownWidth, MeasureSpec.EXACTLY);\n break;\n }\n const listContent = this.mDropDownList.measureHeightOfChildren(childWidthSpec, 0, ListView.NO_POSITION, maxHeight - otherHeights, -1);\n if (listContent > 0)\n otherHeights += padding;\n return listContent + otherHeights;\n }\n }\n ListPopupWindow.TAG = \"ListPopupWindow\";\n ListPopupWindow.DEBUG = false;\n ListPopupWindow.EXPAND_LIST_TIMEOUT = 250;\n ListPopupWindow.POSITION_PROMPT_ABOVE = 0;\n ListPopupWindow.POSITION_PROMPT_BELOW = 1;\n ListPopupWindow.MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT;\n ListPopupWindow.WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT;\n ListPopupWindow.INPUT_METHOD_FROM_FOCUSABLE = PopupWindow.INPUT_METHOD_FROM_FOCUSABLE;\n ListPopupWindow.INPUT_METHOD_NEEDED = PopupWindow.INPUT_METHOD_NEEDED;\n ListPopupWindow.INPUT_METHOD_NOT_NEEDED = PopupWindow.INPUT_METHOD_NOT_NEEDED;\n widget.ListPopupWindow = ListPopupWindow;\n (function (ListPopupWindow) {\n class ForwardingListener {\n constructor(src) {\n this.mScaledTouchSlop = 0;\n this.mTapTimeout = 0;\n this.mActivePointerId = 0;\n this.mSrc = src;\n this.mScaledTouchSlop = ViewConfiguration.get(src.getContext()).getScaledTouchSlop();\n this.mTapTimeout = ViewConfiguration.getTapTimeout();\n src.addOnAttachStateChangeListener(this);\n }\n onTouch(v, event) {\n const wasForwarding = this.mForwarding;\n let forwarding;\n if (wasForwarding) {\n forwarding = this.onTouchForwarded(event) || !this.onForwardingStopped();\n }\n else {\n forwarding = this.onTouchObserved(event) && this.onForwardingStarted();\n }\n this.mForwarding = forwarding;\n return forwarding || wasForwarding;\n }\n onViewAttachedToWindow(v) {\n }\n onViewDetachedFromWindow(v) {\n this.mForwarding = false;\n this.mActivePointerId = MotionEvent.INVALID_POINTER_ID;\n if (this.mDisallowIntercept != null) {\n this.mSrc.removeCallbacks(this.mDisallowIntercept);\n }\n }\n onForwardingStarted() {\n const popup = this.getPopup();\n if (popup != null && !popup.isShowing()) {\n popup.show();\n }\n return true;\n }\n onForwardingStopped() {\n const popup = this.getPopup();\n if (popup != null && popup.isShowing()) {\n popup.dismiss();\n }\n return true;\n }\n onTouchObserved(srcEvent) {\n const src = this.mSrc;\n if (!src.isEnabled()) {\n return false;\n }\n const actionMasked = srcEvent.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_DOWN:\n this.mActivePointerId = srcEvent.getPointerId(0);\n if (this.mDisallowIntercept == null) {\n this.mDisallowIntercept = new ForwardingListener.DisallowIntercept(this);\n }\n src.postDelayed(this.mDisallowIntercept, this.mTapTimeout);\n break;\n case MotionEvent.ACTION_MOVE:\n const activePointerIndex = srcEvent.findPointerIndex(this.mActivePointerId);\n if (activePointerIndex >= 0) {\n const x = srcEvent.getX(activePointerIndex);\n const y = srcEvent.getY(activePointerIndex);\n if (!src.pointInView(x, y, this.mScaledTouchSlop)) {\n if (this.mDisallowIntercept != null) {\n src.removeCallbacks(this.mDisallowIntercept);\n }\n src.getParent().requestDisallowInterceptTouchEvent(true);\n return true;\n }\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n if (this.mDisallowIntercept != null) {\n src.removeCallbacks(this.mDisallowIntercept);\n }\n break;\n }\n return false;\n }\n onTouchForwarded(srcEvent) {\n return false;\n }\n }\n ListPopupWindow.ForwardingListener = ForwardingListener;\n (function (ForwardingListener) {\n class DisallowIntercept {\n constructor(arg) {\n this._ForwardingListener_this = arg;\n }\n run() {\n const parent = this._ForwardingListener_this.mSrc.getParent();\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n ForwardingListener.DisallowIntercept = DisallowIntercept;\n })(ForwardingListener = ListPopupWindow.ForwardingListener || (ListPopupWindow.ForwardingListener = {}));\n class DropDownListView extends ListView {\n constructor(context, hijackFocus) {\n super(context, null, android.R.attr.dropDownListViewStyle);\n this.mHijackFocus = hijackFocus;\n this.setCacheColorHint(0);\n }\n onForwardedEvent(event, activePointerId) {\n let handledEvent = true;\n let clearPressedItem = false;\n const actionMasked = event.getActionMasked();\n switch (actionMasked) {\n case MotionEvent.ACTION_CANCEL:\n handledEvent = false;\n break;\n case MotionEvent.ACTION_UP:\n handledEvent = false;\n case MotionEvent.ACTION_MOVE:\n const activeIndex = event.findPointerIndex(activePointerId);\n if (activeIndex < 0) {\n handledEvent = false;\n break;\n }\n const x = Math.floor(event.getX(activeIndex));\n const y = Math.floor(event.getY(activeIndex));\n const position = this.pointToPosition(x, y);\n if (position == DropDownListView.INVALID_POSITION) {\n clearPressedItem = true;\n break;\n }\n const child = this.getChildAt(position - this.getFirstVisiblePosition());\n this.setPressedItem(child, position);\n handledEvent = true;\n if (actionMasked == MotionEvent.ACTION_UP) {\n this.clickPressedItem(child, position);\n }\n break;\n }\n if (!handledEvent || clearPressedItem) {\n this.clearPressedItem();\n }\n return handledEvent;\n }\n clickPressedItem(child, position) {\n const id = this.getItemIdAtPosition(position);\n this.performItemClick(child, position, id);\n }\n clearPressedItem() {\n this.mDrawsInPressedState = false;\n this.setPressed(false);\n this.updateSelectorState();\n }\n setPressedItem(child, position) {\n this.mDrawsInPressedState = true;\n this.setPressed(true);\n this.layoutChildren();\n this.setSelectedPositionInt(position);\n this.positionSelector(position, child);\n this.refreshDrawableState();\n }\n touchModeDrawsInPressedState() {\n return this.mDrawsInPressedState || super.touchModeDrawsInPressedState();\n }\n obtainView(position, isScrap) {\n let view = super.obtainView(position, isScrap);\n if (view instanceof TextView) {\n view.setHorizontallyScrolling(true);\n }\n return view;\n }\n isInTouchMode() {\n return (this.mHijackFocus && this.mListSelectionHidden) || super.isInTouchMode();\n }\n hasWindowFocus() {\n return this.mHijackFocus || super.hasWindowFocus();\n }\n isFocused() {\n return this.mHijackFocus || super.isFocused();\n }\n hasFocus() {\n return this.mHijackFocus || super.hasFocus();\n }\n }\n DropDownListView.CLICK_ANIM_DURATION = 150;\n DropDownListView.CLICK_ANIM_ALPHA = 0x80;\n ListPopupWindow.DropDownListView = DropDownListView;\n class PopupDataSetObserver extends DataSetObserver {\n constructor(arg) {\n super();\n this._ListPopupWindow_this = arg;\n }\n onChanged() {\n if (this._ListPopupWindow_this.isShowing()) {\n this._ListPopupWindow_this.show();\n }\n }\n onInvalidated() {\n this._ListPopupWindow_this.dismiss();\n }\n }\n ListPopupWindow.PopupDataSetObserver = PopupDataSetObserver;\n class ListSelectorHider {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n run() {\n this._ListPopupWindow_this.clearListSelection();\n }\n }\n ListPopupWindow.ListSelectorHider = ListSelectorHider;\n class ResizePopupRunnable {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n run() {\n if (this._ListPopupWindow_this.mDropDownList != null && this._ListPopupWindow_this.mDropDownList.getCount() > this._ListPopupWindow_this.mDropDownList.getChildCount() && this._ListPopupWindow_this.mDropDownList.getChildCount() <= this._ListPopupWindow_this.mListItemExpandMaximum) {\n this._ListPopupWindow_this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this._ListPopupWindow_this.show();\n }\n }\n }\n ListPopupWindow.ResizePopupRunnable = ResizePopupRunnable;\n class PopupTouchInterceptor {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n onTouch(v, event) {\n const action = event.getAction();\n const x = Math.floor(event.getX());\n const y = Math.floor(event.getY());\n if (action == MotionEvent.ACTION_DOWN && this._ListPopupWindow_this.mPopup != null && this._ListPopupWindow_this.mPopup.isShowing() && (x >= 0 && x < this._ListPopupWindow_this.mPopup.getWidth() && y >= 0 && y < this._ListPopupWindow_this.mPopup.getHeight())) {\n this._ListPopupWindow_this.mHandler.postDelayed(this._ListPopupWindow_this.mResizePopupRunnable, ListPopupWindow.EXPAND_LIST_TIMEOUT);\n }\n else if (action == MotionEvent.ACTION_UP) {\n this._ListPopupWindow_this.mHandler.removeCallbacks(this._ListPopupWindow_this.mResizePopupRunnable);\n }\n return false;\n }\n }\n ListPopupWindow.PopupTouchInterceptor = PopupTouchInterceptor;\n class PopupScrollListener {\n constructor(arg) {\n this._ListPopupWindow_this = arg;\n }\n onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount) {\n }\n onScrollStateChanged(view, scrollState) {\n if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL\n && !this._ListPopupWindow_this.isInputMethodNotNeeded() && this._ListPopupWindow_this.mPopup.getContentView() != null) {\n this._ListPopupWindow_this.mHandler.removeCallbacks(this._ListPopupWindow_this.mResizePopupRunnable);\n this._ListPopupWindow_this.mResizePopupRunnable.run();\n }\n }\n }\n ListPopupWindow.PopupScrollListener = PopupScrollListener;\n })(ListPopupWindow = widget.ListPopupWindow || (widget.ListPopupWindow = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var widget;\n (function (widget) {\n var AlertDialog = android.app.AlertDialog;\n var Rect = android.graphics.Rect;\n var Log = android.util.Log;\n var Gravity = android.view.Gravity;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var AbsSpinner = android.widget.AbsSpinner;\n var ListAdapter = android.widget.ListAdapter;\n var ListPopupWindow = android.widget.ListPopupWindow;\n var ListView = android.widget.ListView;\n var R = android.R;\n class Spinner extends AbsSpinner {\n constructor(context, bindElement, defStyle = R.attr.spinnerStyle, mode = Spinner.MODE_THEME) {\n super(context, bindElement, defStyle);\n this.mDropDownWidth = 0;\n this.mGravity = 0;\n this.mTempRect = new Rect();\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n if (mode == Spinner.MODE_THEME) {\n if ('dialog' === a.getAttrValue('spinnerMode')) {\n mode = Spinner.MODE_DIALOG;\n }\n else {\n mode = Spinner.MODE_DROPDOWN;\n }\n }\n switch (mode) {\n case Spinner.MODE_DIALOG: {\n this.mPopup = new Spinner.DialogPopup(this);\n break;\n }\n case Spinner.MODE_DROPDOWN: {\n const popup = new Spinner.DropdownPopup(context, defStyle, this);\n this.mDropDownWidth = a.getLayoutDimension('dropDownWidth', ViewGroup.LayoutParams.WRAP_CONTENT);\n popup.setBackgroundDrawable(a.getDrawable('popupBackground'));\n const verticalOffset = a.getDimensionPixelOffset('dropDownVerticalOffset', 0);\n if (verticalOffset != 0) {\n popup.setVerticalOffset(verticalOffset);\n }\n const horizontalOffset = a.getDimensionPixelOffset('dropDownHorizontalOffset', 0);\n if (horizontalOffset != 0) {\n popup.setHorizontalOffset(horizontalOffset);\n }\n this.mPopup = popup;\n break;\n }\n }\n this.mGravity = Gravity.parseGravity(a.getAttrValue('gravity'), Gravity.CENTER);\n this.mPopup.setPromptText(a.getString('prompt'));\n this.mDisableChildrenWhenDisabled = a.getBoolean('disableChildrenWhenDisabled', false);\n a.recycle();\n if (this.mTempAdapter != null) {\n this.mPopup.setAdapter(this.mTempAdapter);\n this.mTempAdapter = null;\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('dropDownWidth', {\n setter(v, value, a) {\n v.mDropDownWidth = a.parseNumberPixelSize(value, v.mDropDownWidth);\n }, getter(v) {\n return v.mDropDownWidth;\n }\n }).set('popupBackground', {\n setter(v, value, a) {\n v.mPopup.setBackgroundDrawable(a.parseDrawable(value));\n }, getter(v) {\n return v.mPopup.getBackground();\n }\n }).set('dropDownVerticalOffset', {\n setter(v, value, a) {\n const verticalOffset = a.parseNumberPixelSize(value, 0);\n if (verticalOffset != 0) {\n v.mPopup.setVerticalOffset(verticalOffset);\n }\n }, getter(v) {\n return v.mPopup.getVerticalOffset();\n }\n }).set('dropDownHorizontalOffset', {\n setter(v, value, a) {\n const horizontalOffset = a.parseNumberPixelSize(value, 0);\n if (horizontalOffset != 0) {\n v.mPopup.setHorizontalOffset(horizontalOffset);\n }\n }, getter(v) {\n return v.mPopup.getHorizontalOffset();\n }\n }).set('gravity', {\n setter(v, value, a) {\n v.mGravity = a.parseGravity(value, Gravity.CENTER);\n }, getter(v) {\n return v.mGravity;\n }\n }).set('prompt', {\n setter(v, value, a) {\n v.mPopup.setPromptText(a.parseString(value));\n }, getter(v) {\n return v.mPopup.getHintText();\n }\n }).set('disableChildrenWhenDisabled', {\n setter(v, value, a) {\n v.mDisableChildrenWhenDisabled = a.parseBoolean(value, false);\n }, getter(v) {\n return v.mDisableChildrenWhenDisabled;\n }\n });\n }\n setPopupBackgroundDrawable(background) {\n if (!(this.mPopup instanceof Spinner.DropdownPopup)) {\n Log.e(Spinner.TAG, \"setPopupBackgroundDrawable: incompatible spinner mode; ignoring...\");\n return;\n }\n this.mPopup.setBackgroundDrawable(background);\n }\n getPopupBackground() {\n return this.mPopup.getBackground();\n }\n setDropDownVerticalOffset(pixels) {\n this.mPopup.setVerticalOffset(pixels);\n }\n getDropDownVerticalOffset() {\n return this.mPopup.getVerticalOffset();\n }\n setDropDownHorizontalOffset(pixels) {\n this.mPopup.setHorizontalOffset(pixels);\n }\n getDropDownHorizontalOffset() {\n return this.mPopup.getHorizontalOffset();\n }\n setDropDownWidth(pixels) {\n if (!(this.mPopup instanceof Spinner.DropdownPopup)) {\n Log.e(Spinner.TAG, \"Cannot set dropdown width for MODE_DIALOG, ignoring\");\n return;\n }\n this.mDropDownWidth = pixels;\n }\n getDropDownWidth() {\n return this.mDropDownWidth;\n }\n setEnabled(enabled) {\n super.setEnabled(enabled);\n if (this.mDisableChildrenWhenDisabled) {\n const count = this.getChildCount();\n for (let i = 0; i < count; i++) {\n this.getChildAt(i).setEnabled(enabled);\n }\n }\n }\n setGravity(gravity) {\n if (this.mGravity != gravity) {\n if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {\n gravity |= Gravity.START;\n }\n this.mGravity = gravity;\n this.requestLayout();\n }\n }\n getGravity() {\n return this.mGravity;\n }\n setAdapter(adapter) {\n super.setAdapter(adapter);\n this.mRecycler.clear();\n if (this.mPopup != null) {\n this.mPopup.setAdapter(new Spinner.DropDownAdapter(adapter));\n }\n else {\n this.mTempAdapter = new Spinner.DropDownAdapter(adapter);\n }\n }\n getBaseline() {\n let child = null;\n if (this.getChildCount() > 0) {\n child = this.getChildAt(0);\n }\n else if (this.mAdapter != null && this.mAdapter.getCount() > 0) {\n child = this.makeView(0, false);\n this.mRecycler.put(0, child);\n }\n if (child != null) {\n const childBaseline = child.getBaseline();\n return childBaseline >= 0 ? child.getTop() + childBaseline : -1;\n }\n else {\n return -1;\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n if (this.mPopup != null && this.mPopup.isShowing()) {\n this.mPopup.dismiss();\n }\n }\n setOnItemClickListener(l) {\n throw Error(`new RuntimeException(\"setOnItemClickListener cannot be used with a spinner.\")`);\n }\n setOnItemClickListenerInt(l) {\n super.setOnItemClickListener(l);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n if (this.mPopup != null && View.MeasureSpec.getMode(widthMeasureSpec) == View.MeasureSpec.AT_MOST) {\n const measuredWidth = this.getMeasuredWidth();\n this.setMeasuredDimension(Math.min(Math.max(measuredWidth, this.measureContentWidth(this.getAdapter(), this.getBackground())), View.MeasureSpec.getSize(widthMeasureSpec)), this.getMeasuredHeight());\n }\n }\n onLayout(changed, l, t, r, b) {\n super.onLayout(changed, l, t, r, b);\n this.mInLayout = true;\n this.layoutSpinner(0, false);\n this.mInLayout = false;\n }\n layoutSpinner(delta, animate) {\n let childrenLeft = this.mSpinnerPadding.left;\n let childrenWidth = this.mRight - this.mLeft - this.mSpinnerPadding.left - this.mSpinnerPadding.right;\n if (this.mDataChanged) {\n this.handleDataChanged();\n }\n if (this.mItemCount == 0) {\n this.resetList();\n return;\n }\n if (this.mNextSelectedPosition >= 0) {\n this.setSelectedPositionInt(this.mNextSelectedPosition);\n }\n this.recycleAllViews();\n this.removeAllViewsInLayout();\n this.mFirstPosition = this.mSelectedPosition;\n if (this.mAdapter != null) {\n let sel = this.makeView(this.mSelectedPosition, true);\n let width = sel.getMeasuredWidth();\n let selectedOffset = childrenLeft;\n const layoutDirection = this.getLayoutDirection();\n const absoluteGravity = Gravity.getAbsoluteGravity(this.mGravity, layoutDirection);\n switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {\n case Gravity.CENTER_HORIZONTAL:\n selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2);\n break;\n case Gravity.RIGHT:\n selectedOffset = childrenLeft + childrenWidth - width;\n break;\n }\n sel.offsetLeftAndRight(selectedOffset);\n }\n this.mRecycler.clear();\n this.invalidate();\n this.checkSelectionChanged();\n this.mDataChanged = false;\n this.mNeedSync = false;\n this.setNextSelectedPositionInt(this.mSelectedPosition);\n }\n makeView(position, addChild) {\n let child;\n if (!this.mDataChanged) {\n child = this.mRecycler.get(position);\n if (child != null) {\n this.setUpChild(child, addChild);\n return child;\n }\n }\n child = this.mAdapter.getView(position, null, this);\n this.setUpChild(child, addChild);\n return child;\n }\n setUpChild(child, addChild) {\n let lp = child.getLayoutParams();\n if (lp == null) {\n lp = this.generateDefaultLayoutParams();\n }\n if (addChild) {\n this.addViewInLayout(child, 0, lp);\n }\n child.setSelected(this.hasFocus());\n if (this.mDisableChildrenWhenDisabled) {\n child.setEnabled(this.isEnabled());\n }\n let childHeightSpec = ViewGroup.getChildMeasureSpec(this.mHeightMeasureSpec, this.mSpinnerPadding.top + this.mSpinnerPadding.bottom, lp.height);\n let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mSpinnerPadding.left + this.mSpinnerPadding.right, lp.width);\n child.measure(childWidthSpec, childHeightSpec);\n let childLeft;\n let childRight;\n let childTop = this.mSpinnerPadding.top + ((this.getMeasuredHeight() - this.mSpinnerPadding.bottom - this.mSpinnerPadding.top - child.getMeasuredHeight()) / 2);\n let childBottom = childTop + child.getMeasuredHeight();\n let width = child.getMeasuredWidth();\n childLeft = 0;\n childRight = childLeft + width;\n child.layout(childLeft, childTop, childRight, childBottom);\n }\n performClick() {\n let handled = super.performClick();\n if (!handled) {\n handled = true;\n if (!this.mPopup.isShowing()) {\n this.mPopup.showPopup(this.getTextDirection(), this.getTextAlignment());\n }\n }\n return handled;\n }\n onClick(dialog, which) {\n this.setSelection(which);\n dialog.dismiss();\n }\n setPrompt(prompt) {\n this.mPopup.setPromptText(prompt);\n }\n getPrompt() {\n return this.mPopup.getHintText();\n }\n measureContentWidth(adapter, background) {\n if (adapter == null) {\n return 0;\n }\n let width = 0;\n let itemView = null;\n let itemType = 0;\n const widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n const heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);\n let start = Math.max(0, this.getSelectedItemPosition());\n const end = Math.min(adapter.getCount(), start + Spinner.MAX_ITEMS_MEASURED);\n const count = end - start;\n start = Math.max(0, start - (Spinner.MAX_ITEMS_MEASURED - count));\n for (let i = start; i < end; i++) {\n const positionType = adapter.getItemViewType(i);\n if (positionType != itemType) {\n itemType = positionType;\n itemView = null;\n }\n itemView = adapter.getView(i, itemView, this);\n if (itemView.getLayoutParams() == null) {\n itemView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));\n }\n itemView.measure(widthMeasureSpec, heightMeasureSpec);\n width = Math.max(width, itemView.getMeasuredWidth());\n }\n if (background != null) {\n background.getPadding(this.mTempRect);\n width += this.mTempRect.left + this.mTempRect.right;\n }\n return width;\n }\n }\n Spinner.TAG = \"Spinner\";\n Spinner.MAX_ITEMS_MEASURED = 15;\n Spinner.MODE_DIALOG = 0;\n Spinner.MODE_DROPDOWN = 1;\n Spinner.MODE_THEME = -1;\n widget.Spinner = Spinner;\n (function (Spinner) {\n class DropDownAdapter {\n constructor(adapter) {\n this.mAdapter = adapter;\n if (ListAdapter.isImpl(adapter)) {\n this.mListAdapter = adapter;\n }\n }\n getCount() {\n return this.mAdapter == null ? 0 : this.mAdapter.getCount();\n }\n getItem(position) {\n return this.mAdapter == null ? null : this.mAdapter.getItem(position);\n }\n getItemId(position) {\n return this.mAdapter == null ? -1 : this.mAdapter.getItemId(position);\n }\n getView(position, convertView, parent) {\n return this.getDropDownView(position, convertView, parent);\n }\n getDropDownView(position, convertView, parent) {\n return (this.mAdapter == null) ? null : this.mAdapter.getDropDownView(position, convertView, parent);\n }\n hasStableIds() {\n return this.mAdapter != null && this.mAdapter.hasStableIds();\n }\n registerDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.registerDataSetObserver(observer);\n }\n }\n unregisterDataSetObserver(observer) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(observer);\n }\n }\n areAllItemsEnabled() {\n const adapter = this.mListAdapter;\n if (adapter != null) {\n return adapter.areAllItemsEnabled();\n }\n else {\n return true;\n }\n }\n isEnabled(position) {\n const adapter = this.mListAdapter;\n if (adapter != null) {\n return adapter.isEnabled(position);\n }\n else {\n return true;\n }\n }\n getItemViewType(position) {\n return 0;\n }\n getViewTypeCount() {\n return 1;\n }\n isEmpty() {\n return this.getCount() == 0;\n }\n }\n Spinner.DropDownAdapter = DropDownAdapter;\n class DialogPopup {\n constructor(arg) {\n this._Spinner_this = arg;\n }\n dismiss() {\n this.mPopup.dismiss();\n this.mPopup = null;\n }\n isShowing() {\n return this.mPopup != null ? this.mPopup.isShowing() : false;\n }\n setAdapter(adapter) {\n this.mListAdapter = adapter;\n }\n setPromptText(hintText) {\n this.mPrompt = hintText;\n }\n getHintText() {\n return this.mPrompt;\n }\n showPopup(textDirection, textAlignment) {\n if (this.mListAdapter == null) {\n return;\n }\n let builder = new AlertDialog.Builder(this._Spinner_this.getContext());\n if (this.mPrompt != null) {\n builder.setTitle(this.mPrompt);\n }\n this.mPopup = builder.setSingleChoiceItemsWithAdapter(this.mListAdapter, this._Spinner_this.getSelectedItemPosition(), this).create();\n const listView = this.mPopup.getListView();\n listView.setTextDirection(textDirection);\n listView.setTextAlignment(textAlignment);\n this.mPopup.show();\n }\n onClick(dialog, which) {\n this._Spinner_this.setSelection(which);\n if (this._Spinner_this.mOnItemClickListener != null) {\n this._Spinner_this.performItemClick(null, which, this.mListAdapter.getItemId(which));\n }\n this.dismiss();\n }\n setBackgroundDrawable(bg) {\n Log.e(Spinner.TAG, \"Cannot set popup background for MODE_DIALOG, ignoring\");\n }\n setVerticalOffset(px) {\n Log.e(Spinner.TAG, \"Cannot set vertical offset for MODE_DIALOG, ignoring\");\n }\n setHorizontalOffset(px) {\n Log.e(Spinner.TAG, \"Cannot set horizontal offset for MODE_DIALOG, ignoring\");\n }\n getBackground() {\n return null;\n }\n getVerticalOffset() {\n return 0;\n }\n getHorizontalOffset() {\n return 0;\n }\n }\n Spinner.DialogPopup = DialogPopup;\n class DropdownPopup extends ListPopupWindow {\n constructor(context, defStyleRes, arg) {\n super(context, defStyleRes);\n this._Spinner_this = arg;\n this.setAnchorView(this._Spinner_this);\n this.setModal(true);\n this.setPromptPosition(DropdownPopup.POSITION_PROMPT_ABOVE);\n this.setOnItemClickListener((() => {\n const inner_this = this;\n class _Inner {\n onItemClick(parent, v, position, id) {\n inner_this._Spinner_this.setSelection(position);\n if (inner_this._Spinner_this.mOnItemClickListener != null) {\n inner_this._Spinner_this.performItemClick(v, position, inner_this.mAdapter.getItemId(position));\n }\n inner_this.dismiss();\n }\n }\n return new _Inner();\n })());\n }\n setAdapter(adapter) {\n super.setAdapter(adapter);\n }\n getHintText() {\n return this.mHintText;\n }\n setPromptText(hintText) {\n this.mHintText = hintText;\n }\n computeContentWidth() {\n const background = this.getBackground();\n let hOffset = 0;\n if (background != null) {\n background.getPadding(this._Spinner_this.mTempRect);\n hOffset = this._Spinner_this.isLayoutRtl() ? this._Spinner_this.mTempRect.right : -this._Spinner_this.mTempRect.left;\n }\n else {\n this._Spinner_this.mTempRect.left = this._Spinner_this.mTempRect.right = 0;\n }\n const spinnerPaddingLeft = this._Spinner_this.getPaddingLeft();\n const spinnerPaddingRight = this._Spinner_this.getPaddingRight();\n const spinnerWidth = this._Spinner_this.getWidth();\n if (this._Spinner_this.mDropDownWidth == DropdownPopup.WRAP_CONTENT) {\n let contentWidth = this._Spinner_this.measureContentWidth(this.mAdapter, this.getBackground());\n const contentWidthLimit = this._Spinner_this.mContext.getResources().getDisplayMetrics().widthPixels - this._Spinner_this.mTempRect.left - this._Spinner_this.mTempRect.right;\n if (contentWidth > contentWidthLimit) {\n contentWidth = contentWidthLimit;\n }\n this.setContentWidth(Math.max(contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));\n }\n else if (this._Spinner_this.mDropDownWidth == DropdownPopup.MATCH_PARENT) {\n this.setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);\n }\n else {\n this.setContentWidth(this._Spinner_this.mDropDownWidth);\n }\n if (this._Spinner_this.isLayoutRtl()) {\n hOffset += spinnerWidth - spinnerPaddingRight - this.getWidth();\n }\n else {\n hOffset += spinnerPaddingLeft;\n }\n this.setHorizontalOffset(hOffset);\n }\n showPopup(textDirection, textAlignment) {\n const wasShowing = this.isShowing();\n this.computeContentWidth();\n this.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);\n super.show();\n const listView = this.getListView();\n listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);\n listView.setTextDirection(textDirection);\n listView.setTextAlignment(textAlignment);\n this.setSelection(this._Spinner_this.getSelectedItemPosition());\n if (wasShowing) {\n return;\n }\n const vto = this._Spinner_this.getViewTreeObserver();\n if (vto != null) {\n const layoutListener = (() => {\n const inner_this = this;\n class _Inner {\n onGlobalLayout() {\n if (!inner_this._Spinner_this.isVisibleToUser()) {\n inner_this.dismiss();\n }\n else {\n inner_this.computeContentWidth();\n inner_this.show();\n }\n }\n }\n return new _Inner();\n })();\n vto.addOnGlobalLayoutListener(layoutListener);\n this.setOnDismissListener((() => {\n const inner_this = this;\n class _Inner {\n onDismiss() {\n const vto = inner_this._Spinner_this.getViewTreeObserver();\n if (vto != null) {\n vto.removeOnGlobalLayoutListener(layoutListener);\n }\n }\n }\n return new _Inner();\n })());\n }\n }\n }\n Spinner.DropdownPopup = DropdownPopup;\n })(Spinner = widget.Spinner || (widget.Spinner = {}));\n })(widget = android.widget || (android.widget = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n class HtmlBaseView extends View {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHtmlTouchAble = false;\n }\n onTouchEvent(event) {\n if (this.mHtmlTouchAble) {\n event[android.view.ViewRootImpl.ContinueEventToDom] = true;\n }\n return super.onTouchEvent(event) || this.mHtmlTouchAble;\n }\n setHtmlTouchAble(enable) {\n this.mHtmlTouchAble = enable;\n }\n isHtmlTouchAble() {\n return this.mHtmlTouchAble;\n }\n dependOnDebugLayout() {\n return true;\n }\n }\n widget.HtmlBaseView = HtmlBaseView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar android;\n(function (android) {\n var webkit;\n (function (webkit) {\n class WebViewClient {\n onPageFinished(view, url) {\n }\n onReceivedTitle(view, title) {\n }\n }\n webkit.WebViewClient = WebViewClient;\n })(webkit = android.webkit || (android.webkit = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var webkit;\n (function (webkit) {\n var HtmlBaseView = androidui.widget.HtmlBaseView;\n class WebView extends HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.initIFrameHistoryLength = -1;\n let density = this.getResources().getDisplayMetrics().density;\n this.setMinimumWidth(300 * density);\n this.setMinimumHeight(150 * density);\n }\n initIFrameElement(url) {\n this.iFrameElement = document.createElement('iframe');\n this.iFrameElement.style.border = 'none';\n this.iFrameElement.style.height = '100%';\n this.iFrameElement.style.width = '100%';\n this.iFrameElement.onload = () => {\n this.checkActivityResume();\n if (this.initIFrameHistoryLength < 0)\n this.initIFrameHistoryLength = history.length;\n if (this.mClient) {\n this.mClient.onReceivedTitle(this, this.getTitle());\n this.mClient.onPageFinished(this, this.getUrl());\n }\n };\n this.bindElement.style['webkitOverflowScrolling'] = this.bindElement.style['overflowScrolling'] = 'touch';\n this.bindElement.style.overflowY = 'auto';\n if (url)\n this.iFrameElement.src = url;\n this.bindElement.appendChild(this.iFrameElement);\n let activity = this.getContext();\n let onDestroy = activity.onDestroy;\n activity.onDestroy = () => {\n onDestroy.call(activity);\n PageStack.preClosePageHasIFrame(this.initIFrameHistoryLength);\n };\n }\n checkActivityResume() {\n if (!this.getContext().mResumed) {\n console.error('can\\'t call any webview\\'s methods when host activity was pause');\n }\n }\n goBack() {\n this.checkActivityResume();\n if (this.canGoBack()) {\n history.back();\n }\n }\n canGoBack() {\n this.checkActivityResume();\n if (this.initIFrameHistoryLength < 0)\n return false;\n return history.length > this.initIFrameHistoryLength;\n }\n loadUrl(url) {\n if (this.initIFrameHistoryLength > 0) {\n this.checkActivityResume();\n }\n if (!this.iFrameElement) {\n this.initIFrameElement(url);\n }\n this.iFrameElement.src = url;\n }\n reload() {\n if (!this.iFrameElement)\n return;\n try {\n this.iFrameElement.contentWindow.location.reload();\n }\n catch (e) {\n this.iFrameElement.src = this.iFrameElement.src;\n }\n }\n getUrl() {\n if (!this.iFrameElement)\n return '';\n try {\n return this.iFrameElement.contentWindow.document.URL;\n }\n catch (e) {\n return this.iFrameElement.src;\n }\n }\n getTitle() {\n try {\n return this.iFrameElement.contentWindow.document.title;\n }\n catch (e) {\n console.warn(e);\n return '';\n }\n }\n setWebViewClient(client) {\n this.mClient = client;\n }\n }\n webkit.WebView = WebView;\n })(webkit = android.webkit || (android.webkit = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var animation;\n (function (animation) {\n var Animation = android.view.animation.Animation;\n class RotateAnimation extends Animation {\n constructor(fromDegrees, toDegrees, pivotXType = RotateAnimation.ABSOLUTE, pivotXValue = 0, pivotYType = RotateAnimation.ABSOLUTE, pivotYValue = 0) {\n super();\n this.mFromDegrees = 0;\n this.mToDegrees = 0;\n this.mPivotXType = RotateAnimation.ABSOLUTE;\n this.mPivotYType = RotateAnimation.ABSOLUTE;\n this.mPivotXValue = 0.0;\n this.mPivotYValue = 0.0;\n this.mPivotX = 0;\n this.mPivotY = 0;\n this.mFromDegrees = fromDegrees;\n this.mToDegrees = toDegrees;\n this.mPivotXValue = pivotXValue;\n this.mPivotXType = pivotXType;\n this.mPivotYValue = pivotYValue;\n this.mPivotYType = pivotYType;\n this.initializePivotPoint();\n }\n initializePivotPoint() {\n if (this.mPivotXType == RotateAnimation.ABSOLUTE) {\n this.mPivotX = this.mPivotXValue;\n }\n if (this.mPivotYType == RotateAnimation.ABSOLUTE) {\n this.mPivotY = this.mPivotYValue;\n }\n }\n applyTransformation(interpolatedTime, t) {\n let degrees = this.mFromDegrees + ((this.mToDegrees - this.mFromDegrees) * interpolatedTime);\n let scale = this.getScaleFactor();\n if (this.mPivotX == 0.0 && this.mPivotY == 0.0) {\n t.getMatrix().setRotate(degrees);\n }\n else {\n t.getMatrix().setRotate(degrees, this.mPivotX * scale, this.mPivotY * scale);\n }\n }\n initialize(width, height, parentWidth, parentHeight) {\n super.initialize(width, height, parentWidth, parentHeight);\n this.mPivotX = this.resolveSize(this.mPivotXType, this.mPivotXValue, width, parentWidth);\n this.mPivotY = this.resolveSize(this.mPivotYType, this.mPivotYValue, height, parentHeight);\n }\n }\n animation.RotateAnimation = RotateAnimation;\n })(animation = view.animation || (view.animation = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_6) {\n class MenuItem {\n constructor(menu, group, id, categoryOrder, ordering, title) {\n this.mId = 0;\n this.mGroup = 0;\n this.mCategoryOrder = 0;\n this.mOrdering = 0;\n this.mVisible = true;\n this.mEnable = true;\n this.mMenu = menu;\n this.mId = id;\n this.mGroup = group;\n this.mCategoryOrder = categoryOrder;\n this.mOrdering = ordering;\n this.mTitle = title;\n }\n getItemId() {\n return this.mId;\n }\n getGroupId() {\n return this.mGroup;\n }\n getOrder() {\n return this.mOrdering;\n }\n setTitle(title) {\n this.mTitle = title;\n return this;\n }\n getTitle() {\n return this.mTitle;\n }\n setIcon(icon) {\n this.mIconDrawable = icon;\n return this;\n }\n getIcon() {\n return this.mIconDrawable;\n }\n setIntent(intent) {\n this.mIntent = intent;\n return this;\n }\n getIntent() {\n return this.mIntent;\n }\n setVisible(visible) {\n this.mVisible = visible;\n return this;\n }\n isVisible() {\n return this.mVisible;\n }\n setEnabled(enabled) {\n this.mEnable = enabled;\n return this;\n }\n isEnabled() {\n return this.mEnable;\n }\n setOnMenuItemClickListener(menuItemClickListener) {\n this.mClickListener = menuItemClickListener;\n return this;\n }\n setActionView(view) {\n this.mActionView = view;\n return this;\n }\n getActionView() {\n return this.mActionView;\n }\n invoke() {\n if (this.mClickListener != null && this.mClickListener.onMenuItemClick(this)) {\n return true;\n }\n if (this.mMenu.dispatchMenuItemSelected(this.mMenu.getRootMenu(), this)) {\n return true;\n }\n if (this.mIntent != null) {\n try {\n this.mMenu.getContext().startActivity(this.mIntent);\n return true;\n }\n catch (e) {\n android.util.Log.e(\"MenuItem\", \"Can't find activity to handle intent; ignoring\", e);\n }\n }\n return false;\n }\n }\n view_6.MenuItem = MenuItem;\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view) {\n var MenuItem = android.view.MenuItem;\n var ArrayList = java.util.ArrayList;\n class Menu {\n constructor(context) {\n this.mItems = new ArrayList();\n this.mVisibleItems = new ArrayList();\n this.mContext = context;\n }\n getContext() {\n return this.mContext;\n }\n add(...args) {\n if (args.length == 1)\n return this.addInternal(0, 0, 0, args[0]);\n return this.addInternal(args[0], args[1], args[2], args[3]);\n }\n addInternal(group, id, categoryOrder, title) {\n const ordering = 0;\n const item = new MenuItem(this, group, id, categoryOrder, ordering, title);\n this.mItems.add(item);\n this.onItemsChanged(true);\n return item;\n }\n removeItem(id) {\n this.removeItemAtInt(this.findItemIndex(id), true);\n }\n removeGroup(groupId) {\n const i = this.findGroupIndex(groupId);\n if (i >= 0) {\n const maxRemovable = this.mItems.size() - i;\n let numRemoved = 0;\n while ((numRemoved++ < maxRemovable) && (this.mItems.get(i).getGroupId() == groupId)) {\n this.removeItemAtInt(i, false);\n }\n this.onItemsChanged(true);\n }\n }\n removeItemAtInt(index, updateChildrenOnMenuViews) {\n if ((index < 0) || (index >= this.mItems.size())) {\n return;\n }\n this.mItems.remove(index);\n if (updateChildrenOnMenuViews) {\n this.onItemsChanged(true);\n }\n }\n clear() {\n this.mItems.clear();\n this.onItemsChanged(true);\n }\n setGroupVisible(group, visible) {\n const N = this.mItems.size();\n let changedAtLeastOneItem = false;\n for (let i = 0; i < N; i++) {\n let item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n if (item.setVisible(visible)) {\n changedAtLeastOneItem = true;\n }\n }\n }\n if (changedAtLeastOneItem) {\n this.onItemsChanged(true);\n }\n }\n setGroupEnabled(group, enabled) {\n const N = this.mItems.size();\n for (let i = 0; i < N; i++) {\n let item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n item.setEnabled(enabled);\n }\n }\n }\n hasVisibleItems() {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.isVisible()) {\n return true;\n }\n }\n return false;\n }\n findItem(id) {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.getItemId() == id) {\n return item;\n }\n }\n return null;\n }\n findItemIndex(id) {\n const size = this.size();\n for (let i = 0; i < size; i++) {\n let item = this.mItems.get(i);\n if (item.getItemId() == id) {\n return i;\n }\n }\n return -1;\n }\n findGroupIndex(group, start = 0) {\n const size = this.size();\n if (start < 0) {\n start = 0;\n }\n for (let i = start; i < size; i++) {\n const item = this.mItems.get(i);\n if (item.getGroupId() == group) {\n return i;\n }\n }\n return -1;\n }\n size() {\n return this.mItems.size();\n }\n getItem(index) {\n return this.mItems.get(index);\n }\n onItemsChanged(structureChanged) {\n }\n getRootMenu() {\n return this;\n }\n setCallback(cb) {\n this.mCallback = cb;\n }\n dispatchMenuItemSelected(menu, item) {\n return this.mCallback != null && this.mCallback.onMenuItemSelected(menu, item);\n }\n getVisibleItems() {\n this.mVisibleItems.clear();\n const itemsSize = this.mItems.size();\n let item;\n for (let i = 0; i < itemsSize; i++) {\n item = this.mItems.get(i);\n if (item.isVisible()) {\n this.mVisibleItems.add(item);\n }\n }\n return this.mVisibleItems;\n }\n }\n view.Menu = Menu;\n (function (Menu) {\n Menu.USER_MASK = 0x0000ffff;\n Menu.USER_SHIFT = 0;\n Menu.CATEGORY_MASK = 0xffff0000;\n Menu.CATEGORY_SHIFT = 16;\n Menu.NONE = 0;\n Menu.FIRST = 1;\n Menu.CATEGORY_CONTAINER = 0x00010000;\n Menu.CATEGORY_SYSTEM = 0x00020000;\n Menu.CATEGORY_SECONDARY = 0x00030000;\n Menu.CATEGORY_ALTERNATIVE = 0x00040000;\n Menu.FLAG_APPEND_TO_GROUP = 0x0001;\n Menu.FLAG_PERFORM_NO_CLOSE = 0x0001;\n Menu.FLAG_ALWAYS_PERFORM_CLOSE = 0x0002;\n })(Menu = view.Menu || (view.Menu = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var view;\n (function (view_7) {\n var menu;\n (function (menu_1) {\n var R = android.R;\n var ListPopupWindow = android.widget.ListPopupWindow;\n var KeyEvent = android.view.KeyEvent;\n var LayoutInflater = android.view.LayoutInflater;\n var View = android.view.View;\n var MeasureSpec = android.view.View.MeasureSpec;\n var BaseAdapter = android.widget.BaseAdapter;\n var FrameLayout = android.widget.FrameLayout;\n var PopupWindow = android.widget.PopupWindow;\n class MenuPopupHelper {\n constructor(context, menu, anchorView = null) {\n this.mPopupMaxWidth = 0;\n this.mContext = context;\n this.mInflater = LayoutInflater.from(context);\n this.mMenu = menu;\n const res = context.getResources();\n this.mPopupMaxWidth = Math.max(res.getDisplayMetrics().widthPixels / 2, res.getDisplayMetrics().density * 320);\n this.mAnchorView = anchorView;\n }\n setAnchorView(anchor) {\n this.mAnchorView = anchor;\n }\n show() {\n if (!this.tryShow()) {\n throw Error(`new IllegalStateException(\"MenuPopupHelper cannot be used without an anchor\")`);\n }\n }\n tryShow() {\n this.mPopup = new ListPopupWindow(this.mContext, R.attr.popupMenuStyle);\n this.mPopup.setOnDismissListener(this);\n this.mPopup.setOnItemClickListener(this);\n this.mAdapter = new MenuPopupHelper.MenuAdapter(this.mMenu, this);\n this.mPopup.setAdapter(this.mAdapter);\n this.mPopup.setModal(true);\n let anchor = this.mAnchorView;\n if (anchor != null) {\n const addGlobalListener = this.mTreeObserver == null;\n this.mTreeObserver = anchor.getViewTreeObserver();\n if (addGlobalListener) {\n this.mTreeObserver.addOnGlobalLayoutListener(this);\n }\n this.mPopup.setAnchorView(anchor);\n }\n else {\n return false;\n }\n this.mPopup.setContentWidth(Math.min(this.measureContentWidth(this.mAdapter), this.mPopupMaxWidth));\n this.mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);\n this.mPopup.show();\n this.mPopup.getListView().setOnKeyListener(this);\n return true;\n }\n dismiss() {\n if (this.isShowing()) {\n this.mPopup.dismiss();\n }\n }\n onDismiss() {\n this.mPopup = null;\n if (this.mTreeObserver != null) {\n if (!this.mTreeObserver.isAlive()) {\n this.mTreeObserver = this.mAnchorView.getViewTreeObserver();\n }\n this.mTreeObserver.removeGlobalOnLayoutListener(this);\n this.mTreeObserver = null;\n }\n }\n isShowing() {\n return this.mPopup != null && this.mPopup.isShowing();\n }\n onItemClick(parent, view, position, id) {\n let adapter = this.mAdapter;\n let invoked = adapter.getItem(position).invoke();\n if (invoked)\n this.mPopup.dismiss();\n }\n onKey(v, keyCode, event) {\n if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_MENU) {\n this.dismiss();\n return true;\n }\n return false;\n }\n measureContentWidth(adapter) {\n let width = 0;\n let itemView = null;\n let itemType = 0;\n const widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n const heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);\n const count = adapter.getCount();\n for (let i = 0; i < count; i++) {\n const positionType = adapter.getItemViewType(i);\n if (positionType != itemType) {\n itemType = positionType;\n itemView = null;\n }\n if (this.mMeasureParent == null) {\n this.mMeasureParent = new FrameLayout(this.mContext);\n }\n itemView = adapter.getView(i, itemView, this.mMeasureParent);\n itemView.measure(widthMeasureSpec, heightMeasureSpec);\n width = Math.max(width, itemView.getMeasuredWidth());\n }\n return width;\n }\n onGlobalLayout() {\n if (this.isShowing()) {\n const anchor = this.mAnchorView;\n if (anchor == null || !anchor.isShown()) {\n this.dismiss();\n }\n else if (this.isShowing()) {\n try {\n this.mPopup.setContentWidth(Math.min(this.measureContentWidth(this.mAdapter), this.mPopupMaxWidth));\n }\n catch (e) {\n }\n this.mPopup.show();\n }\n }\n }\n }\n MenuPopupHelper.TAG = \"MenuPopupHelper\";\n MenuPopupHelper.ITEM_LAYOUT = R.layout.popup_menu_item_layout;\n menu_1.MenuPopupHelper = MenuPopupHelper;\n (function (MenuPopupHelper) {\n class MenuAdapter extends BaseAdapter {\n constructor(menu, arg) {\n super();\n this._MenuPopupHelper_this = arg;\n this.mAdapterMenu = menu;\n }\n getCount() {\n let items = this.mAdapterMenu.getVisibleItems();\n return items.size();\n }\n getItem(position) {\n let items = this.mAdapterMenu.getVisibleItems();\n return items.get(position);\n }\n getItemId(position) {\n return position;\n }\n getView(position, convertView, parent) {\n if (convertView == null) {\n convertView = this._MenuPopupHelper_this.mInflater.inflate(MenuPopupHelper.ITEM_LAYOUT, parent, false);\n }\n let itemData = this.getItem(position);\n convertView.setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);\n let titleView = convertView.findViewById('title');\n titleView.setText(itemData.getTitle());\n let iconView = convertView.findViewById('icon');\n let icon = itemData.getIcon();\n iconView.setImageDrawable(icon);\n if (icon != null) {\n iconView.setImageDrawable(icon);\n iconView.setVisibility(View.VISIBLE);\n }\n else {\n iconView.setVisibility(View.GONE);\n }\n convertView.setEnabled(itemData.isEnabled());\n return convertView;\n }\n notifyDataSetChanged() {\n super.notifyDataSetChanged();\n }\n }\n MenuPopupHelper.MenuAdapter = MenuAdapter;\n })(MenuPopupHelper = menu_1.MenuPopupHelper || (menu_1.MenuPopupHelper = {}));\n })(menu = view_7.menu || (view_7.menu = {}));\n })(view = android.view || (android.view = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var view;\n (function (view_8) {\n var DataSetObservable = android.database.DataSetObservable;\n class PagerAdapter {\n constructor() {\n this.mObservable = new DataSetObservable();\n }\n startUpdate(container) {\n }\n instantiateItem(container, position) {\n throw new Error(\"Required method instantiateItem was not overridden\");\n }\n destroyItem(container, position, object) {\n throw new Error(\"Required method destroyItem was not overridden\");\n }\n setPrimaryItem(container, position, object) {\n }\n finishUpdate(container) {\n }\n getItemPosition(object) {\n return PagerAdapter.POSITION_UNCHANGED;\n }\n notifyDataSetChanged() {\n this.mObservable.notifyChanged();\n }\n registerDataSetObserver(observer) {\n this.mObservable.registerObserver(observer);\n }\n unregisterDataSetObserver(observer) {\n this.mObservable.unregisterObserver(observer);\n }\n getPageTitle(position) {\n return null;\n }\n getPageWidth(position) {\n return 1;\n }\n }\n PagerAdapter.POSITION_UNCHANGED = -1;\n PagerAdapter.POSITION_NONE = -2;\n view_8.PagerAdapter = PagerAdapter;\n })(view = v4.view || (v4.view = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var view;\n (function (view_9) {\n var View = android.view.View;\n var Gravity = android.view.Gravity;\n var MeasureSpec = View.MeasureSpec;\n var OverScroller = android.widget.OverScroller;\n var ViewGroup = android.view.ViewGroup;\n var ArrayList = java.util.ArrayList;\n var Rect = android.graphics.Rect;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n var DataSetObserver = android.database.DataSetObserver;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var Resources = android.content.res.Resources;\n var Log = android.util.Log;\n var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n const TAG = \"ViewPager\";\n const DEBUG = false;\n const SymbolDecor = Symbol();\n class ViewPager extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mExpectedAdapterCount = 0;\n this.mItems = new ArrayList();\n this.mTempItem = new ItemInfo();\n this.mTempRect = new Rect();\n this.mCurItem = 0;\n this.mRestoredCurItem = -1;\n this.mPageMargin = 0;\n this.mTopPageBounds = 0;\n this.mBottomPageBounds = 0;\n this.mFirstOffset = -Number.MAX_VALUE;\n this.mLastOffset = Number.MAX_VALUE;\n this.mChildWidthMeasureSpec = 0;\n this.mChildHeightMeasureSpec = 0;\n this.mInLayout = false;\n this.mScrollingCacheEnabled = false;\n this.mPopulatePending = false;\n this.mOffscreenPageLimit = ViewPager.DEFAULT_OFFSCREEN_PAGES;\n this.mIsBeingDragged = false;\n this.mIsUnableToDrag = false;\n this.mDefaultGutterSize = 0;\n this.mGutterSize = 0;\n this.mLastMotionX = 0;\n this.mLastMotionY = 0;\n this.mInitialMotionX = 0;\n this.mInitialMotionY = 0;\n this.mActivePointerId = ViewPager.INVALID_POINTER;\n this.mMinimumVelocity = 0;\n this.mMaximumVelocity = 0;\n this.mFlingDistance = 0;\n this.mCloseEnough = 0;\n this.mFakeDragging = false;\n this.mFakeDragBeginTime = 0;\n this.mFirstLayout = true;\n this.mNeedCalculatePageOffsets = false;\n this.mCalledSuper = false;\n this.mDecorChildCount = 0;\n this.mDrawingOrder = 0;\n this.mEndScrollRunnable = (() => {\n let ViewPager_this = this;\n class InnerClass {\n run() {\n ViewPager_this.setScrollState(ViewPager.SCROLL_STATE_IDLE);\n ViewPager_this.populate();\n }\n }\n return new InnerClass();\n })();\n this.mScrollState = ViewPager.SCROLL_STATE_IDLE;\n this.initViewPager();\n }\n initViewPager() {\n this.setWillNotDraw(false);\n this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);\n this.setFocusable(true);\n this.mScroller = new OverScroller(ViewPager.sInterpolator);\n let density = Resources.getDisplayMetrics().density;\n this.mTouchSlop = ViewConfiguration.get().getScaledPagingTouchSlop();\n this.mMinimumVelocity = Math.floor(ViewPager.MIN_FLING_VELOCITY * density);\n this.mMaximumVelocity = ViewConfiguration.get().getScaledMaximumFlingVelocity();\n this.mFlingDistance = Math.floor(ViewPager.MIN_DISTANCE_FOR_FLING * density);\n this.mCloseEnough = Math.floor(ViewPager.CLOSE_ENOUGH * density);\n this.mDefaultGutterSize = Math.floor(ViewPager.DEFAULT_GUTTER_SIZE * density);\n }\n onDetachedFromWindow() {\n this.removeCallbacks(this.mEndScrollRunnable);\n super.onDetachedFromWindow();\n }\n setScrollState(newState) {\n if (this.mScrollState == newState) {\n return;\n }\n this.mScrollState = newState;\n if (this.mPageTransformer != null) {\n this.enableLayers(newState != ViewPager.SCROLL_STATE_IDLE);\n }\n this.dispatchOnScrollStateChanged(newState);\n }\n setAdapter(adapter) {\n if (this.mAdapter != null) {\n this.mAdapter.unregisterDataSetObserver(this.mObserver);\n this.mAdapter.startUpdate(this);\n for (let i = 0; i < this.mItems.size(); i++) {\n const ii = this.mItems.get(i);\n this.mAdapter.destroyItem(this, ii.position, ii.object);\n }\n this.mAdapter.finishUpdate(this);\n this.mItems.clear();\n this.removeNonDecorViews();\n this.mCurItem = 0;\n this.scrollTo(0, 0);\n }\n const oldAdapter = this.mAdapter;\n this.mAdapter = adapter;\n this.mExpectedAdapterCount = 0;\n if (this.mAdapter != null) {\n if (this.mObserver == null) {\n this.mObserver = new PagerObserver(this);\n }\n this.mAdapter.registerDataSetObserver(this.mObserver);\n this.mPopulatePending = false;\n const wasFirstLayout = this.mFirstLayout;\n this.mFirstLayout = true;\n this.mExpectedAdapterCount = this.mAdapter.getCount();\n if (this.mRestoredCurItem >= 0) {\n this.setCurrentItemInternal(this.mRestoredCurItem, false, true);\n this.mRestoredCurItem = -1;\n }\n else if (!wasFirstLayout) {\n this.populate();\n }\n else {\n this.requestLayout();\n }\n }\n if (this.mAdapterChangeListener != null && oldAdapter != adapter) {\n this.mAdapterChangeListener.onAdapterChanged(oldAdapter, adapter);\n }\n }\n removeNonDecorViews() {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor) {\n this.removeViewAt(i);\n i--;\n }\n }\n }\n getAdapter() {\n return this.mAdapter;\n }\n setOnAdapterChangeListener(listener) {\n this.mAdapterChangeListener = listener;\n }\n getClientWidth() {\n return this.getMeasuredWidth() - this.getPaddingLeft() - this.getPaddingRight();\n }\n setCurrentItem(item, smoothScroll = !this.mFirstLayout) {\n this.mPopulatePending = false;\n this.setCurrentItemInternal(item, smoothScroll, false);\n }\n getCurrentItem() {\n return this.mCurItem;\n }\n setCurrentItemInternal(item, smoothScroll, always, velocity = 0) {\n if (this.mAdapter == null || this.mAdapter.getCount() <= 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n if (!always && this.mCurItem == item && this.mItems.size() != 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n if (item < 0) {\n item = 0;\n }\n else if (item >= this.mAdapter.getCount()) {\n item = this.mAdapter.getCount() - 1;\n }\n const pageLimit = this.mOffscreenPageLimit;\n if (item > (this.mCurItem + pageLimit) || item < (this.mCurItem - pageLimit)) {\n for (let i = 0; i < this.mItems.size(); i++) {\n this.mItems.get(i).scrolling = true;\n }\n }\n const dispatchSelected = this.mCurItem != item;\n if (this.mFirstLayout) {\n this.mCurItem = item;\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n this.requestLayout();\n }\n else {\n this.populate(item);\n this.scrollToItem(item, smoothScroll, velocity, dispatchSelected);\n }\n }\n scrollToItem(item, smoothScroll, velocity, dispatchSelected) {\n const curInfo = this.infoForPosition(item);\n let destX = 0;\n if (curInfo != null) {\n const width = this.getClientWidth();\n destX = Math.floor(width * Math.max(this.mFirstOffset, Math.min(curInfo.offset, this.mLastOffset)));\n }\n if (smoothScroll) {\n this.smoothScrollTo(destX, 0, velocity);\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n }\n else {\n if (dispatchSelected) {\n this.dispatchOnPageSelected(item);\n }\n this.completeScroll(false);\n this.scrollTo(destX, 0);\n this.pageScrolled(destX);\n }\n }\n setOnPageChangeListener(listener) {\n this.mOnPageChangeListener = listener;\n }\n addOnPageChangeListener(listener) {\n if (this.mOnPageChangeListeners == null) {\n this.mOnPageChangeListeners = new ArrayList();\n }\n this.mOnPageChangeListeners.add(listener);\n }\n removeOnPageChangeListener(listener) {\n if (this.mOnPageChangeListeners != null) {\n this.mOnPageChangeListeners.remove(listener);\n }\n }\n clearOnPageChangeListeners() {\n if (this.mOnPageChangeListeners != null) {\n this.mOnPageChangeListeners.clear();\n }\n }\n setPageTransformer(reverseDrawingOrder, transformer) {\n const hasTransformer = transformer != null;\n const needsPopulate = hasTransformer != (this.mPageTransformer != null);\n this.mPageTransformer = transformer;\n this.setChildrenDrawingOrderEnabledCompat(hasTransformer);\n if (hasTransformer) {\n this.mDrawingOrder = reverseDrawingOrder ? ViewPager.DRAW_ORDER_REVERSE : ViewPager.DRAW_ORDER_FORWARD;\n }\n else {\n this.mDrawingOrder = ViewPager.DRAW_ORDER_DEFAULT;\n }\n if (needsPopulate)\n this.populate();\n }\n setChildrenDrawingOrderEnabledCompat(enable = true) {\n this.setChildrenDrawingOrderEnabled(enable);\n }\n getChildDrawingOrder(childCount, i) {\n const index = this.mDrawingOrder == ViewPager.DRAW_ORDER_REVERSE ? childCount - 1 - i : i;\n const result = this.mDrawingOrderedChildren.get(index).getLayoutParams().childIndex;\n return result;\n }\n setInternalPageChangeListener(listener) {\n let oldListener = this.mInternalPageChangeListener;\n this.mInternalPageChangeListener = listener;\n return oldListener;\n }\n getOffscreenPageLimit() {\n return this.mOffscreenPageLimit;\n }\n setOffscreenPageLimit(limit) {\n if (limit < ViewPager.DEFAULT_OFFSCREEN_PAGES) {\n Log.w(TAG, \"Requested offscreen page limit \" + limit + \" too small; defaulting to \" +\n ViewPager.DEFAULT_OFFSCREEN_PAGES);\n limit = ViewPager.DEFAULT_OFFSCREEN_PAGES;\n }\n if (limit != this.mOffscreenPageLimit) {\n this.mOffscreenPageLimit = limit;\n this.populate();\n }\n }\n setPageMargin(marginPixels) {\n const oldMargin = this.mPageMargin;\n this.mPageMargin = marginPixels;\n const width = this.getWidth();\n this.recomputeScrollPosition(width, width, marginPixels, oldMargin);\n this.requestLayout();\n }\n getPageMargin() {\n return this.mPageMargin;\n }\n setPageMarginDrawable(d) {\n this.mMarginDrawable = d;\n if (d != null)\n this.refreshDrawableState();\n this.setWillNotDraw(d == null);\n this.invalidate();\n }\n verifyDrawable(who) {\n return super.verifyDrawable(who) || who == this.mMarginDrawable;\n }\n drawableStateChanged() {\n super.drawableStateChanged();\n const d = this.mMarginDrawable;\n if (d != null && d.isStateful()) {\n d.setState(this.getDrawableState());\n }\n }\n distanceInfluenceForSnapDuration(f) {\n f -= 0.5;\n f *= 0.3 * Math.PI / 2.0;\n return Math.sin(f);\n }\n smoothScrollTo(x, y, velocity = 0) {\n if (this.getChildCount() == 0) {\n this.setScrollingCacheEnabled(false);\n return;\n }\n let sx = this.getScrollX();\n let sy = this.getScrollY();\n let dx = x - sx;\n let dy = y - sy;\n if (dx == 0 && dy == 0) {\n this.completeScroll(false);\n this.populate();\n this.setScrollState(ViewPager.SCROLL_STATE_IDLE);\n return;\n }\n this.setScrollingCacheEnabled(true);\n this.setScrollState(ViewPager.SCROLL_STATE_SETTLING);\n const width = this.getClientWidth();\n const halfWidth = width / 2;\n const distanceRatio = Math.min(1, 1.0 * Math.abs(dx) / width);\n const distance = halfWidth + halfWidth *\n this.distanceInfluenceForSnapDuration(distanceRatio);\n let duration = 0;\n velocity = Math.abs(velocity);\n if (velocity > 0) {\n duration = 4 * Math.round(1000 * Math.abs(distance / velocity));\n }\n else {\n const pageWidth = width * this.mAdapter.getPageWidth(this.mCurItem);\n const pageDelta = Math.abs(dx) / (pageWidth + this.mPageMargin);\n duration = Math.floor((pageDelta + 1) * 100);\n }\n duration = Math.min(duration, ViewPager.MAX_SETTLE_DURATION);\n this.mScroller.startScroll(sx, sy, dx, dy, duration);\n this.postInvalidateOnAnimation();\n }\n addNewItem(position, index) {\n let ii = new ItemInfo();\n ii.position = position;\n ii.object = this.mAdapter.instantiateItem(this, position);\n ii.widthFactor = this.mAdapter.getPageWidth(position);\n if (index < 0 || index >= this.mItems.size()) {\n this.mItems.add(ii);\n }\n else {\n this.mItems.add(index, ii);\n }\n return ii;\n }\n dataSetChanged() {\n const adapterCount = this.mAdapter.getCount();\n this.mExpectedAdapterCount = adapterCount;\n let needPopulate = this.mItems.size() < this.mOffscreenPageLimit * 2 + 1 &&\n this.mItems.size() < adapterCount;\n let newCurrItem = this.mCurItem;\n let isUpdating = false;\n for (let i = 0; i < this.mItems.size(); i++) {\n const ii = this.mItems.get(i);\n const newPos = this.mAdapter.getItemPosition(ii.object);\n if (newPos == PagerAdapter.POSITION_UNCHANGED) {\n continue;\n }\n if (newPos == PagerAdapter.POSITION_NONE) {\n this.mItems.remove(i);\n i--;\n if (!isUpdating) {\n this.mAdapter.startUpdate(this);\n isUpdating = true;\n }\n this.mAdapter.destroyItem(this, ii.position, ii.object);\n needPopulate = true;\n if (this.mCurItem == ii.position) {\n newCurrItem = Math.max(0, Math.min(this.mCurItem, adapterCount - 1));\n needPopulate = true;\n }\n continue;\n }\n if (ii.position != newPos) {\n if (ii.position == this.mCurItem) {\n newCurrItem = newPos;\n }\n ii.position = newPos;\n needPopulate = true;\n }\n }\n if (isUpdating) {\n this.mAdapter.finishUpdate(this);\n }\n this.mItems.sort(ViewPager.COMPARATOR);\n if (needPopulate) {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor) {\n lp.widthFactor = 0;\n }\n }\n this.setCurrentItemInternal(newCurrItem, false, true);\n this.requestLayout();\n }\n }\n populate(newCurrentItem = this.mCurItem) {\n let oldCurInfo = null;\n let focusDirection = View.FOCUS_FORWARD;\n if (this.mCurItem != newCurrentItem) {\n focusDirection = this.mCurItem < newCurrentItem ? View.FOCUS_RIGHT : View.FOCUS_LEFT;\n oldCurInfo = this.infoForPosition(this.mCurItem);\n this.mCurItem = newCurrentItem;\n }\n if (this.mAdapter == null) {\n this.sortChildDrawingOrder();\n return;\n }\n if (this.mPopulatePending) {\n if (DEBUG)\n Log.i(TAG, \"populate is pending, skipping for now...\");\n this.sortChildDrawingOrder();\n return;\n }\n if (!this.isAttachedToWindow()) {\n return;\n }\n this.mAdapter.startUpdate(this);\n const pageLimit = this.mOffscreenPageLimit;\n const startPos = Math.max(0, this.mCurItem - pageLimit);\n const N = this.mAdapter.getCount();\n const endPos = Math.min(N - 1, this.mCurItem + pageLimit);\n if (N != this.mExpectedAdapterCount) {\n throw new Error(\"The application's PagerAdapter changed the adapter's\" +\n \" contents without calling PagerAdapter#notifyDataSetChanged!\" +\n \" Expected adapter item count: \" + this.mExpectedAdapterCount + \", found: \" + N +\n \" Pager id: \" + this.getId() +\n \" Pager class: \" + this.constructor.name +\n \" Problematic adapter: \" + this.mAdapter.constructor.name);\n }\n let curIndex = -1;\n let curItem = null;\n for (curIndex = 0; curIndex < this.mItems.size(); curIndex++) {\n const ii = this.mItems.get(curIndex);\n if (ii.position >= this.mCurItem) {\n if (ii.position == this.mCurItem)\n curItem = ii;\n break;\n }\n }\n if (curItem == null && N > 0) {\n curItem = this.addNewItem(this.mCurItem, curIndex);\n }\n if (curItem != null) {\n let extraWidthLeft = 0;\n let itemIndex = curIndex - 1;\n let ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n const clientWidth = this.getClientWidth();\n const leftWidthNeeded = clientWidth <= 0 ? 0 :\n 2 - curItem.widthFactor + this.getPaddingLeft() / clientWidth;\n for (let pos = this.mCurItem - 1; pos >= 0; pos--) {\n if (extraWidthLeft >= leftWidthNeeded && pos < startPos) {\n if (ii == null) {\n break;\n }\n if (pos == ii.position && !ii.scrolling) {\n this.mItems.remove(itemIndex);\n this.mAdapter.destroyItem(this, pos, ii.object);\n if (DEBUG) {\n Log.i(TAG, \"populate() - destroyItem() with pos: \" + pos +\n \" view: \" + ii.object);\n }\n itemIndex--;\n curIndex--;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n }\n else if (ii != null && pos == ii.position) {\n extraWidthLeft += ii.widthFactor;\n itemIndex--;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n else {\n ii = this.addNewItem(pos, itemIndex + 1);\n extraWidthLeft += ii.widthFactor;\n curIndex++;\n ii = itemIndex >= 0 ? this.mItems.get(itemIndex) : null;\n }\n }\n let extraWidthRight = curItem.widthFactor;\n itemIndex = curIndex + 1;\n if (extraWidthRight < 2) {\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n const rightWidthNeeded = clientWidth <= 0 ? 0 :\n this.getPaddingRight() / clientWidth + 2;\n for (let pos = this.mCurItem + 1; pos < N; pos++) {\n if (extraWidthRight >= rightWidthNeeded && pos > endPos) {\n if (ii == null) {\n break;\n }\n if (pos == ii.position && !ii.scrolling) {\n this.mItems.remove(itemIndex);\n this.mAdapter.destroyItem(this, pos, ii.object);\n if (DEBUG) {\n Log.i(TAG, \"populate() - destroyItem() with pos: \" + pos +\n \" view: \" + ii.object);\n }\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n }\n else if (ii != null && pos == ii.position) {\n extraWidthRight += ii.widthFactor;\n itemIndex++;\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n else {\n ii = this.addNewItem(pos, itemIndex);\n itemIndex++;\n extraWidthRight += ii.widthFactor;\n ii = itemIndex < this.mItems.size() ? this.mItems.get(itemIndex) : null;\n }\n }\n }\n this.calculatePageOffsets(curItem, curIndex, oldCurInfo);\n }\n if (DEBUG) {\n Log.i(TAG, \"Current page list:\");\n for (let i = 0; i < this.mItems.size(); i++) {\n Log.i(TAG, \"#\" + i + \": page \" + this.mItems.get(i).position);\n }\n }\n this.mAdapter.setPrimaryItem(this, this.mCurItem, curItem != null ? curItem.object : null);\n this.mAdapter.finishUpdate(this);\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n lp.childIndex = i;\n if (!lp.isDecor && lp.widthFactor == 0) {\n const ii = this.infoForChild(child);\n if (ii != null) {\n lp.widthFactor = ii.widthFactor;\n lp.position = ii.position;\n }\n }\n }\n this.sortChildDrawingOrder();\n if (this.hasFocus()) {\n let currentFocused = this.findFocus();\n let ii = currentFocused != null ? this.infoForAnyChild(currentFocused) : null;\n if (ii == null || ii.position != this.mCurItem) {\n for (let i = 0; i < this.getChildCount(); i++) {\n let child = this.getChildAt(i);\n ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n if (child.requestFocus(focusDirection)) {\n break;\n }\n }\n }\n }\n }\n }\n sortChildDrawingOrder() {\n if (this.mDrawingOrder != ViewPager.DRAW_ORDER_DEFAULT) {\n if (this.mDrawingOrderedChildren == null) {\n this.mDrawingOrderedChildren = new ArrayList();\n }\n else {\n this.mDrawingOrderedChildren.clear();\n }\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n this.mDrawingOrderedChildren.add(child);\n }\n this.mDrawingOrderedChildren.sort(ViewPager.sPositionComparator);\n }\n }\n calculatePageOffsets(curItem, curIndex, oldCurInfo) {\n const N = this.mAdapter.getCount();\n const width = this.getClientWidth();\n const marginOffset = width > 0 ? this.mPageMargin / width : 0;\n if (oldCurInfo != null) {\n const oldCurPosition = oldCurInfo.position;\n if (oldCurPosition < curItem.position) {\n let itemIndex = 0;\n let ii = null;\n let offset = oldCurInfo.offset + oldCurInfo.widthFactor + marginOffset;\n for (let pos = oldCurPosition + 1; pos <= curItem.position && itemIndex < this.mItems.size(); pos++) {\n ii = this.mItems.get(itemIndex);\n while (pos > ii.position && itemIndex < this.mItems.size() - 1) {\n itemIndex++;\n ii = this.mItems.get(itemIndex);\n }\n while (pos < ii.position) {\n offset += this.mAdapter.getPageWidth(pos) + marginOffset;\n pos++;\n }\n ii.offset = offset;\n offset += ii.widthFactor + marginOffset;\n }\n }\n else if (oldCurPosition > curItem.position) {\n let itemIndex = this.mItems.size() - 1;\n let ii = null;\n let offset = oldCurInfo.offset;\n for (let pos = oldCurPosition - 1; pos >= curItem.position && itemIndex >= 0; pos--) {\n ii = this.mItems.get(itemIndex);\n while (pos < ii.position && itemIndex > 0) {\n itemIndex--;\n ii = this.mItems.get(itemIndex);\n }\n while (pos > ii.position) {\n offset -= this.mAdapter.getPageWidth(pos) + marginOffset;\n pos--;\n }\n offset -= ii.widthFactor + marginOffset;\n ii.offset = offset;\n }\n }\n }\n const itemCount = this.mItems.size();\n let offset = curItem.offset;\n let pos = curItem.position - 1;\n this.mFirstOffset = curItem.position == 0 ? curItem.offset : -Number.MAX_VALUE;\n this.mLastOffset = curItem.position == N - 1 ?\n curItem.offset + curItem.widthFactor - 1 : Number.MAX_VALUE;\n for (let i = curIndex - 1; i >= 0; i--, pos--) {\n const ii = this.mItems.get(i);\n while (pos > ii.position) {\n offset -= this.mAdapter.getPageWidth(pos--) + marginOffset;\n }\n offset -= ii.widthFactor + marginOffset;\n ii.offset = offset;\n if (ii.position == 0)\n this.mFirstOffset = offset;\n }\n offset = curItem.offset + curItem.widthFactor + marginOffset;\n pos = curItem.position + 1;\n for (let i = curIndex + 1; i < itemCount; i++, pos++) {\n const ii = this.mItems.get(i);\n while (pos < ii.position) {\n offset += this.mAdapter.getPageWidth(pos++) + marginOffset;\n }\n if (ii.position == N - 1) {\n this.mLastOffset = offset + ii.widthFactor - 1;\n }\n ii.offset = offset;\n offset += ii.widthFactor + marginOffset;\n }\n this.mNeedCalculatePageOffsets = false;\n }\n addView(...args) {\n if (args.length === 3 && args[2] instanceof ViewGroup.LayoutParams) {\n this._addViewOverride(args[0], args[1], args[2]);\n }\n else {\n super.addView(...args);\n }\n }\n _addViewOverride(child, index, params) {\n if (!this.checkLayoutParams(params)) {\n params = this.generateLayoutParams(params);\n }\n const lp = params;\n lp.isDecor = lp.isDecor || ViewPager.isImplDecor(child);\n if (this.mInLayout) {\n if (lp != null && lp.isDecor) {\n throw new Error(\"Cannot add pager decor view during layout\");\n }\n lp.needsMeasure = true;\n this.addViewInLayout(child, index, params);\n }\n else {\n super.addView(child, index, params);\n }\n if (ViewPager.USE_CACHE) {\n if (child.getVisibility() != View.GONE) {\n child.setDrawingCacheEnabled(this.mScrollingCacheEnabled);\n }\n else {\n child.setDrawingCacheEnabled(false);\n }\n }\n }\n removeView(view) {\n if (this.mInLayout) {\n this.removeViewInLayout(view);\n }\n else {\n super.removeView(view);\n }\n }\n infoForChild(child) {\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (this.mAdapter.isViewFromObject(child, ii.object)) {\n return ii;\n }\n }\n return null;\n }\n infoForAnyChild(child) {\n let parent;\n while ((parent = child.getParent()) != this) {\n if (parent == null || !(parent instanceof View)) {\n return null;\n }\n child = parent;\n }\n return this.infoForChild(child);\n }\n infoForPosition(position) {\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (ii.position == position) {\n return ii;\n }\n }\n return null;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mFirstLayout = true;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n this.setMeasuredDimension(ViewPager.getDefaultSize(0, widthMeasureSpec), ViewPager.getDefaultSize(0, heightMeasureSpec));\n const measuredWidth = this.getMeasuredWidth();\n const maxGutterSize = measuredWidth / 10;\n this.mGutterSize = Math.min(maxGutterSize, this.mDefaultGutterSize);\n let childWidthSize = measuredWidth - this.getPaddingLeft() - this.getPaddingRight();\n let childHeightSize = this.getMeasuredHeight() - this.getPaddingTop() - this.getPaddingBottom();\n let size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n if (lp != null && lp.isDecor) {\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n let widthMode = MeasureSpec.AT_MOST;\n let heightMode = MeasureSpec.AT_MOST;\n let consumeVertical = vgrav == Gravity.TOP || vgrav == Gravity.BOTTOM;\n let consumeHorizontal = hgrav == Gravity.LEFT || hgrav == Gravity.RIGHT;\n if (consumeVertical) {\n widthMode = MeasureSpec.EXACTLY;\n }\n else if (consumeHorizontal) {\n heightMode = MeasureSpec.EXACTLY;\n }\n let widthSize = childWidthSize;\n let heightSize = childHeightSize;\n if (lp.width != ViewPager.LayoutParams.WRAP_CONTENT) {\n widthMode = MeasureSpec.EXACTLY;\n if (lp.width != ViewPager.LayoutParams.FILL_PARENT) {\n widthSize = lp.width;\n }\n }\n if (lp.height != ViewPager.LayoutParams.WRAP_CONTENT) {\n heightMode = MeasureSpec.EXACTLY;\n if (lp.height != ViewPager.LayoutParams.FILL_PARENT) {\n heightSize = lp.height;\n }\n }\n const widthSpec = MeasureSpec.makeMeasureSpec(widthSize, widthMode);\n const heightSpec = MeasureSpec.makeMeasureSpec(heightSize, heightMode);\n child.measure(widthSpec, heightSpec);\n if (consumeVertical) {\n childHeightSize -= child.getMeasuredHeight();\n }\n else if (consumeHorizontal) {\n childWidthSize -= child.getMeasuredWidth();\n }\n }\n }\n }\n this.mChildWidthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);\n this.mChildHeightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeightSize, MeasureSpec.EXACTLY);\n this.mInLayout = true;\n this.populate();\n this.mInLayout = false;\n size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n if (DEBUG)\n Log.v(TAG, \"Measuring #\" + i + \" \" + child\n + \": \" + this.mChildWidthMeasureSpec);\n const lp = child.getLayoutParams();\n if (lp == null || !lp.isDecor) {\n const widthSpec = MeasureSpec.makeMeasureSpec((childWidthSize * lp.widthFactor), MeasureSpec.EXACTLY);\n child.measure(widthSpec, this.mChildHeightMeasureSpec);\n }\n }\n }\n }\n onSizeChanged(w, h, oldw, oldh) {\n super.onSizeChanged(w, h, oldw, oldh);\n if (w != oldw) {\n this.recomputeScrollPosition(w, oldw, this.mPageMargin, this.mPageMargin);\n }\n }\n recomputeScrollPosition(width, oldWidth, margin, oldMargin) {\n if (oldWidth > 0 && !this.mItems.isEmpty()) {\n const widthWithMargin = width - this.getPaddingLeft() - this.getPaddingRight() + margin;\n const oldWidthWithMargin = oldWidth - this.getPaddingLeft() - this.getPaddingRight()\n + oldMargin;\n const xpos = this.getScrollX();\n const pageOffset = xpos / oldWidthWithMargin;\n const newOffsetPixels = Math.floor(pageOffset * widthWithMargin);\n this.scrollTo(newOffsetPixels, this.getScrollY());\n if (!this.mScroller.isFinished()) {\n const newDuration = this.mScroller.getDuration() - this.mScroller.timePassed();\n let targetInfo = this.infoForPosition(this.mCurItem);\n this.mScroller.startScroll(newOffsetPixels, 0, Math.floor(targetInfo.offset * width), 0, newDuration);\n }\n }\n else {\n const ii = this.infoForPosition(this.mCurItem);\n const scrollOffset = ii != null ? Math.min(ii.offset, this.mLastOffset) : 0;\n const scrollPos = Math.floor(scrollOffset *\n (width - this.getPaddingLeft() - this.getPaddingRight()));\n if (scrollPos != this.getScrollX()) {\n this.completeScroll(false);\n this.scrollTo(scrollPos, this.getScrollY());\n }\n }\n }\n onLayout(changed, l, t, r, b) {\n const count = this.getChildCount();\n let width = r - l;\n let height = b - t;\n let paddingLeft = this.getPaddingLeft();\n let paddingTop = this.getPaddingTop();\n let paddingRight = this.getPaddingRight();\n let paddingBottom = this.getPaddingBottom();\n const scrollX = this.getScrollX();\n let decorCount = 0;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n let childLeft = 0;\n let childTop = 0;\n if (lp.isDecor) {\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (hgrav) {\n default:\n childLeft = paddingLeft;\n break;\n case Gravity.LEFT:\n childLeft = paddingLeft;\n paddingLeft += child.getMeasuredWidth();\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = Math.max((width - child.getMeasuredWidth()) / 2, paddingLeft);\n break;\n case Gravity.RIGHT:\n childLeft = width - paddingRight - child.getMeasuredWidth();\n paddingRight += child.getMeasuredWidth();\n break;\n }\n switch (vgrav) {\n default:\n childTop = paddingTop;\n break;\n case Gravity.TOP:\n childTop = paddingTop;\n paddingTop += child.getMeasuredHeight();\n break;\n case Gravity.CENTER_VERTICAL:\n childTop = Math.max((height - child.getMeasuredHeight()) / 2, paddingTop);\n break;\n case Gravity.BOTTOM:\n childTop = height - paddingBottom - child.getMeasuredHeight();\n paddingBottom += child.getMeasuredHeight();\n break;\n }\n childLeft += scrollX;\n child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(), childTop + child.getMeasuredHeight());\n decorCount++;\n }\n }\n }\n const childWidth = width - paddingLeft - paddingRight;\n for (let i = 0; i < count; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n const lp = child.getLayoutParams();\n let ii;\n if (!lp.isDecor && (ii = this.infoForChild(child)) != null) {\n let loff = Math.floor(childWidth * ii.offset);\n let childLeft = paddingLeft + loff;\n let childTop = paddingTop;\n if (lp.needsMeasure) {\n lp.needsMeasure = false;\n const widthSpec = MeasureSpec.makeMeasureSpec(Math.floor(childWidth * lp.widthFactor), MeasureSpec.EXACTLY);\n const heightSpec = MeasureSpec.makeMeasureSpec(Math.floor(height - paddingTop - paddingBottom), MeasureSpec.EXACTLY);\n child.measure(widthSpec, heightSpec);\n }\n if (DEBUG)\n Log.v(TAG, \"Positioning #\" + i + \" \" + child + \" f=\" + ii.object\n + \":\" + childLeft + \",\" + childTop + \" \" + child.getMeasuredWidth()\n + \"x\" + child.getMeasuredHeight());\n child.layout(childLeft, childTop, childLeft + child.getMeasuredWidth(), childTop + child.getMeasuredHeight());\n }\n }\n }\n this.mTopPageBounds = paddingTop;\n this.mBottomPageBounds = height - paddingBottom;\n this.mDecorChildCount = decorCount;\n if (this.mFirstLayout) {\n this.scrollToItem(this.mCurItem, false, 0, false);\n }\n this.mFirstLayout = false;\n }\n computeScroll() {\n if (!this.mScroller.isFinished() && this.mScroller.computeScrollOffset()) {\n let oldX = this.getScrollX();\n let oldY = this.getScrollY();\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n this.scrollTo(x, y);\n if (!this.pageScrolled(x)) {\n this.mScroller.abortAnimation();\n this.scrollTo(0, y);\n }\n }\n this.postInvalidateOnAnimation();\n return;\n }\n this.completeScroll(true);\n }\n pageScrolled(xpos) {\n if (this.mItems.size() == 0) {\n this.mCalledSuper = false;\n this.onPageScrolled(0, 0, 0);\n if (!this.mCalledSuper) {\n throw new Error(\"onPageScrolled did not call superclass implementation\");\n }\n return false;\n }\n const ii = this.infoForCurrentScrollPosition();\n const width = this.getClientWidth();\n const widthWithMargin = width + this.mPageMargin;\n const marginOffset = this.mPageMargin / width;\n const currentPage = ii.position;\n const pageOffset = ((xpos / width) - ii.offset) / (ii.widthFactor + marginOffset);\n const offsetPixels = Math.floor(pageOffset * widthWithMargin);\n this.mCalledSuper = false;\n this.onPageScrolled(currentPage, pageOffset, offsetPixels);\n if (!this.mCalledSuper) {\n throw new Error(\"onPageScrolled did not call superclass implementation\");\n }\n return true;\n }\n onPageScrolled(position, offset, offsetPixels) {\n if (this.mDecorChildCount > 0) {\n const scrollX = this.getScrollX();\n let paddingLeft = this.getPaddingLeft();\n let paddingRight = this.getPaddingRight();\n const width = this.getWidth();\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!lp.isDecor)\n continue;\n const hgrav = lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK;\n let childLeft = 0;\n switch (hgrav) {\n default:\n childLeft = paddingLeft;\n break;\n case Gravity.LEFT:\n childLeft = paddingLeft;\n paddingLeft += child.getWidth();\n break;\n case Gravity.CENTER_HORIZONTAL:\n childLeft = Math.max((width - child.getMeasuredWidth()) / 2, paddingLeft);\n break;\n case Gravity.RIGHT:\n childLeft = width - paddingRight - child.getMeasuredWidth();\n paddingRight += child.getMeasuredWidth();\n break;\n }\n childLeft += scrollX;\n const childOffset = childLeft - child.getLeft();\n if (childOffset != 0) {\n child.offsetLeftAndRight(childOffset);\n }\n }\n }\n this.dispatchOnPageScrolled(position, offset, offsetPixels);\n if (this.mPageTransformer != null) {\n const scrollX = this.getScrollX();\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (lp.isDecor)\n continue;\n const transformPos = (child.getLeft() - scrollX) / this.getClientWidth();\n this.mPageTransformer.transformPage(child, transformPos);\n }\n }\n this.mCalledSuper = true;\n }\n dispatchOnPageScrolled(position, offset, offsetPixels) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageScrolled(position, offset, offsetPixels);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageScrolled(position, offset, offsetPixels);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageScrolled(position, offset, offsetPixels);\n }\n }\n dispatchOnPageSelected(position) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageSelected(position);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageSelected(position);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageSelected(position);\n }\n }\n dispatchOnScrollStateChanged(state) {\n if (this.mOnPageChangeListener != null) {\n this.mOnPageChangeListener.onPageScrollStateChanged(state);\n }\n if (this.mOnPageChangeListeners != null) {\n for (let i = 0, z = this.mOnPageChangeListeners.size(); i < z; i++) {\n let listener = this.mOnPageChangeListeners.get(i);\n if (listener != null) {\n listener.onPageScrollStateChanged(state);\n }\n }\n }\n if (this.mInternalPageChangeListener != null) {\n this.mInternalPageChangeListener.onPageScrollStateChanged(state);\n }\n }\n completeScroll(postEvents) {\n let needPopulate = this.mScrollState == ViewPager.SCROLL_STATE_SETTLING;\n if (needPopulate) {\n this.setScrollingCacheEnabled(false);\n this.mScroller.abortAnimation();\n let oldX = this.getScrollX();\n let oldY = this.getScrollY();\n let x = this.mScroller.getCurrX();\n let y = this.mScroller.getCurrY();\n if (oldX != x || oldY != y) {\n this.scrollTo(x, y);\n if (x != oldX) {\n this.pageScrolled(x);\n }\n }\n }\n this.mPopulatePending = false;\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n if (ii.scrolling) {\n needPopulate = true;\n ii.scrolling = false;\n }\n }\n if (needPopulate) {\n if (postEvents) {\n this.postOnAnimation(this.mEndScrollRunnable);\n }\n else {\n this.mEndScrollRunnable.run();\n }\n }\n }\n isGutterDrag(x, dx) {\n return (x < this.mGutterSize && dx > 0) || (x > this.getWidth() - this.mGutterSize && dx < 0);\n }\n enableLayers(enable) {\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getAction() & MotionEvent.ACTION_MASK;\n if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {\n if (DEBUG)\n Log.v(TAG, \"Intercept done!\");\n this.resetTouch();\n return false;\n }\n if (action != MotionEvent.ACTION_DOWN) {\n if (this.mIsBeingDragged) {\n if (DEBUG)\n Log.v(TAG, \"Intercept returning true!\");\n return true;\n }\n if (this.mIsUnableToDrag) {\n if (DEBUG)\n Log.v(TAG, \"Intercept returning false!\");\n return false;\n }\n }\n switch (action) {\n case MotionEvent.ACTION_MOVE: {\n const activePointerId = this.mActivePointerId;\n if (activePointerId == ViewPager.INVALID_POINTER) {\n break;\n }\n const pointerIndex = ev.findPointerIndex(activePointerId);\n const x = ev.getX(pointerIndex);\n const dx = x - this.mLastMotionX;\n const xDiff = Math.abs(dx);\n const y = ev.getY(pointerIndex);\n const yDiff = Math.abs(y - this.mInitialMotionY);\n if (DEBUG)\n Log.v(TAG, \"Moved x to \" + x + \",\" + y + \" diff=\" + xDiff + \",\" + yDiff);\n if (dx != 0 && !this.isGutterDrag(this.mLastMotionX, dx) &&\n this.canScroll(this, false, Math.floor(dx), Math.floor(x), Math.floor(y))) {\n this.mLastMotionX = x;\n this.mLastMotionY = y;\n this.mIsUnableToDrag = true;\n return false;\n }\n if (xDiff > this.mTouchSlop && xDiff * 0.5 > yDiff) {\n if (DEBUG)\n Log.v(TAG, \"Starting drag!\");\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.mLastMotionX = dx > 0 ? this.mInitialMotionX + this.mTouchSlop :\n this.mInitialMotionX - this.mTouchSlop;\n this.mLastMotionY = y;\n this.setScrollingCacheEnabled(true);\n }\n else if (yDiff > this.mTouchSlop) {\n if (DEBUG)\n Log.v(TAG, \"Starting unable to drag!\");\n this.mIsUnableToDrag = true;\n }\n if (this.mIsBeingDragged) {\n if (this.performDrag(x)) {\n this.postInvalidateOnAnimation();\n }\n }\n break;\n }\n case MotionEvent.ACTION_DOWN: {\n this.mLastMotionX = this.mInitialMotionX = ev.getX();\n this.mLastMotionY = this.mInitialMotionY = ev.getY();\n this.mActivePointerId = ev.getPointerId(0);\n this.mIsUnableToDrag = false;\n this.mScroller.computeScrollOffset();\n if (this.mScrollState == ViewPager.SCROLL_STATE_SETTLING &&\n Math.abs(this.mScroller.getFinalX() - this.mScroller.getCurrX()) > this.mCloseEnough) {\n this.mScroller.abortAnimation();\n this.mPopulatePending = false;\n this.populate();\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n }\n else {\n this.completeScroll(false);\n this.mIsBeingDragged = false;\n }\n if (DEBUG)\n Log.v(TAG, \"Down at \" + this.mLastMotionX + \",\" + this.mLastMotionY\n + \" mIsBeingDragged=\" + this.mIsBeingDragged\n + \"mIsUnableToDrag=\" + this.mIsUnableToDrag);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n break;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n return this.mIsBeingDragged;\n }\n onTouchEvent(ev) {\n if (this.mFakeDragging) {\n return true;\n }\n if (ev.getAction() == MotionEvent.ACTION_DOWN && ev.getEdgeFlags() != 0) {\n return false;\n }\n if (this.mAdapter == null || this.mAdapter.getCount() == 0) {\n return false;\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n const action = ev.getAction();\n let needsInvalidate = false;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN: {\n this.mScroller.abortAnimation();\n this.mPopulatePending = false;\n this.populate();\n this.mLastMotionX = this.mInitialMotionX = ev.getX();\n this.mLastMotionY = this.mInitialMotionY = ev.getY();\n this.mActivePointerId = ev.getPointerId(0);\n break;\n }\n case MotionEvent.ACTION_MOVE:\n if (!this.mIsBeingDragged) {\n const pointerIndex = ev.findPointerIndex(this.mActivePointerId);\n if (pointerIndex == -1) {\n needsInvalidate = this.resetTouch();\n break;\n }\n const x = ev.getX(pointerIndex);\n const xDiff = Math.abs(x - this.mLastMotionX);\n const y = ev.getY(pointerIndex);\n const yDiff = Math.abs(y - this.mLastMotionY);\n if (DEBUG)\n Log.v(TAG, \"Moved x to \" + x + \",\" + y + \" diff=\" + xDiff + \",\" + yDiff);\n if (xDiff > this.mTouchSlop && xDiff > yDiff) {\n if (DEBUG)\n Log.v(TAG, \"Starting drag!\");\n this.mIsBeingDragged = true;\n this.requestParentDisallowInterceptTouchEvent(true);\n this.mLastMotionX = x - this.mInitialMotionX > 0 ? this.mInitialMotionX + this.mTouchSlop :\n this.mInitialMotionX - this.mTouchSlop;\n this.mLastMotionY = y;\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.setScrollingCacheEnabled(true);\n let parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n }\n if (this.mIsBeingDragged) {\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(activePointerIndex);\n needsInvalidate = needsInvalidate || this.performDrag(x);\n }\n break;\n case MotionEvent.ACTION_UP:\n if (this.mIsBeingDragged) {\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = velocityTracker.getXVelocity(this.mActivePointerId);\n this.mPopulatePending = true;\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n const ii = this.infoForCurrentScrollPosition();\n const currentPage = ii.position;\n const pageOffset = ((scrollX / width) - ii.offset) / ii.widthFactor;\n const activePointerIndex = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(activePointerIndex);\n const totalDelta = (x - this.mInitialMotionX);\n let nextPage = this.determineTargetPage(currentPage, pageOffset, initialVelocity, totalDelta);\n this.setCurrentItemInternal(nextPage, true, true, initialVelocity);\n needsInvalidate = this.resetTouch();\n }\n break;\n case MotionEvent.ACTION_CANCEL:\n if (this.mIsBeingDragged) {\n this.scrollToItem(this.mCurItem, true, 0, false);\n needsInvalidate = this.resetTouch();\n }\n break;\n case MotionEvent.ACTION_POINTER_DOWN: {\n const index = ev.getActionIndex();\n const x = ev.getX(index);\n this.mLastMotionX = x;\n this.mActivePointerId = ev.getPointerId(index);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n this.onSecondaryPointerUp(ev);\n this.mLastMotionX = ev.getX(ev.findPointerIndex(this.mActivePointerId));\n break;\n }\n if (needsInvalidate) {\n this.postInvalidateOnAnimation();\n }\n return true;\n }\n resetTouch() {\n let needsInvalidate = false;\n this.mActivePointerId = ViewPager.INVALID_POINTER;\n this.endDrag();\n return needsInvalidate;\n }\n requestParentDisallowInterceptTouchEvent(disallowIntercept) {\n const parent = this.getParent();\n if (parent != null) {\n parent.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n }\n performDrag(x) {\n let needsInvalidate = false;\n const deltaX = this.mLastMotionX - x;\n this.mLastMotionX = x;\n let oldScrollX = this.getScrollX();\n let scrollX = oldScrollX + deltaX;\n const width = this.getClientWidth();\n let leftBound = width * this.mFirstOffset;\n let rightBound = width * this.mLastOffset;\n let leftAbsolute = true;\n let rightAbsolute = true;\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n if (firstItem.position != 0) {\n leftAbsolute = false;\n leftBound = firstItem.offset * width;\n }\n if (lastItem.position != this.mAdapter.getCount() - 1) {\n rightAbsolute = false;\n rightBound = lastItem.offset * width;\n }\n if (scrollX < leftBound) {\n if (leftAbsolute) {\n let over = leftBound - scrollX;\n needsInvalidate = false;\n }\n scrollX -= deltaX / 2;\n }\n else if (scrollX > rightBound) {\n if (rightAbsolute) {\n let over = scrollX - rightBound;\n needsInvalidate = false;\n }\n scrollX -= deltaX / 2;\n }\n this.mLastMotionX += scrollX - Math.floor(scrollX);\n this.scrollTo(scrollX, this.getScrollY());\n this.pageScrolled(scrollX);\n return needsInvalidate;\n }\n infoForCurrentScrollPosition() {\n const width = this.getClientWidth();\n const scrollOffset = width > 0 ? this.getScrollX() / width : 0;\n const marginOffset = width > 0 ? this.mPageMargin / width : 0;\n let lastPos = -1;\n let lastOffset = 0;\n let lastWidth = 0;\n let first = true;\n let lastItem = null;\n for (let i = 0; i < this.mItems.size(); i++) {\n let ii = this.mItems.get(i);\n let offset;\n if (!first && ii.position != lastPos + 1) {\n ii = this.mTempItem;\n ii.offset = lastOffset + lastWidth + marginOffset;\n ii.position = lastPos + 1;\n ii.widthFactor = this.mAdapter.getPageWidth(ii.position);\n i--;\n }\n offset = ii.offset;\n const leftBound = offset;\n const rightBound = offset + ii.widthFactor + marginOffset;\n if (first || scrollOffset >= leftBound) {\n if (scrollOffset < rightBound || i == this.mItems.size() - 1) {\n return ii;\n }\n }\n else {\n return lastItem;\n }\n first = false;\n lastPos = ii.position;\n lastOffset = offset;\n lastWidth = ii.widthFactor;\n lastItem = ii;\n }\n return lastItem;\n }\n determineTargetPage(currentPage, pageOffset, velocity, deltaX) {\n let targetPage;\n if (Math.abs(deltaX) > this.mFlingDistance && Math.abs(velocity) > this.mMinimumVelocity) {\n targetPage = velocity > 0 ? currentPage : currentPage + 1;\n }\n else {\n const truncator = currentPage >= this.mCurItem ? 0.4 : 0.6;\n targetPage = Math.floor(currentPage + pageOffset + truncator);\n }\n if (this.mItems.size() > 0) {\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n targetPage = Math.max(firstItem.position, Math.min(targetPage, lastItem.position));\n }\n return targetPage;\n }\n draw(canvas) {\n super.draw(canvas);\n let needsInvalidate = false;\n if (needsInvalidate) {\n this.postInvalidateOnAnimation();\n }\n }\n onDraw(canvas) {\n super.onDraw(canvas);\n if (this.mPageMargin > 0 && this.mMarginDrawable != null && this.mItems.size() > 0 && this.mAdapter != null) {\n const scrollX = this.getScrollX();\n const width = this.getWidth();\n const marginOffset = this.mPageMargin / width;\n let itemIndex = 0;\n let ii = this.mItems.get(0);\n let offset = ii.offset;\n const itemCount = this.mItems.size();\n const firstPos = ii.position;\n const lastPos = this.mItems.get(itemCount - 1).position;\n for (let pos = firstPos; pos < lastPos; pos++) {\n while (pos > ii.position && itemIndex < itemCount) {\n ii = this.mItems.get(++itemIndex);\n }\n let drawAt;\n if (pos == ii.position) {\n drawAt = (ii.offset + ii.widthFactor) * width;\n offset = ii.offset + ii.widthFactor + marginOffset;\n }\n else {\n let widthFactor = this.mAdapter.getPageWidth(pos);\n drawAt = (offset + widthFactor) * width;\n offset += widthFactor + marginOffset;\n }\n if (drawAt + this.mPageMargin > scrollX) {\n this.mMarginDrawable.setBounds(drawAt, this.mTopPageBounds, drawAt + this.mPageMargin, this.mBottomPageBounds);\n this.mMarginDrawable.draw(canvas);\n }\n if (drawAt > scrollX + width) {\n break;\n }\n }\n }\n }\n beginFakeDrag() {\n if (this.mIsBeingDragged) {\n return false;\n }\n this.mFakeDragging = true;\n this.setScrollState(ViewPager.SCROLL_STATE_DRAGGING);\n this.mInitialMotionX = this.mLastMotionX = 0;\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n else {\n this.mVelocityTracker.clear();\n }\n const time = android.os.SystemClock.uptimeMillis();\n const ev = MotionEvent.obtainWithAction(time, time, MotionEvent.ACTION_DOWN, 0, 0, 0);\n this.mVelocityTracker.addMovement(ev);\n ev.recycle();\n this.mFakeDragBeginTime = time;\n return true;\n }\n endFakeDrag() {\n if (!this.mFakeDragging) {\n throw new Error(\"No fake drag in progress. Call beginFakeDrag first.\");\n }\n const velocityTracker = this.mVelocityTracker;\n velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity);\n let initialVelocity = Math.floor(velocityTracker.getXVelocity(this.mActivePointerId));\n this.mPopulatePending = true;\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n const ii = this.infoForCurrentScrollPosition();\n const currentPage = ii.position;\n const pageOffset = ((scrollX / width) - ii.offset) / ii.widthFactor;\n const totalDelta = Math.floor(this.mLastMotionX - this.mInitialMotionX);\n let nextPage = this.determineTargetPage(currentPage, pageOffset, initialVelocity, totalDelta);\n this.setCurrentItemInternal(nextPage, true, true, initialVelocity);\n this.endDrag();\n this.mFakeDragging = false;\n }\n fakeDragBy(xOffset) {\n if (!this.mFakeDragging) {\n throw new Error(\"No fake drag in progress. Call beginFakeDrag first.\");\n }\n this.mLastMotionX += xOffset;\n let oldScrollX = this.getScrollX();\n let scrollX = oldScrollX - xOffset;\n const width = this.getClientWidth();\n let leftBound = width * this.mFirstOffset;\n let rightBound = width * this.mLastOffset;\n const firstItem = this.mItems.get(0);\n const lastItem = this.mItems.get(this.mItems.size() - 1);\n if (firstItem.position != 0) {\n leftBound = firstItem.offset * width;\n }\n if (lastItem.position != this.mAdapter.getCount() - 1) {\n rightBound = lastItem.offset * width;\n }\n if (scrollX < leftBound) {\n scrollX = leftBound;\n }\n else if (scrollX > rightBound) {\n scrollX = rightBound;\n }\n this.mLastMotionX += scrollX - Math.floor(scrollX);\n this.scrollTo(Math.floor(scrollX), this.getScrollY());\n this.pageScrolled(Math.floor(scrollX));\n const time = android.os.SystemClock.uptimeMillis();\n const ev = MotionEvent.obtainWithAction(this.mFakeDragBeginTime, time, MotionEvent.ACTION_MOVE, this.mLastMotionX, 0, 0);\n this.mVelocityTracker.addMovement(ev);\n ev.recycle();\n }\n isFakeDragging() {\n return this.mFakeDragging;\n }\n onSecondaryPointerUp(ev) {\n const pointerIndex = ev.getActionIndex();\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mLastMotionX = ev.getX(newPointerIndex);\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.clear();\n }\n }\n }\n endDrag() {\n this.mIsBeingDragged = false;\n this.mIsUnableToDrag = false;\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n setScrollingCacheEnabled(enabled) {\n if (this.mScrollingCacheEnabled != enabled) {\n this.mScrollingCacheEnabled = enabled;\n if (ViewPager.USE_CACHE) {\n const size = this.getChildCount();\n for (let i = 0; i < size; ++i) {\n const child = this.getChildAt(i);\n if (child.getVisibility() != View.GONE) {\n child.setDrawingCacheEnabled(enabled);\n }\n }\n }\n }\n }\n canScrollHorizontally(direction) {\n if (this.mAdapter == null) {\n return false;\n }\n const width = this.getClientWidth();\n const scrollX = this.getScrollX();\n if (direction < 0) {\n return (scrollX > (width * this.mFirstOffset));\n }\n else if (direction > 0) {\n return (scrollX < (width * this.mLastOffset));\n }\n else {\n return false;\n }\n }\n canScroll(v, checkV, dx, x, y) {\n if (v instanceof ViewGroup) {\n const group = v;\n const scrollX = v.getScrollX();\n const scrollY = v.getScrollY();\n const count = group.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = group.getChildAt(i);\n if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&\n y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&\n this.canScroll(child, true, dx, x + scrollX - child.getLeft(), y + scrollY - child.getTop())) {\n return true;\n }\n }\n }\n return checkV && v.canScrollHorizontally(-dx);\n }\n dispatchKeyEvent(event) {\n return super.dispatchKeyEvent(event) || this.executeKeyEvent(event);\n }\n executeKeyEvent(event) {\n let handled = false;\n if (event.getAction() == KeyEvent.ACTION_DOWN) {\n switch (event.getKeyCode()) {\n case KeyEvent.KEYCODE_DPAD_LEFT:\n handled = this.arrowScroll(View.FOCUS_LEFT);\n break;\n case KeyEvent.KEYCODE_DPAD_RIGHT:\n handled = this.arrowScroll(View.FOCUS_RIGHT);\n break;\n case KeyEvent.KEYCODE_TAB:\n if (event.isShiftPressed()) {\n handled = this.arrowScroll(View.FOCUS_BACKWARD);\n }\n else {\n handled = this.arrowScroll(View.FOCUS_FORWARD);\n }\n break;\n }\n }\n return handled;\n }\n arrowScroll(direction) {\n let currentFocused = this.findFocus();\n if (currentFocused == this) {\n currentFocused = null;\n }\n else if (currentFocused != null) {\n let isChild = false;\n for (let parent = currentFocused.getParent(); parent instanceof ViewGroup; parent = parent.getParent()) {\n if (parent == this) {\n isChild = true;\n break;\n }\n }\n if (!isChild) {\n const sb = new java.lang.StringBuilder();\n sb.append(currentFocused.toString());\n for (let parent = currentFocused.getParent(); parent instanceof ViewGroup; parent = parent.getParent()) {\n sb.append(\" => \").append(parent.toString());\n }\n Log.e(TAG, \"arrowScroll tried to find focus based on non-child \" +\n \"current focused view \" + sb.toString());\n currentFocused = null;\n }\n }\n let handled = false;\n let nextFocused = android.view.FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);\n if (nextFocused != null && nextFocused != currentFocused) {\n if (direction == View.FOCUS_LEFT) {\n const nextLeft = this.getChildRectInPagerCoordinates(this.mTempRect, nextFocused).left;\n const currLeft = this.getChildRectInPagerCoordinates(this.mTempRect, currentFocused).left;\n if (currentFocused != null && nextLeft >= currLeft) {\n handled = this.pageLeft();\n }\n else {\n handled = nextFocused.requestFocus();\n }\n }\n else if (direction == View.FOCUS_RIGHT) {\n const nextLeft = this.getChildRectInPagerCoordinates(this.mTempRect, nextFocused).left;\n const currLeft = this.getChildRectInPagerCoordinates(this.mTempRect, currentFocused).left;\n if (currentFocused != null && nextLeft <= currLeft) {\n handled = this.pageRight();\n }\n else {\n handled = nextFocused.requestFocus();\n }\n }\n }\n else if (direction == View.FOCUS_LEFT || direction == View.FOCUS_BACKWARD) {\n handled = this.pageLeft();\n }\n else if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_FORWARD) {\n handled = this.pageRight();\n }\n return handled;\n }\n getChildRectInPagerCoordinates(outRect, child) {\n if (outRect == null) {\n outRect = new Rect();\n }\n if (child == null) {\n outRect.set(0, 0, 0, 0);\n return outRect;\n }\n outRect.left = child.getLeft();\n outRect.right = child.getRight();\n outRect.top = child.getTop();\n outRect.bottom = child.getBottom();\n let parent = child.getParent();\n while (parent instanceof ViewGroup && parent != this) {\n const group = parent;\n outRect.left += group.getLeft();\n outRect.right += group.getRight();\n outRect.top += group.getTop();\n outRect.bottom += group.getBottom();\n parent = group.getParent();\n }\n return outRect;\n }\n pageLeft() {\n if (this.mCurItem > 0) {\n this.setCurrentItem(this.mCurItem - 1, true);\n return true;\n }\n return false;\n }\n pageRight() {\n if (this.mAdapter != null && this.mCurItem < (this.mAdapter.getCount() - 1)) {\n this.setCurrentItem(this.mCurItem + 1, true);\n return true;\n }\n return false;\n }\n addFocusables(views, direction, focusableMode) {\n const focusableCount = views.size();\n const descendantFocusability = this.getDescendantFocusability();\n if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n child.addFocusables(views, direction, focusableMode);\n }\n }\n }\n }\n if (descendantFocusability != ViewGroup.FOCUS_AFTER_DESCENDANTS ||\n (focusableCount == views.size())) {\n if (!this.isFocusable()) {\n return;\n }\n if ((focusableMode & ViewGroup.FOCUSABLES_TOUCH_MODE) == ViewGroup.FOCUSABLES_TOUCH_MODE &&\n this.isInTouchMode() && !this.isFocusableInTouchMode()) {\n return;\n }\n if (views != null) {\n views.add(this);\n }\n }\n }\n addTouchables(views) {\n for (let i = 0; i < this.getChildCount(); i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n child.addTouchables(views);\n }\n }\n }\n }\n onRequestFocusInDescendants(direction, previouslyFocusedRect) {\n let index;\n let increment;\n let end;\n let count = this.getChildCount();\n if ((direction & View.FOCUS_FORWARD) != 0) {\n index = 0;\n increment = 1;\n end = count;\n }\n else {\n index = count - 1;\n increment = -1;\n end = -1;\n }\n for (let i = index; i != end; i += increment) {\n let child = this.getChildAt(i);\n if (child.getVisibility() == View.VISIBLE) {\n let ii = this.infoForChild(child);\n if (ii != null && ii.position == this.mCurItem) {\n if (child.requestFocus(direction, previouslyFocusedRect)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n generateDefaultLayoutParams() {\n return new ViewPager.LayoutParams();\n }\n generateLayoutParams(p) {\n return this.generateDefaultLayoutParams();\n }\n checkLayoutParams(p) {\n return p instanceof ViewPager.LayoutParams && super.checkLayoutParams(p);\n }\n generateLayoutParamsFromAttr(attrs) {\n return new ViewPager.LayoutParams(this.getContext(), attrs);\n }\n static isImplDecor(view) {\n return view[SymbolDecor] || view.constructor[SymbolDecor];\n }\n static setClassImplDecor(clazz) {\n clazz[SymbolDecor] = true;\n }\n }\n ViewPager.COMPARATOR = (lhs, rhs) => {\n return lhs.position - rhs.position;\n };\n ViewPager.USE_CACHE = false;\n ViewPager.DEFAULT_OFFSCREEN_PAGES = 1;\n ViewPager.MAX_SETTLE_DURATION = 600;\n ViewPager.MIN_DISTANCE_FOR_FLING = 25;\n ViewPager.DEFAULT_GUTTER_SIZE = 16;\n ViewPager.MIN_FLING_VELOCITY = 400;\n ViewPager.sInterpolator = {\n getInterpolation(t) {\n t -= 1.0;\n return t * t * t * t * t + 1.0;\n }\n };\n ViewPager.INVALID_POINTER = -1;\n ViewPager.CLOSE_ENOUGH = 2;\n ViewPager.DRAW_ORDER_DEFAULT = 0;\n ViewPager.DRAW_ORDER_FORWARD = 1;\n ViewPager.DRAW_ORDER_REVERSE = 2;\n ViewPager.sPositionComparator = (lhs, rhs) => {\n let llp = lhs.getLayoutParams();\n let rlp = rhs.getLayoutParams();\n if (llp.isDecor != rlp.isDecor) {\n return llp.isDecor ? 1 : -1;\n }\n return llp.position - rlp.position;\n };\n ViewPager.SCROLL_STATE_IDLE = 0;\n ViewPager.SCROLL_STATE_DRAGGING = 1;\n ViewPager.SCROLL_STATE_SETTLING = 2;\n view_9.ViewPager = ViewPager;\n (function (ViewPager) {\n class SimpleOnPageChangeListener {\n onPageScrolled(position, positionOffset, positionOffsetPixels) {\n }\n onPageSelected(position) {\n }\n onPageScrollStateChanged(state) {\n }\n }\n ViewPager.SimpleOnPageChangeListener = SimpleOnPageChangeListener;\n class LayoutParams extends ViewGroup.LayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (args.length === 0)\n return [ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT];\n })());\n this.isDecor = false;\n this.gravity = 0;\n this.widthFactor = 0;\n this.needsMeasure = false;\n this.position = 0;\n this.childIndex = 0;\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) {\n const c = args[0];\n const attrs = args[1];\n const a = c.obtainStyledAttributes(attrs);\n this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), Gravity.TOP);\n a.recycle();\n }\n else if (args.length === 0) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_gravity', {\n setter(param, value, attrBinder) {\n param.gravity = attrBinder.parseGravity(value, param.gravity);\n }, getter(param) {\n return param.gravity;\n }\n });\n }\n }\n ViewPager.LayoutParams = LayoutParams;\n })(ViewPager = view_9.ViewPager || (view_9.ViewPager = {}));\n class ItemInfo {\n constructor() {\n this.position = 0;\n this.scrolling = false;\n this.widthFactor = 0;\n this.offset = 0;\n }\n }\n class PagerObserver extends DataSetObserver {\n constructor(viewPager) {\n super();\n this.ViewPager_this = viewPager;\n }\n onChanged() {\n this.ViewPager_this.dataSetChanged();\n }\n onInvalidated() {\n this.ViewPager_this.dataSetChanged();\n }\n }\n })(view = v4.view || (v4.view = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var widget;\n (function (widget) {\n var MotionEvent = android.view.MotionEvent;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n var ViewGroup = android.view.ViewGroup;\n var OverScroller = android.widget.OverScroller;\n var System = java.lang.System;\n class ViewDragHelper {\n constructor(forParent, cb) {\n this.mDragState = 0;\n this.mTouchSlop = 0;\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n this.mPointersDown = 0;\n this.mMaxVelocity = 0;\n this.mMinVelocity = 0;\n this.mEdgeSize = 0;\n this.mTrackingEdges = 0;\n this.mSetIdleRunnable = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n return new _Inner();\n })();\n if (forParent == null) {\n throw Error(`new IllegalArgumentException(\"Parent view may not be null\")`);\n }\n if (cb == null) {\n throw Error(`new IllegalArgumentException(\"Callback may not be null\")`);\n }\n this.mParentView = forParent;\n this.mCallback = cb;\n const vc = ViewConfiguration.get();\n const density = android.content.res.Resources.getDisplayMetrics().density;\n this.mEdgeSize = Math.floor((ViewDragHelper.EDGE_SIZE * density + 0.5));\n this.mTouchSlop = vc.getScaledTouchSlop();\n this.mMaxVelocity = vc.getScaledMaximumFlingVelocity();\n this.mMinVelocity = vc.getScaledMinimumFlingVelocity();\n this.mScroller = new OverScroller(ViewDragHelper.sInterpolator);\n }\n static create(...args) {\n if (args.length === 2)\n return new ViewDragHelper(args[0], args[1]);\n else if (args.length === 3) {\n let [forParent, sensitivity, cb] = args;\n const helper = ViewDragHelper.create(forParent, cb);\n helper.mTouchSlop = Math.floor((helper.mTouchSlop * (1 / sensitivity)));\n return helper;\n }\n }\n setMinVelocity(minVel) {\n this.mMinVelocity = minVel;\n }\n getMinVelocity() {\n return this.mMinVelocity;\n }\n getViewDragState() {\n return this.mDragState;\n }\n setEdgeTrackingEnabled(edgeFlags) {\n this.mTrackingEdges = edgeFlags;\n }\n getEdgeSize() {\n return this.mEdgeSize;\n }\n captureChildView(childView, activePointerId) {\n if (childView.getParent() != this.mParentView) {\n throw Error(`new IllegalArgumentException(\"captureChildView: parameter must be a descendant \" + \"of the ViewDragHelper's tracked parent view (\" + this.mParentView + \")\")`);\n }\n this.mCapturedView = childView;\n this.mActivePointerId = activePointerId;\n this.mCallback.onViewCaptured(childView, activePointerId);\n this.setDragState(ViewDragHelper.STATE_DRAGGING);\n }\n getCapturedView() {\n return this.mCapturedView;\n }\n getActivePointerId() {\n return this.mActivePointerId;\n }\n getTouchSlop() {\n return this.mTouchSlop;\n }\n cancel() {\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n this.clearMotionHistory();\n if (this.mVelocityTracker != null) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n }\n abort() {\n this.cancel();\n if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n const oldX = this.mScroller.getCurrX();\n const oldY = this.mScroller.getCurrY();\n this.mScroller.abortAnimation();\n const newX = this.mScroller.getCurrX();\n const newY = this.mScroller.getCurrY();\n this.mCallback.onViewPositionChanged(this.mCapturedView, newX, newY, newX - oldX, newY - oldY);\n }\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n smoothSlideViewTo(child, finalLeft, finalTop) {\n this.mCapturedView = child;\n this.mActivePointerId = ViewDragHelper.INVALID_POINTER;\n return this.forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0);\n }\n settleCapturedViewAt(finalLeft, finalTop) {\n if (!this.mReleaseInProgress) {\n throw Error(`new IllegalStateException(\"Cannot settleCapturedViewAt outside of a call to \" + \"Callback#onViewReleased\")`);\n }\n return this.forceSettleCapturedViewAt(finalLeft, finalTop, Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)), Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)));\n }\n forceSettleCapturedViewAt(finalLeft, finalTop, xvel, yvel) {\n const startLeft = this.mCapturedView.getLeft();\n const startTop = this.mCapturedView.getTop();\n const dx = finalLeft - startLeft;\n const dy = finalTop - startTop;\n if (dx == 0 && dy == 0) {\n this.mScroller.abortAnimation();\n this.setDragState(ViewDragHelper.STATE_IDLE);\n return false;\n }\n const duration = this.computeSettleDuration(this.mCapturedView, dx, dy, xvel, yvel);\n this.mScroller.startScroll(startLeft, startTop, dx, dy, duration);\n this.setDragState(ViewDragHelper.STATE_SETTLING);\n return true;\n }\n computeSettleDuration(child, dx, dy, xvel, yvel) {\n xvel = this.clampMag(xvel, Math.floor(this.mMinVelocity), Math.floor(this.mMaxVelocity));\n yvel = this.clampMag(yvel, Math.floor(this.mMinVelocity), Math.floor(this.mMaxVelocity));\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n const absXVel = Math.abs(xvel);\n const absYVel = Math.abs(yvel);\n const addedVel = absXVel + absYVel;\n const addedDistance = absDx + absDy;\n const xweight = xvel != 0 ? absXVel / addedVel : absDx / addedDistance;\n const yweight = yvel != 0 ? absYVel / addedVel : absDy / addedDistance;\n let xduration = this.computeAxisDuration(dx, xvel, this.mCallback.getViewHorizontalDragRange(child));\n let yduration = this.computeAxisDuration(dy, yvel, this.mCallback.getViewVerticalDragRange(child));\n return Math.floor((xduration * xweight + yduration * yweight));\n }\n computeAxisDuration(delta, velocity, motionRange) {\n if (delta == 0) {\n return 0;\n }\n const width = this.mParentView.getWidth();\n const halfWidth = width / 2;\n const distanceRatio = Math.min(1, Math.abs(delta) / width);\n const distance = halfWidth + halfWidth * this.distanceInfluenceForSnapDuration(distanceRatio);\n let duration;\n velocity = Math.abs(velocity);\n if (velocity > 0) {\n duration = 4 * Math.round(1000 * Math.abs(distance / velocity));\n }\n else {\n const range = Math.abs(delta) / motionRange;\n duration = Math.floor(((range + 1) * ViewDragHelper.BASE_SETTLE_DURATION));\n }\n return Math.min(duration, ViewDragHelper.MAX_SETTLE_DURATION);\n }\n clampMag(value, absMin, absMax) {\n const absValue = Math.abs(value);\n if (absValue < absMin)\n return 0;\n if (absValue > absMax)\n return value > 0 ? absMax : -absMax;\n return value;\n }\n distanceInfluenceForSnapDuration(f) {\n f -= 0.5;\n f *= 0.3 * Math.PI / 2.0;\n return Math.sin(f);\n }\n flingCapturedView(minLeft, minTop, maxLeft, maxTop) {\n if (!this.mReleaseInProgress) {\n throw Error(`new IllegalStateException(\"Cannot flingCapturedView outside of a call to \" + \"Callback#onViewReleased\")`);\n }\n this.mScroller.fling(this.mCapturedView.getLeft(), this.mCapturedView.getTop(), Math.floor(this.mVelocityTracker.getXVelocity(this.mActivePointerId)), Math.floor(this.mVelocityTracker.getYVelocity(this.mActivePointerId)), minLeft, maxLeft, minTop, maxTop);\n this.setDragState(ViewDragHelper.STATE_SETTLING);\n }\n continueSettling(deferCallbacks) {\n if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n let keepGoing = this.mScroller.computeScrollOffset();\n const x = this.mScroller.getCurrX();\n const y = this.mScroller.getCurrY();\n const dx = x - this.mCapturedView.getLeft();\n const dy = y - this.mCapturedView.getTop();\n if (dx != 0) {\n this.mCapturedView.offsetLeftAndRight(dx);\n }\n if (dy != 0) {\n this.mCapturedView.offsetTopAndBottom(dy);\n }\n if (dx != 0 || dy != 0) {\n this.mCallback.onViewPositionChanged(this.mCapturedView, x, y, dx, dy);\n }\n if (keepGoing && x == this.mScroller.getFinalX() && y == this.mScroller.getFinalY()) {\n this.mScroller.abortAnimation();\n keepGoing = this.mScroller.isFinished();\n }\n if (!keepGoing) {\n if (deferCallbacks) {\n this.mParentView.post(this.mSetIdleRunnable);\n }\n else {\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n }\n return this.mDragState == ViewDragHelper.STATE_SETTLING;\n }\n dispatchViewReleased(xvel, yvel) {\n this.mReleaseInProgress = true;\n this.mCallback.onViewReleased(this.mCapturedView, xvel, yvel);\n this.mReleaseInProgress = false;\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.setDragState(ViewDragHelper.STATE_IDLE);\n }\n }\n clearMotionHistory(pointerId) {\n if (this.mInitialMotionX == null) {\n return;\n }\n if (pointerId == null) {\n this.mInitialMotionX = [];\n this.mInitialMotionY = [];\n this.mLastMotionX = [];\n this.mLastMotionY = [];\n this.mInitialEdgesTouched = [];\n this.mEdgeDragsInProgress = [];\n this.mEdgeDragsLocked = [];\n this.mPointersDown = 0;\n }\n else {\n this.mInitialMotionX[pointerId] = 0;\n this.mInitialMotionY[pointerId] = 0;\n this.mLastMotionX[pointerId] = 0;\n this.mLastMotionY[pointerId] = 0;\n this.mInitialEdgesTouched[pointerId] = 0;\n this.mEdgeDragsInProgress[pointerId] = 0;\n this.mEdgeDragsLocked[pointerId] = 0;\n this.mPointersDown &= ~(1 << pointerId);\n }\n }\n ensureMotionHistorySizeForId(pointerId) {\n if (this.mInitialMotionX == null || this.mInitialMotionX.length <= pointerId) {\n let imx = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let imy = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let lmx = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let lmy = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let iit = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let edip = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n let edl = androidui.util.ArrayCreator.newNumberArray(pointerId + 1);\n if (this.mInitialMotionX != null) {\n System.arraycopy(this.mInitialMotionX, 0, imx, 0, this.mInitialMotionX.length);\n System.arraycopy(this.mInitialMotionY, 0, imy, 0, this.mInitialMotionY.length);\n System.arraycopy(this.mLastMotionX, 0, lmx, 0, this.mLastMotionX.length);\n System.arraycopy(this.mLastMotionY, 0, lmy, 0, this.mLastMotionY.length);\n System.arraycopy(this.mInitialEdgesTouched, 0, iit, 0, this.mInitialEdgesTouched.length);\n System.arraycopy(this.mEdgeDragsInProgress, 0, edip, 0, this.mEdgeDragsInProgress.length);\n System.arraycopy(this.mEdgeDragsLocked, 0, edl, 0, this.mEdgeDragsLocked.length);\n }\n this.mInitialMotionX = imx;\n this.mInitialMotionY = imy;\n this.mLastMotionX = lmx;\n this.mLastMotionY = lmy;\n this.mInitialEdgesTouched = iit;\n this.mEdgeDragsInProgress = edip;\n this.mEdgeDragsLocked = edl;\n }\n }\n saveInitialMotion(x, y, pointerId) {\n this.ensureMotionHistorySizeForId(pointerId);\n this.mInitialMotionX[pointerId] = this.mLastMotionX[pointerId] = x;\n this.mInitialMotionY[pointerId] = this.mLastMotionY[pointerId] = y;\n this.mInitialEdgesTouched[pointerId] = this.getEdgesTouched(Math.floor(x), Math.floor(y));\n this.mPointersDown |= 1 << pointerId;\n }\n saveLastMotion(ev) {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n this.mLastMotionX[pointerId] = x;\n this.mLastMotionY[pointerId] = y;\n }\n }\n isPointerDown(pointerId) {\n return (this.mPointersDown & 1 << pointerId) != 0;\n }\n setDragState(state) {\n if (this.mDragState != state) {\n this.mDragState = state;\n this.mCallback.onViewDragStateChanged(state);\n if (state == ViewDragHelper.STATE_IDLE) {\n this.mCapturedView = null;\n }\n }\n }\n tryCaptureViewForDrag(toCapture, pointerId) {\n if (toCapture == this.mCapturedView && this.mActivePointerId == pointerId) {\n return true;\n }\n if (toCapture != null && this.mCallback.tryCaptureView(toCapture, pointerId)) {\n this.mActivePointerId = pointerId;\n this.captureChildView(toCapture, pointerId);\n return true;\n }\n return false;\n }\n canScroll(v, checkV, dx, dy, x, y) {\n if (v instanceof ViewGroup) {\n const group = v;\n const scrollX = v.getScrollX();\n const scrollY = v.getScrollY();\n const count = group.getChildCount();\n for (let i = count - 1; i >= 0; i--) {\n const child = group.getChildAt(i);\n if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight()\n && y + scrollY >= child.getTop() && y + scrollY < child.getBottom()\n && this.canScroll(child, true, dx, dy, x + scrollX - child.getLeft(), y + scrollY - child.getTop())) {\n return true;\n }\n }\n }\n return checkV && (v.canScrollHorizontally(-dx) || v.canScrollVertically(-dy));\n }\n shouldInterceptTouchEvent(ev) {\n const action = ev.getActionMasked();\n const actionIndex = ev.getActionIndex();\n if (action == MotionEvent.ACTION_DOWN) {\n this.cancel();\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n const pointerId = ev.getPointerId(0);\n this.saveInitialMotion(x, y, pointerId);\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture == this.mCapturedView && this.mDragState == ViewDragHelper.STATE_SETTLING) {\n this.tryCaptureViewForDrag(toCapture, pointerId);\n }\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const pointerId = ev.getPointerId(actionIndex);\n const x = ev.getX(actionIndex);\n const y = ev.getY(actionIndex);\n this.saveInitialMotion(x, y, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_IDLE) {\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n }\n else if (this.mDragState == ViewDragHelper.STATE_SETTLING) {\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture == this.mCapturedView) {\n this.tryCaptureViewForDrag(toCapture, pointerId);\n }\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n const dx = x - this.mInitialMotionX[pointerId];\n const dy = y - this.mInitialMotionY[pointerId];\n this.reportNewEdgeDrags(dx, dy, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n break;\n }\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (toCapture != null && this.checkTouchSlop(toCapture, dx, dy) && this.tryCaptureViewForDrag(toCapture, pointerId)) {\n break;\n }\n }\n this.saveLastMotion(ev);\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n const pointerId = ev.getPointerId(actionIndex);\n this.clearMotionHistory(pointerId);\n break;\n }\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_CANCEL:\n {\n this.cancel();\n break;\n }\n }\n return this.mDragState == ViewDragHelper.STATE_DRAGGING;\n }\n processTouchEvent(ev) {\n const action = ev.getActionMasked();\n const actionIndex = ev.getActionIndex();\n if (action == MotionEvent.ACTION_DOWN) {\n this.cancel();\n }\n if (this.mVelocityTracker == null) {\n this.mVelocityTracker = VelocityTracker.obtain();\n }\n this.mVelocityTracker.addMovement(ev);\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n const pointerId = ev.getPointerId(0);\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n this.saveInitialMotion(x, y, pointerId);\n this.tryCaptureViewForDrag(toCapture, pointerId);\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_DOWN:\n {\n const pointerId = ev.getPointerId(actionIndex);\n const x = ev.getX(actionIndex);\n const y = ev.getY(actionIndex);\n this.saveInitialMotion(x, y, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_IDLE) {\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n this.tryCaptureViewForDrag(toCapture, pointerId);\n const edgesTouched = this.mInitialEdgesTouched[pointerId];\n if ((edgesTouched & this.mTrackingEdges) != 0) {\n this.mCallback.onEdgeTouched(edgesTouched & this.mTrackingEdges, pointerId);\n }\n }\n else if (this.isCapturedViewUnder(Math.floor(x), Math.floor(y))) {\n this.tryCaptureViewForDrag(this.mCapturedView, pointerId);\n }\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n const index = ev.findPointerIndex(this.mActivePointerId);\n const x = ev.getX(index);\n const y = ev.getY(index);\n const idx = Math.floor((x - this.mLastMotionX[this.mActivePointerId]));\n const idy = Math.floor((y - this.mLastMotionY[this.mActivePointerId]));\n this.dragTo(this.mCapturedView.getLeft() + idx, this.mCapturedView.getTop() + idy, idx, idy);\n this.saveLastMotion(ev);\n }\n else {\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const pointerId = ev.getPointerId(i);\n const x = ev.getX(i);\n const y = ev.getY(i);\n const dx = x - this.mInitialMotionX[pointerId];\n const dy = y - this.mInitialMotionY[pointerId];\n this.reportNewEdgeDrags(dx, dy, pointerId);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n break;\n }\n const toCapture = this.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (this.checkTouchSlop(toCapture, dx, dy) && this.tryCaptureViewForDrag(toCapture, pointerId)) {\n break;\n }\n }\n this.saveLastMotion(ev);\n }\n break;\n }\n case MotionEvent.ACTION_POINTER_UP:\n {\n const pointerId = ev.getPointerId(actionIndex);\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING && pointerId == this.mActivePointerId) {\n let newActivePointer = ViewDragHelper.INVALID_POINTER;\n const pointerCount = ev.getPointerCount();\n for (let i = 0; i < pointerCount; i++) {\n const id = ev.getPointerId(i);\n if (id == this.mActivePointerId) {\n continue;\n }\n const x = ev.getX(i);\n const y = ev.getY(i);\n if (this.findTopChildUnder(Math.floor(x), Math.floor(y)) == this.mCapturedView && this.tryCaptureViewForDrag(this.mCapturedView, id)) {\n newActivePointer = this.mActivePointerId;\n break;\n }\n }\n if (newActivePointer == ViewDragHelper.INVALID_POINTER) {\n this.releaseViewForPointerUp();\n }\n }\n this.clearMotionHistory(pointerId);\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.releaseViewForPointerUp();\n }\n this.cancel();\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n if (this.mDragState == ViewDragHelper.STATE_DRAGGING) {\n this.dispatchViewReleased(0, 0);\n }\n this.cancel();\n break;\n }\n }\n }\n reportNewEdgeDrags(dx, dy, pointerId) {\n let dragsStarted = 0;\n if (this.checkNewEdgeDrag(dx, dy, pointerId, ViewDragHelper.EDGE_LEFT)) {\n dragsStarted |= ViewDragHelper.EDGE_LEFT;\n }\n if (this.checkNewEdgeDrag(dy, dx, pointerId, ViewDragHelper.EDGE_TOP)) {\n dragsStarted |= ViewDragHelper.EDGE_TOP;\n }\n if (this.checkNewEdgeDrag(dx, dy, pointerId, ViewDragHelper.EDGE_RIGHT)) {\n dragsStarted |= ViewDragHelper.EDGE_RIGHT;\n }\n if (this.checkNewEdgeDrag(dy, dx, pointerId, ViewDragHelper.EDGE_BOTTOM)) {\n dragsStarted |= ViewDragHelper.EDGE_BOTTOM;\n }\n if (dragsStarted != 0) {\n this.mEdgeDragsInProgress[pointerId] |= dragsStarted;\n this.mCallback.onEdgeDragStarted(dragsStarted, pointerId);\n }\n }\n checkNewEdgeDrag(delta, odelta, pointerId, edge) {\n const absDelta = Math.abs(delta);\n const absODelta = Math.abs(odelta);\n if ((this.mInitialEdgesTouched[pointerId] & edge) != edge || (this.mTrackingEdges & edge) == 0 || (this.mEdgeDragsLocked[pointerId] & edge) == edge || (this.mEdgeDragsInProgress[pointerId] & edge) == edge || (absDelta <= this.mTouchSlop && absODelta <= this.mTouchSlop)) {\n return false;\n }\n if (absDelta < absODelta * 0.5 && this.mCallback.onEdgeLock(edge)) {\n this.mEdgeDragsLocked[pointerId] |= edge;\n return false;\n }\n return (this.mEdgeDragsInProgress[pointerId] & edge) == 0 && absDelta > this.mTouchSlop;\n }\n checkTouchSlop(...args) {\n if (args.length === 1)\n return this._checkTouchSlop_1(args[0]);\n if (args.length === 2)\n return this._checkTouchSlop_2(args[0], args[1]);\n if (args.length === 3)\n return this._checkTouchSlop_3(args[0], args[1], args[2]);\n return false;\n }\n _checkTouchSlop_3(child, dx, dy) {\n if (child == null) {\n return false;\n }\n const checkHorizontal = this.mCallback.getViewHorizontalDragRange(child) > 0;\n const checkVertical = this.mCallback.getViewVerticalDragRange(child) > 0;\n if (checkHorizontal && checkVertical) {\n return dx * dx + dy * dy > this.mTouchSlop * this.mTouchSlop;\n }\n else if (checkHorizontal) {\n return Math.abs(dx) > this.mTouchSlop;\n }\n else if (checkVertical) {\n return Math.abs(dy) > this.mTouchSlop;\n }\n return false;\n }\n _checkTouchSlop_1(directions) {\n const count = this.mInitialMotionX.length;\n for (let i = 0; i < count; i++) {\n if (this.checkTouchSlop(directions, i)) {\n return true;\n }\n }\n return false;\n }\n _checkTouchSlop_2(directions, pointerId) {\n if (!this.isPointerDown(pointerId)) {\n return false;\n }\n const checkHorizontal = (directions & ViewDragHelper.DIRECTION_HORIZONTAL) == ViewDragHelper.DIRECTION_HORIZONTAL;\n const checkVertical = (directions & ViewDragHelper.DIRECTION_VERTICAL) == ViewDragHelper.DIRECTION_VERTICAL;\n const dx = this.mLastMotionX[pointerId] - this.mInitialMotionX[pointerId];\n const dy = this.mLastMotionY[pointerId] - this.mInitialMotionY[pointerId];\n if (checkHorizontal && checkVertical) {\n return dx * dx + dy * dy > this.mTouchSlop * this.mTouchSlop;\n }\n else if (checkHorizontal) {\n return Math.abs(dx) > this.mTouchSlop;\n }\n else if (checkVertical) {\n return Math.abs(dy) > this.mTouchSlop;\n }\n return false;\n }\n isEdgeTouched(edges, pointerId) {\n if (pointerId == null) {\n const count = this.mInitialEdgesTouched.length;\n for (let i = 0; i < count; i++) {\n if (this.isEdgeTouched(edges, i)) {\n return true;\n }\n }\n }\n return this.isPointerDown(pointerId) && (this.mInitialEdgesTouched[pointerId] & edges) != 0;\n }\n releaseViewForPointerUp() {\n this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaxVelocity);\n const xvel = this.clampMag(this.mVelocityTracker.getXVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity);\n const yvel = this.clampMag(this.mVelocityTracker.getYVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity);\n this.dispatchViewReleased(xvel, yvel);\n }\n dragTo(left, top, dx, dy) {\n let clampedX = left;\n let clampedY = top;\n const oldLeft = this.mCapturedView.getLeft();\n const oldTop = this.mCapturedView.getTop();\n if (dx != 0) {\n clampedX = this.mCallback.clampViewPositionHorizontal(this.mCapturedView, left, dx);\n this.mCapturedView.offsetLeftAndRight(clampedX - oldLeft);\n }\n if (dy != 0) {\n clampedY = this.mCallback.clampViewPositionVertical(this.mCapturedView, top, dy);\n this.mCapturedView.offsetTopAndBottom(clampedY - oldTop);\n }\n if (dx != 0 || dy != 0) {\n const clampedDx = clampedX - oldLeft;\n const clampedDy = clampedY - oldTop;\n this.mCallback.onViewPositionChanged(this.mCapturedView, clampedX, clampedY, clampedDx, clampedDy);\n }\n }\n isCapturedViewUnder(x, y) {\n return this.isViewUnder(this.mCapturedView, x, y);\n }\n isViewUnder(view, x, y) {\n if (view == null) {\n return false;\n }\n return x >= view.getLeft() && x < view.getRight() && y >= view.getTop() && y < view.getBottom();\n }\n findTopChildUnder(x, y) {\n const childCount = this.mParentView.getChildCount();\n for (let i = childCount - 1; i >= 0; i--) {\n const child = this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(i));\n if (x >= child.getLeft() && x < child.getRight() && y >= child.getTop() && y < child.getBottom()) {\n return child;\n }\n }\n return null;\n }\n getEdgesTouched(x, y) {\n let result = 0;\n if (x < this.mParentView.getLeft() + this.mEdgeSize)\n result |= ViewDragHelper.EDGE_LEFT;\n if (y < this.mParentView.getTop() + this.mEdgeSize)\n result |= ViewDragHelper.EDGE_TOP;\n if (x > this.mParentView.getRight() - this.mEdgeSize)\n result |= ViewDragHelper.EDGE_RIGHT;\n if (y > this.mParentView.getBottom() - this.mEdgeSize)\n result |= ViewDragHelper.EDGE_BOTTOM;\n return result;\n }\n }\n ViewDragHelper.TAG = \"ViewDragHelper\";\n ViewDragHelper.INVALID_POINTER = -1;\n ViewDragHelper.STATE_IDLE = 0;\n ViewDragHelper.STATE_DRAGGING = 1;\n ViewDragHelper.STATE_SETTLING = 2;\n ViewDragHelper.EDGE_LEFT = 1 << 0;\n ViewDragHelper.EDGE_RIGHT = 1 << 1;\n ViewDragHelper.EDGE_TOP = 1 << 2;\n ViewDragHelper.EDGE_BOTTOM = 1 << 3;\n ViewDragHelper.EDGE_ALL = ViewDragHelper.EDGE_LEFT | ViewDragHelper.EDGE_TOP | ViewDragHelper.EDGE_RIGHT | ViewDragHelper.EDGE_BOTTOM;\n ViewDragHelper.DIRECTION_HORIZONTAL = 1 << 0;\n ViewDragHelper.DIRECTION_VERTICAL = 1 << 1;\n ViewDragHelper.DIRECTION_ALL = ViewDragHelper.DIRECTION_HORIZONTAL | ViewDragHelper.DIRECTION_VERTICAL;\n ViewDragHelper.EDGE_SIZE = 20;\n ViewDragHelper.BASE_SETTLE_DURATION = 256;\n ViewDragHelper.MAX_SETTLE_DURATION = 600;\n ViewDragHelper.sInterpolator = (() => {\n class _Inner {\n getInterpolation(t) {\n t -= 1.0;\n return t * t * t * t * t + 1.0;\n }\n }\n return new _Inner();\n })();\n widget.ViewDragHelper = ViewDragHelper;\n (function (ViewDragHelper) {\n class Callback {\n onViewDragStateChanged(state) {\n }\n onViewPositionChanged(changedView, left, top, dx, dy) {\n }\n onViewCaptured(capturedChild, activePointerId) {\n }\n onViewReleased(releasedChild, xvel, yvel) {\n }\n onEdgeTouched(edgeFlags, pointerId) {\n }\n onEdgeLock(edgeFlags) {\n return false;\n }\n onEdgeDragStarted(edgeFlags, pointerId) {\n }\n getOrderedChildIndex(index) {\n return index;\n }\n getViewHorizontalDragRange(child) {\n return 0;\n }\n getViewVerticalDragRange(child) {\n return 0;\n }\n clampViewPositionHorizontal(child, left, dx) {\n return 0;\n }\n clampViewPositionVertical(child, top, dy) {\n return 0;\n }\n }\n ViewDragHelper.Callback = Callback;\n })(ViewDragHelper = widget.ViewDragHelper || (widget.ViewDragHelper = {}));\n })(widget = v4.widget || (v4.widget = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var support;\n (function (support) {\n var v4;\n (function (v4) {\n var widget;\n (function (widget) {\n var Paint = android.graphics.Paint;\n var PixelFormat = android.graphics.PixelFormat;\n var SystemClock = android.os.SystemClock;\n var Gravity = android.view.Gravity;\n var KeyEvent = android.view.KeyEvent;\n var MotionEvent = android.view.MotionEvent;\n var View = android.view.View;\n var ViewGroup = android.view.ViewGroup;\n var ViewDragHelper = android.support.v4.widget.ViewDragHelper;\n var Context = android.content.Context;\n class DrawerLayout extends ViewGroup {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mMinDrawerMargin = 0;\n this.mScrimColor = DrawerLayout.DEFAULT_SCRIM_COLOR;\n this.mScrimOpacity = 0;\n this.mScrimPaint = new Paint();\n this.mDrawerState = 0;\n this.mFirstLayout = true;\n this.mLockModeLeft = 0;\n this.mLockModeRight = 0;\n this.mInitialMotionX = 0;\n this.mInitialMotionY = 0;\n const density = this.getResources().getDisplayMetrics().density;\n this.mMinDrawerMargin = Math.floor((DrawerLayout.MIN_DRAWER_MARGIN * density + 0.5));\n const minVel = DrawerLayout.MIN_FLING_VELOCITY * density;\n this.mLeftCallback = new DrawerLayout.ViewDragCallback(this, Gravity.LEFT);\n this.mRightCallback = new DrawerLayout.ViewDragCallback(this, Gravity.RIGHT);\n this.mLeftDragger = ViewDragHelper.create(this, DrawerLayout.TOUCH_SLOP_SENSITIVITY, this.mLeftCallback);\n this.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);\n this.mLeftDragger.setMinVelocity(minVel);\n this.mLeftCallback.setDragger(this.mLeftDragger);\n this.mRightDragger = ViewDragHelper.create(this, DrawerLayout.TOUCH_SLOP_SENSITIVITY, this.mRightCallback);\n this.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);\n this.mRightDragger.setMinVelocity(minVel);\n this.mRightCallback.setDragger(this.mRightDragger);\n this.setFocusableInTouchMode(true);\n this.setMotionEventSplittingEnabled(false);\n }\n setDrawerShadow(shadowDrawable, gravity) {\n const absGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection());\n if ((absGravity & Gravity.LEFT) == Gravity.LEFT) {\n this.mShadowLeft = shadowDrawable;\n this.invalidate();\n }\n if ((absGravity & Gravity.RIGHT) == Gravity.RIGHT) {\n this.mShadowRight = shadowDrawable;\n this.invalidate();\n }\n }\n setScrimColor(color) {\n this.mScrimColor = color;\n this.invalidate();\n }\n setDrawerListener(listener) {\n this.mListener = listener;\n }\n setDrawerLockMode(lockMode, edgeGravityOrView) {\n if (edgeGravityOrView == null) {\n this.setDrawerLockMode(lockMode, Gravity.LEFT);\n this.setDrawerLockMode(lockMode, Gravity.RIGHT);\n return;\n }\n if (edgeGravityOrView instanceof View) {\n if (!this.isDrawerView(edgeGravityOrView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a \" + \"drawer with appropriate layout_gravity\")`);\n }\n const gravity = edgeGravityOrView.getLayoutParams().gravity;\n this.setDrawerLockMode(lockMode, gravity);\n return;\n }\n let edgeGravity = edgeGravityOrView;\n const absGravity = Gravity.getAbsoluteGravity(edgeGravity, this.getLayoutDirection());\n if (absGravity == Gravity.LEFT) {\n this.mLockModeLeft = lockMode;\n }\n else if (absGravity == Gravity.RIGHT) {\n this.mLockModeRight = lockMode;\n }\n if (lockMode != DrawerLayout.LOCK_MODE_UNLOCKED) {\n const helper = absGravity == Gravity.LEFT ? this.mLeftDragger : this.mRightDragger;\n helper.cancel();\n }\n switch (lockMode) {\n case DrawerLayout.LOCK_MODE_LOCKED_OPEN:\n const toOpen = this.findDrawerWithGravity(absGravity);\n if (toOpen != null) {\n this.openDrawer(toOpen);\n }\n break;\n case DrawerLayout.LOCK_MODE_LOCKED_CLOSED:\n const toClose = this.findDrawerWithGravity(absGravity);\n if (toClose != null) {\n this.closeDrawer(toClose);\n }\n break;\n }\n }\n getDrawerLockMode(edgeGravityOrView) {\n if (edgeGravityOrView instanceof View) {\n let drawerView = edgeGravityOrView;\n const absGravity = this.getDrawerViewAbsoluteGravity(drawerView);\n if (absGravity == Gravity.LEFT) {\n return this.mLockModeLeft;\n }\n else if (absGravity == Gravity.RIGHT) {\n return this.mLockModeRight;\n }\n return DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n else {\n let edgeGravity = edgeGravityOrView;\n const absGravity = Gravity.getAbsoluteGravity(edgeGravity, this.getLayoutDirection());\n if (absGravity == Gravity.LEFT) {\n return this.mLockModeLeft;\n }\n else if (absGravity == Gravity.RIGHT) {\n return this.mLockModeRight;\n }\n return DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n }\n updateDrawerState(forGravity, activeState, activeDrawer) {\n const leftState = this.mLeftDragger.getViewDragState();\n const rightState = this.mRightDragger.getViewDragState();\n let state;\n if (leftState == DrawerLayout.STATE_DRAGGING || rightState == DrawerLayout.STATE_DRAGGING) {\n state = DrawerLayout.STATE_DRAGGING;\n }\n else if (leftState == DrawerLayout.STATE_SETTLING || rightState == DrawerLayout.STATE_SETTLING) {\n state = DrawerLayout.STATE_SETTLING;\n }\n else {\n state = DrawerLayout.STATE_IDLE;\n }\n if (activeDrawer != null && activeState == DrawerLayout.STATE_IDLE) {\n const lp = activeDrawer.getLayoutParams();\n if (lp.onScreen == 0) {\n this.dispatchOnDrawerClosed(activeDrawer);\n }\n else if (lp.onScreen == 1) {\n this.dispatchOnDrawerOpened(activeDrawer);\n }\n }\n if (state != this.mDrawerState) {\n this.mDrawerState = state;\n if (this.mListener != null) {\n this.mListener.onDrawerStateChanged(state);\n }\n }\n }\n dispatchOnDrawerClosed(drawerView) {\n const lp = drawerView.getLayoutParams();\n if (lp.knownOpen) {\n lp.knownOpen = false;\n if (this.mListener != null) {\n this.mListener.onDrawerClosed(drawerView);\n }\n }\n }\n dispatchOnDrawerOpened(drawerView) {\n const lp = drawerView.getLayoutParams();\n if (!lp.knownOpen) {\n lp.knownOpen = true;\n if (this.mListener != null) {\n this.mListener.onDrawerOpened(drawerView);\n }\n }\n }\n dispatchOnDrawerSlide(drawerView, slideOffset) {\n if (this.mListener != null) {\n this.mListener.onDrawerSlide(drawerView, slideOffset);\n }\n }\n setDrawerViewOffset(drawerView, slideOffset) {\n const lp = drawerView.getLayoutParams();\n if (slideOffset == lp.onScreen) {\n return;\n }\n lp.onScreen = slideOffset;\n this.dispatchOnDrawerSlide(drawerView, slideOffset);\n }\n getDrawerViewOffset(drawerView) {\n return drawerView.getLayoutParams().onScreen;\n }\n getDrawerViewAbsoluteGravity(drawerView) {\n const gravity = drawerView.getLayoutParams().gravity;\n return Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection());\n }\n checkDrawerViewAbsoluteGravity(drawerView, checkFor) {\n const absGravity = this.getDrawerViewAbsoluteGravity(drawerView);\n return (absGravity & checkFor) == checkFor;\n }\n findOpenDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getLayoutParams().knownOpen) {\n return child;\n }\n }\n return null;\n }\n moveDrawerToOffset(drawerView, slideOffset) {\n const oldOffset = this.getDrawerViewOffset(drawerView);\n const width = drawerView.getWidth();\n const oldPos = Math.floor((width * oldOffset));\n const newPos = Math.floor((width * slideOffset));\n const dx = newPos - oldPos;\n drawerView.offsetLeftAndRight(this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT) ? dx : -dx);\n this.setDrawerViewOffset(drawerView, slideOffset);\n }\n findDrawerWithGravity(gravity) {\n const absHorizGravity = Gravity.getAbsoluteGravity(gravity, this.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const childAbsGravity = this.getDrawerViewAbsoluteGravity(child);\n if ((childAbsGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == absHorizGravity) {\n return child;\n }\n }\n return null;\n }\n static gravityToString(gravity) {\n if ((gravity & Gravity.LEFT) == Gravity.LEFT) {\n return \"LEFT\";\n }\n if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) {\n return \"RIGHT\";\n }\n return '' + gravity;\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n this.mFirstLayout = true;\n }\n onAttachedToWindow() {\n super.onAttachedToWindow();\n this.mFirstLayout = true;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = View.MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = View.MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = View.MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = View.MeasureSpec.getSize(heightMeasureSpec);\n if (widthMode != View.MeasureSpec.EXACTLY || heightMode != View.MeasureSpec.EXACTLY) {\n if (this.isInEditMode()) {\n if (widthMode == View.MeasureSpec.AT_MOST) {\n widthMode = View.MeasureSpec.EXACTLY;\n }\n else if (widthMode == View.MeasureSpec.UNSPECIFIED) {\n widthMode = View.MeasureSpec.EXACTLY;\n widthSize = 300;\n }\n if (heightMode == View.MeasureSpec.AT_MOST) {\n heightMode = View.MeasureSpec.EXACTLY;\n }\n else if (heightMode == View.MeasureSpec.UNSPECIFIED) {\n heightMode = View.MeasureSpec.EXACTLY;\n heightSize = 300;\n }\n }\n else {\n throw Error(`new IllegalArgumentException(\"DrawerLayout must be measured with MeasureSpec.EXACTLY.\")`);\n }\n }\n this.setMeasuredDimension(widthSize, heightSize);\n let foundDrawers = 0;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == DrawerLayout.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n if (this.isContentView(child)) {\n const contentWidthSpec = View.MeasureSpec.makeMeasureSpec(widthSize - lp.leftMargin - lp.rightMargin, View.MeasureSpec.EXACTLY);\n const contentHeightSpec = View.MeasureSpec.makeMeasureSpec(heightSize - lp.topMargin - lp.bottomMargin, View.MeasureSpec.EXACTLY);\n child.measure(contentWidthSpec, contentHeightSpec);\n }\n else if (this.isDrawerView(child)) {\n const childGravity = this.getDrawerViewAbsoluteGravity(child) & Gravity.HORIZONTAL_GRAVITY_MASK;\n if ((foundDrawers & childGravity) != 0) {\n throw Error(`new IllegalStateException(\"Child drawer has absolute gravity \" + DrawerLayout.gravityToString(childGravity) + \" but this \" + DrawerLayout.TAG + \" already has a \" + \"drawer view along that edge\")`);\n }\n const drawerWidthSpec = DrawerLayout.getChildMeasureSpec(widthMeasureSpec, this.mMinDrawerMargin + lp.leftMargin + lp.rightMargin, lp.width);\n const drawerHeightSpec = DrawerLayout.getChildMeasureSpec(heightMeasureSpec, lp.topMargin + lp.bottomMargin, lp.height);\n child.measure(drawerWidthSpec, drawerHeightSpec);\n }\n else {\n throw Error(`new IllegalStateException(\"Child \" + child + \" at index \" + i + \" does not have a valid layout_gravity - must be Gravity.LEFT, \" + \"Gravity.RIGHT or Gravity.NO_GRAVITY\")`);\n }\n }\n }\n onLayout(changed, l, t, r, b) {\n this.mInLayout = true;\n const width = r - l;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (child.getVisibility() == DrawerLayout.GONE) {\n continue;\n }\n const lp = child.getLayoutParams();\n if (this.isContentView(child)) {\n child.layout(lp.leftMargin, lp.topMargin, lp.leftMargin + child.getMeasuredWidth(), lp.topMargin + child.getMeasuredHeight());\n }\n else {\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n let childLeft;\n let newOffset;\n if (this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n childLeft = -childWidth + Math.floor((childWidth * lp.onScreen));\n newOffset = (childWidth + childLeft) / childWidth;\n }\n else {\n childLeft = width - Math.floor((childWidth * lp.onScreen));\n newOffset = (width - childLeft) / childWidth;\n }\n const changeOffset = newOffset != lp.onScreen;\n const vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;\n switch (vgrav) {\n default:\n case Gravity.TOP:\n {\n child.layout(childLeft, lp.topMargin, childLeft + childWidth, lp.topMargin + childHeight);\n break;\n }\n case Gravity.BOTTOM:\n {\n const height = b - t;\n child.layout(childLeft, height - lp.bottomMargin - child.getMeasuredHeight(), childLeft + childWidth, height - lp.bottomMargin);\n break;\n }\n case Gravity.CENTER_VERTICAL:\n {\n const height = b - t;\n let childTop = (height - childHeight) / 2;\n if (childTop < lp.topMargin) {\n childTop = lp.topMargin;\n }\n else if (childTop + childHeight > height - lp.bottomMargin) {\n childTop = height - lp.bottomMargin - childHeight;\n }\n child.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);\n break;\n }\n }\n if (changeOffset) {\n this.setDrawerViewOffset(child, newOffset);\n }\n const newVisibility = lp.onScreen > 0 ? DrawerLayout.VISIBLE : DrawerLayout.INVISIBLE;\n if (child.getVisibility() != newVisibility) {\n child.setVisibility(newVisibility);\n }\n }\n }\n this.mInLayout = false;\n this.mFirstLayout = false;\n }\n requestLayout() {\n if (!this.mInLayout) {\n super.requestLayout();\n }\n }\n computeScroll() {\n const childCount = this.getChildCount();\n let scrimOpacity = 0;\n for (let i = 0; i < childCount; i++) {\n const onscreen = this.getChildAt(i).getLayoutParams().onScreen;\n scrimOpacity = Math.max(scrimOpacity, onscreen);\n }\n this.mScrimOpacity = scrimOpacity;\n let leftContinue = this.mLeftDragger.continueSettling(true);\n let rightContinue = this.mRightDragger.continueSettling(true);\n if (leftContinue || rightContinue) {\n this.postInvalidateOnAnimation();\n }\n }\n static hasOpaqueBackground(v) {\n const bg = v.getBackground();\n if (bg != null) {\n return bg.getOpacity() == PixelFormat.OPAQUE;\n }\n return false;\n }\n drawChild(canvas, child, drawingTime) {\n const height = this.getHeight();\n const drawingContent = this.isContentView(child);\n let clipLeft = 0, clipRight = this.getWidth();\n const restoreCount = canvas.save();\n if (drawingContent) {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const v = this.getChildAt(i);\n if (v == child || v.getVisibility() != DrawerLayout.VISIBLE || !DrawerLayout.hasOpaqueBackground(v) || !this.isDrawerView(v) || v.getHeight() < height) {\n continue;\n }\n if (this.checkDrawerViewAbsoluteGravity(v, Gravity.LEFT)) {\n const vright = v.getRight();\n if (vright > clipLeft)\n clipLeft = vright;\n }\n else {\n const vleft = v.getLeft();\n if (vleft < clipRight)\n clipRight = vleft;\n }\n }\n canvas.clipRect(clipLeft, 0, clipRight, this.getHeight());\n }\n const result = super.drawChild(canvas, child, drawingTime);\n canvas.restoreToCount(restoreCount);\n if (this.mScrimOpacity > 0 && drawingContent) {\n const baseAlpha = (this.mScrimColor & 0xff000000) >>> 24;\n const imag = Math.floor((baseAlpha * this.mScrimOpacity));\n const color = imag << 24 | (this.mScrimColor & 0xffffff);\n this.mScrimPaint.setColor(color);\n canvas.drawRect(clipLeft, 0, clipRight, this.getHeight(), this.mScrimPaint);\n }\n else if (this.mShadowLeft != null && this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n const shadowWidth = this.mShadowLeft.getIntrinsicWidth();\n const childRight = child.getRight();\n const drawerPeekDistance = this.mLeftDragger.getEdgeSize();\n const alpha = Math.max(0, Math.min(childRight / drawerPeekDistance, 1.));\n this.mShadowLeft.setBounds(childRight, child.getTop(), childRight + shadowWidth, child.getBottom());\n this.mShadowLeft.setAlpha(Math.floor((0xff * alpha)));\n this.mShadowLeft.draw(canvas);\n }\n else if (this.mShadowRight != null && this.checkDrawerViewAbsoluteGravity(child, Gravity.RIGHT)) {\n const shadowWidth = this.mShadowRight.getIntrinsicWidth();\n const childLeft = child.getLeft();\n const showing = this.getWidth() - childLeft;\n const drawerPeekDistance = this.mRightDragger.getEdgeSize();\n const alpha = Math.max(0, Math.min(showing / drawerPeekDistance, 1.));\n this.mShadowRight.setBounds(childLeft - shadowWidth, child.getTop(), childLeft, child.getBottom());\n this.mShadowRight.setAlpha(Math.floor((0xff * alpha)));\n this.mShadowRight.draw(canvas);\n }\n return result;\n }\n isContentView(child) {\n return child.getLayoutParams().gravity == Gravity.NO_GRAVITY;\n }\n isDrawerView(child) {\n const gravity = child.getLayoutParams().gravity;\n const absGravity = Gravity.getAbsoluteGravity(gravity, child.getLayoutDirection());\n return (absGravity & (Gravity.LEFT | Gravity.RIGHT)) != 0;\n }\n onInterceptTouchEvent(ev) {\n const action = ev.getActionMasked();\n const leftIntercept = this.mLeftDragger.shouldInterceptTouchEvent(ev);\n const rightIntercept = this.mRightDragger.shouldInterceptTouchEvent(ev);\n const interceptForDrag = leftIntercept || rightIntercept;\n let interceptForTap = false;\n switch (action) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n this.mInitialMotionX = x;\n this.mInitialMotionY = y;\n if (this.mScrimOpacity > 0 && this.isContentView(this.mLeftDragger.findTopChildUnder(Math.floor(x), Math.floor(y)))) {\n interceptForTap = true;\n }\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n if (this.mLeftDragger.checkTouchSlop(ViewDragHelper.DIRECTION_ALL)) {\n this.mLeftCallback.removeCallbacks();\n this.mRightCallback.removeCallbacks();\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n {\n this.closeDrawers(true);\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n }\n }\n return interceptForDrag || interceptForTap || this.hasPeekingDrawer() || this.mChildrenCanceledTouch;\n }\n onTouchEvent(ev) {\n this.mLeftDragger.processTouchEvent(ev);\n this.mRightDragger.processTouchEvent(ev);\n const action = ev.getAction();\n let wantTouchEvents = true;\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n {\n const x = ev.getX();\n const y = ev.getY();\n this.mInitialMotionX = x;\n this.mInitialMotionY = y;\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n const x = ev.getX();\n const y = ev.getY();\n let peekingOnly = true;\n const touchedView = this.mLeftDragger.findTopChildUnder(Math.floor(x), Math.floor(y));\n if (touchedView != null && this.isContentView(touchedView)) {\n const dx = x - this.mInitialMotionX;\n const dy = y - this.mInitialMotionY;\n const slop = this.mLeftDragger.getTouchSlop();\n if (dx * dx + dy * dy < slop * slop) {\n const openDrawer = this.findOpenDrawer();\n if (openDrawer != null) {\n peekingOnly = this.getDrawerLockMode(openDrawer) == DrawerLayout.LOCK_MODE_LOCKED_OPEN;\n }\n }\n }\n this.closeDrawers(peekingOnly);\n this.mDisallowInterceptRequested = false;\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n this.closeDrawers(true);\n this.mDisallowInterceptRequested = false;\n this.mChildrenCanceledTouch = false;\n break;\n }\n }\n return wantTouchEvents;\n }\n requestDisallowInterceptTouchEvent(disallowIntercept) {\n if (DrawerLayout.CHILDREN_DISALLOW_INTERCEPT || (!this.mLeftDragger.isEdgeTouched(ViewDragHelper.EDGE_LEFT) && !this.mRightDragger.isEdgeTouched(ViewDragHelper.EDGE_RIGHT))) {\n super.requestDisallowInterceptTouchEvent(disallowIntercept);\n }\n this.mDisallowInterceptRequested = disallowIntercept;\n if (disallowIntercept) {\n this.closeDrawers(true);\n }\n }\n closeDrawers(peekingOnly = false) {\n let needsInvalidate = false;\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n const lp = child.getLayoutParams();\n if (!this.isDrawerView(child) || (peekingOnly && !lp.isPeeking)) {\n continue;\n }\n const childWidth = child.getWidth();\n if (this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n needsInvalidate = this.mLeftDragger.smoothSlideViewTo(child, -childWidth, child.getTop()) || needsInvalidate;\n }\n else {\n needsInvalidate = this.mRightDragger.smoothSlideViewTo(child, this.getWidth(), child.getTop()) || needsInvalidate;\n }\n lp.isPeeking = false;\n }\n this.mLeftCallback.removeCallbacks();\n this.mRightCallback.removeCallbacks();\n if (needsInvalidate) {\n this.invalidate();\n }\n }\n openDrawer(arg) {\n if (arg instanceof View) {\n this._openDrawer_view(arg);\n }\n else {\n this._openDrawer_gravity(arg);\n }\n }\n _openDrawer_view(drawerView) {\n if (!this.isDrawerView(drawerView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a sliding drawer\")`);\n }\n if (this.mFirstLayout) {\n const lp = drawerView.getLayoutParams();\n lp.onScreen = 1.;\n lp.knownOpen = true;\n }\n else {\n if (this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT)) {\n this.mLeftDragger.smoothSlideViewTo(drawerView, 0, drawerView.getTop());\n }\n else {\n this.mRightDragger.smoothSlideViewTo(drawerView, this.getWidth() - drawerView.getWidth(), drawerView.getTop());\n }\n }\n this.invalidate();\n }\n _openDrawer_gravity(gravity) {\n const drawerView = this.findDrawerWithGravity(gravity);\n if (drawerView == null) {\n throw Error(`new IllegalArgumentException(\"No drawer view found with gravity \" + DrawerLayout.gravityToString(gravity))`);\n }\n this.openDrawer(drawerView);\n }\n closeDrawer(arg) {\n if (arg instanceof View) {\n this._closeDrawer_view(arg);\n }\n else {\n this._closeDrawer_gravity(arg);\n }\n }\n _closeDrawer_view(drawerView) {\n if (!this.isDrawerView(drawerView)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawerView + \" is not a sliding drawer\")`);\n }\n if (this.mFirstLayout) {\n const lp = drawerView.getLayoutParams();\n lp.onScreen = 0.;\n lp.knownOpen = false;\n }\n else {\n if (this.checkDrawerViewAbsoluteGravity(drawerView, Gravity.LEFT)) {\n this.mLeftDragger.smoothSlideViewTo(drawerView, -drawerView.getWidth(), drawerView.getTop());\n }\n else {\n this.mRightDragger.smoothSlideViewTo(drawerView, this.getWidth(), drawerView.getTop());\n }\n }\n this.invalidate();\n }\n _closeDrawer_gravity(gravity) {\n const drawerView = this.findDrawerWithGravity(gravity);\n if (drawerView == null) {\n throw Error(`new IllegalArgumentException(\"No drawer view found with gravity \" + DrawerLayout.gravityToString(gravity))`);\n }\n this.closeDrawer(drawerView);\n }\n isDrawerOpen(arg) {\n if (arg instanceof View) {\n return this._isDrawerOpen_view(arg);\n }\n else {\n return this._isDrawerOpen_gravity(arg);\n }\n }\n _isDrawerOpen_view(drawer) {\n if (!this.isDrawerView(drawer)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawer + \" is not a drawer\")`);\n }\n return drawer.getLayoutParams().knownOpen;\n }\n _isDrawerOpen_gravity(drawerGravity) {\n const drawerView = this.findDrawerWithGravity(drawerGravity);\n if (drawerView != null) {\n return this.isDrawerOpen(drawerView);\n }\n return false;\n }\n isDrawerVisible(arg) {\n if (arg instanceof View) {\n return this._isDrawerVisible_view(arg);\n }\n else {\n return this._isDrawerVisible_gravity(arg);\n }\n }\n _isDrawerVisible_view(drawer) {\n if (!this.isDrawerView(drawer)) {\n throw Error(`new IllegalArgumentException(\"View \" + drawer + \" is not a drawer\")`);\n }\n return drawer.getLayoutParams().onScreen > 0;\n }\n _isDrawerVisible_gravity(drawerGravity) {\n const drawerView = this.findDrawerWithGravity(drawerGravity);\n if (drawerView != null) {\n return this.isDrawerVisible(drawerView);\n }\n return false;\n }\n hasPeekingDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const lp = this.getChildAt(i).getLayoutParams();\n if (lp.isPeeking) {\n return true;\n }\n }\n return false;\n }\n generateDefaultLayoutParams() {\n return new DrawerLayout.LayoutParams(DrawerLayout.LayoutParams.FILL_PARENT, DrawerLayout.LayoutParams.FILL_PARENT);\n }\n generateLayoutParams(p) {\n return p instanceof DrawerLayout.LayoutParams ? new DrawerLayout.LayoutParams(p)\n : p instanceof ViewGroup.MarginLayoutParams ? new DrawerLayout.LayoutParams(p)\n : new DrawerLayout.LayoutParams(p);\n }\n checkLayoutParams(p) {\n return p instanceof DrawerLayout.LayoutParams && super.checkLayoutParams(p);\n }\n generateLayoutParamsFromAttr(attrs) {\n return new DrawerLayout.LayoutParams(this.getContext(), attrs);\n }\n hasVisibleDrawer() {\n return this.findVisibleDrawer() != null;\n }\n findVisibleDrawer() {\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n const child = this.getChildAt(i);\n if (this.isDrawerView(child) && this.isDrawerVisible(child)) {\n return child;\n }\n }\n return null;\n }\n cancelChildViewTouch() {\n if (!this.mChildrenCanceledTouch) {\n const now = SystemClock.uptimeMillis();\n const cancelEvent = MotionEvent.obtainWithAction(now, now, MotionEvent.ACTION_CANCEL, 0.0, 0.0, 0);\n const childCount = this.getChildCount();\n for (let i = 0; i < childCount; i++) {\n this.getChildAt(i).dispatchTouchEvent(cancelEvent);\n }\n cancelEvent.recycle();\n this.mChildrenCanceledTouch = true;\n }\n }\n onKeyDown(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK && this.hasVisibleDrawer()) {\n event.startTracking();\n return true;\n }\n return super.onKeyDown(keyCode, event);\n }\n onKeyUp(keyCode, event) {\n if (keyCode == KeyEvent.KEYCODE_BACK) {\n const visibleDrawer = this.findVisibleDrawer();\n if (visibleDrawer != null && this.getDrawerLockMode(visibleDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n this.closeDrawers();\n }\n return visibleDrawer != null;\n }\n return super.onKeyUp(keyCode, event);\n }\n }\n DrawerLayout.TAG = \"DrawerLayout\";\n DrawerLayout.STATE_IDLE = ViewDragHelper.STATE_IDLE;\n DrawerLayout.STATE_DRAGGING = ViewDragHelper.STATE_DRAGGING;\n DrawerLayout.STATE_SETTLING = ViewDragHelper.STATE_SETTLING;\n DrawerLayout.LOCK_MODE_UNLOCKED = 0;\n DrawerLayout.LOCK_MODE_LOCKED_CLOSED = 1;\n DrawerLayout.LOCK_MODE_LOCKED_OPEN = 2;\n DrawerLayout.MIN_DRAWER_MARGIN = 64;\n DrawerLayout.DEFAULT_SCRIM_COLOR = 0x99000000;\n DrawerLayout.PEEK_DELAY = 160;\n DrawerLayout.MIN_FLING_VELOCITY = 400;\n DrawerLayout.ALLOW_EDGE_LOCK = false;\n DrawerLayout.CHILDREN_DISALLOW_INTERCEPT = true;\n DrawerLayout.TOUCH_SLOP_SENSITIVITY = 1.;\n widget.DrawerLayout = DrawerLayout;\n (function (DrawerLayout) {\n class SimpleDrawerListener {\n onDrawerSlide(drawerView, slideOffset) {\n }\n onDrawerOpened(drawerView) {\n }\n onDrawerClosed(drawerView) {\n }\n onDrawerStateChanged(newState) {\n }\n }\n DrawerLayout.SimpleDrawerListener = SimpleDrawerListener;\n class ViewDragCallback extends ViewDragHelper.Callback {\n constructor(arg, gravity) {\n super();\n this.mAbsGravity = 0;\n this.mPeekRunnable = (() => {\n const inner_this = this;\n class _Inner {\n run() {\n inner_this.peekDrawer();\n }\n }\n return new _Inner();\n })();\n this._DrawerLayout_this = arg;\n this.mAbsGravity = gravity;\n }\n setDragger(dragger) {\n this.mDragger = dragger;\n }\n removeCallbacks() {\n this._DrawerLayout_this.removeCallbacks(this.mPeekRunnable);\n }\n tryCaptureView(child, pointerId) {\n return this._DrawerLayout_this.isDrawerView(child) && this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child, this.mAbsGravity) && this._DrawerLayout_this.getDrawerLockMode(child) == DrawerLayout.LOCK_MODE_UNLOCKED;\n }\n onViewDragStateChanged(state) {\n this._DrawerLayout_this.updateDrawerState(this.mAbsGravity, state, this.mDragger.getCapturedView());\n }\n onViewPositionChanged(changedView, left, top, dx, dy) {\n let offset;\n const childWidth = changedView.getWidth();\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(changedView, Gravity.LEFT)) {\n offset = (childWidth + left) / childWidth;\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n offset = (width - left) / childWidth;\n }\n this._DrawerLayout_this.setDrawerViewOffset(changedView, offset);\n changedView.setVisibility(offset == 0 ? DrawerLayout.INVISIBLE : DrawerLayout.VISIBLE);\n this._DrawerLayout_this.invalidate();\n }\n onViewCaptured(capturedChild, activePointerId) {\n const lp = capturedChild.getLayoutParams();\n lp.isPeeking = false;\n this.closeOtherDrawer();\n }\n closeOtherDrawer() {\n const otherGrav = this.mAbsGravity == Gravity.LEFT ? Gravity.RIGHT : Gravity.LEFT;\n const toClose = this._DrawerLayout_this.findDrawerWithGravity(otherGrav);\n if (toClose != null) {\n this._DrawerLayout_this.closeDrawer(toClose);\n }\n }\n onViewReleased(releasedChild, xvel, yvel) {\n const offset = this._DrawerLayout_this.getDrawerViewOffset(releasedChild);\n const childWidth = releasedChild.getWidth();\n let left;\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(releasedChild, Gravity.LEFT)) {\n left = xvel > 0 || xvel == 0 && offset > 0.5 ? 0 : -childWidth;\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n left = xvel < 0 || xvel == 0 && offset > 0.5 ? width - childWidth : width;\n }\n this.mDragger.settleCapturedViewAt(left, releasedChild.getTop());\n this._DrawerLayout_this.invalidate();\n }\n onEdgeTouched(edgeFlags, pointerId) {\n this._DrawerLayout_this.postDelayed(this.mPeekRunnable, DrawerLayout.PEEK_DELAY);\n }\n peekDrawer() {\n let toCapture;\n let childLeft;\n const peekDistance = this.mDragger.getEdgeSize();\n const leftEdge = this.mAbsGravity == Gravity.LEFT;\n if (leftEdge) {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);\n childLeft = (toCapture != null ? -toCapture.getWidth() : 0) + peekDistance;\n }\n else {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);\n childLeft = this._DrawerLayout_this.getWidth() - peekDistance;\n }\n if (toCapture != null && ((leftEdge && toCapture.getLeft() < childLeft) || (!leftEdge && toCapture.getLeft() > childLeft)) && this._DrawerLayout_this.getDrawerLockMode(toCapture) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n const lp = toCapture.getLayoutParams();\n this.mDragger.smoothSlideViewTo(toCapture, childLeft, toCapture.getTop());\n lp.isPeeking = true;\n this._DrawerLayout_this.invalidate();\n this.closeOtherDrawer();\n this._DrawerLayout_this.cancelChildViewTouch();\n }\n }\n onEdgeLock(edgeFlags) {\n if (DrawerLayout.ALLOW_EDGE_LOCK) {\n const drawer = this._DrawerLayout_this.findDrawerWithGravity(this.mAbsGravity);\n if (drawer != null && !this._DrawerLayout_this.isDrawerOpen(drawer)) {\n this._DrawerLayout_this.closeDrawer(drawer);\n }\n return true;\n }\n return false;\n }\n onEdgeDragStarted(edgeFlags, pointerId) {\n let toCapture;\n if ((edgeFlags & ViewDragHelper.EDGE_LEFT) == ViewDragHelper.EDGE_LEFT) {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.LEFT);\n }\n else {\n toCapture = this._DrawerLayout_this.findDrawerWithGravity(Gravity.RIGHT);\n }\n if (toCapture != null && this._DrawerLayout_this.getDrawerLockMode(toCapture) == DrawerLayout.LOCK_MODE_UNLOCKED) {\n this.mDragger.captureChildView(toCapture, pointerId);\n }\n }\n getViewHorizontalDragRange(child) {\n return child.getWidth();\n }\n clampViewPositionHorizontal(child, left, dx) {\n if (this._DrawerLayout_this.checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {\n return Math.max(-child.getWidth(), Math.min(left, 0));\n }\n else {\n const width = this._DrawerLayout_this.getWidth();\n return Math.max(width - child.getWidth(), Math.min(left, width));\n }\n }\n clampViewPositionVertical(child, top, dy) {\n return child.getTop();\n }\n }\n DrawerLayout.ViewDragCallback = ViewDragCallback;\n class LayoutParams extends ViewGroup.MarginLayoutParams {\n constructor(...args) {\n super(...(() => {\n if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement)\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number')\n return [args[0], args[1]];\n else if (typeof args[0] === 'number' && typeof args[1] === 'number')\n return [args[0], args[1]];\n else if (args[0] instanceof DrawerLayout.LayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.MarginLayoutParams)\n return [args[0]];\n else if (args[0] instanceof ViewGroup.LayoutParams)\n return [args[0]];\n })());\n this.gravity = Gravity.NO_GRAVITY;\n this.onScreen = 0;\n if (args[0] instanceof Context && args[1] instanceof HTMLElement) {\n const c = args[0];\n const attrs = args[1];\n const a = c.obtainStyledAttributes(attrs);\n this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), Gravity.NO_GRAVITY);\n a.recycle();\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') {\n this.gravity = args[2];\n }\n else if (typeof args[0] === 'number' && typeof args[1] === 'number') {\n }\n else if (args[0] instanceof DrawerLayout.LayoutParams) {\n const source = args[0];\n this.gravity = source.gravity;\n }\n else if (args[0] instanceof ViewGroup.MarginLayoutParams) {\n }\n else if (args[0] instanceof ViewGroup.LayoutParams) {\n }\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('layout_gravity', {\n setter(param, value, attrBinder) {\n param.gravity = attrBinder.parseGravity(value, param.gravity);\n }, getter(param) {\n return param.gravity;\n }\n });\n }\n }\n DrawerLayout.LayoutParams = LayoutParams;\n })(DrawerLayout = widget.DrawerLayout || (widget.DrawerLayout = {}));\n })(widget = v4.widget || (v4.widget = {}));\n })(v4 = support.v4 || (support.v4 = {}));\n })(support = android.support || (android.support = {}));\n})(android || (android = {}));\nvar com;\n(function (com) {\n var jakewharton;\n (function (jakewharton) {\n var salvage;\n (function (salvage) {\n var SparseArray = android.util.SparseArray;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n class RecyclingPagerAdapter extends PagerAdapter {\n constructor() {\n super();\n this.recycleBin = new RecycleBin();\n this.recycleBin.setViewTypeCount(this.getViewTypeCount());\n }\n notifyDataSetChanged() {\n this.recycleBin.scrapActiveViews();\n super.notifyDataSetChanged();\n }\n instantiateItem(container, position) {\n let viewType = this.getItemViewType(position);\n let view = null;\n if (viewType != RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE) {\n view = this.recycleBin.getScrapView(position, viewType);\n }\n view = this.getView(position, view, container);\n container.addView(view);\n return view;\n }\n destroyItem(container, position, object) {\n let view = object;\n container.removeView(view);\n let viewType = this.getItemViewType(position);\n if (viewType != RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE) {\n this.recycleBin.addScrapView(view, position, viewType);\n }\n }\n isViewFromObject(view, object) {\n return view === object;\n }\n getViewTypeCount() {\n return 1;\n }\n getItemViewType(position) {\n return 0;\n }\n }\n RecyclingPagerAdapter.IGNORE_ITEM_VIEW_TYPE = -1;\n salvage.RecyclingPagerAdapter = RecyclingPagerAdapter;\n class RecycleBin {\n constructor() {\n this.activeViews = [];\n this.activeViewTypes = [];\n this.viewTypeCount = 0;\n }\n setViewTypeCount(viewTypeCount) {\n if (viewTypeCount < 1) {\n throw new Error(\"Can't have a viewTypeCount < 1\");\n }\n let scrapViews = new Array(viewTypeCount);\n for (let i = 0; i < viewTypeCount; i++) {\n scrapViews[i] = new SparseArray();\n }\n this.viewTypeCount = viewTypeCount;\n this.currentScrapViews = scrapViews[0];\n this.scrapViews = scrapViews;\n }\n shouldRecycleViewType(viewType) {\n return viewType >= 0;\n }\n getScrapView(position, viewType) {\n if (this.viewTypeCount == 1) {\n return this.retrieveFromScrap(this.currentScrapViews, position);\n }\n else if (viewType >= 0 && viewType < this.scrapViews.length) {\n return this.retrieveFromScrap(this.scrapViews[viewType], position);\n }\n return null;\n }\n addScrapView(scrap, position, viewType) {\n if (this.viewTypeCount == 1) {\n this.currentScrapViews.put(position, scrap);\n }\n else {\n this.scrapViews[viewType].put(position, scrap);\n }\n }\n scrapActiveViews() {\n const activeViews = this.activeViews;\n const activeViewTypes = this.activeViewTypes;\n const multipleScraps = this.viewTypeCount > 1;\n let scrapViews = this.currentScrapViews;\n const count = activeViews.length;\n for (let i = count - 1; i >= 0; i--) {\n const victim = activeViews[i];\n if (victim != null) {\n let whichScrap = activeViewTypes[i];\n activeViews[i] = null;\n activeViewTypes[i] = -1;\n if (!this.shouldRecycleViewType(whichScrap)) {\n continue;\n }\n if (multipleScraps) {\n scrapViews = this.scrapViews[whichScrap];\n }\n scrapViews.put(i, victim);\n }\n }\n this.pruneScrapViews();\n }\n pruneScrapViews() {\n const maxViews = this.activeViews.length;\n const viewTypeCount = this.viewTypeCount;\n const scrapViews = this.scrapViews;\n for (let i = 0; i < viewTypeCount; ++i) {\n const scrapPile = scrapViews[i];\n let size = scrapPile.size();\n const extras = size - maxViews;\n size--;\n for (let j = 0; j < extras; j++) {\n scrapPile.remove(scrapPile.keyAt(size--));\n }\n }\n }\n retrieveFromScrap(scrapViews, position) {\n let size = scrapViews.size();\n if (size > 0) {\n for (let i = 0; i < size; i++) {\n let fromPosition = scrapViews.keyAt(i);\n let view = scrapViews.get(fromPosition);\n if (fromPosition == position) {\n scrapViews.remove(fromPosition);\n return view;\n }\n }\n let index = size - 1;\n let r = scrapViews.valueAt(index);\n scrapViews.remove(scrapViews.keyAt(index));\n return r;\n }\n else {\n return null;\n }\n }\n }\n })(salvage = jakewharton.salvage || (jakewharton.salvage = {}));\n })(jakewharton = com.jakewharton || (com.jakewharton = {}));\n})(com || (com = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var Log = android.util.Log;\n var MotionEvent = android.view.MotionEvent;\n var ScaleGestureDetector = android.view.ScaleGestureDetector;\n var VelocityTracker = android.view.VelocityTracker;\n var ViewConfiguration = android.view.ViewConfiguration;\n class GestureDetector {\n constructor() {\n this.mActivePointerId = GestureDetector.INVALID_POINTER_ID;\n this.mActivePointerIndex = 0;\n this.mLastTouchX = 0;\n this.mLastTouchY = 0;\n this.mTouchSlop = 0;\n this.mMinimumVelocity = 0;\n const configuration = ViewConfiguration.get();\n this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();\n this.mTouchSlop = configuration.getScaledTouchSlop();\n const inner_this = this;\n let scaleListener = {\n onScale(detector) {\n let scaleFactor = detector.getScaleFactor();\n if (Number.isNaN(scaleFactor) || !Number.isFinite(scaleFactor))\n return false;\n inner_this.mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY());\n return true;\n },\n onScaleBegin(detector) {\n return true;\n },\n onScaleEnd(detector) {\n }\n };\n this.mScaleDetector = new ScaleGestureDetector(scaleListener);\n }\n setOnGestureListener(listener) {\n this.mListener = listener;\n }\n getActiveX(ev) {\n return ev.getX(this.mActivePointerIndex < 0 ? 0 : this.mActivePointerIndex);\n }\n getActiveY(ev) {\n return ev.getY(this.mActivePointerIndex < 0 ? 0 : this.mActivePointerIndex);\n }\n isScaling() {\n return this.mScaleDetector.isInProgress();\n }\n isDragging() {\n return this.mIsDragging;\n }\n onTouchEvent(ev) {\n this.mScaleDetector.onTouchEvent(ev);\n const action = ev.getAction();\n switch (action & MotionEvent.ACTION_MASK) {\n case MotionEvent.ACTION_DOWN:\n this.mActivePointerId = ev.getPointerId(0);\n break;\n case MotionEvent.ACTION_CANCEL:\n case MotionEvent.ACTION_UP:\n this.mActivePointerId = GestureDetector.INVALID_POINTER_ID;\n break;\n case MotionEvent.ACTION_POINTER_UP:\n const pointerIndex = ev.getActionIndex();\n const pointerId = ev.getPointerId(pointerIndex);\n if (pointerId == this.mActivePointerId) {\n const newPointerIndex = pointerIndex == 0 ? 1 : 0;\n this.mActivePointerId = ev.getPointerId(newPointerIndex);\n this.mLastTouchX = ev.getX(newPointerIndex);\n this.mLastTouchY = ev.getY(newPointerIndex);\n }\n break;\n }\n this.mActivePointerIndex = ev.findPointerIndex(this.mActivePointerId != GestureDetector.INVALID_POINTER_ID ? this.mActivePointerId : 0);\n switch (ev.getAction()) {\n case MotionEvent.ACTION_DOWN:\n {\n this.mVelocityTracker = VelocityTracker.obtain();\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.addMovement(ev);\n }\n else {\n Log.i(GestureDetector.LOG_TAG, \"Velocity tracker is null\");\n }\n this.mLastTouchX = this.getActiveX(ev);\n this.mLastTouchY = this.getActiveY(ev);\n this.mIsDragging = false;\n break;\n }\n case MotionEvent.ACTION_MOVE:\n {\n const x = this.getActiveX(ev);\n const y = this.getActiveY(ev);\n const dx = x - this.mLastTouchX, dy = y - this.mLastTouchY;\n if (!this.mIsDragging) {\n this.mIsDragging = Math.sqrt((dx * dx) + (dy * dy)) >= this.mTouchSlop;\n }\n if (this.mIsDragging) {\n this.mListener.onDrag(dx, dy);\n this.mLastTouchX = x;\n this.mLastTouchY = y;\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.addMovement(ev);\n }\n }\n break;\n }\n case MotionEvent.ACTION_CANCEL:\n {\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n case MotionEvent.ACTION_UP:\n {\n if (this.mIsDragging) {\n if (null != this.mVelocityTracker) {\n this.mLastTouchX = this.getActiveX(ev);\n this.mLastTouchY = this.getActiveY(ev);\n this.mVelocityTracker.addMovement(ev);\n this.mVelocityTracker.computeCurrentVelocity(1000);\n const vX = this.mVelocityTracker.getXVelocity(), vY = this.mVelocityTracker.getYVelocity();\n if (Math.max(Math.abs(vX), Math.abs(vY)) >= this.mMinimumVelocity) {\n this.mListener.onFling(this.mLastTouchX, this.mLastTouchY, -vX, -vY);\n }\n }\n }\n if (null != this.mVelocityTracker) {\n this.mVelocityTracker.recycle();\n this.mVelocityTracker = null;\n }\n break;\n }\n }\n return true;\n }\n }\n GestureDetector.LOG_TAG = \"CupcakeGestureDetector\";\n GestureDetector.INVALID_POINTER_ID = -1;\n photoview.GestureDetector = GestureDetector;\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var IPhotoView;\n (function (IPhotoView) {\n IPhotoView.DEFAULT_MAX_SCALE = 3.0;\n IPhotoView.DEFAULT_MID_SCALE = 1.75;\n IPhotoView.DEFAULT_MIN_SCALE = 1.0;\n IPhotoView.DEFAULT_ZOOM_DURATION = 200;\n function isImpl(obj) {\n if (!obj)\n return false;\n return obj['canZoom'] &&\n obj['getDisplayRect'] &&\n obj['setDisplayMatrix'] &&\n obj['getDisplayMatrix'] &&\n obj['getMinScale'] &&\n obj['getMinimumScale'] &&\n obj['getMidScale'] &&\n obj['getMediumScale'] &&\n obj['getMaxScale'] &&\n obj['getMaximumScale'] &&\n obj['getScale'] &&\n obj['getScaleType'] &&\n obj['setAllowParentInterceptOnEdge'] &&\n obj['setMinScale'] &&\n obj['setMinimumScale'] &&\n obj['setMidScale'] &&\n obj['setMediumScale'] &&\n obj['setMaxScale'] &&\n obj['setMaximumScale'] &&\n obj['setScaleLevels'] &&\n obj['setOnLongClickListener'] &&\n obj['setOnMatrixChangeListener'] &&\n obj['setOnPhotoTapListener'] &&\n obj['getOnPhotoTapListener'] &&\n obj['setOnViewTapListener'] &&\n obj['setRotationTo'] &&\n obj['setRotationBy'] &&\n obj['getOnViewTapListener'] &&\n obj['setScale'] &&\n obj['setScale'] &&\n obj['setScale'] &&\n obj['setScaleType'] &&\n obj['setZoomable'] &&\n obj['setPhotoViewRotation'] &&\n obj['getVisibleRectangleBitmap'] &&\n obj['setZoomTransitionDuration'] &&\n obj['getIPhotoViewImplementation'] &&\n obj['setOnDoubleTapListener'] &&\n obj['setOnScaleChangeListener'];\n }\n IPhotoView.isImpl = isImpl;\n })(IPhotoView = photoview.IPhotoView || (photoview.IPhotoView = {}));\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var Matrix = android.graphics.Matrix;\n var ScaleToFit = android.graphics.Matrix.ScaleToFit;\n var RectF = android.graphics.RectF;\n var Log = android.util.Log;\n var AccelerateDecelerateInterpolator = android.view.animation.AccelerateDecelerateInterpolator;\n var ScaleType = android.widget.ImageView.ScaleType;\n var OverScroller = android.widget.OverScroller;\n var WeakReference = java.lang.ref.WeakReference;\n var MotionEvent = android.view.MotionEvent;\n const ACTION_CANCEL = MotionEvent.ACTION_CANCEL;\n const ACTION_DOWN = MotionEvent.ACTION_DOWN;\n const ACTION_UP = MotionEvent.ACTION_UP;\n var System = java.lang.System;\n var GestureDetector = uk.co.senab.photoview.GestureDetector;\n var IPhotoView = uk.co.senab.photoview.IPhotoView;\n class PhotoViewAttacher {\n constructor(imageView, zoomable = true) {\n this.ZOOM_DURATION = IPhotoView.DEFAULT_ZOOM_DURATION;\n this.mMinScale = IPhotoView.DEFAULT_MIN_SCALE;\n this.mMidScale = IPhotoView.DEFAULT_MID_SCALE;\n this.mMaxScale = IPhotoView.DEFAULT_MAX_SCALE;\n this.mAllowParentInterceptOnEdge = true;\n this.mBlockParentIntercept = false;\n this.mBaseMatrix = new Matrix();\n this.mDrawMatrix = new Matrix();\n this.mSuppMatrix = new Matrix();\n this.mDisplayRect = new RectF();\n this.mMatrixValues = androidui.util.ArrayCreator.newNumberArray(9);\n this.mIvTop = 0;\n this.mIvRight = 0;\n this.mIvBottom = 0;\n this.mIvLeft = 0;\n this.mScrollEdge = PhotoViewAttacher.EDGE_BOTH;\n this.mScaleType = ScaleType.FIT_CENTER;\n this.mImageView = new WeakReference(imageView);\n imageView.setOnTouchListener(this);\n let observer = imageView.getViewTreeObserver();\n if (null != observer)\n observer.addOnGlobalLayoutListener(this);\n PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);\n this.mScaleDragDetector = new GestureDetector();\n this.mScaleDragDetector.setOnGestureListener(this);\n this.mGestureDetector = new android.view.GestureDetector((() => {\n const inner_this = this;\n class _Inner extends android.view.GestureDetector.SimpleOnGestureListener {\n onLongPress(e) {\n if (null != inner_this.mLongClickListener) {\n inner_this.mLongClickListener.onLongClick(inner_this.getImageView());\n }\n }\n }\n return new _Inner();\n })());\n this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));\n this.setZoomable(zoomable);\n }\n static checkZoomLevels(minZoom, midZoom, maxZoom) {\n if (minZoom >= midZoom) {\n throw Error(`new IllegalArgumentException(\"MinZoom has to be less than MidZoom\")`);\n }\n else if (midZoom >= maxZoom) {\n throw Error(`new IllegalArgumentException(\"MidZoom has to be less than MaxZoom\")`);\n }\n }\n static hasDrawable(imageView) {\n return null != imageView && null != imageView.getDrawable();\n }\n static isSupportedScaleType(scaleType) {\n if (null == scaleType) {\n return false;\n }\n switch (scaleType) {\n case ScaleType.MATRIX:\n throw Error(`new IllegalArgumentException(ScaleType.MATRIX is not supported in PhotoView)`);\n default:\n return true;\n }\n }\n static setImageViewScaleTypeMatrix(imageView) {\n if (null != imageView && !(IPhotoView.isImpl(imageView))) {\n if (ScaleType.MATRIX != (imageView.getScaleType())) {\n imageView.setScaleType(ScaleType.MATRIX);\n }\n }\n }\n setOnDoubleTapListener(newOnDoubleTapListener) {\n if (newOnDoubleTapListener != null) {\n this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener);\n }\n else {\n this.mGestureDetector.setOnDoubleTapListener(new PhotoViewAttacher.DefaultOnDoubleTapListener(this));\n }\n }\n setOnScaleChangeListener(onScaleChangeListener) {\n this.mScaleChangeListener = onScaleChangeListener;\n }\n canZoom() {\n return this.mZoomEnabled;\n }\n cleanup() {\n if (null == this.mImageView) {\n return;\n }\n const imageView = this.mImageView.get();\n if (null != imageView) {\n let observer = imageView.getViewTreeObserver();\n if (null != observer && observer.isAlive()) {\n observer.removeGlobalOnLayoutListener(this);\n }\n imageView.setOnTouchListener(null);\n this.cancelFling();\n }\n if (null != this.mGestureDetector) {\n this.mGestureDetector.setOnDoubleTapListener(null);\n }\n this.mMatrixChangeListener = null;\n this.mPhotoTapListener = null;\n this.mViewTapListener = null;\n this.mImageView = null;\n }\n getDisplayRect() {\n this.checkMatrixBounds();\n return this._getDisplayRect(this.getDrawMatrix());\n }\n setDisplayMatrix(finalMatrix) {\n if (finalMatrix == null)\n throw Error(`new IllegalArgumentException(\"Matrix cannot be null\")`);\n let imageView = this.getImageView();\n if (null == imageView)\n return false;\n if (null == imageView.getDrawable())\n return false;\n this.mSuppMatrix.set(finalMatrix);\n this.setImageViewMatrix(this.getDrawMatrix());\n this.checkMatrixBounds();\n return true;\n }\n setPhotoViewRotation(degrees) {\n this.mSuppMatrix.setRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n setRotationTo(degrees) {\n this.mSuppMatrix.setRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n setRotationBy(degrees) {\n this.mSuppMatrix.postRotate(degrees % 360);\n this.checkAndDisplayMatrix();\n }\n getImageView() {\n let imageView = null;\n if (null != this.mImageView) {\n imageView = this.mImageView.get();\n }\n if (null == imageView) {\n this.cleanup();\n if (PhotoViewAttacher.DEBUG)\n Log.i(PhotoViewAttacher.LOG_TAG, \"ImageView no longer exists. You should not use this PhotoViewAttacher any more.\");\n }\n return imageView;\n }\n getMinScale() {\n return this.getMinimumScale();\n }\n getMinimumScale() {\n return this.mMinScale;\n }\n getMidScale() {\n return this.getMediumScale();\n }\n getMediumScale() {\n return this.mMidScale;\n }\n getMaxScale() {\n return this.getMaximumScale();\n }\n getMaximumScale() {\n return this.mMaxScale;\n }\n getScale() {\n return Math.sqrt(Math.pow(this.getValue(this.mSuppMatrix, Matrix.MSCALE_X), 2) + Math.pow(this.getValue(this.mSuppMatrix, Matrix.MSKEW_Y), 2));\n }\n getScaleType() {\n return this.mScaleType;\n }\n onDrag(dx, dy) {\n if (this.mScaleDragDetector.isScaling()) {\n return;\n }\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, `onDrag: dx: ${dx.toFixed(2)}. dy: ${dy.toFixed(2)}`);\n }\n let imageView = this.getImageView();\n this.mSuppMatrix.postTranslate(dx, dy);\n this.checkAndDisplayMatrix();\n let parent = imageView.getParent();\n if (this.mAllowParentInterceptOnEdge && !this.mScaleDragDetector.isScaling() && !this.mBlockParentIntercept) {\n if (this.mScrollEdge == PhotoViewAttacher.EDGE_BOTH || (this.mScrollEdge == PhotoViewAttacher.EDGE_LEFT && dx >= 1) || (this.mScrollEdge == PhotoViewAttacher.EDGE_RIGHT && dx <= -1)) {\n if (null != parent)\n parent.requestDisallowInterceptTouchEvent(false);\n }\n }\n else {\n if (null != parent) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n }\n }\n onFling(startX, startY, velocityX, velocityY) {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"onFling. sX: \" + startX + \" sY: \" + startY + \" Vx: \" + velocityX + \" Vy: \" + velocityY);\n }\n let imageView = this.getImageView();\n this.mCurrentFlingRunnable = new PhotoViewAttacher.FlingRunnable(this);\n this.mCurrentFlingRunnable.fling(this.getImageViewWidth(imageView), this.getImageViewHeight(imageView), Math.floor(velocityX), Math.floor(velocityY));\n imageView.post(this.mCurrentFlingRunnable);\n }\n onGlobalLayout() {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (this.mZoomEnabled) {\n const top = imageView.getTop();\n const right = imageView.getRight();\n const bottom = imageView.getBottom();\n const left = imageView.getLeft();\n if (top != this.mIvTop || bottom != this.mIvBottom || left != this.mIvLeft || right != this.mIvRight) {\n this.updateBaseMatrix(imageView.getDrawable());\n this.mIvTop = top;\n this.mIvRight = right;\n this.mIvBottom = bottom;\n this.mIvLeft = left;\n }\n }\n else {\n this.updateBaseMatrix(imageView.getDrawable());\n }\n }\n }\n onScale(scaleFactor, focusX, focusY) {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, `onScale: scale: ${scaleFactor.toFixed(2)}. fX: ${focusX.toFixed(2)}. fY: ${focusY.toFixed(2)}f`);\n }\n if (this.getScale() < this.mMaxScale || scaleFactor < 1) {\n if (null != this.mScaleChangeListener) {\n this.mScaleChangeListener.onScaleChange(scaleFactor, focusX, focusY);\n }\n this.mSuppMatrix.postScale(scaleFactor, scaleFactor, focusX, focusY);\n this.checkAndDisplayMatrix();\n }\n }\n onTouch(v, ev) {\n let handled = false;\n if (this.mZoomEnabled && PhotoViewAttacher.hasDrawable(v)) {\n let parent = v.getParent();\n switch (ev.getAction()) {\n case ACTION_DOWN:\n if (null != parent) {\n parent.requestDisallowInterceptTouchEvent(true);\n }\n else {\n Log.i(PhotoViewAttacher.LOG_TAG, \"onTouch getParent() returned null\");\n }\n this.cancelFling();\n break;\n case ACTION_CANCEL:\n case ACTION_UP:\n if (this.getScale() < this.mMinScale) {\n let rect = this.getDisplayRect();\n if (null != rect) {\n v.post(new PhotoViewAttacher.AnimatedZoomRunnable(this, this.getScale(), this.mMinScale, rect.centerX(), rect.centerY()));\n handled = true;\n }\n }\n break;\n }\n if (null != this.mScaleDragDetector) {\n let wasScaling = this.mScaleDragDetector.isScaling();\n let wasDragging = this.mScaleDragDetector.isDragging();\n handled = this.mScaleDragDetector.onTouchEvent(ev);\n let didntScale = !wasScaling && !this.mScaleDragDetector.isScaling();\n let didntDrag = !wasDragging && !this.mScaleDragDetector.isDragging();\n this.mBlockParentIntercept = didntScale && didntDrag;\n }\n if (null != this.mGestureDetector && this.mGestureDetector.onTouchEvent(ev)) {\n handled = true;\n }\n }\n return handled;\n }\n setAllowParentInterceptOnEdge(allow) {\n this.mAllowParentInterceptOnEdge = allow;\n }\n setMinScale(minScale) {\n this.setMinimumScale(minScale);\n }\n setMinimumScale(minimumScale) {\n PhotoViewAttacher.checkZoomLevels(minimumScale, this.mMidScale, this.mMaxScale);\n this.mMinScale = minimumScale;\n }\n setMidScale(midScale) {\n this.setMediumScale(midScale);\n }\n setMediumScale(mediumScale) {\n PhotoViewAttacher.checkZoomLevels(this.mMinScale, mediumScale, this.mMaxScale);\n this.mMidScale = mediumScale;\n }\n setMaxScale(maxScale) {\n this.setMaximumScale(maxScale);\n }\n setMaximumScale(maximumScale) {\n PhotoViewAttacher.checkZoomLevels(this.mMinScale, this.mMidScale, maximumScale);\n this.mMaxScale = maximumScale;\n }\n setScaleLevels(minimumScale, mediumScale, maximumScale) {\n PhotoViewAttacher.checkZoomLevels(minimumScale, mediumScale, maximumScale);\n this.mMinScale = minimumScale;\n this.mMidScale = mediumScale;\n this.mMaxScale = maximumScale;\n }\n setOnLongClickListener(listener) {\n this.mLongClickListener = listener;\n }\n setOnMatrixChangeListener(listener) {\n this.mMatrixChangeListener = listener;\n }\n setOnPhotoTapListener(listener) {\n this.mPhotoTapListener = listener;\n }\n getOnPhotoTapListener() {\n return this.mPhotoTapListener;\n }\n setOnViewTapListener(listener) {\n this.mViewTapListener = listener;\n }\n getOnViewTapListener() {\n return this.mViewTapListener;\n }\n setScale(...args) {\n if (args.length >= 3) {\n this.setScale_4(...args);\n }\n else {\n this.setScale_2(...args);\n }\n }\n setScale_2(scale, animate = false) {\n let imageView = this.getImageView();\n if (null != imageView) {\n this.setScale(scale, (imageView.getRight()) / 2, (imageView.getBottom()) / 2, animate);\n }\n }\n setScale_4(scale, focalX, focalY, animate = false) {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (scale < this.mMinScale || scale > this.mMaxScale) {\n Log.i(PhotoViewAttacher.LOG_TAG, \"Scale must be within the range of minScale and maxScale\");\n return;\n }\n if (animate) {\n imageView.post(new PhotoViewAttacher.AnimatedZoomRunnable(this, this.getScale(), scale, focalX, focalY));\n }\n else {\n this.mSuppMatrix.setScale(scale, scale, focalX, focalY);\n this.checkAndDisplayMatrix();\n }\n }\n }\n setScaleType(scaleType) {\n if (PhotoViewAttacher.isSupportedScaleType(scaleType) && scaleType != this.mScaleType) {\n this.mScaleType = scaleType;\n this.update();\n }\n }\n setZoomable(zoomable) {\n this.mZoomEnabled = zoomable;\n this.update();\n }\n update() {\n let imageView = this.getImageView();\n if (null != imageView) {\n if (this.mZoomEnabled) {\n PhotoViewAttacher.setImageViewScaleTypeMatrix(imageView);\n this.updateBaseMatrix(imageView.getDrawable());\n }\n else {\n this.resetMatrix();\n }\n }\n }\n getDisplayMatrix() {\n return new Matrix(this.getDrawMatrix());\n }\n getDrawMatrix() {\n this.mDrawMatrix.set(this.mBaseMatrix);\n this.mDrawMatrix.postConcat(this.mSuppMatrix);\n return this.mDrawMatrix;\n }\n cancelFling() {\n if (null != this.mCurrentFlingRunnable) {\n this.mCurrentFlingRunnable.cancelFling();\n this.mCurrentFlingRunnable = null;\n }\n }\n checkAndDisplayMatrix() {\n if (this.checkMatrixBounds()) {\n this.setImageViewMatrix(this.getDrawMatrix());\n }\n }\n checkImageViewScaleType() {\n let imageView = this.getImageView();\n if (null != imageView && !(IPhotoView.isImpl(imageView))) {\n if (ScaleType.MATRIX != (imageView.getScaleType())) {\n throw Error(`new IllegalStateException(\"The ImageView's ScaleType has been changed since attaching a PhotoViewAttacher\")`);\n }\n }\n }\n checkMatrixBounds() {\n const imageView = this.getImageView();\n if (null == imageView) {\n return false;\n }\n const rect = this._getDisplayRect(this.getDrawMatrix());\n if (null == rect) {\n return false;\n }\n const height = rect.height(), width = rect.width();\n let deltaX = 0, deltaY = 0;\n const viewHeight = this.getImageViewHeight(imageView);\n if (height <= viewHeight) {\n switch (this.mScaleType) {\n case ScaleType.FIT_START:\n deltaY = -rect.top;\n break;\n case ScaleType.FIT_END:\n deltaY = viewHeight - height - rect.top;\n break;\n default:\n deltaY = (viewHeight - height) / 2 - rect.top;\n break;\n }\n }\n else if (rect.top > 0) {\n deltaY = -rect.top;\n }\n else if (rect.bottom < viewHeight) {\n deltaY = viewHeight - rect.bottom;\n }\n const viewWidth = this.getImageViewWidth(imageView);\n if (width <= viewWidth) {\n switch (this.mScaleType) {\n case ScaleType.FIT_START:\n deltaX = -rect.left;\n break;\n case ScaleType.FIT_END:\n deltaX = viewWidth - width - rect.left;\n break;\n default:\n deltaX = (viewWidth - width) / 2 - rect.left;\n break;\n }\n this.mScrollEdge = PhotoViewAttacher.EDGE_BOTH;\n }\n else if (rect.left > 0) {\n this.mScrollEdge = PhotoViewAttacher.EDGE_LEFT;\n deltaX = -rect.left;\n }\n else if (rect.right < viewWidth) {\n deltaX = viewWidth - rect.right;\n this.mScrollEdge = PhotoViewAttacher.EDGE_RIGHT;\n }\n else {\n this.mScrollEdge = PhotoViewAttacher.EDGE_NONE;\n }\n this.mSuppMatrix.postTranslate(deltaX, deltaY);\n return true;\n }\n _getDisplayRect(matrix) {\n let imageView = this.getImageView();\n if (null != imageView) {\n let d = imageView.getDrawable();\n if (null != d) {\n this.mDisplayRect.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());\n matrix.mapRect(this.mDisplayRect);\n return this.mDisplayRect;\n }\n }\n return null;\n }\n getVisibleRectangleBitmap() {\n let imageView = this.getImageView();\n return imageView == null ? null : imageView.getDrawingCache();\n }\n setZoomTransitionDuration(milliseconds) {\n if (milliseconds < 0)\n milliseconds = IPhotoView.DEFAULT_ZOOM_DURATION;\n this.ZOOM_DURATION = milliseconds;\n }\n getIPhotoViewImplementation() {\n return this;\n }\n getValue(matrix, whichValue) {\n matrix.getValues(this.mMatrixValues);\n return this.mMatrixValues[whichValue];\n }\n resetMatrix() {\n this.mSuppMatrix.reset();\n this.setImageViewMatrix(this.getDrawMatrix());\n this.checkMatrixBounds();\n }\n setImageViewMatrix(matrix) {\n let imageView = this.getImageView();\n if (null != imageView) {\n this.checkImageViewScaleType();\n imageView.setImageMatrix(matrix);\n if (null != this.mMatrixChangeListener) {\n let displayRect = this._getDisplayRect(matrix);\n if (null != displayRect) {\n this.mMatrixChangeListener.onMatrixChanged(displayRect);\n }\n }\n }\n }\n updateBaseMatrix(d) {\n let imageView = this.getImageView();\n if (null == imageView || null == d) {\n return;\n }\n const viewWidth = this.getImageViewWidth(imageView);\n const viewHeight = this.getImageViewHeight(imageView);\n const drawableWidth = d.getIntrinsicWidth();\n const drawableHeight = d.getIntrinsicHeight();\n this.mBaseMatrix.reset();\n const widthScale = viewWidth / drawableWidth;\n const heightScale = viewHeight / drawableHeight;\n if (this.mScaleType == ScaleType.CENTER) {\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth) / 2, (viewHeight - drawableHeight) / 2);\n }\n else if (this.mScaleType == ScaleType.CENTER_CROP) {\n let scale = Math.max(widthScale, heightScale);\n this.mBaseMatrix.postScale(scale, scale);\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight * scale) / 2);\n }\n else if (this.mScaleType == ScaleType.CENTER_INSIDE) {\n let scale = Math.min(1.0, Math.min(widthScale, heightScale));\n this.mBaseMatrix.postScale(scale, scale);\n this.mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight * scale) / 2);\n }\n else {\n let mTempSrc = new RectF(0, 0, drawableWidth, drawableHeight);\n let mTempDst = new RectF(0, 0, viewWidth, viewHeight);\n switch (this.mScaleType) {\n case ScaleType.FIT_CENTER:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.CENTER);\n break;\n case ScaleType.FIT_START:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.START);\n break;\n case ScaleType.FIT_END:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.END);\n break;\n case ScaleType.FIT_XY:\n this.mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.FILL);\n break;\n default:\n break;\n }\n }\n this.resetMatrix();\n }\n getImageViewWidth(imageView) {\n if (null == imageView)\n return 0;\n return imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight();\n }\n getImageViewHeight(imageView) {\n if (null == imageView)\n return 0;\n return imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom();\n }\n }\n PhotoViewAttacher.LOG_TAG = \"PhotoViewAttacher\";\n PhotoViewAttacher.DEBUG = Log.View_DBG;\n PhotoViewAttacher.sInterpolator = new AccelerateDecelerateInterpolator();\n PhotoViewAttacher.EDGE_NONE = -1;\n PhotoViewAttacher.EDGE_LEFT = 0;\n PhotoViewAttacher.EDGE_RIGHT = 1;\n PhotoViewAttacher.EDGE_BOTH = 2;\n photoview.PhotoViewAttacher = PhotoViewAttacher;\n (function (PhotoViewAttacher) {\n class AnimatedZoomRunnable {\n constructor(arg, currentZoom, targetZoom, focalX, focalY) {\n this.mFocalX = 0;\n this.mFocalY = 0;\n this.mStartTime = 0;\n this.mZoomStart = 0;\n this.mZoomEnd = 0;\n this._PhotoViewAttacher_this = arg;\n this.mFocalX = focalX;\n this.mFocalY = focalY;\n this.mStartTime = System.currentTimeMillis();\n this.mZoomStart = currentZoom;\n this.mZoomEnd = targetZoom;\n }\n run() {\n let imageView = this._PhotoViewAttacher_this.getImageView();\n if (imageView == null) {\n return;\n }\n let t = this.interpolate();\n let scale = this.mZoomStart + t * (this.mZoomEnd - this.mZoomStart);\n let deltaScale = scale / this._PhotoViewAttacher_this.getScale();\n this._PhotoViewAttacher_this.onScale(deltaScale, this.mFocalX, this.mFocalY);\n if (t < 1) {\n imageView.postOnAnimation(this);\n }\n }\n interpolate() {\n let t = 1 * (System.currentTimeMillis() - this.mStartTime) / this._PhotoViewAttacher_this.ZOOM_DURATION;\n t = Math.min(1, t);\n t = PhotoViewAttacher.sInterpolator.getInterpolation(t);\n return t;\n }\n }\n PhotoViewAttacher.AnimatedZoomRunnable = AnimatedZoomRunnable;\n class FlingRunnable {\n constructor(arg) {\n this.mCurrentX = 0;\n this.mCurrentY = 0;\n this._PhotoViewAttacher_this = arg;\n this.mScroller = new OverScroller();\n }\n cancelFling() {\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"Cancel Fling\");\n }\n this.mScroller.forceFinished(true);\n }\n fling(viewWidth, viewHeight, velocityX, velocityY) {\n const rect = this._PhotoViewAttacher_this.getDisplayRect();\n if (null == rect) {\n return;\n }\n const startX = Math.round(-rect.left);\n let minX, maxX, minY, maxY;\n if (viewWidth < rect.width()) {\n minX = 0;\n maxX = Math.round(rect.width() - viewWidth);\n }\n else {\n minX = maxX = startX;\n }\n const startY = Math.round(-rect.top);\n if (viewHeight < rect.height()) {\n minY = 0;\n maxY = Math.round(rect.height() - viewHeight);\n }\n else {\n minY = maxY = startY;\n }\n this.mCurrentX = startX;\n this.mCurrentY = startY;\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"fling. StartX:\" + startX + \" StartY:\" + startY + \" MaxX:\" + maxX + \" MaxY:\" + maxY);\n }\n if (startX != maxX || startY != maxY) {\n this.mScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, 0, 0);\n }\n }\n run() {\n if (this.mScroller.isFinished()) {\n return;\n }\n let imageView = this._PhotoViewAttacher_this.getImageView();\n if (null != imageView && this.mScroller.computeScrollOffset()) {\n const newX = this.mScroller.getCurrX();\n const newY = this.mScroller.getCurrY();\n if (PhotoViewAttacher.DEBUG) {\n Log.d(PhotoViewAttacher.LOG_TAG, \"fling run(). CurrentX:\" + this.mCurrentX + \" CurrentY:\" + this.mCurrentY + \" NewX:\" + newX + \" NewY:\" + newY);\n }\n this._PhotoViewAttacher_this.mSuppMatrix.postTranslate(this.mCurrentX - newX, this.mCurrentY - newY);\n this._PhotoViewAttacher_this.setImageViewMatrix(this._PhotoViewAttacher_this.getDrawMatrix());\n this.mCurrentX = newX;\n this.mCurrentY = newY;\n imageView.postOnAnimation(this);\n }\n }\n }\n PhotoViewAttacher.FlingRunnable = FlingRunnable;\n class DefaultOnDoubleTapListener {\n constructor(photoViewAttacher) {\n this.setPhotoViewAttacher(photoViewAttacher);\n }\n setPhotoViewAttacher(newPhotoViewAttacher) {\n this.photoViewAttacher = newPhotoViewAttacher;\n }\n onSingleTapConfirmed(e) {\n if (this.photoViewAttacher == null)\n return false;\n let imageView = this.photoViewAttacher.getImageView();\n if (null != this.photoViewAttacher.getOnPhotoTapListener()) {\n const displayRect = this.photoViewAttacher.getDisplayRect();\n if (null != displayRect) {\n const x = e.getX(), y = e.getY();\n if (displayRect.contains(x, y)) {\n let xResult = (x - displayRect.left) / displayRect.width();\n let yResult = (y - displayRect.top) / displayRect.height();\n this.photoViewAttacher.getOnPhotoTapListener().onPhotoTap(imageView, xResult, yResult);\n return true;\n }\n }\n }\n if (null != this.photoViewAttacher.getOnViewTapListener()) {\n this.photoViewAttacher.getOnViewTapListener().onViewTap(imageView, e.getX(), e.getY());\n }\n return false;\n }\n onDoubleTap(ev) {\n if (this.photoViewAttacher == null)\n return false;\n try {\n let scale = this.photoViewAttacher.getScale();\n let x = ev.getX();\n let y = ev.getY();\n if (scale < this.photoViewAttacher.getMediumScale()) {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMediumScale(), x, y, true);\n }\n else if (scale >= this.photoViewAttacher.getMediumScale() && scale < this.photoViewAttacher.getMaximumScale()) {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMaximumScale(), x, y, true);\n }\n else {\n this.photoViewAttacher.setScale(this.photoViewAttacher.getMinimumScale(), x, y, true);\n }\n }\n catch (e) {\n }\n return true;\n }\n onDoubleTapEvent(e) {\n return false;\n }\n }\n PhotoViewAttacher.DefaultOnDoubleTapListener = DefaultOnDoubleTapListener;\n })(PhotoViewAttacher = photoview.PhotoViewAttacher || (photoview.PhotoViewAttacher = {}));\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar uk;\n(function (uk) {\n var co;\n (function (co) {\n var senab;\n (function (senab) {\n var photoview;\n (function (photoview) {\n var ImageView = android.widget.ImageView;\n var PhotoViewAttacher = uk.co.senab.photoview.PhotoViewAttacher;\n var ScaleType = ImageView.ScaleType;\n class PhotoView extends ImageView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n super.setScaleType(ScaleType.MATRIX);\n this.init();\n }\n init() {\n if (null == this.mAttacher || null == this.mAttacher.getImageView()) {\n this.mAttacher = new PhotoViewAttacher(this);\n }\n if (null != this.mPendingScaleType) {\n this.setScaleType(this.mPendingScaleType);\n this.mPendingScaleType = null;\n }\n }\n setPhotoViewRotation(rotationDegree) {\n this.mAttacher.setRotationTo(rotationDegree);\n }\n setRotationTo(rotationDegree) {\n this.mAttacher.setRotationTo(rotationDegree);\n }\n setRotationBy(rotationDegree) {\n this.mAttacher.setRotationBy(rotationDegree);\n }\n canZoom() {\n return this.mAttacher.canZoom();\n }\n getDisplayRect() {\n return this.mAttacher.getDisplayRect();\n }\n getDisplayMatrix() {\n return this.mAttacher.getDisplayMatrix();\n }\n setDisplayMatrix(finalRectangle) {\n return this.mAttacher.setDisplayMatrix(finalRectangle);\n }\n getMinScale() {\n return this.getMinimumScale();\n }\n getMinimumScale() {\n return this.mAttacher.getMinimumScale();\n }\n getMidScale() {\n return this.getMediumScale();\n }\n getMediumScale() {\n return this.mAttacher.getMediumScale();\n }\n getMaxScale() {\n return this.getMaximumScale();\n }\n getMaximumScale() {\n return this.mAttacher.getMaximumScale();\n }\n getScale() {\n return this.mAttacher.getScale();\n }\n getScaleType() {\n return this.mAttacher.getScaleType();\n }\n setAllowParentInterceptOnEdge(allow) {\n this.mAttacher.setAllowParentInterceptOnEdge(allow);\n }\n setMinScale(minScale) {\n this.setMinimumScale(minScale);\n }\n setMinimumScale(minimumScale) {\n this.mAttacher.setMinimumScale(minimumScale);\n }\n setMidScale(midScale) {\n this.setMediumScale(midScale);\n }\n setMediumScale(mediumScale) {\n this.mAttacher.setMediumScale(mediumScale);\n }\n setMaxScale(maxScale) {\n this.setMaximumScale(maxScale);\n }\n setMaximumScale(maximumScale) {\n this.mAttacher.setMaximumScale(maximumScale);\n }\n setScaleLevels(minimumScale, mediumScale, maximumScale) {\n this.mAttacher.setScaleLevels(minimumScale, mediumScale, maximumScale);\n }\n setImageDrawable(drawable) {\n super.setImageDrawable(drawable);\n if (null != this.mAttacher) {\n this.mAttacher.update();\n }\n }\n setImageURI(uri) {\n super.setImageURI(uri);\n }\n resizeFromDrawable() {\n let change = super.resizeFromDrawable();\n if (change && null != this.mAttacher) {\n this.mAttacher.update();\n }\n return change;\n }\n setOnMatrixChangeListener(listener) {\n this.mAttacher.setOnMatrixChangeListener(listener);\n }\n setOnLongClickListener(l) {\n this.mAttacher.setOnLongClickListener(l);\n }\n setOnPhotoTapListener(listener) {\n this.mAttacher.setOnPhotoTapListener(listener);\n }\n getOnPhotoTapListener() {\n return this.mAttacher.getOnPhotoTapListener();\n }\n setOnViewTapListener(listener) {\n this.mAttacher.setOnViewTapListener(listener);\n }\n getOnViewTapListener() {\n return this.mAttacher.getOnViewTapListener();\n }\n setScale(...args) {\n this.mAttacher.setScale(...args);\n }\n setScaleType(scaleType) {\n if (null != this.mAttacher) {\n this.mAttacher.setScaleType(scaleType);\n }\n else {\n this.mPendingScaleType = scaleType;\n }\n }\n setZoomable(zoomable) {\n this.mAttacher.setZoomable(zoomable);\n }\n getVisibleRectangleBitmap() {\n return this.mAttacher.getVisibleRectangleBitmap();\n }\n setZoomTransitionDuration(milliseconds) {\n this.mAttacher.setZoomTransitionDuration(milliseconds);\n }\n getIPhotoViewImplementation() {\n return this.mAttacher;\n }\n setOnDoubleTapListener(newOnDoubleTapListener) {\n this.mAttacher.setOnDoubleTapListener(newOnDoubleTapListener);\n }\n setOnScaleChangeListener(onScaleChangeListener) {\n this.mAttacher.setOnScaleChangeListener(onScaleChangeListener);\n }\n onDetachedFromWindow() {\n this.mAttacher.cleanup();\n super.onDetachedFromWindow();\n }\n onAttachedToWindow() {\n this.init();\n super.onAttachedToWindow();\n }\n }\n photoview.PhotoView = PhotoView;\n })(photoview = senab.photoview || (senab.photoview = {}));\n })(senab = co.senab || (co.senab = {}));\n })(co = uk.co || (uk.co = {}));\n})(uk || (uk = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n var View = android.view.View;\n var FrameLayout = android.widget.FrameLayout;\n class ActionBar extends FrameLayout {\n constructor(context, bindElement, defStyle = android.R.attr.actionBarStyle) {\n super(context, bindElement, defStyle);\n context.getLayoutInflater().inflate(android.R.layout.action_bar, this);\n this.mCenterLayout = this.findViewById('action_bar_center_layout');\n this.mTitleView = this.findViewById('action_bar_title');\n this.mSubTitleView = this.findViewById('action_bar_sub_title');\n this.mActionLeft = this.findViewById('action_bar_left');\n this.mActionRight = this.findViewById('action_bar_right');\n }\n setCustomView(view, layoutParams) {\n this.mCenterLayout.removeAllViews();\n this.mCustomView = view;\n if (layoutParams)\n this.mCenterLayout.addView(view, layoutParams);\n else\n this.mCenterLayout.addView(view);\n }\n setIcon(icon) {\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n let drawables = this.mTitleView.getCompoundDrawables();\n this.mTitleView.setCompoundDrawables(icon, drawables[1], drawables[2], drawables[3]);\n }\n setLogo(logo) {\n this.setIcon(logo);\n }\n setTitle(title) {\n this.mTitleView.setText(title);\n }\n setSubtitle(subtitle) {\n this.mSubTitleView.setText(subtitle);\n let empty = subtitle == null || subtitle.length == 0;\n this.mSubTitleView.setVisibility(empty ? View.GONE : View.VISIBLE);\n }\n getCustomView() {\n return this.mCustomView;\n }\n getTitle() {\n return this.mTitleView.getText().toString();\n }\n getSubtitle() {\n return this.mSubTitleView.getText().toString();\n }\n show() {\n this.setVisibility(View.VISIBLE);\n }\n hide() {\n this.setVisibility(View.GONE);\n }\n isShowing() {\n return this.isShown();\n }\n setActionLeft(name, icon, listener) {\n this.mActionLeft.setText(name);\n this.mActionLeft.setVisibility(View.VISIBLE);\n let drawables = this.mActionLeft.getCompoundDrawables();\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n this.mActionLeft.setCompoundDrawables(icon, drawables[1], drawables[2], drawables[3]);\n this.mActionLeft.setOnClickListener(listener);\n }\n hideActionLeft() {\n this.mActionLeft.setVisibility(View.GONE);\n }\n setActionRight(name, icon, listener) {\n this.mActionRight.setText(name);\n this.mActionRight.setVisibility(View.VISIBLE);\n let drawables = this.mActionRight.getCompoundDrawables();\n if (icon)\n icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());\n this.mActionRight.setCompoundDrawables(drawables[0], drawables[1], icon, drawables[3]);\n this.mActionRight.setOnClickListener(listener);\n }\n hideActionRight() {\n this.mActionRight.setVisibility(View.GONE);\n }\n }\n app.ActionBar = ActionBar;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar android;\n(function (android) {\n var app;\n (function (app) {\n class ActionBarActivity extends app.Activity {\n onCreate(savedInstanceState) {\n super.onCreate(savedInstanceState);\n this.initActionBar();\n }\n initActionBar() {\n this.setActionBar(new app.ActionBar(this));\n this.initDefaultBackFinish();\n }\n initDefaultBackFinish() {\n if (this.androidUI.mActivityThread.mLaunchedActivities.size === 0)\n return;\n const activity = this;\n this.mActionBar.setActionLeft(android.R.string_.back, android.R.image.actionbar_ic_back_white, {\n onClick(view) {\n activity.finish();\n }\n });\n }\n setActionBar(actionBar) {\n const activity = this;\n let w = this.getWindow();\n let decorView = w.mDecor;\n this.mActionBar = actionBar;\n decorView.addView(actionBar, -1, -2);\n const onMeasure = decorView.onMeasure;\n decorView.onMeasure = (widthMeasureSpec, heightMeasureSpec) => {\n onMeasure.call(decorView, widthMeasureSpec, heightMeasureSpec);\n if (activity.mActionBar === actionBar) {\n let params = w.mContentParent.getLayoutParams();\n if (params.topMargin != actionBar.getMeasuredHeight()) {\n params.topMargin = actionBar.getMeasuredHeight();\n onMeasure.call(decorView, widthMeasureSpec, heightMeasureSpec);\n }\n }\n };\n }\n invalidateOptionsMenuPopupHelper(menu) {\n let menuPopuoHelper = new android.view.menu.MenuPopupHelper(this, menu, this.getActionBar().mActionRight);\n if (menu.hasVisibleItems()) {\n this.getActionBar().setActionRight('', android.R.image.ic_menu_moreoverflow_normal_holo_dark, {\n onClick: function (view) {\n menuPopuoHelper.show();\n }\n });\n }\n return menuPopuoHelper;\n }\n getActionBar() {\n return this.mActionBar;\n }\n onTitleChanged(title, color) {\n super.onTitleChanged(title, color);\n this.mActionBar.setTitle(title);\n }\n }\n app.ActionBarActivity = ActionBarActivity;\n })(app = android.app || (android.app = {}));\n})(android || (android = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n class HtmlView extends widget.HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let widthMode = MeasureSpec.getMode(widthMeasureSpec);\n let heightMode = MeasureSpec.getMode(heightMeasureSpec);\n let widthSize = MeasureSpec.getSize(widthMeasureSpec);\n let heightSize = MeasureSpec.getSize(heightMeasureSpec);\n let width, height;\n const density = this.getResources().getDisplayMetrics().density;\n if (widthMode == MeasureSpec.EXACTLY) {\n width = widthSize;\n }\n else {\n let sWidth = this.bindElement.style.width, sLeft = this.bindElement.style.left;\n this.bindElement.style.width = '';\n this.bindElement.style.left = '';\n width = this.bindElement.offsetWidth * density + 2;\n this.bindElement.style.width = sWidth;\n this.bindElement.style.left = sLeft;\n width = Math.max(width, this.getSuggestedMinimumWidth());\n if (widthMode == MeasureSpec.AT_MOST) {\n width = Math.min(widthSize, width);\n }\n }\n if (heightMode == MeasureSpec.EXACTLY) {\n height = heightSize;\n }\n else {\n let sWidth = this.bindElement.style.width;\n this.bindElement.style.width = width / density + \"px\";\n this.bindElement.style.height = '';\n height = this.bindElement.offsetHeight * density;\n this.bindElement.style.width = sWidth;\n height = Math.max(height, this.getSuggestedMinimumHeight());\n if (heightMode == MeasureSpec.AT_MOST) {\n height = Math.min(height, heightSize);\n }\n }\n this.setMeasuredDimension(width, height);\n }\n setHtml(html) {\n this.bindElement.innerHTML = html;\n this.requestLayout();\n }\n getHtml() {\n return this.bindElement.innerHTML;\n }\n }\n widget.HtmlView = HtmlView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var MeasureSpec = View.MeasureSpec;\n class HtmlImageView extends widget.HtmlBaseView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mHaveFrame = false;\n this.mAdjustViewBounds = false;\n this.mMaxWidth = Number.MAX_SAFE_INTEGER;\n this.mMaxHeight = Number.MAX_SAFE_INTEGER;\n this.mAlpha = 255;\n this.mDrawableWidth = 0;\n this.mDrawableHeight = 0;\n this.mAdjustViewBoundsCompat = false;\n this.initImageView();\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n const src = a.getString('src');\n if (src) {\n this.setImageURI(src);\n }\n this.setAdjustViewBounds(a.getBoolean('adjustViewBounds', false));\n this.setMaxWidth(a.getDimensionPixelSize('maxWidth', this.mMaxWidth));\n this.setMaxHeight(a.getDimensionPixelSize('maxHeight', this.mMaxHeight));\n this.setScaleType(android.widget.ImageView.parseScaleType(a.getAttrValue('scaleType'), this.mScaleType));\n this.setImageAlpha(a.getInt('drawableAlpha', this.mAlpha));\n }\n createClassAttrBinder() {\n return super.createClassAttrBinder().set('src', {\n setter(v, value, attrBinder) {\n v.setImageURI(value);\n }, getter(v) {\n return v.mImgElement.src;\n }\n }).set('adjustViewBounds', {\n setter(v, value, attrBinder) {\n v.setAdjustViewBounds(attrBinder.parseBoolean(value, false));\n }, getter(v) {\n return v.getAdjustViewBounds();\n }\n }).set('maxWidth', {\n setter(v, value, attrBinder) {\n v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.mMaxWidth));\n }, getter(v) {\n return v.mMaxWidth;\n }\n }).set('maxHeight', {\n setter(v, value, attrBinder) {\n v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.mMaxHeight));\n }, getter(v) {\n return v.mMaxHeight;\n }\n }).set('scaleType', {\n setter(v, value, attrBinder) {\n if (typeof value === 'number') {\n v.setScaleType(value);\n }\n else {\n v.setScaleType(android.widget.ImageView.parseScaleType(value, v.mScaleType));\n }\n }, getter(v) {\n return v.mScaleType;\n }\n }).set('drawableAlpha', {\n setter(v, value, attrBinder) {\n v.setImageAlpha(attrBinder.parseInt(value, v.mAlpha));\n }, getter(v) {\n return v.mAlpha;\n }\n });\n }\n initImageView() {\n this.mScaleType = android.widget.ImageView.ScaleType.FIT_CENTER;\n this.mImgElement = document.createElement('img');\n this.mImgElement.style.position = \"absolute\";\n this.mImgElement.onload = (() => {\n this.mImgElement.style.left = 0 + 'px';\n this.mImgElement.style.top = 0 + 'px';\n this.mImgElement.style.width = '';\n this.mImgElement.style.height = '';\n this.mDrawableWidth = this.mImgElement.width;\n this.mDrawableHeight = this.mImgElement.height;\n this.mImgElement.style.display = 'none';\n this.mImgElement.style.opacity = '';\n this.requestLayout();\n });\n this.bindElement.appendChild(this.mImgElement);\n }\n getAdjustViewBounds() {\n return this.mAdjustViewBounds;\n }\n setAdjustViewBounds(adjustViewBounds) {\n this.mAdjustViewBounds = adjustViewBounds;\n if (adjustViewBounds) {\n this.setScaleType(android.widget.ImageView.ScaleType.FIT_CENTER);\n }\n }\n getMaxWidth() {\n return this.mMaxWidth;\n }\n setMaxWidth(maxWidth) {\n this.mMaxWidth = maxWidth;\n }\n getMaxHeight() {\n return this.mMaxHeight;\n }\n setMaxHeight(maxHeight) {\n this.mMaxHeight = maxHeight;\n }\n setImageURI(uri) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n this.mImgElement.style.opacity = '0';\n this.mImgElement.src = uri;\n }\n setScaleType(scaleType) {\n if (scaleType == null) {\n throw new Error('NullPointerException');\n }\n if (this.mScaleType != scaleType) {\n this.mScaleType = scaleType;\n this.setWillNotCacheDrawing(scaleType == android.widget.ImageView.ScaleType.CENTER);\n this.requestLayout();\n this.invalidate();\n }\n }\n getScaleType() {\n return this.mScaleType;\n }\n onMeasure(widthMeasureSpec, heightMeasureSpec) {\n let w;\n let h;\n let desiredAspect = 0.0;\n let resizeWidth = false;\n let resizeHeight = false;\n const widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);\n const heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);\n if (!this.mImgElement.src || !this.mImgElement.complete) {\n this.mDrawableWidth = -1;\n this.mDrawableHeight = -1;\n w = h = 0;\n }\n else {\n w = this.mDrawableWidth;\n h = this.mDrawableHeight;\n if (w <= 0)\n w = 1;\n if (h <= 0)\n h = 1;\n if (this.mAdjustViewBounds) {\n resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;\n resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;\n desiredAspect = w / h;\n }\n }\n let pleft = this.mPaddingLeft;\n let pright = this.mPaddingRight;\n let ptop = this.mPaddingTop;\n let pbottom = this.mPaddingBottom;\n let widthSize;\n let heightSize;\n if (resizeWidth || resizeHeight) {\n widthSize = this.resolveAdjustedSize(w + pleft + pright, this.mMaxWidth, widthMeasureSpec);\n heightSize = this.resolveAdjustedSize(h + ptop + pbottom, this.mMaxHeight, heightMeasureSpec);\n if (desiredAspect != 0) {\n let actualAspect = (widthSize - pleft - pright) / (heightSize - ptop - pbottom);\n if (Math.abs(actualAspect - desiredAspect) > 0.0000001) {\n let done = false;\n if (resizeWidth) {\n let newWidth = Math.floor(desiredAspect * (heightSize - ptop - pbottom)) +\n pleft + pright;\n if (!resizeHeight && !this.mAdjustViewBoundsCompat) {\n widthSize = this.resolveAdjustedSize(newWidth, this.mMaxWidth, widthMeasureSpec);\n }\n if (newWidth <= widthSize) {\n widthSize = newWidth;\n done = true;\n }\n }\n if (!done && resizeHeight) {\n let newHeight = Math.floor((widthSize - pleft - pright) / desiredAspect) +\n ptop + pbottom;\n if (!resizeWidth && !this.mAdjustViewBoundsCompat) {\n heightSize = this.resolveAdjustedSize(newHeight, this.mMaxHeight, heightMeasureSpec);\n }\n if (newHeight <= heightSize) {\n heightSize = newHeight;\n }\n }\n }\n }\n }\n else {\n w += pleft + pright;\n h += ptop + pbottom;\n w = Math.max(w, this.getSuggestedMinimumWidth());\n h = Math.max(h, this.getSuggestedMinimumHeight());\n widthSize = HtmlImageView.resolveSizeAndState(w, widthMeasureSpec, 0);\n heightSize = HtmlImageView.resolveSizeAndState(h, heightMeasureSpec, 0);\n }\n this.setMeasuredDimension(widthSize, heightSize);\n }\n resolveAdjustedSize(desiredSize, maxSize, measureSpec) {\n let result = desiredSize;\n let specMode = MeasureSpec.getMode(measureSpec);\n let specSize = MeasureSpec.getSize(measureSpec);\n switch (specMode) {\n case MeasureSpec.UNSPECIFIED:\n result = Math.min(desiredSize, maxSize);\n break;\n case MeasureSpec.AT_MOST:\n result = Math.min(Math.min(desiredSize, specSize), maxSize);\n break;\n case MeasureSpec.EXACTLY:\n result = specSize;\n break;\n }\n return result;\n }\n setFrame(left, top, right, bottom) {\n let changed = super.setFrame(left, top, right, bottom);\n this.mHaveFrame = true;\n this.configureBounds();\n this.mImgElement.style.display = '';\n return changed;\n }\n configureBounds() {\n let dwidth = this.mDrawableWidth;\n let dheight = this.mDrawableHeight;\n let vwidth = this.getWidth() - this.mPaddingLeft - this.mPaddingRight;\n let vheight = this.getHeight() - this.mPaddingTop - this.mPaddingBottom;\n let fits = (dwidth < 0 || vwidth == dwidth) && (dheight < 0 || vheight == dheight);\n this.mImgElement.style.left = 0 + 'px';\n this.mImgElement.style.top = 0 + 'px';\n this.mImgElement.style.width = '';\n this.mImgElement.style.height = '';\n if (dwidth <= 0 || dheight <= 0) {\n return;\n }\n if (this.mScaleType === android.widget.ImageView.ScaleType.FIT_XY) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = vheight + 'px';\n return;\n }\n this.mImgElement.style.width = dwidth + 'px';\n this.mImgElement.style.height = dheight + 'px';\n if (android.widget.ImageView.ScaleType.MATRIX === this.mScaleType) {\n }\n else if (fits) {\n }\n else if (android.widget.ImageView.ScaleType.CENTER === this.mScaleType) {\n let left = Math.round((vwidth - dwidth) * 0.5);\n let top = Math.round((vheight - dheight) * 0.5);\n this.mImgElement.style.left = left + 'px';\n this.mImgElement.style.top = top + 'px';\n }\n else if (android.widget.ImageView.ScaleType.CENTER_CROP === this.mScaleType) {\n let scale;\n let dx = 0, dy = 0;\n if (dwidth * vheight > vwidth * dheight) {\n scale = vheight / dheight;\n dx = (vwidth - dwidth * scale) * 0.5;\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n this.mImgElement.style.left = Math.round(dx) + 'px';\n this.mImgElement.style.top = '0px';\n }\n else {\n scale = vwidth / dwidth;\n dy = (vheight - dheight * scale) * 0.5;\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n this.mImgElement.style.left = '0px';\n this.mImgElement.style.top = Math.round(dy) + 'px';\n }\n }\n else if (android.widget.ImageView.ScaleType.CENTER_INSIDE === this.mScaleType) {\n let scale = 1;\n if (dwidth <= vwidth && dheight <= vheight) {\n }\n else {\n let wScale = vwidth / dwidth;\n let hScale = vheight / dheight;\n if (wScale < hScale) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n }\n else {\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n }\n scale = Math.min(wScale, hScale);\n }\n let dx = Math.round((vwidth - dwidth * scale) * 0.5);\n let dy = Math.round((vheight - dheight * scale) * 0.5);\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else {\n let wScale = vwidth / dwidth;\n let hScale = vheight / dheight;\n if (wScale < hScale) {\n this.mImgElement.style.width = vwidth + 'px';\n this.mImgElement.style.height = 'auto';\n }\n else {\n this.mImgElement.style.width = 'auto';\n this.mImgElement.style.height = vheight + 'px';\n }\n let scale = Math.min(wScale, hScale);\n if (android.widget.ImageView.ScaleType.FIT_CENTER === this.mScaleType) {\n let dx = Math.round((vwidth - dwidth * scale) * 0.5);\n let dy = Math.round((vheight - dheight * scale) * 0.5);\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else if (android.widget.ImageView.ScaleType.FIT_END === this.mScaleType) {\n let dx = Math.round((vwidth - dwidth * scale));\n let dy = Math.round((vheight - dheight * scale));\n this.mImgElement.style.left = dx + 'px';\n this.mImgElement.style.top = dy + 'px';\n }\n else if (android.widget.ImageView.ScaleType.FIT_START === this.mScaleType) {\n }\n }\n }\n getImageAlpha() {\n return this.mAlpha;\n }\n setImageAlpha(alpha) {\n this.setAlpha(alpha);\n }\n }\n widget.HtmlImageView = HtmlImageView;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var AbsListView = android.widget.AbsListView;\n var BaseAdapter = android.widget.BaseAdapter;\n var AdapterView = android.widget.AdapterView;\n class HtmlDataListAdapter extends BaseAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n this.mContext = context;\n if (parent instanceof AbsListView) {\n parent.setAdapter(this);\n }\n bindElement[HtmlDataListAdapter.BindAdapterProperty] = this;\n this.registerHtmlDataObserver();\n }\n registerHtmlDataObserver() {\n if (!window['MutationObserver'])\n return;\n const adapter = this;\n function callBack(arr, observer) {\n adapter.notifyDataSetChanged();\n }\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n getItemViewType(position) {\n return AdapterView.ITEM_VIEW_TYPE_IGNORE;\n }\n getView(position, convertView, parent) {\n let element = this.getItem(position);\n let view = element[View.AndroidViewProperty];\n this.checkReplaceWithRef(element);\n if (!view) {\n view = View.inflate(this.mContext, element);\n element[View.AndroidViewProperty] = view;\n }\n return view;\n }\n getCount() {\n return this.bindElementData.children.length;\n }\n getItem(position) {\n let element = this.bindElementData.children[position];\n if (element.tagName === HtmlDataListAdapter.RefElementTag) {\n element = element[HtmlDataListAdapter.RefElementProperty];\n if (!element)\n throw Error('Reference element is ' + element);\n }\n return element;\n }\n checkReplaceWithRef(element) {\n let refElement = element[HtmlDataListAdapter.RefElementProperty] || document.createElement(HtmlDataListAdapter.RefElementTag);\n refElement[HtmlDataListAdapter.RefElementProperty] = element;\n element[HtmlDataListAdapter.RefElementProperty] = refElement;\n if (element.parentNode === this.bindElementData) {\n this.bindElementData.insertBefore(refElement, element);\n this.bindElementData.removeChild(element);\n }\n return refElement;\n }\n removeElementRefAndRestoreToAdapter(childElement) {\n if (childElement.tagName === HtmlDataListAdapter.RefElementTag) {\n let element = childElement[HtmlDataListAdapter.RefElementProperty];\n this.bindElementData.insertBefore(element, childElement);\n this.bindElementData.removeChild(childElement);\n }\n }\n notifyDataSizeWillChange() {\n for (let i = 0, count = this.bindElementData.children.length; i < count; i++) {\n this.removeElementRefAndRestoreToAdapter(this.bindElementData.children[i]);\n }\n this.notifyDataSetChanged();\n }\n getItemId(position) {\n let id = this.getItem(position).id;\n let idNumber = Number.parseInt(id);\n if (Number.isInteger(idNumber))\n return idNumber;\n return -1;\n }\n }\n HtmlDataListAdapter.RefElementTag = \"ref-element\".toUpperCase();\n HtmlDataListAdapter.RefElementProperty = \"RefElement\";\n HtmlDataListAdapter.BindAdapterProperty = \"BindAdapter\";\n widget.HtmlDataListAdapter = HtmlDataListAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var ViewPager = android.support.v4.view.ViewPager;\n var PagerAdapter = android.support.v4.view.PagerAdapter;\n class HtmlDataPagerAdapter extends PagerAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n this.mContext = context;\n if (parent instanceof ViewPager) {\n parent.setAdapter(this);\n }\n bindElement[HtmlDataPagerAdapter.BindAdapterProperty] = this;\n this.registerHtmlDataObserver();\n }\n registerHtmlDataObserver() {\n if (!window['MutationObserver'])\n return;\n const adapter = this;\n function callBack(arr, observer) {\n adapter.notifyDataSetChanged();\n }\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n getCount() {\n return this.bindElementData.children.length;\n }\n instantiateItem(container, position) {\n let element = this.getItem(position);\n let view = element[View.AndroidViewProperty];\n this.checkReplaceWithRef(element);\n if (!view) {\n view = View.inflate(this.mContext, element);\n element[View.AndroidViewProperty] = view;\n }\n container.addView(view);\n return view;\n }\n getItem(position) {\n let element = this.bindElementData.children[position];\n if (element.tagName === HtmlDataPagerAdapter.RefElementTag) {\n element = element[HtmlDataPagerAdapter.RefElementProperty];\n if (!element)\n throw Error('Reference element is ' + element);\n }\n return element;\n }\n checkReplaceWithRef(element) {\n let refElement = element[HtmlDataPagerAdapter.RefElementProperty] || document.createElement(HtmlDataPagerAdapter.RefElementTag);\n refElement[HtmlDataPagerAdapter.RefElementProperty] = element;\n element[HtmlDataPagerAdapter.RefElementProperty] = refElement;\n if (element.parentNode === this.bindElementData) {\n this.bindElementData.insertBefore(refElement, element);\n this.bindElementData.removeChild(element);\n }\n return refElement;\n }\n removeElementRefAndRestoreToAdapter(childElement) {\n if (childElement.tagName === HtmlDataPagerAdapter.RefElementTag) {\n let element = childElement[HtmlDataPagerAdapter.RefElementProperty];\n this.bindElementData.insertBefore(element, childElement);\n this.bindElementData.removeChild(childElement);\n }\n }\n notifyDataSizeWillChange() {\n for (let i = 0, count = this.bindElementData.children.length; i < count; i++) {\n this.removeElementRefAndRestoreToAdapter(this.bindElementData.children[i]);\n }\n this.notifyDataSetChanged();\n }\n destroyItem(container, position, object) {\n let view = object;\n container.removeView(view);\n }\n isViewFromObject(view, object) {\n return view === object;\n }\n getItemPosition(object) {\n let position = PagerAdapter.POSITION_NONE;\n if (object == null)\n return position;\n for (let i = 0, count = this.getCount(); i < count; i++) {\n if (object === this.getItem(i)[View.AndroidViewProperty]) {\n position = i;\n break;\n }\n }\n return position;\n }\n }\n HtmlDataPagerAdapter.RefElementTag = \"ref-element\".toUpperCase();\n HtmlDataPagerAdapter.RefElementProperty = \"RefElement\";\n HtmlDataPagerAdapter.BindAdapterProperty = \"BindAdapter\";\n widget.HtmlDataPagerAdapter = HtmlDataPagerAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var NumberPicker = android.widget.NumberPicker;\n class HtmlDataPickerAdapter {\n onInflateAdapter(bindElement, context, parent) {\n this.bindElementData = bindElement;\n if (parent instanceof NumberPicker) {\n if (!window['MutationObserver'])\n return;\n const callBack = (arr, observer) => {\n const values = [];\n for (let child of Array.from(this.bindElementData.children)) {\n values.push(child.innerText);\n }\n parent.setDisplayedValues(values);\n };\n callBack.call(this);\n let observer = new MutationObserver(callBack);\n observer.observe(this.bindElementData, { childList: true });\n }\n }\n }\n widget.HtmlDataPickerAdapter = HtmlDataPickerAdapter;\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var MotionEvent = android.view.MotionEvent;\n var AbsListView = android.widget.AbsListView;\n var ScrollView = android.widget.ScrollView;\n var Integer = java.lang.Integer;\n var OverScrollLocker;\n (function (OverScrollLocker) {\n const InstanceMap = new WeakMap();\n function getFrom(view) {\n let scrollLocker = InstanceMap.get(view);\n if (!scrollLocker) {\n if (view instanceof AbsListView) {\n scrollLocker = new ListViewOverScrollLocker(view);\n }\n else if (view instanceof ScrollView) {\n scrollLocker = new ScrollViewScrollLocker(view);\n }\n if (scrollLocker)\n InstanceMap.set(view, scrollLocker);\n }\n return scrollLocker;\n }\n OverScrollLocker.getFrom = getFrom;\n class BaseOverScrollLocker {\n constructor(view) {\n this.view = view;\n const onTouchEventFunc = view.onTouchEvent;\n view.onTouchEvent = (event) => {\n let result = onTouchEventFunc.call(view, event);\n switch (event.getAction()) {\n case MotionEvent.ACTION_DOWN:\n case MotionEvent.ACTION_MOVE:\n this.isInTouch = true;\n break;\n case MotionEvent.ACTION_UP:\n case MotionEvent.ACTION_CANCEL:\n this.isInTouch = false;\n break;\n }\n return result;\n };\n }\n lockOverScrollTop(lockTop) {\n this.lockTop = lockTop;\n if (!this.isInTouch && this.getOverScrollY() < -lockTop) {\n this.springBackToLockTop();\n }\n }\n lockOverScrollBottom(lockBottom) {\n this.lockBottom = lockBottom;\n if (!this.isInTouch && this.getOverScrollY() > lockBottom) {\n this.springBackToLockBottom();\n }\n }\n }\n class ListViewOverScrollLocker extends BaseOverScrollLocker {\n constructor(listView) {\n super(listView);\n this.listView = listView;\n this.configListView();\n }\n configListView() {\n let listView = this.listView;\n if (!listView.mFlingRunnable)\n listView.mFlingRunnable = new AbsListView.FlingRunnable(listView);\n const scroller = listView.mFlingRunnable.mScroller;\n listView.mFlingRunnable.startOverfling = (initialVelocity) => {\n scroller.setInterpolator(null);\n let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE;\n if (listView.mScrollY < 0)\n minY = -this.lockTop;\n else if (listView.mScrollY > 0)\n maxY = this.lockBottom;\n scroller.fling(0, listView.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, listView._mOverflingDistance);\n listView.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n listView.invalidate();\n listView.postOnAnimation(listView.mFlingRunnable);\n };\n const layoutChildrenFunc = listView.layoutChildren;\n listView.layoutChildren = () => {\n const overScrollY = this.getOverScrollY();\n layoutChildrenFunc.call(listView);\n if (overScrollY !== 0) {\n listView.overScrollBy(0, -overScrollY, 0, listView.mScrollY, 0, 0, 0, listView.mOverscrollDistance, false);\n const atEdge = listView.trackMotionScroll(-overScrollY, -overScrollY);\n if (atEdge) {\n listView.overScrollBy(0, overScrollY, 0, listView.mScrollY, 0, 0, 0, listView.mOverscrollDistance, false);\n }\n else {\n listView.mFlingRunnable.mScroller.abortAnimation();\n }\n }\n };\n listView.checkOverScrollStartScrollIfNeeded = () => {\n return listView.mScrollY > this.lockBottom || listView.mScrollY < this.lockTop;\n };\n listView.mFlingRunnable.edgeReached = (delta) => {\n let initialVelocity = listView.mFlingRunnable.mScroller.getCurrVelocity();\n if (delta > 0)\n initialVelocity = -initialVelocity;\n listView.mFlingRunnable.startOverfling(initialVelocity);\n };\n const oldSpringBack = scroller.springBack;\n scroller.springBack = (startX, startY, minX, maxX, minY, maxY) => {\n minY = -this.lockTop;\n maxY = this.lockBottom;\n return oldSpringBack.call(scroller, startX, startY, minX, maxX, minY, maxY);\n };\n const oldFling = scroller.fling;\n scroller.fling = (startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) => {\n if (velocityY > 0)\n overY += this.lockBottom;\n else\n overY += this.lockTop;\n oldFling.call(scroller, startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n };\n }\n getScrollContentBottom() {\n let childCount = this.listView.getChildCount();\n let maxBottom = 0;\n let minTop = 0;\n for (let i = 0; i < childCount; i++) {\n let child = this.listView.getChildAt(i);\n let childBottom = child.getBottom();\n let childTop = child.getTop();\n if (childBottom > maxBottom) {\n maxBottom = childBottom;\n }\n if (childTop < minTop) {\n minTop = childTop;\n }\n }\n if (minTop > 0)\n minTop = 0;\n if (this.listView.getAdapter() && childCount > 0) {\n return (maxBottom - minTop) * this.listView.getAdapter().getCount() / childCount;\n }\n return 0;\n }\n getOverScrollY() {\n return this.listView.mScrollY;\n }\n startSpringBack() {\n this.listView.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING);\n this.listView.mFlingRunnable.mScroller.springBack(0, this.listView.mScrollY, 0, 0, 0, 0);\n this.listView.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING;\n this.listView.postOnAnimation(this.listView.mFlingRunnable);\n }\n springBackToLockTop() {\n this.startSpringBack();\n }\n springBackToLockBottom() {\n this.startSpringBack();\n }\n }\n class ScrollViewScrollLocker extends BaseOverScrollLocker {\n constructor(scrollView) {\n super(scrollView);\n this.scrollView = scrollView;\n const scroller = scrollView.mScroller;\n const oldSpringBack = scroller.springBack;\n scroller.springBack = (startX, startY, minX, maxX, minY, maxY) => {\n minY = -this.lockTop;\n maxY = this.scrollView.getScrollRange() + this.lockBottom;\n return oldSpringBack.call(scroller, startX, startY, minX, maxX, minY, maxY);\n };\n const oldFling = scroller.fling;\n scroller.fling = (startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) => {\n if (velocityY > 0)\n overY += this.lockBottom;\n else\n overY += this.lockTop;\n minY -= this.lockTop;\n maxY += this.lockBottom;\n oldFling.call(scroller, startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY);\n };\n this.listenScrollContentHeightChange();\n }\n listenScrollContentHeightChange() {\n const listenHeightChange = (v) => {\n const onSizeChangedFunc = v.onSizeChanged;\n v.onSizeChanged = (w, h, oldw, oldh) => {\n onSizeChangedFunc.call(v, w, h, oldw, oldh);\n this.scrollView.overScrollBy(0, 0, 0, this.scrollView.mScrollY, 0, this.scrollView.getScrollRange(), 0, this.scrollView.mOverscrollDistance, false);\n };\n };\n if (this.scrollView.getChildCount() > 0) {\n listenHeightChange(this.scrollView.getChildAt(0));\n }\n else {\n const onViewAddedFunc = this.scrollView.onViewAdded;\n this.scrollView.onViewAdded = (v) => {\n onViewAddedFunc.call(this.scrollView, v);\n listenHeightChange(v);\n };\n }\n }\n getScrollContentBottom() {\n if (this.scrollView.getChildCount() > 0) {\n return this.scrollView.getChildAt(0).getBottom();\n }\n return this.scrollView.getPaddingTop();\n }\n getOverScrollY() {\n let scrollY = this.scrollView.getScrollY();\n if (scrollY < 0)\n return scrollY;\n let scrollRange = this.scrollView.getScrollRange();\n if (scrollY > scrollRange) {\n return scrollY - scrollRange;\n }\n return 0;\n }\n startSpringBack() {\n if (this.scrollView.mScroller.springBack(this.scrollView.mScrollX, this.scrollView.mScrollY, 0, 0, 0, this.scrollView.getScrollRange())) {\n this.scrollView.postInvalidateOnAnimation();\n }\n }\n springBackToLockTop() {\n this.startSpringBack();\n }\n springBackToLockBottom() {\n this.startSpringBack();\n }\n }\n })(OverScrollLocker = widget.OverScrollLocker || (widget.OverScrollLocker = {}));\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var widget;\n (function (widget) {\n var View = android.view.View;\n var Gravity = android.view.Gravity;\n var ViewGroup = android.view.ViewGroup;\n var FrameLayout = android.widget.FrameLayout;\n var TextView = android.widget.TextView;\n var LinearLayout = android.widget.LinearLayout;\n var ProgressBar = android.widget.ProgressBar;\n var R = android.R;\n class PullRefreshLoadLayout extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.autoLoadScrollAtBottom = true;\n this.footerViewReadyDistance = 36 * android.content.res.Resources.getDisplayMetrics().density;\n this.contentOverY = 0;\n const a = context.obtainStyledAttributes(bindElement, defStyle);\n if (a.getBoolean('refreshEnable', true)) {\n this.setRefreshEnable(true);\n }\n if (a.getBoolean('loadEnable', true)) {\n this.setLoadEnable(true);\n }\n a.recycle();\n }\n onViewAdded(child) {\n super.onViewAdded(child);\n if (child instanceof PullRefreshLoadLayout.HeaderView) {\n if (child != this.headerView)\n this.setHeaderView(child);\n }\n else if (child instanceof PullRefreshLoadLayout.FooterView) {\n if (child != this.footerView)\n this.setFooterView(child);\n }\n else {\n if (child != this.contentView)\n this.setContentView(child);\n }\n if (this.footerView != null) {\n this.bringChildToFront(this.footerView);\n }\n }\n configHeaderView() {\n let headerView = this.headerView;\n let params = headerView.getLayoutParams();\n params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;\n params.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n params.width = ViewGroup.LayoutParams.MATCH_PARENT;\n headerView.setLayoutParams(params);\n }\n configFooterView() {\n let footerView = this.footerView;\n let params = footerView.getLayoutParams();\n params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;\n params.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n params.width = ViewGroup.LayoutParams.WRAP_CONTENT;\n footerView.setLayoutParams(params);\n }\n configContentView() {\n let contentView = this.contentView;\n let params = contentView.getLayoutParams();\n params.height = ViewGroup.LayoutParams.MATCH_PARENT;\n params.width = ViewGroup.LayoutParams.MATCH_PARENT;\n contentView.setLayoutParams(params);\n this.overScrollLocker = widget.OverScrollLocker.getFrom(contentView);\n const overScrollByFunc = contentView.overScrollBy;\n contentView.overScrollBy = (deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent) => {\n let result = overScrollByFunc.call(contentView, deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);\n if (contentView === this.contentView) {\n this.onContentOverScroll(scrollRangeY, maxOverScrollY, isTouchEvent);\n }\n return result;\n };\n }\n onContentOverScroll(scrollRangeY, maxOverScrollY, isTouchEvent) {\n let newScrollY = this.contentView.mScrollY;\n const top = 0;\n const bottom = scrollRangeY;\n if (newScrollY > bottom) {\n this.contentOverY = newScrollY - bottom;\n }\n else if (newScrollY < top) {\n this.contentOverY = newScrollY - top;\n }\n else {\n this.contentOverY = 0;\n }\n this.checkHeaderFooterPosition();\n if (this.headerView) {\n if (this.contentOverY < -this.headerView.getHeight()) {\n if (isTouchEvent) {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_ReadyToRefresh);\n }\n else if (this.headerView.state === PullRefreshLoadLayout.State_Header_ReadyToRefresh) {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);\n }\n }\n else if (this.headerView.state === PullRefreshLoadLayout.State_Header_ReadyToRefresh) {\n this.setHeaderState(this.headerView.stateBeforeReady);\n }\n }\n if (this.footerView) {\n const footerState = this.footerView.state;\n if (this.contentOverY > this.footerView.getHeight() + this.footerViewReadyDistance) {\n if (isTouchEvent) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_ReadyToLoad);\n }\n else if (footerState === PullRefreshLoadLayout.State_Footer_ReadyToLoad) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n else if (footerState === PullRefreshLoadLayout.State_Footer_ReadyToLoad) {\n this.setFooterState(this.footerView.stateBeforeReady);\n }\n if (this.contentOverY > 0 && this.autoLoadScrollAtBottom\n && footerState === PullRefreshLoadLayout.State_Footer_Normal) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n }\n setHeaderView(headerView) {\n if (this.headerView) {\n this.removeView(this.headerView);\n }\n this.headerView = headerView;\n if (headerView.getParent() == null)\n this.addView(headerView);\n this.configHeaderView();\n }\n setFooterView(footerView) {\n if (this.footerView) {\n this.removeView(this.footerView);\n }\n this.footerView = footerView;\n if (footerView.getParent() == null)\n this.addView(footerView);\n this.configFooterView();\n }\n setContentView(contentView) {\n if (this.contentView) {\n this.removeView(this.contentView);\n }\n this.contentView = contentView;\n if (contentView.getParent() == null)\n this.addView(contentView);\n this.configContentView();\n }\n setHeaderState(newState) {\n if (!this.headerView)\n return;\n if (this.headerView.state === newState)\n return;\n const changeLimit = PullRefreshLoadLayout.StateChangeLimit[this.headerView.state];\n if (changeLimit && changeLimit.indexOf(newState) !== -1)\n return;\n this.headerView.setStateInner(this, newState);\n this.checkLockOverScroll();\n if (newState === PullRefreshLoadLayout.State_Header_Refreshing && this.refreshLoadListener) {\n this.refreshLoadListener.onRefresh(this);\n }\n }\n getHeaderState() {\n if (!this.headerView)\n return PullRefreshLoadLayout.State_Disable;\n return this.headerView.state;\n }\n setFooterState(newState) {\n if (!this.footerView)\n return;\n if (this.footerView.state === newState)\n return;\n const changeLimit = PullRefreshLoadLayout.StateChangeLimit[this.footerView.state];\n if (changeLimit && changeLimit.indexOf(newState) !== -1)\n return;\n this.footerView.setStateInner(this, newState);\n this.checkLockOverScroll();\n if (newState === PullRefreshLoadLayout.State_Footer_Loading && this.refreshLoadListener) {\n this.refreshLoadListener.onLoadMore(this);\n }\n }\n getFooterState() {\n if (!this.footerView)\n return PullRefreshLoadLayout.State_Disable;\n return this.footerView.state;\n }\n checkLockOverScroll() {\n if (!this.overScrollLocker)\n return;\n if (this.headerView) {\n switch (this.headerView.state) {\n case PullRefreshLoadLayout.State_Header_Normal:\n this.overScrollLocker.lockOverScrollTop(0);\n break;\n case PullRefreshLoadLayout.State_Header_Refreshing:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.overScrollLocker.lockOverScrollTop(this.headerView.getHeight());\n break;\n }\n }\n else {\n this.overScrollLocker.lockOverScrollTop(0);\n }\n this.overScrollLocker.lockOverScrollBottom(this.footerView ? this.footerView.getHeight() : 0);\n }\n checkHeaderFooterPosition() {\n if (this.contentOverY > 0) {\n this.setHeaderViewAppearDistance(0);\n this.setFooterViewAppearDistance(this.contentOverY);\n }\n else if (this.contentOverY < 0) {\n this.setHeaderViewAppearDistance(-this.contentOverY);\n this.setFooterViewAppearDistance(0);\n }\n else {\n this.setHeaderViewAppearDistance(0);\n this.setFooterViewAppearDistance(0);\n }\n }\n setHeaderViewAppearDistance(distance) {\n if (!this.headerView)\n return;\n let offset = -this.headerView.getHeight() - this.headerView.getTop() + distance;\n this.headerView.offsetTopAndBottom(offset);\n }\n setFooterViewAppearDistance(distance) {\n if (!this.contentView || !this.footerView)\n return;\n let bottomToParentBottom = Math.min(this.overScrollLocker.getScrollContentBottom(), this.contentView.getHeight()) - this.footerView.getBottom();\n if (this.contentOverY < 0)\n bottomToParentBottom -= this.contentOverY;\n let offset = this.footerView.getHeight() + bottomToParentBottom - distance;\n this.footerView.offsetTopAndBottom(offset);\n }\n onLayout(changed, left, top, right, bottom) {\n super.onLayout(changed, left, top, right, bottom);\n this.checkHeaderFooterPosition();\n this.checkLockOverScroll();\n if (!this.isLaidOut()) {\n if (this.autoLoadScrollAtBottom && this.footerView != null\n && this.footerView.getGlobalVisibleRect(new android.graphics.Rect())) {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n }\n setAutoLoadMoreWhenScrollBottom(autoLoad) {\n this.autoLoadScrollAtBottom = autoLoad;\n }\n setRefreshEnable(enable) {\n const oldEnable = this.headerView != null;\n if (enable === oldEnable)\n return;\n if (!enable) {\n this.removeView(this.headerView);\n this.headerView = null;\n if (this.overScrollLocker)\n this.overScrollLocker.lockOverScrollTop(0);\n }\n else {\n this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(this.getContext()));\n }\n }\n setLoadEnable(enable) {\n const oldEnable = this.footerView != null;\n if (enable === oldEnable)\n return;\n if (!enable) {\n this.removeView(this.footerView);\n this.footerView = null;\n if (this.overScrollLocker)\n this.overScrollLocker.lockOverScrollBottom(0);\n }\n else {\n this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(this.getContext()));\n }\n }\n setRefreshLoadListener(refreshLoadListener) {\n this.refreshLoadListener = refreshLoadListener;\n }\n startRefresh() {\n this.setHeaderState(PullRefreshLoadLayout.State_Header_Refreshing);\n }\n startLoadMore() {\n this.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n PullRefreshLoadLayout.State_Disable = -1;\n PullRefreshLoadLayout.State_Header_Normal = 0;\n PullRefreshLoadLayout.State_Header_Refreshing = 1;\n PullRefreshLoadLayout.State_Header_ReadyToRefresh = 2;\n PullRefreshLoadLayout.State_Header_RefreshFail = 3;\n PullRefreshLoadLayout.State_Footer_Normal = 4;\n PullRefreshLoadLayout.State_Footer_Loading = 5;\n PullRefreshLoadLayout.State_Footer_ReadyToLoad = 6;\n PullRefreshLoadLayout.State_Footer_LoadFail = 7;\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad = 8;\n PullRefreshLoadLayout.StateChangeLimit = {\n [PullRefreshLoadLayout.State_Header_Refreshing]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Footer_Loading,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Footer_LoadFail,\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad,],\n [PullRefreshLoadLayout.State_Header_RefreshFail]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Footer_Loading,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Footer_LoadFail,\n PullRefreshLoadLayout.State_Footer_NoMoreToLoad,],\n [PullRefreshLoadLayout.State_Footer_Loading]: [PullRefreshLoadLayout.State_Header_ReadyToRefresh, PullRefreshLoadLayout.State_Header_Refreshing,\n PullRefreshLoadLayout.State_Footer_ReadyToLoad, PullRefreshLoadLayout.State_Header_RefreshFail],\n [PullRefreshLoadLayout.State_Footer_NoMoreToLoad]: [PullRefreshLoadLayout.State_Footer_ReadyToLoad]\n };\n widget.PullRefreshLoadLayout = PullRefreshLoadLayout;\n (function (PullRefreshLoadLayout) {\n class HeaderView extends FrameLayout {\n constructor() {\n super(...arguments);\n this.state = PullRefreshLoadLayout.State_Header_Normal;\n this.stateBeforeReady = PullRefreshLoadLayout.State_Header_Normal;\n }\n setStateInner(prll, state) {\n const oldState = this.state;\n this.state = state;\n this.onStateChange(state, oldState);\n const inner_this = this;\n switch (state) {\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.postDelayed({\n run() {\n if (state === inner_this.state) {\n prll.setHeaderState(PullRefreshLoadLayout.State_Header_Normal);\n }\n }\n }, 1000);\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.stateBeforeReady = oldState;\n break;\n }\n }\n }\n PullRefreshLoadLayout.HeaderView = HeaderView;\n class FooterView extends FrameLayout {\n constructor() {\n super(...arguments);\n this.state = PullRefreshLoadLayout.State_Footer_Normal;\n this.stateBeforeReady = PullRefreshLoadLayout.State_Footer_Normal;\n }\n setStateInner(prll, state) {\n const oldState = this.state;\n this.state = state;\n this.onStateChange(state, oldState);\n switch (state) {\n case PullRefreshLoadLayout.State_Footer_ReadyToLoad:\n this.stateBeforeReady = oldState;\n break;\n }\n }\n }\n PullRefreshLoadLayout.FooterView = FooterView;\n class DefaultHeaderView extends HeaderView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.progressBar = new ProgressBar(context);\n this.progressBar.setVisibility(View.GONE);\n this.textView = new TextView(context);\n let density = android.content.res.Resources.getDisplayMetrics().density;\n const pad = 16 * density;\n this.textView.setPadding(pad / 2, pad, pad / 2, pad);\n this.textView.setGravity(Gravity.CENTER);\n let linear = new LinearLayout(context);\n linear.addView(this.progressBar, 32 * density, 32 * density);\n linear.addView(this.textView);\n linear.setGravity(Gravity.CENTER);\n this.addView(linear, -1, -2);\n this.onStateChange(PullRefreshLoadLayout.State_Header_Normal, PullRefreshLoadLayout.State_Disable);\n }\n onStateChange(newState, oldState) {\n switch (newState) {\n case PullRefreshLoadLayout.State_Header_Refreshing:\n this.textView.setText(R.string_.prll_header_state_loading);\n this.progressBar.setVisibility(View.VISIBLE);\n break;\n case PullRefreshLoadLayout.State_Header_ReadyToRefresh:\n this.textView.setText(R.string_.prll_header_state_ready);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Header_RefreshFail:\n this.textView.setText(R.string_.prll_header_state_fail);\n this.progressBar.setVisibility(View.GONE);\n break;\n default:\n this.textView.setText(R.string_.prll_header_state_normal);\n this.progressBar.setVisibility(View.GONE);\n }\n }\n }\n PullRefreshLoadLayout.DefaultHeaderView = DefaultHeaderView;\n class DefaultFooterView extends FooterView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.progressBar = new ProgressBar(context);\n this.progressBar.setVisibility(View.GONE);\n this.textView = new TextView(context);\n let density = android.content.res.Resources.getDisplayMetrics().density;\n const pad = 16 * density;\n this.textView.setPadding(pad / 2, pad, pad / 2, pad);\n this.textView.setGravity(Gravity.CENTER);\n let linear = new LinearLayout(context);\n linear.addView(this.progressBar);\n linear.addView(this.textView);\n linear.setGravity(Gravity.CENTER);\n this.addView(linear, -1, -2);\n this.onStateChange(PullRefreshLoadLayout.State_Footer_Normal, PullRefreshLoadLayout.State_Disable);\n this.setOnClickListener({\n onClick(v) {\n let parent = v.getParent();\n if (parent instanceof PullRefreshLoadLayout) {\n parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);\n }\n }\n });\n }\n onStateChange(newState, oldState) {\n switch (newState) {\n case PullRefreshLoadLayout.State_Footer_Loading:\n this.textView.setText(R.string_.prll_footer_state_loading);\n this.progressBar.setVisibility(View.VISIBLE);\n break;\n case PullRefreshLoadLayout.State_Footer_ReadyToLoad:\n this.textView.setText(R.string_.prll_footer_state_ready);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Footer_LoadFail:\n this.textView.setText(R.string_.prll_footer_state_fail);\n this.progressBar.setVisibility(View.GONE);\n break;\n case PullRefreshLoadLayout.State_Footer_NoMoreToLoad:\n this.textView.setText(R.string_.prll_footer_state_no_more);\n this.progressBar.setVisibility(View.GONE);\n break;\n default:\n this.textView.setText(R.string_.prll_footer_state_normal);\n this.progressBar.setVisibility(View.GONE);\n }\n }\n }\n PullRefreshLoadLayout.DefaultFooterView = DefaultFooterView;\n })(PullRefreshLoadLayout = widget.PullRefreshLoadLayout || (widget.PullRefreshLoadLayout = {}));\n })(widget = androidui.widget || (androidui.widget = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Canvas = android.graphics.Canvas;\n let sNextID = 0;\n class NativeCanvas extends Canvas {\n initCanvasImpl() {\n this.canvasId = ++sNextID;\n this.createCanvasImpl();\n }\n createCanvasImpl() {\n native.NativeApi.canvas.createCanvas(this.canvasId, this.mWidth, this.mHeight);\n this.save();\n }\n recycleImpl() {\n native.NativeApi.canvas.recycleCanvas(this.canvasId);\n }\n isNativeAccelerated() {\n return true;\n }\n translateImpl(dx, dy) {\n native.NativeApi.canvas.translate(this.canvasId, dx, dy);\n }\n scaleImpl(sx, sy) {\n native.NativeApi.canvas.scale(this.canvasId, sx, sy);\n }\n rotateImpl(degrees) {\n native.NativeApi.canvas.rotate(this.canvasId, degrees);\n }\n concatImpl(MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y, MPERSP_0, MPERSP_1, MPERSP_2) {\n native.NativeApi.canvas.concat(this.canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y);\n }\n drawARGBImpl(a, r, g, b) {\n native.NativeApi.canvas.drawColor(this.canvasId, android.graphics.Color.argb(a, r, g, b));\n }\n clearColorImpl() {\n native.NativeApi.canvas.clearColor(this.canvasId);\n }\n saveImpl() {\n native.NativeApi.canvas.save(this.canvasId);\n }\n restoreImpl() {\n native.NativeApi.canvas.restore(this.canvasId);\n }\n clipRectImpl(left, top, width, height) {\n native.NativeApi.canvas.clipRect(this.canvasId, left, top, width, height);\n }\n clipRoundRectImpl(left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n native.NativeApi.canvas.clipRoundRectImpl(this.canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft);\n }\n drawCanvasImpl(canvas, offsetX, offsetY) {\n if (canvas instanceof NativeCanvas) {\n native.NativeApi.canvas.drawCanvas(this.canvasId, canvas.canvasId, offsetX, offsetY);\n }\n else {\n throw Error('canvas should be NativeCanvas');\n }\n }\n drawImageImpl(image, srcRect, dstRect) {\n if (image instanceof native.NativeImage) {\n if (srcRect && dstRect) {\n native.NativeApi.canvas.drawImage8args(this.canvasId, image.imageId, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom, dstRect.left, dstRect.top, dstRect.right, dstRect.bottom);\n }\n else if (dstRect) {\n native.NativeApi.canvas.drawImage4args(this.canvasId, image.imageId, dstRect.left, dstRect.top, dstRect.right, dstRect.bottom);\n }\n else {\n native.NativeApi.canvas.drawImage2args(this.canvasId, image.imageId, 0, 0);\n }\n }\n else {\n throw Error('image should be NativeImage');\n }\n }\n drawRectImpl(left, top, width, height, style) {\n native.NativeApi.canvas.drawRect(this.canvasId, left, top, width, height, style);\n }\n drawOvalImpl(oval, style) {\n native.NativeApi.canvas.drawOval(this.canvasId, oval.left, oval.top, oval.right, oval.bottom, style);\n }\n drawCircleImpl(cx, cy, radius, style) {\n native.NativeApi.canvas.drawCircle(this.canvasId, cx, cy, radius, style);\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n native.NativeApi.canvas.drawArc(this.canvasId, oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle, useCenter, style);\n }\n drawRoundRectImpl(rect, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n native.NativeApi.canvas.drawRoundRectImpl(this.canvasId, rect.left, rect.top, rect.width(), rect.height(), radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style);\n }\n drawTextImpl(text, x, y, style) {\n native.NativeApi.canvas.drawText(this.canvasId, text, x, y, style);\n }\n setColorImpl(color, style) {\n native.NativeApi.canvas.setFillColor(this.canvasId, color, style);\n }\n multiplyGlobalAlphaImpl(alpha) {\n native.NativeApi.canvas.multiplyGlobalAlpha(this.canvasId, alpha);\n }\n setGlobalAlphaImpl(alpha) {\n native.NativeApi.canvas.setGlobalAlpha(this.canvasId, alpha);\n }\n setTextAlignImpl(align) {\n native.NativeApi.canvas.setTextAlign(this.canvasId, align);\n }\n setLineWidthImpl(width) {\n native.NativeApi.canvas.setLineWidth(this.canvasId, width);\n }\n setLineCapImpl(lineCap) {\n native.NativeApi.canvas.setLineCap(this.canvasId, lineCap);\n }\n setLineJoinImpl(lineJoin) {\n native.NativeApi.canvas.setLineJoin(this.canvasId, lineJoin);\n }\n setShadowImpl(radius, dx, dy, color) {\n native.NativeApi.canvas.setShadow(this.canvasId, radius, dx, dy, color);\n }\n setFontSizeImpl(size) {\n native.NativeApi.canvas.setFontSize(this.canvasId, size);\n }\n setFontImpl(fontName) {\n native.NativeApi.canvas.setFont(this.canvasId, fontName);\n }\n isImageSmoothingEnabledImpl() {\n return false;\n }\n setImageSmoothingEnabledImpl(enable) {\n }\n static applyTextMeasure(cacheMeasureTextSize, defaultWidth, widths) {\n android.graphics.Canvas.measureTextImpl = function (text, textSize) {\n let width = 0;\n for (let i = 0, length = text.length; i < length; i++) {\n let c = text.charCodeAt(i);\n let cWidth = widths[c] || defaultWidth;\n width += cWidth * textSize / cacheMeasureTextSize;\n }\n return width;\n };\n }\n }\n native.NativeCanvas = NativeCanvas;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Surface = android.view.Surface;\n let sNextSurfaceID = 0;\n const SurfaceInstances = new Map();\n class NativeSurface extends Surface {\n initImpl() {\n this.initCanvasBound();\n this.surfaceId = ++sNextSurfaceID;\n SurfaceInstances.set(this.surfaceId, this);\n let bound = this.mCanvasBound;\n native.NativeApi.surface.createSurface(this.surfaceId, bound.left, bound.top, bound.right, bound.bottom);\n }\n notifyBoundChange() {\n this.initCanvasBound();\n let bound = this.mCanvasBound;\n native.NativeApi.surface.onSurfaceBoundChange(this.surfaceId, bound.left, bound.top, bound.right, bound.bottom);\n }\n lockCanvasImpl(left, top, width, height) {\n if (!this.lockedCanvas) {\n this.lockedCanvas = new NativeSurfaceLockCanvas(width, height);\n }\n native.NativeApi.surface.lockCanvas(this.surfaceId, this.lockedCanvas.canvasId, left, top, left + width, top + height);\n return this.lockedCanvas;\n }\n unlockCanvasAndPost(canvas) {\n if (canvas instanceof native.NativeCanvas) {\n native.NativeApi.surface.unlockCanvasAndPost(this.surfaceId, canvas.canvasId);\n }\n else {\n throw Error('canvas is not NativeCanvas');\n }\n }\n showFps(fps) {\n native.NativeApi.surface.showFps(fps);\n }\n static notifySurfaceReady(surfaceId) {\n let surface = SurfaceInstances.get(surfaceId);\n surface.viewRoot.scheduleTraversals();\n }\n static notifySurfaceSupportDirtyDraw(surfaceId, dirtyDrawSupport) {\n let surface = SurfaceInstances.get(surfaceId);\n surface.mSupportDirtyDraw = dirtyDrawSupport;\n surface.viewRoot.scheduleTraversals();\n }\n }\n native.NativeSurface = NativeSurface;\n class NativeSurfaceLockCanvas extends native.NativeCanvas {\n createCanvasImpl() {\n }\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var NetImage = androidui.image.NetImage;\n var Rect = android.graphics.Rect;\n let sNextId = 0;\n const NativeImageInstances = new Map();\n class NativeImage extends NetImage {\n createImage() {\n this.imageId = sNextId++;\n NativeImageInstances.set(this.imageId, this);\n native.NativeApi.image.createImage(this.imageId);\n }\n loadImage() {\n native.NativeApi.image.loadImage(this.imageId, this.src);\n }\n recycle() {\n native.NativeApi.image.recycleImage(this.imageId);\n NativeImageInstances.delete(this.imageId);\n }\n getPixels(bound, callBack) {\n if (!callBack)\n return;\n if (!bound)\n bound = new Rect(0, 0, this.width, this.height);\n if (bound.isEmpty()) {\n callBack([]);\n return;\n }\n if (!this.getPixelsCallbacks)\n this.getPixelsCallbacks = [];\n this.getPixelsCallbacks.push(callBack);\n let callBackIndex = this.getPixelsCallbacks.length - 1;\n native.NativeApi.image.getPixels(this.imageId, callBackIndex, bound.left, bound.top, bound.right, bound.bottom);\n }\n getBorderPixels(callBack) {\n if (!callBack)\n return;\n if (this.leftBorder && this.topBorder && this.rightBorder && this.bottomBorder) {\n callBack(this.leftBorder, this.topBorder, this.rightBorder, this.bottomBorder);\n }\n else {\n super.getBorderPixels(callBack);\n }\n }\n static notifyLoadFinish(imageId, width, height, leftBorder, topBorder, rightBorder, bottomBorder) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = width;\n image.mImageHeight = height;\n image.leftBorder = leftBorder;\n image.topBorder = topBorder;\n image.rightBorder = rightBorder;\n image.bottomBorder = bottomBorder;\n image.fireOnLoad();\n }\n static notifyLoadError(imageId) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = image.mImageHeight = 0;\n image.fireOnError();\n }\n static notifyGetPixels(imageId, callBackIndex, data) {\n let image = NativeImageInstances.get(imageId);\n let callBack = image.getPixelsCallbacks[callBackIndex];\n image.getPixelsCallbacks[callBackIndex] = null;\n callBack(data);\n }\n }\n native.NativeImage = NativeImage;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var Rect = android.graphics.Rect;\n class NativeEditText extends android.widget.EditText {\n constructor() {\n super(...arguments);\n this.mRectTmp = new Rect();\n }\n computeTextArea() {\n this.getGlobalVisibleRect(this.mRectTmp);\n if (this.mLayout == null) {\n this.assumeLayout();\n }\n this.mRectTmp.left += this.getTotalPaddingLeft();\n this.mRectTmp.top += this.getTotalPaddingTop();\n this.mRectTmp.right -= (this.getTotalPaddingRight());\n this.mRectTmp.bottom -= (this.getTotalPaddingBottom());\n }\n onInputElementFocusChanged(focused) {\n if (focused) {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n }\n else {\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n return super.onInputElementFocusChanged(focused);\n }\n tryShowInputElement() {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n return super.tryShowInputElement();\n }\n tryDismissInputElement() {\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n return super.tryDismissInputElement();\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n if (this.isInputElementShowed() && this.isFocused() && this.getText().length > 0) {\n this.computeTextArea();\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectTmp.left, this.mRectTmp.top, this.mRectTmp.right, this.mRectTmp.bottom);\n }\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n }\n native.NativeEditText = NativeEditText;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var WebView = android.webkit.WebView;\n var Rect = android.graphics.Rect;\n const anchor = document.createElement('a');\n const webViewMap = new Map();\n class NativeWebView extends WebView {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n this.mBoundRect = new Rect();\n this.mRectTmp = new Rect();\n this.mLocationTmp = androidui.util.ArrayCreator.newNumberArray(2);\n native.NativeApi.webView.createWebView(this.hashCode());\n webViewMap.set(this.hashCode(), this);\n let activity = this.getContext();\n let onDestroy = activity.onDestroy;\n activity.onDestroy = () => {\n onDestroy.call(activity);\n webViewMap.delete(this.hashCode());\n native.NativeApi.webView.destroyWebView(this.hashCode());\n };\n }\n goBack() {\n native.NativeApi.webView.webViewGoBack(this.hashCode());\n }\n canGoBack() {\n return this.mCanGoBack;\n }\n loadUrl(url) {\n anchor.href = url;\n url = anchor.href;\n this.mUrl = url;\n native.NativeApi.webView.webViewLoadUrl(this.hashCode(), url);\n }\n reload() {\n native.NativeApi.webView.webViewReload(this.hashCode());\n }\n getUrl() {\n return this.mUrl;\n }\n getTitle() {\n return this.mTitle || this.getUrl();\n }\n setWebViewClient(client) {\n super.setWebViewClient(client);\n }\n dependOnDebugLayout() {\n return false;\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n this.getLocationOnScreen(this.mLocationTmp);\n this.mRectTmp.set(this.mLocationTmp[0], this.mLocationTmp[1], this.mLocationTmp[0] + this.getWidth(), this.mLocationTmp[1] + this.getHeight());\n if (!this.mRectTmp.equals(this.mBoundRect)) {\n this.mBoundRect.set(this.mRectTmp);\n native.NativeApi.webView.webViewBoundChange(this.hashCode(), this.mBoundRect.left, this.mBoundRect.top, this.mBoundRect.right, this.mBoundRect.bottom);\n }\n }\n static notifyLoadFinish(viewHash, url, title) {\n let nativeWebView = webViewMap.get(viewHash);\n if (nativeWebView == null)\n return;\n nativeWebView.mUrl = url;\n nativeWebView.mTitle = title;\n if (nativeWebView.mClient != null) {\n nativeWebView.mClient.onReceivedTitle(nativeWebView, title);\n nativeWebView.mClient.onPageFinished(nativeWebView, url);\n }\n }\n static notifyWebViewHistoryChange(viewHash, currentHistoryIndex, historySize) {\n let nativeWebView = webViewMap.get(viewHash);\n if (nativeWebView == null)\n return;\n nativeWebView.mCanGoBack = currentHistoryIndex > 0;\n }\n }\n native.NativeWebView = NativeWebView;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n var HtmlView = androidui.widget.HtmlView;\n var Rect = android.graphics.Rect;\n class NativeHtmlView extends HtmlView {\n constructor() {\n super(...arguments);\n this.mRectDrawHTMLBoundTmp = new Rect();\n }\n _syncBoundAndScrollToElement() {\n super._syncBoundAndScrollToElement();\n this.getGlobalVisibleRect(this.mRectDrawHTMLBoundTmp);\n native.NativeApi.drawHTML.showDrawHTMLBound(this.hashCode(), this.mRectDrawHTMLBoundTmp.left, this.mRectDrawHTMLBoundTmp.top, this.mRectDrawHTMLBoundTmp.right, this.mRectDrawHTMLBoundTmp.bottom);\n }\n onDetachedFromWindow() {\n super.onDetachedFromWindow();\n native.NativeApi.drawHTML.hideDrawHTMLBound(this.hashCode());\n }\n }\n native.NativeHtmlView = NativeHtmlView;\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nvar androidui;\n(function (androidui) {\n var native;\n (function (native) {\n const AndroidJsBridgeProperty = 'AndroidUIRuntime';\n const JSBridge = window[AndroidJsBridgeProperty];\n class NativeApi {\n }\n native.NativeApi = NativeApi;\n (function (NativeApi) {\n class BatchCall {\n constructor() {\n this.calls = [];\n }\n pushCall(method, methodArgs) {\n this.calls.push(method);\n this.calls.push(...methodArgs);\n this.calls.push(null);\n }\n clear() {\n this.calls = [];\n }\n toString() {\n return this.calls.join('\\n');\n }\n }\n let batchCall = new BatchCall();\n class SurfaceApi {\n createSurface(surfaceId, left, top, right, bottom) {\n JSBridge.createSurface(surfaceId, left, top, right, bottom);\n }\n onSurfaceBoundChange(surfaceId, left, top, right, bottom) {\n JSBridge.onSurfaceBoundChange(surfaceId, left, top, right, bottom);\n }\n lockCanvas(surfaceId, canvasId, left, top, right, bottom) {\n batchCall.pushCall('31', [surfaceId, canvasId, left, top, right, bottom]);\n }\n unlockCanvasAndPost(surfaceId, canvasId) {\n batchCall.pushCall('32', [surfaceId, canvasId]);\n JSBridge.batchCall(batchCall.toString());\n batchCall.clear();\n }\n showFps(fps) {\n JSBridge.showJSFps(fps);\n }\n }\n NativeApi.SurfaceApi = SurfaceApi;\n class CanvasApi {\n createCanvas(canvasId, width, height) {\n batchCall.pushCall('33', [canvasId, width, height]);\n }\n recycleCanvas(canvasId) {\n batchCall.pushCall('34', [canvasId]);\n }\n translate(canvasId, dx, dy) {\n batchCall.pushCall('35', [canvasId, dx, dy]);\n }\n scale(canvasId, sx, sy) {\n batchCall.pushCall('36', [canvasId, sx, sy]);\n }\n rotate(canvasId, degrees) {\n batchCall.pushCall('37', [canvasId, degrees]);\n }\n concat(canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y) {\n batchCall.pushCall('38', [canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y]);\n }\n drawColor(canvasId, color) {\n batchCall.pushCall('39', [canvasId, color]);\n }\n clearColor(canvasId) {\n batchCall.pushCall('40', [canvasId]);\n }\n drawRect(canvasId, left, top, width, height, style) {\n batchCall.pushCall('41', [canvasId, left, top, width, height, style || android.graphics.Paint.Style.FILL]);\n }\n clipRect(canvasId, left, top, width, height) {\n batchCall.pushCall('42', [canvasId, left, top, width, height]);\n }\n save(canvasId) {\n batchCall.pushCall('43', [canvasId]);\n }\n restore(canvasId) {\n batchCall.pushCall('44', [canvasId]);\n }\n drawCanvas(canvasId, drawCanvasId, offsetX, offsetY) {\n batchCall.pushCall('45', [canvasId, drawCanvasId, offsetX, offsetY]);\n }\n drawText(canvasId, text, x, y, fillStyle) {\n text = '\"' + text.replace(/(\\n)+|(\\r\\n)+/g, \"\\\\n\") + '\"';\n batchCall.pushCall('47', [canvasId, text, x, y, fillStyle || android.graphics.Paint.Style.FILL]);\n }\n setFillColor(canvasId, color, style) {\n batchCall.pushCall('49', [canvasId, color, style || android.graphics.Paint.Style.FILL]);\n }\n multiplyGlobalAlpha(canvasId, alpha) {\n batchCall.pushCall('50', [canvasId, alpha]);\n }\n setGlobalAlpha(canvasId, alpha) {\n batchCall.pushCall('51', [canvasId, alpha]);\n }\n setTextAlign(canvasId, align) {\n batchCall.pushCall('52', [canvasId, align]);\n }\n setLineWidth(canvasId, width) {\n batchCall.pushCall('53', [canvasId, width]);\n }\n setLineCap(canvasId, lineCap) {\n batchCall.pushCall('54', [canvasId, lineCap]);\n }\n setLineJoin(canvasId, lineJoin) {\n batchCall.pushCall('55', [canvasId, lineJoin]);\n }\n setShadow(canvasId, radius, dx, dy, color) {\n batchCall.pushCall('56', [canvasId, radius, dx, dy, color]);\n }\n setFontSize(canvasId, size) {\n batchCall.pushCall('57', [canvasId, size]);\n }\n setFont(canvasId, fontName) {\n batchCall.pushCall('58', [canvasId, fontName]);\n }\n drawOval(canvasId, left, top, right, bottom, style) {\n batchCall.pushCall('59', [canvasId, left, top, right, bottom, style || android.graphics.Paint.Style.FILL]);\n }\n drawCircle(canvasId, cx, cy, radius, style) {\n batchCall.pushCall('60', [canvasId, cx, cy, radius, style || android.graphics.Paint.Style.FILL]);\n }\n drawArc(canvasId, left, top, right, bottom, startAngle, sweepAngle, useCenter, style) {\n batchCall.pushCall('61', [canvasId, left, top, right, bottom, startAngle, sweepAngle, useCenter, style || android.graphics.Paint.Style.FILL]);\n }\n drawRoundRectImpl(canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style) {\n batchCall.pushCall('62', [canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft, style || android.graphics.Paint.Style.FILL]);\n }\n clipRoundRectImpl(canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft) {\n batchCall.pushCall('63', [canvasId, left, top, width, height, radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft]);\n }\n drawImage2args(canvasId, drawImageId, left, top) {\n batchCall.pushCall('70', [canvasId, drawImageId, left, top]);\n }\n drawImage4args(canvasId, drawImageId, dstLeft, dstTop, dstRight, dstBottom) {\n batchCall.pushCall('71', [canvasId, drawImageId, dstLeft, dstTop, dstRight, dstBottom]);\n }\n drawImage8args(canvasId, drawImageId, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom) {\n batchCall.pushCall('72', [canvasId, drawImageId, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom]);\n }\n }\n NativeApi.CanvasApi = CanvasApi;\n })(NativeApi = native.NativeApi || (native.NativeApi = {}));\n if (JSBridge) {\n android.view.Surface.prototype = native.NativeSurface.prototype;\n android.graphics.Canvas.prototype = native.NativeCanvas.prototype;\n androidui.image.NetImage.prototype = native.NativeImage.prototype;\n android.widget.EditText = native.NativeEditText;\n android.webkit.WebView = native.NativeWebView;\n androidui.widget.HtmlView = native.NativeHtmlView;\n NativeApi.surface = new NativeApi.SurfaceApi();\n NativeApi.canvas = new NativeApi.CanvasApi();\n NativeApi.image = JSBridge;\n NativeApi.drawHTML = JSBridge;\n NativeApi.webView = JSBridge;\n android.os.MessageQueue.requestNextLoop = () => {\n setTimeout(android.os.MessageQueue.loop, 0);\n };\n androidui.AndroidUI.showAppClosed = () => {\n JSBridge.closeApp();\n };\n JSBridge.initRuntime();\n window.addEventListener('load', () => {\n setInterval(() => {\n JSBridge.pageAlive(1500);\n }, 800);\n });\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nwindow[`android`] = android;\nwindow[`java`] = java;\nwindow[`AndroidUI`] = androidui.AndroidUI;\n(function () {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"AndroidUILoadFinish\", true, true, null);\n document.dispatchEvent(event);\n})();\n"]} \ No newline at end of file diff --git a/dist/android-ui.js b/dist/android-ui.js index e0d7d5d..1b0d021 100644 --- a/dist/android-ui.js +++ b/dist/android-ui.js @@ -1,5 +1,5 @@ /** - * AndroidUIX v0.6.7 + * AndroidUIX v0.7.0 * https://github.com/linfaxin/AndroidUIX */ var java; @@ -1424,12 +1424,12 @@ var android; Paint.DEFAULT_PAINT_FLAGS = Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG; graphics.Paint = Paint; (function (Paint) { + var Align; (function (Align) { Align[Align["LEFT"] = 0] = "LEFT"; Align[Align["CENTER"] = 1] = "CENTER"; Align[Align["RIGHT"] = 2] = "RIGHT"; - })(Paint.Align || (Paint.Align = {})); - var Align = Paint.Align; + })(Align = Paint.Align || (Paint.Align = {})); class FontMetrics { constructor() { this.top = 0; @@ -1453,24 +1453,24 @@ var android; } } Paint.FontMetricsInt = FontMetricsInt; + var Style; (function (Style) { Style[Style["FILL"] = 0] = "FILL"; Style[Style["STROKE"] = 1] = "STROKE"; Style[Style["FILL_AND_STROKE"] = 2] = "FILL_AND_STROKE"; - })(Paint.Style || (Paint.Style = {})); - var Style = Paint.Style; + })(Style = Paint.Style || (Paint.Style = {})); + var Cap; (function (Cap) { Cap[Cap["BUTT"] = 0] = "BUTT"; Cap[Cap["ROUND"] = 1] = "ROUND"; Cap[Cap["SQUARE"] = 2] = "SQUARE"; - })(Paint.Cap || (Paint.Cap = {})); - var Cap = Paint.Cap; + })(Cap = Paint.Cap || (Paint.Cap = {})); + var Join; (function (Join) { Join[Join["MITER"] = 0] = "MITER"; Join[Join["ROUND"] = 1] = "ROUND"; Join[Join["BEVEL"] = 2] = "BEVEL"; - })(Paint.Join || (Paint.Join = {})); - var Join = Paint.Join; + })(Join = Paint.Join || (Paint.Join = {})); })(Paint = graphics.Paint || (graphics.Paint = {})); })(graphics = android.graphics || (android.graphics = {})); })(android || (android = {})); @@ -2124,13 +2124,13 @@ var android; Matrix.kRectStaysRect_Shift = 4; graphics.Matrix = Matrix; (function (Matrix) { + var ScaleToFit; (function (ScaleToFit) { ScaleToFit[ScaleToFit["FILL"] = 0] = "FILL"; ScaleToFit[ScaleToFit["START"] = 1] = "START"; ScaleToFit[ScaleToFit["CENTER"] = 2] = "CENTER"; ScaleToFit[ScaleToFit["END"] = 3] = "END"; - })(Matrix.ScaleToFit || (Matrix.ScaleToFit = {})); - var ScaleToFit = Matrix.ScaleToFit; + })(ScaleToFit = Matrix.ScaleToFit || (Matrix.ScaleToFit = {})); })(Matrix = graphics.Matrix || (graphics.Matrix = {})); function Math_toRadians(angdeg) { return angdeg / 180.0 * Math.PI; @@ -2196,22 +2196,10 @@ var androidui; return 1; if (url.startsWith('data:')) return 1; - let idx = url.lastIndexOf('.'); - if (idx > 0) { - url = url.substring(0, idx); + const match = url.match(/@(\d)x(\.9)?\.\w*$/); + if (match) { + return parseInt(match[1]); } - if (url.endsWith('.9')) - url = url.substring(0, url.length - 2); - if (url.endsWith('@2x')) - return 2; - if (url.endsWith('@3x')) - return 3; - if (url.endsWith('@4x')) - return 4; - if (url.endsWith('@5x')) - return 5; - if (url.endsWith('@6x')) - return 6; return 1; } isImageLoaded() { @@ -3246,8 +3234,8 @@ var android; (function (drawable) { var Drawable = android.graphics.drawable.Drawable; class ScrollBarDrawable extends Drawable { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mRange = 0; this.mOffset = 0; this.mExtent = 0; @@ -4305,7 +4293,7 @@ var androidui; var android; (function (android) { var view; - (function (view_1) { + (function (view) { var ClassFinder = androidui.util.ClassFinder; class LayoutInflater { constructor(context) { @@ -4335,16 +4323,13 @@ var android; if (!refLayoutId) return null; let refEle = this.mContext.getResources().getLayout(refLayoutId); - let view = this.inflate(refEle, viewParent, false); - if (view) { - for (let attr of Array.from(domtree.attributes)) { - let name = attr.name; - if (name === 'layout') - continue; - view.bindElement.setAttribute(name, attr.value); - } + for (let attr of Array.from(domtree.attributes)) { + let name = attr.name; + if (name === 'layout') + continue; + refEle.setAttribute(name, attr.value); } - return view; + return this.inflate(refEle, viewParent); } else if (className === 'MERGE') { if (!viewParent) @@ -4372,7 +4357,7 @@ var android; defStyle = this.mContext.getResources().getDefStyle(styleAttrValue); } let rootView; - if (styleAttrValue) + if (defStyle) rootView = new rootViewClass(this.mContext, domtree, defStyle); else rootView = new rootViewClass(this.mContext, domtree); @@ -4380,17 +4365,15 @@ var android; rootView.onInflateAdapter(domtree, this.mContext, viewParent); domtree.parentNode.removeChild(domtree); } - if (!(rootView instanceof view_1.View)) { + if (!(rootView instanceof view.View)) { return rootView; } let params; if (viewParent) { - params = viewParent.generateDefaultLayoutParams(); - params.parseAttributeFrom(domtree, this.mContext); + params = viewParent.generateLayoutParamsFromAttr(domtree); rootView.setLayoutParams(params); } - rootView._fireInitedAttributeChange(); - if (rootView instanceof view_1.ViewGroup) { + if (rootView instanceof view.ViewGroup) { let parent = rootView; children.forEach((item) => { if (item instanceof HTMLElement) { @@ -4399,12 +4382,18 @@ var android; }); } rootView.onFinishInflate(); - if (attachToRoot && viewParent) - viewParent.addView(rootView); + if (attachToRoot && viewParent) { + if (params) { + viewParent.addView(rootView, params); + } + else { + viewParent.addView(rootView); + } + } return rootView; } } - view_1.LayoutInflater = LayoutInflater; + view.LayoutInflater = LayoutInflater; })(view = android.view || (android.view = {})); })(android || (android = {})); var android; @@ -4427,6 +4416,9 @@ var android; getLayoutInflater() { return this.mLayoutInflater; } + obtainStyledAttributes(attrs, defStyleAttr) { + return content.res.TypedArray.obtain(this.mResources, attrs, defStyleAttr); + } } content.Context = Context; })(content = android.content || (android.content = {})); @@ -4436,7 +4428,7 @@ var android; var R; (function (R) { const _layout_data = { - "action_bar": "\n \n \n \n \n \n \n", + "action_bar": "\n \n \n \n \n \n \n", "alert_dialog": "\n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n", "alert_dialog_progress": "\n \n \n \n", "popup_menu_item_layout": "\n\n \n \n \n \n\n \n\n \n\n \n\n \n \n", @@ -4693,18 +4685,42 @@ var android; (function (res_1) { var AttrValueParser = androidui.attr.AttrValueParser; class TypedArray { - constructor(res, xml) { + constructor(res, attrMap) { this.mResources = res; - this.mXml = xml; + this.attrMap = attrMap; } - static obtain(res, xml) { + static obtain(res, xml, defStyleAttr) { + const attrMap = new Map(); + if (defStyleAttr) { + for (let [key, value] of defStyleAttr.entries()) { + attrMap.set(key.toLowerCase(), value); + } + } + if (xml) { + const refStyleString = xml.getAttribute('android:style'); + if (refStyleString) { + const map = res.getStyleAsMap(refStyleString); + if (map) { + for (let [key, value] of map.entries()) { + attrMap.set(key.toLowerCase(), value); + } + } + } + for (let attr of Array.from(xml.attributes)) { + const name = attr.name; + if (name === 'android:style' || name === 'style') + continue; + attrMap.set(name, attr.value); + } + } const attrs = res.mTypedArrayPool.acquire(); if (attrs != null) { attrs.mRecycled = false; - attrs.mXml = xml; + attrs.attrMap = attrMap; + attrs.attrMapKeysCache = []; return attrs; } - return new TypedArray(res, xml); + return new TypedArray(res, attrMap); } checkRecycled() { if (this.mRecycled) { @@ -4713,83 +4729,119 @@ var android; } length() { this.checkRecycled(); - return this.mXml.attributes.length; + if (!this.attrMap) + return 0; + return this.attrMap.size; + } + getIndex(keyIndex) { + if (!this.attrMapKeysCache) { + this.attrMapKeysCache = Array.from(this.attrMap.keys()); + } + return this.attrMapKeysCache[keyIndex]; + } + getLowerCaseNoNamespaceAttrNames() { + const keys = []; + for (let key of this.attrMap.keys()) { + keys.push(key.split(':').pop()); + } + return keys; } getResources() { return this.mResources; } + getAttrValue(attrName) { + const name = attrName.toLowerCase(); + return this.attrMap && (this.attrMap.get(name) || this.attrMap.get('android:' + name)); + } + getResourceId(attrName, defaultResourceId) { + if (this.hasValueOrEmpty(attrName)) { + return this.getAttrValue(attrName); + } + return defaultResourceId; + } getText(attrName) { return this.getString(attrName); } getString(attrName) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); - return AttrValueParser.parseString(this.mResources, value, null); + let value = this.getAttrValue(attrName); + return AttrValueParser.parseString(this.mResources, value, value); } getBoolean(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseBoolean(this.mResources, value, defValue); } getInt(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseInt(this.mResources, value, defValue); } getFloat(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseFloat(this.mResources, value, defValue); } getColor(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseColor(this.mResources, value, defValue); } getColorStateList(attrName) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseColorStateList(this.mResources, value); } getInteger(attrName, defValue) { return this.getInt(attrName, defValue); } + getLayoutDimension(attrName, defValue) { + this.checkRecycled(); + let value = this.getAttrValue(attrName); + if (value === 'wrap_content') + return -2; + if (value === 'fill_parent' || value === 'match_parent') + return -1; + return AttrValueParser.parseDimension(this.mResources, value, defValue); + } getDimension(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseDimension(this.mResources, value, defValue); } getDimensionPixelOffset(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseDimensionPixelOffset(this.mResources, value, defValue); } getDimensionPixelSize(attrName, defValue) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseDimensionPixelSize(this.mResources, value, defValue); } getDrawable(attrName) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseDrawable(this.mResources, value); } getTextArray(attrName) { this.checkRecycled(); - let value = this.mXml.getAttribute(attrName); + let value = this.getAttrValue(attrName); return AttrValueParser.parseTextArray(this.mResources, value); } hasValue(attrName) { this.checkRecycled(); - return this.mXml.getAttribute(attrName) != null; + return this.getAttrValue(attrName) != null; } hasValueOrEmpty(attrName) { this.checkRecycled(); - return this.mXml.hasAttribute(attrName); + const name = attrName.toLowerCase(); + return this.attrMap && (this.attrMap.has(name) || this.attrMap.has('android:' + name)); } recycle() { this.mRecycled = true; - this.mXml = null; + this.attrMap = null; + this.attrMapKeysCache = null; this.mResources.mTypedArrayPool.release(this); } } @@ -4846,12 +4898,16 @@ var android; displayMetrics.heightPixels = contentEle.offsetHeight * density; } getDefStyle(refString) { + if (refString === '@null') + return null; if (refString.startsWith('@android:attr/')) { refString = refString.substring('@android:attr/'.length); return android.R.attr[refString]; } } getDrawable(refString) { + if (refString === '@null') + return null; if (refString.startsWith('@android:drawable/')) { refString = refString.substring('@android:drawable/'.length); return android.R.drawable[refString] || android.R.image[refString]; @@ -4879,10 +4935,13 @@ var android; ele = this.getValue(refString); if (ele) { let text = ele.innerText; - if (text.startsWith('@android:drawable/') || text.startsWith('@drawable/') - || text.startsWith('@android:color/') || text.startsWith('@color/')) { + if (text.startsWith('@android:drawable/') || text.startsWith('@drawable/')) { return this.getDrawable(text); } + if (text.startsWith('@android:color/') || text.startsWith('@color/')) { + let color = this.getColor(text); + return new ColorDrawable(color); + } return Drawable.createFromXml(this, ele); } throw new Error("NotFoundException: Resource " + refString + " is not found"); @@ -4918,6 +4977,8 @@ var android; throw new Error("NotFoundException: Resource " + refString + " is not found"); } getColorStateList(refString) { + if (refString === '@null') + return null; if (refString.startsWith('@android:color/')) { refString = refString.substring('@android:color/'.length); let color = android.R.color[refString]; @@ -5039,6 +5100,8 @@ var android; getLayout(refString) { if (!refString || !refString.trim().startsWith('@')) return null; + if (refString === '@null') + return null; if (refString.startsWith('@android:layout/')) { refString = refString.substring('@android:layout/'.length); return android.R.layout.getLayoutData(refString); @@ -5050,7 +5113,19 @@ var android; return ele; throw new Error("NotFoundException: Resource " + refString + " is not found"); } + getAnimation(refString) { + if (refString === '@null') + return null; + if (!refString || !refString.trim().startsWith('@')) + return null; + if (refString.startsWith('@android:anim/')) { + refString = refString.substring('@android:anim/'.length); + return android.R.anim[refString]; + } + } getStyleAsMap(refString) { + if (refString === '@null') + return null; if (!refString.startsWith('@style/')) { refString = '@style/' + refString; } @@ -5084,10 +5159,14 @@ var android; return styleMap; } getXml(refString) { + if (refString === '@null') + return null; if (Resources._AppBuildXmlFinder) return Resources._AppBuildXmlFinder(refString); } getValue(refString, resolveRefs = true) { + if (refString === '@null') + return null; if (Resources._AppBuildValueFinder) { let ele = Resources._AppBuildValueFinder(refString); if (!ele) @@ -5104,14 +5183,8 @@ var android; obtainAttributes(attrs) { return res.TypedArray.obtain(this, attrs); } - static set buildDrawableFinder(value) { - throw Error('Error: old build tool not support. Please update your build_res.js file.'); - } - static set buildLayoutFinder(value) { - throw Error('Error: old build tool not support. Please update your build_res.js file.'); - } - static get buildResourcesElement() { - throw Error('Error: old build tool not support. Please update your build_res.js file.'); + obtainStyledAttributes(attrs, defStyleAttr) { + return res.TypedArray.obtain(this, attrs, defStyleAttr); } } Resources.instance = new Resources(); @@ -5270,6 +5343,11 @@ var android; var ViewConfiguration = android.view.ViewConfiguration; const tempBound = new Rect(); const ID_FixID_Cache = []; + const tmpTouchEvent = { + touches: null, + changedTouches: null, + type: null + }; function fixEventId(e) { for (let i = 0, length = e.changedTouches.length; i < length; i++) { fixTouchId(e.changedTouches[i]); @@ -5280,24 +5358,34 @@ var android; if (e.type == 'touchend' || e.type == 'touchcancel') { ID_FixID_Cache[e.changedTouches[0].id_fix] = null; } + tmpTouchEvent.type = e.type; + tmpTouchEvent.changedTouches = Array.from(e.changedTouches).map((touch) => fixTouchId(touch)); + tmpTouchEvent.touches = Array.from(e.touches).map((touch) => fixTouchId(touch)); + return tmpTouchEvent; } function fixTouchId(touch) { let originID = touch['identifier']; - if (originID <= 10) { - touch.id_fix = originID; - ID_FixID_Cache[originID] = originID; - return; - } - touch.id_fix = ID_FixID_Cache.indexOf(originID); - if (touch.id_fix >= 0) - return; - for (let i = 0, length = ID_FixID_Cache.length + 1; i < length; i++) { - if (ID_FixID_Cache[i] == null) { - ID_FixID_Cache[i] = originID; - touch.id_fix = i; - return; + let fix_id = ID_FixID_Cache.indexOf(originID); + if (fix_id < 0) { + for (let i = 0, length = ID_FixID_Cache.length + 1; i < length; i++) { + if (ID_FixID_Cache[i] == null) { + ID_FixID_Cache[i] = originID; + fix_id = i; + break; + } } } + return { + id_fix: fix_id, + target: touch.target, + screenX: touch.screenX, + screenY: touch.screenY, + clientX: touch.clientX, + clientY: touch.clientY, + pageX: touch.pageX, + pageY: touch.pageY, + mEventTime: touch.mEventTime, + }; } class MotionEvent { constructor() { @@ -5339,14 +5427,15 @@ var android; return newEv; } initWithTouch(event, baseAction, windowBound = new Rect()) { - let e = event; - fixEventId(e); + let e = fixEventId(event); let now = android.os.SystemClock.uptimeMillis(); let action = baseAction; let actionIndex = -1; let activeTouch = e.changedTouches[0]; this._activeTouch = activeTouch; let activePointerId = activeTouch.id_fix; + if (activePointerId == null) + console.warn('activePointerId null, activeTouch.identifier: ' + activeTouch['identifier']); for (let i = 0, length = e.touches.length; i < length; i++) { if (e.touches[i].id_fix === activePointerId) { actionIndex = i; @@ -6314,6 +6403,9 @@ var android; static currentAnimationTimeMillis() { return SystemClock.uptimeMillis(); } + static loadAnimation(context, id) { + return context.getResources().getAnimation(id); + } } animation.AnimationUtils = AnimationUtils; })(animation = view.animation || (view.animation = {})); @@ -6438,137 +6530,121 @@ var androidui; attr.StateAttr = StateAttr; })(attr = androidui.attr || (androidui.attr = {})); })(androidui || (androidui = {})); +let STATE_MAP; var androidui; (function (androidui) { var attr; - (function (attr_1) { + (function (attr) { class StateAttrList { constructor(view) { - this.list = []; - this.matchedAttrCache = []; + this.originStateAttrList = []; + this.matchedStateAttrList = []; this.mView = view; - let attrMap = new Map(); - let attributes = Array.from(view.bindElement.attributes); - for (let attr of attributes) { - attrMap.set(attr.name, attr.value); - } - let attrMapJSON = JSON.stringify(attrMap); - let cachedAttrArray = StateAttrList.CacheMap.get(attrMapJSON); - if (cachedAttrArray) { - for (let stateAttr of cachedAttrArray) { - this.list.push(stateAttr.clone()); - } - } - else { - this.optStateAttr([]); - this._initStyleAttributes(attrMap, []); - let cachedAttrArray = []; - for (let stateAttr of this.list) { - cachedAttrArray.push(stateAttr.clone()); - } - StateAttrList.CacheMap.set(attrMapJSON, cachedAttrArray); - } - } - _initStyleAttributes(attrMap, inParseState) { - let refStyleValue = attrMap.get('android:style'); - if (refStyleValue) { - attrMap.delete('android:style'); - this._initStyleAttr('android:style', refStyleValue, inParseState); - } - for (let [key, value] of attrMap.entries()) { - if (key.startsWith('android:state_')) { - continue; - } - this._initStyleAttr(key, value, inParseState); - } - for (let [key, value] of attrMap.entries()) { - if (key.startsWith('android:state_')) { - this._initStyleAttr(key, value, inParseState); - } - } - } - _initStyleAttr(attrName, attrValue, inParseState) { - if (attrName.startsWith('android:')) { - attrName = attrName.substring('android:'.length); - } - if (attrName.startsWith('state_')) { - let state = attrName.substring('state_'.length); - let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()]; - if (typeof stateValue === "number") { - inParseState = inParseState.concat(stateValue).sort(); - } - } - let _stateAttr = this.optStateAttr(inParseState); - if (attrName.startsWith('state_') || attrName === 'style') { - if (attrValue.startsWith('@style/')) { + this.getOrCreateStateAttr([]); + } + static getViewStateValue(attrName) { + if (!STATE_MAP) { + STATE_MAP = new Map() + .set('state_window_focused', android.view.View.VIEW_STATE_WINDOW_FOCUSED) + .set('state_selected', android.view.View.VIEW_STATE_SELECTED) + .set('state_focused', android.view.View.VIEW_STATE_FOCUSED) + .set('state_enabled', android.view.View.VIEW_STATE_ENABLED) + .set('state_disabled', -android.view.View.VIEW_STATE_ENABLED) + .set('state_pressed', android.view.View.VIEW_STATE_PRESSED) + .set('state_activated', android.view.View.VIEW_STATE_ACTIVATED) + .set('state_hovered', android.view.View.VIEW_STATE_HOVERED) + .set('state_checked', android.view.View.VIEW_STATE_CHECKED); + } + return STATE_MAP.get(attrName.split(':').pop()); + } + addStatedAttr(attrName, attrValue) { + this.addStatedAttrImpl(attrName, attrValue, []); + } + addStatedAttrImpl(attrName, attrValue, inParseState) { + const stateValue = StateAttrList.getViewStateValue(attrName); + if (stateValue != null) { + const newInParseState = inParseState.concat(stateValue).sort(); + let _stateAttr = this.getOrCreateStateAttr(newInParseState); + if (attrValue.startsWith('@')) { let styleMap = this.mView.getResources().getStyleAsMap(attrValue); if (styleMap && styleMap.size > 0) { - this._initStyleAttributes(styleMap, inParseState); + const statedEntries = []; + for (let entry of styleMap.entries()) { + const [key, value] = entry; + if (key.startsWith('android:state_')) { + statedEntries.push(entry); + } + else { + _stateAttr.setAttr(key.toLowerCase(), value); + } + } + for (let entry of statedEntries) { + const [key, value] = entry; + this.addStatedAttrImpl(key, value, newInParseState); + } } } else { for (let part of attrValue.split(';')) { let [name, value] = part.split(':'); - if (name) - _stateAttr.setAttr(name.trim().toLowerCase(), value); + name = name.trim(); + if (name) { + _stateAttr.setAttr('android:' + name.toLowerCase(), value.trim()); + } } } } - else { - _stateAttr.setAttr(attrName, attrValue); - } - } - getDefaultStateAttr() { - for (let stateAttr of this.list) { - if (stateAttr.isDefaultState()) - return stateAttr; - } } getStateAttr(state) { - for (let stateAttr of this.list) { + for (let stateAttr of this.originStateAttrList) { if (stateAttr.isStateEquals(state)) return stateAttr; } } - optStateAttr(state) { + getOrCreateStateAttr(state) { let stateAttr = this.getStateAttr(state); if (!stateAttr) { - stateAttr = new attr_1.StateAttr(state); - this.list.push(stateAttr); + stateAttr = new attr.StateAttr(state); + this.originStateAttrList.push(stateAttr); } return stateAttr; } getMatchedStateAttr(state) { if (state == null) return null; - for (let stateAttr of this.matchedAttrCache) { + for (let stateAttr of this.matchedStateAttrList) { if (stateAttr.isStateEquals(state)) return stateAttr; } - let matchedAttr = new attr_1.StateAttr(state); - for (let stateAttr of this.list) { + let matchedAttr = new attr.StateAttr(state); + for (let stateAttr of this.originStateAttrList) { if (stateAttr.isDefaultState()) continue; if (stateAttr.isStateMatch(state)) { matchedAttr.putAll(stateAttr); } } - this.matchedAttrCache.push(matchedAttr); + this.matchedStateAttrList.push(matchedAttr); return matchedAttr; } removeAttrAllState(attrName) { - for (let stateAttr of this.list) { + for (let stateAttr of this.originStateAttrList) { stateAttr.getAttrMap().delete(attrName); } - for (let stateAttr of this.matchedAttrCache) { + for (let stateAttr of this.matchedStateAttrList) { stateAttr.getAttrMap().delete(attrName); } } } - StateAttrList.CacheMap = new Map(); - attr_1.StateAttrList = StateAttrList; + attr.StateAttrList = StateAttrList; })(attr = androidui.attr || (androidui.attr = {})); })(androidui || (androidui = {})); +function fixDefaultNamespaceAndLowerCase(key) { + key = key.toLowerCase(); + if (!key.includes(':')) + key = 'android:' + key; + return key; +} var androidui; (function (androidui) { var attr; @@ -6580,19 +6656,18 @@ var androidui; var Resources = android.content.res.Resources; class AttrBinder { constructor(host) { - this.classAttrBindList = []; this.objectRefs = []; this.host = host; } - addClassAttrBind(classAttrBind) { + setClassAttrBind(classAttrBind) { if (classAttrBind) { - this.classAttrBindList.push(classAttrBind); + this.classAttrBindMap = classAttrBind; } } addAttr(attrName, onAttrChange, stashAttrValueWhenStateChange) { if (!attrName) return; - attrName = attrName.toLowerCase(); + attrName = fixDefaultNamespaceAndLowerCase(attrName); if (onAttrChange) { if (!this.attrChangeMap) { this.attrChangeMap = new Map(); @@ -6608,30 +6683,26 @@ var androidui; this.mContext = context; if (!attrName) return; - attrName = attrName.toLowerCase(); + attrName = fixDefaultNamespaceAndLowerCase(attrName); let onAttrChangeCall = this.attrChangeMap && this.attrChangeMap.get(attrName); if (onAttrChangeCall) { onAttrChangeCall.call(this.host, attrValue, this.host); } - for (let classAttrBind of this.classAttrBindList) { - classAttrBind.callSetter(attrName, this.host, attrValue); + if (this.classAttrBindMap) { + this.classAttrBindMap.callSetter(attrName, this.host, attrValue, this); } } getAttrValue(attrName) { if (!attrName) return undefined; - attrName = attrName.toLowerCase(); + attrName = fixDefaultNamespaceAndLowerCase(attrName); let getAttrCall = this.attrStashMap && this.attrStashMap.get(attrName); let value; if (getAttrCall) { value = getAttrCall.call(this.host); } - else { - for (let classAttrBind of this.classAttrBindList) { - value = classAttrBind.callGetter(attrName, this.host); - if (value) - break; - } + else if (this.classAttrBindMap) { + value = this.classAttrBindMap.callGetter(attrName, this.host); } if (value == null) return null; @@ -6655,31 +6726,30 @@ var androidui; this.objectRefs.push(obj); return '@ref/' + (this.objectRefs.length - 1); } - parsePaddingMarginLTRB(value) { + parsePaddingMarginTRBL(value) { value = (value + ''); let parts = []; for (let part of value.split(' ')) { if (part) parts.push(part); } - let ltrb; + let trbl; switch (parts.length) { case 1: - ltrb = [parts[0], parts[0], parts[0], parts[0]]; + trbl = [parts[0], parts[0], parts[0], parts[0]]; break; case 2: - ltrb = [parts[1], parts[0], parts[1], parts[0]]; + trbl = [parts[0], parts[1], parts[0], parts[1]]; break; case 3: - ltrb = [parts[1], parts[0], parts[1], parts[2]]; + trbl = [parts[0], parts[1], parts[2], parts[1]]; break; case 4: - ltrb = [parts[3], parts[0], parts[1], parts[2]]; + trbl = [parts[0], parts[1], parts[2], parts[3]]; break; } - if (ltrb) { - ltrb = ltrb.map((v) => this.parseDimension(v)); - return ltrb; + if (trbl) { + return trbl.map((v) => this.parseDimension(v)); } throw Error('not a padding or margin value : ' + value); } @@ -6802,22 +6872,24 @@ var androidui; attr.AttrBinder = AttrBinder; (function (AttrBinder) { class ClassBinderMap { - constructor() { - this.binderMap = new Map(); + constructor(copyBinderMap) { + this.binderMap = new Map(copyBinderMap); } set(key, value) { - this.binderMap.set(key.toLowerCase(), value); + key = fixDefaultNamespaceAndLowerCase(key); + this.binderMap.set(key, value); return this; } get(key) { - return this.binderMap.get(key.toLowerCase()); + key = fixDefaultNamespaceAndLowerCase(key); + return this.binderMap.get(key); } - callSetter(attrName, host, attrValue) { + callSetter(attrName, host, attrValue, attrBinder) { if (!attrName) return; let value = this.get(attrName); if (value) { - value.setter(host, attrValue); + value.setter.call(host, host, attrValue, attrBinder); } } callGetter(attrName, host) { @@ -6825,7 +6897,7 @@ var androidui; return; let value = this.get(attrName); if (value) { - return value.getter(host); + return value.getter.call(host, host); } } } @@ -7061,11 +7133,11 @@ var androidui; } image_1.NetDrawable = NetDrawable; (function (NetDrawable) { + var TileMode; (function (TileMode) { TileMode[TileMode["DEFAULT"] = 0] = "DEFAULT"; TileMode[TileMode["REPEAT"] = 1] = "REPEAT"; - })(NetDrawable.TileMode || (NetDrawable.TileMode = {})); - var TileMode = NetDrawable.TileMode; + })(TileMode = NetDrawable.TileMode || (NetDrawable.TileMode = {})); })(NetDrawable = image_1.NetDrawable || (image_1.NetDrawable = {})); class State { constructor(image, paint = new Paint()) { @@ -8418,8 +8490,8 @@ var android; var SparseArray = android.util.SparseArray; var SystemClock = android.os.SystemClock; class DrawableContainer extends drawable.Drawable { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mAlpha = 0xFF; this.mCurIndex = -1; this.mMutated = false; @@ -9264,13 +9336,12 @@ var android; let dr; let stateSpec = []; let typedArray = r.obtainAttributes(item); - for (let attr of Array.from(item.attributes)) { - let attrName = attr.name; - if (attrName === 'android:drawable') { + for (let attrName of typedArray.getLowerCaseNoNamespaceAttrNames()) { + if (attrName === 'drawable') { dr = typedArray.getDrawable(attrName); } - else if (attrName.startsWith('android:state_')) { - let state = attrName.substring('android:state_'.length); + else if (attrName.startsWith('state_')) { + let state = attrName.substring('state_'.length); let stateValue = android.view.View['VIEW_STATE_' + state.toUpperCase()]; if (typeof stateValue === "number") { stateSpec.push(typedArray.getBoolean(attrName, true) ? stateValue : -stateValue); @@ -9398,7 +9469,6 @@ var android; (function (android) { var R; (function (R) { - var View = android.view.View; var Resources = android.content.res.Resources; var Color = android.graphics.Color; var InsetDrawable = android.graphics.drawable.InsetDrawable; @@ -9411,62 +9481,59 @@ var android; var RoundRectDrawable = android.graphics.drawable.RoundRectDrawable; var ShadowDrawable = android.graphics.drawable.ShadowDrawable; var Gravity = android.view.Gravity; - window.addEventListener('AndroidUILoadFinish', () => { - eval('View = android.view.View;'); - }); const density = Resources.getDisplayMetrics().density; class drawable { static get btn_default() { let stateList = new StateListDrawable(); - stateList.addState([-View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light); - stateList.addState([-View.VIEW_STATE_WINDOW_FOCUSED, -View.VIEW_STATE_ENABLED], R.image.btn_default_disabled_holo_light); - stateList.addState([View.VIEW_STATE_PRESSED], R.image.btn_default_pressed_holo_light); - stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_default_focused_holo_light); - stateList.addState([View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light); - stateList.addState([View.VIEW_STATE_FOCUSED], R.image.btn_default_disabled_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_WINDOW_FOCUSED, -android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_PRESSED], R.image.btn_default_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_focused_holo_light); + stateList.addState([android.view.View.VIEW_STATE_ENABLED], R.image.btn_default_normal_holo_light); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED], R.image.btn_default_disabled_focused_holo_light); stateList.addState([], R.image.btn_default_disabled_holo_light); return stateList; } static get editbox_background() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_FOCUSED], R.image.editbox_background_focus_yellow); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED], R.image.editbox_background_focus_yellow); stateList.addState([], R.image.editbox_background_normal); return stateList; } static get btn_check() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_pressed_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_pressed_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_focused_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_on_disabled_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_off_disabled_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_check_on_disabled_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_check_off_disabled_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED], R.image.btn_check_off_disabled_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED], R.image.btn_check_on_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_pressed_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_focused_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_on_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_check_off_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_on_disabled_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_check_off_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_check_on_disabled_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_check_off_disabled_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED], R.image.btn_check_off_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED], R.image.btn_check_on_disabled_holo_light); return stateList; } static get btn_radio() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_pressed_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_PRESSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_pressed_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_focused_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_on_disabled_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, -View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_off_disabled_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_radio_on_disabled_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED, View.VIEW_STATE_FOCUSED], R.image.btn_radio_off_disabled_focused_holo_light); - stateList.addState([-View.VIEW_STATE_CHECKED], R.image.btn_radio_off_disabled_holo_light); - stateList.addState([View.VIEW_STATE_CHECKED], R.image.btn_radio_on_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_pressed_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_focused_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_on_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_ENABLED], R.image.btn_radio_off_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_on_disabled_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, -android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_radio_off_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_radio_on_disabled_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED, android.view.View.VIEW_STATE_FOCUSED], R.image.btn_radio_off_disabled_focused_holo_light); + stateList.addState([-android.view.View.VIEW_STATE_CHECKED], R.image.btn_radio_off_disabled_holo_light); + stateList.addState([android.view.View.VIEW_STATE_CHECKED], R.image.btn_radio_on_disabled_holo_light); return stateList; } static get progress_small_holo() { @@ -9574,17 +9641,17 @@ var android; } static get ratingbar_full_empty_holo_light() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_PRESSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); - stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); - stateList.addState([View.VIEW_STATE_SELECTED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_SELECTED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_off_pressed_holo_light); stateList.addState([], R.image.btn_rating_star_off_normal_holo_light); return stateList; } static get ratingbar_full_filled_holo_light() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_PRESSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); - stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); - stateList.addState([View.VIEW_STATE_SELECTED, View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_PRESSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); + stateList.addState([android.view.View.VIEW_STATE_SELECTED, android.view.View.VIEW_STATE_WINDOW_FOCUSED], R.image.btn_rating_star_on_pressed_holo_light); stateList.addState([], R.image.btn_rating_star_on_normal_holo_light); return stateList; } @@ -9617,9 +9684,9 @@ var android; } static get scrubber_control_selector_holo() { let stateList = new StateListDrawable(); - stateList.addState([-View.VIEW_STATE_ENABLED], R.image.scrubber_control_disabled_holo); - stateList.addState([View.VIEW_STATE_PRESSED], R.image.scrubber_control_pressed_holo); - stateList.addState([View.VIEW_STATE_SELECTED], R.image.scrubber_control_focused_holo); + stateList.addState([-android.view.View.VIEW_STATE_ENABLED], R.image.scrubber_control_disabled_holo); + stateList.addState([android.view.View.VIEW_STATE_PRESSED], R.image.scrubber_control_pressed_holo); + stateList.addState([android.view.View.VIEW_STATE_SELECTED], R.image.scrubber_control_focused_holo); stateList.addState([], R.image.scrubber_control_normal_holo); return stateList; } @@ -9667,10 +9734,10 @@ var android; } static get item_background() { let stateList = new StateListDrawable(); - stateList.addState([View.VIEW_STATE_FOCUSED, -View.VIEW_STATE_ENABLED], new ColorDrawable(0xffebebeb)); - stateList.addState([View.VIEW_STATE_FOCUSED, View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888)); - stateList.addState([-View.VIEW_STATE_FOCUSED, View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888)); - stateList.addState([View.VIEW_STATE_FOCUSED], new ColorDrawable(0xffaaaaaa)); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED, -android.view.View.VIEW_STATE_ENABLED], new ColorDrawable(0xffebebeb)); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888)); + stateList.addState([-android.view.View.VIEW_STATE_FOCUSED, android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x88888888)); + stateList.addState([android.view.View.VIEW_STATE_FOCUSED], new ColorDrawable(0xffaaaaaa)); stateList.addState([], new ColorDrawable(Color.TRANSPARENT)); return stateList; } @@ -9696,8 +9763,8 @@ var androidui; var Color = android.graphics.Color; var Canvas = android.graphics.Canvas; class NinePatchDrawable extends image_2.NetDrawable { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mTmpRect = new Rect(); this.mTmpRect2 = new Rect(); } @@ -9717,7 +9784,7 @@ var androidui; } } onLoad() { - let image = this.mState.mImage; + let image = this.getImage(); let ninePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(image.src); if (ninePatchBorderInfo) { this.mNinePatchBorderInfo = ninePatchBorderInfo; @@ -9769,14 +9836,17 @@ var androidui; let imageHeight = this.mImageHeight; if (imageHeight <= 0 || imageWidth <= 0) return; - let image = this.mState.mImage; + let image = this.getImage(); let bound = this.getBounds(); - let staticWidthSum = this.mNinePatchBorderInfo.getHorizontalStaticLengthSum(); - let staticHeightSum = this.mNinePatchBorderInfo.getVerticalStaticLengthSum(); - let extraWidth = bound.width() - staticWidthSum; - let extraHeight = bound.height() - staticHeightSum; + const staticRatioScale = android.content.res.Resources.getDisplayMetrics().density / image.getImageRatio(); + const staticWidthSum = this.mNinePatchBorderInfo.getHorizontalStaticLengthSum(); + const staticHeightSum = this.mNinePatchBorderInfo.getVerticalStaticLengthSum(); + let extraWidth = bound.width() - Math.floor(staticWidthSum * staticRatioScale); + let extraHeight = bound.height() - Math.floor(staticHeightSum * staticRatioScale); let staticWidthPartScale = (extraWidth >= 0 || staticWidthSum == 0) ? 1 : bound.width() / staticWidthSum; let staticHeightPartScale = (extraHeight >= 0 || staticHeightSum == 0) ? 1 : bound.height() / staticHeightSum; + staticWidthPartScale *= staticRatioScale; + staticHeightPartScale *= staticRatioScale; const scaleHorizontalWeightSum = this.mNinePatchBorderInfo.getHorizontalScaleLengthSum(); const scaleVerticalWeightSum = this.mNinePatchBorderInfo.getVerticalScaleLengthSum(); const drawColumn = (srcFromX, srcToX, dstFromX, dstToX) => { @@ -9804,6 +9874,10 @@ var androidui; let dstRect = this.mTmpRect2; srcRect.set(srcFromX, srcFromY, srcToX, srcFromY + srcHeight); dstRect.set(dstFromX, dstFromY, dstToX, dstFromY + dstHeight); + if (srcRect.bottom === image.height - 1) + srcRect.bottom -= 0.5; + if (srcRect.right === image.width - 1) + srcRect.right -= 0.5; canvas.drawImage(image, srcRect, dstRect); srcFromY += srcHeight; dstFromY += dstHeight; @@ -9835,7 +9909,9 @@ var androidui; let info = this.mNinePatchBorderInfo; if (!info) return false; - padding.set(info.getPaddingLeft(), info.getPaddingTop(), info.getPaddingRight(), info.getPaddingBottom()); + let imageRatio = this.getImage() && this.getImage().getImageRatio() || 1; + const staticRatioScale = android.content.res.Resources.getDisplayMetrics().density / imageRatio; + padding.set(Math.floor(info.getPaddingLeft() * staticRatioScale), Math.floor(info.getPaddingTop() * staticRatioScale), Math.floor(info.getPaddingRight() * staticRatioScale), Math.floor(info.getPaddingBottom() * staticRatioScale)); return true; } } @@ -11439,25 +11515,25 @@ var android; } setListenerHandler(handler) { if (this.mListenerHandler == null) { - const _this = this; + const inner_this = this; this.mOnStart = { run() { - if (_this.mListener != null) { - _this.mListener.onAnimationStart(_this); + if (inner_this.mListener != null) { + inner_this.mListener.onAnimationStart(inner_this); } } }; this.mOnRepeat = { run() { - if (_this.mListener != null) { - _this.mListener.onAnimationRepeat(_this); + if (inner_this.mListener != null) { + inner_this.mListener.onAnimationRepeat(inner_this); } } }; this.mOnEnd = { run() { - if (_this.mListener != null) { - _this.mListener.onAnimationEnd(_this); + if (inner_this.mListener != null) { + inner_this.mListener.onAnimationEnd(inner_this); } } }; @@ -11781,246 +11857,164 @@ var android; (function (android) { var R; (function (R) { - var Gravity = android.view.Gravity; - var Color = android.graphics.Color; - var ColorDrawable = android.graphics.drawable.ColorDrawable; - var StateListDrawable = android.graphics.drawable.StateListDrawable; class attr { - static get viewStyle() { - return attr._viewStyle; - } - static get textViewStyle() { - return { - textSize: '14sp', - layerType: 'software', - textColor: R.color.textView_textColor, - textColorHint: 0xff808080 - }; - } - static get buttonStyle() { - return Object.assign(attr.textViewStyle, { - background: R.drawable.btn_default, - focusable: true, - clickable: true, - minHeight: '48dp', - minWidth: '64dp', - textSize: '18sp', - gravity: Gravity.CENTER - }); - } - static get editTextStyle() { - return Object.assign(attr.textViewStyle, { - background: R.drawable.editbox_background, - focusable: true, - focusableInTouchMode: true, - clickable: true, - textSize: '18sp', - gravity: Gravity.CENTER_VERTICAL - }); - } - static get imageButtonStyle() { - return { - background: R.drawable.btn_default, - focusable: true, - clickable: true, - gravity: Gravity.CENTER - }; - } - static get checkboxStyle() { - return Object.assign(this.buttonStyle, { - background: null, - button: R.drawable.btn_check - }); - } - static get radiobuttonStyle() { - return Object.assign(this.buttonStyle, { - background: null, - button: R.drawable.btn_radio - }); - } - static get checkedTextViewStyle() { - return { - textAlignment: 'viewStart' - }; - } - static get progressBarStyle() { - return { - indeterminateOnly: true, - indeterminateDrawable: R.drawable.progress_medium_holo, - indeterminateBehavior: 'repeat', - indeterminateDuration: 3500, - minWidth: '48dp', - maxWidth: '48dp', - minHeight: '48dp', - maxHeight: '48dp', - mirrorForRtl: false, - }; - } - static get progressBarStyleHorizontal() { - return { - indeterminateOnly: false, - progressDrawable: R.drawable.progress_horizontal_holo, - indeterminateDrawable: R.drawable.progress_indeterminate_horizontal_holo, - indeterminateBehavior: 'repeat', - indeterminateDuration: 3500, - minHeight: '20dp', - maxHeight: '20dp', - mirrorForRtl: true, - }; - } - static get progressBarStyleSmall() { - return Object.assign(this.progressBarStyle, { - indeterminateDrawable: R.drawable.progress_small_holo, - minWidth: '16dp', - maxWidth: '16dp', - minHeight: '16dp', - maxHeight: '16dp' - }); - } - static get progressBarStyleLarge() { - return Object.assign(this.progressBarStyle, { - indeterminateDrawable: R.drawable.progress_large_holo, - minWidth: '76dp', - maxWidth: '76dp', - minHeight: '76dp', - maxHeight: '76dp' - }); - } - static get seekBarStyle() { - return { - indeterminateOnly: false, - progressDrawable: R.drawable.scrubber_progress_horizontal_holo_light, - indeterminateDrawable: R.drawable.scrubber_progress_horizontal_holo_light, - minHeight: '13dp', - maxHeight: '13dp', - thumb: R.drawable.scrubber_control_selector_holo, - thumbOffset: '16dp', - focusable: true, - paddingLeft: '16dp', - paddingRight: '16dp', - mirrorForRtl: true, - }; - } - static get ratingBarStyle() { - return { - indeterminateOnly: false, - progressDrawable: R.drawable.ratingbar_full_holo_light, - indeterminateDrawable: R.drawable.ratingbar_full_holo_light, - minHeight: '48dip', - maxHeight: '48dip', - numStars: '5', - stepSize: '0.5', - thumb: null, - mirrorForRtl: true, - }; - } - static get ratingBarStyleIndicator() { - return Object.assign(this.ratingBarStyle, { - indeterminateOnly: false, - progressDrawable: R.drawable.ratingbar_holo_light, - indeterminateDrawable: R.drawable.ratingbar_holo_light, - minHeight: '35dip', - maxHeight: '35dip', - thumb: null, - isIndicator: true, - }); - } - static get ratingBarStyleSmall() { - return Object.assign(this.ratingBarStyle, { - indeterminateOnly: false, - progressDrawable: R.drawable.ratingbar_small_holo_light, - indeterminateDrawable: R.drawable.ratingbar_small_holo_light, - minHeight: '16dip', - maxHeight: '16dip', - thumb: null, - isIndicator: true, - }); - } - static get gridViewStyle() { - return { - listSelector: android.R.drawable.list_selector_background, - numColumns: 1 - }; - } - static get listViewStyle() { - return { - divider: android.R.drawable.list_divider, - listSelector: android.R.drawable.list_selector_background, - dividerHeight: 1 - }; - } - static get expandableListViewStyle() { - return Object.assign(this.listViewStyle, { - childDivider: android.R.drawable.list_divider, - }); - } - static get numberPickerStyle() { - return { - orientation: 'vertical', - solidColor: 'transparent', - selectionDivider: new ColorDrawable(0xcc33b5e5), - selectionDividerHeight: '2dp', - selectionDividersDistance: '48dp', - internalMinWidth: '64dp', - internalMaxHeight: '180dp', - virtualButtonPressedDrawable: (() => { - let stateList = new StateListDrawable(); - stateList.addState([android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x44888888)); - stateList.addState([android.view.View.VIEW_STATE_PRESSED], new ColorDrawable(0x44888888)); - stateList.addState([], new ColorDrawable(Color.TRANSPARENT)); - return stateList; - })(), - }; - } - static get popupWindowStyle() { - return { - popupBackground: R.image.dropdown_background_dark, - popupEnterAnimation: R.anim.grow_fade_in_center, - popupExitAnimation: R.anim.shrink_fade_out_center, - }; - } - static get listPopupWindowStyle() { - return { - popupBackground: R.image.menu_panel_holo_light, - popupEnterAnimation: R.anim.grow_fade_in_center, - popupExitAnimation: R.anim.shrink_fade_out_center, - }; - } - static get popupMenuStyle() { - return { - popupBackground: R.image.menu_panel_holo_dark - }; - } - static get dropDownListViewStyle() { - return this.listViewStyle; - } - static get spinnerStyle() { - return { - clickable: true, - spinnerMode: 'dropdown', - gravity: Gravity.START | Gravity.CENTER_VERTICAL, - disableChildrenWhenDisabled: true, - background: R.drawable.btn_default, - popupBackground: R.image.menu_panel_holo_light, - dropDownVerticalOffset: '0dp', - dropDownHorizontalOffset: '0dp', - dropDownWidth: -2, - }; - } - static get actionBarStyle() { - return { - background: new ColorDrawable(0xff333333) - }; - } } - attr._viewStyle = {}; + attr.textViewStyle = new Map() + .set('android:textSize', '14sp') + .set('android:layerType', 'software') + .set('android:textColor', '@android:color/textView_textColor') + .set('android:textColorHint', '#ff808080'); + attr.buttonStyle = new Map(attr.textViewStyle) + .set('android:background', '@android:drawable/btn_default') + .set('android:focusable', 'true') + .set('android:clickable', 'true') + .set('android:minHeight', '48dp') + .set('android:minWidth', '64dp') + .set('android:textSize', '18sp') + .set('android:gravity', 'center'); + attr.editTextStyle = new Map(attr.textViewStyle) + .set('android:background', '@android:drawable/editbox_background') + .set('android:focusable', 'true') + .set('android:focusableInTouchMode', 'true') + .set('android:clickable', 'true') + .set('android:textSize', '18sp') + .set('android:gravity', 'center_vertical'); + attr.imageButtonStyle = new Map() + .set('android:background', '@android:drawable/btn_default') + .set('android:focusable', 'true') + .set('android:clickable', 'true') + .set('android:gravity', 'center'); + attr.checkboxStyle = new Map(attr.buttonStyle) + .set('android:background', '@null') + .set('android:button', '@android:drawable/btn_check'); + attr.radiobuttonStyle = new Map(attr.buttonStyle) + .set('android:background', '@null') + .set('android:button', '@android:drawable/btn_radio'); + attr.checkedTextViewStyle = new Map() + .set('android:textAlignment', 'viewStart'); + attr.progressBarStyle = new Map() + .set('android:indeterminateOnly', 'true') + .set('android:indeterminateDrawable', '@android:drawable/progress_medium_holo') + .set('android:indeterminateBehavior', 'repeat') + .set('android:indeterminateDuration', '3500') + .set('android:minWidth', '48dp') + .set('android:maxWidth', '48dp') + .set('android:minHeight', '48dp') + .set('android:maxHeight', '48dp') + .set('android:mirrorForRtl', 'false'); + attr.progressBarStyleHorizontal = new Map() + .set('android:indeterminateOnly', 'false') + .set('android:progressDrawable', '@android:drawable/progress_horizontal_holo') + .set('android:indeterminateDrawable', '@android:drawable/progress_indeterminate_horizontal_holo') + .set('android:indeterminateBehavior', 'repeat') + .set('android:indeterminateDuration', '3500') + .set('android:minHeight', '20dp') + .set('android:maxHeight', '20dp') + .set('android:mirrorForRtl', 'true'); + attr.progressBarStyleSmall = new Map(attr.progressBarStyle) + .set('android:indeterminateDrawable', '@android:drawable/progress_small_holo') + .set('android:minWidth', '16dp') + .set('android:maxWidth', '16dp') + .set('android:minHeight', '16dp') + .set('android:maxHeight', '16dp'); + attr.progressBarStyleLarge = new Map(attr.progressBarStyle) + .set('android:indeterminateDrawable', '@android:drawable/progress_large_holo') + .set('android:minWidth', '76dp') + .set('android:maxWidth', '76dp') + .set('android:minHeight', '76dp') + .set('android:maxHeight', '76dp'); + attr.seekBarStyle = new Map() + .set('android:indeterminateOnly', 'false') + .set('android:progressDrawable', '@android:drawable/scrubber_progress_horizontal_holo_light') + .set('android:indeterminateDrawable', '@android:drawable/scrubber_progress_horizontal_holo_light') + .set('android:minHeight', '13dp') + .set('android:maxHeight', '13dp') + .set('android:thumb', '@android:drawable/scrubber_control_selector_holo') + .set('android:thumbOffset', '16dp') + .set('android:focusable', 'true') + .set('android:paddingLeft', '16dp') + .set('android:paddingRight', '16dp') + .set('android:mirrorForRtl', 'true'); + attr.ratingBarStyle = new Map() + .set('android:indeterminateOnly', 'false') + .set('android:progressDrawable', '@android:drawable/ratingbar_full_holo_light') + .set('android:indeterminateDrawable', '@android:drawable/ratingbar_full_holo_light') + .set('android:minHeight', '48dip') + .set('android:maxHeight', '48dip') + .set('android:numStars', '5') + .set('android:stepSize', '0.5') + .set('android:thumb', '@null') + .set('android:mirrorForRtl', 'true'); + attr.ratingBarStyleIndicator = new Map(attr.ratingBarStyle) + .set('android:indeterminateOnly', 'false') + .set('android:progressDrawable', '@android:drawable/ratingbar_holo_light') + .set('android:indeterminateDrawable', '@android:drawable/ratingbar_holo_light') + .set('android:minHeight', '35dip') + .set('android:maxHeight', '35dip') + .set('android:thumb', '@null') + .set('android:isIndicator', 'true'); + attr.ratingBarStyleSmall = new Map(attr.ratingBarStyle) + .set('android:indeterminateOnly', 'false') + .set('android:progressDrawable', '@android:drawable/ratingbar_small_holo_light') + .set('android:indeterminateDrawable', '@android:drawable/ratingbar_small_holo_light') + .set('android:minHeight', '16dip') + .set('android:maxHeight', '16dip') + .set('android:thumb', '@null') + .set('android:isIndicator', 'true'); + attr.absListViewStyle = new Map() + .set('android:scrollbars', 'vertical') + .set('android:fadingEdge', 'vertical'); + attr.gridViewStyle = new Map(attr.absListViewStyle) + .set('android:listSelector', '@android:drawable/list_selector_background') + .set('android:numColumns', '1'); + attr.listViewStyle = new Map(attr.absListViewStyle) + .set('android:divider', '@android:drawable/list_divider') + .set('android:listSelector', '@android:drawable/list_selector_background') + .set('android:dividerHeight', '1'); + attr.expandableListViewStyle = new Map(attr.listViewStyle) + .set('android:childDivider', '@android:drawable/list_divider'); + attr.numberPickerStyle = new Map() + .set('android:orientation', 'vertical') + .set('android:solidColor', 'transparent') + .set('android:selectionDivider', '#cc33b5e5') + .set('android:selectionDividerHeight', '2dp') + .set('android:selectionDividersDistance', '48dp') + .set('android:internalMinWidth', '64dp') + .set('android:internalMaxHeight', '180dp') + .set('android:virtualButtonPressedDrawable', '@android:drawable/item_background'); + attr.popupWindowStyle = new Map() + .set('android:popupBackground', '@android:drawable/dropdown_background_dark') + .set('android:popupEnterAnimation', '@android:anim/grow_fade_in_center') + .set('android:popupExitAnimation', '@android:anim/shrink_fade_out_center'); + attr.listPopupWindowStyle = new Map() + .set('android:popupBackground', '@android:drawable/menu_panel_holo_light') + .set('android:popupEnterAnimation', '@android:anim/grow_fade_in_center') + .set('android:popupExitAnimation', '@android:anim/shrink_fade_out_center'); + attr.popupMenuStyle = new Map() + .set('android:popupBackground', '@android:drawable/menu_panel_holo_dark'); + attr.dropDownListViewStyle = new Map(attr.listViewStyle); + attr.spinnerStyle = new Map() + .set('android:clickable', 'true') + .set('android:spinnerMode', 'dropdown') + .set('android:gravity', 'start|center_vertical') + .set('android:disableChildrenWhenDisabled', 'true') + .set('android:background', '@android:drawable/btn_default') + .set('android:popupBackground', '@android:drawable/menu_panel_holo_light') + .set('android:dropDownVerticalOffset', '0dp') + .set('android:dropDownHorizontalOffset', '0dp') + .set('android:dropDownWidth', 'wrap_content'); + attr.actionBarStyle = new Map() + .set('android:background', '#ff333333'); + attr.scrollViewStyle = new Map() + .set('android:scrollbars', 'vertical') + .set('android:fadingEdge', 'vertical'); R.attr = attr; })(R = android.R || (android.R = {})); })(android || (android = {})); var android; (function (android) { var view; - (function (view_2) { + (function (view_1) { var LayoutDirection = android.util.LayoutDirection; var ColorDrawable = android.graphics.drawable.ColorDrawable; var ScrollBarDrawable = android.graphics.drawable.ScrollBarDrawable; @@ -12045,13 +12039,12 @@ var android; var Pools = android.util.Pools; var LinearInterpolator = android.view.animation.LinearInterpolator; var AnimationUtils = android.view.animation.AnimationUtils; - var StateAttrList = androidui.attr.StateAttrList; var AttrBinder = androidui.attr.AttrBinder; var KeyEvent = android.view.KeyEvent; - var Animation = view_2.animation.Animation; - var Transformation = view_2.animation.Transformation; + var Animation = android.view.animation.Animation; + var Transformation = android.view.animation.Transformation; class View extends JavaObject { - constructor(context, bindElement, defStyle = android.R.attr.viewStyle) { + constructor(context, bindElement, defStyleAttr) { super(); this.mPrivateFlags = 0; this.mPrivateFlags2 = 0; @@ -12070,7 +12063,7 @@ var android; this.mDrawingCacheBackgroundColor = 0; this.mTouchSlop = 0; this.mVerticalScrollFactor = 0; - this.mOverScrollMode = 0; + this.mOverScrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS; this.mViewFlags = 0; this.mLayerType = View.LAYER_TYPE_NONE; this.mCachingFailed = false; @@ -12091,14 +12084,295 @@ var android; this.mCornerRadiusTopRight = 0; this.mCornerRadiusBottomRight = 0; this.mCornerRadiusBottomLeft = 0; + this._stateAttrList = new androidui.attr.StateAttrList(this); this._attrBinder = new AttrBinder(this); this.mContext = context; - this.mTouchSlop = view_2.ViewConfiguration.get().getScaledTouchSlop(); - this.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS); + this.mTouchSlop = view_1.ViewConfiguration.get().getScaledTouchSlop(); this.initBindAttr(); this.initBindElement(bindElement); - if (defStyle) - this.applyDefaultAttributes(defStyle); + const a = context.obtainStyledAttributes(bindElement, defStyleAttr); + let background = null; + let leftPadding = -1; + let topPadding = -1; + let rightPadding = -1; + let bottomPadding = -1; + let padding = -1; + let viewFlagValues = 0; + let viewFlagMasks = 0; + let setScrollContainer = false; + let x = 0; + let y = 0; + let tx = 0; + let ty = 0; + let rotation = 0; + let rotationX = 0; + let rotationY = 0; + let sx = 1; + let sy = 1; + let transformSet = false; + let overScrollMode = this.mOverScrollMode; + let initializeScrollbars = false; + for (let attr of a.getLowerCaseNoNamespaceAttrNames()) { + switch (attr) { + case 'background': + background = a.getDrawable(attr); + break; + case 'padding': + padding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingleft': + leftPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingtop': + topPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingright': + rightPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingbottom': + bottomPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingstart': + leftPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'paddingend': + rightPadding = a.getDimensionPixelSize(attr, -1); + break; + case 'scrollx': + x = a.getDimensionPixelOffset(attr, 0); + break; + case 'scrolly': + y = a.getDimensionPixelOffset(attr, 0); + break; + case 'alpha': + this.setAlpha(a.getFloat(attr, 1)); + break; + case 'transformpivotx': + this.setPivotX(a.getDimensionPixelOffset(attr, 0)); + break; + case 'transformpivoty': + this.setPivotY(a.getDimensionPixelOffset(attr, 0)); + break; + case 'translationx': + tx = a.getDimensionPixelOffset(attr, 0); + transformSet = true; + break; + case 'translationy': + ty = a.getDimensionPixelOffset(attr, 0); + transformSet = true; + break; + case 'rotation': + rotation = a.getFloat(attr, 0); + transformSet = true; + break; + case 'rotationx': + rotationX = a.getFloat(attr, 0); + transformSet = true; + break; + case 'rotationy': + rotationY = a.getFloat(attr, 0); + transformSet = true; + break; + case 'scalex': + sx = a.getFloat(attr, 1); + transformSet = true; + break; + case 'scaley': + sy = a.getFloat(attr, 1); + transformSet = true; + break; + case 'id': + this.mID = a.getString(attr); + break; + case 'tag': + this.mTag = a.getText(attr); + break; + case 'fitssystemwindows': + break; + case 'focusable': + if (a.getBoolean(attr, false)) { + viewFlagValues |= View.FOCUSABLE; + viewFlagMasks |= View.FOCUSABLE_MASK; + } + break; + case 'focusableintouchmode': + if (a.getBoolean(attr, false)) { + viewFlagValues |= View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE; + viewFlagMasks |= View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK; + } + break; + case 'clickable': + if (a.getBoolean(attr, false)) { + viewFlagValues |= View.CLICKABLE; + viewFlagMasks |= View.CLICKABLE; + } + break; + case 'longclickable': + if (a.getBoolean(attr, false)) { + viewFlagValues |= View.LONG_CLICKABLE; + viewFlagMasks |= View.LONG_CLICKABLE; + } + break; + case 'saveenabled': + break; + case 'duplicateparentstate': + if (a.getBoolean(attr, false)) { + viewFlagValues |= View.DUPLICATE_PARENT_STATE; + viewFlagMasks |= View.DUPLICATE_PARENT_STATE; + } + break; + case 'visibility': + const visibility = a.getAttrValue(attr); + if (visibility === 'gone') { + viewFlagValues |= View.GONE; + viewFlagMasks |= View.VISIBILITY_MASK; + } + else if (visibility === 'invisible') { + viewFlagValues |= View.INVISIBLE; + viewFlagMasks |= View.VISIBILITY_MASK; + } + else if (visibility === 'visible') { + viewFlagValues |= View.VISIBLE; + viewFlagMasks |= View.VISIBILITY_MASK; + } + break; + case 'layoutdirection': + break; + case 'drawingcachequality': + break; + case 'contentdescription': + break; + case 'labelfor': + break; + case 'soundeffectsenabled': + break; + case 'hapticfeedbackenabled': + break; + case 'scrollbars': + const scrollbars = a.getAttrValue(attr); + if (scrollbars === 'horizontal') { + viewFlagValues |= View.SCROLLBARS_HORIZONTAL; + viewFlagMasks |= View.SCROLLBARS_MASK; + initializeScrollbars = true; + } + else if (scrollbars === 'vertical') { + viewFlagValues |= View.SCROLLBARS_VERTICAL; + viewFlagMasks |= View.SCROLLBARS_MASK; + initializeScrollbars = true; + } + break; + case 'fadingedge': + case 'requiresfadingedge': + break; + case 'scrollbarstyle': + break; + case 'isscrollcontainer': + setScrollContainer = true; + if (a.getBoolean(attr, false)) { + this.setScrollContainer(true); + } + break; + case 'keepscreenon': + break; + case 'filtertoucheswhenobscured': + break; + case 'nextfocusleft': + this.mNextFocusLeftId = a.getResourceId(attr, View.NO_ID); + break; + case 'nextfocusright': + this.mNextFocusRightId = a.getResourceId(attr, View.NO_ID); + break; + case 'nextfocusup': + this.mNextFocusUpId = a.getResourceId(attr, View.NO_ID); + break; + case 'nextfocusdown': + this.mNextFocusDownId = a.getResourceId(attr, View.NO_ID); + break; + case 'nextfocusforward': + this.mNextFocusForwardId = a.getResourceId(attr, View.NO_ID); + break; + case 'minwidth': + this.mMinWidth = a.getDimensionPixelSize(attr, 0); + break; + case 'minheight': + this.mMinHeight = a.getDimensionPixelSize(attr, 0); + break; + case 'onclick': + this.setOnClickListenerByAttrValueString(a.getString(attr)); + break; + case 'overscrollmode': + let scrollMode = View[('OVER_SCROLL_' + a.getAttrValue(attr)).toUpperCase()]; + overScrollMode = scrollMode || View.OVER_SCROLL_IF_CONTENT_SCROLLS; + break; + case 'verticalscrollbarposition': + break; + case 'layertype': + if ((a.getAttrValue(attr) + '').toLowerCase() == 'software') { + this.setLayerType(View.LAYER_TYPE_SOFTWARE); + } + else { + this.setLayerType(View.LAYER_TYPE_NONE); + } + break; + case 'textdirection': + break; + case 'textalignment': + break; + case 'importantforaccessibility': + break; + case 'accessibilityliveregion': + break; + case 'cornerradius': + case 'cornerradiustopleft': + case 'cornerradiustopright': + case 'cornerradiusbottomleft': + case 'cornerradiusbottomright': + case 'viewshadowcolor': + case 'viewshadowdx': + case 'viewshadowdy': + case 'viewshadowradius': + this._attrBinder.onAttrChange(attr, a.getAttrValue(attr), this.getContext()); + break; + default: + if (attr && attr.startsWith('state_')) { + this._stateAttrList.addStatedAttr(attr, a.getAttrValue(attr)); + } + } + } + this.setOverScrollMode(overScrollMode); + if (background != null) { + this.setBackground(background); + } + if (padding >= 0) { + leftPadding = padding; + topPadding = padding; + rightPadding = padding; + bottomPadding = padding; + } + this.setPadding(leftPadding >= 0 ? leftPadding : this.mPaddingLeft, topPadding >= 0 ? topPadding : this.mPaddingTop, rightPadding >= 0 ? rightPadding : this.mPaddingRight, bottomPadding >= 0 ? bottomPadding : this.mPaddingBottom); + if (viewFlagMasks != 0) { + this.setFlags(viewFlagValues, viewFlagMasks); + } + if (initializeScrollbars) { + this.initializeScrollbars(a); + } + a.recycle(); + if (x != 0 || y != 0) { + scrollTo(x, y); + } + if (transformSet) { + this.setTranslationX(tx); + this.setTranslationY(ty); + this.setRotation(rotation); + this.setRotationX(rotationX); + this.setRotationY(rotationY); + this.setScaleX(sx); + this.setScaleY(sy); + } + if (!setScrollContainer && (viewFlagValues & View.SCROLLBARS_VERTICAL) != 0) { + this.setScrollContainer(true); + } + this.computeOpaqueFlags(); } get mLeft() { return this._mLeft; @@ -12118,6 +12392,9 @@ var android; return this._mTop; } set mTop(value) { + if (Number.isNaN(value)) { + debugger; + } this._mTop = Math.floor(value); this.requestSyncBoundToElement(); } @@ -12142,348 +12419,7 @@ var android; this._mScrollY = Math.floor(value); this.requestSyncBoundToElement(); } - initBindAttr() { - if (!View.ViewClassAttrBinder) { - View.ViewClassAttrBinder = new AttrBinder.ClassBinderMap(); - View.ViewClassAttrBinder.set('background', { - setter(v, value) { v.setBackground(v._attrBinder.parseDrawable(value)); }, - getter(v) { return v.mBackground; }, - }).set('padding', { - setter(v, value) { - if (value == null) - value = 0; - let [left, top, right, bottom] = v._attrBinder.parsePaddingMarginLTRB(value); - v._setPaddingWithUnit(left, top, right, bottom); - }, - getter(v) { return v.mPaddingTop + ' ' + v.mPaddingRight + ' ' + v.mPaddingBottom + ' ' + v.mPaddingLeft; }, - }).set('paddingLeft', { - setter(v, value) { - if (value == null) - value = 0; - v._setPaddingWithUnit(value, v.mPaddingTop, v.mPaddingRight, v.mPaddingBottom); - }, - getter(v) { return v.mPaddingLeft; }, - }).set('paddingTop', { - setter(v, value) { - if (value == null) - value = 0; - v._setPaddingWithUnit(v.mPaddingLeft, value, v.mPaddingRight, v.mPaddingBottom); - }, - getter(v) { return v.mPaddingTop; }, - }).set('paddingRight', { - setter(v, value) { - if (value == null) - value = 0; - v._setPaddingWithUnit(v.mPaddingLeft, v.mPaddingTop, value, v.mPaddingBottom); - }, - getter(v) { return v.mPaddingRight; }, - }).set('paddingBottom', { - setter(v, value) { - if (value == null) - value = 0; - v._setPaddingWithUnit(v.mPaddingLeft, v.mPaddingTop, v.mPaddingRight, value); - }, - getter(v) { return v.mPaddingBottom; }, - }).set('scrollX', { - setter(v, value) { - value = v._attrBinder.parseNumberPixelOffset(value); - if (Number.isInteger(value)) - v.scrollTo(value, v.mScrollY); - }, - getter(v) { v.getScrollX(); }, - }).set('scrollY', { - setter(v, value) { - value = v._attrBinder.parseNumberPixelOffset(value); - if (Number.isInteger(value)) - v.scrollTo(v.mScrollX, value); - }, - getter(v) { return v.getScrollY(); }, - }).set('alpha', { - setter(v, value) { - v.setAlpha(v._attrBinder.parseFloat(value, v.getAlpha())); - }, - getter(v) { return v.getAlpha(); }, - }).set('transformPivotX', { - setter(v, value) { - v.setPivotX(v._attrBinder.parseNumberPixelOffset(value, v.getPivotX())); - }, - getter(v) { return v.getPivotX(); }, - }).set('transformPivotY', { - setter(v, value) { - v.setPivotY(v._attrBinder.parseNumberPixelOffset(value, v.getPivotY())); - }, - getter(v) { return v.getPivotY(); }, - }).set('translationX', { - setter(v, value) { - v.setTranslationX(v._attrBinder.parseNumberPixelOffset(value, v.getTranslationX())); - }, - getter(v) { - return v.getTranslationX(); - }, - }).set('translationY', { - setter(v, value) { - v.setTranslationY(v._attrBinder.parseNumberPixelOffset(value, v.getTranslationY())); - }, - getter(v) { - return v.getTranslationY(); - }, - }).set('rotation', { - setter(v, value) { - v.setRotation(v._attrBinder.parseFloat(value, v.getRotation())); - }, - getter(v) { - return v.getRotation(); - }, - }).set('scaleX', { - setter(v, value) { - v.setScaleX(v._attrBinder.parseFloat(value, v.getScaleX())); - }, - getter(v) { - return v.getScaleX(); - }, - }).set('scaleY', { - setter(v, value) { - v.setScaleY(v._attrBinder.parseFloat(value, v.getScaleY())); - }, - getter(v) { - return v.getScaleY(); - }, - }).set('tag', { - setter(v, value) { - v.setTag(value); - }, - getter(v) { - return v.getTag(); - }, - }).set('id', { - setter(v, value) { - v.setId(value); - }, - getter(v) { - return v.getId(); - }, - }).set('focusable', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK); - } - }, - getter(v) { - return v.isFocusable(); - }, - }).set('focusableInTouchMode', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK); - } - }, - getter(v) { - return v.isFocusableInTouchMode(); - }, - }).set('clickable', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setFlags(View.CLICKABLE, View.CLICKABLE); - } - }, - getter(v) { - return v.isClickable(); - }, - }).set('longClickable', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE); - } - }, - getter(v) { - return v.isLongClickable(); - }, - }).set('duplicateParentState', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE); - } - }, - getter(v) { - return (v.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE; - }, - }).set('visibility', { - setter(v, value) { - if (value === 'gone') - v.setVisibility(View.GONE); - else if (value === 'invisible') - v.setVisibility(View.INVISIBLE); - else if (value === 'visible') - v.setVisibility(View.VISIBLE); - }, - getter(v) { - return v.getVisibility(); - }, - }).set('scrollbars', { - setter(v, value) { - if (value === 'none') { - v.setHorizontalScrollBarEnabled(false); - v.setVerticalScrollBarEnabled(false); - } - else if (value === 'horizontal') { - v.setHorizontalScrollBarEnabled(true); - v.setVerticalScrollBarEnabled(false); - } - else if (value === 'vertical') { - v.setHorizontalScrollBarEnabled(false); - v.setVerticalScrollBarEnabled(true); - } - }, - }).set('isScrollContainer', { - setter(v, value) { - if (v._attrBinder.parseBoolean(value, false)) { - v.setScrollContainer(true); - } - }, - getter(v) { - return v.isScrollContainer(); - }, - }).set('minWidth', { - setter(v, value) { - v.setMinimumWidth(v._attrBinder.parseNumberPixelSize(value, 0)); - }, - getter(v) { - return v.mMinWidth; - }, - }).set('minHeight', { - setter(v, value) { - v.setMinimumHeight(v._attrBinder.parseNumberPixelSize(value, 0)); - }, - getter(v) { - return v.mMinHeight; - }, - }).set('onClick', { - setter(v, value) { - if (value && typeof value === 'string') { - v.setOnClickListener((view) => { - try { - let activityClickMethod = view.getContext()[value]; - if (typeof activityClickMethod === 'function') { - activityClickMethod.call(view.getContext(), view); - return; - } - } - catch (e) { - } - try { - new Function(value).call(view); - } - catch (e) { - } - }); - } - v.bindElement.removeAttribute('onclick'); - }, - }).set('overScrollMode', { - setter(v, value) { - let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()]; - if (scrollMode === undefined) - scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS; - v.setOverScrollMode(scrollMode); - } - }).set('layerType', { - setter(v, value) { - if ((value + '').toLowerCase() == 'software') { - v.setLayerType(View.LAYER_TYPE_SOFTWARE); - } - else { - v.setLayerType(View.LAYER_TYPE_NONE); - } - } - }).set('cornerRadius', { - setter(v, value) { - let [leftTop, topRight, rightBottom, bottomLeft] = v._attrBinder.parsePaddingMarginLTRB(value); - v.setCornerRadius(v._attrBinder.parseNumberPixelSize(leftTop, 0), v._attrBinder.parseNumberPixelSize(topRight, 0), v._attrBinder.parseNumberPixelSize(rightBottom, 0), v._attrBinder.parseNumberPixelSize(bottomLeft, 0)); - }, - getter(v) { - return v.mCornerRadiusTopLeft + ' ' + v.mCornerRadiusTopRight + ' ' + v.mCornerRadiusBottomRight + ' ' + v.mCornerRadiusBottomLeft; - }, - }).set('cornerRadiusTopLeft', { - setter(v, value) { - v.setCornerRadiusTopLeft(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopLeft)); - }, - getter(v) { - return v.mCornerRadiusTopLeft; - }, - }).set('cornerRadiusTopRight', { - setter(v, value) { - v.setCornerRadiusTopRight(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopRight)); - }, - getter(v) { - return v.mCornerRadiusTopRight; - }, - }).set('cornerRadiusBottomLeft', { - setter(v, value) { - v.setCornerRadiusBottomLeft(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomLeft)); - }, - getter(v) { - return v.mCornerRadiusBottomLeft; - }, - }).set('cornerRadiusBottomRight', { - setter(v, value) { - v.setCornerRadiusBottomRight(v._attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomRight)); - }, - getter(v) { - return v.mCornerRadiusBottomRight; - }, - }).set('viewShadowColor', { - setter(v, value) { - if (!v.mShadowPaint) - v.mShadowPaint = new Paint(); - v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v._attrBinder.parseColor(value, v.mShadowPaint.shadowColor)); - }, - getter(v) { - if (v.mShadowPaint) - return v.mShadowPaint.shadowColor; - }, - }).set('viewShadowDx', { - setter(v, value) { - if (!v.mShadowPaint) - v.mShadowPaint = new Paint(); - let dx = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDx); - v.setShadowView(v.mShadowPaint.shadowRadius, dx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor); - }, - getter(v) { - if (v.mShadowPaint) - return v.mShadowPaint.shadowDx; - }, - }).set('viewShadowDy', { - setter(v, value) { - if (!v.mShadowPaint) - v.mShadowPaint = new Paint(); - let dy = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDy); - v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, dy, v.mShadowPaint.shadowColor); - }, - getter(v) { - if (v.mShadowPaint) - return v.mShadowPaint.shadowDy; - }, - }).set('viewShadowRadius', { - setter(v, value) { - if (!v.mShadowPaint) - v.mShadowPaint = new Paint(); - let radius = v._attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowRadius); - v.setShadowView(radius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor); - }, - getter(v) { - if (v.mShadowPaint) - return v.mShadowPaint.shadowRadius; - }, - }); - View.ViewClassAttrBinder.set('paddingStart', View.ViewClassAttrBinder.get('paddingLeft')); - View.ViewClassAttrBinder.set('paddingEnd', View.ViewClassAttrBinder.get('paddingRight')); - } - this._attrBinder.addClassAttrBind(View.ViewClassAttrBinder); - } getContext() { - if (this.mContext == null && this.mAttachInfo != null) { - return this.mAttachInfo.mRootView.mContext; - } return this.mContext; } getWidth() { @@ -12550,32 +12486,6 @@ var android; this.requestLayout(); } } - _setPaddingWithUnit(left, top, right, bottom) { - let view = this; - let width = view.getWidth(); - let height = view.getHeight(); - let a = this._attrBinder; - let padLeft = a.parseDimension(left, 0, width); - let padTop = a.parseDimension(top, 0, height); - let padRight = a.parseDimension(right, 0, width); - let padBottom = a.parseDimension(bottom, 0, height); - view.setPadding(padLeft, padTop, padRight, padBottom); - let unit = android.util.TypedValue.COMPLEX_UNIT_FRACTION; - if ((typeof left === 'string' && left.endsWith(unit)) || (typeof top === 'string' && top.endsWith(unit)) - || (typeof right === 'string' && right.endsWith(unit)) || (typeof bottom === 'string' && bottom.endsWith(unit))) { - view.post({ - run: () => { - let width = view.getWidth(); - let height = view.getHeight(); - let padLeftN = a.parseDimension(left, 0, width); - let padTopN = a.parseDimension(top, 0, height); - let padRightN = a.parseDimension(right, 0, width); - let padBottomN = a.parseDimension(bottom, 0, height); - view.setPadding(padLeftN, padTopN, padRightN, padBottomN); - } - }); - } - } resolvePadding() { } setScrollX(value) { @@ -12719,6 +12629,16 @@ var android; } } } + getRotationY() { + return 0; + } + setRotationY(rotationY) { + } + getRotationX() { + return 0; + } + setRotationX(rotationX) { + } getScaleX() { return this.mTransformationInfo != null ? this.mTransformationInfo.mScaleX : 1; } @@ -13086,7 +13006,7 @@ var android; if (attachInfo != null) { return attachInfo.mHandler.post(action); } - view_2.ViewRootImpl.getRunQueue().post(action); + view_1.ViewRootImpl.getRunQueue().post(action); return true; } postDelayed(action, delayMillis) { @@ -13094,7 +13014,7 @@ var android; if (attachInfo != null) { return attachInfo.mHandler.postDelayed(action, delayMillis); } - view_2.ViewRootImpl.getRunQueue().postDelayed(action, delayMillis); + view_1.ViewRootImpl.getRunQueue().postDelayed(action, delayMillis); return true; } postOnAnimation(action) { @@ -13110,7 +13030,7 @@ var android; attachInfo.mHandler.removeCallbacks(action); } else { - view_2.ViewRootImpl.getRunQueue().removeCallbacks(action); + view_1.ViewRootImpl.getRunQueue().removeCallbacks(action); } } return true; @@ -13173,7 +13093,7 @@ var android; if (newVisibility != View.VISIBLE) { this.cleanupDraw(); } - if (this.mParent instanceof view_2.ViewGroup) { + if (this.mParent instanceof view_1.ViewGroup) { this.mParent.onChildVisibilityChanged(this, (changed & View.VISIBILITY_MASK), newVisibility); this.mParent.invalidate(true); } @@ -13495,9 +13415,9 @@ var android; } hasAncestorThatBlocksDescendantFocus() { let ancestor = this.mParent; - while (ancestor instanceof view_2.ViewGroup) { + while (ancestor instanceof view_1.ViewGroup) { const vgAncestor = ancestor; - if (vgAncestor.getDescendantFocusability() == view_2.ViewGroup.FOCUS_BLOCK_DESCENDANTS) { + if (vgAncestor.getDescendantFocusability() == view_1.ViewGroup.FOCUS_BLOCK_DESCENDANTS) { return true; } else { @@ -13633,9 +13553,9 @@ var android; dispatchGenericMotionEvent(event) { if (event.isPointerEvent()) { const action = event.getAction(); - if (action == view_2.MotionEvent.ACTION_HOVER_ENTER - || action == view_2.MotionEvent.ACTION_HOVER_MOVE - || action == view_2.MotionEvent.ACTION_HOVER_EXIT) { + if (action == view_1.MotionEvent.ACTION_HOVER_ENTER + || action == view_1.MotionEvent.ACTION_HOVER_MOVE + || action == view_1.MotionEvent.ACTION_HOVER_EXIT) { } else if (this.dispatchGenericPointerEvent(event)) { return true; @@ -13738,7 +13658,7 @@ var android; onTouchEvent(event) { let viewFlags = this.mViewFlags; if ((viewFlags & View.ENABLED_MASK) == View.DISABLED) { - if (event.getAction() == view_2.MotionEvent.ACTION_UP && (this.mPrivateFlags & View.PFLAG_PRESSED) != 0) { + if (event.getAction() == view_1.MotionEvent.ACTION_UP && (this.mPrivateFlags & View.PFLAG_PRESSED) != 0) { this.setPressed(false); } return (((viewFlags & View.CLICKABLE) == View.CLICKABLE || @@ -13752,7 +13672,7 @@ var android; if (((viewFlags & View.CLICKABLE) == View.CLICKABLE || (viewFlags & View.LONG_CLICKABLE) == View.LONG_CLICKABLE)) { switch (event.getAction()) { - case view_2.MotionEvent.ACTION_UP: + case view_1.MotionEvent.ACTION_UP: let prepressed = (this.mPrivateFlags & View.PFLAG_PREPRESSED) != 0; if ((this.mPrivateFlags & View.PFLAG_PRESSED) != 0 || prepressed) { let focusTaken = false; @@ -13783,7 +13703,7 @@ var android; this.mUnsetPressedState = new UnsetPressedState(this); } if (prepressed) { - this.postDelayed(this.mUnsetPressedState, view_2.ViewConfiguration.getPressedStateDuration()); + this.postDelayed(this.mUnsetPressedState, view_1.ViewConfiguration.getPressedStateDuration()); } else if (!this.post(this.mUnsetPressedState)) { this.mUnsetPressedState.run(); @@ -13791,7 +13711,7 @@ var android; this.removeTapCallback(); } break; - case view_2.MotionEvent.ACTION_DOWN: + case view_1.MotionEvent.ACTION_DOWN: this.mHasPerformedLongPress = false; let isInScrollingContainer = this.isInScrollingContainer(); if (isInScrollingContainer) { @@ -13799,19 +13719,19 @@ var android; if (this.mPendingCheckForTap == null) { this.mPendingCheckForTap = new CheckForTap(this); } - this.postDelayed(this.mPendingCheckForTap, view_2.ViewConfiguration.getTapTimeout()); + this.postDelayed(this.mPendingCheckForTap, view_1.ViewConfiguration.getTapTimeout()); } else { this.setPressed(true); this.checkForLongClick(0); } break; - case view_2.MotionEvent.ACTION_CANCEL: + case view_1.MotionEvent.ACTION_CANCEL: this.setPressed(false); this.removeTapCallback(); this.removeLongPressCallback(); break; - case view_2.MotionEvent.ACTION_MOVE: + case view_1.MotionEvent.ACTION_MOVE: const x = event.getX(); const y = event.getY(); if (!this.pointInView(x, y, this.mTouchSlop)) { @@ -13829,7 +13749,7 @@ var android; } isInScrollingContainer() { let p = this.getParent(); - while (p != null && p instanceof view_2.ViewGroup) { + while (p != null && p instanceof view_1.ViewGroup) { if (p.shouldDelayChildPressedState()) { return true; } @@ -13925,6 +13845,35 @@ var android; } li.mOnAttachStateChangeListeners.remove(listener); } + setOnClickListenerByAttrValueString(onClickAttrString) { + this.setOnClickListener((view) => { + if (!onClickAttrString) + return; + let activityClickMethod = view.getContext()[onClickAttrString]; + if (typeof activityClickMethod === 'function') { + try { + activityClickMethod.call(view.getContext(), view); + } + catch (e) { + console.error(e); + throw new Error(`Could not execute method '${onClickAttrString}' of the activity`); + } + return; + } + else { + try { + new Function(onClickAttrString).call(view); + } + catch (e) { + console.error(e); + throw new Error("Could not execute or find a method " + + onClickAttrString + "(View) in the activity " + + view.getContext().constructor.name + " for onClick handler" + + " on view " + view.getClass() + view.getId()); + } + } + }); + } setOnClickListener(l) { if (!this.isClickable()) { this.setClickable(true); @@ -13986,7 +13935,7 @@ var android; this.mPendingCheckForLongPress = new CheckForLongPress(this); } this.mPendingCheckForLongPress.rememberWindowAttachCount(); - this.postDelayed(this.mPendingCheckForLongPress, view_2.ViewConfiguration.getLongPressTimeout() - delayOffset); + this.postDelayed(this.mPendingCheckForLongPress, view_1.ViewConfiguration.getLongPressTimeout() - delayOffset); } } setOnTouchListener(l) { @@ -14058,7 +14007,7 @@ var android; return this.mAttachInfo.mViewRootImpl.mTreeObserver; } if (this.mFloatingTreeObserver == null) { - this.mFloatingTreeObserver = new view_2.ViewTreeObserver(); + this.mFloatingTreeObserver = new view_1.ViewTreeObserver(); } return this.mFloatingTreeObserver; } @@ -14095,7 +14044,7 @@ var android; } this.mLayoutParams = params; let p = this.mParent; - if (p instanceof view_2.ViewGroup) { + if (p instanceof view_1.ViewGroup) { p.onSetLayoutParams(this, params); } this.requestLayout(); @@ -14536,7 +14485,7 @@ var android; if (p != null && ai != null) { const r = ai.mTmpInvalRect; r.set(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop); - if (this.mParent instanceof view_2.ViewGroup) { + if (this.mParent instanceof view_1.ViewGroup) { this.mParent.invalidateChildFast(this, r); } else { @@ -14719,9 +14668,9 @@ var android; let more = false; let childHasIdentityMatrix = this.hasIdentityMatrix(); let flags = parent.mGroupFlags; - if ((flags & view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION) == view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION) { + if ((flags & view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION) == view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION) { parent.getChildTransformation().clear(); - parent.mGroupFlags &= ~view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION; + parent.mGroupFlags &= ~view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION; } let transformToApply = null; let concatMatrix = false; @@ -14730,8 +14679,8 @@ var android; let layerType = this.getLayerType(); const hardwareAccelerated = false; const nativeAccelerated = canvas.isNativeAccelerated(); - if ((flags & view_2.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) != 0 || - (flags & view_2.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) != 0) { + if ((flags & view_1.ViewGroup.FLAG_CHILDREN_DRAWN_WITH_CACHE) != 0 || + (flags & view_1.ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE) != 0) { caching = true; } else { @@ -14747,7 +14696,7 @@ var android; transformToApply = parent.getChildTransformation(); } else { - if (!useDisplayListProperties && (flags & view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) { + if (!useDisplayListProperties && (flags & view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS) != 0) { const t = parent.getChildTransformation(); const hasTransform = parent.getChildStaticTransformation(this, t); if (hasTransform) { @@ -14760,8 +14709,8 @@ var android; concatMatrix = !childHasIdentityMatrix || concatMatrix; this.mPrivateFlags |= View.PFLAG_DRAWN; if (!concatMatrix && - (flags & (view_2.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS | - view_2.ViewGroup.FLAG_CLIP_CHILDREN)) == view_2.ViewGroup.FLAG_CLIP_CHILDREN && + (flags & (view_1.ViewGroup.FLAG_SUPPORT_STATIC_TRANSFORMATIONS | + view_1.ViewGroup.FLAG_CLIP_CHILDREN)) == view_1.ViewGroup.FLAG_CLIP_CHILDREN && canvas.quickReject(this.mLeft, this.mTop, this.mRight, this.mBottom) && (this.mPrivateFlags & View.PFLAG_DRAW_ANIMATION) == 0) { this.mPrivateFlags2 |= View.PFLAG2_VIEW_QUICK_REJECTED; @@ -14803,12 +14752,12 @@ var android; canvas.translate(-transX, -transY); canvas.concat(transformToApply.getMatrix()); canvas.translate(transX, transY); - parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION; + parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION; } let transformAlpha = transformToApply.getAlpha(); if (transformAlpha < 1) { alpha *= transformAlpha; - parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION; + parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION; } } if (!childHasIdentityMatrix && !useDisplayListProperties) { @@ -14824,7 +14773,7 @@ var android; else { this.mPrivateFlags3 &= ~View.PFLAG3_VIEW_IS_ANIMATING_ALPHA; } - parent.mGroupFlags |= view_2.ViewGroup.FLAG_CLEAR_TRANSFORMATION; + parent.mGroupFlags |= view_1.ViewGroup.FLAG_CLEAR_TRANSFORMATION; if (hasNoCache) { const multipliedAlpha = Math.floor((255 * alpha)); if (!this.onSetAlpha(multipliedAlpha)) { @@ -14842,7 +14791,7 @@ var android; } if (this.mShadowPaint != null) this.drawShadow(canvas); - if ((flags & view_2.ViewGroup.FLAG_CLIP_CHILDREN) == view_2.ViewGroup.FLAG_CLIP_CHILDREN && + if ((flags & view_1.ViewGroup.FLAG_CLIP_CHILDREN) == view_1.ViewGroup.FLAG_CLIP_CHILDREN && !useDisplayListProperties && cache == null) { if (offsetForScroll) { canvas.clipRect(sx, sy, sx + (this.mRight - this.mLeft), sy + (this.mBottom - this.mTop), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft); @@ -14870,10 +14819,10 @@ var android; canvas.multiplyGlobalAlpha(alpha); if (layerType == View.LAYER_TYPE_NONE) { if (alpha < 1) { - parent.mGroupFlags |= view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE; + parent.mGroupFlags |= view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE; } - else if ((flags & view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE) != 0) { - parent.mGroupFlags &= ~view_2.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE; + else if ((flags & view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE) != 0) { + parent.mGroupFlags &= ~view_1.ViewGroup.FLAG_ALPHA_LOWER_THAN_ONE; } } canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight(), this.mCornerRadiusTopLeft, this.mCornerRadiusTopRight, this.mCornerRadiusBottomRight, this.mCornerRadiusBottomLeft); @@ -14956,10 +14905,10 @@ var android; invalidationTransform = t; if (more) { if (!a.willChangeBounds()) { - if ((flags & (view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE | view_2.ViewGroup.FLAG_ANIMATION_DONE)) == view_2.ViewGroup.FLAG_OPTIMIZE_INVALIDATE) { - parent.mGroupFlags |= view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED; + if ((flags & (view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE | view_1.ViewGroup.FLAG_ANIMATION_DONE)) == view_1.ViewGroup.FLAG_OPTIMIZE_INVALIDATE) { + parent.mGroupFlags |= view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED; } - else if ((flags & view_2.ViewGroup.FLAG_INVALIDATE_REQUIRED) == 0) { + else if ((flags & view_1.ViewGroup.FLAG_INVALIDATE_REQUIRED) == 0) { parent.mPrivateFlags |= View.PFLAG_DRAW_ANIMATION; parent.invalidate(this.mLeft, this.mTop, this.mRight, this.mBottom); } @@ -15097,7 +15046,7 @@ var android; const drawingCacheBackgroundColor = this.mDrawingCacheBackgroundColor; const opaque = drawingCacheBackgroundColor != 0 || this.isOpaque(); const projectedBitmapSize = width * height * 4; - const drawingCacheSize = view_2.ViewConfiguration.get().getScaledMaximumDrawingCacheSize(); + const drawingCacheSize = view_1.ViewConfiguration.get().getScaledMaximumDrawingCacheSize(); if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) { if (width > 0 && height > 0) { Log.w(View.VIEW_LOG_TAG, "View too large to fit into drawing cache, needs " + projectedBitmapSize + " bytes, only " + drawingCacheSize + " available"); @@ -15187,7 +15136,7 @@ var android; this.mAttachInfo.mHandler.postAtTime(what, who, when); } else { - view_2.ViewRootImpl.getRunQueue().postDelayed(what, delay); + view_1.ViewRootImpl.getRunQueue().postDelayed(what, delay); } } } @@ -15197,7 +15146,7 @@ var android; this.mAttachInfo.mHandler.removeCallbacks(what, who); } else { - view_2.ViewRootImpl.getRunQueue().removeCallbacks(what); + view_1.ViewRootImpl.getRunQueue().removeCallbacks(what); } } else if (what === null) { @@ -15622,21 +15571,21 @@ var android; return this.mScrollCache != null && this.mScrollCache.fadeScrollBars; } getScrollBarDefaultDelayBeforeFade() { - return this.mScrollCache == null ? view_2.ViewConfiguration.getScrollDefaultDelay() : + return this.mScrollCache == null ? view_1.ViewConfiguration.getScrollDefaultDelay() : this.mScrollCache.scrollBarDefaultDelayBeforeFade; } setScrollBarDefaultDelayBeforeFade(scrollBarDefaultDelayBeforeFade) { this.getScrollCache().scrollBarDefaultDelayBeforeFade = scrollBarDefaultDelayBeforeFade; } getScrollBarFadeDuration() { - return this.mScrollCache == null ? view_2.ViewConfiguration.getScrollBarFadeDuration() : + return this.mScrollCache == null ? view_1.ViewConfiguration.getScrollBarFadeDuration() : this.mScrollCache.scrollBarFadeDuration; } setScrollBarFadeDuration(scrollBarFadeDuration) { this.getScrollCache().scrollBarFadeDuration = scrollBarFadeDuration; } getScrollBarSize() { - return this.mScrollCache == null ? view_2.ViewConfiguration.get().getScaledScrollBarSize() : + return this.mScrollCache == null ? view_1.ViewConfiguration.get().getScaledScrollBarSize() : this.mScrollCache.scrollBarSize; } setScrollBarSize(scrollBarSize) { @@ -15696,8 +15645,6 @@ var android; } dispatchAttachedToWindow(info, visibility) { this.mAttachInfo = info; - if (info.mRootView && info.mRootView.mContext) - this.mContext = info.mRootView.mContext; if (this.mOverlay != null) { this.mOverlay.getOverlayView().dispatchAttachedToWindow(info, visibility); } @@ -15880,9 +15827,9 @@ var android; return Resources.getSystem(); } static inflate(context, xml, root) { - return view_2.LayoutInflater.from(context).inflate(xml, root); + return view_1.LayoutInflater.from(context).inflate(xml, root); } - _AttrObserverCallBack(arr, observer) { + static _AttrObserverCallBack(arr, observer) { arr.forEach((record) => { let target = record.target; let androidView = target[View.AndroidViewProperty]; @@ -15908,9 +15855,361 @@ var android; oldBindView._AttrObserver.disconnect(); } this.bindElement[View.AndroidViewProperty] = this; - this._stateAttrList = new StateAttrList(this); this._initAttrObserver(); } + initBindAttr() { + let classAttrBinder = View.ViewClassAttrBinderClazzMap.get(this.getClass()); + if (!classAttrBinder) { + classAttrBinder = this.createClassAttrBinder(); + View.ViewClassAttrBinderClazzMap.set(this.getClass(), classAttrBinder); + } + this._attrBinder.setClassAttrBind(classAttrBinder); + } + createClassAttrBinder() { + const classAttrBinder = new AttrBinder.ClassBinderMap() + .set('background', { + setter(v, value, attrBinder) { + v.setBackground(attrBinder.parseDrawable(value)); + }, + getter(v) { + return v.mBackground; + }, + }).set('padding', { + setter(v, value, attrBinder) { + if (value == null) + value = 0; + let [top, right, bottom, left] = attrBinder.parsePaddingMarginTRBL(value); + v.setPadding(left, top, right, bottom); + }, + getter(v) { + return v.mPaddingTop + ' ' + v.mPaddingRight + ' ' + v.mPaddingBottom + ' ' + v.mPaddingLeft; + }, + }).set('paddingLeft', { + setter(v, value, attrBinder) { + if (value == null) + value = 0; + v.setPadding(attrBinder.parseDimension(value, 0), v.mPaddingTop, v.mPaddingRight, v.mPaddingBottom); + }, + getter(v) { + return v.mPaddingLeft; + }, + }).set('paddingTop', { + setter(v, value, attrBinder) { + if (value == null) + value = 0; + v.setPadding(v.mPaddingLeft, attrBinder.parseDimension(value, 0), v.mPaddingRight, v.mPaddingBottom); + }, + getter(v) { + return v.mPaddingTop; + }, + }).set('paddingRight', { + setter(v, value, attrBinder) { + if (value == null) + value = 0; + v.setPadding(v.mPaddingLeft, v.mPaddingTop, attrBinder.parseDimension(value, 0), v.mPaddingBottom); + }, + getter(v) { + return v.mPaddingRight; + }, + }).set('paddingBottom', { + setter(v, value, attrBinder) { + if (value == null) + value = 0; + v.setPadding(v.mPaddingLeft, v.mPaddingTop, v.mPaddingRight, attrBinder.parseDimension(value, 0)); + }, + getter(v) { + return v.mPaddingBottom; + }, + }).set('scrollX', { + setter(v, value, attrBinder) { + value = attrBinder.parseNumberPixelOffset(value); + if (Number.isInteger(value)) + v.scrollTo(value, v.mScrollY); + }, + getter(v) { + v.getScrollX(); + }, + }).set('scrollY', { + setter(v, value, attrBinder) { + value = attrBinder.parseNumberPixelOffset(value); + if (Number.isInteger(value)) + v.scrollTo(v.mScrollX, value); + }, + getter(v) { + return v.getScrollY(); + }, + }).set('alpha', { + setter(v, value, attrBinder) { + v.setAlpha(attrBinder.parseFloat(value, v.getAlpha())); + }, + getter(v) { + return v.getAlpha(); + }, + }).set('transformPivotX', { + setter(v, value, attrBinder) { + v.setPivotX(attrBinder.parseNumberPixelOffset(value, v.getPivotX())); + }, + getter(v) { + return v.getPivotX(); + }, + }).set('transformPivotY', { + setter(v, value, attrBinder) { + v.setPivotY(attrBinder.parseNumberPixelOffset(value, v.getPivotY())); + }, + getter(v) { + return v.getPivotY(); + }, + }).set('translationX', { + setter(v, value, attrBinder) { + v.setTranslationX(attrBinder.parseNumberPixelOffset(value, v.getTranslationX())); + }, + getter(v) { + return v.getTranslationX(); + }, + }).set('translationY', { + setter(v, value, attrBinder) { + v.setTranslationY(attrBinder.parseNumberPixelOffset(value, v.getTranslationY())); + }, + getter(v) { + return v.getTranslationY(); + }, + }).set('rotation', { + setter(v, value, attrBinder) { + v.setRotation(attrBinder.parseFloat(value, v.getRotation())); + }, + getter(v) { + return v.getRotation(); + }, + }).set('scaleX', { + setter(v, value, attrBinder) { + v.setScaleX(attrBinder.parseFloat(value, v.getScaleX())); + }, + getter(v) { + return v.getScaleX(); + }, + }).set('scaleY', { + setter(v, value, attrBinder) { + v.setScaleY(attrBinder.parseFloat(value, v.getScaleY())); + }, + getter(v) { + return v.getScaleY(); + }, + }).set('tag', { + setter(v, value, attrBinder) { + v.setTag(value); + }, + getter(v) { + return v.getTag(); + }, + }).set('id', { + setter(v, value, attrBinder) { + v.setId(value); + }, + getter(v) { + return v.getId(); + }, + }).set('focusable', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK); + } + }, + getter(v) { + return v.isFocusable(); + }, + }).set('focusableInTouchMode', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK); + } + }, + getter(v) { + return v.isFocusableInTouchMode(); + }, + }).set('clickable', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setFlags(View.CLICKABLE, View.CLICKABLE); + } + }, + getter(v) { + return v.isClickable(); + }, + }).set('longClickable', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE); + } + }, + getter(v) { + return v.isLongClickable(); + }, + }).set('duplicateParentState', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE); + } + }, + getter(v) { + return (v.mViewFlags & View.DUPLICATE_PARENT_STATE) == View.DUPLICATE_PARENT_STATE; + }, + }).set('visibility', { + setter(v, value, attrBinder) { + if (value === 'gone') + v.setVisibility(View.GONE); + else if (value === 'invisible') + v.setVisibility(View.INVISIBLE); + else if (value === 'visible') + v.setVisibility(View.VISIBLE); + }, + getter(v) { + return v.getVisibility(); + }, + }).set('scrollbars', { + setter(v, value, attrBinder) { + if (value === 'none') { + v.setHorizontalScrollBarEnabled(false); + v.setVerticalScrollBarEnabled(false); + } + else if (value === 'horizontal') { + v.setHorizontalScrollBarEnabled(true); + v.setVerticalScrollBarEnabled(false); + } + else if (value === 'vertical') { + v.setHorizontalScrollBarEnabled(false); + v.setVerticalScrollBarEnabled(true); + } + }, + }).set('isScrollContainer', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value, false)) { + v.setScrollContainer(true); + } + }, + getter(v) { + return v.isScrollContainer(); + }, + }).set('minWidth', { + setter(v, value, attrBinder) { + v.setMinimumWidth(attrBinder.parseNumberPixelSize(value, 0)); + }, + getter(v) { + return v.mMinWidth; + }, + }).set('minHeight', { + setter(v, value, attrBinder) { + v.setMinimumHeight(attrBinder.parseNumberPixelSize(value, 0)); + }, + getter(v) { + return v.mMinHeight; + }, + }).set('onClick', { + setter(v, value, attrBinder) { + if (value && typeof value === 'string') { + v.setOnClickListenerByAttrValueString(value); + } + v.bindElement.removeAttribute('onclick'); + }, + }).set('overScrollMode', { + setter(v, value, attrBinder) { + let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()]; + if (scrollMode === undefined) + scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS; + v.setOverScrollMode(scrollMode); + } + }).set('layerType', { + setter(v, value, attrBinder) { + if ((value + '').toLowerCase() == 'software') { + v.setLayerType(View.LAYER_TYPE_SOFTWARE); + } + else { + v.setLayerType(View.LAYER_TYPE_NONE); + } + } + }).set('cornerRadius', { + setter(v, value, attrBinder) { + let [topRight, rightBottom, bottomLeft, leftTop] = attrBinder.parsePaddingMarginTRBL(value); + v.setCornerRadius(leftTop, topRight, rightBottom, bottomLeft); + }, + getter(v) { + return v.mCornerRadiusTopRight + ' ' + v.mCornerRadiusBottomRight + ' ' + v.mCornerRadiusBottomLeft + ' ' + v.mCornerRadiusTopLeft; + }, + }).set('cornerRadiusTopLeft', { + setter(v, value, attrBinder) { + v.setCornerRadiusTopLeft(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopLeft)); + }, + getter(v) { + return v.mCornerRadiusTopLeft; + }, + }).set('cornerRadiusTopRight', { + setter(v, value, attrBinder) { + v.setCornerRadiusTopRight(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusTopRight)); + }, + getter(v) { + return v.mCornerRadiusTopRight; + }, + }).set('cornerRadiusBottomLeft', { + setter(v, value, attrBinder) { + v.setCornerRadiusBottomLeft(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomLeft)); + }, + getter(v) { + return v.mCornerRadiusBottomLeft; + }, + }).set('cornerRadiusBottomRight', { + setter(v, value, attrBinder) { + v.setCornerRadiusBottomRight(attrBinder.parseNumberPixelSize(value, v.mCornerRadiusBottomRight)); + }, + getter(v) { + return v.mCornerRadiusBottomRight; + }, + }).set('viewShadowColor', { + setter(v, value, attrBinder) { + if (!v.mShadowPaint) + v.mShadowPaint = new Paint(); + v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, attrBinder.parseColor(value, v.mShadowPaint.shadowColor)); + }, + getter(v) { + if (v.mShadowPaint) + return v.mShadowPaint.shadowColor; + }, + }).set('viewShadowDx', { + setter(v, value, attrBinder) { + if (!v.mShadowPaint) + v.mShadowPaint = new Paint(); + let dx = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDx); + v.setShadowView(v.mShadowPaint.shadowRadius, dx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor); + }, + getter(v) { + if (v.mShadowPaint) + return v.mShadowPaint.shadowDx; + }, + }).set('viewShadowDy', { + setter(v, value, attrBinder) { + if (!v.mShadowPaint) + v.mShadowPaint = new Paint(); + let dy = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowDy); + v.setShadowView(v.mShadowPaint.shadowRadius, v.mShadowPaint.shadowDx, dy, v.mShadowPaint.shadowColor); + }, + getter(v) { + if (v.mShadowPaint) + return v.mShadowPaint.shadowDy; + }, + }).set('viewShadowRadius', { + setter(v, value, attrBinder) { + if (!v.mShadowPaint) + v.mShadowPaint = new Paint(); + let radius = attrBinder.parseNumberPixelSize(value, v.mShadowPaint.shadowRadius); + v.setShadowView(radius, v.mShadowPaint.shadowDx, v.mShadowPaint.shadowDy, v.mShadowPaint.shadowColor); + }, + getter(v) { + if (v.mShadowPaint) + return v.mShadowPaint.shadowRadius; + }, + }); + classAttrBinder.set('paddingStart', classAttrBinder.get('paddingLeft')); + classAttrBinder.set('paddingEnd', classAttrBinder.get('paddingRight')); + return classAttrBinder; + } requestSyncBoundToElement(immediately = this.dependOnDebugLayout()) { let rootView = this.getRootView(); if (!rootView) @@ -15969,7 +16268,7 @@ var android; } this.getMatrix(); } - if (this instanceof view_2.ViewGroup) { + if (this instanceof view_1.ViewGroup) { const group = this; for (var i = 0, count = group.getChildCount(); i < count; i++) { group.getChildAt(i)._syncBoundAndScrollToElement(); @@ -16008,16 +16307,11 @@ var android; if (!window['MutationObserver']) return; if (!this._AttrObserver) - this._AttrObserver = new MutationObserver(this._AttrObserverCallBack); + this._AttrObserver = new MutationObserver(View._AttrObserverCallBack); else this._AttrObserver.disconnect(); this._AttrObserver.observe(this.bindElement, { attributes: true, attributeOldValue: true }); } - _fireInitedAttributeChange() { - for (let [key, value] of this._stateAttrList.getDefaultStateAttr().getAttrMap().entries()) { - this.onBindElementAttributeChanged(key, null, value); - } - } _fireStateChangeToAttribute(oldState, newState) { if (!this._stateAttrList) return; @@ -16038,11 +16332,10 @@ var android; _getBinderAttrValue(key) { if (!key) return null; - if (key.startsWith('layout_')) { + if (key.startsWith('layout_') || key.startsWith('android:layout_')) { let params = this.getLayoutParams(); if (params) { - let attrName = key.substring('layout_'.length); - return params._attrBinder.getAttrValue(attrName); + return params.getAttrBinder().getAttrValue(key); } } else { @@ -16057,24 +16350,15 @@ var android; else if (newVal === 'false') newVal = false; if (attrName.startsWith('layout_')) { - attrName = attrName.substring('layout_'.length); let params = this.getLayoutParams(); if (params) { - params._attrBinder.onAttrChange(attrName, newVal, this.getContext()); + params.getAttrBinder().onAttrChange(attrName, newVal, this.getContext()); this.requestLayout(); } return; } this._attrBinder.onAttrChange(attrName, newVal, this.getContext()); } - applyDefaultAttributes(attrs) { - let initAttrMap = this._stateAttrList.getDefaultStateAttr().getAttrMap(); - for (let key in attrs) { - if (!initAttrMap.has(key.toLowerCase())) { - this._attrBinder.onAttrChange(key, attrs[key], this.getContext()); - } - } - } tagName() { return this.constructor.name; } @@ -16156,7 +16440,6 @@ var android; View.VIEW_STATE_SELECTED = 1 << 1; View.VIEW_STATE_FOCUSED = 1 << 2; View.VIEW_STATE_ENABLED = 1 << 3; - View.VIEW_STATE_DISABLE = -View.VIEW_STATE_ENABLED; View.VIEW_STATE_PRESSED = 1 << 4; View.VIEW_STATE_ACTIVATED = 1 << 5; View.VIEW_STATE_HOVERED = 1 << 7; @@ -16259,9 +16542,10 @@ var android; View.TEXT_ALIGNMENT_VIEW_END = 6; View.TEXT_ALIGNMENT_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY; View.TEXT_ALIGNMENT_RESOLVED_DEFAULT = View.TEXT_ALIGNMENT_GRAVITY; + View.ViewClassAttrBinderClazzMap = new Map(); View.AndroidViewProperty = 'AndroidView'; View.TempMatrixValue = androidui.util.ArrayCreator.newNumberArray(9); - view_2.View = View; + view_1.View = View; (function (View) { class TransformationInfo { constructor() { @@ -16393,7 +16677,7 @@ var android; } OnGenericMotionListener.fromFunction = fromFunction; })(OnGenericMotionListener = View.OnGenericMotionListener || (View.OnGenericMotionListener = {})); - })(View = view_2.View || (view_2.View = {})); + })(View = view_1.View || (view_1.View = {})); (function (View) { var AttachInfo; (function (AttachInfo) { @@ -16417,7 +16701,7 @@ var android; InvalidateInfo.sPool = new Pools.SynchronizedPool(InvalidateInfo.POOL_LIMIT); AttachInfo.InvalidateInfo = InvalidateInfo; })(AttachInfo = View.AttachInfo || (View.AttachInfo = {})); - })(View = view_2.View || (view_2.View = {})); + })(View = view_1.View || (view_1.View = {})); class CheckForLongPress { constructor(View_this) { this.mOriginalWindowAttachCount = 0; @@ -16442,7 +16726,7 @@ var android; run() { this.View_this.mPrivateFlags &= ~View.PFLAG_PREPRESSED; this.View_this.setPressed(true); - this.View_this.checkForLongClick(view_2.ViewConfiguration.getTapTimeout()); + this.View_this.checkForLongClick(view_1.ViewConfiguration.getTapTimeout()); } } class PerformClick { @@ -16472,17 +16756,17 @@ var android; class ScrollabilityCache { constructor(host) { this.fadeScrollBars = true; - this.fadingEdgeLength = view_2.ViewConfiguration.get().getScaledFadingEdgeLength(); - this.scrollBarDefaultDelayBeforeFade = view_2.ViewConfiguration.getScrollDefaultDelay(); - this.scrollBarFadeDuration = view_2.ViewConfiguration.getScrollBarFadeDuration(); - this.scrollBarSize = view_2.ViewConfiguration.get().getScaledScrollBarSize(); + this.fadingEdgeLength = view_1.ViewConfiguration.get().getScaledFadingEdgeLength(); + this.scrollBarDefaultDelayBeforeFade = view_1.ViewConfiguration.getScrollDefaultDelay(); + this.scrollBarFadeDuration = view_1.ViewConfiguration.getScrollBarFadeDuration(); + this.scrollBarSize = view_1.ViewConfiguration.get().getScaledScrollBarSize(); this.interpolator = new LinearInterpolator(); this.state = ScrollabilityCache.OFF; this.host = host; this.scrollBar = new ScrollBarDrawable(); let thumbColor = new ColorDrawable(0x44000000); let density = Resources.getDisplayMetrics().density; - let thumb = new InsetDrawable(thumbColor, 0, 2 * density, view_2.ViewConfiguration.get().getScaledScrollBarSize() / 2, 2 * density); + let thumb = new InsetDrawable(thumbColor, 0, 2 * density, view_1.ViewConfiguration.get().getScaledScrollBarSize() / 2, 2 * density); this.scrollBar.setHorizontalThumbDrawable(thumb); this.scrollBar.setVerticalThumbDrawable(thumb); } @@ -16616,7 +16900,7 @@ var android; var android; (function (android) { var view; - (function (view_3) { + (function (view_2) { var View = android.view.View; var Rect = android.graphics.Rect; var Handler = android.os.Handler; @@ -16648,7 +16932,7 @@ var android; this.mLayoutRequesters = []; this.mHandler = new ViewRootHandler(); this.mViewScrollChanged = false; - this.mTreeObserver = new view_3.ViewTreeObserver(); + this.mTreeObserver = new view_2.ViewTreeObserver(); this.mIgnoreDirtyState = false; this.mSetIgnoreDirtyState = false; this.mDrawingTime = 0; @@ -16727,10 +17011,10 @@ var android; let MeasureSpec = View.MeasureSpec; let measureSpec; switch (rootDimension) { - case view_3.ViewGroup.LayoutParams.MATCH_PARENT: + case view_2.ViewGroup.LayoutParams.MATCH_PARENT: measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.EXACTLY); break; - case view_3.ViewGroup.LayoutParams.WRAP_CONTENT: + case view_2.ViewGroup.LayoutParams.WRAP_CONTENT: measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.AT_MOST); break; default: @@ -16753,7 +17037,7 @@ var android; let windowSizeMayChange = false; let newSurface = false; let surfaceChanged = false; - let lp = new view_3.ViewGroup.LayoutParams(view_3.ViewGroup.LayoutParams.MATCH_PARENT, view_3.ViewGroup.LayoutParams.MATCH_PARENT); + let lp = new view_2.ViewGroup.LayoutParams(view_2.ViewGroup.LayoutParams.MATCH_PARENT, view_2.ViewGroup.LayoutParams.MATCH_PARENT); let desiredWindowWidth; let desiredWindowHeight; let viewVisibility = this.getHostVisibility(); @@ -17114,7 +17398,7 @@ var android; } invalidateWorld(view) { view.invalidate(); - if (view instanceof view_3.ViewGroup) { + if (view instanceof view_2.ViewGroup) { let parent = view; for (let i = 0; i < parent.getChildCount(); i++) { this.invalidateWorld(parent.getChildAt(i)); @@ -17168,15 +17452,15 @@ var android; return r.intersect(0, 0, this.mWidth, this.mHeight); } focusSearch(focused, direction) { - if (!(this.mView instanceof view_3.ViewGroup)) { + if (!(this.mView instanceof view_2.ViewGroup)) { return null; } - if (this.mView instanceof view_3.WindowManager.Layout) { + if (this.mView instanceof view_2.WindowManager.Layout) { let topWindow = this.mView.getTopFocusableWindowView(); if (topWindow) - return view_3.FocusFinder.getInstance().findNextFocus(topWindow, focused, direction); + return view_2.FocusFinder.getInstance().findNextFocus(topWindow, focused, direction); } - return view_3.FocusFinder.getInstance().findNextFocus(this.mView, focused, direction); + return view_2.FocusFinder.getInstance().findNextFocus(this.mView, focused, direction); } bringChildToFront(child) { } @@ -17187,9 +17471,9 @@ var android; } else { let focused = this.mView.findFocus(); - if (focused instanceof view_3.ViewGroup) { + if (focused instanceof view_2.ViewGroup) { let group = focused; - if (group.getDescendantFocusability() == view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS + if (group.getDescendantFocusability() == view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS && ViewRootImpl.isViewDescendantOf(v, focused)) { v.requestFocus(); } @@ -17202,7 +17486,7 @@ var android; return true; } const theParent = child.getParent(); - return (theParent instanceof view_3.ViewGroup) && ViewRootImpl.isViewDescendantOf(theParent, parent); + return (theParent instanceof view_2.ViewGroup) && ViewRootImpl.isViewDescendantOf(theParent, parent); } childDrawableStateChanged(child) { } @@ -17232,7 +17516,7 @@ var android; return false; } const action = event.getAction(); - if (action != view_3.KeyEvent.ACTION_DOWN) { + if (action != view_2.KeyEvent.ACTION_DOWN) { return false; } if (ViewRootImpl.isNavigationKey(event)) { @@ -17246,18 +17530,18 @@ var android; } static isNavigationKey(keyEvent) { switch (keyEvent.getKeyCode()) { - case view_3.KeyEvent.KEYCODE_DPAD_LEFT: - case view_3.KeyEvent.KEYCODE_DPAD_RIGHT: - case view_3.KeyEvent.KEYCODE_DPAD_UP: - case view_3.KeyEvent.KEYCODE_DPAD_DOWN: - case view_3.KeyEvent.KEYCODE_DPAD_CENTER: - case view_3.KeyEvent.KEYCODE_PAGE_UP: - case view_3.KeyEvent.KEYCODE_PAGE_DOWN: - case view_3.KeyEvent.KEYCODE_MOVE_HOME: - case view_3.KeyEvent.KEYCODE_MOVE_END: - case view_3.KeyEvent.KEYCODE_TAB: - case view_3.KeyEvent.KEYCODE_SPACE: - case view_3.KeyEvent.KEYCODE_ENTER: + case view_2.KeyEvent.KEYCODE_DPAD_LEFT: + case view_2.KeyEvent.KEYCODE_DPAD_RIGHT: + case view_2.KeyEvent.KEYCODE_DPAD_UP: + case view_2.KeyEvent.KEYCODE_DPAD_DOWN: + case view_2.KeyEvent.KEYCODE_DPAD_CENTER: + case view_2.KeyEvent.KEYCODE_PAGE_UP: + case view_2.KeyEvent.KEYCODE_PAGE_DOWN: + case view_2.KeyEvent.KEYCODE_MOVE_HOME: + case view_2.KeyEvent.KEYCODE_MOVE_END: + case view_2.KeyEvent.KEYCODE_TAB: + case view_2.KeyEvent.KEYCODE_SPACE: + case view_2.KeyEvent.KEYCODE_ENTER: return true; } return false; @@ -17307,9 +17591,9 @@ var android; } static findAncestorToTakeFocusInTouchMode(focused) { let parent = focused.getParent(); - while (parent instanceof view_3.ViewGroup) { + while (parent instanceof view_2.ViewGroup) { const vgParent = parent; - if (vgParent.getDescendantFocusability() == view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS + if (vgParent.getDescendantFocusability() == view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS && vgParent.isFocusableInTouchMode()) { return vgParent; } @@ -17326,11 +17610,11 @@ var android; if (this.mView != null) { if (this.mView.hasFocus()) { let focusedView = this.mView.findFocus(); - if (!(focusedView instanceof view_3.ViewGroup)) { + if (!(focusedView instanceof view_2.ViewGroup)) { return false; } else if (focusedView.getDescendantFocusability() != - view_3.ViewGroup.FOCUS_AFTER_DESCENDANTS) { + view_2.ViewGroup.FOCUS_AFTER_DESCENDANTS) { return false; } } @@ -17365,7 +17649,7 @@ var android; ViewRootImpl.DEBUG_CONFIGURATION = false || ViewRootImpl.LOCAL_LOGV; ViewRootImpl.DEBUG_FPS = false || ViewRootImpl.LOCAL_LOGV; ViewRootImpl.ContinueEventToDom = Symbol(); - view_3.ViewRootImpl = ViewRootImpl; + view_2.ViewRootImpl = ViewRootImpl; (function (ViewRootImpl) { class RunQueue { constructor() { @@ -17394,7 +17678,7 @@ var android; } } ViewRootImpl.RunQueue = RunQueue; - })(ViewRootImpl = view_3.ViewRootImpl || (view_3.ViewRootImpl = {})); + })(ViewRootImpl = view_2.ViewRootImpl || (view_2.ViewRootImpl = {})); class RunQueueForNoViewRoot extends ViewRootImpl.RunQueue { postDelayed(action, delayMillis) { RunQueueForNoViewRoot.Handler.postDelayed(action, delayMillis); @@ -17536,10 +17820,10 @@ var android; InputStage.FINISH_NOT_HANDLED = 2; class EarlyPostImeInputStage extends InputStage { onProcess(event) { - if (event instanceof view_3.MotionEvent) { + if (event instanceof view_2.MotionEvent) { return this.processMotionEvent(event); } - else if (event instanceof view_3.KeyEvent) { + else if (event instanceof view_2.KeyEvent) { return this.processKeyEvent(event); } return InputStage.FORWARD; @@ -17552,7 +17836,7 @@ var android; } processMotionEvent(event) { const action = event.getAction(); - if (action == view_3.MotionEvent.ACTION_DOWN || action == view_3.MotionEvent.ACTION_SCROLL) { + if (action == view_2.MotionEvent.ACTION_DOWN || action == view_2.MotionEvent.ACTION_SCROLL) { this.ViewRootImpl_this.ensureTouchMode(true); } event.offsetLocation(-this.ViewRootImpl_this.mWinFrame.left, -this.ViewRootImpl_this.mWinFrame.top); @@ -17561,10 +17845,10 @@ var android; } class ViewPostImeInputStage extends InputStage { onProcess(event) { - if (event instanceof view_3.KeyEvent) { + if (event instanceof view_2.KeyEvent) { return this.processKeyEvent(event); } - else if (event instanceof view_3.MotionEvent) { + else if (event instanceof view_2.MotionEvent) { if (event.isTouchEvent()) { return this.processTouchEvent(event); } @@ -17582,7 +17866,7 @@ var android; if (this.shouldDropInputEvent(event)) { return InputStage.FINISH_NOT_HANDLED; } - if (event.getAction() == view_3.KeyEvent.ACTION_DOWN + if (event.getAction() == view_2.KeyEvent.ACTION_DOWN && event.isCtrlPressed() && event.getRepeatCount() == 0) { if (this.shouldDropInputEvent(event)) { @@ -17592,22 +17876,22 @@ var android; if (this.shouldDropInputEvent(event)) { return InputStage.FINISH_NOT_HANDLED; } - if (event.getAction() == view_3.KeyEvent.ACTION_DOWN) { + if (event.getAction() == view_2.KeyEvent.ACTION_DOWN) { let direction = 0; switch (event.getKeyCode()) { - case view_3.KeyEvent.KEYCODE_DPAD_LEFT: + case view_2.KeyEvent.KEYCODE_DPAD_LEFT: direction = View.FOCUS_LEFT; break; - case view_3.KeyEvent.KEYCODE_DPAD_RIGHT: + case view_2.KeyEvent.KEYCODE_DPAD_RIGHT: direction = View.FOCUS_RIGHT; break; - case view_3.KeyEvent.KEYCODE_DPAD_UP: + case view_2.KeyEvent.KEYCODE_DPAD_UP: direction = View.FOCUS_UP; break; - case view_3.KeyEvent.KEYCODE_DPAD_DOWN: + case view_2.KeyEvent.KEYCODE_DPAD_DOWN: direction = View.FOCUS_DOWN; break; - case view_3.KeyEvent.KEYCODE_TAB: + case view_2.KeyEvent.KEYCODE_TAB: if (event.isShiftPressed()) { direction = View.FOCUS_BACKWARD; } @@ -17622,7 +17906,7 @@ var android; let v = focused.focusSearch(direction); if (v != null && v != focused) { focused.getFocusedRect(this.ViewRootImpl_this.mTempRect); - if (mView instanceof view_3.ViewGroup) { + if (mView instanceof view_2.ViewGroup) { mView.offsetDescendantRectToMyCoords(focused, this.ViewRootImpl_this.mTempRect); mView.offsetRectIntoDescendantCoords(v, this.ViewRootImpl_this.mTempRect); } @@ -17665,7 +17949,7 @@ var android; var android; (function (android) { var view; - (function (view_4) { + (function (view_3) { var View = android.view.View; var Rect = android.graphics.Rect; var ArrayList = java.util.ArrayList; @@ -17974,7 +18258,7 @@ var android; let minDistance = Number.MAX_SAFE_INTEGER; let closest = null; let numTouchables = touchables.size(); - let edgeSlop = view_4.ViewConfiguration.get().getScaledEdgeSlop(); + let edgeSlop = view_3.ViewConfiguration.get().getScaledEdgeSlop(); let closestBounds = new Rect(); let touchableBounds = this.mOtherRect; for (let i = 0; i < numTouchables; i++) { @@ -18040,7 +18324,7 @@ var android; + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); } } - view_4.FocusFinder = FocusFinder; + view_3.FocusFinder = FocusFinder; class SequentialFocusComparator { constructor() { this.mFirstRect = new Rect(); @@ -18119,15 +18403,16 @@ var java; var android; (function (android) { var view; - (function (view_5) { + (function (view_4) { var Rect = android.graphics.Rect; var SystemClock = android.os.SystemClock; + var Context = android.content.Context; var System = java.lang.System; var ArrayList = java.util.ArrayList; var Integer = java.lang.Integer; - var Transformation = view_5.animation.Transformation; + var Transformation = android.view.animation.Transformation; var AttrBinder = androidui.attr.AttrBinder; - class ViewGroup extends view_5.View { + class ViewGroup extends view_4.View { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); this.mLastTouchDownTime = 0; @@ -18141,77 +18426,131 @@ var android; this.mLayoutCalledWhileSuppressed = false; this.mChildCountWithTransientState = 0; this.initViewGroup(); + if (bindElement || defStyle) { + this.initFromAttributes(context, bindElement, defStyle); + } } get mChildrenCount() { return this.mChildren.length; } - initBindAttr() { - super.initBindAttr(); - if (!ViewGroup.ViewGroupClassAttrBind) { - ViewGroup.ViewGroupClassAttrBind = new AttrBinder.ClassBinderMap(); - ViewGroup.ViewGroupClassAttrBind.set('clipChildren', { - setter(v, value) { - v.setClipChildren(v._attrBinder.parseBoolean(value)); - }, - getter(v) { - return v.getClipChildren(); - } - }).set('clipToPadding', { - setter(v, value) { - v.setClipToPadding(v._attrBinder.parseBoolean(value)); - }, - getter(v) { - return v.isClipToPadding(); - } - }).set('animationCache', { - setter(v, value) { - v.setAnimationCacheEnabled(v._attrBinder.parseBoolean(value, true)); - } - }).set('persistentDrawingCache', { - setter(v, value) { + initViewGroup() { + this.setFlags(view_4.View.WILL_NOT_DRAW, view_4.View.DRAW_MASK); + this.mGroupFlags |= ViewGroup.FLAG_CLIP_CHILDREN; + this.mGroupFlags |= ViewGroup.FLAG_CLIP_TO_PADDING; + this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_DONE; + this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_CACHE; + this.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE; + this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS; + this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); + this.mPersistentDrawingCache = ViewGroup.PERSISTENT_SCROLLING_CACHE; + } + initFromAttributes(context, attrs, defStyle) { + const a = context.obtainStyledAttributes(attrs, defStyle); + for (let attr of a.getLowerCaseNoNamespaceAttrNames()) { + switch (attr) { + case 'clipchildren': + this.setClipChildren(a.getBoolean(attr, true)); + break; + case 'cliptopadding': + this.setClipToPadding(a.getBoolean(attr, true)); + break; + case 'animationcache': + this.setAnimationCacheEnabled(a.getBoolean(attr, true)); + break; + case 'persistentdrawingcache': { + let value = a.getAttrValue(attr); if (value === 'none') - v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE); + this.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE); else if (value === 'animation') - v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); + this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); else if (value === 'scrolling') - v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE); + this.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE); else if (value === 'all') - v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES); - } - }).set('addStatesFromChildren', { - setter(v, value) { - v.setAddStatesFromChildren(v._attrBinder.parseBoolean(value, false)); - } - }).set('alwaysDrawnWithCache', { - setter(v, value) { - v.setAlwaysDrawnWithCacheEnabled(v._attrBinder.parseBoolean(value, true)); + this.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES); + break; } - }).set('descendantFocusability', { - setter(v, value) { + case 'addstatesfromchildren': + this.setAddStatesFromChildren(a.getBoolean(attr, false)); + break; + case 'alwaysdrawnwithcache': + this.setAlwaysDrawnWithCacheEnabled(a.getBoolean(attr, true)); + break; + case 'layoutanimation': + break; + case 'descendantfocusability': { + let value = a.getAttrValue(attr); if (value == 'beforeDescendants') this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); else if (value == 'afterDescendants') this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); else if (value == 'blocksDescendants') this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + break; } - }).set('splitMotionEvents', { - setter(v, value) { - v.setMotionEventSplittingEnabled(v._attrBinder.parseBoolean(value, false)); - } - }); + case 'splitmotionevents': + this.setMotionEventSplittingEnabled(a.getBoolean(attr, false)); + break; + case 'animatelayoutchanges': + break; + case 'layoutmode': + break; + } } - this._attrBinder.addClassAttrBind(ViewGroup.ViewGroupClassAttrBind); - } - initViewGroup() { - this.setFlags(view_5.View.WILL_NOT_DRAW, view_5.View.DRAW_MASK); - this.mGroupFlags |= ViewGroup.FLAG_CLIP_CHILDREN; - this.mGroupFlags |= ViewGroup.FLAG_CLIP_TO_PADDING; - this.mGroupFlags |= ViewGroup.FLAG_ANIMATION_DONE; - this.mGroupFlags |= ViewGroup.FLAG_ALWAYS_DRAWN_WITH_CACHE; - this.mGroupFlags |= ViewGroup.FLAG_SPLIT_MOTION_EVENTS; - this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); - this.mPersistentDrawingCache = ViewGroup.PERSISTENT_SCROLLING_CACHE; + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder() + .set('clipChildren', { + setter(v, value, attrBinder) { + v.setClipChildren(attrBinder.parseBoolean(value)); + }, + getter(v) { + return v.getClipChildren(); + } + }).set('clipToPadding', { + setter(v, value, attrBinder) { + v.setClipToPadding(attrBinder.parseBoolean(value)); + }, + getter(v) { + return v.isClipToPadding(); + } + }).set('animationCache', { + setter(v, value, attrBinder) { + v.setAnimationCacheEnabled(attrBinder.parseBoolean(value, true)); + } + }).set('persistentDrawingCache', { + setter(v, value, attrBinder) { + if (value === 'none') + v.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE); + else if (value === 'animation') + v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); + else if (value === 'scrolling') + v.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE); + else if (value === 'all') + v.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES); + } + }).set('addStatesFromChildren', { + setter(v, value, attrBinder) { + v.setAddStatesFromChildren(attrBinder.parseBoolean(value, false)); + } + }).set('alwaysDrawnWithCache', { + setter(v, value, attrBinder) { + v.setAlwaysDrawnWithCacheEnabled(attrBinder.parseBoolean(value, true)); + } + }).set('descendantFocusability', { + setter(v, value, attrBinder) { + if (value == 'beforeDescendants') + this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); + else if (value == 'afterDescendants') + this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); + else if (value == 'blocksDescendants') + this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + } + }).set('splitMotionEvents', { + setter(v, value, attrBinder) { + v.setMotionEventSplittingEnabled(attrBinder.parseBoolean(value, false)); + } + }); } getDescendantFocusability() { return this.mGroupFlags & ViewGroup.FLAG_MASK_FOCUSABILITY; @@ -18237,7 +18576,7 @@ var android; super.handleFocusGainInternal(direction, previouslyFocusedRect); } requestChildFocus(child, focused) { - if (view_5.View.DBG) { + if (view_4.View.DBG) { System.out.println(this + " requestChildFocus()"); } if (this.getDescendantFocusability() == ViewGroup.FOCUS_BLOCK_DESCENDANTS) { @@ -18265,9 +18604,10 @@ var android; if (arguments.length === 1) { return super.focusSearch(args[0]); } - let [focused, direction] = args; + const focused = args[0]; + const direction = args[1]; if (this.isRootNamespace()) { - return view_5.FocusFinder.getInstance().findNextFocus(this, focused, direction); + return view_4.FocusFinder.getInstance().findNextFocus(this, focused, direction); } else if (this.mParent != null) { return this.mParent.focusSearch(focused, direction); @@ -18297,7 +18637,7 @@ var android; return this.mFocused != null && this.mFocused.dispatchUnhandledMove(focused, direction); } clearChildFocus(child) { - if (view_5.View.DBG) { + if (view_4.View.DBG) { System.out.println(this + " clearChildFocus()"); } this.mFocused = null; @@ -18306,7 +18646,7 @@ var android; } } clearFocus() { - if (view_5.View.DBG) { + if (view_4.View.DBG) { System.out.println(this + " clearFocus()"); } if (this.mFocused == null) { @@ -18319,7 +18659,7 @@ var android; } } unFocus() { - if (view_5.View.DBG) { + if (view_4.View.DBG) { System.out.println(this + " unFocus()"); } if (this.mFocused == null) { @@ -18334,7 +18674,7 @@ var android; return this.mFocused; } hasFocus() { - return (this.mPrivateFlags & view_5.View.PFLAG_FOCUSED) != 0 || this.mFocused != null; + return (this.mPrivateFlags & view_4.View.PFLAG_FOCUSED) != 0 || this.mFocused != null; } findFocus() { if (ViewGroup.DBG) { @@ -18349,7 +18689,7 @@ var android; return null; } hasFocusable() { - if ((this.mViewFlags & view_5.View.VISIBILITY_MASK) != view_5.View.VISIBLE) { + if ((this.mViewFlags & view_4.View.VISIBILITY_MASK) != view_4.View.VISIBLE) { return false; } if (this.isFocusable()) { @@ -18368,7 +18708,7 @@ var android; } return false; } - addFocusables(views, direction, focusableMode = view_5.View.FOCUSABLES_TOUCH_MODE) { + addFocusables(views, direction, focusableMode = view_4.View.FOCUSABLES_TOUCH_MODE) { const focusableCount = views.size(); const descendantFocusability = this.getDescendantFocusability(); if (descendantFocusability != ViewGroup.FOCUS_BLOCK_DESCENDANTS) { @@ -18376,7 +18716,7 @@ var android; const children = this.mChildren; for (let i = 0; i < count; i++) { const child = children[i]; - if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) { + if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) { child.addFocusables(views, direction, focusableMode); } } @@ -18386,8 +18726,8 @@ var android; super.addFocusables(views, direction, focusableMode); } } - requestFocus(direction = view_5.View.FOCUS_DOWN, previouslyFocusedRect = null) { - if (view_5.View.DBG) { + requestFocus(direction = view_4.View.FOCUS_DOWN, previouslyFocusedRect = null) { + if (view_4.View.DBG) { System.out.println(this + " ViewGroup.requestFocus direction=" + direction); } @@ -18414,7 +18754,7 @@ var android; let increment; let end; let count = this.mChildrenCount; - if ((direction & view_5.View.FOCUS_FORWARD) != 0) { + if ((direction & view_4.View.FOCUS_FORWARD) != 0) { index = 0; increment = 1; end = count; @@ -18427,7 +18767,7 @@ var android; const children = this.mChildren; for (let i = index; i != end; i += increment) { let child = children[i]; - if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) { + if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) { if (child.requestFocus(direction, previouslyFocusedRect)) { return true; } @@ -18494,7 +18834,7 @@ var android; return true; } cleanupLayoutState(child) { - child.mPrivateFlags &= ~view_5.View.PFLAG_FORCE_LAYOUT; + child.mPrivateFlags &= ~view_4.View.PFLAG_FORCE_LAYOUT; } addViewInner(child, index, params, preventRequestLayout) { if (child.getParent() != null) { @@ -18650,7 +18990,7 @@ var android; this.removeViewsInternal(0, count); } detachViewFromParent(child) { - if (child instanceof view_5.View) + if (child instanceof view_4.View) child = this.indexOfChild(child); this.removeFromArray(child); } @@ -18766,14 +19106,14 @@ var android; return handled; } dispatchKeyEvent(event) { - if ((this.mPrivateFlags & (view_5.View.PFLAG_FOCUSED | view_5.View.PFLAG_HAS_BOUNDS)) - == (view_5.View.PFLAG_FOCUSED | view_5.View.PFLAG_HAS_BOUNDS)) { + if ((this.mPrivateFlags & (view_4.View.PFLAG_FOCUSED | view_4.View.PFLAG_HAS_BOUNDS)) + == (view_4.View.PFLAG_FOCUSED | view_4.View.PFLAG_HAS_BOUNDS)) { if (super.dispatchKeyEvent(event)) { return true; } } - else if (this.mFocused != null && (this.mFocused.mPrivateFlags & view_5.View.PFLAG_HAS_BOUNDS) - == view_5.View.PFLAG_HAS_BOUNDS) { + else if (this.mFocused != null && (this.mFocused.mPrivateFlags & view_4.View.PFLAG_HAS_BOUNDS) + == view_4.View.PFLAG_HAS_BOUNDS) { if (this.mFocused.dispatchKeyEvent(event)) { return true; } @@ -18794,7 +19134,7 @@ var android; const children = this.mChildren; for (let i = 0; i < count; i++) { const child = children[i]; - if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE) { + if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE) { child.addTouchables(views); } } @@ -18806,13 +19146,13 @@ var android; let handled = false; if (this.onFilterTouchEventForSecurity(ev)) { let action = ev.getAction(); - let actionMasked = action & view_5.MotionEvent.ACTION_MASK; - if (actionMasked == view_5.MotionEvent.ACTION_DOWN) { + let actionMasked = action & view_4.MotionEvent.ACTION_MASK; + if (actionMasked == view_4.MotionEvent.ACTION_DOWN) { this.cancelAndClearTouchTargets(ev); this.resetTouchState(); } let intercepted; - if (actionMasked == view_5.MotionEvent.ACTION_DOWN + if (actionMasked == view_4.MotionEvent.ACTION_DOWN || this.mFirstTouchTarget != null) { let disallowIntercept = (this.mGroupFlags & ViewGroup.FLAG_DISALLOW_INTERCEPT) != 0; if (!disallowIntercept) { @@ -18827,14 +19167,14 @@ var android; intercepted = true; } let canceled = ViewGroup.resetCancelNextUpFlag(this) - || actionMasked == view_5.MotionEvent.ACTION_CANCEL; + || actionMasked == view_4.MotionEvent.ACTION_CANCEL; let split = (this.mGroupFlags & ViewGroup.FLAG_SPLIT_MOTION_EVENTS) != 0; let newTouchTarget = null; let alreadyDispatchedToNewTouchTarget = false; if (!canceled && !intercepted) { - if (actionMasked == view_5.MotionEvent.ACTION_DOWN - || (split && actionMasked == view_5.MotionEvent.ACTION_POINTER_DOWN) - || actionMasked == view_5.MotionEvent.ACTION_HOVER_MOVE) { + if (actionMasked == view_4.MotionEvent.ACTION_DOWN + || (split && actionMasked == view_4.MotionEvent.ACTION_POINTER_DOWN) + || actionMasked == view_4.MotionEvent.ACTION_HOVER_MOVE) { let actionIndex = ev.getActionIndex(); let idBitsToAssign = split ? 1 << ev.getPointerId(actionIndex) : TouchTarget.ALL_POINTER_IDS; @@ -18912,11 +19252,11 @@ var android; } } if (canceled - || actionMasked == view_5.MotionEvent.ACTION_UP - || actionMasked == view_5.MotionEvent.ACTION_HOVER_MOVE) { + || actionMasked == view_4.MotionEvent.ACTION_UP + || actionMasked == view_4.MotionEvent.ACTION_HOVER_MOVE) { this.resetTouchState(); } - else if (split && actionMasked == view_5.MotionEvent.ACTION_POINTER_UP) { + else if (split && actionMasked == view_4.MotionEvent.ACTION_POINTER_UP) { let actionIndex = ev.getActionIndex(); let idBitsToRemove = 1 << ev.getPointerId(actionIndex); this.removePointersFromTouchTargets(idBitsToRemove); @@ -18930,8 +19270,8 @@ var android; this.mGroupFlags &= ~ViewGroup.FLAG_DISALLOW_INTERCEPT; } static resetCancelNextUpFlag(view) { - if ((view.mPrivateFlags & view_5.View.PFLAG_CANCEL_NEXT_UP_EVENT) != 0) { - view.mPrivateFlags &= ~view_5.View.PFLAG_CANCEL_NEXT_UP_EVENT; + if ((view.mPrivateFlags & view_4.View.PFLAG_CANCEL_NEXT_UP_EVENT) != 0) { + view.mPrivateFlags &= ~view_4.View.PFLAG_CANCEL_NEXT_UP_EVENT; return true; } return false; @@ -18952,7 +19292,7 @@ var android; let syntheticEvent = false; if (event == null) { let now = SystemClock.uptimeMillis(); - event = view_5.MotionEvent.obtainWithAction(now, now, view_5.MotionEvent.ACTION_CANCEL, 0, 0); + event = view_4.MotionEvent.obtainWithAction(now, now, view_4.MotionEvent.ACTION_CANCEL, 0, 0); syntheticEvent = true; } for (let target = this.mFirstTouchTarget; target != null; target = target.next) { @@ -19016,7 +19356,7 @@ var android; } target.recycle(); let now = SystemClock.uptimeMillis(); - let event = view_5.MotionEvent.obtainWithAction(now, now, view_5.MotionEvent.ACTION_CANCEL, 0, 0); + let event = view_4.MotionEvent.obtainWithAction(now, now, view_4.MotionEvent.ACTION_CANCEL, 0, 0); view.dispatchTouchEvent(event); event.recycle(); return; @@ -19026,7 +19366,7 @@ var android; } } static canViewReceivePointerEvents(child) { - return (child.mViewFlags & view_5.View.VISIBILITY_MASK) == view_5.View.VISIBLE + return (child.mViewFlags & view_4.View.VISIBILITY_MASK) == view_4.View.VISIBLE || child.getAnimation() != null; } isTransformedTouchPointInView(x, y, child, outLocalPoint) { @@ -19041,8 +19381,8 @@ var android; dispatchTransformedTouchEvent(event, cancel, child, desiredPointerIdBits) { let handled; const oldAction = event.getAction(); - if (cancel || oldAction == view_5.MotionEvent.ACTION_CANCEL) { - event.setAction(view_5.MotionEvent.ACTION_CANCEL); + if (cancel || oldAction == view_4.MotionEvent.ACTION_CANCEL) { + event.setAction(view_4.MotionEvent.ACTION_CANCEL); if (child == null) { handled = super.dispatchTouchEvent(event); } @@ -19072,7 +19412,7 @@ var android; } return handled; } - transformedEvent = view_5.MotionEvent.obtain(event); + transformedEvent = view_4.MotionEvent.obtain(event); } else { transformedEvent = event.split(newPointerIdBits); @@ -19169,6 +19509,9 @@ var android; getChildDrawingOrder(childCount, i) { return i; } + generateLayoutParamsFromAttr(attrs) { + return new ViewGroup.LayoutParams(this.getContext(), attrs); + } generateLayoutParams(p) { return p; } @@ -19179,25 +19522,19 @@ var android; const size = this.mChildren.length; for (let i = 0; i < size; ++i) { const child = this.mChildren[i]; - if ((child.mViewFlags & view_5.View.VISIBILITY_MASK) != view_5.View.GONE) { + if ((child.mViewFlags & view_4.View.VISIBILITY_MASK) != view_4.View.GONE) { this.measureChild(child, widthMeasureSpec, heightMeasureSpec); } } } measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) { let lp = child.getLayoutParams(); - lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec; - lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec; const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width); const childHeightMeasureSpec = ViewGroup.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); - lp._measuringParentWidthMeasureSpec = null; - lp._measuringParentHeightMeasureSpec = null; } measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) { let lp = child.getLayoutParams(); - lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec; - lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec; if (lp instanceof ViewGroup.MarginLayoutParams) { const childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin + widthUsed, lp.width); @@ -19205,11 +19542,9 @@ var android; + heightUsed, lp.height); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } - lp._measuringParentWidthMeasureSpec = null; - lp._measuringParentHeightMeasureSpec = null; } static getChildMeasureSpec(spec, padding, childDimension) { - let MeasureSpec = view_5.View.MeasureSpec; + let MeasureSpec = view_4.View.MeasureSpec; let specMode = MeasureSpec.getMode(spec); let specSize = MeasureSpec.getSize(spec); let size = Math.max(0, specSize - padding); @@ -19303,7 +19638,7 @@ var android; const children = this.mChildren; for (let i = 0; i < count; i++) { const child = children[i]; - child.dispatchAttachedToWindow(info, visibility | (child.mViewFlags & view_5.View.VISIBILITY_MASK)); + child.dispatchAttachedToWindow(info, visibility | (child.mViewFlags & view_4.View.VISIBILITY_MASK)); } } onAttachedToWindow() { @@ -19382,7 +19717,7 @@ var android; } let theParent = descendant.mParent; while ((theParent != null) - && (theParent instanceof view_5.View) + && (theParent instanceof view_4.View) && (theParent != this)) { if (offsetFromChildToParent) { rect.offset(descendant.mLeft - descendant.mScrollX, descendant.mTop - descendant.mScrollY); @@ -19535,7 +19870,7 @@ var android; const count = this.mChildrenCount; for (let i = 0; i < count; i++) { const child = children[i]; - if ((child.mViewFlags & view_5.View.DUPLICATE_PARENT_STATE) != 0) { + if ((child.mViewFlags & view_4.View.DUPLICATE_PARENT_STATE) != 0) { child.refreshDrawableState(); } } @@ -19565,7 +19900,7 @@ var android; for (let i = 0; i < n; i++) { let childState = this.getChildAt(i).getDrawableState(); if (childState != null) { - state = view_5.View.mergeDrawableStates(state, childState); + state = view_4.View.mergeDrawableStates(state, childState); } } return state; @@ -19606,14 +19941,14 @@ var android; let parent = this; const attachInfo = this.mAttachInfo; if (attachInfo != null) { - const drawAnimation = (child.mPrivateFlags & view_5.View.PFLAG_DRAW_ANIMATION) - == view_5.View.PFLAG_DRAW_ANIMATION; + const drawAnimation = (child.mPrivateFlags & view_4.View.PFLAG_DRAW_ANIMATION) + == view_4.View.PFLAG_DRAW_ANIMATION; let childMatrix = child.getMatrix(); const isOpaque = child.isOpaque() && !drawAnimation && child.getAnimation() == null && childMatrix.isIdentity(); - let opaqueFlag = isOpaque ? view_5.View.PFLAG_DIRTY_OPAQUE : view_5.View.PFLAG_DIRTY; - if (child.mLayerType != view_5.View.LAYER_TYPE_NONE) { - this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED; - this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWING_CACHE_VALID; + let opaqueFlag = isOpaque ? view_4.View.PFLAG_DIRTY_OPAQUE : view_4.View.PFLAG_DIRTY; + if (child.mLayerType != view_4.View.LAYER_TYPE_NONE) { + this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED; + this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWING_CACHE_VALID; child.mLocalDirtyRect.union(dirty); } const location = attachInfo.mInvalidateChildLocation; @@ -19646,21 +19981,21 @@ var android; } do { let view = null; - if (parent instanceof view_5.View) { + if (parent instanceof view_4.View) { view = parent; } if (drawAnimation) { if (view != null) { view.mPrivateFlags |= ViewGroup.PFLAG_DRAW_ANIMATION; } - else if (parent instanceof view_5.ViewRootImpl) { + else if (parent instanceof view_4.ViewRootImpl) { parent.mIsAnimating = true; } } if (view != null) { - opaqueFlag = view_5.View.PFLAG_DIRTY; - if ((view.mPrivateFlags & view_5.View.PFLAG_DIRTY_MASK) != view_5.View.PFLAG_DIRTY) { - view.mPrivateFlags = (view.mPrivateFlags & ~view_5.View.PFLAG_DIRTY_MASK) | opaqueFlag; + opaqueFlag = view_4.View.PFLAG_DIRTY; + if ((view.mPrivateFlags & view_4.View.PFLAG_DIRTY_MASK) != view_4.View.PFLAG_DIRTY) { + view.mPrivateFlags = (view.mPrivateFlags & ~view_4.View.PFLAG_DIRTY_MASK) | opaqueFlag; } } parent = parent.invalidateChildInParent(location, dirty); @@ -19677,8 +20012,8 @@ var android; } } invalidateChildInParent(location, dirty) { - if ((this.mPrivateFlags & view_5.View.PFLAG_DRAWN) == view_5.View.PFLAG_DRAWN || - (this.mPrivateFlags & view_5.View.PFLAG_DRAWING_CACHE_VALID) == view_5.View.PFLAG_DRAWING_CACHE_VALID) { + if ((this.mPrivateFlags & view_4.View.PFLAG_DRAWN) == view_4.View.PFLAG_DRAWN || + (this.mPrivateFlags & view_4.View.PFLAG_DRAWING_CACHE_VALID) == view_4.View.PFLAG_DRAWING_CACHE_VALID) { if ((this.mGroupFlags & (ViewGroup.FLAG_OPTIMIZE_INVALIDATE | ViewGroup.FLAG_ANIMATION_DONE)) != ViewGroup.FLAG_OPTIMIZE_INVALIDATE) { dirty.offset(location[0] - this.mScrollX, location[1] - this.mScrollY); @@ -19692,17 +20027,17 @@ var android; dirty.setEmpty(); } } - this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWING_CACHE_VALID; + this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWING_CACHE_VALID; location[0] = left; location[1] = top; - if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) { - this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED; + if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) { + this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED; this.mLocalDirtyRect.union(dirty); } return this.mParent; } else { - this.mPrivateFlags &= ~view_5.View.PFLAG_DRAWN & ~view_5.View.PFLAG_DRAWING_CACHE_VALID; + this.mPrivateFlags &= ~view_4.View.PFLAG_DRAWN & ~view_4.View.PFLAG_DRAWING_CACHE_VALID; location[0] = this.mLeft; location[1] = this.mTop; if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == ViewGroup.FLAG_CLIP_CHILDREN) { @@ -19711,8 +20046,8 @@ var android; else { dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop); } - if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) { - this.mPrivateFlags |= view_5.View.PFLAG_INVALIDATED; + if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) { + this.mPrivateFlags |= view_4.View.PFLAG_INVALIDATED; this.mLocalDirtyRect.union(dirty); } return this.mParent; @@ -19724,7 +20059,7 @@ var android; let parent = this; const attachInfo = this.mAttachInfo; if (attachInfo != null) { - if (child.mLayerType != view_5.View.LAYER_TYPE_NONE) { + if (child.mLayerType != view_4.View.LAYER_TYPE_NONE) { child.mLocalDirtyRect.union(dirty); } let left = child.mLeft; @@ -19735,7 +20070,7 @@ var android; do { if (parent instanceof ViewGroup) { let parentVG = parent; - if (parentVG.mLayerType != view_5.View.LAYER_TYPE_NONE) { + if (parentVG.mLayerType != view_4.View.LAYER_TYPE_NONE) { parentVG.invalidate(); parent = null; } @@ -19755,15 +20090,15 @@ var android; } } invalidateChildInParentFast(left, top, dirty) { - if ((this.mPrivateFlags & view_5.View.PFLAG_DRAWN) == view_5.View.PFLAG_DRAWN || - (this.mPrivateFlags & view_5.View.PFLAG_DRAWING_CACHE_VALID) == view_5.View.PFLAG_DRAWING_CACHE_VALID) { + if ((this.mPrivateFlags & view_4.View.PFLAG_DRAWN) == view_4.View.PFLAG_DRAWN || + (this.mPrivateFlags & view_4.View.PFLAG_DRAWING_CACHE_VALID) == view_4.View.PFLAG_DRAWING_CACHE_VALID) { dirty.offset(left - this.mScrollX, top - this.mScrollY); if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0) { dirty.union(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop); } if ((this.mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) == 0 || dirty.intersect(0, 0, this.mRight - this.mLeft, this.mBottom - this.mTop)) { - if (this.mLayerType != view_5.View.LAYER_TYPE_NONE) { + if (this.mLayerType != view_4.View.LAYER_TYPE_NONE) { this.mLocalDirtyRect.union(dirty); } if (!this.getMatrix().isIdentity()) { @@ -19791,7 +20126,7 @@ var android; const len = this.mChildrenCount; for (let i = 0; i < len; i++) { let v = where[i]; - if ((v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { + if ((v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { v = v.findViewById(id); if (v != null) { return v; @@ -19808,7 +20143,7 @@ var android; const len = this.mChildrenCount; for (let i = 0; i < len; i++) { let v = where[i]; - if ((v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { + if ((v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { v = v.findViewWithTag(tag); if (v != null) { return v; @@ -19825,7 +20160,7 @@ var android; const len = this.mChildrenCount; for (let i = 0; i < len; i++) { let v = where[i]; - if (v != childToSkip && (v.mPrivateFlags & view_5.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { + if (v != childToSkip && (v.mPrivateFlags & view_4.View.PFLAG_IS_ROOT_NAMESPACE) == 0) { v = v.findViewByPredicate(predicate); if (v != null) { return v; @@ -19887,288 +20222,183 @@ var android; ViewGroup.LAYOUT_MODE_CLIP_BOUNDS = 0; ViewGroup.LAYOUT_MODE_DEFAULT = ViewGroup.LAYOUT_MODE_CLIP_BOUNDS; ViewGroup.CLIP_TO_PADDING_MASK = ViewGroup.FLAG_CLIP_TO_PADDING | ViewGroup.FLAG_PADDING_NOT_NULL; - view_5.ViewGroup = ViewGroup; + view_4.ViewGroup = ViewGroup; (function (ViewGroup) { - var AttrBinder = androidui.attr.AttrBinder; - class LayoutParams { + class LayoutParams extends java.lang.JavaObject { constructor(...args) { - this._width = 0; - this._height = 0; - this._measuringParentWidthMeasureSpec = 0; - this._measuringParentHeightMeasureSpec = 0; - if (args.length === 1) { - let src = args[0]; - this.width = src._width; - this.height = src._height; - } - else if (args.length === 2) { - let [width = 0, height = 0] = args; - this.width = width; - this.height = height; + super(); + this.width = 0; + this.height = 0; + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const a = args[0].obtainStyledAttributes(args[1]); + this.setBaseAttributes(a, 'layout_width', 'layout_height'); + a.recycle(); } - if (!this._attrBinder) { - this._attrBinder = new androidui.attr.AttrBinder(this); - if (!LayoutParams.ViewGroupParamClassAttrBind) { - LayoutParams.ViewGroupParamClassAttrBind = new AttrBinder.ClassBinderMap(); - LayoutParams.ViewGroupParamClassAttrBind.set('width', { - setter(host, value) { - if (value == null) - value = -2; - host.width = value; - }, - getter(host) { - return host._widthOrig; - } - }).set('height', { - setter(host, value) { - if (value == null) - value = -2; - host.height = value; - }, - getter(host) { - return host._heightOrig; - } - }); - } - this._attrBinder.addClassAttrBind(LayoutParams.ViewGroupParamClassAttrBind); + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + this.width = args[0]; + this.height = args[1]; } - } - get width() { - if (typeof this._width === 'number') - return this._width; - let up = (this._width + "").toUpperCase(); - if (up === 'FILL_PARENT' || up === 'MATCH_PARENT') - this._width = -1; - else if (up === 'WRAP_CONTENT') - this._width = -2; - else { - let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._width, 0, parentWidth); - if (android.util.TypedValue.isDynamicUnitValue(this._width)) { - return parsedValue; - } - this._width = parsedValue; - } - catch (e) { - console.error(e); - return -2; - } + else if (args[0] instanceof LayoutParams) { + this.width = args[0].width; + this.height = args[0].height; } - return this._width; - } - set width(value) { - this._width = this._widthOrig = value; - } - get height() { - if (typeof this._height === 'number') - return this._height; - let up = (this._height + "").toUpperCase(); - if (up === 'FILL_PARENT' || up === 'MATCH_PARENT') - this._height = -1; - else if (up === 'WRAP_CONTENT') - this._height = -2; - else { - let parentHeight = view_5.View.MeasureSpec.getSize(this._measuringParentHeightMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._height, 0, parentHeight); - if (android.util.TypedValue.isDynamicUnitValue(this._height)) { - return parsedValue; - } - this._height = parsedValue; - } - catch (e) { - console.error(e); - return -2; - } + else if (args.length === 0) { } - return this._height; } - set height(value) { - this._height = this._heightOrig = value; + setBaseAttributes(a, widthAttr, heightAttr) { + this.width = a.getLayoutDimension(widthAttr, LayoutParams.WRAP_CONTENT); + this.height = a.getLayoutDimension(heightAttr, LayoutParams.WRAP_CONTENT); } - parseAttributeFrom(node, context) { - Array.from(node.attributes).forEach((attr) => { - let layoutParamFiled = attr.name.startsWith('layout_') && attr.name.substring('layout_'.length); - if (layoutParamFiled) { - this._attrBinder.onAttrChange(layoutParamFiled, attr.value, context); + getAttrBinder() { + if (!this._attrBinder) { + this._attrBinder = this.initBindAttr(); + } + return this._attrBinder; + } + initBindAttr() { + let classAttrBinder = LayoutParams.ClassAttrBinderClazzMap.get(this.getClass()); + if (!classAttrBinder) { + classAttrBinder = this.createClassAttrBinder(); + LayoutParams.ClassAttrBinderClazzMap.set(this.getClass(), classAttrBinder); + } + const attrBinder = new AttrBinder(this); + attrBinder.setClassAttrBind(classAttrBinder); + return attrBinder; + } + createClassAttrBinder() { + return new androidui.attr.AttrBinder.ClassBinderMap() + .set('layout_width', { + setter(host, value, attrBinder) { + host.width = attrBinder.parseDimension(value, host.width); + }, getter(host) { + return host.width; + } + }).set('layout_height', { + setter(host, value, attrBinder) { + host.height = attrBinder.parseDimension(value, host.height); + }, getter(host) { + return host.height; } }); } } + LayoutParams.ClassAttrBinderClazzMap = new Map(); LayoutParams.FILL_PARENT = -1; LayoutParams.MATCH_PARENT = -1; LayoutParams.WRAP_CONTENT = -2; ViewGroup.LayoutParams = LayoutParams; class MarginLayoutParams extends LayoutParams { constructor(...args) { - super(...args); - this._leftMargin = 0; - this._topMargin = 0; - this._rightMargin = 0; - this._bottomMargin = 0; - this._leftMarginOrig = 0; - this._topMarginOrig = 0; - this._rightMarginOrig = 0; - this._bottomMarginOrig = 0; - if (args.length === 1) { - let src = args[0]; - if (src instanceof MarginLayoutParams) { - this.leftMargin = src._leftMargin; - this.topMargin = src._topMargin; - this.rightMargin = src._rightMargin; - this.bottomMargin = src._bottomMargin; - } - } - if (!MarginLayoutParams.MarginLayoutParamsClassAttrBind) { - MarginLayoutParams.MarginLayoutParamsClassAttrBind = new AttrBinder.ClassBinderMap(); - MarginLayoutParams.MarginLayoutParamsClassAttrBind.set('marginLeft', { - setter(host, value) { - if (value == null) - value = 0; - host.leftMargin = value; - }, - getter(host) { - return host._leftMarginOrig; - } - }).set('marginStart', { - setter(host, value) { - if (value == null) - value = 0; - host.leftMargin = value; - }, - getter(host) { - return host._leftMarginOrig; - } - }).set('marginTop', { - setter(host, value) { - if (value == null) - value = 0; - host.topMargin = value; - }, - getter(host) { - return host._topMarginOrig; - } - }).set('marginRight', { - setter(host, value) { - if (value == null) - value = 0; - host.rightMargin = value; - }, - getter(host) { - return host._rightMarginOrig; - } - }).set('marginEnd', { - setter(host, value) { - if (value == null) - value = 0; - host.rightMargin = value; - }, - getter(host) { - return host._rightMarginOrig; - } - }).set('marginBottom', { - setter(host, value) { - if (value == null) - value = 0; - host.bottomMargin = value; - }, - getter(host) { - return host._bottomMargin; - } - }).set('margin', { - setter(host, value) { - if (value == null) - value = 0; - let [left, top, right, bottom] = host._attrBinder.parsePaddingMarginLTRB(value); - host.leftMargin = left; - host.topMargin = top; - host.rightMargin = right; - host.bottomMargin = bottom; - } - }); - } - this._attrBinder.addClassAttrBind(MarginLayoutParams.MarginLayoutParamsClassAttrBind); - } - get leftMargin() { - if (typeof this._leftMargin === 'number') - return this._leftMargin; - let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._leftMargin, 0, parentWidth); - if (android.util.TypedValue.isDynamicUnitValue(this._leftMargin)) { - return parsedValue; + super(...(() => { + if (args[0] instanceof Context && args[1] instanceof HTMLElement) + return [0, 0]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof MarginLayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); + this.leftMargin = 0; + this.topMargin = 0; + this.rightMargin = 0; + this.bottomMargin = 0; + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const a = args[0].obtainStyledAttributes(args[1]); + this.setBaseAttributes(a, 'layout_width', 'layout_height'); + let margin = a.getDimensionPixelSize('layout_margin', -1); + if (margin >= 0) { + this.leftMargin = margin; + this.topMargin = margin; + this.rightMargin = margin; + this.bottomMargin = margin; } - this._leftMargin = parsedValue; - } - catch (e) { - console.warn(e); - return 0; - } - return this._leftMargin; - } - get topMargin() { - if (typeof this._topMargin === 'number') - return this._topMargin; - let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._topMargin, 0, parentWidth); - if (android.util.TypedValue.isDynamicUnitValue(this._topMargin)) { - return parsedValue; + else { + this.leftMargin = a.getDimensionPixelSize('layout_marginLeft', 0); + this.rightMargin = a.getDimensionPixelSize('layout_marginRight', 0); + this.topMargin = a.getDimensionPixelSize('layout_marginTop', 0); + this.bottomMargin = a.getDimensionPixelSize('layout_marginBottom', 0); + this.leftMargin = a.getDimensionPixelSize('layout_marginStart', this.leftMargin); + this.rightMargin = a.getDimensionPixelSize('layout_marginEnd', this.rightMargin); } - this._topMargin = parsedValue; + a.recycle(); } - catch (e) { - console.warn(e); - return 0; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { } - return this._topMargin; - } - get rightMargin() { - if (typeof this._rightMargin === 'number') - return this._rightMargin; - let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._rightMargin, 0, parentWidth); - if (android.util.TypedValue.isDynamicUnitValue(this._rightMargin)) { - return parsedValue; - } - this._rightMargin = parsedValue; + else if (args[0] instanceof MarginLayoutParams) { + const source = args[0]; + this.width = source.width; + this.height = source.height; + this.leftMargin = source.leftMargin; + this.topMargin = source.topMargin; + this.rightMargin = source.rightMargin; + this.bottomMargin = source.bottomMargin; } - catch (e) { - console.warn(e); - return 0; + else if (args[0] instanceof ViewGroup.LayoutParams) { } - return this._rightMargin; } - get bottomMargin() { - if (typeof this._bottomMargin === 'number') - return this._bottomMargin; - let parentWidth = view_5.View.MeasureSpec.getSize(this._measuringParentWidthMeasureSpec); - try { - let parsedValue = this._attrBinder.parseNumberPixelSize(this._bottomMargin, 0, parentWidth); - if (android.util.TypedValue.isDynamicUnitValue(this._bottomMargin)) { - return parsedValue; + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_marginLeft', { + setter(host, value) { + if (value == null) + value = 0; + host.leftMargin = value; + }, getter(host) { + return host.leftMargin; } - this._bottomMargin = parsedValue; - } - catch (e) { - console.warn(e); - return 0; - } - return this._bottomMargin; - } - set leftMargin(value) { - this._leftMargin = this._leftMarginOrig = value; - } - set topMargin(value) { - this._topMargin = this._topMarginOrig = value; - } - set rightMargin(value) { - this._rightMargin = this._rightMarginOrig = value; - } - set bottomMargin(value) { - this._bottomMargin = this._bottomMarginOrig = value; + }).set('layout_marginStart', { + setter(host, value) { + if (value == null) + value = 0; + host.leftMargin = value; + }, getter(host) { + return host.leftMargin; + } + }).set('layout_marginTop', { + setter(host, value) { + if (value == null) + value = 0; + host.topMargin = value; + }, getter(host) { + return host.topMargin; + } + }).set('layout_marginRight', { + setter(host, value) { + if (value == null) + value = 0; + host.rightMargin = value; + }, getter(host) { + return host.rightMargin; + } + }).set('layout_marginEnd', { + setter(host, value) { + if (value == null) + value = 0; + host.rightMargin = value; + }, getter(host) { + return host.rightMargin; + } + }).set('layout_marginBottom', { + setter(host, value) { + if (value == null) + value = 0; + host.bottomMargin = value; + }, getter(host) { + return host.bottomMargin; + } + }).set('layout_margin', { + setter(host, value, attrBinder) { + if (value == null) + value = 0; + let [top, right, bottom, left] = attrBinder.parsePaddingMarginTRBL(value); + host.topMargin = top; + host.rightMargin = right; + host.bottomMargin = bottom; + host.leftMargin = left; + }, getter(host) { + return host.topMargin + ' ' + host.rightMargin + ' ' + host.bottomMargin + ' ' + host.leftMargin; + } + }); } setMargins(left, top, right, bottom) { this.leftMargin = left; @@ -20179,17 +20409,19 @@ var android; setLayoutDirection(layoutDirection) { } getLayoutDirection() { - return view_5.View.LAYOUT_DIRECTION_LTR; + return view_4.View.LAYOUT_DIRECTION_LTR; } isLayoutRtl() { - return this.getLayoutDirection() == view_5.View.LAYOUT_DIRECTION_RTL; + return this.getLayoutDirection() == view_4.View.LAYOUT_DIRECTION_RTL; } resolveLayoutDirection(layoutDirection) { } } MarginLayoutParams.DEFAULT_MARGIN_RELATIVE = Integer.MIN_VALUE; + MarginLayoutParams.DEFAULT_MARGIN_RESOLVED = 0; + MarginLayoutParams.UNDEFINED_MARGIN = MarginLayoutParams.DEFAULT_MARGIN_RELATIVE; ViewGroup.MarginLayoutParams = MarginLayoutParams; - })(ViewGroup = view_5.ViewGroup || (view_5.ViewGroup = {})); + })(ViewGroup = view_4.ViewGroup || (view_4.ViewGroup = {})); class TouchTarget { static obtain(child, pointerIdBits) { let target; @@ -20251,7 +20483,7 @@ var android; (function (ViewOverlay) { class OverlayViewGroup extends view.ViewGroup { constructor(hostView) { - super(); + super(hostView.getContext()); this.mHostView = hostView; this.mAttachInfo = hostView.mAttachInfo; this.mRight = hostView.getWidth(); @@ -20287,6 +20519,7 @@ var android; var View = android.view.View; var ViewGroup = android.view.ViewGroup; var Rect = android.graphics.Rect; + var Context = android.content.Context; class FrameLayout extends ViewGroup { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); @@ -20301,10 +20534,39 @@ var android; this.mForegroundInPadding = true; this.mForegroundBoundsChanged = false; this.mMatchParentChildren = new Array(1); - this._attrBinder.addAttr('foregroundGravity', (value) => { - this.mForegroundGravity = this._attrBinder.parseGravity(value, this.mForegroundGravity); - }, () => { - return this.mForegroundGravity; + const a = context.obtainStyledAttributes(bindElement, defStyle); + this.mForegroundGravity = Gravity.parseGravity(a.getAttrValue('foregroundGravity'), this.mForegroundGravity); + const d = a.getDrawable('foreground'); + if (d != null) { + this.setForeground(d); + } + if (a.getBoolean('measureAllChildren', false)) { + this.setMeasureAllChildren(true); + } + this.mForegroundInPadding = a.getBoolean('foregroundInsidePadding', true); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('foregroundGravity', { + setter(v, value, attrBinder) { + v.mForegroundGravity = attrBinder.parseGravity(value, v.mForegroundGravity); + }, getter(v) { + return v.mForegroundGravity; + } + }).set('foreground', { + setter(v, value, attrBinder) { + v.setForeground(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.getForeground(); + } + }).set('measureAllChildren', { + setter(v, value, attrBinder) { + if (attrBinder.parseBoolean(value)) { + v.setMeasureAllChildren(true); + } + }, getter(v) { + return v.mMeasureAllChildren; + } }); } getForegroundGravity() { @@ -20558,6 +20820,9 @@ var android; getMeasureAllChildren() { return this.mMeasureAllChildren; } + generateLayoutParamsFromAttr(attrs) { + return new FrameLayout.LayoutParams(this.getContext(), attrs); + } shouldDelayChildPressedState() { return false; } @@ -20573,18 +20838,45 @@ var android; (function (FrameLayout) { class LayoutParams extends ViewGroup.MarginLayoutParams { constructor(...args) { - super(...(args.length == 3 ? [args[0], args[1]] : args)); + super(...(() => { + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); this.gravity = -1; - if (args.length === 1 && args[0] instanceof LayoutParams) { - this.gravity = args[0].gravity; + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const c = args[0]; + const attrs = args[1]; + const a = c.obtainStyledAttributes(attrs); + this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), -1); + a.recycle(); + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') { + this.gravity = args[2]; + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + } + else if (args[0] instanceof FrameLayout.LayoutParams) { + const source = args[0]; + this.gravity = source.gravity; } - else if (args.length === 3) { - this.gravity = args[2] || -1; + else if (args[0] instanceof ViewGroup.MarginLayoutParams) { } - this._attrBinder.addAttr('gravity', (value) => { - this.gravity = this._attrBinder.parseGravity(value, this.gravity); - }, () => { - return this.gravity; + else if (args[0] instanceof ViewGroup.LayoutParams) { + } + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_gravity', { + setter(param, value, attrBinder) { + param.gravity = attrBinder.parseGravity(value, param.gravity); + }, getter(param) { + return param.gravity; + } }); } } @@ -20627,8 +20919,8 @@ var android; var text; (function (text) { class TextPaint extends android.graphics.Paint { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.baselineShift = 0; this.bgColor = 0; this.linkColor = 0; @@ -20702,8 +20994,8 @@ var android; (function (style) { var CharacterStyle = android.text.style.CharacterStyle; class MetricAffectingSpan extends CharacterStyle { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mType = MetricAffectingSpan.type; } getUnderlying() { @@ -20741,8 +21033,8 @@ var android; (function (style) { var MetricAffectingSpan = android.text.style.MetricAffectingSpan; class ReplacementSpan extends MetricAffectingSpan { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mType = ReplacementSpan.type; } updateMeasureState(p) { @@ -21117,7 +21409,7 @@ var android; if (this.mCharsValid) { this.mChars = text; if (hasReplacement) { - let chars = this.mChars; + let chars = this.mChars.split(''); for (let i = start, inext; i < limit; i = inext) { inext = this.mReplacementSpanSpanSet.getNextTransition(i, limit); if (this.mReplacementSpanSpanSet.hasSpansIntersecting(i, inext)) { @@ -21127,6 +21419,7 @@ var android; } } } + this.mChars = chars.join(''); } } this.mTabs = tabStops; @@ -22631,14 +22924,14 @@ var android; } } Layout.SpannedEllipsizer = SpannedEllipsizer; + var Alignment; (function (Alignment) { Alignment[Alignment["ALIGN_NORMAL"] = 0] = "ALIGN_NORMAL"; Alignment[Alignment["ALIGN_OPPOSITE"] = 1] = "ALIGN_OPPOSITE"; Alignment[Alignment["ALIGN_CENTER"] = 2] = "ALIGN_CENTER"; Alignment[Alignment["ALIGN_LEFT"] = 3] = "ALIGN_LEFT"; Alignment[Alignment["ALIGN_RIGHT"] = 4] = "ALIGN_RIGHT"; - })(Layout.Alignment || (Layout.Alignment = {})); - var Alignment = Layout.Alignment; + })(Alignment = Layout.Alignment || (Layout.Alignment = {})); })(Layout = text_5.Layout || (text_5.Layout = {})); Layout.DIRS_ALL_LEFT_TO_RIGHT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK]); Layout.DIRS_ALL_RIGHT_TO_LEFT = new Layout.Directions([0, Layout.RUN_LENGTH_MASK | Layout.RUN_RTL_FLAG]); @@ -22717,7 +23010,7 @@ var android; if (endInPara > len) endInPara = len; for (let j = startInPara; j < endInPara; j++) { - this.mChars[j] = ''; + this.mChars = this.mChars.substring(0, j) + ' ' + this.mChars.substring(j + 1); } } } @@ -23055,14 +23348,14 @@ var android; TextUtils.HEBR_SCRIPT_SUBTAG = "Hebr"; text_7.TextUtils = TextUtils; (function (TextUtils) { + var TruncateAt; (function (TruncateAt) { TruncateAt[TruncateAt["START"] = 0] = "START"; TruncateAt[TruncateAt["MIDDLE"] = 1] = "MIDDLE"; TruncateAt[TruncateAt["END"] = 2] = "END"; TruncateAt[TruncateAt["MARQUEE"] = 3] = "MARQUEE"; TruncateAt[TruncateAt["END_SMALL"] = 4] = "END_SMALL"; - })(TextUtils.TruncateAt || (TextUtils.TruncateAt = {})); - var TruncateAt = TextUtils.TruncateAt; + })(TruncateAt = TextUtils.TruncateAt || (TextUtils.TruncateAt = {})); })(TextUtils = text_7.TextUtils || (text_7.TextUtils = {})); })(text = android.text || (android.text = {})); })(android || (android = {})); @@ -23127,6 +23420,16 @@ var android; if (enterAnimation === undefined) enterAnimation = wparams.enterAnimation; if (enterAnimation) { + decorView.bindElement.style.visibility = 'hidden'; + enterAnimation.setAnimationListener({ + onAnimationStart(animation) { + }, + onAnimationEnd(animation) { + decorView.bindElement.style.visibility = ''; + }, + onAnimationRepeat(animation) { + } + }); decorView.startAnimation(enterAnimation); } } @@ -23231,6 +23534,60 @@ var android; } } } + onLayout(changed, left, top, right, bottom) { + this.layoutChildren(left, top, right, bottom, false); + } + layoutChildren(left, top, right, bottom, forceLeftGravity) { + const count = this.getChildCount(); + const parentLeft = this.getPaddingLeftWithForeground(); + const parentRight = right - left - this.getPaddingRightWithForeground(); + const parentTop = this.getPaddingTopWithForeground(); + const parentBottom = bottom - top - this.getPaddingBottomWithForeground(); + this.mForegroundBoundsChanged = true; + for (let i = 0; i < count; i++) { + let child = this.getChildAt(i); + if (child.getVisibility() != View.GONE) { + const lp = child.getLayoutParams(); + const width = child.getMeasuredWidth(); + const height = child.getMeasuredHeight(); + let childLeft; + let childTop; + let gravity = lp.gravity; + if (gravity == -1) { + gravity = Layout.DEFAULT_CHILD_GRAVITY; + } + const absoluteGravity = gravity; + const verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK; + switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.CENTER_HORIZONTAL: + childLeft = parentLeft + (parentRight - parentLeft - width) / 2 + lp.leftMargin - lp.rightMargin; + break; + case Gravity.RIGHT: + if (!forceLeftGravity) { + childLeft = parentRight - width - lp.rightMargin - lp.x; + break; + } + case Gravity.LEFT: + default: + childLeft = parentLeft + lp.leftMargin + lp.x; + } + switch (verticalGravity) { + case Gravity.TOP: + childTop = parentTop + lp.topMargin + lp.y; + break; + case Gravity.CENTER_VERTICAL: + childTop = parentTop + (parentBottom - parentTop - height) / 2 + lp.topMargin - lp.bottomMargin; + break; + case Gravity.BOTTOM: + childTop = parentBottom - height - lp.bottomMargin - lp.y; + break; + default: + childTop = parentTop + lp.topMargin; + } + child.layout(childLeft, childTop, childLeft + width, childTop + height); + } + } + } tagName() { return 'windowsGroup'; } @@ -23300,38 +23657,6 @@ var android; } return changes; } - get leftMargin() { - if ((this.gravity & Gravity.LEFT) != 0) - return super.leftMargin + this.x; - return super.leftMargin; - } - get topMargin() { - if ((this.gravity & Gravity.TOP) != 0) - return super.topMargin + this.y; - return super.topMargin; - } - get rightMargin() { - if ((this.gravity & Gravity.RIGHT) != 0) - return super.rightMargin + this.x; - return super.rightMargin; - } - get bottomMargin() { - if ((this.gravity & Gravity.BOTTOM) != 0) - return super.bottomMargin + this.y; - return super.bottomMargin; - } - set leftMargin(value) { - super.leftMargin = value; - } - set topMargin(value) { - super.topMargin = value; - } - set rightMargin(value) { - super.rightMargin = value; - } - set bottomMargin(value) { - super.bottomMargin = value; - } isFocusable() { return (this.flags & LayoutParams.FLAG_NOT_FOCUSABLE) == 0; } @@ -24224,7 +24549,7 @@ var android; var android; (function (android) { var view; - (function (view_6) { + (function (view_5) { var MotionEvent = android.view.MotionEvent; var View = android.view.View; var ViewConfiguration = android.view.ViewConfiguration; @@ -24462,7 +24787,7 @@ var android; onActive() { } } - view_6.Window = Window; + view_5.Window = Window; class DecorView extends FrameLayout { constructor(window) { super(window.mContext); @@ -25477,7 +25802,7 @@ var android; var androidui; (function (androidui) { if (typeof HTMLDivElement !== 'function') { - var _HTMLDivElement = function () { }; + const _HTMLDivElement = function () { }; _HTMLDivElement.prototype = HTMLDivElement.prototype; HTMLDivElement = _HTMLDivElement; } @@ -25833,21 +26158,21 @@ var androidui; initGenericEvent() { } initRootSizeChange() { - const _this = this; + const inner_this = this; window.addEventListener('resize', () => { - _this.notifyRootSizeChange(); + inner_this.notifyRootSizeChange(); }); let lastWidth = this.androidUIElement.offsetWidth; let lastHeight = this.androidUIElement.offsetHeight; if (lastWidth > 0 && lastHeight > 0) this.notifyRootSizeChange(); setInterval(() => { - let width = _this.androidUIElement.offsetWidth; - let height = _this.androidUIElement.offsetHeight; + let width = inner_this.androidUIElement.offsetWidth; + let height = inner_this.androidUIElement.offsetHeight; if (lastHeight !== height || lastWidth !== width) { lastWidth = width; lastHeight = height; - _this.notifyRootSizeChange(); + inner_this.notifyRootSizeChange(); } }, 500); } @@ -26349,8 +26674,6 @@ var android; return this.mResumed; } dispatchActivityResult(who, requestCode, resultCode, data) { - if (false) - Log.v(Activity.TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode + ", resCode=" + resultCode + ", data=" + data); this.onActivityResult(requestCode, resultCode, data); } } @@ -26369,8 +26692,8 @@ var android; var ArrayList = java.util.ArrayList; var Context = android.content.Context; class Application extends Context { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mActivityLifecycleCallbacks = new ArrayList(); } onCreate() { @@ -26921,11 +27244,11 @@ var android; this.mQuickScaleEnabled = scales; if (this.mQuickScaleEnabled && this.mGestureDetector == null) { let gestureListener = (() => { - const _this = this; + const inner_this = this; class _Inner extends view.GestureDetector.SimpleOnGestureListener { onDoubleTap(e) { - _this.mDoubleTapEvent = e; - _this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS; + inner_this.mDoubleTapEvent = e; + inner_this.mDoubleTapMode = ScaleGestureDetector.DOUBLE_TAP_MODE_IN_PROGRESS; return true; } } @@ -27322,6283 +27645,6447 @@ var android; })(GestureDetector = view.GestureDetector || (view.GestureDetector = {})); })(view = android.view || (android.view = {})); })(android || (android = {})); -var androidui; -(function (androidui) { - var util; - (function (util) { - class NumberChecker { - static warnNotNumber(...n) { - try { - this.assetNotNumber(...n); - } - catch (e) { - console.error(e); - return true; - } - return false; - } - static assetNotNumber(...ns) { - if (!this.checkIsNumber()) { - throw Error('assetNotNumber : ' + ns); - } - } - static checkIsNumber(...ns) { - if (ns == null) - return false; - for (let n of ns) { - if (n == null || Number.isNaN(n)) - return false; - } - return true; - } - } - util.NumberChecker = NumberChecker; - })(util = androidui.util || (androidui.util = {})); -})(androidui || (androidui = {})); var android; (function (android) { var widget; (function (widget) { - var ViewConfiguration = android.view.ViewConfiguration; - var Resources = android.content.res.Resources; - var SystemClock = android.os.SystemClock; - var Log = android.util.Log; - var NumberChecker = androidui.util.NumberChecker; - class OverScroller { - constructor(interpolator, flywheel = true) { - this.mMode = 0; - this.mFlywheel = true; - this.mInterpolator = interpolator; - this.mFlywheel = flywheel; - this.mScrollerX = new SplineOverScroller(); - this.mScrollerY = new SplineOverScroller(); - } - setInterpolator(interpolator) { - this.mInterpolator = interpolator; - } - setFriction(friction) { - NumberChecker.warnNotNumber(friction); - this.mScrollerX.setFriction(friction); - this.mScrollerY.setFriction(friction); - } - isFinished() { - return this.mScrollerX.mFinished && this.mScrollerY.mFinished; + var Gravity = android.view.Gravity; + var View = android.view.View; + var MeasureSpec = View.MeasureSpec; + var ViewGroup = android.view.ViewGroup; + var Context = android.content.Context; + class LinearLayout extends ViewGroup { + constructor(context, bindElement, defStyle) { + super(context, bindElement, defStyle); + this.mBaselineAligned = true; + this.mBaselineAlignedChildIndex = -1; + this.mBaselineChildTop = 0; + this.mOrientation = 0; + this.mGravity = Gravity.LEFT | Gravity.TOP; + this.mTotalLength = 0; + this.mWeightSum = -1; + this.mUseLargestChild = false; + this.mDividerWidth = 0; + this.mDividerHeight = 0; + this.mShowDividers = LinearLayout.SHOW_DIVIDER_NONE; + this.mDividerPadding = 0; + const a = context.obtainStyledAttributes(bindElement, defStyle); + const orientationS = a.getAttrValue('orientation'); + if (orientationS) { + const orientation = LinearLayout[orientationS.toUpperCase()]; + if (Number.isInteger(orientation)) { + this.setOrientation(orientation); + } + } + const gravityS = a.getAttrValue('gravity'); + if (gravityS) { + this.setGravity(Gravity.parseGravity(gravityS)); + } + let baselineAligned = a.getBoolean('baselineAligned', true); + if (!baselineAligned) { + this.setBaselineAligned(baselineAligned); + } + this.mWeightSum = a.getFloat('weightSum', -1.0); + this.mBaselineAlignedChildIndex = a.getInt('baselineAlignedChildIndex', -1); + this.mUseLargestChild = a.getBoolean('measureWithLargestChild', false); + this.setDividerDrawable(a.getDrawable('divider')); + let fieldName = ('SHOW_DIVIDER_' + a.getAttrValue('showDividers')).toUpperCase(); + if (Number.isInteger(LinearLayout[fieldName])) { + this.mShowDividers = LinearLayout[fieldName]; + } + this.mDividerPadding = a.getDimensionPixelSize('dividerPadding', 0); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('orientation', { + setter(v, value, attrBinder) { + if ((value + "").toUpperCase() === 'VERTICAL' || LinearLayout.VERTICAL == value) { + v.setOrientation(LinearLayout.VERTICAL); + } + else if ((value + "").toUpperCase() === 'HORIZONTAL' || LinearLayout.HORIZONTAL == value) { + v.setOrientation(LinearLayout.HORIZONTAL); + } + }, getter(v) { + return v.mOrientation; + } + }).set('gravity', { + setter(v, value, attrBinder) { + v.setGravity(attrBinder.parseGravity(value, v.mGravity)); + }, getter(v) { + return v.mGravity; + } + }).set('baselineAligned', { + setter(v, value, attrBinder) { + if (!attrBinder.parseBoolean(value)) + v.setBaselineAligned(false); + }, getter(v) { + return v.mBaselineAligned; + } + }).set('weightSum', { + setter(v, value, attrBinder) { + v.setWeightSum(attrBinder.parseFloat(value, v.mWeightSum)); + }, getter(v) { + return v.mWeightSum; + } + }).set('baselineAlignedChildIndex', { + setter(v, value, attrBinder) { + v.setBaselineAlignedChildIndex(attrBinder.parseInt(value, v.mBaselineAlignedChildIndex)); + }, getter(v) { + return v.mBaselineAlignedChildIndex; + } + }).set('measureWithLargestChild', { + setter(v, value, attrBinder) { + v.setMeasureWithLargestChildEnabled(attrBinder.parseBoolean(value, v.mUseLargestChild)); + }, getter(v) { + return v.mUseLargestChild; + } + }).set('divider', { + setter(v, value, attrBinder) { + v.setDividerDrawable(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mDivider; + } + }).set('showDividers', { + setter(v, value, attrBinder) { + if (Number.isInteger(parseInt(value))) { + this.setShowDividers(parseInt(value)); + } + else { + let fieldName = ('SHOW_DIVIDER_' + value).toUpperCase(); + if (Number.isInteger(LinearLayout[fieldName])) { + this.setShowDividers(LinearLayout[fieldName]); + } + } + }, getter(v) { + return v.getShowDividers(); + } + }).set('dividerPadding', { + setter(v, value, attrBinder) { + v.setDividerPadding(attrBinder.parseInt(value, v.mDividerPadding)); + }, getter(v) { + return v.getDividerPadding(); + } + }); } - forceFinished(finished) { - this.mScrollerX.mFinished = this.mScrollerY.mFinished = finished; + setShowDividers(showDividers) { + if (showDividers != this.mShowDividers) { + this.requestLayout(); + } + this.mShowDividers = showDividers; } - getCurrX() { - return this.mScrollerX.mCurrentPosition; + shouldDelayChildPressedState() { + return false; } - getCurrY() { - return this.mScrollerY.mCurrentPosition; + getShowDividers() { + return this.mShowDividers; } - getCurrVelocity() { - let squaredNorm = this.mScrollerX.mCurrVelocity * this.mScrollerX.mCurrVelocity; - squaredNorm += this.mScrollerY.mCurrVelocity * this.mScrollerY.mCurrVelocity; - return Math.sqrt(squaredNorm); + getDividerDrawable() { + return this.mDivider; } - getStartX() { - return this.mScrollerX.mStart; + setDividerDrawable(divider) { + if (divider == this.mDivider) { + return; + } + this.mDivider = divider; + if (divider != null) { + this.mDividerWidth = divider.getIntrinsicWidth(); + this.mDividerHeight = divider.getIntrinsicHeight(); + } + else { + this.mDividerWidth = 0; + this.mDividerHeight = 0; + } + this.setWillNotDraw(divider == null); + this.requestLayout(); } - getStartY() { - return this.mScrollerY.mStart; + setDividerPadding(padding) { + this.mDividerPadding = padding; } - getFinalX() { - return this.mScrollerX.mFinal; + getDividerPadding() { + return this.mDividerPadding; } - getFinalY() { - return this.mScrollerY.mFinal; + getDividerWidth() { + return this.mDividerWidth; } - getDuration() { - return Math.max(this.mScrollerX.mDuration, this.mScrollerY.mDuration); + onDraw(canvas) { + if (this.mDivider == null) { + return; + } + if (this.mOrientation == LinearLayout.VERTICAL) { + this.drawDividersVertical(canvas); + } + else { + this.drawDividersHorizontal(canvas); + } } - computeScrollOffset() { - if (this.isFinished()) { - return false; + drawDividersVertical(canvas) { + const count = this.getVirtualChildCount(); + for (let i = 0; i < count; i++) { + const child = this.getVirtualChildAt(i); + if (child != null && child.getVisibility() != View.GONE) { + if (this.hasDividerBeforeChildAt(i)) { + const lp = child.getLayoutParams(); + const top = child.getTop() - lp.topMargin - this.mDividerHeight; + this.drawHorizontalDivider(canvas, top); + } + } } - switch (this.mMode) { - case OverScroller.SCROLL_MODE: - let time = SystemClock.uptimeMillis(); - const elapsedTime = time - this.mScrollerX.mStartTime; - const duration = this.mScrollerX.mDuration; - if (elapsedTime < duration) { - let q = (elapsedTime) / duration; - if (this.mInterpolator == null) { - q = Scroller_viscousFluid(q); + if (this.hasDividerBeforeChildAt(count)) { + const child = this.getVirtualChildAt(count - 1); + let bottom = 0; + if (child == null) { + bottom = this.getHeight() - this.getPaddingBottom() - this.mDividerHeight; + } + else { + const lp = child.getLayoutParams(); + bottom = child.getBottom() + lp.bottomMargin; + } + this.drawHorizontalDivider(canvas, bottom); + } + } + drawDividersHorizontal(canvas) { + const count = this.getVirtualChildCount(); + const isLayoutRtl = this.isLayoutRtl(); + for (let i = 0; i < count; i++) { + const child = this.getVirtualChildAt(i); + if (child != null && child.getVisibility() != View.GONE) { + if (this.hasDividerBeforeChildAt(i)) { + const lp = child.getLayoutParams(); + let position; + if (isLayoutRtl) { + position = child.getRight() + lp.rightMargin; } else { - q = this.mInterpolator.getInterpolation(q); + position = child.getLeft() - lp.leftMargin - this.mDividerWidth; } - this.mScrollerX.updateScroll(q); - this.mScrollerY.updateScroll(q); + this.drawVerticalDivider(canvas, position); + } + } + } + if (this.hasDividerBeforeChildAt(count)) { + const child = this.getVirtualChildAt(count - 1); + let position; + if (child == null) { + if (isLayoutRtl) { + position = this.getPaddingLeft(); } else { - this.abortAnimation(); + position = this.getWidth() - this.getPaddingRight() - this.mDividerWidth; } - break; - case OverScroller.FLING_MODE: - if (!this.mScrollerX.mFinished) { - if (!this.mScrollerX.update()) { - if (!this.mScrollerX.continueWhenFinished()) { - this.mScrollerX.finish(); - } - } + } + else { + const lp = child.getLayoutParams(); + if (isLayoutRtl) { + position = child.getLeft() - lp.leftMargin - this.mDividerWidth; } - if (!this.mScrollerY.mFinished) { - if (!this.mScrollerY.update()) { - if (!this.mScrollerY.continueWhenFinished()) { - this.mScrollerY.finish(); - } - } + else { + position = child.getRight() + lp.rightMargin; } - break; - } - return true; - } - startScroll(startX, startY, dx, dy, duration = OverScroller.DEFAULT_DURATION) { - NumberChecker.warnNotNumber(startX, startY, dx, dy, duration); - this.mMode = OverScroller.SCROLL_MODE; - this.mScrollerX.startScroll(startX, dx, duration); - this.mScrollerY.startScroll(startY, dy, duration); - } - springBack(startX, startY, minX, maxX, minY, maxY) { - NumberChecker.warnNotNumber(startX, startY, minX, maxX, minY, maxY); - this.mMode = OverScroller.FLING_MODE; - const spingbackX = this.mScrollerX.springback(startX, minX, maxX); - const spingbackY = this.mScrollerY.springback(startY, minY, maxY); - return spingbackX || spingbackY; - } - fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) { - NumberChecker.warnNotNumber(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY); - if (this.mFlywheel && !this.isFinished()) { - let oldVelocityX = this.mScrollerX.mCurrVelocity; - let oldVelocityY = this.mScrollerY.mCurrVelocity; - if (Math_signum(velocityX) == Math_signum(oldVelocityX) && - Math_signum(velocityY) == Math_signum(oldVelocityY)) { - velocityX += oldVelocityX; - velocityY += oldVelocityY; } + this.drawVerticalDivider(canvas, position); } - this.mMode = OverScroller.FLING_MODE; - this.mScrollerX.fling(startX, velocityX, minX, maxX, overX); - this.mScrollerY.fling(startY, velocityY, minY, maxY, overY); } - notifyHorizontalEdgeReached(startX, finalX, overX) { - NumberChecker.warnNotNumber(startX, finalX, overX); - this.mScrollerX.notifyEdgeReached(startX, finalX, overX); - } - notifyVerticalEdgeReached(startY, finalY, overY) { - NumberChecker.warnNotNumber(startY, finalY, overY); - this.mScrollerY.notifyEdgeReached(startY, finalY, overY); - } - isOverScrolled() { - return ((!this.mScrollerX.mFinished && - this.mScrollerX.mState != SplineOverScroller.SPLINE) || - (!this.mScrollerY.mFinished && - this.mScrollerY.mState != SplineOverScroller.SPLINE)); + drawHorizontalDivider(canvas, top) { + this.mDivider.setBounds(this.getPaddingLeft() + this.mDividerPadding, top, this.getWidth() - this.getPaddingRight() - this.mDividerPadding, top + this.mDividerHeight); + this.mDivider.draw(canvas); } - abortAnimation() { - this.mScrollerX.finish(); - this.mScrollerY.finish(); + drawVerticalDivider(canvas, left) { + this.mDivider.setBounds(left, this.getPaddingTop() + this.mDividerPadding, left + this.mDividerWidth, this.getHeight() - this.getPaddingBottom() - this.mDividerPadding); + this.mDivider.draw(canvas); } - timePassed() { - const time = SystemClock.uptimeMillis(); - const startTime = Math.min(this.mScrollerX.mStartTime, this.mScrollerY.mStartTime); - return (time - startTime); + isBaselineAligned() { + return this.mBaselineAligned; } - isScrollingInDirection(xvel, yvel) { - const dx = this.mScrollerX.mFinal - this.mScrollerX.mStart; - const dy = this.mScrollerY.mFinal - this.mScrollerY.mStart; - return !this.isFinished() && Math_signum(xvel) == Math_signum(dx) && - Math_signum(yvel) == Math_signum(dy); + setBaselineAligned(baselineAligned) { + this.mBaselineAligned = baselineAligned; } - } - OverScroller.DEFAULT_DURATION = 250; - OverScroller.SCROLL_MODE = 0; - OverScroller.FLING_MODE = 1; - widget.OverScroller = OverScroller; - class SplineOverScroller { - constructor() { - this.mStart = 0; - this.mCurrentPosition = 0; - this.mFinal = 0; - this.mVelocity = 0; - this._mCurrVelocity = 0; - this.mDeceleration = 0; - this.mStartTime = 0; - this.mDuration = 0; - this.mSplineDuration = 0; - this.mSplineDistance = 0; - this.mFinished = false; - this.mOver = 0; - this.mFlingFriction = ViewConfiguration.getScrollFriction(); - this.mState = SplineOverScroller.SPLINE; - this.mPhysicalCoeff = 0; - this.mFinished = true; - let ppi = Resources.getDisplayMetrics().density * 160; - this.mPhysicalCoeff = 9.80665 - * 39.37 - * ppi - * 0.84; + isMeasureWithLargestChildEnabled() { + return this.mUseLargestChild; } - get mCurrVelocity() { - return this._mCurrVelocity; + setMeasureWithLargestChildEnabled(enabled) { + this.mUseLargestChild = enabled; } - set mCurrVelocity(value) { - if (!NumberChecker.checkIsNumber(value)) { - value = 0; + getBaseline() { + if (this.mBaselineAlignedChildIndex < 0) { + return super.getBaseline(); } - this._mCurrVelocity = value; - } - setFriction(friction) { - this.mFlingFriction = friction; - } - updateScroll(q) { - this.mCurrentPosition = this.mStart + Math.round(q * (this.mFinal - this.mStart)); + if (this.getChildCount() <= this.mBaselineAlignedChildIndex) { + throw new Error("mBaselineAlignedChildIndex of LinearLayout " + + "set to an index that is out of bounds."); + } + const child = this.getChildAt(this.mBaselineAlignedChildIndex); + const childBaseline = child.getBaseline(); + if (childBaseline == -1) { + if (this.mBaselineAlignedChildIndex == 0) { + return -1; + } + throw new Error("mBaselineAlignedChildIndex of LinearLayout " + + "points to a View that doesn't know how to get its baseline."); + } + let childTop = this.mBaselineChildTop; + if (this.mOrientation == LinearLayout.VERTICAL) { + const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + if (majorGravity != Gravity.TOP) { + switch (majorGravity) { + case Gravity.BOTTOM: + childTop = this.mBottom - this.mTop - this.mPaddingBottom - this.mTotalLength; + break; + case Gravity.CENTER_VERTICAL: + childTop += ((this.mBottom - this.mTop - this.mPaddingTop - this.mPaddingBottom) - + this.mTotalLength) / 2; + break; + } + } + } + let lp = child.getLayoutParams(); + return childTop + lp.topMargin + childBaseline; } - static getDeceleration(velocity) { - return velocity > 0 ? -SplineOverScroller.GRAVITY : SplineOverScroller.GRAVITY; + getBaselineAlignedChildIndex() { + return this.mBaselineAlignedChildIndex; } - adjustDuration(start, oldFinal, newFinal) { - let oldDistance = oldFinal - start; - let newDistance = newFinal - start; - let x = Math.abs(newDistance / oldDistance); - let index = Math.floor(SplineOverScroller.NB_SAMPLES * x); - if (index < SplineOverScroller.NB_SAMPLES) { - let x_inf = index / SplineOverScroller.NB_SAMPLES; - let x_sup = (index + 1) / SplineOverScroller.NB_SAMPLES; - let t_inf = SplineOverScroller.SPLINE_TIME[index]; - let t_sup = SplineOverScroller.SPLINE_TIME[index + 1]; - let timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf); - this.mDuration *= timeCoef; + setBaselineAlignedChildIndex(i) { + if ((i < 0) || (i >= this.getChildCount())) { + throw new Error("base aligned child index out " + + "of range (0, " + this.getChildCount() + ")"); } + this.mBaselineAlignedChildIndex = i; } - startScroll(start, distance, duration) { - this.mFinished = false; - this.mStart = start; - this.mFinal = start + distance; - this.mStartTime = SystemClock.uptimeMillis(); - this.mDuration = duration; - this.mDeceleration = 0; - this.mVelocity = 0; + getVirtualChildAt(index) { + return this.getChildAt(index); } - finish() { - this.mCurrentPosition = this.mFinal; - this.mFinished = true; + getVirtualChildCount() { + return this.getChildCount(); } - setFinalPosition(position) { - this.mFinal = position; - this.mFinished = false; + getWeightSum() { + return this.mWeightSum; } - extendDuration(extend) { - let time = SystemClock.uptimeMillis(); - let elapsedTime = (time - this.mStartTime); - this.mDuration = elapsedTime + extend; - this.mFinished = false; + setWeightSum(weightSum) { + this.mWeightSum = Math.max(0, weightSum); } - springback(start, min, max) { - this.mFinished = true; - this.mStart = this.mFinal = start; - this.mVelocity = 0; - this.mStartTime = SystemClock.uptimeMillis(); - this.mDuration = 0; - if (start < min) { - this.startSpringback(start, min, 0); + onMeasure(widthMeasureSpec, heightMeasureSpec) { + if (this.mOrientation == LinearLayout.VERTICAL) { + this.measureVertical(widthMeasureSpec, heightMeasureSpec); } - else if (start > max) { - this.startSpringback(start, max, 0); + else { + this.measureHorizontal(widthMeasureSpec, heightMeasureSpec); } - return !this.mFinished; } - startSpringback(start, end, velocity) { - this.mFinished = false; - this.mState = SplineOverScroller.CUBIC; - this.mStart = start; - this.mFinal = end; - const delta = start - end; - this.mDeceleration = SplineOverScroller.getDeceleration(delta); - this.mVelocity = -delta; - this.mOver = Math.abs(delta); - const density = android.content.res.Resources.getDisplayMetrics().density; - this.mDuration = Math.floor(1000.0 * Math.sqrt(-2.0 * (delta / density) / this.mDeceleration)); - } - fling(start, velocity, min, max, over) { - this.mOver = over; - this.mFinished = false; - this.mCurrVelocity = this.mVelocity = velocity; - this.mDuration = this.mSplineDuration = 0; - this.mStartTime = SystemClock.uptimeMillis(); - this.mCurrentPosition = this.mStart = start; - if (start > max || start < min) { - this.startAfterEdge(start, min, max, velocity); - return; - } - this.mState = SplineOverScroller.SPLINE; - let totalDistance = 0.0; - if (velocity != 0) { - this.mDuration = this.mSplineDuration = this.getSplineFlingDuration(velocity); - totalDistance = this.getSplineFlingDistance(velocity); + hasDividerBeforeChildAt(childIndex) { + if (childIndex == 0) { + return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_BEGINNING) != 0; } - this.mSplineDistance = (totalDistance * Math_signum(velocity)); - this.mFinal = start + this.mSplineDistance; - if (this.mFinal < min) { - this.adjustDuration(this.mStart, this.mFinal, min); - this.mFinal = min; + else if (childIndex == this.getChildCount()) { + return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_END) != 0; } - if (this.mFinal > max) { - this.adjustDuration(this.mStart, this.mFinal, max); - this.mFinal = max; + else if ((this.mShowDividers & LinearLayout.SHOW_DIVIDER_MIDDLE) != 0) { + let hasVisibleViewBefore = false; + for (let i = childIndex - 1; i >= 0; i--) { + if (this.getChildAt(i).getVisibility() != LinearLayout.GONE) { + hasVisibleViewBefore = true; + break; + } + } + return hasVisibleViewBefore; } + return false; } - getSplineDeceleration(velocity) { - return Math.log(SplineOverScroller.INFLEXION * Math.abs(velocity) / (this.mFlingFriction * this.mPhysicalCoeff)); - } - getSplineFlingDistance(velocity) { - let l = this.getSplineDeceleration(velocity); - let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0; - return this.mFlingFriction * this.mPhysicalCoeff * Math.exp(SplineOverScroller.DECELERATION_RATE / decelMinusOne * l); - } - getSplineFlingDuration(velocity) { - let l = this.getSplineDeceleration(velocity); - let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0; - return (1000.0 * Math.exp(l / decelMinusOne)); - } - fitOnBounceCurve(start, end, velocity) { - let durationToApex = -velocity / this.mDeceleration; - let distanceToApex = velocity * velocity / 2.0 / Math.abs(this.mDeceleration); - let distanceToEdge = Math.abs(end - start); - let totalDuration = Math.sqrt(2.0 * (distanceToApex + distanceToEdge) / Math.abs(this.mDeceleration)); - this.mStartTime -= (1000 * (totalDuration - durationToApex)); - this.mStart = end; - this.mVelocity = (-this.mDeceleration * totalDuration); - } - startBounceAfterEdge(start, end, velocity) { - this.mDeceleration = SplineOverScroller.getDeceleration(velocity == 0 ? start - end : velocity); - this.fitOnBounceCurve(start, end, velocity); - this.onEdgeReached(); - } - startAfterEdge(start, min, max, velocity) { - if (start > min && start < max) { - Log.e("OverScroller", "startAfterEdge called from a valid position"); - this.mFinished = true; - return; - } - const positive = start > max; - const edge = positive ? max : min; - const overDistance = start - edge; - let keepIncreasing = overDistance * velocity >= 0; - if (keepIncreasing) { - this.startBounceAfterEdge(start, edge, velocity); - } - else { - const totalDistance = this.getSplineFlingDistance(velocity); - if (totalDistance > Math.abs(overDistance)) { - this.fling(start, velocity, positive ? min : start, positive ? start : max, this.mOver); + measureVertical(widthMeasureSpec, heightMeasureSpec) { + this.mTotalLength = 0; + let maxWidth = 0; + let childState = 0; + let alternativeMaxWidth = 0; + let weightedMaxWidth = 0; + let allFillParent = true; + let totalWeight = 0; + const count = this.getVirtualChildCount(); + const widthMode = MeasureSpec.getMode(widthMeasureSpec); + const heightMode = MeasureSpec.getMode(heightMeasureSpec); + let matchWidth = false; + const baselineChildIndex = this.mBaselineAlignedChildIndex; + const useLargestChild = this.mUseLargestChild; + let largestChildHeight = Number.MIN_SAFE_INTEGER; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child == null) { + this.mTotalLength += this.measureNullChild(i); + continue; } - else { - this.startSpringback(start, edge, velocity); + if (child.getVisibility() == View.GONE) { + i += this.getChildrenSkipCount(child, i); + continue; } - } - } - notifyEdgeReached(start, end, over) { - if (this.mState == SplineOverScroller.SPLINE) { - this.mOver = over; - this.mStartTime = SystemClock.uptimeMillis(); - this.startAfterEdge(start, end, end, this.mCurrVelocity); - } - } - onEdgeReached() { - let distance = this.mVelocity * this.mVelocity / (2 * Math.abs(this.mDeceleration)); - const sign = Math_signum(this.mVelocity); - if (distance > this.mOver) { - this.mDeceleration = -sign * this.mVelocity * this.mVelocity / (2.0 * this.mOver); - distance = this.mOver; - } - this.mOver = distance; - this.mState = SplineOverScroller.BALLISTIC; - this.mFinal = this.mStart + (this.mVelocity > 0 ? distance : -distance); - this.mDuration = -(1000 * this.mVelocity / this.mDeceleration); - } - continueWhenFinished() { - switch (this.mState) { - case SplineOverScroller.SPLINE: - if (this.mDuration < this.mSplineDuration) { - this.mStart = this.mFinal; - this.mVelocity = this.mCurrVelocity; - this.mDeceleration = SplineOverScroller.getDeceleration(this.mVelocity); - this.mStartTime += this.mDuration; - this.onEdgeReached(); + if (this.hasDividerBeforeChildAt(i)) { + this.mTotalLength += this.mDividerHeight; + } + let lp = child.getLayoutParams(); + totalWeight += lp.weight; + if (heightMode == MeasureSpec.EXACTLY && lp.height == 0 && lp.weight > 0) { + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + lp.topMargin + lp.bottomMargin); + } + else { + let oldHeight = Number.MIN_SAFE_INTEGER; + if (lp.height == 0 && lp.weight > 0) { + oldHeight = 0; + lp.height = LinearLayout.LayoutParams.WRAP_CONTENT; } - else { - return false; + this.measureChildBeforeLayout(child, i, widthMeasureSpec, 0, heightMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0); + if (oldHeight != Number.MIN_SAFE_INTEGER) { + lp.height = oldHeight; } - break; - case SplineOverScroller.BALLISTIC: - this.mStartTime += this.mDuration; - this.startSpringback(this.mFinal, this.mStart, 0); - break; - case SplineOverScroller.CUBIC: - return false; - } - this.update(); - return true; - } - update() { - const time = SystemClock.uptimeMillis(); - const currentTime = time - this.mStartTime; - if (currentTime > this.mDuration) { - return false; - } - let distance = 0; - switch (this.mState) { - case SplineOverScroller.SPLINE: { - const t = currentTime / this.mSplineDuration; - const index = Math.floor(SplineOverScroller.NB_SAMPLES * t); - let distanceCoef = 1; - let velocityCoef = 0; - if (index < SplineOverScroller.NB_SAMPLES) { - const t_inf = index / SplineOverScroller.NB_SAMPLES; - const t_sup = (index + 1) / SplineOverScroller.NB_SAMPLES; - const d_inf = SplineOverScroller.SPLINE_POSITION[index]; - const d_sup = SplineOverScroller.SPLINE_POSITION[index + 1]; - velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); - distanceCoef = d_inf + (t - t_inf) * velocityCoef; + const childHeight = child.getMeasuredHeight(); + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + childHeight + lp.topMargin + + lp.bottomMargin + this.getNextLocationOffset(child)); + if (useLargestChild) { + largestChildHeight = Math.max(childHeight, largestChildHeight); } - distance = distanceCoef * this.mSplineDistance; - this.mCurrVelocity = velocityCoef * this.mSplineDistance / this.mSplineDuration * 1000; - break; } - case SplineOverScroller.BALLISTIC: { - const t = currentTime / 1000; - this.mCurrVelocity = this.mVelocity + this.mDeceleration * t; - distance = this.mVelocity * t + this.mDeceleration * t * t / 2; - break; + if ((baselineChildIndex >= 0) && (baselineChildIndex == i + 1)) { + this.mBaselineChildTop = this.mTotalLength; } - case SplineOverScroller.CUBIC: { - const t = (currentTime) / this.mDuration; - const t2 = t * t; - const sign = Math_signum(this.mVelocity); - distance = sign * this.mOver * (3 * t2 - 2 * t * t2); - this.mCurrVelocity = sign * this.mOver * 6 * (-t + t2); - break; + if (i < baselineChildIndex && lp.weight > 0) { + throw new Error("A child of LinearLayout with index " + + "less than mBaselineAlignedChildIndex has weight > 0, which " + + "won't work. Either remove the weight, or don't set " + + "mBaselineAlignedChildIndex."); } + let matchWidthLocally = false; + if (widthMode != MeasureSpec.EXACTLY && lp.width == LinearLayout.LayoutParams.MATCH_PARENT) { + matchWidth = true; + matchWidthLocally = true; + } + const margin = lp.leftMargin + lp.rightMargin; + const measuredWidth = child.getMeasuredWidth() + margin; + maxWidth = Math.max(maxWidth, measuredWidth); + childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()); + allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT; + if (lp.weight > 0) { + weightedMaxWidth = Math.max(weightedMaxWidth, matchWidthLocally ? margin : measuredWidth); + } + else { + alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth); + } + i += this.getChildrenSkipCount(child, i); } - this.mCurrentPosition = this.mStart + Math.round(distance); - return true; - } - } - SplineOverScroller.DECELERATION_RATE = (Math.log(0.78) / Math.log(0.9)); - SplineOverScroller.INFLEXION = 0.35; - SplineOverScroller.START_TENSION = 0.5; - SplineOverScroller.END_TENSION = 1.0; - SplineOverScroller.P1 = SplineOverScroller.START_TENSION * SplineOverScroller.INFLEXION; - SplineOverScroller.P2 = 1.0 - SplineOverScroller.END_TENSION * (1 - SplineOverScroller.INFLEXION); - SplineOverScroller.NB_SAMPLES = 100; - SplineOverScroller.SPLINE_POSITION = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1); - SplineOverScroller.SPLINE_TIME = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1); - SplineOverScroller.SPLINE = 0; - SplineOverScroller.CUBIC = 1; - SplineOverScroller.BALLISTIC = 2; - SplineOverScroller.GRAVITY = 2000; - SplineOverScroller._staticFunc = function () { - let x_min = 0.0; - let y_min = 0.0; - for (let i = 0; i < SplineOverScroller.NB_SAMPLES; i++) { - const alpha = i / SplineOverScroller.NB_SAMPLES; - let x_max = 1.0; - let x, tx, coef; - while (true) { - x = x_min + (x_max - x_min) / 2.0; - coef = 3.0 * x * (1.0 - x); - tx = coef * ((1.0 - x) * SplineOverScroller.P1 + x * SplineOverScroller.P2) + x * x * x; - if (Math.abs(tx - alpha) < 1E-5) - break; - if (tx > alpha) - x_max = x; - else - x_min = x; - } - SplineOverScroller.SPLINE_POSITION[i] = coef * ((1.0 - x) * SplineOverScroller.START_TENSION + x) + x * x * x; - let y_max = 1.0; - let y, dy; - while (true) { - y = y_min + (y_max - y_min) / 2.0; - coef = 3.0 * y * (1.0 - y); - dy = coef * ((1.0 - y) * SplineOverScroller.START_TENSION + y) + y * y * y; - if (Math.abs(dy - alpha) < 1E-5) - break; - if (dy > alpha) - y_max = y; - else - y_min = y; - } - SplineOverScroller.SPLINE_TIME[i] = coef * ((1.0 - y) * SplineOverScroller.P1 + y * SplineOverScroller.P2) + y * y * y; - } - SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES] = SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES] = 1.0; - }(); - function Math_signum(value) { - if (value === 0 || Number.isNaN(value)) - return value; - return Math.abs(value) === value ? 1 : -1; - } - let sViscousFluidScale = 8; - let sViscousFluidNormalize = 1; - function Scroller_viscousFluid(x) { - x *= sViscousFluidScale; - if (x < 1) { - x -= (1 - Math.exp(-x)); - } - else { - let start = 0.36787944117; - x = 1 - Math.exp(1 - x); - x = start + x * (1 - start); - } - x *= sViscousFluidNormalize; - return x; - } - sViscousFluidNormalize = 1 / Scroller_viscousFluid(1); - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var View = android.view.View; - var ViewGroup = android.view.ViewGroup; - var MeasureSpec = View.MeasureSpec; - var MotionEvent = android.view.MotionEvent; - var VelocityTracker = android.view.VelocityTracker; - var ViewConfiguration = android.view.ViewConfiguration; - var Rect = android.graphics.Rect; - var OverScroller = android.widget.OverScroller; - var Log = android.util.Log; - var SystemClock = android.os.SystemClock; - var KeyEvent = android.view.KeyEvent; - var FocusFinder = android.view.FocusFinder; - class ScrollView extends widget.FrameLayout { - constructor(context, bindElement, defStyle) { - super(context, bindElement, defStyle); - this.mLastScroll = 0; - this.mTempRect = new Rect(); - this.mLastMotionY = 0; - this.mIsLayoutDirty = true; - this.mIsBeingDragged = false; - this.mFillViewport = false; - this.mSmoothScrollingEnabled = true; - this.mMinimumVelocity = 0; - this.mMaximumVelocity = 0; - this.mOverscrollDistance = 0; - this._mOverflingDistance = 0; - this.mActivePointerId = ScrollView.INVALID_POINTER; - this.initScrollView(); - this._attrBinder.addAttr('fillViewport', (value) => { - this.setFillViewport(this._attrBinder.parseBoolean(value)); - }); - } - get mOverflingDistance() { - let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; - let bottom = this.getChildAt(0).getHeight(); - let minOverY = this.mScrollY < 0 ? -this.mScrollY : this.mScrollY - (bottom - height); - return Math.max(this._mOverflingDistance, minOverY + this._mOverflingDistance); - } - set mOverflingDistance(value) { - this._mOverflingDistance = value; - } - shouldDelayChildPressedState() { - return true; - } - getMaxScrollAmount() { - return (ScrollView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop)); - } - initScrollView() { - this.mScroller = new OverScroller(); - this.setFocusable(true); - this.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); - this.setWillNotDraw(false); - const configuration = ViewConfiguration.get(); - this.mTouchSlop = configuration.getScaledTouchSlop(); - this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); - this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); - this.mOverscrollDistance = configuration.getScaledOverscrollDistance(); - this.mOverflingDistance = configuration.getScaledOverflingDistance(); - this.initScrollCache(); - this.setVerticalScrollBarEnabled(true); - } - addView(...args) { - if (this.getChildCount() > 0) { - throw new Error("ScrollView can host only one direct child"); - } - return super.addView(...args); - } - canScroll() { - let child = this.getChildAt(0); - if (child != null) { - let childHeight = child.getHeight(); - return this.getHeight() < childHeight + this.mPaddingTop + this.mPaddingBottom; - } - return false; - } - isFillViewport() { - return this.mFillViewport; - } - setFillViewport(fillViewport) { - if (fillViewport != this.mFillViewport) { - this.mFillViewport = fillViewport; - this.requestLayout(); - } - } - isSmoothScrollingEnabled() { - return this.mSmoothScrollingEnabled; - } - setSmoothScrollingEnabled(smoothScrollingEnabled) { - this.mSmoothScrollingEnabled = smoothScrollingEnabled; - } - onMeasure(widthMeasureSpec, heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (!this.mFillViewport) { - return; - } - const heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (heightMode == MeasureSpec.UNSPECIFIED) { - return; + if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) { + this.mTotalLength += this.mDividerHeight; } - if (this.getChildCount() > 0) { - const child = this.getChildAt(0); - let height = this.getMeasuredHeight(); - if (child.getMeasuredHeight() < height) { + if (useLargestChild && + (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED)) { + this.mTotalLength = 0; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child == null) { + this.mTotalLength += this.measureNullChild(i); + continue; + } + if (child.getVisibility() == View.GONE) { + i += this.getChildrenSkipCount(child, i); + continue; + } const lp = child.getLayoutParams(); - let childWidthMeasureSpec = widget.FrameLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width); - height -= this.mPaddingTop; - height -= this.mPaddingBottom; - let childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); - child.measure(childWidthMeasureSpec, childHeightMeasureSpec); - } - } - } - dispatchKeyEvent(event) { - return super.dispatchKeyEvent(event) || this.executeKeyEvent(event); - } - executeKeyEvent(event) { - this.mTempRect.setEmpty(); - if (!this.canScroll()) { - if (this.isFocused() && event.getKeyCode() != KeyEvent.KEYCODE_BACK) { - let currentFocused = this.findFocus(); - if (currentFocused == this) - currentFocused = null; - let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_DOWN); - return nextFocused != null - && nextFocused != this - && nextFocused.requestFocus(View.FOCUS_DOWN); + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + largestChildHeight + + lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child)); } - return false; } - let handled = false; - if (event.getAction() == KeyEvent.ACTION_DOWN) { - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_DPAD_UP: - if (!event.isAltPressed()) { - handled = this.arrowScroll(View.FOCUS_UP); + this.mTotalLength += this.mPaddingTop + this.mPaddingBottom; + let heightSize = this.mTotalLength; + heightSize = Math.max(heightSize, this.getSuggestedMinimumHeight()); + let heightSizeAndState = LinearLayout.resolveSizeAndState(heightSize, heightMeasureSpec, 0); + heightSize = heightSizeAndState & View.MEASURED_SIZE_MASK; + let delta = heightSize - this.mTotalLength; + if (delta != 0 && totalWeight > 0) { + let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight; + this.mTotalLength = 0; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child.getVisibility() == View.GONE) { + continue; + } + let lp = child.getLayoutParams(); + let childExtra = lp.weight; + if (childExtra > 0) { + let share = (childExtra * delta / weightSum); + weightSum -= childExtra; + delta -= share; + const childWidthMeasureSpec = LinearLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + + lp.leftMargin + lp.rightMargin, lp.width); + if ((lp.height != 0) || (heightMode != MeasureSpec.EXACTLY)) { + let childHeight = child.getMeasuredHeight() + share; + if (childHeight < 0) { + childHeight = 0; + } + child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY)); } else { - handled = this.fullScroll(View.FOCUS_UP); + child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY)); } - break; - case KeyEvent.KEYCODE_DPAD_DOWN: - if (!event.isAltPressed()) { - handled = this.arrowScroll(View.FOCUS_DOWN); + childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() + & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT)); + } + const margin = lp.leftMargin + lp.rightMargin; + const measuredWidth = child.getMeasuredWidth() + margin; + maxWidth = Math.max(maxWidth, measuredWidth); + let matchWidthLocally = widthMode != MeasureSpec.EXACTLY && + lp.width == LinearLayout.LayoutParams.MATCH_PARENT; + alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth); + allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT; + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredHeight() + + lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child)); + } + this.mTotalLength += this.mPaddingTop + this.mPaddingBottom; + } + else { + alternativeMaxWidth = Math.max(alternativeMaxWidth, weightedMaxWidth); + if (useLargestChild && heightMode != MeasureSpec.EXACTLY) { + for (let i = 0; i < count; i++) { + const child = this.getVirtualChildAt(i); + if (child == null || child.getVisibility() == View.GONE) { + continue; } - else { - handled = this.fullScroll(View.FOCUS_DOWN); + const lp = child.getLayoutParams(); + let childExtra = lp.weight; + if (childExtra > 0) { + child.measure(MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(largestChildHeight, MeasureSpec.EXACTLY)); } - break; - case KeyEvent.KEYCODE_SPACE: - this.pageScroll(event.isShiftPressed() ? View.FOCUS_UP : View.FOCUS_DOWN); - break; + } } } - return handled; - } - inChild(x, y) { - if (this.getChildCount() > 0) { - const scrollY = this.mScrollY; - const child = this.getChildAt(0); - return !(y < child.getTop() - scrollY - || y >= child.getBottom() - scrollY - || x < child.getLeft() - || x >= child.getRight()); - } - return false; - } - initOrResetVelocityTracker() { - if (this.mVelocityTracker == null) { - this.mVelocityTracker = VelocityTracker.obtain(); + if (!allFillParent && widthMode != MeasureSpec.EXACTLY) { + maxWidth = alternativeMaxWidth; } - else { - this.mVelocityTracker.clear(); + maxWidth += this.mPaddingLeft + this.mPaddingRight; + maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth()); + this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), heightSizeAndState); + if (matchWidth) { + this.forceUniformWidth(count, heightMeasureSpec); } } - initVelocityTrackerIfNotExists() { - if (this.mVelocityTracker == null) { - this.mVelocityTracker = VelocityTracker.obtain(); + forceUniformWidth(count, heightMeasureSpec) { + let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(), MeasureSpec.EXACTLY); + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child.getVisibility() != View.GONE) { + let lp = child.getLayoutParams(); + if (lp.width == LinearLayout.LayoutParams.MATCH_PARENT) { + let oldHeight = lp.height; + lp.height = child.getMeasuredHeight(); + this.measureChildWithMargins(child, uniformMeasureSpec, 0, heightMeasureSpec, 0); + lp.height = oldHeight; + } + } } } - recycleVelocityTracker() { - if (this.mVelocityTracker != null) { - this.mVelocityTracker.recycle(); - this.mVelocityTracker = null; + measureHorizontal(widthMeasureSpec, heightMeasureSpec) { + this.mTotalLength = 0; + let maxHeight = 0; + let childState = 0; + let alternativeMaxHeight = 0; + let weightedMaxHeight = 0; + let allFillParent = true; + let totalWeight = 0; + const count = this.getVirtualChildCount(); + const widthMode = MeasureSpec.getMode(widthMeasureSpec); + const heightMode = MeasureSpec.getMode(heightMeasureSpec); + let matchHeight = false; + if (this.mMaxAscent == null || this.mMaxDescent == null) { + this.mMaxAscent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT); + this.mMaxDescent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT); } - } - requestDisallowInterceptTouchEvent(disallowIntercept) { - if (disallowIntercept) { - this.recycleVelocityTracker(); + let maxAscent = this.mMaxAscent; + let maxDescent = this.mMaxDescent; + maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1; + maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1; + const baselineAligned = this.mBaselineAligned; + const useLargestChild = this.mUseLargestChild; + const isExactly = widthMode == MeasureSpec.EXACTLY; + let largestChildWidth = Number.MAX_SAFE_INTEGER; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child == null) { + this.mTotalLength += this.measureNullChild(i); + continue; + } + if (child.getVisibility() == View.GONE) { + i += this.getChildrenSkipCount(child, i); + continue; + } + if (this.hasDividerBeforeChildAt(i)) { + this.mTotalLength += this.mDividerWidth; + } + const lp = child.getLayoutParams(); + totalWeight += lp.weight; + if (widthMode == MeasureSpec.EXACTLY && lp.width == 0 && lp.weight > 0) { + if (isExactly) { + this.mTotalLength += lp.leftMargin + lp.rightMargin; + } + else { + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + + lp.leftMargin + lp.rightMargin); + } + if (baselineAligned) { + const freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + child.measure(freeSpec, freeSpec); + } + } + else { + let oldWidth = Number.MIN_SAFE_INTEGER; + if (lp.width == 0 && lp.weight > 0) { + oldWidth = 0; + lp.width = LinearLayout.LayoutParams.WRAP_CONTENT; + } + this.measureChildBeforeLayout(child, i, widthMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0, heightMeasureSpec, 0); + if (oldWidth != Number.MIN_SAFE_INTEGER) { + lp.width = oldWidth; + } + const childWidth = child.getMeasuredWidth(); + if (isExactly) { + this.mTotalLength += childWidth + lp.leftMargin + lp.rightMargin + + this.getNextLocationOffset(child); + } + else { + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + childWidth + lp.leftMargin + + lp.rightMargin + this.getNextLocationOffset(child)); + } + if (useLargestChild) { + largestChildWidth = Math.max(childWidth, largestChildWidth); + } + } + let matchHeightLocally = false; + if (heightMode != MeasureSpec.EXACTLY && lp.height == LinearLayout.LayoutParams.MATCH_PARENT) { + matchHeight = true; + matchHeightLocally = true; + } + const margin = lp.topMargin + lp.bottomMargin; + const childHeight = child.getMeasuredHeight() + margin; + childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()); + if (baselineAligned) { + const childBaseline = child.getBaseline(); + if (childBaseline != -1) { + const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity) + & Gravity.VERTICAL_GRAVITY_MASK; + const index = ((gravity >> Gravity.AXIS_Y_SHIFT) + & ~Gravity.AXIS_SPECIFIED) >> 1; + maxAscent[index] = Math.max(maxAscent[index], childBaseline); + maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline); + } + } + maxHeight = Math.max(maxHeight, childHeight); + allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT; + if (lp.weight > 0) { + weightedMaxHeight = Math.max(weightedMaxHeight, matchHeightLocally ? margin : childHeight); + } + else { + alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight); + } + i += this.getChildrenSkipCount(child, i); } - super.requestDisallowInterceptTouchEvent(disallowIntercept); - } - onInterceptTouchEvent(ev) { - const action = ev.getAction(); - if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) { - return true; + if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) { + this.mTotalLength += this.mDividerWidth; } - if (this.getScrollY() == 0 && !this.canScrollVertically(1)) { - return false; + if (maxAscent[LinearLayout.INDEX_TOP] != -1 || + maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 || + maxAscent[LinearLayout.INDEX_BOTTOM] != -1 || + maxAscent[LinearLayout.INDEX_FILL] != -1) { + const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM]))); + const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM]))); + maxHeight = Math.max(maxHeight, ascent + descent); } - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_MOVE: - { - const activePointerId = this.mActivePointerId; - if (activePointerId == ScrollView.INVALID_POINTER) { - break; - } - const pointerIndex = ev.findPointerIndex(activePointerId); - if (pointerIndex == -1) { - Log.e(ScrollView.TAG, "Invalid pointerId=" + activePointerId - + " in onInterceptTouchEvent"); - break; - } - const y = ev.getY(pointerIndex); - const yDiff = Math.abs(y - this.mLastMotionY); - if (yDiff > this.mTouchSlop) { - this.mIsBeingDragged = true; - this.mLastMotionY = y; - this.initVelocityTrackerIfNotExists(); - this.mVelocityTracker.addMovement(ev); - const parent = this.getParent(); - if (parent != null) { - parent.requestDisallowInterceptTouchEvent(true); - } - } - break; + if (useLargestChild && + (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED)) { + this.mTotalLength = 0; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child == null) { + this.mTotalLength += this.measureNullChild(i); + continue; } - case MotionEvent.ACTION_DOWN: - { - const y = ev.getY(); - if (!this.inChild(ev.getX(), y)) { - this.mIsBeingDragged = false; - this.recycleVelocityTracker(); - break; - } - this.mLastMotionY = y; - this.mActivePointerId = ev.getPointerId(0); - this.initOrResetVelocityTracker(); - this.mVelocityTracker.addMovement(ev); - this.mIsBeingDragged = !this.mScroller.isFinished(); - break; + if (child.getVisibility() == View.GONE) { + i += this.getChildrenSkipCount(child, i); + continue; } - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - this.mIsBeingDragged = false; - this.mActivePointerId = ScrollView.INVALID_POINTER; - this.recycleVelocityTracker(); - if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { - this.postInvalidateOnAnimation(); + const lp = child.getLayoutParams(); + if (isExactly) { + this.mTotalLength += largestChildWidth + lp.leftMargin + lp.rightMargin + + this.getNextLocationOffset(child); } - break; - case MotionEvent.ACTION_POINTER_UP: - this.onSecondaryPointerUp(ev); - break; - } - return this.mIsBeingDragged; - } - onTouchEvent(ev) { - this.initVelocityTrackerIfNotExists(); - this.mVelocityTracker.addMovement(ev); - const action = ev.getAction(); - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: - { - if (this.getChildCount() == 0) { - return false; - } - if ((this.mIsBeingDragged = !this.mScroller.isFinished())) { - const parent = this.getParent(); - if (parent != null) { - parent.requestDisallowInterceptTouchEvent(true); - } - } - if (!this.mScroller.isFinished()) { - this.mScroller.abortAnimation(); - } - this.mLastMotionY = ev.getY(); - this.mActivePointerId = ev.getPointerId(0); - break; + else { + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + largestChildWidth + + lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child)); } - case MotionEvent.ACTION_MOVE: - const activePointerIndex = ev.findPointerIndex(this.mActivePointerId); - if (activePointerIndex == -1) { - Log.e(ScrollView.TAG, "Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent"); - break; + } + } + this.mTotalLength += this.mPaddingLeft + this.mPaddingRight; + let widthSize = this.mTotalLength; + widthSize = Math.max(widthSize, this.getSuggestedMinimumWidth()); + let widthSizeAndState = LinearLayout.resolveSizeAndState(widthSize, widthMeasureSpec, 0); + widthSize = widthSizeAndState & View.MEASURED_SIZE_MASK; + let delta = widthSize - this.mTotalLength; + if (delta != 0 && totalWeight > 0) { + let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight; + maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1; + maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1; + maxHeight = -1; + this.mTotalLength = 0; + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child == null || child.getVisibility() == View.GONE) { + continue; } - const y = ev.getY(activePointerIndex); - let deltaY = this.mLastMotionY - y; - if (!this.mIsBeingDragged && Math.abs(deltaY) > this.mTouchSlop) { - const parent = this.getParent(); - if (parent != null) { - parent.requestDisallowInterceptTouchEvent(true); - } - this.mIsBeingDragged = true; - if (deltaY > 0) { - deltaY -= this.mTouchSlop; + const lp = child.getLayoutParams(); + let childExtra = lp.weight; + if (childExtra > 0) { + let share = (childExtra * delta / weightSum); + weightSum -= childExtra; + delta -= share; + const childHeightMeasureSpec = LinearLayout.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin, lp.height); + if ((lp.width != 0) || (widthMode != MeasureSpec.EXACTLY)) { + let childWidth = child.getMeasuredWidth() + share; + if (childWidth < 0) { + childWidth = 0; + } + child.measure(MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY), childHeightMeasureSpec); } else { - deltaY += this.mTouchSlop; + child.measure(MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY), childHeightMeasureSpec); } + childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() & View.MEASURED_STATE_MASK); } - if (this.mIsBeingDragged) { - this.mLastMotionY = y; - const oldX = this.mScrollX; - const oldY = this.mScrollY; - const range = this.getScrollRange(); - const overscrollMode = this.getOverScrollMode(); - const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || - (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0); - if (this.overScrollBy(0, deltaY, 0, this.mScrollY, 0, range, 0, this.mOverscrollDistance, true)) { - this.mVelocityTracker.clear(); - } - if (canOverscroll) { - const pulledToY = oldY + deltaY; - if (pulledToY < 0) { - } - else if (pulledToY > range) { - } - } + if (isExactly) { + this.mTotalLength += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin + + this.getNextLocationOffset(child); } - break; - case MotionEvent.ACTION_UP: - if (this.mIsBeingDragged) { - let velocityTracker = this.mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); - let initialVelocity = velocityTracker.getYVelocity(this.mActivePointerId); - if (this.getChildCount() > 0) { - let forceSpringBack = (this.mScrollY < -this._mOverflingDistance && initialVelocity > 0) - || (this.mScrollY > (this.getScrollRange() + this._mOverflingDistance) && initialVelocity < 0); - if (!forceSpringBack && (Math.abs(initialVelocity) > this.mMinimumVelocity)) { - this.fling(-initialVelocity); - } - else { - if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { - this.postInvalidateOnAnimation(); - } - } - } - this.mActivePointerId = ScrollView.INVALID_POINTER; - this.endDrag(); + else { + const totalLength = this.mTotalLength; + this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredWidth() + + lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child)); } - break; - case MotionEvent.ACTION_CANCEL: - if (this.mIsBeingDragged && this.getChildCount() > 0) { - if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { - this.postInvalidateOnAnimation(); + let matchHeightLocally = heightMode != MeasureSpec.EXACTLY && + lp.height == LinearLayout.LayoutParams.MATCH_PARENT; + const margin = lp.topMargin + lp.bottomMargin; + let childHeight = child.getMeasuredHeight() + margin; + maxHeight = Math.max(maxHeight, childHeight); + alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight); + allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT; + if (baselineAligned) { + const childBaseline = child.getBaseline(); + if (childBaseline != -1) { + const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity) + & Gravity.VERTICAL_GRAVITY_MASK; + const index = ((gravity >> Gravity.AXIS_Y_SHIFT) + & ~Gravity.AXIS_SPECIFIED) >> 1; + maxAscent[index] = Math.max(maxAscent[index], childBaseline); + maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline); } - this.mActivePointerId = ScrollView.INVALID_POINTER; - this.endDrag(); - } - break; - case MotionEvent.ACTION_POINTER_DOWN: - { - const index = ev.getActionIndex(); - this.mLastMotionY = ev.getY(index); - this.mActivePointerId = ev.getPointerId(index); - break; } - case MotionEvent.ACTION_POINTER_UP: - this.onSecondaryPointerUp(ev); - this.mLastMotionY = ev.getY(ev.findPointerIndex(this.mActivePointerId)); - break; - } - return true; - } - onSecondaryPointerUp(ev) { - const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> - MotionEvent.ACTION_POINTER_INDEX_SHIFT; - const pointerId = ev.getPointerId(pointerIndex); - if (pointerId == this.mActivePointerId) { - const newPointerIndex = pointerIndex == 0 ? 1 : 0; - this.mLastMotionY = ev.getY(newPointerIndex); - this.mActivePointerId = ev.getPointerId(newPointerIndex); - if (this.mVelocityTracker != null) { - this.mVelocityTracker.clear(); + } + this.mTotalLength += this.mPaddingLeft + this.mPaddingRight; + if (maxAscent[LinearLayout.INDEX_TOP] != -1 || + maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 || + maxAscent[LinearLayout.INDEX_BOTTOM] != -1 || + maxAscent[LinearLayout.INDEX_FILL] != -1) { + const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM]))); + const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM]))); + maxHeight = Math.max(maxHeight, ascent + descent); } } - } - onGenericMotionEvent(event) { - switch (event.getAction()) { - case MotionEvent.ACTION_SCROLL: { - if (!this.mIsBeingDragged) { - const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); - if (vscroll != 0) { - const delta = Math.floor(vscroll * this.getVerticalScrollFactor()); - const range = this.getScrollRange(); - let oldScrollY = this.mScrollY; - let newScrollY = oldScrollY - delta; - if (newScrollY < 0) { - newScrollY = 0; - } - else if (newScrollY > range) { - newScrollY = range; - } - if (newScrollY != oldScrollY) { - super.scrollTo(this.mScrollX, newScrollY); - return true; - } + else { + alternativeMaxHeight = Math.max(alternativeMaxHeight, weightedMaxHeight); + if (useLargestChild && widthMode != MeasureSpec.EXACTLY) { + for (let i = 0; i < count; i++) { + const child = this.getVirtualChildAt(i); + if (child == null || child.getVisibility() == View.GONE) { + continue; + } + const lp = child.getLayoutParams(); + let childExtra = lp.weight; + if (childExtra > 0) { + child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), MeasureSpec.EXACTLY)); } } } } - return super.onGenericMotionEvent(event); - } - onOverScrolled(scrollX, scrollY, clampedX, clampedY) { - if (!this.mScroller.isFinished()) { - const oldX = this.mScrollX; - const oldY = this.mScrollY; - this.mScrollX = scrollX; - this.mScrollY = scrollY; - this.invalidateParentIfNeeded(); - this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY); - } - else { - super.scrollTo(scrollX, scrollY); - } - if (!this.awakenScrollBars()) { - this.postInvalidateOnAnimation(); + if (!allFillParent && heightMode != MeasureSpec.EXACTLY) { + maxHeight = alternativeMaxHeight; } - } - getScrollRange() { - let scrollRange = 0; - if (this.getChildCount() > 0) { - let child = this.getChildAt(0); - scrollRange = Math.max(0, child.getHeight() - (this.getHeight() - this.mPaddingBottom - this.mPaddingTop)); + maxHeight += this.mPaddingTop + this.mPaddingBottom; + maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight()); + this.setMeasuredDimension(widthSizeAndState | (childState & View.MEASURED_STATE_MASK), LinearLayout.resolveSizeAndState(maxHeight, heightMeasureSpec, (childState << View.MEASURED_HEIGHT_STATE_SHIFT))); + if (matchHeight) { + this.forceUniformHeight(count, widthMeasureSpec); } - return scrollRange; } - findFocusableViewInBounds(topFocus, top, bottom) { - let focusables = this.getFocusables(View.FOCUS_FORWARD); - let focusCandidate = null; - let foundFullyContainedFocusable = false; - let count = focusables.size(); - for (let i = 0; i < count; i++) { - let view = focusables.get(i); - let viewTop = view.getTop(); - let viewBottom = view.getBottom(); - if (top < viewBottom && viewTop < bottom) { - const viewIsFullyContained = (top < viewTop) && (viewBottom < bottom); - if (focusCandidate == null) { - focusCandidate = view; - foundFullyContainedFocusable = viewIsFullyContained; - } - else { - const viewIsCloserToBoundary = (topFocus && viewTop < focusCandidate.getTop()) || (!topFocus && viewBottom > focusCandidate.getBottom()); - if (foundFullyContainedFocusable) { - if (viewIsFullyContained && viewIsCloserToBoundary) { - focusCandidate = view; - } - } - else { - if (viewIsFullyContained) { - focusCandidate = view; - foundFullyContainedFocusable = true; - } - else if (viewIsCloserToBoundary) { - focusCandidate = view; - } - } + forceUniformHeight(count, widthMeasureSpec) { + let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredHeight(), MeasureSpec.EXACTLY); + for (let i = 0; i < count; ++i) { + const child = this.getVirtualChildAt(i); + if (child.getVisibility() != View.GONE) { + let lp = child.getLayoutParams(); + if (lp.height == LinearLayout.LayoutParams.MATCH_PARENT) { + let oldWidth = lp.width; + lp.width = child.getMeasuredWidth(); + this.measureChildWithMargins(child, widthMeasureSpec, 0, uniformMeasureSpec, 0); + lp.width = oldWidth; } } } - return focusCandidate; } - pageScroll(direction) { - let down = direction == View.FOCUS_DOWN; - let height = this.getHeight(); - if (down) { - this.mTempRect.top = this.getScrollY() + height; - let count = this.getChildCount(); - if (count > 0) { - let view = this.getChildAt(count - 1); - if (this.mTempRect.top + height > view.getBottom()) { - this.mTempRect.top = view.getBottom() - height; - } - } + getChildrenSkipCount(child, index) { + return 0; + } + measureNullChild(childIndex) { + return 0; + } + measureChildBeforeLayout(child, childIndex, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight) { + this.measureChildWithMargins(child, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight); + } + getLocationOffset(child) { + return 0; + } + getNextLocationOffset(child) { + return 0; + } + onLayout(changed, l, t, r, b) { + if (this.mOrientation == LinearLayout.VERTICAL) { + this.layoutVertical(l, t, r, b); } else { - this.mTempRect.top = this.getScrollY() - height; - if (this.mTempRect.top < 0) { - this.mTempRect.top = 0; - } + this.layoutHorizontal(l, t, r, b); } - this.mTempRect.bottom = this.mTempRect.top + height; - return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom); } - fullScroll(direction) { - let down = direction == View.FOCUS_DOWN; - let height = this.getHeight(); - this.mTempRect.top = 0; - this.mTempRect.bottom = height; - if (down) { - let count = this.getChildCount(); - if (count > 0) { - let view = this.getChildAt(count - 1); - this.mTempRect.bottom = view.getBottom() + this.mPaddingBottom; - this.mTempRect.top = this.mTempRect.bottom - height; + layoutVertical(left, top, right, bottom) { + const paddingLeft = this.mPaddingLeft; + let childTop; + let childLeft; + const width = right - left; + let childRight = width - this.mPaddingRight; + let childSpace = width - paddingLeft - this.mPaddingRight; + const count = this.getVirtualChildCount(); + const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + const minorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; + switch (majorGravity) { + case Gravity.BOTTOM: + childTop = this.mPaddingTop + bottom - top - this.mTotalLength; + break; + case Gravity.CENTER_VERTICAL: + childTop = this.mPaddingTop + (bottom - top - this.mTotalLength) / 2; + break; + case Gravity.TOP: + default: + childTop = this.mPaddingTop; + break; + } + for (let i = 0; i < count; i++) { + const child = this.getVirtualChildAt(i); + if (child == null) { + childTop += this.measureNullChild(i); + } + else if (child.getVisibility() != View.GONE) { + const childWidth = child.getMeasuredWidth(); + const childHeight = child.getMeasuredHeight(); + const lp = child.getLayoutParams(); + let gravity = lp.gravity; + if (gravity < 0) { + gravity = minorGravity; + } + const absoluteGravity = gravity; + switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.CENTER_HORIZONTAL: + childLeft = paddingLeft + ((childSpace - childWidth) / 2) + + lp.leftMargin - lp.rightMargin; + break; + case Gravity.RIGHT: + childLeft = childRight - childWidth - lp.rightMargin; + break; + case Gravity.LEFT: + default: + childLeft = paddingLeft + lp.leftMargin; + break; + } + if (this.hasDividerBeforeChildAt(i)) { + childTop += this.mDividerHeight; + } + childTop += lp.topMargin; + this.setChildFrame(child, childLeft, childTop + this.getLocationOffset(child), childWidth, childHeight); + childTop += childHeight + lp.bottomMargin + this.getNextLocationOffset(child); + i += this.getChildrenSkipCount(child, i); } } - return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom); } - scrollAndFocus(direction, top, bottom) { - let handled = true; - let height = this.getHeight(); - let containerTop = this.getScrollY(); - let containerBottom = containerTop + height; - let up = direction == View.FOCUS_UP; - let newFocused = this.findFocusableViewInBounds(up, top, bottom); - if (newFocused == null) { - newFocused = this; - } - if (top >= containerTop && bottom <= containerBottom) { - handled = false; - } - else { - let delta = up ? (top - containerTop) : (bottom - containerBottom); - this.doScrollY(delta); + layoutHorizontal(left, top, right, bottom) { + const isLayoutRtl = this.isLayoutRtl(); + const paddingTop = this.mPaddingTop; + let childTop; + let childLeft; + const height = bottom - top; + let childBottom = height - this.mPaddingBottom; + let childSpace = height - paddingTop - this.mPaddingBottom; + const count = this.getVirtualChildCount(); + const majorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; + const minorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + const baselineAligned = this.mBaselineAligned; + const maxAscent = this.mMaxAscent; + const maxDescent = this.mMaxDescent; + let absoluteGravity = majorGravity; + switch (absoluteGravity) { + case Gravity.RIGHT: + childLeft = this.mPaddingLeft + right - left - this.mTotalLength; + break; + case Gravity.CENTER_HORIZONTAL: + childLeft = this.mPaddingLeft + (right - left - this.mTotalLength) / 2; + break; + case Gravity.LEFT: + default: + childLeft = this.mPaddingLeft; + break; } - if (newFocused != this.findFocus()) - newFocused.requestFocus(direction); - return handled; - } - arrowScroll(direction) { - let currentFocused = this.findFocus(); - if (currentFocused == this) - currentFocused = null; - let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction); - const maxJump = this.getMaxScrollAmount(); - if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump, this.getHeight())) { - nextFocused.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect); - let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); - this.doScrollY(scrollDelta); - nextFocused.requestFocus(direction); + let start = 0; + let dir = 1; + if (isLayoutRtl) { + start = count - 1; + dir = -1; } - else { - let scrollDelta = maxJump; - if (direction == View.FOCUS_UP && this.getScrollY() < scrollDelta) { - scrollDelta = this.getScrollY(); + for (let i = 0; i < count; i++) { + let childIndex = start + dir * i; + const child = this.getVirtualChildAt(childIndex); + if (child == null) { + childLeft += this.measureNullChild(childIndex); } - else if (direction == View.FOCUS_DOWN) { - if (this.getChildCount() > 0) { - let daBottom = this.getChildAt(0).getBottom(); - let screenBottom = this.getScrollY() + this.getHeight() - this.mPaddingBottom; - if (daBottom - screenBottom < maxJump) { - scrollDelta = daBottom - screenBottom; - } + else if (child.getVisibility() != View.GONE) { + const childWidth = child.getMeasuredWidth(); + const childHeight = child.getMeasuredHeight(); + let childBaseline = -1; + const lp = child.getLayoutParams(); + if (baselineAligned && lp.height != LinearLayout.LayoutParams.MATCH_PARENT) { + childBaseline = child.getBaseline(); } + let gravity = lp.gravity; + if (gravity < 0) { + gravity = minorGravity; + } + switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) { + case Gravity.TOP: + childTop = paddingTop + lp.topMargin; + if (childBaseline != -1) { + childTop += maxAscent[LinearLayout.INDEX_TOP] - childBaseline; + } + break; + case Gravity.CENTER_VERTICAL: + childTop = paddingTop + ((childSpace - childHeight) / 2) + + lp.topMargin - lp.bottomMargin; + break; + case Gravity.BOTTOM: + childTop = childBottom - childHeight - lp.bottomMargin; + if (childBaseline != -1) { + let descent = child.getMeasuredHeight() - childBaseline; + childTop -= (maxDescent[LinearLayout.INDEX_BOTTOM] - descent); + } + break; + default: + childTop = paddingTop; + break; + } + if (this.hasDividerBeforeChildAt(childIndex)) { + childLeft += this.mDividerWidth; + } + childLeft += lp.leftMargin; + this.setChildFrame(child, childLeft + this.getLocationOffset(child), childTop, childWidth, childHeight); + childLeft += childWidth + lp.rightMargin + + this.getNextLocationOffset(child); + i += this.getChildrenSkipCount(child, childIndex); } - if (scrollDelta == 0) { - return false; - } - this.doScrollY(direction == View.FOCUS_DOWN ? scrollDelta : -scrollDelta); - } - if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) { - const descendantFocusability = this.getDescendantFocusability(); - this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); - this.requestFocus(); - this.setDescendantFocusability(descendantFocusability); } - return true; } - isOffScreen(descendant) { - return !this.isWithinDeltaOfScreen(descendant, 0, this.getHeight()); + setChildFrame(child, left, top, width, height) { + child.layout(left, top, left + width, top + height); } - isWithinDeltaOfScreen(descendant, delta, height) { - descendant.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(descendant, this.mTempRect); - return (this.mTempRect.bottom + delta) >= this.getScrollY() - && (this.mTempRect.top - delta) <= (this.getScrollY() + height); + setOrientation(orientation) { + if (typeof orientation === 'string') { + if ('VERTICAL' === (orientation + '').toUpperCase()) + orientation = LinearLayout.VERTICAL; + else if ('HORIZONTAL' === (orientation + '').toUpperCase()) + orientation = LinearLayout.HORIZONTAL; + } + if (this.mOrientation != orientation) { + this.mOrientation = orientation; + this.requestLayout(); + } } - doScrollY(delta) { - if (delta != 0) { - if (this.mSmoothScrollingEnabled) { - this.smoothScrollBy(0, delta); + getOrientation() { + return this.mOrientation; + } + setGravity(gravity) { + if (this.mGravity != gravity) { + if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { + gravity |= Gravity.LEFT; } - else { - this.scrollBy(0, delta); + if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { + gravity |= Gravity.TOP; } + this.mGravity = gravity; + this.requestLayout(); } } - smoothScrollBy(dx, dy) { - if (this.getChildCount() == 0) { - return; - } - let duration = SystemClock.uptimeMillis() - this.mLastScroll; - if (duration > ScrollView.ANIMATED_SCROLL_GAP) { - const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; - const bottom = this.getChildAt(0).getHeight(); - const maxY = Math.max(0, bottom - height); - const scrollY = this.mScrollY; - dy = Math.max(0, Math.min(scrollY + dy, maxY)) - scrollY; - this.mScroller.startScroll(this.mScrollX, scrollY, 0, dy); - this.postInvalidateOnAnimation(); + setHorizontalGravity(horizontalGravity) { + const gravity = horizontalGravity & Gravity.HORIZONTAL_GRAVITY_MASK; + if ((this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != gravity) { + this.mGravity = (this.mGravity & ~Gravity.HORIZONTAL_GRAVITY_MASK) | gravity; + this.requestLayout(); } - else { - if (!this.mScroller.isFinished()) { - this.mScroller.abortAnimation(); - } - this.scrollBy(dx, dy); + } + setVerticalGravity(verticalGravity) { + const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) { + this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity; + this.requestLayout(); } - this.mLastScroll = SystemClock.uptimeMillis(); } - smoothScrollTo(x, y) { - this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY); + generateLayoutParamsFromAttr(attrs) { + return new LinearLayout.LayoutParams(this.getContext(), attrs); } - computeVerticalScrollRange() { - const count = this.getChildCount(); - const contentHeight = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; - if (count == 0) { - return contentHeight; - } - let scrollRange = this.getChildAt(0).getBottom(); - const scrollY = this.mScrollY; - const overscrollBottom = Math.max(0, scrollRange - contentHeight); - if (scrollY < 0) { - scrollRange -= scrollY; + generateDefaultLayoutParams() { + let LayoutParams = LinearLayout.LayoutParams; + if (this.mOrientation == LinearLayout.HORIZONTAL) { + return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); } - else if (scrollY > overscrollBottom) { - scrollRange += scrollY - overscrollBottom; + else if (this.mOrientation == LinearLayout.VERTICAL) { + return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } - return scrollRange; - } - computeVerticalScrollOffset() { - return Math.max(0, super.computeVerticalScrollOffset()); + return super.generateDefaultLayoutParams(); } - measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) { - let lp = child.getLayoutParams(); - lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec; - lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec; - let childWidthMeasureSpec; - let childHeightMeasureSpec; - childWidthMeasureSpec = ViewGroup.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft - + this.mPaddingRight, lp.width); - childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); - child.measure(childWidthMeasureSpec, childHeightMeasureSpec); - lp._measuringParentWidthMeasureSpec = null; - lp._measuringParentHeightMeasureSpec = null; + generateLayoutParams(p) { + return new LinearLayout.LayoutParams(p); } - measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) { - const lp = child.getLayoutParams(); - lp._measuringParentWidthMeasureSpec = parentWidthMeasureSpec; - lp._measuringParentHeightMeasureSpec = parentHeightMeasureSpec; - const childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin - + widthUsed, lp.width); - const childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.topMargin + lp.bottomMargin, MeasureSpec.UNSPECIFIED); - child.measure(childWidthMeasureSpec, childHeightMeasureSpec); - lp._measuringParentWidthMeasureSpec = null; - lp._measuringParentHeightMeasureSpec = null; + checkLayoutParams(p) { + return p instanceof LinearLayout.LayoutParams; } - computeScroll() { - if (this.mScroller.computeScrollOffset()) { - let oldX = this.mScrollX; - let oldY = this.mScrollY; - let x = this.mScroller.getCurrX(); - let y = this.mScroller.getCurrY(); - if (oldX != x || oldY != y) { - const range = this.getScrollRange(); - const overscrollMode = this.getOverScrollMode(); - const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || - (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0); - this.overScrollBy(x - oldX, y - oldY, oldX, oldY, 0, range, 0, this.mOverflingDistance, false); - this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY); - if (canOverscroll) { - if (y < 0 && oldY >= 0) { - } - else if (y > range && oldY <= range) { - } - } + } + LinearLayout.HORIZONTAL = 0; + LinearLayout.VERTICAL = 1; + LinearLayout.SHOW_DIVIDER_NONE = 0; + LinearLayout.SHOW_DIVIDER_BEGINNING = 1; + LinearLayout.SHOW_DIVIDER_MIDDLE = 2; + LinearLayout.SHOW_DIVIDER_END = 4; + LinearLayout.VERTICAL_GRAVITY_COUNT = 4; + LinearLayout.INDEX_CENTER_VERTICAL = 0; + LinearLayout.INDEX_TOP = 1; + LinearLayout.INDEX_BOTTOM = 2; + LinearLayout.INDEX_FILL = 3; + widget.LinearLayout = LinearLayout; + (function (LinearLayout) { + class LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + constructor(...args) { + super(...(() => { + if (args[0] instanceof Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof LinearLayout.LayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.MarginLayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); + this.weight = 0; + this.gravity = -1; + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const c = args[0]; + const attrs = args[1]; + const a = c.obtainStyledAttributes(attrs); + this.weight = a.getFloat('layout_weight', 0); + this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), -1); + a.recycle(); } - if (!this.awakenScrollBars()) { - this.postInvalidateOnAnimation(); + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') { + this.weight = args[2]; } - } - else { - } - } - scrollToChild(child) { - child.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(child, this.mTempRect); - let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); - if (scrollDelta != 0) { - this.scrollBy(0, scrollDelta); - } - } - scrollToChildRect(rect, immediate) { - const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect); - const scroll = delta != 0; - if (scroll) { - if (immediate) { - this.scrollBy(0, delta); + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + this.weight = 0; } - else { - this.smoothScrollBy(0, delta); + else if (args[0] instanceof LinearLayout.LayoutParams) { + const source = args[0]; + this.weight = source.weight; + this.gravity = source.gravity; } - } - return scroll; - } - computeScrollDeltaToGetChildRectOnScreen(rect) { - if (this.getChildCount() == 0) - return 0; - let height = this.getHeight(); - let screenTop = this.getScrollY(); - let screenBottom = screenTop + height; - let fadingEdge = this.getVerticalFadingEdgeLength(); - if (rect.top > 0) { - screenTop += fadingEdge; - } - if (rect.bottom < this.getChildAt(0).getHeight()) { - screenBottom -= fadingEdge; - } - let scrollYDelta = 0; - if (rect.bottom > screenBottom && rect.top > screenTop) { - if (rect.height() > height) { - scrollYDelta += (rect.top - screenTop); + else if (args[0] instanceof ViewGroup.MarginLayoutParams) { } - else { - scrollYDelta += (rect.bottom - screenBottom); + else if (args[0] instanceof ViewGroup.LayoutParams) { } - let bottom = this.getChildAt(0).getBottom(); - let distanceToBottom = bottom - screenBottom; - scrollYDelta = Math.min(scrollYDelta, distanceToBottom); } - else if (rect.top < screenTop && rect.bottom < screenBottom) { - if (rect.height() > height) { - scrollYDelta -= (screenBottom - rect.bottom); - } - else { - scrollYDelta -= (screenTop - rect.top); - } - scrollYDelta = Math.max(scrollYDelta, -this.getScrollY()); + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_gravity', { + setter(param, value, attrBinder) { + param.gravity = attrBinder.parseGravity(value, param.gravity); + }, getter(param) { + return param.gravity; + } + }).set('layout_weight', { + setter(param, value, attrBinder) { + param.weight = attrBinder.parseFloat(value, param.weight); + }, getter(param) { + return param.weight; + } + }); } - return scrollYDelta; } - requestChildFocus(child, focused) { - if (!this.mIsLayoutDirty) { - this.scrollToChild(focused); - } - else { - this.mChildToScrollTo = focused; - } - super.requestChildFocus(child, focused); + LinearLayout.LayoutParams = LayoutParams; + })(LinearLayout = widget.LinearLayout || (widget.LinearLayout = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var util; + (function (util) { + class MathUtils { + constructor() { } - onRequestFocusInDescendants(direction, previouslyFocusedRect) { - if (direction == View.FOCUS_FORWARD) { - direction = View.FOCUS_DOWN; - } - else if (direction == View.FOCUS_BACKWARD) { - direction = View.FOCUS_UP; - } - const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction); - if (nextFocus == null) { - return false; - } - if (this.isOffScreen(nextFocus)) { - return false; - } - return nextFocus.requestFocus(direction, previouslyFocusedRect); + static abs(v) { + return v > 0 ? v : -v; } - requestChildRectangleOnScreen(child, rectangle, immediate) { - rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY()); - return this.scrollToChildRect(rectangle, immediate); + static constrain(amount, low, high) { + return amount < low ? low : (amount > high ? high : amount); } - requestLayout() { - this.mIsLayoutDirty = true; - super.requestLayout(); + static log(a) { + return Math.log(a); } - onLayout(changed, l, t, r, b) { - super.onLayout(changed, l, t, r, b); - this.mIsLayoutDirty = false; - if (this.mChildToScrollTo != null && ScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) { - this.scrollToChild(this.mChildToScrollTo); - } - this.mChildToScrollTo = null; - if (!this.isLaidOut()) { - const childHeight = (this.getChildCount() > 0) ? this.getChildAt(0).getMeasuredHeight() : 0; - const scrollRange = Math.max(0, childHeight - (b - t - this.mPaddingBottom - this.mPaddingTop)); - if (this.mScrollY > scrollRange) { - this.mScrollY = scrollRange; - } - else if (this.mScrollY < 0) { - this.mScrollY = 0; - } - } - this.scrollTo(this.mScrollX, this.mScrollY); + static exp(a) { + return Math.exp(a); } - onSizeChanged(w, h, oldw, oldh) { - super.onSizeChanged(w, h, oldw, oldh); - let currentFocused = this.findFocus(); - if (null == currentFocused || this == currentFocused) - return; - if (this.isWithinDeltaOfScreen(currentFocused, 0, oldh)) { - currentFocused.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect); - let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); - this.doScrollY(scrollDelta); - } + static pow(a, b) { + return Math.pow(a, b); } - static isViewDescendantOf(child, parent) { - if (child == parent) { - return true; - } - const theParent = child.getParent(); - return (theParent instanceof ViewGroup) && ScrollView.isViewDescendantOf(theParent, parent); + static max(a, b, c) { + if (c == null) + return a > b ? a : b; + return a > b ? (a > c ? a : c) : (b > c ? b : c); } - fling(velocityY) { - if (this.getChildCount() > 0) { - let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; - let bottom = this.getChildAt(0).getHeight(); - this.mScroller.fling(this.mScrollX, this.mScrollY, 0, velocityY, 0, 0, 0, Math.max(0, bottom - height), 0, this.mOverflingDistance); - this.postInvalidateOnAnimation(); - } + static min(a, b, c) { + if (c == null) + return a < b ? a : b; + return a < b ? (a < c ? a : c) : (b < c ? b : c); } - endDrag() { - this.mIsBeingDragged = false; - this.recycleVelocityTracker(); + static dist(x1, y1, x2, y2) { + const x = (x2 - x1); + const y = (y2 - y1); + return Math.sqrt(x * x + y * y); } - scrollTo(x, y) { - if (this.getChildCount() > 0) { - let child = this.getChildAt(0); - x = ScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth()); - y = ScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight()); - if (x != this.mScrollX || y != this.mScrollY) { - super.scrollTo(x, y); - } - } + static dist3(x1, y1, z1, x2, y2, z2) { + const x = (x2 - x1); + const y = (y2 - y1); + const z = (z2 - z1); + return Math.sqrt(x * x + y * y + z * z); } - static clamp(n, my, child) { - if (my >= child || n < 0) { - return 0; - } - if ((my + n) > child) { - return child - my; - } - return n; + static mag(a, b, c) { + if (c == null) + return Math.sqrt(a * a + b * b); + return Math.sqrt(a * a + b * b + c * c); } - canScrollVertically(direction) { - if (this.getOverScrollMode() === View.OVER_SCROLL_ALWAYS) - return true; - return super.canScrollVertically(direction); + static sq(v) { + return v * v; + } + static radians(degrees) { + return degrees * MathUtils.DEG_TO_RAD; + } + static degrees(radians) { + return radians * MathUtils.RAD_TO_DEG; + } + static acos(value) { + return Math.acos(value); + } + static asin(value) { + return Math.asin(value); + } + static atan(value) { + return Math.atan(value); + } + static atan2(a, b) { + return Math.atan2(a, b); + } + static tan(angle) { + return Math.tan(angle); + } + static lerp(start, stop, amount) { + return start + (stop - start) * amount; + } + static norm(start, stop, value) { + return (value - start) / (stop - start); + } + static map(minStart, minStop, maxStart, maxStop, value) { + return maxStart + (maxStart - maxStop) * ((value - minStart) / (minStop - minStart)); + } + static random(...args) { + if (args.length == 1) + return Math.random() * args[0]; + let [howsmall, howbig] = args; + if (howsmall >= howbig) + return howsmall; + return Math.random() * (howbig - howsmall) + howsmall; } } - ScrollView.ANIMATED_SCROLL_GAP = 250; - ScrollView.MAX_SCROLL_FACTOR = 0.5; - ScrollView.TAG = "ScrollView"; - ScrollView.INVALID_POINTER = -1; - widget.ScrollView = ScrollView; - })(widget = android.widget || (android.widget = {})); + MathUtils.DEG_TO_RAD = 3.1415926 / 180.0; + MathUtils.RAD_TO_DEG = 180.0 / 3.1415926; + util.MathUtils = MathUtils; + })(util = android.util || (android.util = {})); })(android || (android = {})); var android; (function (android) { - var widget; - (function (widget) { - var Gravity = android.view.Gravity; - var View = android.view.View; - var MeasureSpec = View.MeasureSpec; - var ViewGroup = android.view.ViewGroup; - class LinearLayout extends ViewGroup { - constructor(context, bindElement, defStyle) { - super(context, bindElement, defStyle); - this.mBaselineAligned = true; - this.mBaselineAlignedChildIndex = -1; - this.mBaselineChildTop = 0; - this.mOrientation = 0; - this.mGravity = Gravity.LEFT | Gravity.TOP; - this.mTotalLength = 0; - this.mWeightSum = -1; - this.mUseLargestChild = false; - this.mDividerWidth = 0; - this.mDividerHeight = 0; - this.mShowDividers = LinearLayout.SHOW_DIVIDER_NONE; - this.mDividerPadding = 0; - this._attrBinder.addAttr('orientation', (value) => { - if ((value + "").toUpperCase() === 'VERTICAL' || LinearLayout.VERTICAL == value) { - this.setOrientation(LinearLayout.VERTICAL); - } - else if ((value + "").toUpperCase() === 'HORIZONTAL' || LinearLayout.HORIZONTAL == value) { - this.setOrientation(LinearLayout.HORIZONTAL); - } - }, () => { - return this.mOrientation; - }); - this._attrBinder.addAttr('gravity', (value) => { - this.setGravity(this._attrBinder.parseGravity(value, this.mGravity)); - }, () => { - return this.mGravity; - }); - this._attrBinder.addAttr('baselineAligned', (value) => { - if (!this._attrBinder.parseBoolean(value)) - this.setBaselineAligned(false); - }); - this._attrBinder.addAttr('weightSum', (value) => { - let weightSum = Number.parseFloat(value); - if (!Number.isNaN(weightSum) && weightSum != null) { - this.setWeightSum(weightSum); - } - }, () => { - return this.mWeightSum; - }); - this._attrBinder.addAttr('baselineAlignedChildIndex', (value) => { - value = Number.parseInt(value); - if (Number.isSafeInteger(value)) { - this.mBaselineAlignedChildIndex = value; - } - }); - this._attrBinder.addAttr('measureWithLargestChild', (value) => { - value = Number.parseInt(value); - if (Number.isSafeInteger(value)) { - this.mUseLargestChild = this._attrBinder.parseBoolean(value, this.mUseLargestChild); - } - }); - this._attrBinder.addAttr('divider', (value) => { - this.setDividerDrawable(this._attrBinder.parseDrawable(value)); - }); - this._attrBinder.addAttr('showDividers', (value) => { - let fieldName = ('SHOW_DIVIDER_' + value).toUpperCase(); - if (Number.isInteger(LinearLayout[fieldName])) { - this.setShowDividers(LinearLayout[fieldName]); - } - }); - this._attrBinder.addAttr('dividerPadding', (value) => { - value = Number.parseInt(value); - if (Number.isInteger(value)) { - this.setDividerPadding(value); - } - }); - } - setShowDividers(showDividers) { - if (showDividers != this.mShowDividers) { - this.requestLayout(); + var util; + (function (util) { + class SparseBooleanArray extends util.SparseArray { + } + util.SparseBooleanArray = SparseBooleanArray; + })(util = android.util || (android.util = {})); +})(android || (android = {})); +var android; +(function (android) { + var view; + (function (view) { + class SoundEffectConstants { + static getContantForFocusDirection(direction) { + switch (direction) { + case view.View.FOCUS_RIGHT: + return SoundEffectConstants.NAVIGATION_RIGHT; + case view.View.FOCUS_FORWARD: + case view.View.FOCUS_DOWN: + return SoundEffectConstants.NAVIGATION_DOWN; + case view.View.FOCUS_LEFT: + return SoundEffectConstants.NAVIGATION_LEFT; + case view.View.FOCUS_BACKWARD: + case view.View.FOCUS_UP: + return SoundEffectConstants.NAVIGATION_UP; } - this.mShowDividers = showDividers; + throw Error(`new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.")`); } - shouldDelayChildPressedState() { - return false; + } + SoundEffectConstants.CLICK = 0; + SoundEffectConstants.NAVIGATION_LEFT = 1; + SoundEffectConstants.NAVIGATION_UP = 2; + SoundEffectConstants.NAVIGATION_RIGHT = 3; + SoundEffectConstants.NAVIGATION_DOWN = 4; + view.SoundEffectConstants = SoundEffectConstants; + })(view = android.view || (android.view = {})); +})(android || (android = {})); +var android; +(function (android) { + var os; + (function (os) { + class Trace { + static nativeGetEnabledTags() { + return Trace.TRACE_TAG_ALWAYS; } - getShowDividers() { - return this.mShowDividers; + static nativeTraceCounter(tag, name, value) { } - getDividerDrawable() { - return this.mDivider; + static nativeTraceBegin(tag, name) { } + static nativeTraceEnd(tag) { } + static nativeAsyncTraceBegin(tag, name, cookie) { } + static nativeAsyncTraceEnd(tag, name, cookie) { } + static nativeSetAppTracingAllowed(allowed) { } + static nativeSetTracingEnabled(allowed) { } + static cacheEnabledTags() { + let tags = Trace.nativeGetEnabledTags(); + Trace.sEnabledTags = tags; + return tags; } - setDividerDrawable(divider) { - if (divider == this.mDivider) { - return; - } - this.mDivider = divider; - if (divider != null) { - this.mDividerWidth = divider.getIntrinsicWidth(); - this.mDividerHeight = divider.getIntrinsicHeight(); - } - else { - this.mDividerWidth = 0; - this.mDividerHeight = 0; + static isTagEnabled(traceTag) { + let tags = Trace.sEnabledTags; + if (tags == Trace.TRACE_TAG_NOT_READY) { + tags = Trace.cacheEnabledTags(); } - this.setWillNotDraw(divider == null); - this.requestLayout(); + return (tags & traceTag) != 0; } - setDividerPadding(padding) { - this.mDividerPadding = padding; + static traceCounter(traceTag, counterName, counterValue) { + if (Trace.isTagEnabled(traceTag)) { + Trace.nativeTraceCounter(traceTag, counterName, counterValue); + } } - getDividerPadding() { - return this.mDividerPadding; + static setAppTracingAllowed(allowed) { + Trace.nativeSetAppTracingAllowed(allowed); + Trace.cacheEnabledTags(); } - getDividerWidth() { - return this.mDividerWidth; + static setTracingEnabled(enabled) { + Trace.nativeSetTracingEnabled(enabled); + Trace.cacheEnabledTags(); } - onDraw(canvas) { - if (this.mDivider == null) { - return; - } - if (this.mOrientation == LinearLayout.VERTICAL) { - this.drawDividersVertical(canvas); + static traceBegin(traceTag, methodName) { + if (Trace.isTagEnabled(traceTag)) { + Trace.nativeTraceBegin(traceTag, methodName); } - else { - this.drawDividersHorizontal(canvas); + } + static traceEnd(traceTag) { + if (Trace.isTagEnabled(traceTag)) { + Trace.nativeTraceEnd(traceTag); } } - drawDividersVertical(canvas) { - const count = this.getVirtualChildCount(); - for (let i = 0; i < count; i++) { - const child = this.getVirtualChildAt(i); - if (child != null && child.getVisibility() != View.GONE) { - if (this.hasDividerBeforeChildAt(i)) { - const lp = child.getLayoutParams(); - const top = child.getTop() - lp.topMargin - this.mDividerHeight; - this.drawHorizontalDivider(canvas, top); - } - } + static asyncTraceBegin(traceTag, methodName, cookie) { + if (Trace.isTagEnabled(traceTag)) { + Trace.nativeAsyncTraceBegin(traceTag, methodName, cookie); } - if (this.hasDividerBeforeChildAt(count)) { - const child = this.getVirtualChildAt(count - 1); - let bottom = 0; - if (child == null) { - bottom = this.getHeight() - this.getPaddingBottom() - this.mDividerHeight; - } - else { - const lp = child.getLayoutParams(); - bottom = child.getBottom() + lp.bottomMargin; - } - this.drawHorizontalDivider(canvas, bottom); + } + static asyncTraceEnd(traceTag, methodName, cookie) { + if (Trace.isTagEnabled(traceTag)) { + Trace.nativeAsyncTraceEnd(traceTag, methodName, cookie); } } - drawDividersHorizontal(canvas) { - const count = this.getVirtualChildCount(); - const isLayoutRtl = this.isLayoutRtl(); - for (let i = 0; i < count; i++) { - const child = this.getVirtualChildAt(i); - if (child != null && child.getVisibility() != View.GONE) { - if (this.hasDividerBeforeChildAt(i)) { - const lp = child.getLayoutParams(); - let position; - if (isLayoutRtl) { - position = child.getRight() + lp.rightMargin; - } - else { - position = child.getLeft() - lp.leftMargin - this.mDividerWidth; - } - this.drawVerticalDivider(canvas, position); - } + static beginSection(sectionName) { + if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { + if (sectionName.length > Trace.MAX_SECTION_NAME_LEN) { + throw Error(`new IllegalArgumentException("sectionName is too long")`); } + Trace.nativeTraceBegin(Trace.TRACE_TAG_APP, sectionName); } - if (this.hasDividerBeforeChildAt(count)) { - const child = this.getVirtualChildAt(count - 1); - let position; - if (child == null) { - if (isLayoutRtl) { - position = this.getPaddingLeft(); - } - else { - position = this.getWidth() - this.getPaddingRight() - this.mDividerWidth; - } - } - else { - const lp = child.getLayoutParams(); - if (isLayoutRtl) { - position = child.getLeft() - lp.leftMargin - this.mDividerWidth; - } - else { - position = child.getRight() + lp.rightMargin; - } - } - this.drawVerticalDivider(canvas, position); + } + static endSection() { + if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { + Trace.nativeTraceEnd(Trace.TRACE_TAG_APP); } } - drawHorizontalDivider(canvas, top) { - this.mDivider.setBounds(this.getPaddingLeft() + this.mDividerPadding, top, this.getWidth() - this.getPaddingRight() - this.mDividerPadding, top + this.mDividerHeight); - this.mDivider.draw(canvas); + } + Trace.TAG = "Trace"; + Trace.TRACE_TAG_NEVER = 0; + Trace.TRACE_TAG_ALWAYS = 1 << 0; + Trace.TRACE_TAG_GRAPHICS = 1 << 1; + Trace.TRACE_TAG_INPUT = 1 << 2; + Trace.TRACE_TAG_VIEW = 1 << 3; + Trace.TRACE_TAG_WEBVIEW = 1 << 4; + Trace.TRACE_TAG_WINDOW_MANAGER = 1 << 5; + Trace.TRACE_TAG_ACTIVITY_MANAGER = 1 << 6; + Trace.TRACE_TAG_SYNC_MANAGER = 1 << 7; + Trace.TRACE_TAG_AUDIO = 1 << 8; + Trace.TRACE_TAG_VIDEO = 1 << 9; + Trace.TRACE_TAG_CAMERA = 1 << 10; + Trace.TRACE_TAG_HAL = 1 << 11; + Trace.TRACE_TAG_APP = 1 << 12; + Trace.TRACE_TAG_RESOURCES = 1 << 13; + Trace.TRACE_TAG_DALVIK = 1 << 14; + Trace.TRACE_TAG_RS = 1 << 15; + Trace.TRACE_TAG_NOT_READY = 1 << 63; + Trace.MAX_SECTION_NAME_LEN = 127; + Trace.sEnabledTags = Trace.TRACE_TAG_NOT_READY; + os.Trace = Trace; + })(os = android.os || (android.os = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var KeyEvent = android.view.KeyEvent; + class InputType { + } + InputType.TYPE_MASK_CLASS = 0x0000000f; + InputType.TYPE_MASK_VARIATION = 0x00000ff0; + InputType.TYPE_MASK_FLAGS = 0x00fff000; + InputType.TYPE_NULL = 0x00000000; + InputType.TYPE_CLASS_TEXT = 0x00000001; + InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS = 0x00001000; + InputType.TYPE_TEXT_FLAG_CAP_WORDS = 0x00002000; + InputType.TYPE_TEXT_FLAG_CAP_SENTENCES = 0x00004000; + InputType.TYPE_TEXT_FLAG_AUTO_CORRECT = 0x00008000; + InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE = 0x00010000; + InputType.TYPE_TEXT_FLAG_MULTI_LINE = 0x00020000; + InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000; + InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS = 0x00080000; + InputType.TYPE_TEXT_VARIATION_NORMAL = 0x00000000; + InputType.TYPE_TEXT_VARIATION_URI = 0x00000010; + InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020; + InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 0x00000030; + InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE = 0x00000040; + InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE = 0x00000050; + InputType.TYPE_TEXT_VARIATION_PERSON_NAME = 0x00000060; + InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 0x00000070; + InputType.TYPE_TEXT_VARIATION_PASSWORD = 0x00000080; + InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090; + InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x000000a0; + InputType.TYPE_TEXT_VARIATION_FILTER = 0x000000b0; + InputType.TYPE_TEXT_VARIATION_PHONETIC = 0x000000c0; + InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 0x000000d0; + InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD = 0x000000e0; + InputType.TYPE_CLASS_NUMBER = 0x00000002; + InputType.TYPE_NUMBER_FLAG_SIGNED = 0x00001000; + InputType.TYPE_NUMBER_FLAG_DECIMAL = 0x00002000; + InputType.TYPE_NUMBER_VARIATION_NORMAL = 0x00000000; + InputType.TYPE_NUMBER_VARIATION_PASSWORD = 0x00000010; + InputType.TYPE_CLASS_PHONE = 0x00000003; + InputType.TYPE_CLASS_DATETIME = 0x00000004; + InputType.TYPE_DATETIME_VARIATION_NORMAL = 0x00000000; + InputType.TYPE_DATETIME_VARIATION_DATE = 0x00000010; + InputType.TYPE_DATETIME_VARIATION_TIME = 0x00000020; + text.InputType = InputType; + (function (InputType) { + class LimitCode { } - drawVerticalDivider(canvas, left) { - this.mDivider.setBounds(left, this.getPaddingTop() + this.mDividerPadding, left + this.mDividerWidth, this.getHeight() - this.getPaddingBottom() - this.mDividerPadding); - this.mDivider.draw(canvas); + LimitCode.TYPE_CLASS_NUMBER = [ + KeyEvent.KEYCODE_Digit0, + KeyEvent.KEYCODE_Digit1, + KeyEvent.KEYCODE_Digit2, + KeyEvent.KEYCODE_Digit3, + KeyEvent.KEYCODE_Digit4, + KeyEvent.KEYCODE_Digit5, + KeyEvent.KEYCODE_Digit6, + KeyEvent.KEYCODE_Digit7, + KeyEvent.KEYCODE_Digit8, + KeyEvent.KEYCODE_Digit9, + ]; + LimitCode.TYPE_CLASS_PHONE = [ + KeyEvent.KEYCODE_Comma, + KeyEvent.KEYCODE_Sharp, + KeyEvent.KEYCODE_Semicolon, + KeyEvent.KEYCODE_Asterisk, + KeyEvent.KEYCODE_Left_Parenthesis, + KeyEvent.KEYCODE_Right_Parenthesis, + KeyEvent.KEYCODE_Slash, + KeyEvent.KEYCODE_KeyN, + KeyEvent.KEYCODE_Period, + KeyEvent.KEYCODE_SPACE, + KeyEvent.KEYCODE_Add, + KeyEvent.KEYCODE_Minus, + KeyEvent.KEYCODE_Period, + KeyEvent.KEYCODE_Digit0, + KeyEvent.KEYCODE_Digit1, + KeyEvent.KEYCODE_Digit2, + KeyEvent.KEYCODE_Digit3, + KeyEvent.KEYCODE_Digit4, + KeyEvent.KEYCODE_Digit5, + KeyEvent.KEYCODE_Digit6, + KeyEvent.KEYCODE_Digit7, + KeyEvent.KEYCODE_Digit8, + KeyEvent.KEYCODE_Digit9, + ]; + InputType.LimitCode = LimitCode; + })(InputType = text.InputType || (text.InputType = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var util; + (function (util) { + class LongSparseArray extends util.SparseArray { + } + util.LongSparseArray = LongSparseArray; + })(util = android.util || (android.util = {})); +})(android || (android = {})); +var android; +(function (android) { + var view; + (function (view) { + class HapticFeedbackConstants { + } + HapticFeedbackConstants.LONG_PRESS = 0; + HapticFeedbackConstants.VIRTUAL_KEY = 1; + HapticFeedbackConstants.KEYBOARD_TAP = 3; + HapticFeedbackConstants.SAFE_MODE_DISABLED = 10000; + HapticFeedbackConstants.SAFE_MODE_ENABLED = 10001; + HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING = 0x0001; + HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING = 0x0002; + view.HapticFeedbackConstants = HapticFeedbackConstants; + })(view = android.view || (android.view = {})); +})(android || (android = {})); +var android; +(function (android) { + var database; + (function (database) { + class DataSetObserver { + onChanged() { } - isBaselineAligned() { - return this.mBaselineAligned; + onInvalidated() { } - setBaselineAligned(baselineAligned) { - this.mBaselineAligned = baselineAligned; + } + database.DataSetObserver = DataSetObserver; + })(database = android.database || (android.database = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var DataSetObserver = android.database.DataSetObserver; + var SystemClock = android.os.SystemClock; + var SoundEffectConstants = android.view.SoundEffectConstants; + var View = android.view.View; + var ViewGroup = android.view.ViewGroup; + var Long = java.lang.Long; + class AdapterView extends ViewGroup { + constructor() { + super(...arguments); + this.mFirstPosition = 0; + this.mSpecificTop = 0; + this.mSyncPosition = 0; + this.mSyncRowId = AdapterView.INVALID_ROW_ID; + this.mSyncHeight = 0; + this.mNeedSync = false; + this.mSyncMode = 0; + this.mLayoutHeight = 0; + this.mInLayout = false; + this.mNextSelectedPosition = AdapterView.INVALID_POSITION; + this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; + this.mSelectedPosition = AdapterView.INVALID_POSITION; + this.mSelectedRowId = AdapterView.INVALID_ROW_ID; + this.mItemCount = 0; + this.mOldItemCount = 0; + this.mOldSelectedPosition = AdapterView.INVALID_POSITION; + this.mOldSelectedRowId = AdapterView.INVALID_ROW_ID; + this.mBlockLayoutRequests = false; } - isMeasureWithLargestChildEnabled() { - return this.mUseLargestChild; + setOnItemClickListener(listener) { + this.mOnItemClickListener = listener; } - setMeasureWithLargestChildEnabled(enabled) { - this.mUseLargestChild = enabled; + getOnItemClickListener() { + return this.mOnItemClickListener; } - getBaseline() { - if (this.mBaselineAlignedChildIndex < 0) { - return super.getBaseline(); + performItemClick(view, position, id) { + if (this.mOnItemClickListener != null) { + this.playSoundEffect(SoundEffectConstants.CLICK); + this.mOnItemClickListener.onItemClick(this, view, position, id); + return true; } - if (this.getChildCount() <= this.mBaselineAlignedChildIndex) { - throw new Error("mBaselineAlignedChildIndex of LinearLayout " - + "set to an index that is out of bounds."); + return false; + } + setOnItemLongClickListener(listener) { + if (!this.isLongClickable()) { + this.setLongClickable(true); } - const child = this.getChildAt(this.mBaselineAlignedChildIndex); - const childBaseline = child.getBaseline(); - if (childBaseline == -1) { - if (this.mBaselineAlignedChildIndex == 0) { - return -1; - } - throw new Error("mBaselineAlignedChildIndex of LinearLayout " - + "points to a View that doesn't know how to get its baseline."); - } - let childTop = this.mBaselineChildTop; - if (this.mOrientation == LinearLayout.VERTICAL) { - const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - if (majorGravity != Gravity.TOP) { - switch (majorGravity) { - case Gravity.BOTTOM: - childTop = this.mBottom - this.mTop - this.mPaddingBottom - this.mTotalLength; - break; - case Gravity.CENTER_VERTICAL: - childTop += ((this.mBottom - this.mTop - this.mPaddingTop - this.mPaddingBottom) - - this.mTotalLength) / 2; - break; - } - } - } - let lp = child.getLayoutParams(); - return childTop + lp.topMargin + childBaseline; + this.mOnItemLongClickListener = listener; } - getBaselineAlignedChildIndex() { - return this.mBaselineAlignedChildIndex; + getOnItemLongClickListener() { + return this.mOnItemLongClickListener; } - setBaselineAlignedChildIndex(i) { - if ((i < 0) || (i >= this.getChildCount())) { - throw new Error("base aligned child index out " - + "of range (0, " + this.getChildCount() + ")"); - } - this.mBaselineAlignedChildIndex = i; + setOnItemSelectedListener(listener) { + this.mOnItemSelectedListener = listener; } - getVirtualChildAt(index) { - return this.getChildAt(index); + getOnItemSelectedListener() { + return this.mOnItemSelectedListener; } - getVirtualChildCount() { - return this.getChildCount(); + addView(...args) { + throw Error(`new UnsupportedOperationException("addView() is not supported in AdapterView")`); } - getWeightSum() { - return this.mWeightSum; + removeView(child) { + throw Error(`new UnsupportedOperationException("removeView(View) is not supported in AdapterView")`); } - setWeightSum(weightSum) { - this.mWeightSum = Math.max(0, weightSum); + removeViewAt(index) { + throw Error(`new UnsupportedOperationException("removeViewAt(int) is not supported in AdapterView")`); } - onMeasure(widthMeasureSpec, heightMeasureSpec) { - if (this.mOrientation == LinearLayout.VERTICAL) { - this.measureVertical(widthMeasureSpec, heightMeasureSpec); + removeAllViews() { + throw Error(`new UnsupportedOperationException("removeAllViews() is not supported in AdapterView")`); + } + onLayout(changed, left, top, right, bottom) { + this.mLayoutHeight = this.getHeight(); + } + getSelectedItemPosition() { + return this.mNextSelectedPosition; + } + getSelectedItemId() { + return this.mNextSelectedRowId; + } + getSelectedItem() { + let adapter = this.getAdapter(); + let selection = this.getSelectedItemPosition(); + if (adapter != null && adapter.getCount() > 0 && selection >= 0) { + return adapter.getItem(selection); } else { - this.measureHorizontal(widthMeasureSpec, heightMeasureSpec); + return null; } } - hasDividerBeforeChildAt(childIndex) { - if (childIndex == 0) { - return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_BEGINNING) != 0; + getCount() { + return this.mItemCount; + } + getPositionForView(view) { + let listItem = view; + try { + let v; + while (!((v = listItem.getParent()) == (this))) { + listItem = v; + } } - else if (childIndex == this.getChildCount()) { - return (this.mShowDividers & LinearLayout.SHOW_DIVIDER_END) != 0; + catch (e) { + return AdapterView.INVALID_POSITION; } - else if ((this.mShowDividers & LinearLayout.SHOW_DIVIDER_MIDDLE) != 0) { - let hasVisibleViewBefore = false; - for (let i = childIndex - 1; i >= 0; i--) { - if (this.getChildAt(i).getVisibility() != LinearLayout.GONE) { - hasVisibleViewBefore = true; - break; - } + const childCount = this.getChildCount(); + for (let i = 0; i < childCount; i++) { + if (this.getChildAt(i) == (listItem)) { + return this.mFirstPosition + i; } - return hasVisibleViewBefore; } + return AdapterView.INVALID_POSITION; + } + getFirstVisiblePosition() { + return this.mFirstPosition; + } + getLastVisiblePosition() { + return this.mFirstPosition + this.getChildCount() - 1; + } + setEmptyView(emptyView) { + this.mEmptyView = emptyView; + const adapter = this.getAdapter(); + const empty = ((adapter == null) || adapter.isEmpty()); + this.updateEmptyStatus(empty); + } + getEmptyView() { + return this.mEmptyView; + } + isInFilterMode() { return false; } - measureVertical(widthMeasureSpec, heightMeasureSpec) { - this.mTotalLength = 0; - let maxWidth = 0; - let childState = 0; - let alternativeMaxWidth = 0; - let weightedMaxWidth = 0; - let allFillParent = true; - let totalWeight = 0; - const count = this.getVirtualChildCount(); - const widthMode = MeasureSpec.getMode(widthMeasureSpec); - const heightMode = MeasureSpec.getMode(heightMeasureSpec); - let matchWidth = false; - const baselineChildIndex = this.mBaselineAlignedChildIndex; - const useLargestChild = this.mUseLargestChild; - let largestChildHeight = Number.MIN_SAFE_INTEGER; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child == null) { - this.mTotalLength += this.measureNullChild(i); - continue; - } - if (child.getVisibility() == View.GONE) { - i += this.getChildrenSkipCount(child, i); - continue; - } - if (this.hasDividerBeforeChildAt(i)) { - this.mTotalLength += this.mDividerHeight; - } - let lp = child.getLayoutParams(); - totalWeight += lp.weight; - if (heightMode == MeasureSpec.EXACTLY && lp.height == 0 && lp.weight > 0) { - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + lp.topMargin + lp.bottomMargin); + setFocusable(focusable) { + const adapter = this.getAdapter(); + const empty = adapter == null || adapter.getCount() == 0; + this.mDesiredFocusableState = focusable; + if (!focusable) { + this.mDesiredFocusableInTouchModeState = false; + } + super.setFocusable(focusable && (!empty || this.isInFilterMode())); + } + setFocusableInTouchMode(focusable) { + const adapter = this.getAdapter(); + const empty = adapter == null || adapter.getCount() == 0; + this.mDesiredFocusableInTouchModeState = focusable; + if (focusable) { + this.mDesiredFocusableState = true; + } + super.setFocusableInTouchMode(focusable && (!empty || this.isInFilterMode())); + } + checkFocus() { + const adapter = this.getAdapter(); + const empty = adapter == null || adapter.getCount() == 0; + const focusable = !empty || this.isInFilterMode(); + super.setFocusableInTouchMode(focusable && this.mDesiredFocusableInTouchModeState); + super.setFocusable(focusable && this.mDesiredFocusableState); + if (this.mEmptyView != null) { + this.updateEmptyStatus((adapter == null) || adapter.isEmpty()); + } + } + updateEmptyStatus(empty) { + if (this.isInFilterMode()) { + empty = false; + } + if (empty) { + if (this.mEmptyView != null) { + this.mEmptyView.setVisibility(View.VISIBLE); + this.setVisibility(View.GONE); } else { - let oldHeight = Number.MIN_SAFE_INTEGER; - if (lp.height == 0 && lp.weight > 0) { - oldHeight = 0; - lp.height = LinearLayout.LayoutParams.WRAP_CONTENT; - } - this.measureChildBeforeLayout(child, i, widthMeasureSpec, 0, heightMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0); - if (oldHeight != Number.MIN_SAFE_INTEGER) { - lp.height = oldHeight; - } - const childHeight = child.getMeasuredHeight(); - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + childHeight + lp.topMargin + - lp.bottomMargin + this.getNextLocationOffset(child)); - if (useLargestChild) { - largestChildHeight = Math.max(childHeight, largestChildHeight); - } - } - if ((baselineChildIndex >= 0) && (baselineChildIndex == i + 1)) { - this.mBaselineChildTop = this.mTotalLength; - } - if (i < baselineChildIndex && lp.weight > 0) { - throw new Error("A child of LinearLayout with index " - + "less than mBaselineAlignedChildIndex has weight > 0, which " - + "won't work. Either remove the weight, or don't set " - + "mBaselineAlignedChildIndex."); + this.setVisibility(View.VISIBLE); } - let matchWidthLocally = false; - if (widthMode != MeasureSpec.EXACTLY && lp.width == LinearLayout.LayoutParams.MATCH_PARENT) { - matchWidth = true; - matchWidthLocally = true; + if (this.mDataChanged) { + this.onLayout(false, this.mLeft, this.mTop, this.mRight, this.mBottom); } - const margin = lp.leftMargin + lp.rightMargin; - const measuredWidth = child.getMeasuredWidth() + margin; - maxWidth = Math.max(maxWidth, measuredWidth); - childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()); - allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT; - if (lp.weight > 0) { - weightedMaxWidth = Math.max(weightedMaxWidth, matchWidthLocally ? margin : measuredWidth); + } + else { + if (this.mEmptyView != null) + this.mEmptyView.setVisibility(View.GONE); + this.setVisibility(View.VISIBLE); + } + } + getItemAtPosition(position) { + let adapter = this.getAdapter(); + return (adapter == null || position < 0) ? null : adapter.getItem(position); + } + getItemIdAtPosition(position) { + let adapter = this.getAdapter(); + return (adapter == null || position < 0) ? AdapterView.INVALID_ROW_ID : adapter.getItemId(position); + } + setOnClickListener(l) { + throw Error(`new RuntimeException("Don't call setOnClickListener for an AdapterView. " + "You probably want setOnItemClickListener instead")`); + } + onDetachedFromWindow() { + super.onDetachedFromWindow(); + this.removeCallbacks(this.mSelectionNotifier); + } + selectionChanged() { + if (this.mOnItemSelectedListener != null) { + if (this.mInLayout || this.mBlockLayoutRequests) { + if (this.mSelectionNotifier == null) { + this.mSelectionNotifier = new SelectionNotifier(this); + } + this.post(this.mSelectionNotifier); } else { - alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth); + this.fireOnSelected(); + this.performAccessibilityActionsOnSelected(); } - i += this.getChildrenSkipCount(child, i); } - if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) { - this.mTotalLength += this.mDividerHeight; + } + fireOnSelected() { + if (this.mOnItemSelectedListener == null) { + return; } - if (useLargestChild && - (heightMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.UNSPECIFIED)) { - this.mTotalLength = 0; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child == null) { - this.mTotalLength += this.measureNullChild(i); - continue; - } - if (child.getVisibility() == View.GONE) { - i += this.getChildrenSkipCount(child, i); - continue; - } - const lp = child.getLayoutParams(); - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + largestChildHeight + - lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child)); - } + const selection = this.getSelectedItemPosition(); + if (selection >= 0) { + let v = this.getSelectedView(); + this.mOnItemSelectedListener.onItemSelected(this, v, selection, this.getAdapter().getItemId(selection)); } - this.mTotalLength += this.mPaddingTop + this.mPaddingBottom; - let heightSize = this.mTotalLength; - heightSize = Math.max(heightSize, this.getSuggestedMinimumHeight()); - let heightSizeAndState = LinearLayout.resolveSizeAndState(heightSize, heightMeasureSpec, 0); - heightSize = heightSizeAndState & View.MEASURED_SIZE_MASK; - let delta = heightSize - this.mTotalLength; - if (delta != 0 && totalWeight > 0) { - let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight; - this.mTotalLength = 0; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child.getVisibility() == View.GONE) { - continue; - } - let lp = child.getLayoutParams(); - let childExtra = lp.weight; - if (childExtra > 0) { - let share = (childExtra * delta / weightSum); - weightSum -= childExtra; - delta -= share; - const childWidthMeasureSpec = LinearLayout.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + - lp.leftMargin + lp.rightMargin, lp.width); - if ((lp.height != 0) || (heightMode != MeasureSpec.EXACTLY)) { - let childHeight = child.getMeasuredHeight() + share; - if (childHeight < 0) { - childHeight = 0; - } - child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY)); - } - else { - child.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY)); + else { + this.mOnItemSelectedListener.onNothingSelected(this); + } + } + performAccessibilityActionsOnSelected() { + } + isScrollableForAccessibility() { + let adapter = this.getAdapter(); + if (adapter != null) { + const itemCount = adapter.getCount(); + return itemCount > 0 && (this.getFirstVisiblePosition() > 0 || this.getLastVisiblePosition() < itemCount - 1); + } + return false; + } + canAnimate() { + return super.canAnimate() && this.mItemCount > 0; + } + handleDataChanged() { + const count = this.mItemCount; + let found = false; + if (count > 0) { + let newPos; + if (this.mNeedSync) { + this.mNeedSync = false; + newPos = this.findSyncPosition(); + if (newPos >= 0) { + let selectablePos = this.lookForSelectablePosition(newPos, true); + if (selectablePos == newPos) { + this.setNextSelectedPositionInt(newPos); + found = true; } - childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() - & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT)); } - const margin = lp.leftMargin + lp.rightMargin; - const measuredWidth = child.getMeasuredWidth() + margin; - maxWidth = Math.max(maxWidth, measuredWidth); - let matchWidthLocally = widthMode != MeasureSpec.EXACTLY && - lp.width == LinearLayout.LayoutParams.MATCH_PARENT; - alternativeMaxWidth = Math.max(alternativeMaxWidth, matchWidthLocally ? margin : measuredWidth); - allFillParent = allFillParent && lp.width == LinearLayout.LayoutParams.MATCH_PARENT; - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredHeight() + - lp.topMargin + lp.bottomMargin + this.getNextLocationOffset(child)); } - this.mTotalLength += this.mPaddingTop + this.mPaddingBottom; - } - else { - alternativeMaxWidth = Math.max(alternativeMaxWidth, weightedMaxWidth); - if (useLargestChild && heightMode != MeasureSpec.EXACTLY) { - for (let i = 0; i < count; i++) { - const child = this.getVirtualChildAt(i); - if (child == null || child.getVisibility() == View.GONE) { - continue; - } - const lp = child.getLayoutParams(); - let childExtra = lp.weight; - if (childExtra > 0) { - child.measure(MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(largestChildHeight, MeasureSpec.EXACTLY)); - } + if (!found) { + newPos = this.getSelectedItemPosition(); + if (newPos >= count) { + newPos = count - 1; + } + if (newPos < 0) { + newPos = 0; + } + let selectablePos = this.lookForSelectablePosition(newPos, true); + if (selectablePos < 0) { + selectablePos = this.lookForSelectablePosition(newPos, false); + } + if (selectablePos >= 0) { + this.setNextSelectedPositionInt(selectablePos); + this.checkSelectionChanged(); + found = true; } } } - if (!allFillParent && widthMode != MeasureSpec.EXACTLY) { - maxWidth = alternativeMaxWidth; - } - maxWidth += this.mPaddingLeft + this.mPaddingRight; - maxWidth = Math.max(maxWidth, this.getSuggestedMinimumWidth()); - this.setMeasuredDimension(LinearLayout.resolveSizeAndState(maxWidth, widthMeasureSpec, childState), heightSizeAndState); - if (matchWidth) { - this.forceUniformWidth(count, heightMeasureSpec); + if (!found) { + this.mSelectedPosition = AdapterView.INVALID_POSITION; + this.mSelectedRowId = AdapterView.INVALID_ROW_ID; + this.mNextSelectedPosition = AdapterView.INVALID_POSITION; + this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; + this.mNeedSync = false; + this.checkSelectionChanged(); } } - forceUniformWidth(count, heightMeasureSpec) { - let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredWidth(), MeasureSpec.EXACTLY); - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child.getVisibility() != View.GONE) { - let lp = child.getLayoutParams(); - if (lp.width == LinearLayout.LayoutParams.MATCH_PARENT) { - let oldHeight = lp.height; - lp.height = child.getMeasuredHeight(); - this.measureChildWithMargins(child, uniformMeasureSpec, 0, heightMeasureSpec, 0); - lp.height = oldHeight; - } - } + checkSelectionChanged() { + if ((this.mSelectedPosition != this.mOldSelectedPosition) || (this.mSelectedRowId != this.mOldSelectedRowId)) { + this.selectionChanged(); + this.mOldSelectedPosition = this.mSelectedPosition; + this.mOldSelectedRowId = this.mSelectedRowId; } } - measureHorizontal(widthMeasureSpec, heightMeasureSpec) { - this.mTotalLength = 0; - let maxHeight = 0; - let childState = 0; - let alternativeMaxHeight = 0; - let weightedMaxHeight = 0; - let allFillParent = true; - let totalWeight = 0; - const count = this.getVirtualChildCount(); - const widthMode = MeasureSpec.getMode(widthMeasureSpec); - const heightMode = MeasureSpec.getMode(heightMeasureSpec); - let matchHeight = false; - if (this.mMaxAscent == null || this.mMaxDescent == null) { - this.mMaxAscent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT); - this.mMaxDescent = androidui.util.ArrayCreator.newNumberArray(LinearLayout.VERTICAL_GRAVITY_COUNT); + findSyncPosition() { + let count = this.mItemCount; + if (count == 0) { + return AdapterView.INVALID_POSITION; } - let maxAscent = this.mMaxAscent; - let maxDescent = this.mMaxDescent; - maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1; - maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1; - const baselineAligned = this.mBaselineAligned; - const useLargestChild = this.mUseLargestChild; - const isExactly = widthMode == MeasureSpec.EXACTLY; - let largestChildWidth = Number.MAX_SAFE_INTEGER; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child == null) { - this.mTotalLength += this.measureNullChild(i); - continue; + let idToMatch = this.mSyncRowId; + let seed = this.mSyncPosition; + if (idToMatch == AdapterView.INVALID_ROW_ID) { + return AdapterView.INVALID_POSITION; + } + seed = Math.max(0, seed); + seed = Math.min(count - 1, seed); + let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS; + let rowId; + let first = seed; + let last = seed; + let next = false; + let hitFirst; + let hitLast; + let adapter = this.getAdapter(); + if (adapter == null) { + return AdapterView.INVALID_POSITION; + } + while (SystemClock.uptimeMillis() <= endTime) { + rowId = adapter.getItemId(seed); + if (rowId == idToMatch) { + return seed; } - if (child.getVisibility() == View.GONE) { - i += this.getChildrenSkipCount(child, i); - continue; + hitLast = last == count - 1; + hitFirst = first == 0; + if (hitLast && hitFirst) { + break; } - if (this.hasDividerBeforeChildAt(i)) { - this.mTotalLength += this.mDividerWidth; + if (hitFirst || (next && !hitLast)) { + last++; + seed = last; + next = false; } - const lp = child.getLayoutParams(); - totalWeight += lp.weight; - if (widthMode == MeasureSpec.EXACTLY && lp.width == 0 && lp.weight > 0) { - if (isExactly) { - this.mTotalLength += lp.leftMargin + lp.rightMargin; - } - else { - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + - lp.leftMargin + lp.rightMargin); - } - if (baselineAligned) { - const freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); - child.measure(freeSpec, freeSpec); - } + else if (hitLast || (!next && !hitFirst)) { + first--; + seed = first; + next = true; } - else { - let oldWidth = Number.MIN_SAFE_INTEGER; - if (lp.width == 0 && lp.weight > 0) { - oldWidth = 0; - lp.width = LinearLayout.LayoutParams.WRAP_CONTENT; - } - this.measureChildBeforeLayout(child, i, widthMeasureSpec, totalWeight == 0 ? this.mTotalLength : 0, heightMeasureSpec, 0); - if (oldWidth != Number.MIN_SAFE_INTEGER) { - lp.width = oldWidth; + } + return AdapterView.INVALID_POSITION; + } + lookForSelectablePosition(position, lookDown) { + return position; + } + setSelectedPositionInt(position) { + this.mSelectedPosition = position; + this.mSelectedRowId = this.getItemIdAtPosition(position); + } + setNextSelectedPositionInt(position) { + this.mNextSelectedPosition = position; + this.mNextSelectedRowId = this.getItemIdAtPosition(position); + if (this.mNeedSync && this.mSyncMode == AdapterView.SYNC_SELECTED_POSITION && position >= 0) { + this.mSyncPosition = position; + this.mSyncRowId = this.mNextSelectedRowId; + } + } + rememberSyncState() { + if (this.getChildCount() > 0) { + this.mNeedSync = true; + this.mSyncHeight = this.mLayoutHeight; + if (this.mSelectedPosition >= 0) { + let v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); + this.mSyncRowId = this.mNextSelectedRowId; + this.mSyncPosition = this.mNextSelectedPosition; + if (v != null) { + this.mSpecificTop = v.getTop(); } - const childWidth = child.getMeasuredWidth(); - if (isExactly) { - this.mTotalLength += childWidth + lp.leftMargin + lp.rightMargin + - this.getNextLocationOffset(child); + this.mSyncMode = AdapterView.SYNC_SELECTED_POSITION; + } + else { + let v = this.getChildAt(0); + let adapter = this.getAdapter(); + if (this.mFirstPosition >= 0 && this.mFirstPosition < adapter.getCount()) { + this.mSyncRowId = adapter.getItemId(this.mFirstPosition); } else { - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + childWidth + lp.leftMargin + - lp.rightMargin + this.getNextLocationOffset(child)); - } - if (useLargestChild) { - largestChildWidth = Math.max(childWidth, largestChildWidth); + this.mSyncRowId = AdapterView.NO_ID; } - } - let matchHeightLocally = false; - if (heightMode != MeasureSpec.EXACTLY && lp.height == LinearLayout.LayoutParams.MATCH_PARENT) { - matchHeight = true; - matchHeightLocally = true; - } - const margin = lp.topMargin + lp.bottomMargin; - const childHeight = child.getMeasuredHeight() + margin; - childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState()); - if (baselineAligned) { - const childBaseline = child.getBaseline(); - if (childBaseline != -1) { - const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity) - & Gravity.VERTICAL_GRAVITY_MASK; - const index = ((gravity >> Gravity.AXIS_Y_SHIFT) - & ~Gravity.AXIS_SPECIFIED) >> 1; - maxAscent[index] = Math.max(maxAscent[index], childBaseline); - maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline); + this.mSyncPosition = this.mFirstPosition; + if (v != null) { + this.mSpecificTop = v.getTop(); } + this.mSyncMode = AdapterView.SYNC_FIRST_POSITION; } - maxHeight = Math.max(maxHeight, childHeight); - allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT; - if (lp.weight > 0) { - weightedMaxHeight = Math.max(weightedMaxHeight, matchHeightLocally ? margin : childHeight); - } - else { - alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight); - } - i += this.getChildrenSkipCount(child, i); } - if (this.mTotalLength > 0 && this.hasDividerBeforeChildAt(count)) { - this.mTotalLength += this.mDividerWidth; + } + } + AdapterView.ITEM_VIEW_TYPE_IGNORE = -1; + AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; + AdapterView.SYNC_SELECTED_POSITION = 0; + AdapterView.SYNC_FIRST_POSITION = 1; + AdapterView.SYNC_MAX_DURATION_MILLIS = 100; + AdapterView.INVALID_POSITION = -1; + AdapterView.INVALID_ROW_ID = Long.MIN_VALUE; + widget.AdapterView = AdapterView; + (function (AdapterView) { + class AdapterDataSetObserver extends DataSetObserver { + constructor(AdapterView_this) { + super(); + this.AdapterView_this = AdapterView_this; } - if (maxAscent[LinearLayout.INDEX_TOP] != -1 || - maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 || - maxAscent[LinearLayout.INDEX_BOTTOM] != -1 || - maxAscent[LinearLayout.INDEX_FILL] != -1) { - const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM]))); - const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM]))); - maxHeight = Math.max(maxHeight, ascent + descent); + onChanged() { + this.AdapterView_this.mDataChanged = true; + this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount; + this.AdapterView_this.mItemCount = this.AdapterView_this.getAdapter().getCount(); + this.AdapterView_this.rememberSyncState(); + this.AdapterView_this.checkFocus(); + this.AdapterView_this.requestLayout(); } - if (useLargestChild && - (widthMode == MeasureSpec.AT_MOST || widthMode == MeasureSpec.UNSPECIFIED)) { - this.mTotalLength = 0; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child == null) { - this.mTotalLength += this.measureNullChild(i); - continue; - } - if (child.getVisibility() == View.GONE) { - i += this.getChildrenSkipCount(child, i); - continue; - } - const lp = child.getLayoutParams(); - if (isExactly) { - this.mTotalLength += largestChildWidth + lp.leftMargin + lp.rightMargin + - this.getNextLocationOffset(child); - } - else { - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + largestChildWidth + - lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child)); - } - } + onInvalidated() { + this.AdapterView_this.mDataChanged = true; + this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount; + this.AdapterView_this.mItemCount = 0; + this.AdapterView_this.mSelectedPosition = AdapterView.INVALID_POSITION; + this.AdapterView_this.mSelectedRowId = AdapterView.INVALID_ROW_ID; + this.AdapterView_this.mNextSelectedPosition = AdapterView.INVALID_POSITION; + this.AdapterView_this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; + this.AdapterView_this.mNeedSync = false; + this.AdapterView_this.checkFocus(); + this.AdapterView_this.requestLayout(); } - this.mTotalLength += this.mPaddingLeft + this.mPaddingRight; - let widthSize = this.mTotalLength; - widthSize = Math.max(widthSize, this.getSuggestedMinimumWidth()); - let widthSizeAndState = LinearLayout.resolveSizeAndState(widthSize, widthMeasureSpec, 0); - widthSize = widthSizeAndState & View.MEASURED_SIZE_MASK; - let delta = widthSize - this.mTotalLength; - if (delta != 0 && totalWeight > 0) { - let weightSum = this.mWeightSum > 0 ? this.mWeightSum : totalWeight; - maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1; - maxDescent[0] = maxDescent[1] = maxDescent[2] = maxDescent[3] = -1; - maxHeight = -1; - this.mTotalLength = 0; - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child == null || child.getVisibility() == View.GONE) { - continue; - } - const lp = child.getLayoutParams(); - let childExtra = lp.weight; - if (childExtra > 0) { - let share = (childExtra * delta / weightSum); - weightSum -= childExtra; - delta -= share; - const childHeightMeasureSpec = LinearLayout.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin, lp.height); - if ((lp.width != 0) || (widthMode != MeasureSpec.EXACTLY)) { - let childWidth = child.getMeasuredWidth() + share; - if (childWidth < 0) { - childWidth = 0; - } - child.measure(MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY), childHeightMeasureSpec); - } - else { - child.measure(MeasureSpec.makeMeasureSpec(share > 0 ? share : 0, MeasureSpec.EXACTLY), childHeightMeasureSpec); - } - childState = LinearLayout.combineMeasuredStates(childState, child.getMeasuredState() & View.MEASURED_STATE_MASK); - } - if (isExactly) { - this.mTotalLength += child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin + - this.getNextLocationOffset(child); - } - else { - const totalLength = this.mTotalLength; - this.mTotalLength = Math.max(totalLength, totalLength + child.getMeasuredWidth() + - lp.leftMargin + lp.rightMargin + this.getNextLocationOffset(child)); - } - let matchHeightLocally = heightMode != MeasureSpec.EXACTLY && - lp.height == LinearLayout.LayoutParams.MATCH_PARENT; - const margin = lp.topMargin + lp.bottomMargin; - let childHeight = child.getMeasuredHeight() + margin; - maxHeight = Math.max(maxHeight, childHeight); - alternativeMaxHeight = Math.max(alternativeMaxHeight, matchHeightLocally ? margin : childHeight); - allFillParent = allFillParent && lp.height == LinearLayout.LayoutParams.MATCH_PARENT; - if (baselineAligned) { - const childBaseline = child.getBaseline(); - if (childBaseline != -1) { - const gravity = (lp.gravity < 0 ? this.mGravity : lp.gravity) - & Gravity.VERTICAL_GRAVITY_MASK; - const index = ((gravity >> Gravity.AXIS_Y_SHIFT) - & ~Gravity.AXIS_SPECIFIED) >> 1; - maxAscent[index] = Math.max(maxAscent[index], childBaseline); - maxDescent[index] = Math.max(maxDescent[index], childHeight - childBaseline); - } - } - } - this.mTotalLength += this.mPaddingLeft + this.mPaddingRight; - if (maxAscent[LinearLayout.INDEX_TOP] != -1 || - maxAscent[LinearLayout.INDEX_CENTER_VERTICAL] != -1 || - maxAscent[LinearLayout.INDEX_BOTTOM] != -1 || - maxAscent[LinearLayout.INDEX_FILL] != -1) { - const ascent = Math.max(maxAscent[LinearLayout.INDEX_FILL], Math.max(maxAscent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxAscent[LinearLayout.INDEX_TOP], maxAscent[LinearLayout.INDEX_BOTTOM]))); - const descent = Math.max(maxDescent[LinearLayout.INDEX_FILL], Math.max(maxDescent[LinearLayout.INDEX_CENTER_VERTICAL], Math.max(maxDescent[LinearLayout.INDEX_TOP], maxDescent[LinearLayout.INDEX_BOTTOM]))); - maxHeight = Math.max(maxHeight, ascent + descent); + clearSavedState() { + } + } + AdapterView.AdapterDataSetObserver = AdapterDataSetObserver; + })(AdapterView = widget.AdapterView || (widget.AdapterView = {})); + class SelectionNotifier { + constructor(AdapterView_this) { + this.AdapterView_this = AdapterView_this; + } + run() { + if (this.AdapterView_this.mDataChanged) { + if (this.AdapterView_this.getAdapter() != null) { + this.AdapterView_this.post(this); } } else { - alternativeMaxHeight = Math.max(alternativeMaxHeight, weightedMaxHeight); - if (useLargestChild && widthMode != MeasureSpec.EXACTLY) { - for (let i = 0; i < count; i++) { - const child = this.getVirtualChildAt(i); - if (child == null || child.getVisibility() == View.GONE) { - continue; - } - const lp = child.getLayoutParams(); - let childExtra = lp.weight; - if (childExtra > 0) { - child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), MeasureSpec.EXACTLY)); - } - } - } + this.AdapterView_this.fireOnSelected(); + this.AdapterView_this.performAccessibilityActionsOnSelected(); } - if (!allFillParent && heightMode != MeasureSpec.EXACTLY) { - maxHeight = alternativeMaxHeight; + } + } + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var Integer = java.lang.Integer; + var Adapter; + (function (Adapter) { + Adapter.IGNORE_ITEM_VIEW_TYPE = widget.AdapterView.ITEM_VIEW_TYPE_IGNORE; + Adapter.NO_SELECTION = Integer.MIN_VALUE; + })(Adapter = widget.Adapter || (widget.Adapter = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text_8) { + var Paint = android.graphics.Paint; + var ParagraphStyle = android.text.style.ParagraphStyle; + var Layout = android.text.Layout; + var Spanned = android.text.Spanned; + var TextDirectionHeuristics = android.text.TextDirectionHeuristics; + var TextLine = android.text.TextLine; + var TextPaint = android.text.TextPaint; + var TextUtils = android.text.TextUtils; + class BoringLayout extends Layout { + constructor(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { + super(source, paint, outerwidth, align, TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingmult, spacingadd); + this.mBottom = 0; + this.mDesc = 0; + this.mTopPadding = 0; + this.mBottomPadding = 0; + this.mMax = 0; + this.mEllipsizedWidth = 0; + this.mEllipsizedStart = 0; + this.mEllipsizedCount = 0; + let trust; + if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) { + this.mEllipsizedWidth = outerwidth; + this.mEllipsizedStart = 0; + this.mEllipsizedCount = 0; + trust = true; } - maxHeight += this.mPaddingTop + this.mPaddingBottom; - maxHeight = Math.max(maxHeight, this.getSuggestedMinimumHeight()); - this.setMeasuredDimension(widthSizeAndState | (childState & View.MEASURED_STATE_MASK), LinearLayout.resolveSizeAndState(maxHeight, heightMeasureSpec, (childState << View.MEASURED_HEIGHT_STATE_SHIFT))); - if (matchHeight) { - this.forceUniformHeight(count, widthMeasureSpec); + else { + this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd); + this.mEllipsizedWidth = ellipsizedWidth; + trust = false; } + this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust); } - forceUniformHeight(count, widthMeasureSpec) { - let uniformMeasureSpec = MeasureSpec.makeMeasureSpec(this.getMeasuredHeight(), MeasureSpec.EXACTLY); - for (let i = 0; i < count; ++i) { - const child = this.getVirtualChildAt(i); - if (child.getVisibility() != View.GONE) { - let lp = child.getLayoutParams(); - if (lp.height == LinearLayout.LayoutParams.MATCH_PARENT) { - let oldWidth = lp.width; - lp.width = child.getMeasuredWidth(); - this.measureChildWithMargins(child, widthMeasureSpec, 0, uniformMeasureSpec, 0); - lp.width = oldWidth; + static make(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { + return new BoringLayout(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize, ellipsizedWidth); + } + replaceOrMake(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { + let trust; + if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) { + this.replaceWith(source, paint, outerwidth, align, spacingmult, spacingadd); + this.mEllipsizedWidth = outerwidth; + this.mEllipsizedStart = 0; + this.mEllipsizedCount = 0; + trust = true; + } + else { + this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd); + this.mEllipsizedWidth = ellipsizedWidth; + trust = false; + } + this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust); + return this; + } + init(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trustWidth) { + let spacing; + if (Object.getPrototypeOf(source) === String.prototype && align == Layout.Alignment.ALIGN_NORMAL) { + this.mDirect = source.toString(); + } + else { + this.mDirect = null; + } + this.mPaint = paint; + if (includepad) { + spacing = metrics.bottom - metrics.top; + } + else { + spacing = metrics.descent - metrics.ascent; + } + if (spacingmult != 1 || spacingadd != 0) { + spacing = Math.floor((spacing * spacingmult + spacingadd + 0.5)); + } + this.mBottom = spacing; + if (includepad) { + this.mDesc = spacing + metrics.top; + } + else { + this.mDesc = spacing + metrics.ascent; + } + if (trustWidth) { + this.mMax = metrics.width; + } + else { + let line = TextLine.obtain(); + line.set(paint, source, 0, source.length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null); + this.mMax = Math.floor(Math.ceil(line.metrics(null))); + TextLine.recycle(line); + } + if (includepad) { + this.mTopPadding = metrics.top - metrics.ascent; + this.mBottomPadding = metrics.bottom - metrics.descent; + } + } + static isBoring(text, paint, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics = null) { + let temp; + let length = text.length; + let boring = true; + outer: for (let i = 0; i < length; i += 500) { + let j = i + 500; + if (j > length) + j = length; + temp = text.substring(i, j); + let n = j - i; + for (let a = 0; a < n; a++) { + let c = temp[a]; + if (c == '\n' || c == '\t') { + boring = false; + break outer; } } + if (textDir != null && textDir.isRtl(temp, 0, n)) { + boring = false; + break outer; + } + } + if (boring && Spanned.isImplements(text)) { + let sp = text; + let styles = sp.getSpans(0, length, ParagraphStyle.type); + if (styles.length > 0) { + boring = false; + } + } + if (boring) { + let fm = metrics; + if (fm == null) { + fm = new BoringLayout.Metrics(); + } + let line = TextLine.obtain(); + line.set(paint, text, 0, length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null); + fm.width = Math.floor(Math.ceil(line.metrics(fm))); + TextLine.recycle(line); + return fm; + } + else { + return null; } } - getChildrenSkipCount(child, index) { - return 0; + getHeight() { + return this.mBottom; } - measureNullChild(childIndex) { - return 0; + getLineCount() { + return 1; } - measureChildBeforeLayout(child, childIndex, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight) { - this.measureChildWithMargins(child, widthMeasureSpec, totalWidth, heightMeasureSpec, totalHeight); + getLineTop(line) { + if (line == 0) + return 0; + else + return this.mBottom; } - getLocationOffset(child) { - return 0; + getLineDescent(line) { + return this.mDesc; } - getNextLocationOffset(child) { - return 0; + getLineStart(line) { + if (line == 0) + return 0; + else + return this.getText().length; } - onLayout(changed, l, t, r, b) { - if (this.mOrientation == LinearLayout.VERTICAL) { - this.layoutVertical(l, t, r, b); + getParagraphDirection(line) { + return BoringLayout.DIR_LEFT_TO_RIGHT; + } + getLineContainsTab(line) { + return false; + } + getLineMax(line) { + return this.mMax; + } + getLineDirections(line) { + return Layout.DIRS_ALL_LEFT_TO_RIGHT; + } + getTopPadding() { + return this.mTopPadding; + } + getBottomPadding() { + return this.mBottomPadding; + } + getEllipsisCount(line) { + return this.mEllipsizedCount; + } + getEllipsisStart(line) { + return this.mEllipsizedStart; + } + getEllipsizedWidth() { + return this.mEllipsizedWidth; + } + draw(c, highlight, highlightpaint, cursorOffset) { + if (this.mDirect != null && highlight == null) { + c.drawText(this.mDirect, 0, this.mBottom - this.mDesc, this.mPaint); } else { - this.layoutHorizontal(l, t, r, b); + super.draw(c, highlight, highlightpaint, cursorOffset); } } - layoutVertical(left, top, right, bottom) { - const paddingLeft = this.mPaddingLeft; - let childTop; - let childLeft; - const width = right - left; - let childRight = width - this.mPaddingRight; - let childSpace = width - paddingLeft - this.mPaddingRight; - const count = this.getVirtualChildCount(); - const majorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - const minorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; - switch (majorGravity) { - case Gravity.BOTTOM: - childTop = this.mPaddingTop + bottom - top - this.mTotalLength; - break; - case Gravity.CENTER_VERTICAL: - childTop = this.mPaddingTop + (bottom - top - this.mTotalLength) / 2; - break; - case Gravity.TOP: - default: - childTop = this.mPaddingTop; - break; + ellipsized(start, end) { + this.mEllipsizedStart = start; + this.mEllipsizedCount = end - start; + } + } + BoringLayout.FIRST_RIGHT_TO_LEFT = '֐'.codePointAt(0); + BoringLayout.sTemp = new TextPaint(); + text_8.BoringLayout = BoringLayout; + (function (BoringLayout) { + class Metrics extends Paint.FontMetricsInt { + constructor() { + super(...arguments); + this.width = 0; } - for (let i = 0; i < count; i++) { - const child = this.getVirtualChildAt(i); - if (child == null) { - childTop += this.measureNullChild(i); - } - else if (child.getVisibility() != View.GONE) { - const childWidth = child.getMeasuredWidth(); - const childHeight = child.getMeasuredHeight(); - const lp = child.getLayoutParams(); - let gravity = lp.gravity; - if (gravity < 0) { - gravity = minorGravity; - } - const absoluteGravity = gravity; - switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { - case Gravity.CENTER_HORIZONTAL: - childLeft = paddingLeft + ((childSpace - childWidth) / 2) - + lp.leftMargin - lp.rightMargin; - break; - case Gravity.RIGHT: - childLeft = childRight - childWidth - lp.rightMargin; - break; - case Gravity.LEFT: - default: - childLeft = paddingLeft + lp.leftMargin; - break; - } - if (this.hasDividerBeforeChildAt(i)) { - childTop += this.mDividerHeight; - } - childTop += lp.topMargin; - this.setChildFrame(child, childLeft, childTop + this.getLocationOffset(child), childWidth, childHeight); - childTop += childHeight + lp.bottomMargin + this.getNextLocationOffset(child); - i += this.getChildrenSkipCount(child, i); - } + toString() { + return super.toString() + " width=" + this.width; } } - layoutHorizontal(left, top, right, bottom) { - const isLayoutRtl = this.isLayoutRtl(); - const paddingTop = this.mPaddingTop; - let childTop; - let childLeft; - const height = bottom - top; - let childBottom = height - this.mPaddingBottom; - let childSpace = height - paddingTop - this.mPaddingBottom; - const count = this.getVirtualChildCount(); - const majorGravity = this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; - const minorGravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - const baselineAligned = this.mBaselineAligned; - const maxAscent = this.mMaxAscent; - const maxDescent = this.mMaxDescent; - let absoluteGravity = majorGravity; - switch (absoluteGravity) { - case Gravity.RIGHT: - childLeft = this.mPaddingLeft + right - left - this.mTotalLength; - break; - case Gravity.CENTER_HORIZONTAL: - childLeft = this.mPaddingLeft + (right - left - this.mTotalLength) / 2; - break; - case Gravity.LEFT: - default: - childLeft = this.mPaddingLeft; - break; + BoringLayout.Metrics = Metrics; + })(BoringLayout = text_8.BoringLayout || (text_8.BoringLayout = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var System = java.lang.System; + class PackedIntVector { + constructor(columns) { + this.mColumns = 0; + this.mRows = 0; + this.mRowGapStart = 0; + this.mRowGapLength = 0; + this.mColumns = columns; + this.mRows = 0; + this.mRowGapStart = 0; + this.mRowGapLength = this.mRows; + this.mValues = null; + this.mValueGap = androidui.util.ArrayCreator.newNumberArray(2 * columns); + } + getValue(row, column) { + const columns = this.mColumns; + if (((row | column) < 0) || (row >= this.size()) || (column >= columns)) { + throw Error(`new IndexOutOfBoundsException(row + ", " + column)`); } - let start = 0; - let dir = 1; - if (isLayoutRtl) { - start = count - 1; - dir = -1; + if (row >= this.mRowGapStart) { + row += this.mRowGapLength; } - for (let i = 0; i < count; i++) { - let childIndex = start + dir * i; - const child = this.getVirtualChildAt(childIndex); - if (child == null) { - childLeft += this.measureNullChild(childIndex); - } - else if (child.getVisibility() != View.GONE) { - const childWidth = child.getMeasuredWidth(); - const childHeight = child.getMeasuredHeight(); - let childBaseline = -1; - const lp = child.getLayoutParams(); - if (baselineAligned && lp.height != LinearLayout.LayoutParams.MATCH_PARENT) { - childBaseline = child.getBaseline(); - } - let gravity = lp.gravity; - if (gravity < 0) { - gravity = minorGravity; - } - switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) { - case Gravity.TOP: - childTop = paddingTop + lp.topMargin; - if (childBaseline != -1) { - childTop += maxAscent[LinearLayout.INDEX_TOP] - childBaseline; - } - break; - case Gravity.CENTER_VERTICAL: - childTop = paddingTop + ((childSpace - childHeight) / 2) - + lp.topMargin - lp.bottomMargin; - break; - case Gravity.BOTTOM: - childTop = childBottom - childHeight - lp.bottomMargin; - if (childBaseline != -1) { - let descent = child.getMeasuredHeight() - childBaseline; - childTop -= (maxDescent[LinearLayout.INDEX_BOTTOM] - descent); - } - break; - default: - childTop = paddingTop; - break; - } - if (this.hasDividerBeforeChildAt(childIndex)) { - childLeft += this.mDividerWidth; - } - childLeft += lp.leftMargin; - this.setChildFrame(child, childLeft + this.getLocationOffset(child), childTop, childWidth, childHeight); - childLeft += childWidth + lp.rightMargin + - this.getNextLocationOffset(child); - i += this.getChildrenSkipCount(child, childIndex); - } + let value = this.mValues[row * columns + column]; + let valuegap = this.mValueGap; + if (row >= valuegap[column]) { + value += valuegap[column + columns]; } + return value; } - setChildFrame(child, left, top, width, height) { - child.layout(left, top, left + width, top + height); + setValue(row, column, value) { + if (((row | column) < 0) || (row >= this.size()) || (column >= this.mColumns)) { + throw Error(`new IndexOutOfBoundsException(row + ", " + column)`); + } + if (row >= this.mRowGapStart) { + row += this.mRowGapLength; + } + let valuegap = this.mValueGap; + if (row >= valuegap[column]) { + value -= valuegap[column + this.mColumns]; + } + this.mValues[row * this.mColumns + column] = value; } - setOrientation(orientation) { - if (typeof orientation === 'string') { - if ('VERTICAL' === (orientation + '').toUpperCase()) - orientation = LinearLayout.VERTICAL; - else if ('HORIZONTAL' === (orientation + '').toUpperCase()) - orientation = LinearLayout.HORIZONTAL; + setValueInternal(row, column, value) { + if (row >= this.mRowGapStart) { + row += this.mRowGapLength; } - if (this.mOrientation != orientation) { - this.mOrientation = orientation; - this.requestLayout(); + let valuegap = this.mValueGap; + if (row >= valuegap[column]) { + value -= valuegap[column + this.mColumns]; } + this.mValues[row * this.mColumns + column] = value; } - getOrientation() { - return this.mOrientation; + adjustValuesBelow(startRow, column, delta) { + if (((startRow | column) < 0) || (startRow > this.size()) || (column >= this.width())) { + throw Error(`new IndexOutOfBoundsException(startRow + ", " + column)`); + } + if (startRow >= this.mRowGapStart) { + startRow += this.mRowGapLength; + } + this.moveValueGapTo(column, startRow); + this.mValueGap[column + this.mColumns] += delta; } - setGravity(gravity) { - if (this.mGravity != gravity) { - if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { - gravity |= Gravity.LEFT; + insertAt(row, values) { + if ((row < 0) || (row > this.size())) { + throw Error(`new IndexOutOfBoundsException("row " + row)`); + } + if ((values != null) && (values.length < this.width())) { + throw Error(`new IndexOutOfBoundsException("value count " + values.length)`); + } + this.moveRowGapTo(row); + if (this.mRowGapLength == 0) { + this.growBuffer(); + } + this.mRowGapStart++; + this.mRowGapLength--; + if (values == null) { + for (let i = this.mColumns - 1; i >= 0; i--) { + this.setValueInternal(row, i, 0); } - if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { - gravity |= Gravity.TOP; + } + else { + for (let i = this.mColumns - 1; i >= 0; i--) { + this.setValueInternal(row, i, values[i]); } - this.mGravity = gravity; - this.requestLayout(); } } - setHorizontalGravity(horizontalGravity) { - const gravity = horizontalGravity & Gravity.HORIZONTAL_GRAVITY_MASK; - if ((this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != gravity) { - this.mGravity = (this.mGravity & ~Gravity.HORIZONTAL_GRAVITY_MASK) | gravity; - this.requestLayout(); + deleteAt(row, count) { + if (((row | count) < 0) || (row + count > this.size())) { + throw Error(`new IndexOutOfBoundsException(row + ", " + count)`); } + this.moveRowGapTo(row + count); + this.mRowGapStart -= count; + this.mRowGapLength += count; } - setVerticalGravity(verticalGravity) { - const gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) { - this.mGravity = (this.mGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity; - this.requestLayout(); - } + size() { + return this.mRows - this.mRowGapLength; } - generateDefaultLayoutParams() { - let LayoutParams = LinearLayout.LayoutParams; - if (this.mOrientation == LinearLayout.HORIZONTAL) { - return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + width() { + return this.mColumns; + } + growBuffer() { + const columns = this.mColumns; + let newsize = this.size() + 1; + newsize = (newsize * columns) / columns; + let newvalues = androidui.util.ArrayCreator.newNumberArray(newsize * columns); + const valuegap = this.mValueGap; + const rowgapstart = this.mRowGapStart; + let after = this.mRows - (rowgapstart + this.mRowGapLength); + if (this.mValues != null) { + System.arraycopy(this.mValues, 0, newvalues, 0, columns * rowgapstart); + System.arraycopy(this.mValues, (this.mRows - after) * columns, newvalues, (newsize - after) * columns, after * columns); } - else if (this.mOrientation == LinearLayout.VERTICAL) { - return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + for (let i = 0; i < columns; i++) { + if (valuegap[i] >= rowgapstart) { + valuegap[i] += newsize - this.mRows; + if (valuegap[i] < rowgapstart) { + valuegap[i] = rowgapstart; + } + } } - return super.generateDefaultLayoutParams(); - } - generateLayoutParams(p) { - return new LinearLayout.LayoutParams(p); + this.mRowGapLength += newsize - this.mRows; + this.mRows = newsize; + this.mValues = newvalues; } - checkLayoutParams(p) { - return p instanceof LinearLayout.LayoutParams; + moveValueGapTo(column, where) { + const valuegap = this.mValueGap; + const values = this.mValues; + const columns = this.mColumns; + if (where == valuegap[column]) { + return; + } + else if (where > valuegap[column]) { + for (let i = valuegap[column]; i < where; i++) { + values[i * columns + column] += valuegap[column + columns]; + } + } + else { + for (let i = where; i < valuegap[column]; i++) { + values[i * columns + column] -= valuegap[column + columns]; + } + } + valuegap[column] = where; } - } - LinearLayout.HORIZONTAL = 0; - LinearLayout.VERTICAL = 1; - LinearLayout.SHOW_DIVIDER_NONE = 0; - LinearLayout.SHOW_DIVIDER_BEGINNING = 1; - LinearLayout.SHOW_DIVIDER_MIDDLE = 2; - LinearLayout.SHOW_DIVIDER_END = 4; - LinearLayout.VERTICAL_GRAVITY_COUNT = 4; - LinearLayout.INDEX_CENTER_VERTICAL = 0; - LinearLayout.INDEX_TOP = 1; - LinearLayout.INDEX_BOTTOM = 2; - LinearLayout.INDEX_FILL = 3; - widget.LinearLayout = LinearLayout; - (function (LinearLayout) { - class LayoutParams extends android.view.ViewGroup.MarginLayoutParams { - constructor(...args) { - super(...(args.length == 3 ? [args[0], args[1]] : args)); - this.weight = 0; - this.gravity = -1; - if (args.length === 1) { - if (args[0] instanceof LayoutParams) { - this.gravity = args[0].gravity; + moveRowGapTo(where) { + if (where == this.mRowGapStart) { + return; + } + else if (where > this.mRowGapStart) { + let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength); + const columns = this.mColumns; + const valuegap = this.mValueGap; + const values = this.mValues; + const gapend = this.mRowGapStart + this.mRowGapLength; + for (let i = gapend; i < gapend + moving; i++) { + let destrow = i - gapend + this.mRowGapStart; + for (let j = 0; j < columns; j++) { + let val = values[i * columns + j]; + if (i >= valuegap[j]) { + val += valuegap[j + columns]; + } + if (destrow >= valuegap[j]) { + val -= valuegap[j + columns]; + } + values[destrow * columns + j] = val; } } - else if (args.length === 3) { - this.weight = args[2] || 0; + } + else { + let moving = this.mRowGapStart - where; + const columns = this.mColumns; + const valuegap = this.mValueGap; + const values = this.mValues; + const gapend = this.mRowGapStart + this.mRowGapLength; + for (let i = where + moving - 1; i >= where; i--) { + let destrow = i - where + gapend - moving; + for (let j = 0; j < columns; j++) { + let val = values[i * columns + j]; + if (i >= valuegap[j]) { + val += valuegap[j + columns]; + } + if (destrow >= valuegap[j]) { + val -= valuegap[j + columns]; + } + values[destrow * columns + j] = val; + } } - let a = this._attrBinder; - a.addAttr('gravity', (value) => { - this.gravity = a.parseGravity(value, this.gravity); - }, () => { - return this.gravity; - }); - a.addAttr('weight', (value) => { - this.weight = a.parseFloat(value, this.weight); - }, () => { - return this.weight; - }); } + this.mRowGapStart = where; } - LinearLayout.LayoutParams = LayoutParams; - })(LinearLayout = widget.LinearLayout || (widget.LinearLayout = {})); - })(widget = android.widget || (android.widget = {})); + } + text.PackedIntVector = PackedIntVector; + })(text = android.text || (android.text = {})); })(android || (android = {})); var android; (function (android) { - var util; - (function (util) { - class ArrayMap { - constructor(capacity) { - this.map = new Map(); - } - clear() { - this.map.clear(); - } - erase() { - this.map.clear(); + var text; + (function (text) { + var System = java.lang.System; + class PackedObjectVector { + constructor(columns) { + this.mColumns = 0; + this.mRows = 0; + this.mRowGapStart = 0; + this.mRowGapLength = 0; + this.mColumns = columns; + this.mRows = 1; + this.mRowGapStart = 0; + this.mRowGapLength = this.mRows; + this.mValues = new Array(this.mRows * this.mColumns); } - ensureCapacity(minimumCapacity) { + getValue(row, column) { + if (row >= this.mRowGapStart) + row += this.mRowGapLength; + let value = this.mValues[row * this.mColumns + column]; + return value; } - containsKey(key) { - return this.map.has(key); + setValue(row, column, value) { + if (row >= this.mRowGapStart) + row += this.mRowGapLength; + this.mValues[row * this.mColumns + column] = value; } - indexOfValue(value) { - return [...this.map.values()].indexOf(value); + insertAt(row, values) { + this.moveRowGapTo(row); + if (this.mRowGapLength == 0) + this.growBuffer(); + this.mRowGapStart++; + this.mRowGapLength--; + if (values == null) + for (let i = 0; i < this.mColumns; i++) + this.setValue(row, i, null); + else + for (let i = 0; i < this.mColumns; i++) + this.setValue(row, i, values[i]); } - containsValue(value) { - return this.indexOfValue(value) >= 0; + deleteAt(row, count) { + this.moveRowGapTo(row + count); + this.mRowGapStart -= count; + this.mRowGapLength += count; + if (this.mRowGapLength > this.size() * 2) { + } } - get(key) { - return this.map.get(key); + size() { + return this.mRows - this.mRowGapLength; } - keyAt(index) { - return [...this.map.keys()][index]; + width() { + return this.mColumns; } - valueAt(index) { - return [...this.map.values()][index]; + growBuffer() { + let newsize = this.size() + 1; + newsize = (newsize * this.mColumns) / this.mColumns; + let newvalues = new Array(newsize * this.mColumns); + let after = this.mRows - (this.mRowGapStart + this.mRowGapLength); + System.arraycopy(this.mValues, 0, newvalues, 0, this.mColumns * this.mRowGapStart); + System.arraycopy(this.mValues, (this.mRows - after) * this.mColumns, newvalues, (newsize - after) * this.mColumns, after * this.mColumns); + this.mRowGapLength += newsize - this.mRows; + this.mRows = newsize; + this.mValues = newvalues; } - setValueAt(index, value) { - let key = this.keyAt(index); - if (key == null) - throw Error('index error'); - let oldV = this.get(key); - this.map.set(key, value); - return oldV; + moveRowGapTo(where) { + if (where == this.mRowGapStart) + return; + if (where > this.mRowGapStart) { + let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength); + for (let i = this.mRowGapStart + this.mRowGapLength; i < this.mRowGapStart + this.mRowGapLength + moving; i++) { + let destrow = i - (this.mRowGapStart + this.mRowGapLength) + this.mRowGapStart; + for (let j = 0; j < this.mColumns; j++) { + let val = this.mValues[i * this.mColumns + j]; + this.mValues[destrow * this.mColumns + j] = val; + } + } + } + else { + let moving = this.mRowGapStart - where; + for (let i = where + moving - 1; i >= where; i--) { + let destrow = i - where + this.mRowGapStart + this.mRowGapLength - moving; + for (let j = 0; j < this.mColumns; j++) { + let val = this.mValues[i * this.mColumns + j]; + this.mValues[destrow * this.mColumns + j] = val; + } + } + } + this.mRowGapStart = where; } - isEmpty() { - return this.map.size <= 0; + dump() { + for (let i = 0; i < this.mRows; i++) { + for (let j = 0; j < this.mColumns; j++) { + let val = this.mValues[i * this.mColumns + j]; + if (i < this.mRowGapStart || i >= this.mRowGapStart + this.mRowGapLength) + System.out.print(val + " "); + else + System.out.print("(" + val + ") "); + } + System.out.print(" << \n"); + } + System.out.print("-----\n\n"); } - put(key, value) { - let oldV = this.get(key); - this.map.set(key, value); - return oldV; + } + text.PackedObjectVector = PackedObjectVector; + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var Spannable; + (function (Spannable) { + function isImpl(obj) { + return obj && obj['setSpan'] && obj['removeSpan']; } - append(key, value) { - this.map.set(key, value); + Spannable.isImpl = isImpl; + class Factory { + static getInstance() { + return Factory.sInstance; + } + newSpannable(source) { + return source; + } } - remove(key) { - let oldV = this.get(key); - this.map.delete(key); - return oldV; - } - removeAt(index) { - let key = this.keyAt(index); - if (key == null) - throw Error('index error'); - let oldV = this.get(key); - this.map.delete(key); - return oldV; - } - keySet() { - return new Set(this.map.keys()); - } - size() { - return this.map.size; - } - } - util.ArrayMap = ArrayMap; - })(util = android.util || (android.util = {})); -})(android || (android = {})); -var java; -(function (java) { - var util; - (function (util) { - class ArrayDeque extends util.ArrayList { - addFirst(e) { - this.add(0, e); - } - addLast(e) { - this.add(e); - } - offerFirst(e) { - this.addFirst(e); - return true; - } - offerLast(e) { - this.addLast(e); - return true; - } - removeFirst() { - let x = this.pollFirst(); - if (x == null) - throw Error('NoSuchElementException'); - return x; - } - removeLast() { - let x = this.pollLast(); - if (x == null) - throw Error('NoSuchElementException'); - return x; - } - pollFirst() { - return this.array.shift(); - } - pollLast() { - return this.array.splice(this.array.length - 1)[0]; - } - getFirst() { - let x = this.peekFirst(); - if (x == null) - throw Error('NoSuchElementException'); - return x; - } - getLast() { - let x = this.peekLast(); - if (x == null) - throw Error('NoSuchElementException'); - return x; - } - peekFirst() { - return this.array[0]; - } - peekLast() { - return this.array[this.array.length - 1]; - } - removeFirstOccurrence(o) { - if (o == null) - return false; - for (let i = 0, count = this.size(); i < count; i++) { - if (this.array[i] == o) { - this.delete(i); - return true; - } - } - return false; - } - removeLastOccurrence(o) { - if (o == null) - return false; - for (let i = this.size(); i >= 0; i--) { - if (this.array[i] == o) { - this.delete(i); - return true; - } - } - return false; - } - offer(e) { - return this.offerLast(e); - } - remove() { - return this.removeFirst(); - } - poll() { - return this.pollFirst(); - } - element() { - return this.getFirst(); - } - peek() { - return this.peekFirst(); - } - push(e) { - this.addFirst(e); - } - pop() { - return this.removeFirst(); - } - delete(i) { - if (i >= this.array.length) - return false; - this.array.splice(i, 1); - return true; - } - } - util.ArrayDeque = ArrayDeque; - })(util = java.util || (java.util = {})); -})(java || (java = {})); -var android; -(function (android) { - var util; - (function (util) { - class MathUtils { - constructor() { - } - static abs(v) { - return v > 0 ? v : -v; - } - static constrain(amount, low, high) { - return amount < low ? low : (amount > high ? high : amount); - } - static log(a) { - return Math.log(a); - } - static exp(a) { - return Math.exp(a); - } - static pow(a, b) { - return Math.pow(a, b); - } - static max(a, b, c) { - if (c == null) - return a > b ? a : b; - return a > b ? (a > c ? a : c) : (b > c ? b : c); - } - static min(a, b, c) { - if (c == null) - return a < b ? a : b; - return a < b ? (a < c ? a : c) : (b < c ? b : c); - } - static dist(x1, y1, x2, y2) { - const x = (x2 - x1); - const y = (y2 - y1); - return Math.sqrt(x * x + y * y); - } - static dist3(x1, y1, z1, x2, y2, z2) { - const x = (x2 - x1); - const y = (y2 - y1); - const z = (z2 - z1); - return Math.sqrt(x * x + y * y + z * z); - } - static mag(a, b, c) { - if (c == null) - return Math.sqrt(a * a + b * b); - return Math.sqrt(a * a + b * b + c * c); - } - static sq(v) { - return v * v; - } - static radians(degrees) { - return degrees * MathUtils.DEG_TO_RAD; - } - static degrees(radians) { - return radians * MathUtils.RAD_TO_DEG; - } - static acos(value) { - return Math.acos(value); - } - static asin(value) { - return Math.asin(value); - } - static atan(value) { - return Math.atan(value); - } - static atan2(a, b) { - return Math.atan2(a, b); - } - static tan(angle) { - return Math.tan(angle); - } - static lerp(start, stop, amount) { - return start + (stop - start) * amount; - } - static norm(start, stop, value) { - return (value - start) / (stop - start); - } - static map(minStart, minStop, maxStart, maxStop, value) { - return maxStart + (maxStart - maxStop) * ((value - minStart) / (minStop - minStart)); - } - static random(...args) { - if (args.length == 1) - return Math.random() * args[0]; - let [howsmall, howbig] = args; - if (howsmall >= howbig) - return howsmall; - return Math.random() * (howbig - howsmall) + howsmall; - } - } - MathUtils.DEG_TO_RAD = 3.1415926 / 180.0; - MathUtils.RAD_TO_DEG = 180.0 / 3.1415926; - util.MathUtils = MathUtils; - })(util = android.util || (android.util = {})); + Factory.sInstance = new Factory(); + Spannable.Factory = Factory; + })(Spannable = text.Spannable || (text.Spannable = {})); + })(text = android.text || (android.text = {})); })(android || (android = {})); var android; (function (android) { - var util; - (function (util) { - class SparseBooleanArray extends util.SparseArray { - } - util.SparseBooleanArray = SparseBooleanArray; - })(util = android.util || (android.util = {})); + var text; + (function (text_9) { + var style; + (function (style) { + var LineHeightSpan; + (function (LineHeightSpan) { + LineHeightSpan.type = Symbol(); + })(LineHeightSpan = style.LineHeightSpan || (style.LineHeightSpan = {})); + })(style = text_9.style || (text_9.style = {})); + })(text = android.text || (android.text = {})); })(android || (android = {})); var android; (function (android) { - var view; - (function (view) { - class SoundEffectConstants { - static getContantForFocusDirection(direction) { - switch (direction) { - case view.View.FOCUS_RIGHT: - return SoundEffectConstants.NAVIGATION_RIGHT; - case view.View.FOCUS_FORWARD: - case view.View.FOCUS_DOWN: - return SoundEffectConstants.NAVIGATION_DOWN; - case view.View.FOCUS_LEFT: - return SoundEffectConstants.NAVIGATION_LEFT; - case view.View.FOCUS_BACKWARD: - case view.View.FOCUS_UP: - return SoundEffectConstants.NAVIGATION_UP; + var text; + (function (text_10) { + var Paint = android.graphics.Paint; + var LeadingMarginSpan = android.text.style.LeadingMarginSpan; + var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2; + var LineHeightSpan = android.text.style.LineHeightSpan; + var MetricAffectingSpan = android.text.style.MetricAffectingSpan; + var TabStopSpan = android.text.style.TabStopSpan; + var Integer = java.lang.Integer; + var System = java.lang.System; + var Layout = android.text.Layout; + var MeasuredText = android.text.MeasuredText; + var Spanned = android.text.Spanned; + var TextUtils = android.text.TextUtils; + class StaticLayout extends Layout { + constructor(source, bufstart, bufend, paint, outerwidth, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0, maxLines = Integer.MAX_VALUE) { + super((ellipsize == null) ? source : (Spanned.isImplements(source)) ? new Layout.SpannedEllipsizer(source) : new Layout.Ellipsizer(source), paint, outerwidth, align, textDir, spacingmult, spacingadd); + this.mLineCount = 0; + this.mTopPadding = 0; + this.mBottomPadding = 0; + this.mColumns = 0; + this.mEllipsizedWidth = 0; + this.mMaximumVisibleLineCount = Integer.MAX_VALUE; + this.mFontMetricsInt = new Paint.FontMetricsInt(); + if (source == null) { + this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE; + this.mLines = androidui.util.ArrayCreator.newNumberArray((2 * this.mColumns)); + this.mLineDirections = new Array((2 * this.mColumns)); + this.mMeasured = MeasuredText.obtain(); + return; } - throw Error(`new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD, FOCUS_BACKWARD}.")`); - } - } - SoundEffectConstants.CLICK = 0; - SoundEffectConstants.NAVIGATION_LEFT = 1; - SoundEffectConstants.NAVIGATION_UP = 2; - SoundEffectConstants.NAVIGATION_RIGHT = 3; - SoundEffectConstants.NAVIGATION_DOWN = 4; - view.SoundEffectConstants = SoundEffectConstants; - })(view = android.view || (android.view = {})); -})(android || (android = {})); -var android; -(function (android) { - var os; - (function (os) { - class Trace { - static nativeGetEnabledTags() { - return Trace.TRACE_TAG_ALWAYS; - } - static nativeTraceCounter(tag, name, value) { + if (ellipsize != null) { + let e = this.getText(); + e.mLayout = this; + e.mWidth = ellipsizedWidth; + e.mMethod = ellipsize; + this.mEllipsizedWidth = ellipsizedWidth; + this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE; + } + else { + this.mColumns = StaticLayout.COLUMNS_NORMAL; + this.mEllipsizedWidth = outerwidth; + } + this.mLines = androidui.util.ArrayCreator.newNumberArray(2 * this.mColumns); + this.mLineDirections = new Array(2 * this.mColumns); + this.mMaximumVisibleLineCount = maxLines; + this.mMeasured = MeasuredText.obtain(); + this.generate(source, bufstart, bufend, paint, outerwidth, textDir, spacingmult, spacingadd, includepad, includepad, ellipsizedWidth, ellipsize); + this.mMeasured = MeasuredText.recycle(this.mMeasured); + this.mFontMetricsInt = null; } - static nativeTraceBegin(tag, name) { } - static nativeTraceEnd(tag) { } - static nativeAsyncTraceBegin(tag, name, cookie) { } - static nativeAsyncTraceEnd(tag, name, cookie) { } - static nativeSetAppTracingAllowed(allowed) { } - static nativeSetTracingEnabled(allowed) { } - static cacheEnabledTags() { - let tags = Trace.nativeGetEnabledTags(); - Trace.sEnabledTags = tags; - return tags; + generate(source, bufStart, bufEnd, paint, outerWidth, textDir, spacingmult, spacingadd, includepad, trackpad, ellipsizedWidth, ellipsize) { + this.mLineCount = 0; + let v = 0; + let needMultiply = (spacingmult != 1 || spacingadd != 0); + let fm = this.mFontMetricsInt; + let chooseHtv = null; + let measured = this.mMeasured; + let spanned = null; + if (Spanned.isImplements(source)) + spanned = source; + let DEFAULT_DIR = StaticLayout.DIR_LEFT_TO_RIGHT; + let paraEnd; + for (let paraStart = bufStart; paraStart <= bufEnd; paraStart = paraEnd) { + paraEnd = source.substring(0, bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE, paraStart); + if (paraEnd < 0) + paraEnd = bufEnd; + else + paraEnd++; + let firstWidthLineLimit = this.mLineCount + 1; + let firstWidth = outerWidth; + let restWidth = outerWidth; + let chooseHt = null; + if (spanned != null) { + let sp = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LeadingMarginSpan.type); + for (let i = 0; i < sp.length; i++) { + let lms = sp[i]; + firstWidth -= sp[i].getLeadingMargin(true); + restWidth -= sp[i].getLeadingMargin(false); + if (LeadingMarginSpan2.isImpl(lms)) { + let lms2 = lms; + let lmsFirstLine = this.getLineForOffset(spanned.getSpanStart(lms2)); + firstWidthLineLimit = lmsFirstLine + lms2.getLeadingMarginLineCount(); + } + } + chooseHt = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LineHeightSpan.type); + if (chooseHt.length != 0) { + if (chooseHtv == null || chooseHtv.length < chooseHt.length) { + chooseHtv = androidui.util.ArrayCreator.newNumberArray(chooseHt.length); + } + for (let i = 0; i < chooseHt.length; i++) { + let o = spanned.getSpanStart(chooseHt[i]); + if (o < paraStart) { + chooseHtv[i] = this.getLineTop(this.getLineForOffset(o)); + } + else { + chooseHtv[i] = v; + } + } + } + } + measured.setPara(source, paraStart, paraEnd, textDir); + let chs = measured.mChars; + let widths = measured.mWidths; + let chdirs = measured.mLevels; + let dir = measured.mDir; + let easy = measured.mEasy; + let width = firstWidth; + let w = 0; + let here = paraStart; + let ok = paraStart; + let okWidth = w; + let okAscent = 0, okDescent = 0, okTop = 0, okBottom = 0; + let fit = paraStart; + let fitWidth = w; + let fitAscent = 0, fitDescent = 0, fitTop = 0, fitBottom = 0; + let hasTabOrEmoji = false; + let hasTab = false; + let tabStops = null; + for (let spanStart = paraStart, spanEnd; spanStart < paraEnd; spanStart = spanEnd) { + if (spanned == null) { + spanEnd = paraEnd; + let spanLen = spanEnd - spanStart; + measured.addStyleRun(paint, spanLen, fm); + } + else { + spanEnd = spanned.nextSpanTransition(spanStart, paraEnd, MetricAffectingSpan.type); + let spanLen = spanEnd - spanStart; + let spans = spanned.getSpans(spanStart, spanEnd, MetricAffectingSpan.type); + spans = TextUtils.removeEmptySpans(spans, spanned, MetricAffectingSpan.type); + measured.addStyleRun(paint, spans, spanLen, fm); + } + let fmTop = fm.top; + let fmBottom = fm.bottom; + let fmAscent = fm.ascent; + let fmDescent = fm.descent; + for (let j = spanStart; j < spanEnd; j++) { + let c = chs[j - paraStart]; + if (c == StaticLayout.CHAR_NEW_LINE) { + } + else if (c == StaticLayout.CHAR_TAB) { + if (hasTab == false) { + hasTab = true; + hasTabOrEmoji = true; + if (spanned != null) { + let spans = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, TabStopSpan.type); + if (spans.length > 0) { + tabStops = new Layout.TabStops(StaticLayout.TAB_INCREMENT, spans); + } + } + } + if (tabStops != null) { + w = tabStops.nextTab(w); + } + else { + w = StaticLayout.TabStops.nextDefaultStop(w, StaticLayout.TAB_INCREMENT); + } + } + else if (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_HIGH_SURROGATE + && c.codePointAt(0) <= StaticLayout.CHAR_LAST_LOW_SURROGATE && j + 1 < spanEnd) { + let emoji = chs.codePointAt(j - paraStart); + w += widths[j - paraStart]; + } + else { + w += widths[j - paraStart]; + } + let isSpaceOrTab = c == StaticLayout.CHAR_SPACE || c == StaticLayout.CHAR_TAB || c == StaticLayout.CHAR_ZWSP; + if (w <= width || isSpaceOrTab) { + fitWidth = w; + fit = j + 1; + if (fmTop < fitTop) + fitTop = fmTop; + if (fmAscent < fitAscent) + fitAscent = fmAscent; + if (fmDescent > fitDescent) + fitDescent = fmDescent; + if (fmBottom > fitBottom) + fitBottom = fmBottom; + let isLineBreak = isSpaceOrTab || + ((c == StaticLayout.CHAR_SLASH || c == StaticLayout.CHAR_HYPHEN) && (j + 1 >= spanEnd || + !Number.isInteger(Number.parseInt(chs[j + 1 - paraStart])))) || + (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_CJK.codePointAt(0) && StaticLayout.isIdeographic(c, true) && j + 1 < spanEnd && StaticLayout.isIdeographic(chs[j + 1 - paraStart], false)); + if (isLineBreak) { + okWidth = w; + ok = j + 1; + if (fitTop < okTop) + okTop = fitTop; + if (fitAscent < okAscent) + okAscent = fitAscent; + if (fitDescent > okDescent) + okDescent = fitDescent; + if (fitBottom > okBottom) + okBottom = fitBottom; + } + } + else { + const moreChars = (j + 1 < spanEnd); + let endPos; + let above, below, top, bottom; + let currentTextWidth; + if (ok != here) { + endPos = ok; + above = okAscent; + below = okDescent; + top = okTop; + bottom = okBottom; + currentTextWidth = okWidth; + } + else if (fit != here) { + endPos = fit; + above = fitAscent; + below = fitDescent; + top = fitTop; + bottom = fitBottom; + currentTextWidth = fitWidth; + } + else { + endPos = here + 1; + above = fm.ascent; + below = fm.descent; + top = fm.top; + bottom = fm.bottom; + currentTextWidth = widths[here - paraStart]; + } + v = this.out(source, here, endPos, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, currentTextWidth, paint, moreChars); + here = endPos; + j = here - 1; + ok = fit = here; + w = 0; + fitAscent = fitDescent = fitTop = fitBottom = 0; + okAscent = okDescent = okTop = okBottom = 0; + if (--firstWidthLineLimit <= 0) { + width = restWidth; + } + if (here < spanStart) { + measured.setPos(here); + spanEnd = here; + break; + } + if (this.mLineCount >= this.mMaximumVisibleLineCount) { + break; + } + } + } + } + if (paraEnd != here && this.mLineCount < this.mMaximumVisibleLineCount) { + if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) { + paint.getFontMetricsInt(fm); + fitTop = fm.top; + fitBottom = fm.bottom; + fitAscent = fm.ascent; + fitDescent = fm.descent; + } + v = this.out(source, here, paraEnd, fitAscent, fitDescent, fitTop, fitBottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, w, paint, paraEnd != bufEnd); + } + paraStart = paraEnd; + if (paraEnd == bufEnd) + break; + } + if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == StaticLayout.CHAR_NEW_LINE) && this.mLineCount < this.mMaximumVisibleLineCount) { + measured.setPara(source, bufStart, bufEnd, textDir); + paint.getFontMetricsInt(fm); + v = this.out(source, bufEnd, bufEnd, fm.ascent, fm.descent, fm.top, fm.bottom, v, spacingmult, spacingadd, null, null, fm, false, needMultiply, measured.mLevels, measured.mDir, measured.mEasy, bufEnd, includepad, trackpad, null, null, bufStart, ellipsize, ellipsizedWidth, 0, paint, false); + } } - static isTagEnabled(traceTag) { - let tags = Trace.sEnabledTags; - if (tags == Trace.TRACE_TAG_NOT_READY) { - tags = Trace.cacheEnabledTags(); + static isIdeographic(c, includeNonStarters) { + let code = c.codePointAt(0); + if (code >= '⺀'.codePointAt(0) && code <= '⿿'.codePointAt(0)) { + return true; + } + if (c == ' ') { + return true; + } + if (code >= '぀'.codePointAt(0) && code <= 'ゟ'.codePointAt(0)) { + if (!includeNonStarters) { + switch (c) { + case 'ぁ': + case 'ぃ': + case 'ぅ': + case 'ぇ': + case 'ぉ': + case 'っ': + case 'ゃ': + case 'ゅ': + case 'ょ': + case 'ゎ': + case 'ゕ': + case 'ゖ': + case '゛': + case '゜': + case 'ゝ': + case 'ゞ': + return false; + } + } + return true; } - return (tags & traceTag) != 0; - } - static traceCounter(traceTag, counterName, counterValue) { - if (Trace.isTagEnabled(traceTag)) { - Trace.nativeTraceCounter(traceTag, counterName, counterValue); + if (code >= '゠'.codePointAt(0) && code <= 'ヿ'.codePointAt(0)) { + if (!includeNonStarters) { + switch (c) { + case '゠': + case 'ァ': + case 'ィ': + case 'ゥ': + case 'ェ': + case 'ォ': + case 'ッ': + case 'ャ': + case 'ュ': + case 'ョ': + case 'ヮ': + case 'ヵ': + case 'ヶ': + case '・': + case 'ー': + case 'ヽ': + case 'ヾ': + return false; + } + } + return true; } - } - static setAppTracingAllowed(allowed) { - Trace.nativeSetAppTracingAllowed(allowed); - Trace.cacheEnabledTags(); - } - static setTracingEnabled(enabled) { - Trace.nativeSetTracingEnabled(enabled); - Trace.cacheEnabledTags(); - } - static traceBegin(traceTag, methodName) { - if (Trace.isTagEnabled(traceTag)) { - Trace.nativeTraceBegin(traceTag, methodName); + if (code >= '㐀'.codePointAt(0) && code <= '䶵'.codePointAt(0)) { + return true; } - } - static traceEnd(traceTag) { - if (Trace.isTagEnabled(traceTag)) { - Trace.nativeTraceEnd(traceTag); + if (code >= '一'.codePointAt(0) && code <= '龻'.codePointAt(0)) { + return true; } - } - static asyncTraceBegin(traceTag, methodName, cookie) { - if (Trace.isTagEnabled(traceTag)) { - Trace.nativeAsyncTraceBegin(traceTag, methodName, cookie); + if (code >= '豈'.codePointAt(0) && code <= '龎'.codePointAt(0)) { + return true; } - } - static asyncTraceEnd(traceTag, methodName, cookie) { - if (Trace.isTagEnabled(traceTag)) { - Trace.nativeAsyncTraceEnd(traceTag, methodName, cookie); + if (code >= 'ꀀ'.codePointAt(0) && code <= '꒏'.codePointAt(0)) { + return true; } - } - static beginSection(sectionName) { - if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { - if (sectionName.length > Trace.MAX_SECTION_NAME_LEN) { - throw Error(`new IllegalArgumentException("sectionName is too long")`); - } - Trace.nativeTraceBegin(Trace.TRACE_TAG_APP, sectionName); + if (code >= '꒐'.codePointAt(0) && code <= '꓏'.codePointAt(0)) { + return true; } - } - static endSection() { - if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { - Trace.nativeTraceEnd(Trace.TRACE_TAG_APP); + if (code >= '﹢'.codePointAt(0) && code <= '﹦'.codePointAt(0)) { + return true; } - } - } - Trace.TAG = "Trace"; - Trace.TRACE_TAG_NEVER = 0; - Trace.TRACE_TAG_ALWAYS = 1 << 0; - Trace.TRACE_TAG_GRAPHICS = 1 << 1; - Trace.TRACE_TAG_INPUT = 1 << 2; - Trace.TRACE_TAG_VIEW = 1 << 3; - Trace.TRACE_TAG_WEBVIEW = 1 << 4; - Trace.TRACE_TAG_WINDOW_MANAGER = 1 << 5; - Trace.TRACE_TAG_ACTIVITY_MANAGER = 1 << 6; - Trace.TRACE_TAG_SYNC_MANAGER = 1 << 7; - Trace.TRACE_TAG_AUDIO = 1 << 8; - Trace.TRACE_TAG_VIDEO = 1 << 9; - Trace.TRACE_TAG_CAMERA = 1 << 10; - Trace.TRACE_TAG_HAL = 1 << 11; - Trace.TRACE_TAG_APP = 1 << 12; - Trace.TRACE_TAG_RESOURCES = 1 << 13; - Trace.TRACE_TAG_DALVIK = 1 << 14; - Trace.TRACE_TAG_RS = 1 << 15; - Trace.TRACE_TAG_NOT_READY = 1 << 63; - Trace.MAX_SECTION_NAME_LEN = 127; - Trace.sEnabledTags = Trace.TRACE_TAG_NOT_READY; - os.Trace = Trace; - })(os = android.os || (android.os = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var KeyEvent = android.view.KeyEvent; - class InputType { - } - InputType.TYPE_MASK_CLASS = 0x0000000f; - InputType.TYPE_MASK_VARIATION = 0x00000ff0; - InputType.TYPE_MASK_FLAGS = 0x00fff000; - InputType.TYPE_NULL = 0x00000000; - InputType.TYPE_CLASS_TEXT = 0x00000001; - InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS = 0x00001000; - InputType.TYPE_TEXT_FLAG_CAP_WORDS = 0x00002000; - InputType.TYPE_TEXT_FLAG_CAP_SENTENCES = 0x00004000; - InputType.TYPE_TEXT_FLAG_AUTO_CORRECT = 0x00008000; - InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE = 0x00010000; - InputType.TYPE_TEXT_FLAG_MULTI_LINE = 0x00020000; - InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000; - InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS = 0x00080000; - InputType.TYPE_TEXT_VARIATION_NORMAL = 0x00000000; - InputType.TYPE_TEXT_VARIATION_URI = 0x00000010; - InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020; - InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 0x00000030; - InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE = 0x00000040; - InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE = 0x00000050; - InputType.TYPE_TEXT_VARIATION_PERSON_NAME = 0x00000060; - InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 0x00000070; - InputType.TYPE_TEXT_VARIATION_PASSWORD = 0x00000080; - InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090; - InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 0x000000a0; - InputType.TYPE_TEXT_VARIATION_FILTER = 0x000000b0; - InputType.TYPE_TEXT_VARIATION_PHONETIC = 0x000000c0; - InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 0x000000d0; - InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD = 0x000000e0; - InputType.TYPE_CLASS_NUMBER = 0x00000002; - InputType.TYPE_NUMBER_FLAG_SIGNED = 0x00001000; - InputType.TYPE_NUMBER_FLAG_DECIMAL = 0x00002000; - InputType.TYPE_NUMBER_VARIATION_NORMAL = 0x00000000; - InputType.TYPE_NUMBER_VARIATION_PASSWORD = 0x00000010; - InputType.TYPE_CLASS_PHONE = 0x00000003; - InputType.TYPE_CLASS_DATETIME = 0x00000004; - InputType.TYPE_DATETIME_VARIATION_NORMAL = 0x00000000; - InputType.TYPE_DATETIME_VARIATION_DATE = 0x00000010; - InputType.TYPE_DATETIME_VARIATION_TIME = 0x00000020; - text.InputType = InputType; - (function (InputType) { - class LimitCode { - } - LimitCode.TYPE_CLASS_NUMBER = [ - KeyEvent.KEYCODE_Digit0, - KeyEvent.KEYCODE_Digit1, - KeyEvent.KEYCODE_Digit2, - KeyEvent.KEYCODE_Digit3, - KeyEvent.KEYCODE_Digit4, - KeyEvent.KEYCODE_Digit5, - KeyEvent.KEYCODE_Digit6, - KeyEvent.KEYCODE_Digit7, - KeyEvent.KEYCODE_Digit8, - KeyEvent.KEYCODE_Digit9, - ]; - LimitCode.TYPE_CLASS_PHONE = [ - KeyEvent.KEYCODE_Comma, - KeyEvent.KEYCODE_Sharp, - KeyEvent.KEYCODE_Semicolon, - KeyEvent.KEYCODE_Asterisk, - KeyEvent.KEYCODE_Left_Parenthesis, - KeyEvent.KEYCODE_Right_Parenthesis, - KeyEvent.KEYCODE_Slash, - KeyEvent.KEYCODE_KeyN, - KeyEvent.KEYCODE_Period, - KeyEvent.KEYCODE_SPACE, - KeyEvent.KEYCODE_Add, - KeyEvent.KEYCODE_Minus, - KeyEvent.KEYCODE_Period, - KeyEvent.KEYCODE_Digit0, - KeyEvent.KEYCODE_Digit1, - KeyEvent.KEYCODE_Digit2, - KeyEvent.KEYCODE_Digit3, - KeyEvent.KEYCODE_Digit4, - KeyEvent.KEYCODE_Digit5, - KeyEvent.KEYCODE_Digit6, - KeyEvent.KEYCODE_Digit7, - KeyEvent.KEYCODE_Digit8, - KeyEvent.KEYCODE_Digit9, - ]; - InputType.LimitCode = LimitCode; - })(InputType = text.InputType || (text.InputType = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var util; - (function (util) { - class LongSparseArray extends util.SparseArray { - } - util.LongSparseArray = LongSparseArray; - })(util = android.util || (android.util = {})); -})(android || (android = {})); -var android; -(function (android) { - var view; - (function (view) { - class HapticFeedbackConstants { - } - HapticFeedbackConstants.LONG_PRESS = 0; - HapticFeedbackConstants.VIRTUAL_KEY = 1; - HapticFeedbackConstants.KEYBOARD_TAP = 3; - HapticFeedbackConstants.SAFE_MODE_DISABLED = 10000; - HapticFeedbackConstants.SAFE_MODE_ENABLED = 10001; - HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING = 0x0001; - HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING = 0x0002; - view.HapticFeedbackConstants = HapticFeedbackConstants; - })(view = android.view || (android.view = {})); -})(android || (android = {})); -var android; -(function (android) { - var database; - (function (database) { - class DataSetObserver { - onChanged() { - } - onInvalidated() { - } - } - database.DataSetObserver = DataSetObserver; - })(database = android.database || (android.database = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var DataSetObserver = android.database.DataSetObserver; - var SystemClock = android.os.SystemClock; - var SoundEffectConstants = android.view.SoundEffectConstants; - var View = android.view.View; - var ViewGroup = android.view.ViewGroup; - var Long = java.lang.Long; - class AdapterView extends ViewGroup { - constructor(...args) { - super(...args); - this.mFirstPosition = 0; - this.mSpecificTop = 0; - this.mSyncPosition = 0; - this.mSyncRowId = AdapterView.INVALID_ROW_ID; - this.mSyncHeight = 0; - this.mNeedSync = false; - this.mSyncMode = 0; - this.mLayoutHeight = 0; - this.mInLayout = false; - this.mNextSelectedPosition = AdapterView.INVALID_POSITION; - this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; - this.mSelectedPosition = AdapterView.INVALID_POSITION; - this.mSelectedRowId = AdapterView.INVALID_ROW_ID; - this.mItemCount = 0; - this.mOldItemCount = 0; - this.mOldSelectedPosition = AdapterView.INVALID_POSITION; - this.mOldSelectedRowId = AdapterView.INVALID_ROW_ID; - this.mBlockLayoutRequests = false; - } - setOnItemClickListener(listener) { - this.mOnItemClickListener = listener; - } - getOnItemClickListener() { - return this.mOnItemClickListener; - } - performItemClick(view, position, id) { - if (this.mOnItemClickListener != null) { - this.playSoundEffect(SoundEffectConstants.CLICK); - this.mOnItemClickListener.onItemClick(this, view, position, id); + if (code >= '0'.codePointAt(0) && code <= '9'.codePointAt(0)) { return true; } return false; } - setOnItemLongClickListener(listener) { - if (!this.isLongClickable()) { - this.setLongClickable(true); + out(text, start, end, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includePad, trackPad, chs, widths, widthStart, ellipsize, ellipsisWidth, textWidth, paint, moreChars) { + let j = this.mLineCount; + let off = j * this.mColumns; + let want = off + this.mColumns + StaticLayout.TOP; + let lines = this.mLines; + if (want >= lines.length) { + let nlen = (want + 1); + let grow = androidui.util.ArrayCreator.newNumberArray(nlen); + System.arraycopy(lines, 0, grow, 0, lines.length); + this.mLines = grow; + lines = grow; + let grow2 = new Array(nlen); + System.arraycopy(this.mLineDirections, 0, grow2, 0, this.mLineDirections.length); + this.mLineDirections = grow2; } - this.mOnItemLongClickListener = listener; - } - getOnItemLongClickListener() { - return this.mOnItemLongClickListener; - } - setOnItemSelectedListener(listener) { - this.mOnItemSelectedListener = listener; - } - getOnItemSelectedListener() { - return this.mOnItemSelectedListener; - } - addView(...args) { - throw Error(`new UnsupportedOperationException("addView() is not supported in AdapterView")`); - } - removeView(child) { - throw Error(`new UnsupportedOperationException("removeView(View) is not supported in AdapterView")`); - } - removeViewAt(index) { - throw Error(`new UnsupportedOperationException("removeViewAt(int) is not supported in AdapterView")`); - } - removeAllViews() { - throw Error(`new UnsupportedOperationException("removeAllViews() is not supported in AdapterView")`); - } - onLayout(changed, left, top, right, bottom) { - this.mLayoutHeight = this.getHeight(); - } - getSelectedItemPosition() { - return this.mNextSelectedPosition; - } - getSelectedItemId() { - return this.mNextSelectedRowId; - } - getSelectedItem() { - let adapter = this.getAdapter(); - let selection = this.getSelectedItemPosition(); - if (adapter != null && adapter.getCount() > 0 && selection >= 0) { - return adapter.getItem(selection); + if (chooseHt != null) { + fm.ascent = above; + fm.descent = below; + fm.top = top; + fm.bottom = bottom; + for (let i = 0; i < chooseHt.length; i++) { + chooseHt[i].chooseHeight(text, start, end, chooseHtv[i], v, fm, paint); + } + above = fm.ascent; + below = fm.descent; + top = fm.top; + bottom = fm.bottom; } - else { - return null; + if (j == 0) { + if (trackPad) { + this.mTopPadding = top - above; + } + if (includePad) { + above = top; + } } - } - getCount() { - return this.mItemCount; - } - getPositionForView(view) { - let listItem = view; - try { - let v; - while (!((v = listItem.getParent()) == (this))) { - listItem = v; + if (end == bufEnd) { + if (trackPad) { + this.mBottomPadding = bottom - below; + } + if (includePad) { + below = bottom; } } - catch (e) { - return AdapterView.INVALID_POSITION; + let extra; + if (needMultiply) { + let ex = (below - above) * (spacingmult - 1) + spacingadd; + if (ex >= 0) { + extra = Math.floor((ex + StaticLayout.EXTRA_ROUNDING)); + } + else { + extra = -Math.floor((-ex + StaticLayout.EXTRA_ROUNDING)); + } } - const childCount = this.getChildCount(); - for (let i = 0; i < childCount; i++) { - if (this.getChildAt(i) == (listItem)) { - return this.mFirstPosition + i; + else { + extra = 0; + } + lines[off + StaticLayout.START] = start; + lines[off + StaticLayout.TOP] = v; + lines[off + StaticLayout.DESCENT] = below + extra; + v += (below - above) + extra; + lines[off + this.mColumns + StaticLayout.START] = end; + lines[off + this.mColumns + StaticLayout.TOP] = v; + if (hasTabOrEmoji) + lines[off + StaticLayout.TAB] |= StaticLayout.TAB_MASK; + lines[off + StaticLayout.DIR] |= dir << StaticLayout.DIR_SHIFT; + let linedirs = StaticLayout.DIRS_ALL_LEFT_TO_RIGHT; + this.mLineDirections[j] = linedirs; + if (ellipsize != null) { + let firstLine = (j == 0); + let currentLineIsTheLastVisibleOne = (j + 1 == this.mMaximumVisibleLineCount); + let forceEllipsis = moreChars && (this.mLineCount + 1 == this.mMaximumVisibleLineCount); + let doEllipsis = (((this.mMaximumVisibleLineCount == 1 && moreChars) || (firstLine && !moreChars)) && ellipsize != TextUtils.TruncateAt.MARQUEE) || (!firstLine && (currentLineIsTheLastVisibleOne || !moreChars) && ellipsize == TextUtils.TruncateAt.END); + if (doEllipsis) { + this.calculateEllipsis(start, end, widths, widthStart, ellipsisWidth, ellipsize, j, textWidth, paint, forceEllipsis); } } - return AdapterView.INVALID_POSITION; - } - getFirstVisiblePosition() { - return this.mFirstPosition; - } - getLastVisiblePosition() { - return this.mFirstPosition + this.getChildCount() - 1; - } - setEmptyView(emptyView) { - this.mEmptyView = emptyView; - const adapter = this.getAdapter(); - const empty = ((adapter == null) || adapter.isEmpty()); - this.updateEmptyStatus(empty); - } - getEmptyView() { - return this.mEmptyView; - } - isInFilterMode() { - return false; + this.mLineCount++; + return v; } - setFocusable(focusable) { - const adapter = this.getAdapter(); - const empty = adapter == null || adapter.getCount() == 0; - this.mDesiredFocusableState = focusable; - if (!focusable) { - this.mDesiredFocusableInTouchModeState = false; + calculateEllipsis(lineStart, lineEnd, widths, widthStart, avail, where, line, textWidth, paint, forceEllipsis) { + if (textWidth <= avail && !forceEllipsis) { + this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = 0; + this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = 0; + return; } - super.setFocusable(focusable && (!empty || this.isInFilterMode())); - } - setFocusableInTouchMode(focusable) { - const adapter = this.getAdapter(); - const empty = adapter == null || adapter.getCount() == 0; - this.mDesiredFocusableInTouchModeState = focusable; - if (focusable) { - this.mDesiredFocusableState = true; + let ellipsisWidth = paint.measureText((where == TextUtils.TruncateAt.END_SMALL) ? StaticLayout.ELLIPSIS_TWO_DOTS[0] : StaticLayout.ELLIPSIS_NORMAL[0], 0, 1); + let ellipsisStart = 0; + let ellipsisCount = 0; + let len = lineEnd - lineStart; + if (where == TextUtils.TruncateAt.START) { + if (this.mMaximumVisibleLineCount == 1) { + let sum = 0; + let i; + for (i = len; i >= 0; i--) { + let w = widths[i - 1 + lineStart - widthStart]; + if (w + sum + ellipsisWidth > avail) { + break; + } + sum += w; + } + ellipsisStart = 0; + ellipsisCount = i; + } + else { + } } - super.setFocusableInTouchMode(focusable && (!empty || this.isInFilterMode())); - } - checkFocus() { - const adapter = this.getAdapter(); - const empty = adapter == null || adapter.getCount() == 0; - const focusable = !empty || this.isInFilterMode(); - super.setFocusableInTouchMode(focusable && this.mDesiredFocusableInTouchModeState); - super.setFocusable(focusable && this.mDesiredFocusableState); - if (this.mEmptyView != null) { - this.updateEmptyStatus((adapter == null) || adapter.isEmpty()); + else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE || where == TextUtils.TruncateAt.END_SMALL) { + let sum = 0; + let i; + for (i = 0; i < len; i++) { + let w = widths[i + lineStart - widthStart]; + if (w + sum + ellipsisWidth > avail) { + break; + } + sum += w; + } + ellipsisStart = i; + ellipsisCount = len - i; + if (forceEllipsis && ellipsisCount == 0 && len > 0) { + ellipsisStart = len - 1; + ellipsisCount = 1; + } + } + else { + if (this.mMaximumVisibleLineCount == 1) { + let lsum = 0, rsum = 0; + let left = 0, right = len; + let ravail = (avail - ellipsisWidth) / 2; + for (right = len; right >= 0; right--) { + let w = widths[right - 1 + lineStart - widthStart]; + if (w + rsum > ravail) { + break; + } + rsum += w; + } + let lavail = avail - ellipsisWidth - rsum; + for (left = 0; left < right; left++) { + let w = widths[left + lineStart - widthStart]; + if (w + lsum > lavail) { + break; + } + lsum += w; + } + ellipsisStart = left; + ellipsisCount = right - left; + } + else { + } } + this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = ellipsisStart; + this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = ellipsisCount; } - updateEmptyStatus(empty) { - if (this.isInFilterMode()) { - empty = false; - } - if (empty) { - if (this.mEmptyView != null) { - this.mEmptyView.setVisibility(View.VISIBLE); - this.setVisibility(View.GONE); + getLineForVertical(vertical) { + let high = this.mLineCount; + let low = -1; + let guess; + let lines = this.mLines; + while (high - low > 1) { + guess = (high + low) >> 1; + if (lines[this.mColumns * guess + StaticLayout.TOP] > vertical) { + high = guess; } else { - this.setVisibility(View.VISIBLE); - } - if (this.mDataChanged) { - this.onLayout(false, this.mLeft, this.mTop, this.mRight, this.mBottom); + low = guess; } } + if (low < 0) { + return 0; + } else { - if (this.mEmptyView != null) - this.mEmptyView.setVisibility(View.GONE); - this.setVisibility(View.VISIBLE); + return low; } } - getItemAtPosition(position) { - let adapter = this.getAdapter(); - return (adapter == null || position < 0) ? null : adapter.getItem(position); + getLineCount() { + return this.mLineCount; } - getItemIdAtPosition(position) { - let adapter = this.getAdapter(); - return (adapter == null || position < 0) ? AdapterView.INVALID_ROW_ID : adapter.getItemId(position); + getLineTop(line) { + let top = this.mLines[this.mColumns * line + StaticLayout.TOP]; + if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount && line != this.mLineCount) { + top += this.getBottomPadding(); + } + return top; } - setOnClickListener(l) { - throw Error(`new RuntimeException("Don't call setOnClickListener for an AdapterView. " + "You probably want setOnItemClickListener instead")`); + getLineDescent(line) { + let descent = this.mLines[this.mColumns * line + StaticLayout.DESCENT]; + if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount - 1 && line != this.mLineCount) { + descent += this.getBottomPadding(); + } + return descent; } - onDetachedFromWindow() { - super.onDetachedFromWindow(); - this.removeCallbacks(this.mSelectionNotifier); + getLineStart(line) { + return this.mLines[this.mColumns * line + StaticLayout.START] & StaticLayout.START_MASK; } - selectionChanged() { - if (this.mOnItemSelectedListener != null) { - if (this.mInLayout || this.mBlockLayoutRequests) { - if (this.mSelectionNotifier == null) { - this.mSelectionNotifier = new SelectionNotifier(this); - } - this.post(this.mSelectionNotifier); - } - else { - this.fireOnSelected(); - this.performAccessibilityActionsOnSelected(); - } - } + getParagraphDirection(line) { + return this.mLines[this.mColumns * line + StaticLayout.DIR] >> StaticLayout.DIR_SHIFT; } - fireOnSelected() { - if (this.mOnItemSelectedListener == null) { - return; - } - const selection = this.getSelectedItemPosition(); - if (selection >= 0) { - let v = this.getSelectedView(); - this.mOnItemSelectedListener.onItemSelected(this, v, selection, this.getAdapter().getItemId(selection)); + getLineContainsTab(line) { + return (this.mLines[this.mColumns * line + StaticLayout.TAB] & StaticLayout.TAB_MASK) != 0; + } + getLineDirections(line) { + return this.mLineDirections[line]; + } + getTopPadding() { + return this.mTopPadding; + } + getBottomPadding() { + return this.mBottomPadding; + } + getEllipsisCount(line) { + if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) { + return 0; } - else { - this.mOnItemSelectedListener.onNothingSelected(this); + return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT]; + } + getEllipsisStart(line) { + if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) { + return 0; } + return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START]; } - performAccessibilityActionsOnSelected() { + getEllipsizedWidth() { + return this.mEllipsizedWidth; } - isScrollableForAccessibility() { - let adapter = this.getAdapter(); - if (adapter != null) { - const itemCount = adapter.getCount(); - return itemCount > 0 && (this.getFirstVisiblePosition() > 0 || this.getLastVisiblePosition() < itemCount - 1); - } - return false; + prepare() { + this.mMeasured = MeasuredText.obtain(); } - canAnimate() { - return super.canAnimate() && this.mItemCount > 0; + finish() { + this.mMeasured = MeasuredText.recycle(this.mMeasured); } - handleDataChanged() { - const count = this.mItemCount; - let found = false; - if (count > 0) { - let newPos; - if (this.mNeedSync) { - this.mNeedSync = false; - newPos = this.findSyncPosition(); - if (newPos >= 0) { - let selectablePos = this.lookForSelectablePosition(newPos, true); - if (selectablePos == newPos) { - this.setNextSelectedPositionInt(newPos); - found = true; - } - } - } - if (!found) { - newPos = this.getSelectedItemPosition(); - if (newPos >= count) { - newPos = count - 1; - } - if (newPos < 0) { - newPos = 0; - } - let selectablePos = this.lookForSelectablePosition(newPos, true); - if (selectablePos < 0) { - selectablePos = this.lookForSelectablePosition(newPos, false); - } - if (selectablePos >= 0) { - this.setNextSelectedPositionInt(selectablePos); - this.checkSelectionChanged(); - found = true; - } - } + } + StaticLayout.TAG = "StaticLayout"; + StaticLayout.COLUMNS_NORMAL = 3; + StaticLayout.COLUMNS_ELLIPSIZE = 5; + StaticLayout.START = 0; + StaticLayout.DIR = StaticLayout.START; + StaticLayout.TAB = StaticLayout.START; + StaticLayout.TOP = 1; + StaticLayout.DESCENT = 2; + StaticLayout.ELLIPSIS_START = 3; + StaticLayout.ELLIPSIS_COUNT = 4; + StaticLayout.START_MASK = 0x1FFFFFFF; + StaticLayout.DIR_SHIFT = 30; + StaticLayout.TAB_MASK = 0x20000000; + StaticLayout.CHAR_FIRST_CJK = '⺀'; + StaticLayout.CHAR_NEW_LINE = '\n'; + StaticLayout.CHAR_TAB = '\t'; + StaticLayout.CHAR_SPACE = ' '; + StaticLayout.CHAR_SLASH = '/'; + StaticLayout.CHAR_HYPHEN = '-'; + StaticLayout.CHAR_ZWSP = '​'; + StaticLayout.EXTRA_ROUNDING = 0.5; + StaticLayout.CHAR_FIRST_HIGH_SURROGATE = 0xD800; + StaticLayout.CHAR_LAST_LOW_SURROGATE = 0xDFFF; + text_10.StaticLayout = StaticLayout; + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text_11) { + var Paint = android.graphics.Paint; + var System = java.lang.System; + var Layout = android.text.Layout; + var PackedIntVector = android.text.PackedIntVector; + var PackedObjectVector = android.text.PackedObjectVector; + var Spanned = android.text.Spanned; + var StaticLayout = android.text.StaticLayout; + class DynamicLayout extends Layout { + constructor(base, display, paint, width, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0) { + super((ellipsize == null) ? display : (Spanned.isImplements(display)) ? new Layout.SpannedEllipsizer(display) : new Layout.Ellipsizer(display), paint, width, align, textDir, spacingmult, spacingadd); + this.mEllipsizedWidth = 0; + this.mNumberOfBlocks = 0; + this.mIndexFirstChangedBlock = 0; + this.mTopPadding = 0; + this.mBottomPadding = 0; + this.mBase = base; + this.mDisplay = display; + if (ellipsize != null) { + this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE); + this.mEllipsizedWidth = ellipsizedWidth; + this.mEllipsizeAt = ellipsize; } - if (!found) { - this.mSelectedPosition = AdapterView.INVALID_POSITION; - this.mSelectedRowId = AdapterView.INVALID_ROW_ID; - this.mNextSelectedPosition = AdapterView.INVALID_POSITION; - this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; - this.mNeedSync = false; - this.checkSelectionChanged(); + else { + this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_NORMAL); + this.mEllipsizedWidth = width; + this.mEllipsizeAt = null; } - } - checkSelectionChanged() { - if ((this.mSelectedPosition != this.mOldSelectedPosition) || (this.mSelectedRowId != this.mOldSelectedRowId)) { - this.selectionChanged(); - this.mOldSelectedPosition = this.mSelectedPosition; - this.mOldSelectedRowId = this.mSelectedRowId; + this.mObjects = new PackedObjectVector(1); + this.mIncludePad = includepad; + if (ellipsize != null) { + let e = this.getText(); + e.mLayout = this; + e.mWidth = ellipsizedWidth; + e.mMethod = ellipsize; + this.mEllipsize = true; + } + let start; + if (ellipsize != null) { + start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE); + start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED; + } + else { + start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL); } + let dirs = [DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT]; + let fm = new Paint.FontMetricsInt(); + paint.getFontMetricsInt(fm); + let asc = fm.ascent; + let desc = fm.descent; + start[DynamicLayout.DIR] = DynamicLayout.DIR_LEFT_TO_RIGHT << DynamicLayout.DIR_SHIFT; + start[DynamicLayout.TOP] = 0; + start[DynamicLayout.DESCENT] = desc; + this.mInts.insertAt(0, start); + start[DynamicLayout.TOP] = desc - asc; + this.mInts.insertAt(1, start); + this.mObjects.insertAt(0, dirs); + this.reflow(base, 0, 0, base.length); } - findSyncPosition() { - let count = this.mItemCount; - if (count == 0) { - return AdapterView.INVALID_POSITION; + reflow(s, where, before, after) { + if (s != this.mBase) + return; + let text = this.mDisplay; + let len = text.length; + let find = text.lastIndexOf('\n', where - 1); + if (find < 0) + find = 0; + else + find = find + 1; + { + let diff = where - find; + before += diff; + after += diff; + where -= diff; } - let idToMatch = this.mSyncRowId; - let seed = this.mSyncPosition; - if (idToMatch == AdapterView.INVALID_ROW_ID) { - return AdapterView.INVALID_POSITION; + let look = text.indexOf('\n', where + after); + if (look < 0) + look = len; + else + look++; + let change = look - (where + after); + before += change; + after += change; + let startline = this.getLineForOffset(where); + let startv = this.getLineTop(startline); + let endline = this.getLineForOffset(where + before); + if (where + after == len) + endline = this.getLineCount(); + let endv = this.getLineTop(endline); + let islast = (endline == this.getLineCount()); + let reflowed; + { + reflowed = DynamicLayout.sStaticLayout; + DynamicLayout.sStaticLayout = null; } - seed = Math.max(0, seed); - seed = Math.min(count - 1, seed); - let endTime = SystemClock.uptimeMillis() + AdapterView.SYNC_MAX_DURATION_MILLIS; - let rowId; - let first = seed; - let last = seed; - let next = false; - let hitFirst; - let hitLast; - let adapter = this.getAdapter(); - if (adapter == null) { - return AdapterView.INVALID_POSITION; + if (reflowed == null) { + reflowed = new StaticLayout(null, 0, 0, null, 0, null, null, 0, 1, true); } - while (SystemClock.uptimeMillis() <= endTime) { - rowId = adapter.getItemId(seed); - if (rowId == idToMatch) { - return seed; + else { + reflowed.prepare(); + } + reflowed.generate(text, where, where + after, this.getPaint(), this.getWidth(), this.getTextDirectionHeuristic(), this.getSpacingMultiplier(), this.getSpacingAdd(), false, true, this.mEllipsizedWidth, this.mEllipsizeAt); + let n = reflowed.getLineCount(); + if (where + after != len && reflowed.getLineStart(n - 1) == where + after) + n--; + this.mInts.deleteAt(startline, endline - startline); + this.mObjects.deleteAt(startline, endline - startline); + let ht = reflowed.getLineTop(n); + let toppad = 0, botpad = 0; + if (this.mIncludePad && startline == 0) { + toppad = reflowed.getTopPadding(); + this.mTopPadding = toppad; + ht -= toppad; + } + if (this.mIncludePad && islast) { + botpad = reflowed.getBottomPadding(); + this.mBottomPadding = botpad; + ht += botpad; + } + this.mInts.adjustValuesBelow(startline, DynamicLayout.START, after - before); + this.mInts.adjustValuesBelow(startline, DynamicLayout.TOP, startv - endv + ht); + let ints; + if (this.mEllipsize) { + ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE); + ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED; + } + else { + ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL); + } + let objects = new Array(1); + for (let i = 0; i < n; i++) { + ints[DynamicLayout.START] = reflowed.getLineStart(i) | (reflowed.getParagraphDirection(i) << DynamicLayout.DIR_SHIFT) | (reflowed.getLineContainsTab(i) ? DynamicLayout.TAB_MASK : 0); + let top = reflowed.getLineTop(i) + startv; + if (i > 0) + top -= toppad; + ints[DynamicLayout.TOP] = top; + let desc = reflowed.getLineDescent(i); + if (i == n - 1) + desc += botpad; + ints[DynamicLayout.DESCENT] = desc; + objects[0] = reflowed.getLineDirections(i); + if (this.mEllipsize) { + ints[DynamicLayout.ELLIPSIS_START] = reflowed.getEllipsisStart(i); + ints[DynamicLayout.ELLIPSIS_COUNT] = reflowed.getEllipsisCount(i); } - hitLast = last == count - 1; - hitFirst = first == 0; - if (hitLast && hitFirst) { + this.mInts.insertAt(startline + i, ints); + this.mObjects.insertAt(startline + i, objects); + } + this.updateBlocks(startline, endline - 1, n); + { + DynamicLayout.sStaticLayout = reflowed; + reflowed.finish(); + } + } + createBlocks() { + let offset = DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH; + this.mNumberOfBlocks = 0; + const text = this.mDisplay; + while (true) { + offset = text.indexOf('\n', offset); + if (offset < 0) { + this.addBlockAtOffset(text.length); break; } - if (hitFirst || (next && !hitLast)) { - last++; - seed = last; - next = false; - } - else if (hitLast || (!next && !hitFirst)) { - first--; - seed = first; - next = true; + else { + this.addBlockAtOffset(offset); + offset += DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH; } } - return AdapterView.INVALID_POSITION; - } - lookForSelectablePosition(position, lookDown) { - return position; - } - setSelectedPositionInt(position) { - this.mSelectedPosition = position; - this.mSelectedRowId = this.getItemIdAtPosition(position); + this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length); + for (let i = 0; i < this.mBlockEndLines.length; i++) { + this.mBlockIndices[i] = DynamicLayout.INVALID_BLOCK_INDEX; + } } - setNextSelectedPositionInt(position) { - this.mNextSelectedPosition = position; - this.mNextSelectedRowId = this.getItemIdAtPosition(position); - if (this.mNeedSync && this.mSyncMode == AdapterView.SYNC_SELECTED_POSITION && position >= 0) { - this.mSyncPosition = position; - this.mSyncRowId = this.mNextSelectedRowId; + addBlockAtOffset(offset) { + const line = this.getLineForOffset(offset); + if (this.mBlockEndLines == null) { + this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray((1)); + this.mBlockEndLines[this.mNumberOfBlocks] = line; + this.mNumberOfBlocks++; + return; + } + const previousBlockEndLine = this.mBlockEndLines[this.mNumberOfBlocks - 1]; + if (line > previousBlockEndLine) { + if (this.mNumberOfBlocks == this.mBlockEndLines.length) { + let blockEndLines = androidui.util.ArrayCreator.newNumberArray((this.mNumberOfBlocks + 1)); + System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, this.mNumberOfBlocks); + this.mBlockEndLines = blockEndLines; + } + this.mBlockEndLines[this.mNumberOfBlocks] = line; + this.mNumberOfBlocks++; } } - rememberSyncState() { - if (this.getChildCount() > 0) { - this.mNeedSync = true; - this.mSyncHeight = this.mLayoutHeight; - if (this.mSelectedPosition >= 0) { - let v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); - this.mSyncRowId = this.mNextSelectedRowId; - this.mSyncPosition = this.mNextSelectedPosition; - if (v != null) { - this.mSpecificTop = v.getTop(); - } - this.mSyncMode = AdapterView.SYNC_SELECTED_POSITION; + updateBlocks(startLine, endLine, newLineCount) { + if (this.mBlockEndLines == null) { + this.createBlocks(); + return; + } + let firstBlock = -1; + let lastBlock = -1; + for (let i = 0; i < this.mNumberOfBlocks; i++) { + if (this.mBlockEndLines[i] >= startLine) { + firstBlock = i; + break; } - else { - let v = this.getChildAt(0); - let adapter = this.getAdapter(); - if (this.mFirstPosition >= 0 && this.mFirstPosition < adapter.getCount()) { - this.mSyncRowId = adapter.getItemId(this.mFirstPosition); - } - else { - this.mSyncRowId = AdapterView.NO_ID; - } - this.mSyncPosition = this.mFirstPosition; - if (v != null) { - this.mSpecificTop = v.getTop(); - } - this.mSyncMode = AdapterView.SYNC_FIRST_POSITION; + } + for (let i = firstBlock; i < this.mNumberOfBlocks; i++) { + if (this.mBlockEndLines[i] >= endLine) { + lastBlock = i; + break; + } + } + const lastBlockEndLine = this.mBlockEndLines[lastBlock]; + let createBlockBefore = startLine > (firstBlock == 0 ? 0 : this.mBlockEndLines[firstBlock - 1] + 1); + let createBlock = newLineCount > 0; + let createBlockAfter = endLine < this.mBlockEndLines[lastBlock]; + let numAddedBlocks = 0; + if (createBlockBefore) + numAddedBlocks++; + if (createBlock) + numAddedBlocks++; + if (createBlockAfter) + numAddedBlocks++; + const numRemovedBlocks = lastBlock - firstBlock + 1; + const newNumberOfBlocks = this.mNumberOfBlocks + numAddedBlocks - numRemovedBlocks; + if (newNumberOfBlocks == 0) { + this.mBlockEndLines[0] = 0; + this.mBlockIndices[0] = DynamicLayout.INVALID_BLOCK_INDEX; + this.mNumberOfBlocks = 1; + return; + } + if (newNumberOfBlocks > this.mBlockEndLines.length) { + const newSize = (newNumberOfBlocks); + let blockEndLines = androidui.util.ArrayCreator.newNumberArray(newSize); + let blockIndices = androidui.util.ArrayCreator.newNumberArray(newSize); + System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, firstBlock); + System.arraycopy(this.mBlockIndices, 0, blockIndices, 0, firstBlock); + System.arraycopy(this.mBlockEndLines, lastBlock + 1, blockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); + System.arraycopy(this.mBlockIndices, lastBlock + 1, blockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); + this.mBlockEndLines = blockEndLines; + this.mBlockIndices = blockIndices; + } + else { + System.arraycopy(this.mBlockEndLines, lastBlock + 1, this.mBlockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); + System.arraycopy(this.mBlockIndices, lastBlock + 1, this.mBlockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); + } + this.mNumberOfBlocks = newNumberOfBlocks; + let newFirstChangedBlock; + const deltaLines = newLineCount - (endLine - startLine + 1); + if (deltaLines != 0) { + newFirstChangedBlock = firstBlock + numAddedBlocks; + for (let i = newFirstChangedBlock; i < this.mNumberOfBlocks; i++) { + this.mBlockEndLines[i] += deltaLines; } } - } - } - AdapterView.ITEM_VIEW_TYPE_IGNORE = -1; - AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; - AdapterView.SYNC_SELECTED_POSITION = 0; - AdapterView.SYNC_FIRST_POSITION = 1; - AdapterView.SYNC_MAX_DURATION_MILLIS = 100; - AdapterView.INVALID_POSITION = -1; - AdapterView.INVALID_ROW_ID = Long.MIN_VALUE; - widget.AdapterView = AdapterView; - (function (AdapterView) { - class AdapterDataSetObserver extends DataSetObserver { - constructor(AdapterView_this) { - super(); - this.AdapterView_this = AdapterView_this; + else { + newFirstChangedBlock = this.mNumberOfBlocks; } - onChanged() { - this.AdapterView_this.mDataChanged = true; - this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount; - this.AdapterView_this.mItemCount = this.AdapterView_this.getAdapter().getCount(); - this.AdapterView_this.rememberSyncState(); - this.AdapterView_this.checkFocus(); - this.AdapterView_this.requestLayout(); + this.mIndexFirstChangedBlock = Math.min(this.mIndexFirstChangedBlock, newFirstChangedBlock); + let blockIndex = firstBlock; + if (createBlockBefore) { + this.mBlockEndLines[blockIndex] = startLine - 1; + this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; + blockIndex++; } - onInvalidated() { - this.AdapterView_this.mDataChanged = true; - this.AdapterView_this.mOldItemCount = this.AdapterView_this.mItemCount; - this.AdapterView_this.mItemCount = 0; - this.AdapterView_this.mSelectedPosition = AdapterView.INVALID_POSITION; - this.AdapterView_this.mSelectedRowId = AdapterView.INVALID_ROW_ID; - this.AdapterView_this.mNextSelectedPosition = AdapterView.INVALID_POSITION; - this.AdapterView_this.mNextSelectedRowId = AdapterView.INVALID_ROW_ID; - this.AdapterView_this.mNeedSync = false; - this.AdapterView_this.checkFocus(); - this.AdapterView_this.requestLayout(); + if (createBlock) { + this.mBlockEndLines[blockIndex] = startLine + newLineCount - 1; + this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; + blockIndex++; } - clearSavedState() { + if (createBlockAfter) { + this.mBlockEndLines[blockIndex] = lastBlockEndLine + deltaLines; + this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; } } - AdapterView.AdapterDataSetObserver = AdapterDataSetObserver; - })(AdapterView = widget.AdapterView || (widget.AdapterView = {})); - class SelectionNotifier { - constructor(AdapterView_this) { - this.AdapterView_this = AdapterView_this; + setBlocksDataForTest(blockEndLines, blockIndices, numberOfBlocks) { + this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray(blockEndLines.length); + this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(blockIndices.length); + System.arraycopy(blockEndLines, 0, this.mBlockEndLines, 0, blockEndLines.length); + System.arraycopy(blockIndices, 0, this.mBlockIndices, 0, blockIndices.length); + this.mNumberOfBlocks = numberOfBlocks; } - run() { - if (this.AdapterView_this.mDataChanged) { - if (this.AdapterView_this.getAdapter() != null) { - this.AdapterView_this.post(this); - } + getBlockEndLines() { + return this.mBlockEndLines; + } + getBlockIndices() { + return this.mBlockIndices; + } + getNumberOfBlocks() { + return this.mNumberOfBlocks; + } + getIndexFirstChangedBlock() { + return this.mIndexFirstChangedBlock; + } + setIndexFirstChangedBlock(i) { + this.mIndexFirstChangedBlock = i; + } + getLineCount() { + return this.mInts.size() - 1; + } + getLineTop(line) { + return this.mInts.getValue(line, DynamicLayout.TOP); + } + getLineDescent(line) { + return this.mInts.getValue(line, DynamicLayout.DESCENT); + } + getLineStart(line) { + return this.mInts.getValue(line, DynamicLayout.START) & DynamicLayout.START_MASK; + } + getLineContainsTab(line) { + return (this.mInts.getValue(line, DynamicLayout.TAB) & DynamicLayout.TAB_MASK) != 0; + } + getParagraphDirection(line) { + return this.mInts.getValue(line, DynamicLayout.DIR) >> DynamicLayout.DIR_SHIFT; + } + getLineDirections(line) { + return this.mObjects.getValue(line, 0); + } + getTopPadding() { + return this.mTopPadding; + } + getBottomPadding() { + return this.mBottomPadding; + } + getEllipsizedWidth() { + return this.mEllipsizedWidth; + } + getEllipsisStart(line) { + if (this.mEllipsizeAt == null) { + return 0; } - else { - this.AdapterView_this.fireOnSelected(); - this.AdapterView_this.performAccessibilityActionsOnSelected(); + return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_START); + } + getEllipsisCount(line) { + if (this.mEllipsizeAt == null) { + return 0; } + return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_COUNT); } } - })(widget = android.widget || (android.widget = {})); + DynamicLayout.PRIORITY = 128; + DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH = 400; + DynamicLayout.INVALID_BLOCK_INDEX = -1; + DynamicLayout.sStaticLayout = new StaticLayout(null, 0, 0, null, 0, null, null, 1, 0, true); + DynamicLayout.sLock = new Array(0); + DynamicLayout.START = 0; + DynamicLayout.DIR = DynamicLayout.START; + DynamicLayout.TAB = DynamicLayout.START; + DynamicLayout.TOP = 1; + DynamicLayout.DESCENT = 2; + DynamicLayout.COLUMNS_NORMAL = 3; + DynamicLayout.ELLIPSIS_START = 3; + DynamicLayout.ELLIPSIS_COUNT = 4; + DynamicLayout.COLUMNS_ELLIPSIZE = 5; + DynamicLayout.START_MASK = 0x1FFFFFFF; + DynamicLayout.DIR_SHIFT = 30; + DynamicLayout.TAB_MASK = 0x20000000; + DynamicLayout.ELLIPSIS_UNDEFINED = 0x80000000; + text_11.DynamicLayout = DynamicLayout; + })(text = android.text || (android.text = {})); })(android || (android = {})); var android; (function (android) { - var widget; - (function (widget) { - var Integer = java.lang.Integer; - var Adapter; - (function (Adapter) { - Adapter.IGNORE_ITEM_VIEW_TYPE = widget.AdapterView.ITEM_VIEW_TYPE_IGNORE; - Adapter.NO_SELECTION = Integer.MIN_VALUE; - })(Adapter = widget.Adapter || (widget.Adapter = {})); - })(widget = android.widget || (android.widget = {})); + var text; + (function (text) { + var method; + (function (method) { + var TransformationMethod; + (function (TransformationMethod) { + function isImpl(obj) { + return obj && obj['getTransformation'] && obj['onFocusChanged']; + } + TransformationMethod.isImpl = isImpl; + })(TransformationMethod = method.TransformationMethod || (method.TransformationMethod = {})); + })(method = text.method || (text.method = {})); + })(text = android.text || (android.text = {})); })(android || (android = {})); var android; (function (android) { var text; - (function (text_8) { - var Paint = android.graphics.Paint; - var ParagraphStyle = android.text.style.ParagraphStyle; - var Layout = android.text.Layout; - var Spanned = android.text.Spanned; - var TextDirectionHeuristics = android.text.TextDirectionHeuristics; - var TextLine = android.text.TextLine; - var TextPaint = android.text.TextPaint; - var TextUtils = android.text.TextUtils; - class BoringLayout extends Layout { - constructor(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { - super(source, paint, outerwidth, align, TextDirectionHeuristics.FIRSTSTRONG_LTR, spacingmult, spacingadd); - this.mBottom = 0; - this.mDesc = 0; - this.mTopPadding = 0; - this.mBottomPadding = 0; - this.mMax = 0; - this.mEllipsizedWidth = 0; - this.mEllipsizedStart = 0; - this.mEllipsizedCount = 0; - let trust; - if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) { - this.mEllipsizedWidth = outerwidth; - this.mEllipsizedStart = 0; - this.mEllipsizedCount = 0; - trust = true; + (function (text) { + var method; + (function (method) { + var TransformationMethod = android.text.method.TransformationMethod; + var TransformationMethod2; + (function (TransformationMethod2) { + function isImpl(obj) { + return TransformationMethod.isImpl(obj) && obj['setLengthChangesAllowed']; } - else { - this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd); - this.mEllipsizedWidth = ellipsizedWidth; - trust = false; + TransformationMethod2.isImpl = isImpl; + })(TransformationMethod2 = method.TransformationMethod2 || (method.TransformationMethod2 = {})); + })(method = text.method || (text.method = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var method; + (function (method) { + var Log = android.util.Log; + class AllCapsTransformationMethod { + constructor(context) { } - this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust); - } - static make(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { - return new BoringLayout(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize, ellipsizedWidth); - } - replaceOrMake(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, ellipsize = null, ellipsizedWidth = outerwidth) { - let trust; - if (ellipsize == null || ellipsize == TextUtils.TruncateAt.MARQUEE) { - this.replaceWith(source, paint, outerwidth, align, spacingmult, spacingadd); - this.mEllipsizedWidth = outerwidth; - this.mEllipsizedStart = 0; - this.mEllipsizedCount = 0; - trust = true; + getTransformation(source, view) { + if (this.mEnabled) { + return source != null ? source.toLocaleUpperCase() : null; + } + Log.w(AllCapsTransformationMethod.TAG, "Caller did not enable length changes; not transforming text"); + return source; } - else { - this.replaceWith(TextUtils.ellipsize(source, paint, ellipsizedWidth, ellipsize, true, this), paint, outerwidth, align, spacingmult, spacingadd); - this.mEllipsizedWidth = ellipsizedWidth; - trust = false; + onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) { + } + setLengthChangesAllowed(allowLengthChanges) { + this.mEnabled = allowLengthChanges; } - this.init(this.getText(), paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trust); - return this; } - init(source, paint, outerwidth, align, spacingmult, spacingadd, metrics, includepad, trustWidth) { - let spacing; - if (Object.getPrototypeOf(source) === String.prototype && align == Layout.Alignment.ALIGN_NORMAL) { - this.mDirect = source.toString(); + AllCapsTransformationMethod.TAG = "AllCapsTransformationMethod"; + method.AllCapsTransformationMethod = AllCapsTransformationMethod; + })(method = text.method || (text.method = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var method; + (function (method) { + class ReplacementTransformationMethod { + getTransformation(source, v) { + let original = this.getOriginal(); + let replacement = this.getReplacement(); + let doNothing = true; + let n = original.length; + for (let i = 0; i < n; i++) { + if (source.indexOf(original[i]) >= 0) { + doNothing = false; + break; + } + } + if (doNothing) { + return source; + } + return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement).toString(); } - else { - this.mDirect = null; + onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) { } - this.mPaint = paint; - if (includepad) { - spacing = metrics.bottom - metrics.top; + } + method.ReplacementTransformationMethod = ReplacementTransformationMethod; + (function (ReplacementTransformationMethod) { + class ReplacementCharSequence extends String { + constructor(source, original, replacement) { + super(source); + this.mSource = source; + this.mOriginal = original; + this.mReplacement = replacement; + } + charAt(i) { + let c = this.mSource.charAt(i); + let n = this.mOriginal.length; + for (let j = 0; j < n; j++) { + if (c == this.mOriginal[j]) { + c = this.mReplacement[j]; + } + } + return c; + } + toString() { + return this.startReplace(0, this.length); + } + substr(from, length) { + return this.startReplace(from, from + length); + } + substring(start, end) { + return this.startReplace(start, end); + } + startReplace(start, end) { + let dest = this.mSource.substring(start, end).split(''); + let offend = end - start; + let n = this.mOriginal.length; + for (let i = 0; i < offend; i++) { + let c = dest[i]; + for (let j = 0; j < n; j++) { + if (c == this.mOriginal[j]) { + dest[i] = this.mReplacement[j]; + } + } + } + return dest.join(''); + } } - else { - spacing = metrics.descent - metrics.ascent; + ReplacementTransformationMethod.ReplacementCharSequence = ReplacementCharSequence; + })(ReplacementTransformationMethod = method.ReplacementTransformationMethod || (method.ReplacementTransformationMethod = {})); + })(method = text.method || (text.method = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var android; +(function (android) { + var text; + (function (text) { + var method; + (function (method) { + var ReplacementTransformationMethod = android.text.method.ReplacementTransformationMethod; + class SingleLineTransformationMethod extends ReplacementTransformationMethod { + getOriginal() { + return SingleLineTransformationMethod.ORIGINAL; } - if (spacingmult != 1 || spacingadd != 0) { - spacing = Math.floor((spacing * spacingmult + spacingadd + 0.5)); + getReplacement() { + return SingleLineTransformationMethod.REPLACEMENT; } - this.mBottom = spacing; - if (includepad) { - this.mDesc = spacing + metrics.top; + static getInstance() { + if (SingleLineTransformationMethod.sInstance != null) + return SingleLineTransformationMethod.sInstance; + SingleLineTransformationMethod.sInstance = new SingleLineTransformationMethod(); + return SingleLineTransformationMethod.sInstance; } - else { - this.mDesc = spacing + metrics.ascent; + } + SingleLineTransformationMethod.ORIGINAL = ['\n', '\r']; + SingleLineTransformationMethod.REPLACEMENT = [' ', '']; + method.SingleLineTransformationMethod = SingleLineTransformationMethod; + })(method = text.method || (text.method = {})); + })(text = android.text || (android.text = {})); +})(android || (android = {})); +var androidui; +(function (androidui) { + var util; + (function (util) { + class NumberChecker { + static warnNotNumber(...n) { + try { + this.assetNotNumber(...n); } - if (trustWidth) { - this.mMax = metrics.width; + catch (e) { + console.error(e); + return true; } - else { - let line = TextLine.obtain(); - line.set(paint, source, 0, source.length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null); - this.mMax = Math.floor(Math.ceil(line.metrics(null))); - TextLine.recycle(line); + return false; + } + static assetNotNumber(...ns) { + if (!this.checkIsNumber()) { + throw Error('assetNotNumber : ' + ns); } - if (includepad) { - this.mTopPadding = metrics.top - metrics.ascent; - this.mBottomPadding = metrics.bottom - metrics.descent; + } + static checkIsNumber(...ns) { + if (ns == null) + return false; + for (let n of ns) { + if (n == null || Number.isNaN(n)) + return false; } + return true; } - static isBoring(text, paint, textDir = TextDirectionHeuristics.FIRSTSTRONG_LTR, metrics = null) { - let temp; - let length = text.length; - let boring = true; - outer: for (let i = 0; i < length; i += 500) { - let j = i + 500; - if (j > length) - j = length; - temp = text.substring(i, j); - let n = j - i; - for (let a = 0; a < n; a++) { - let c = temp[a]; - if (c == '\n' || c == '\t') { - boring = false; - break outer; + } + util.NumberChecker = NumberChecker; + })(util = androidui.util || (androidui.util = {})); +})(androidui || (androidui = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var ViewConfiguration = android.view.ViewConfiguration; + var Resources = android.content.res.Resources; + var SystemClock = android.os.SystemClock; + var Log = android.util.Log; + var NumberChecker = androidui.util.NumberChecker; + class OverScroller { + constructor(interpolator, flywheel = true) { + this.mMode = 0; + this.mFlywheel = true; + this.mInterpolator = interpolator; + this.mFlywheel = flywheel; + this.mScrollerX = new SplineOverScroller(); + this.mScrollerY = new SplineOverScroller(); + } + setInterpolator(interpolator) { + this.mInterpolator = interpolator; + } + setFriction(friction) { + NumberChecker.warnNotNumber(friction); + this.mScrollerX.setFriction(friction); + this.mScrollerY.setFriction(friction); + } + isFinished() { + return this.mScrollerX.mFinished && this.mScrollerY.mFinished; + } + forceFinished(finished) { + this.mScrollerX.mFinished = this.mScrollerY.mFinished = finished; + } + getCurrX() { + return this.mScrollerX.mCurrentPosition; + } + getCurrY() { + return this.mScrollerY.mCurrentPosition; + } + getCurrVelocity() { + let squaredNorm = this.mScrollerX.mCurrVelocity * this.mScrollerX.mCurrVelocity; + squaredNorm += this.mScrollerY.mCurrVelocity * this.mScrollerY.mCurrVelocity; + return Math.sqrt(squaredNorm); + } + getStartX() { + return this.mScrollerX.mStart; + } + getStartY() { + return this.mScrollerY.mStart; + } + getFinalX() { + return this.mScrollerX.mFinal; + } + getFinalY() { + return this.mScrollerY.mFinal; + } + getDuration() { + return Math.max(this.mScrollerX.mDuration, this.mScrollerY.mDuration); + } + computeScrollOffset() { + if (this.isFinished()) { + return false; + } + switch (this.mMode) { + case OverScroller.SCROLL_MODE: + let time = SystemClock.uptimeMillis(); + const elapsedTime = time - this.mScrollerX.mStartTime; + const duration = this.mScrollerX.mDuration; + if (elapsedTime < duration) { + let q = (elapsedTime) / duration; + if (this.mInterpolator == null) { + q = Scroller_viscousFluid(q); + } + else { + q = this.mInterpolator.getInterpolation(q); + } + this.mScrollerX.updateScroll(q); + this.mScrollerY.updateScroll(q); + } + else { + this.abortAnimation(); + } + break; + case OverScroller.FLING_MODE: + if (!this.mScrollerX.mFinished) { + if (!this.mScrollerX.update()) { + if (!this.mScrollerX.continueWhenFinished()) { + this.mScrollerX.finish(); + } + } + } + if (!this.mScrollerY.mFinished) { + if (!this.mScrollerY.update()) { + if (!this.mScrollerY.continueWhenFinished()) { + this.mScrollerY.finish(); + } + } } - } - if (textDir != null && textDir.isRtl(temp, 0, n)) { - boring = false; - break outer; - } - } - if (boring && Spanned.isImplements(text)) { - let sp = text; - let styles = sp.getSpans(0, length, ParagraphStyle.type); - if (styles.length > 0) { - boring = false; - } - } - if (boring) { - let fm = metrics; - if (fm == null) { - fm = new BoringLayout.Metrics(); - } - let line = TextLine.obtain(); - line.set(paint, text, 0, length, Layout.DIR_LEFT_TO_RIGHT, Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null); - fm.width = Math.floor(Math.ceil(line.metrics(fm))); - TextLine.recycle(line); - return fm; - } - else { - return null; + break; } + return true; } - getHeight() { - return this.mBottom; - } - getLineCount() { - return 1; + startScroll(startX, startY, dx, dy, duration = OverScroller.DEFAULT_DURATION) { + NumberChecker.warnNotNumber(startX, startY, dx, dy, duration); + this.mMode = OverScroller.SCROLL_MODE; + this.mScrollerX.startScroll(startX, dx, duration); + this.mScrollerY.startScroll(startY, dy, duration); } - getLineTop(line) { - if (line == 0) - return 0; - else - return this.mBottom; + springBack(startX, startY, minX, maxX, minY, maxY) { + NumberChecker.warnNotNumber(startX, startY, minX, maxX, minY, maxY); + this.mMode = OverScroller.FLING_MODE; + const spingbackX = this.mScrollerX.springback(startX, minX, maxX); + const spingbackY = this.mScrollerY.springback(startY, minY, maxY); + return spingbackX || spingbackY; } - getLineDescent(line) { - return this.mDesc; + fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX = 0, overY = 0) { + NumberChecker.warnNotNumber(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY); + if (this.mFlywheel && !this.isFinished()) { + let oldVelocityX = this.mScrollerX.mCurrVelocity; + let oldVelocityY = this.mScrollerY.mCurrVelocity; + if (Math_signum(velocityX) == Math_signum(oldVelocityX) && + Math_signum(velocityY) == Math_signum(oldVelocityY)) { + velocityX += oldVelocityX; + velocityY += oldVelocityY; + } + } + this.mMode = OverScroller.FLING_MODE; + this.mScrollerX.fling(startX, velocityX, minX, maxX, overX); + this.mScrollerY.fling(startY, velocityY, minY, maxY, overY); } - getLineStart(line) { - if (line == 0) - return 0; - else - return this.getText().length; + notifyHorizontalEdgeReached(startX, finalX, overX) { + NumberChecker.warnNotNumber(startX, finalX, overX); + this.mScrollerX.notifyEdgeReached(startX, finalX, overX); } - getParagraphDirection(line) { - return BoringLayout.DIR_LEFT_TO_RIGHT; + notifyVerticalEdgeReached(startY, finalY, overY) { + NumberChecker.warnNotNumber(startY, finalY, overY); + this.mScrollerY.notifyEdgeReached(startY, finalY, overY); } - getLineContainsTab(line) { - return false; + isOverScrolled() { + return ((!this.mScrollerX.mFinished && + this.mScrollerX.mState != SplineOverScroller.SPLINE) || + (!this.mScrollerY.mFinished && + this.mScrollerY.mState != SplineOverScroller.SPLINE)); } - getLineMax(line) { - return this.mMax; + abortAnimation() { + this.mScrollerX.finish(); + this.mScrollerY.finish(); } - getLineDirections(line) { - return Layout.DIRS_ALL_LEFT_TO_RIGHT; + timePassed() { + const time = SystemClock.uptimeMillis(); + const startTime = Math.min(this.mScrollerX.mStartTime, this.mScrollerY.mStartTime); + return (time - startTime); } - getTopPadding() { - return this.mTopPadding; + isScrollingInDirection(xvel, yvel) { + const dx = this.mScrollerX.mFinal - this.mScrollerX.mStart; + const dy = this.mScrollerY.mFinal - this.mScrollerY.mStart; + return !this.isFinished() && Math_signum(xvel) == Math_signum(dx) && + Math_signum(yvel) == Math_signum(dy); } - getBottomPadding() { - return this.mBottomPadding; + } + OverScroller.DEFAULT_DURATION = 250; + OverScroller.SCROLL_MODE = 0; + OverScroller.FLING_MODE = 1; + widget.OverScroller = OverScroller; + class SplineOverScroller { + constructor() { + this.mStart = 0; + this.mCurrentPosition = 0; + this.mFinal = 0; + this.mVelocity = 0; + this._mCurrVelocity = 0; + this.mDeceleration = 0; + this.mStartTime = 0; + this.mDuration = 0; + this.mSplineDuration = 0; + this.mSplineDistance = 0; + this.mFinished = false; + this.mOver = 0; + this.mFlingFriction = ViewConfiguration.getScrollFriction(); + this.mState = SplineOverScroller.SPLINE; + this.mPhysicalCoeff = 0; + this.mFinished = true; + let ppi = Resources.getDisplayMetrics().density * 160; + this.mPhysicalCoeff = 9.80665 + * 39.37 + * ppi + * 0.84; } - getEllipsisCount(line) { - return this.mEllipsizedCount; + get mCurrVelocity() { + return this._mCurrVelocity; } - getEllipsisStart(line) { - return this.mEllipsizedStart; + set mCurrVelocity(value) { + if (!NumberChecker.checkIsNumber(value)) { + value = 0; + } + this._mCurrVelocity = value; } - getEllipsizedWidth() { - return this.mEllipsizedWidth; + setFriction(friction) { + this.mFlingFriction = friction; } - draw(c, highlight, highlightpaint, cursorOffset) { - if (this.mDirect != null && highlight == null) { - c.drawText(this.mDirect, 0, this.mBottom - this.mDesc, this.mPaint); - } - else { - super.draw(c, highlight, highlightpaint, cursorOffset); - } + updateScroll(q) { + this.mCurrentPosition = this.mStart + Math.round(q * (this.mFinal - this.mStart)); } - ellipsized(start, end) { - this.mEllipsizedStart = start; - this.mEllipsizedCount = end - start; + static getDeceleration(velocity) { + return velocity > 0 ? -SplineOverScroller.GRAVITY : SplineOverScroller.GRAVITY; } - } - BoringLayout.FIRST_RIGHT_TO_LEFT = '֐'.codePointAt(0); - BoringLayout.sTemp = new TextPaint(); - text_8.BoringLayout = BoringLayout; - (function (BoringLayout) { - class Metrics extends Paint.FontMetricsInt { - constructor(...args) { - super(...args); - this.width = 0; - } - toString() { - return super.toString() + " width=" + this.width; + adjustDuration(start, oldFinal, newFinal) { + let oldDistance = oldFinal - start; + let newDistance = newFinal - start; + let x = Math.abs(newDistance / oldDistance); + let index = Math.floor(SplineOverScroller.NB_SAMPLES * x); + if (index < SplineOverScroller.NB_SAMPLES) { + let x_inf = index / SplineOverScroller.NB_SAMPLES; + let x_sup = (index + 1) / SplineOverScroller.NB_SAMPLES; + let t_inf = SplineOverScroller.SPLINE_TIME[index]; + let t_sup = SplineOverScroller.SPLINE_TIME[index + 1]; + let timeCoef = t_inf + (x - x_inf) / (x_sup - x_inf) * (t_sup - t_inf); + this.mDuration *= timeCoef; } } - BoringLayout.Metrics = Metrics; - })(BoringLayout = text_8.BoringLayout || (text_8.BoringLayout = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var System = java.lang.System; - class PackedIntVector { - constructor(columns) { - this.mColumns = 0; - this.mRows = 0; - this.mRowGapStart = 0; - this.mRowGapLength = 0; - this.mColumns = columns; - this.mRows = 0; - this.mRowGapStart = 0; - this.mRowGapLength = this.mRows; - this.mValues = null; - this.mValueGap = androidui.util.ArrayCreator.newNumberArray(2 * columns); + startScroll(start, distance, duration) { + this.mFinished = false; + this.mStart = start; + this.mFinal = start + distance; + this.mStartTime = SystemClock.uptimeMillis(); + this.mDuration = duration; + this.mDeceleration = 0; + this.mVelocity = 0; } - getValue(row, column) { - const columns = this.mColumns; - if (((row | column) < 0) || (row >= this.size()) || (column >= columns)) { - throw Error(`new IndexOutOfBoundsException(row + ", " + column)`); - } - if (row >= this.mRowGapStart) { - row += this.mRowGapLength; - } - let value = this.mValues[row * columns + column]; - let valuegap = this.mValueGap; - if (row >= valuegap[column]) { - value += valuegap[column + columns]; - } - return value; + finish() { + this.mCurrentPosition = this.mFinal; + this.mFinished = true; } - setValue(row, column, value) { - if (((row | column) < 0) || (row >= this.size()) || (column >= this.mColumns)) { - throw Error(`new IndexOutOfBoundsException(row + ", " + column)`); - } - if (row >= this.mRowGapStart) { - row += this.mRowGapLength; - } - let valuegap = this.mValueGap; - if (row >= valuegap[column]) { - value -= valuegap[column + this.mColumns]; - } - this.mValues[row * this.mColumns + column] = value; + setFinalPosition(position) { + this.mFinal = position; + this.mFinished = false; } - setValueInternal(row, column, value) { - if (row >= this.mRowGapStart) { - row += this.mRowGapLength; - } - let valuegap = this.mValueGap; - if (row >= valuegap[column]) { - value -= valuegap[column + this.mColumns]; - } - this.mValues[row * this.mColumns + column] = value; + extendDuration(extend) { + let time = SystemClock.uptimeMillis(); + let elapsedTime = (time - this.mStartTime); + this.mDuration = elapsedTime + extend; + this.mFinished = false; } - adjustValuesBelow(startRow, column, delta) { - if (((startRow | column) < 0) || (startRow > this.size()) || (column >= this.width())) { - throw Error(`new IndexOutOfBoundsException(startRow + ", " + column)`); + springback(start, min, max) { + this.mFinished = true; + this.mStart = this.mFinal = start; + this.mVelocity = 0; + this.mStartTime = SystemClock.uptimeMillis(); + this.mDuration = 0; + if (start < min) { + this.startSpringback(start, min, 0); } - if (startRow >= this.mRowGapStart) { - startRow += this.mRowGapLength; + else if (start > max) { + this.startSpringback(start, max, 0); } - this.moveValueGapTo(column, startRow); - this.mValueGap[column + this.mColumns] += delta; + return !this.mFinished; } - insertAt(row, values) { - if ((row < 0) || (row > this.size())) { - throw Error(`new IndexOutOfBoundsException("row " + row)`); - } - if ((values != null) && (values.length < this.width())) { - throw Error(`new IndexOutOfBoundsException("value count " + values.length)`); + startSpringback(start, end, velocity) { + this.mFinished = false; + this.mState = SplineOverScroller.CUBIC; + this.mStart = start; + this.mFinal = end; + const delta = start - end; + this.mDeceleration = SplineOverScroller.getDeceleration(delta); + this.mVelocity = -delta; + this.mOver = Math.abs(delta); + const density = android.content.res.Resources.getDisplayMetrics().density; + this.mDuration = Math.floor(1000.0 * Math.sqrt(-2.0 * (delta / density) / this.mDeceleration)); + } + fling(start, velocity, min, max, over) { + this.mOver = over; + this.mFinished = false; + this.mCurrVelocity = this.mVelocity = velocity; + this.mDuration = this.mSplineDuration = 0; + this.mStartTime = SystemClock.uptimeMillis(); + this.mCurrentPosition = this.mStart = start; + if (start > max || start < min) { + this.startAfterEdge(start, min, max, velocity); + return; } - this.moveRowGapTo(row); - if (this.mRowGapLength == 0) { - this.growBuffer(); + this.mState = SplineOverScroller.SPLINE; + let totalDistance = 0.0; + if (velocity != 0) { + this.mDuration = this.mSplineDuration = this.getSplineFlingDuration(velocity); + totalDistance = this.getSplineFlingDistance(velocity); } - this.mRowGapStart++; - this.mRowGapLength--; - if (values == null) { - for (let i = this.mColumns - 1; i >= 0; i--) { - this.setValueInternal(row, i, 0); - } + this.mSplineDistance = (totalDistance * Math_signum(velocity)); + this.mFinal = start + this.mSplineDistance; + if (this.mFinal < min) { + this.adjustDuration(this.mStart, this.mFinal, min); + this.mFinal = min; } - else { - for (let i = this.mColumns - 1; i >= 0; i--) { - this.setValueInternal(row, i, values[i]); - } + if (this.mFinal > max) { + this.adjustDuration(this.mStart, this.mFinal, max); + this.mFinal = max; } } - deleteAt(row, count) { - if (((row | count) < 0) || (row + count > this.size())) { - throw Error(`new IndexOutOfBoundsException(row + ", " + count)`); - } - this.moveRowGapTo(row + count); - this.mRowGapStart -= count; - this.mRowGapLength += count; + getSplineDeceleration(velocity) { + return Math.log(SplineOverScroller.INFLEXION * Math.abs(velocity) / (this.mFlingFriction * this.mPhysicalCoeff)); } - size() { - return this.mRows - this.mRowGapLength; + getSplineFlingDistance(velocity) { + let l = this.getSplineDeceleration(velocity); + let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0; + return this.mFlingFriction * this.mPhysicalCoeff * Math.exp(SplineOverScroller.DECELERATION_RATE / decelMinusOne * l); } - width() { - return this.mColumns; + getSplineFlingDuration(velocity) { + let l = this.getSplineDeceleration(velocity); + let decelMinusOne = SplineOverScroller.DECELERATION_RATE - 1.0; + return (1000.0 * Math.exp(l / decelMinusOne)); } - growBuffer() { - const columns = this.mColumns; - let newsize = this.size() + 1; - newsize = (newsize * columns) / columns; - let newvalues = androidui.util.ArrayCreator.newNumberArray(newsize * columns); - const valuegap = this.mValueGap; - const rowgapstart = this.mRowGapStart; - let after = this.mRows - (rowgapstart + this.mRowGapLength); - if (this.mValues != null) { - System.arraycopy(this.mValues, 0, newvalues, 0, columns * rowgapstart); - System.arraycopy(this.mValues, (this.mRows - after) * columns, newvalues, (newsize - after) * columns, after * columns); - } - for (let i = 0; i < columns; i++) { - if (valuegap[i] >= rowgapstart) { - valuegap[i] += newsize - this.mRows; - if (valuegap[i] < rowgapstart) { - valuegap[i] = rowgapstart; - } - } - } - this.mRowGapLength += newsize - this.mRows; - this.mRows = newsize; - this.mValues = newvalues; + fitOnBounceCurve(start, end, velocity) { + let durationToApex = -velocity / this.mDeceleration; + let distanceToApex = velocity * velocity / 2.0 / Math.abs(this.mDeceleration); + let distanceToEdge = Math.abs(end - start); + let totalDuration = Math.sqrt(2.0 * (distanceToApex + distanceToEdge) / Math.abs(this.mDeceleration)); + this.mStartTime -= (1000 * (totalDuration - durationToApex)); + this.mStart = end; + this.mVelocity = (-this.mDeceleration * totalDuration); } - moveValueGapTo(column, where) { - const valuegap = this.mValueGap; - const values = this.mValues; - const columns = this.mColumns; - if (where == valuegap[column]) { - return; - } - else if (where > valuegap[column]) { - for (let i = valuegap[column]; i < where; i++) { - values[i * columns + column] += valuegap[column + columns]; - } - } - else { - for (let i = where; i < valuegap[column]; i++) { - values[i * columns + column] -= valuegap[column + columns]; - } - } - valuegap[column] = where; + startBounceAfterEdge(start, end, velocity) { + this.mDeceleration = SplineOverScroller.getDeceleration(velocity == 0 ? start - end : velocity); + this.fitOnBounceCurve(start, end, velocity); + this.onEdgeReached(); } - moveRowGapTo(where) { - if (where == this.mRowGapStart) { + startAfterEdge(start, min, max, velocity) { + if (start > min && start < max) { + Log.e("OverScroller", "startAfterEdge called from a valid position"); + this.mFinished = true; return; } - else if (where > this.mRowGapStart) { - let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength); - const columns = this.mColumns; - const valuegap = this.mValueGap; - const values = this.mValues; - const gapend = this.mRowGapStart + this.mRowGapLength; - for (let i = gapend; i < gapend + moving; i++) { - let destrow = i - gapend + this.mRowGapStart; - for (let j = 0; j < columns; j++) { - let val = values[i * columns + j]; - if (i >= valuegap[j]) { - val += valuegap[j + columns]; - } - if (destrow >= valuegap[j]) { - val -= valuegap[j + columns]; - } - values[destrow * columns + j] = val; - } - } + const positive = start > max; + const edge = positive ? max : min; + const overDistance = start - edge; + let keepIncreasing = overDistance * velocity >= 0; + if (keepIncreasing) { + this.startBounceAfterEdge(start, edge, velocity); } else { - let moving = this.mRowGapStart - where; - const columns = this.mColumns; - const valuegap = this.mValueGap; - const values = this.mValues; - const gapend = this.mRowGapStart + this.mRowGapLength; - for (let i = where + moving - 1; i >= where; i--) { - let destrow = i - where + gapend - moving; - for (let j = 0; j < columns; j++) { - let val = values[i * columns + j]; - if (i >= valuegap[j]) { - val += valuegap[j + columns]; - } - if (destrow >= valuegap[j]) { - val -= valuegap[j + columns]; - } - values[destrow * columns + j] = val; - } + const totalDistance = this.getSplineFlingDistance(velocity); + if (totalDistance > Math.abs(overDistance)) { + this.fling(start, velocity, positive ? min : start, positive ? start : max, this.mOver); + } + else { + this.startSpringback(start, edge, velocity); } } - this.mRowGapStart = where; - } - } - text.PackedIntVector = PackedIntVector; - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var System = java.lang.System; - class PackedObjectVector { - constructor(columns) { - this.mColumns = 0; - this.mRows = 0; - this.mRowGapStart = 0; - this.mRowGapLength = 0; - this.mColumns = columns; - this.mRows = 1; - this.mRowGapStart = 0; - this.mRowGapLength = this.mRows; - this.mValues = new Array(this.mRows * this.mColumns); - } - getValue(row, column) { - if (row >= this.mRowGapStart) - row += this.mRowGapLength; - let value = this.mValues[row * this.mColumns + column]; - return value; - } - setValue(row, column, value) { - if (row >= this.mRowGapStart) - row += this.mRowGapLength; - this.mValues[row * this.mColumns + column] = value; - } - insertAt(row, values) { - this.moveRowGapTo(row); - if (this.mRowGapLength == 0) - this.growBuffer(); - this.mRowGapStart++; - this.mRowGapLength--; - if (values == null) - for (let i = 0; i < this.mColumns; i++) - this.setValue(row, i, null); - else - for (let i = 0; i < this.mColumns; i++) - this.setValue(row, i, values[i]); - } - deleteAt(row, count) { - this.moveRowGapTo(row + count); - this.mRowGapStart -= count; - this.mRowGapLength += count; - if (this.mRowGapLength > this.size() * 2) { - } - } - size() { - return this.mRows - this.mRowGapLength; } - width() { - return this.mColumns; + notifyEdgeReached(start, end, over) { + if (this.mState == SplineOverScroller.SPLINE) { + this.mOver = over; + this.mStartTime = SystemClock.uptimeMillis(); + this.startAfterEdge(start, end, end, this.mCurrVelocity); + } } - growBuffer() { - let newsize = this.size() + 1; - newsize = (newsize * this.mColumns) / this.mColumns; - let newvalues = new Array(newsize * this.mColumns); - let after = this.mRows - (this.mRowGapStart + this.mRowGapLength); - System.arraycopy(this.mValues, 0, newvalues, 0, this.mColumns * this.mRowGapStart); - System.arraycopy(this.mValues, (this.mRows - after) * this.mColumns, newvalues, (newsize - after) * this.mColumns, after * this.mColumns); - this.mRowGapLength += newsize - this.mRows; - this.mRows = newsize; - this.mValues = newvalues; + onEdgeReached() { + let distance = this.mVelocity * this.mVelocity / (2 * Math.abs(this.mDeceleration)); + const sign = Math_signum(this.mVelocity); + if (distance > this.mOver) { + this.mDeceleration = -sign * this.mVelocity * this.mVelocity / (2.0 * this.mOver); + distance = this.mOver; + } + this.mOver = distance; + this.mState = SplineOverScroller.BALLISTIC; + this.mFinal = this.mStart + (this.mVelocity > 0 ? distance : -distance); + this.mDuration = -(1000 * this.mVelocity / this.mDeceleration); } - moveRowGapTo(where) { - if (where == this.mRowGapStart) - return; - if (where > this.mRowGapStart) { - let moving = where + this.mRowGapLength - (this.mRowGapStart + this.mRowGapLength); - for (let i = this.mRowGapStart + this.mRowGapLength; i < this.mRowGapStart + this.mRowGapLength + moving; i++) { - let destrow = i - (this.mRowGapStart + this.mRowGapLength) + this.mRowGapStart; - for (let j = 0; j < this.mColumns; j++) { - let val = this.mValues[i * this.mColumns + j]; - this.mValues[destrow * this.mColumns + j] = val; + continueWhenFinished() { + switch (this.mState) { + case SplineOverScroller.SPLINE: + if (this.mDuration < this.mSplineDuration) { + this.mStart = this.mFinal; + this.mVelocity = this.mCurrVelocity; + this.mDeceleration = SplineOverScroller.getDeceleration(this.mVelocity); + this.mStartTime += this.mDuration; + this.onEdgeReached(); } - } - } - else { - let moving = this.mRowGapStart - where; - for (let i = where + moving - 1; i >= where; i--) { - let destrow = i - where + this.mRowGapStart + this.mRowGapLength - moving; - for (let j = 0; j < this.mColumns; j++) { - let val = this.mValues[i * this.mColumns + j]; - this.mValues[destrow * this.mColumns + j] = val; + else { + return false; } - } + break; + case SplineOverScroller.BALLISTIC: + this.mStartTime += this.mDuration; + this.startSpringback(this.mFinal, this.mStart, 0); + break; + case SplineOverScroller.CUBIC: + return false; } - this.mRowGapStart = where; + this.update(); + return true; } - dump() { - for (let i = 0; i < this.mRows; i++) { - for (let j = 0; j < this.mColumns; j++) { - let val = this.mValues[i * this.mColumns + j]; - if (i < this.mRowGapStart || i >= this.mRowGapStart + this.mRowGapLength) - System.out.print(val + " "); - else - System.out.print("(" + val + ") "); + update() { + const time = SystemClock.uptimeMillis(); + const currentTime = time - this.mStartTime; + if (currentTime > this.mDuration) { + return false; + } + let distance = 0; + switch (this.mState) { + case SplineOverScroller.SPLINE: { + const t = currentTime / this.mSplineDuration; + const index = Math.floor(SplineOverScroller.NB_SAMPLES * t); + let distanceCoef = 1; + let velocityCoef = 0; + if (index < SplineOverScroller.NB_SAMPLES) { + const t_inf = index / SplineOverScroller.NB_SAMPLES; + const t_sup = (index + 1) / SplineOverScroller.NB_SAMPLES; + const d_inf = SplineOverScroller.SPLINE_POSITION[index]; + const d_sup = SplineOverScroller.SPLINE_POSITION[index + 1]; + velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); + distanceCoef = d_inf + (t - t_inf) * velocityCoef; + } + distance = distanceCoef * this.mSplineDistance; + this.mCurrVelocity = velocityCoef * this.mSplineDistance / this.mSplineDuration * 1000; + break; + } + case SplineOverScroller.BALLISTIC: { + const t = currentTime / 1000; + this.mCurrVelocity = this.mVelocity + this.mDeceleration * t; + distance = this.mVelocity * t + this.mDeceleration * t * t / 2; + break; + } + case SplineOverScroller.CUBIC: { + const t = (currentTime) / this.mDuration; + const t2 = t * t; + const sign = Math_signum(this.mVelocity); + distance = sign * this.mOver * (3 * t2 - 2 * t * t2); + this.mCurrVelocity = sign * this.mOver * 6 * (-t + t2); + break; } - System.out.print(" << \n"); } - System.out.print("-----\n\n"); + this.mCurrentPosition = this.mStart + Math.round(distance); + return true; } } - text.PackedObjectVector = PackedObjectVector; - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var Spannable; - (function (Spannable) { - function isImpl(obj) { - return obj && obj['setSpan'] && obj['removeSpan']; - } - Spannable.isImpl = isImpl; - class Factory { - static getInstance() { - return Factory.sInstance; + SplineOverScroller.DECELERATION_RATE = (Math.log(0.78) / Math.log(0.9)); + SplineOverScroller.INFLEXION = 0.35; + SplineOverScroller.START_TENSION = 0.5; + SplineOverScroller.END_TENSION = 1.0; + SplineOverScroller.P1 = SplineOverScroller.START_TENSION * SplineOverScroller.INFLEXION; + SplineOverScroller.P2 = 1.0 - SplineOverScroller.END_TENSION * (1 - SplineOverScroller.INFLEXION); + SplineOverScroller.NB_SAMPLES = 100; + SplineOverScroller.SPLINE_POSITION = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1); + SplineOverScroller.SPLINE_TIME = androidui.util.ArrayCreator.newNumberArray(SplineOverScroller.NB_SAMPLES + 1); + SplineOverScroller.SPLINE = 0; + SplineOverScroller.CUBIC = 1; + SplineOverScroller.BALLISTIC = 2; + SplineOverScroller.GRAVITY = 2000; + SplineOverScroller._staticFunc = function () { + let x_min = 0.0; + let y_min = 0.0; + for (let i = 0; i < SplineOverScroller.NB_SAMPLES; i++) { + const alpha = i / SplineOverScroller.NB_SAMPLES; + let x_max = 1.0; + let x, tx, coef; + while (true) { + x = x_min + (x_max - x_min) / 2.0; + coef = 3.0 * x * (1.0 - x); + tx = coef * ((1.0 - x) * SplineOverScroller.P1 + x * SplineOverScroller.P2) + x * x * x; + if (Math.abs(tx - alpha) < 1E-5) + break; + if (tx > alpha) + x_max = x; + else + x_min = x; } - newSpannable(source) { - return source; + SplineOverScroller.SPLINE_POSITION[i] = coef * ((1.0 - x) * SplineOverScroller.START_TENSION + x) + x * x * x; + let y_max = 1.0; + let y, dy; + while (true) { + y = y_min + (y_max - y_min) / 2.0; + coef = 3.0 * y * (1.0 - y); + dy = coef * ((1.0 - y) * SplineOverScroller.START_TENSION + y) + y * y * y; + if (Math.abs(dy - alpha) < 1E-5) + break; + if (dy > alpha) + y_max = y; + else + y_min = y; } + SplineOverScroller.SPLINE_TIME[i] = coef * ((1.0 - y) * SplineOverScroller.P1 + y * SplineOverScroller.P2) + y * y * y; } - Factory.sInstance = new Factory(); - Spannable.Factory = Factory; - })(Spannable = text.Spannable || (text.Spannable = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text_9) { - var style; - (function (style) { - var LineHeightSpan; - (function (LineHeightSpan) { - LineHeightSpan.type = Symbol(); - })(LineHeightSpan = style.LineHeightSpan || (style.LineHeightSpan = {})); - })(style = text_9.style || (text_9.style = {})); - })(text = android.text || (android.text = {})); + SplineOverScroller.SPLINE_POSITION[SplineOverScroller.NB_SAMPLES] = SplineOverScroller.SPLINE_TIME[SplineOverScroller.NB_SAMPLES] = 1.0; + }(); + function Math_signum(value) { + if (value === 0 || Number.isNaN(value)) + return value; + return Math.abs(value) === value ? 1 : -1; + } + let sViscousFluidScale = 8; + let sViscousFluidNormalize = 1; + function Scroller_viscousFluid(x) { + x *= sViscousFluidScale; + if (x < 1) { + x -= (1 - Math.exp(-x)); + } + else { + let start = 0.36787944117; + x = 1 - Math.exp(1 - x); + x = start + x * (1 - start); + } + x *= sViscousFluidNormalize; + return x; + } + sViscousFluidNormalize = 1 / Scroller_viscousFluid(1); + })(widget = android.widget || (android.widget = {})); })(android || (android = {})); var android; (function (android) { - var text; - (function (text_10) { + var widget; + (function (widget) { + var ColorStateList = android.content.res.ColorStateList; var Paint = android.graphics.Paint; - var LeadingMarginSpan = android.text.style.LeadingMarginSpan; - var LeadingMarginSpan2 = android.text.style.LeadingMarginSpan.LeadingMarginSpan2; - var LineHeightSpan = android.text.style.LineHeightSpan; - var MetricAffectingSpan = android.text.style.MetricAffectingSpan; - var TabStopSpan = android.text.style.TabStopSpan; - var Integer = java.lang.Integer; - var System = java.lang.System; + var Path = android.graphics.Path; + var Rect = android.graphics.Rect; + var Color = android.graphics.Color; + var RectF = android.graphics.RectF; + var Handler = android.os.Handler; + var BoringLayout = android.text.BoringLayout; + var DynamicLayout = android.text.DynamicLayout; var Layout = android.text.Layout; - var MeasuredText = android.text.MeasuredText; + var Spannable = android.text.Spannable; var Spanned = android.text.Spanned; + var StaticLayout = android.text.StaticLayout; + var TextDirectionHeuristics = android.text.TextDirectionHeuristics; + var TextPaint = android.text.TextPaint; var TextUtils = android.text.TextUtils; - class StaticLayout extends Layout { - constructor(source, bufstart, bufend, paint, outerwidth, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0, maxLines = Integer.MAX_VALUE) { - super((ellipsize == null) ? source : (Spanned.isImplements(source)) ? new Layout.SpannedEllipsizer(source) : new Layout.Ellipsizer(source), paint, outerwidth, align, textDir, spacingmult, spacingadd); - this.mLineCount = 0; - this.mTopPadding = 0; - this.mBottomPadding = 0; - this.mColumns = 0; - this.mEllipsizedWidth = 0; - this.mMaximumVisibleLineCount = Integer.MAX_VALUE; - this.mFontMetricsInt = new Paint.FontMetricsInt(); - if (source == null) { - this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE; - this.mLines = androidui.util.ArrayCreator.newNumberArray((2 * this.mColumns)); - this.mLineDirections = new Array((2 * this.mColumns)); - this.mMeasured = MeasuredText.obtain(); - return; - } - if (ellipsize != null) { - let e = this.getText(); - e.mLayout = this; - e.mWidth = ellipsizedWidth; - e.mMethod = ellipsize; - this.mEllipsizedWidth = ellipsizedWidth; - this.mColumns = StaticLayout.COLUMNS_ELLIPSIZE; - } - else { - this.mColumns = StaticLayout.COLUMNS_NORMAL; - this.mEllipsizedWidth = outerwidth; - } - this.mLines = androidui.util.ArrayCreator.newNumberArray(2 * this.mColumns); - this.mLineDirections = new Array(2 * this.mColumns); - this.mMaximumVisibleLineCount = maxLines; - this.mMeasured = MeasuredText.obtain(); - this.generate(source, bufstart, bufend, paint, outerwidth, textDir, spacingmult, spacingadd, includepad, includepad, ellipsizedWidth, ellipsize); - this.mMeasured = MeasuredText.recycle(this.mMeasured); - this.mFontMetricsInt = null; - } - generate(source, bufStart, bufEnd, paint, outerWidth, textDir, spacingmult, spacingadd, includepad, trackpad, ellipsizedWidth, ellipsize) { - this.mLineCount = 0; - let v = 0; - let needMultiply = (spacingmult != 1 || spacingadd != 0); - let fm = this.mFontMetricsInt; - let chooseHtv = null; - let measured = this.mMeasured; - let spanned = null; - if (Spanned.isImplements(source)) - spanned = source; - let DEFAULT_DIR = StaticLayout.DIR_LEFT_TO_RIGHT; - let paraEnd; - for (let paraStart = bufStart; paraStart <= bufEnd; paraStart = paraEnd) { - paraEnd = source.substring(0, bufEnd).indexOf(StaticLayout.CHAR_NEW_LINE, paraStart); - if (paraEnd < 0) - paraEnd = bufEnd; - else - paraEnd++; - let firstWidthLineLimit = this.mLineCount + 1; - let firstWidth = outerWidth; - let restWidth = outerWidth; - let chooseHt = null; - if (spanned != null) { - let sp = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LeadingMarginSpan.type); - for (let i = 0; i < sp.length; i++) { - let lms = sp[i]; - firstWidth -= sp[i].getLeadingMargin(true); - restWidth -= sp[i].getLeadingMargin(false); - if (LeadingMarginSpan2.isImpl(lms)) { - let lms2 = lms; - let lmsFirstLine = this.getLineForOffset(spanned.getSpanStart(lms2)); - firstWidthLineLimit = lmsFirstLine + lms2.getLeadingMarginLineCount(); - } - } - chooseHt = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, LineHeightSpan.type); - if (chooseHt.length != 0) { - if (chooseHtv == null || chooseHtv.length < chooseHt.length) { - chooseHtv = androidui.util.ArrayCreator.newNumberArray(chooseHt.length); - } - for (let i = 0; i < chooseHt.length; i++) { - let o = spanned.getSpanStart(chooseHt[i]); - if (o < paraStart) { - chooseHtv[i] = this.getLineTop(this.getLineForOffset(o)); - } - else { - chooseHtv[i] = v; - } - } - } - } - measured.setPara(source, paraStart, paraEnd, textDir); - let chs = measured.mChars; - let widths = measured.mWidths; - let chdirs = measured.mLevels; - let dir = measured.mDir; - let easy = measured.mEasy; - let width = firstWidth; - let w = 0; - let here = paraStart; - let ok = paraStart; - let okWidth = w; - let okAscent = 0, okDescent = 0, okTop = 0, okBottom = 0; - let fit = paraStart; - let fitWidth = w; - let fitAscent = 0, fitDescent = 0, fitTop = 0, fitBottom = 0; - let hasTabOrEmoji = false; - let hasTab = false; - let tabStops = null; - for (let spanStart = paraStart, spanEnd; spanStart < paraEnd; spanStart = spanEnd) { - if (spanned == null) { - spanEnd = paraEnd; - let spanLen = spanEnd - spanStart; - measured.addStyleRun(paint, spanLen, fm); - } - else { - spanEnd = spanned.nextSpanTransition(spanStart, paraEnd, MetricAffectingSpan.type); - let spanLen = spanEnd - spanStart; - let spans = spanned.getSpans(spanStart, spanEnd, MetricAffectingSpan.type); - spans = TextUtils.removeEmptySpans(spans, spanned, MetricAffectingSpan.type); - measured.addStyleRun(paint, spans, spanLen, fm); - } - let fmTop = fm.top; - let fmBottom = fm.bottom; - let fmAscent = fm.ascent; - let fmDescent = fm.descent; - for (let j = spanStart; j < spanEnd; j++) { - let c = chs[j - paraStart]; - if (c == StaticLayout.CHAR_NEW_LINE) { - } - else if (c == StaticLayout.CHAR_TAB) { - if (hasTab == false) { - hasTab = true; - hasTabOrEmoji = true; - if (spanned != null) { - let spans = StaticLayout.getParagraphSpans(spanned, paraStart, paraEnd, TabStopSpan.type); - if (spans.length > 0) { - tabStops = new Layout.TabStops(StaticLayout.TAB_INCREMENT, spans); - } - } - } - if (tabStops != null) { - w = tabStops.nextTab(w); - } - else { - w = StaticLayout.TabStops.nextDefaultStop(w, StaticLayout.TAB_INCREMENT); - } - } - else if (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_HIGH_SURROGATE - && c.codePointAt(0) <= StaticLayout.CHAR_LAST_LOW_SURROGATE && j + 1 < spanEnd) { - let emoji = chs.codePointAt(j - paraStart); - w += widths[j - paraStart]; - } - else { - w += widths[j - paraStart]; - } - let isSpaceOrTab = c == StaticLayout.CHAR_SPACE || c == StaticLayout.CHAR_TAB || c == StaticLayout.CHAR_ZWSP; - if (w <= width || isSpaceOrTab) { - fitWidth = w; - fit = j + 1; - if (fmTop < fitTop) - fitTop = fmTop; - if (fmAscent < fitAscent) - fitAscent = fmAscent; - if (fmDescent > fitDescent) - fitDescent = fmDescent; - if (fmBottom > fitBottom) - fitBottom = fmBottom; - let isLineBreak = isSpaceOrTab || - ((c == StaticLayout.CHAR_SLASH || c == StaticLayout.CHAR_HYPHEN) && (j + 1 >= spanEnd || - !Number.isInteger(Number.parseInt(chs[j + 1 - paraStart])))) || - (c.codePointAt(0) >= StaticLayout.CHAR_FIRST_CJK.codePointAt(0) && StaticLayout.isIdeographic(c, true) && j + 1 < spanEnd && StaticLayout.isIdeographic(chs[j + 1 - paraStart], false)); - if (isLineBreak) { - okWidth = w; - ok = j + 1; - if (fitTop < okTop) - okTop = fitTop; - if (fitAscent < okAscent) - okAscent = fitAscent; - if (fitDescent > okDescent) - okDescent = fitDescent; - if (fitBottom > okBottom) - okBottom = fitBottom; - } + var TruncateAt = android.text.TextUtils.TruncateAt; + var AllCapsTransformationMethod = android.text.method.AllCapsTransformationMethod; + var SingleLineTransformationMethod = android.text.method.SingleLineTransformationMethod; + var TransformationMethod2 = android.text.method.TransformationMethod2; + var Log = android.util.Log; + var TypedValue = android.util.TypedValue; + var Gravity = android.view.Gravity; + var HapticFeedbackConstants = android.view.HapticFeedbackConstants; + var MotionEvent = android.view.MotionEvent; + var View = android.view.View; + var LayoutParams = android.view.ViewGroup.LayoutParams; + var AnimationUtils = android.view.animation.AnimationUtils; + var WeakReference = java.lang.ref.WeakReference; + var ArrayList = java.util.ArrayList; + var Integer = java.lang.Integer; + var System = java.lang.System; + class TextView extends View { + constructor(context, bindElement, defStyle = android.R.attr.textViewStyle) { + super(context, bindElement, defStyle); + this.mTextColor = ColorStateList.valueOf(Color.BLACK); + this.mCurTextColor = 0; + this.mCurHintTextColor = 0; + this.mSpannableFactory = Spannable.Factory.getInstance(); + this.mShadowRadius = 0; + this.mShadowDx = 0; + this.mShadowDy = 0; + this.mMarqueeRepeatLimit = 3; + this.mLastLayoutDirection = -1; + this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL; + this.mBufferType = TextView.BufferType.NORMAL; + this.mGravity = Gravity.TOP | Gravity.LEFT; + this.mAutoLinkMask = 0; + this.mLinksClickable = true; + this.mSpacingMult = 1.0; + this.mSpacingAdd = 0.0; + this.mMaximum = Integer.MAX_VALUE; + this.mMaxMode = TextView.LINES; + this.mMinimum = 0; + this.mMinMode = TextView.LINES; + this.mOldMaximum = this.mMaximum; + this.mOldMaxMode = this.mMaxMode; + this.mMaxWidthValue = Integer.MAX_VALUE; + this.mMaxWidthMode = TextView.PIXELS; + this.mMinWidthValue = 0; + this.mMinWidthMode = TextView.PIXELS; + this.mDesiredHeightAtMeasure = -1; + this.mIncludePad = true; + this.mDeferScroll = -1; + this.mLastScroll = 0; + this.mFilters = TextView.NO_FILTERS; + this.mHighlightColor = 0x6633B5E5; + this.mHighlightPathBogus = true; + this.mCursorDrawableRes = 0; + this.mTextSelectHandleLeftRes = 0; + this.mTextSelectHandleRightRes = 0; + this.mTextSelectHandleRes = 0; + this.mTextEditSuggestionItemLayout = 0; + this.mSkipDrawText = false; + this.mText = ""; + this.mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + this.mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + this.mMovement = this.getDefaultMovementMethod(); + this.mTransformation = null; + let textColorHighlight = 0; + let textColor = null; + let textColorHint = null; + let textColorLink = null; + let textSize = 14 * this.getResources().getDisplayMetrics().density; + let allCaps = false; + let shadowcolor = 0; + let dx = 0, dy = 0, r = 0; + let editable = this.getDefaultEditable(); + let numeric = 0; + let digits = null; + let drawableLeft = null, drawableTop = null, drawableRight = null, drawableBottom = null, drawableStart = null, drawableEnd = null; + let drawablePadding = 0; + let ellipsize; + let singleLine = false; + let maxlength = -1; + let text = ""; + let hint = null; + let a = context.obtainStyledAttributes(bindElement, defStyle); + for (let attr of a.getLowerCaseNoNamespaceAttrNames()) { + switch (attr) { + case 'editable': + editable = a.getBoolean(attr, editable); + break; + case 'inputmethod': + break; + case 'numeric': + numeric = a.getInt(attr, numeric); + break; + case 'digits': + digits = a.getText(attr); + break; + case 'phonenumber': + break; + case 'autotext': + break; + case 'capitalize': + break; + case 'buffertype': + break; + case 'selectallonfocus': + break; + case 'autolink': + this.mAutoLinkMask = a.getInt(attr, 0); + break; + case 'linksclickable': + this.mLinksClickable = a.getBoolean(attr, true); + break; + case 'drawableleft': + drawableLeft = a.getDrawable(attr); + break; + case 'drawabletop': + drawableTop = a.getDrawable(attr); + break; + case 'drawableright': + drawableRight = a.getDrawable(attr); + break; + case 'drawablebottom': + drawableBottom = a.getDrawable(attr); + break; + case 'drawablestart': + drawableStart = a.getDrawable(attr); + break; + case 'drawableend': + drawableEnd = a.getDrawable(attr); + break; + case 'drawablepadding': + drawablePadding = a.getDimensionPixelSize(attr, drawablePadding); + break; + case 'maxlines': + this.setMaxLines(a.getInt(attr, -1)); + break; + case 'maxheight': + this.setMaxHeight(a.getDimensionPixelSize(attr, -1)); + break; + case 'lines': + this.setLines(a.getInt(attr, -1)); + break; + case 'height': + this.setHeight(a.getDimensionPixelSize(attr, -1)); + break; + case 'minlines': + this.setMinLines(a.getInt(attr, -1)); + break; + case 'minheight': + this.setMinHeight(a.getDimensionPixelSize(attr, -1)); + break; + case 'maxems': + this.setMaxEms(a.getInt(attr, -1)); + break; + case 'maxwidth': + this.setMaxWidth(a.getDimensionPixelSize(attr, -1)); + break; + case 'ems': + this.setEms(a.getInt(attr, -1)); + break; + case 'width': + this.setWidth(a.getDimensionPixelSize(attr, -1)); + break; + case 'minems': + this.setMinEms(a.getInt(attr, -1)); + break; + case 'minwidth': + this.setMinWidth(a.getDimensionPixelSize(attr, -1)); + break; + case 'gravity': + this.setGravity(Gravity.parseGravity(a.getAttrValue(attr), -1)); + break; + case 'hint': + hint = a.getText(attr); + break; + case 'text': + text = a.getText(attr); + break; + case 'scrollhorizontally': + if (a.getBoolean(attr, false)) { + this.setHorizontallyScrolling(true); } - else { - const moreChars = (j + 1 < spanEnd); - let endPos; - let above, below, top, bottom; - let currentTextWidth; - if (ok != here) { - endPos = ok; - above = okAscent; - below = okDescent; - top = okTop; - bottom = okBottom; - currentTextWidth = okWidth; - } - else if (fit != here) { - endPos = fit; - above = fitAscent; - below = fitDescent; - top = fitTop; - bottom = fitBottom; - currentTextWidth = fitWidth; - } - else { - endPos = here + 1; - above = fm.ascent; - below = fm.descent; - top = fm.top; - bottom = fm.bottom; - currentTextWidth = widths[here - paraStart]; - } - v = this.out(source, here, endPos, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, currentTextWidth, paint, moreChars); - here = endPos; - j = here - 1; - ok = fit = here; - w = 0; - fitAscent = fitDescent = fitTop = fitBottom = 0; - okAscent = okDescent = okTop = okBottom = 0; - if (--firstWidthLineLimit <= 0) { - width = restWidth; - } - if (here < spanStart) { - measured.setPos(here); - spanEnd = here; - break; - } - if (this.mLineCount >= this.mMaximumVisibleLineCount) { - break; - } + break; + case 'singleline': + singleLine = a.getBoolean(attr, singleLine); + break; + case 'ellipsize': + ellipsize = TextUtils.TruncateAt[(a.getAttrValue(attr) + '').toUpperCase()]; + break; + case 'marqueerepeatlimit': + this.setMarqueeRepeatLimit(a.getInt(attr, this.mMarqueeRepeatLimit)); + break; + case 'includefontpadding': + if (!a.getBoolean(attr, true)) { + this.setIncludeFontPadding(false); } - } - } - if (paraEnd != here && this.mLineCount < this.mMaximumVisibleLineCount) { - if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) { - paint.getFontMetricsInt(fm); - fitTop = fm.top; - fitBottom = fm.bottom; - fitAscent = fm.ascent; - fitDescent = fm.descent; - } - v = this.out(source, here, paraEnd, fitAscent, fitDescent, fitTop, fitBottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, w, paint, paraEnd != bufEnd); + break; + case 'cursorvisible': + if (!a.getBoolean(attr, true)) { + this.setCursorVisible(false); + } + break; + case 'maxlength': + maxlength = a.getInt(attr, -1); + break; + case 'textscalex': + this.setTextScaleX(a.getFloat(attr, 1.0)); + break; + case 'freezestext': + this.mFreezesText = a.getBoolean(attr, false); + break; + case 'shadowcolor': + shadowcolor = a.getInt(attr, 0); + break; + case 'shadowdx': + dx = a.getFloat(attr, 0); + break; + case 'shadowdy': + dy = a.getFloat(attr, 0); + break; + case 'shadowradius': + r = a.getFloat(attr, 0); + break; + case 'enabled': + this.setEnabled(a.getBoolean(attr, this.isEnabled())); + break; + case 'textcolorhighlight': + textColorHighlight = a.getColor(attr, textColorHighlight); + break; + case 'textcolor': + textColor = a.getColorStateList(attr); + break; + case 'textcolorhint': + textColorHint = a.getColorStateList(attr); + break; + case 'textcolorlink': + textColorLink = a.getColorStateList(attr); + break; + case 'textsize': + textSize = a.getDimensionPixelSize(attr, textSize); + break; + case 'typeface': + break; + case 'textstyle': + break; + case 'fontfamily': + break; + case 'password': + break; + case 'linespacingextra': + this.mSpacingAdd = a.getDimensionPixelSize(attr, Math.floor(this.mSpacingAdd)); + break; + case 'linespacingmultiplier': + this.mSpacingMult = a.getFloat(attr, this.mSpacingMult); + break; + case 'inputtype': + break; + case 'imeoptions': + break; + case 'imeactionlabel': + break; + case 'imeactionid': + break; + case 'privateimeoptions': + break; + case 'editorextras': + break; + case 'textcursordrawable': + break; + case 'textselecthandleleft': + break; + case 'textselecthandleright': + break; + case 'textselecthandle': + break; + case 'texteditsuggestionitemlayout': + break; + case 'textisselectable': + this.setTextIsSelectable(a.getBoolean(attr, false)); + break; + case 'textallcaps': + allCaps = a.getBoolean(attr, false); + break; } - paraStart = paraEnd; - if (paraEnd == bufEnd) - break; - } - if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == StaticLayout.CHAR_NEW_LINE) && this.mLineCount < this.mMaximumVisibleLineCount) { - measured.setPara(source, bufStart, bufEnd, textDir); - paint.getFontMetricsInt(fm); - v = this.out(source, bufEnd, bufEnd, fm.ascent, fm.descent, fm.top, fm.bottom, v, spacingmult, spacingadd, null, null, fm, false, needMultiply, measured.mLevels, measured.mDir, measured.mEasy, bufEnd, includepad, trackpad, null, null, bufStart, ellipsize, ellipsizedWidth, 0, paint, false); } - } - static isIdeographic(c, includeNonStarters) { - let code = c.codePointAt(0); - if (code >= '⺀'.codePointAt(0) && code <= '⿿'.codePointAt(0)) { - return true; + a.recycle(); + let bufferType = this.mBufferType; + this.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, drawableTop, drawableRight, drawableBottom); + this.setRelativeDrawablesIfNeeded(drawableStart, drawableEnd); + this.setCompoundDrawablePadding(drawablePadding); + this.setInputTypeSingleLine(singleLine); + this.applySingleLine(singleLine, singleLine, singleLine); + if (singleLine && this.getKeyListener() == null && ellipsize == null) { + ellipsize = TextUtils.TruncateAt.END; } - if (c == ' ') { - return true; + switch (ellipsize) { + case TextUtils.TruncateAt.START: + this.setEllipsize(TextUtils.TruncateAt.START); + break; + case TextUtils.TruncateAt.MIDDLE: + this.setEllipsize(TextUtils.TruncateAt.MIDDLE); + break; + case TextUtils.TruncateAt.END: + this.setEllipsize(TextUtils.TruncateAt.END); + break; + case TextUtils.TruncateAt.MARQUEE: + this.setHorizontalFadingEdgeEnabled(false); + this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS; + this.setEllipsize(TextUtils.TruncateAt.MARQUEE); + break; } - if (code >= '぀'.codePointAt(0) && code <= 'ゟ'.codePointAt(0)) { - if (!includeNonStarters) { - switch (c) { - case 'ぁ': - case 'ぃ': - case 'ぅ': - case 'ぇ': - case 'ぉ': - case 'っ': - case 'ゃ': - case 'ゅ': - case 'ょ': - case 'ゎ': - case 'ゕ': - case 'ゖ': - case '゛': - case '゜': - case 'ゝ': - case 'ゞ': - return false; - } - } - return true; + this.setTextColor(textColor != null ? textColor : ColorStateList.valueOf(0xFF000000)); + this.setHintTextColor(textColorHint); + this.setLinkTextColor(textColorLink); + if (textColorHighlight != 0) { + this.setHighlightColor(textColorHighlight); } - if (code >= '゠'.codePointAt(0) && code <= 'ヿ'.codePointAt(0)) { - if (!includeNonStarters) { - switch (c) { - case '゠': - case 'ァ': - case 'ィ': - case 'ゥ': - case 'ェ': - case 'ォ': - case 'ッ': - case 'ャ': - case 'ュ': - case 'ョ': - case 'ヮ': - case 'ヵ': - case 'ヶ': - case '・': - case 'ー': - case 'ヽ': - case 'ヾ': - return false; - } + this.setRawTextSize(textSize); + if (allCaps) { + this.setTransformationMethod(new AllCapsTransformationMethod(this.getContext())); + } + if (shadowcolor != 0) { + this.setShadowLayer(r, dx, dy, shadowcolor); + } + this.setText(text, bufferType); + if (hint != null) + this.setHint(hint); + } + createClassAttrBinder() { + return super.createClassAttrBinder() + .set('textColorHighlight', { + setter(v, value, attrBinder) { + v.setHighlightColor(attrBinder.parseColor(value, v.mHighlightColor)); + }, + getter(v) { + return v.getHighlightColor(); + } + }).set('textColor', { + setter(v, value, attrBinder) { + let color = attrBinder.parseColorList(value); + if (color) + v.setTextColor(color); + }, + getter(v) { + return v.mTextColor; + } + }).set('textColorHint', { + setter(v, value, attrBinder) { + let color = attrBinder.parseColorList(value); + if (color) + v.setHintTextColor(color); + }, + getter(v) { + return v.mHintTextColor; + } + }).set('textSize', { + setter(v, value, attrBinder) { + let size = attrBinder.parseNumberPixelSize(value, v.mTextPaint.getTextSize()); + v.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); + }, + getter(v) { + return v.mTextPaint.getTextSize(); + } + }).set('textAllCaps', { + setter(v, value, attrBinder) { + v.setAllCaps(attrBinder.parseBoolean(value, true)); + } + }).set('shadowColor', { + setter(v, value, attrBinder) { + v.setShadowLayer(v.mShadowRadius, v.mShadowDx, v.mShadowDy, attrBinder.parseColor(value, v.mTextPaint.shadowColor)); + }, + getter(v) { + return v.getShadowColor(); + } + }).set('shadowDx', { + setter(v, value, attrBinder) { + let dx = attrBinder.parseNumberPixelSize(value, v.mShadowDx); + v.setShadowLayer(v.mShadowRadius, dx, v.mShadowDy, v.mTextPaint.shadowColor); + }, + getter(v) { + return v.getShadowDx(); + } + }).set('shadowDy', { + setter(v, value, attrBinder) { + let dy = attrBinder.parseNumberPixelSize(value, v.mShadowDy); + v.setShadowLayer(v.mShadowRadius, v.mShadowDx, dy, v.mTextPaint.shadowColor); + }, + getter(v) { + return v.getShadowDy(); + } + }).set('shadowRadius', { + setter(v, value, attrBinder) { + let radius = attrBinder.parseNumberPixelSize(value, v.mShadowRadius); + v.setShadowLayer(radius, v.mShadowDx, v.mShadowDy, v.mTextPaint.shadowColor); + }, + getter(v) { + return v.getShadowRadius(); + } + }).set('drawableLeft', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom); + }, + getter(v) { + return v.getCompoundDrawables()[0]; + } + }).set('drawableStart', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom); + }, + getter(v) { + return v.getCompoundDrawables()[0]; + } + }).set('drawableTop', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom); + }, + getter(v) { + return v.getCompoundDrawables()[1]; + } + }).set('drawableRight', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom); + }, + getter(v) { + return v.getCompoundDrawables()[2]; + } + }).set('drawableEnd', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom); + }, + getter(v) { + return v.getCompoundDrawables()[2]; + } + }).set('drawableBottom', { + setter(v, value, attrBinder) { + let dr = v.mDrawables || {}; + let drawable = attrBinder.parseDrawable(value); + v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable); + }, + getter(v) { + return v.getCompoundDrawables()[3]; + } + }).set('drawablePadding', { + setter(v, value, attrBinder) { + v.setCompoundDrawablePadding(attrBinder.parseNumberPixelSize(value)); + }, + getter(v) { + return v.getCompoundDrawablePadding(); + } + }).set('maxLines', { + setter(v, value, attrBinder) { + value = Number.parseInt(value); + if (Number.isInteger(value)) + v.setMaxLines(value); + }, + getter(v) { + return v.getMaxLines(); + } + }).set('maxHeight', { + setter(v, value, attrBinder) { + v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.getMaxHeight())); + }, + getter(v) { + return v.getMaxHeight(); + } + }).set('lines', { + setter(v, value, attrBinder) { + value = Number.parseInt(value); + if (Number.isInteger(value)) + v.setLines(value); + }, + getter(v) { + if (v.getMaxLines() === v.getMinLines()) + return v.getMaxLines(); + return null; } - return true; - } - if (code >= '㐀'.codePointAt(0) && code <= '䶵'.codePointAt(0)) { - return true; - } - if (code >= '一'.codePointAt(0) && code <= '龻'.codePointAt(0)) { - return true; - } - if (code >= '豈'.codePointAt(0) && code <= '龎'.codePointAt(0)) { - return true; - } - if (code >= 'ꀀ'.codePointAt(0) && code <= '꒏'.codePointAt(0)) { - return true; - } - if (code >= '꒐'.codePointAt(0) && code <= '꓏'.codePointAt(0)) { - return true; - } - if (code >= '﹢'.codePointAt(0) && code <= '﹦'.codePointAt(0)) { - return true; - } - if (code >= '0'.codePointAt(0) && code <= '9'.codePointAt(0)) { - return true; - } - return false; - } - out(text, start, end, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includePad, trackPad, chs, widths, widthStart, ellipsize, ellipsisWidth, textWidth, paint, moreChars) { - let j = this.mLineCount; - let off = j * this.mColumns; - let want = off + this.mColumns + StaticLayout.TOP; - let lines = this.mLines; - if (want >= lines.length) { - let nlen = (want + 1); - let grow = androidui.util.ArrayCreator.newNumberArray(nlen); - System.arraycopy(lines, 0, grow, 0, lines.length); - this.mLines = grow; - lines = grow; - let grow2 = new Array(nlen); - System.arraycopy(this.mLineDirections, 0, grow2, 0, this.mLineDirections.length); - this.mLineDirections = grow2; - } - if (chooseHt != null) { - fm.ascent = above; - fm.descent = below; - fm.top = top; - fm.bottom = bottom; - for (let i = 0; i < chooseHt.length; i++) { - chooseHt[i].chooseHeight(text, start, end, chooseHtv[i], v, fm, paint); + }).set('height', { + setter(v, value, attrBinder) { + value = attrBinder.parseNumberPixelSize(value, -1); + if (value >= 0) + v.setHeight(value); + }, + getter(v) { + if (v.getMaxHeight() === v.getMinimumHeight()) + return v.getMaxHeight(); + return null; } - above = fm.ascent; - below = fm.descent; - top = fm.top; - bottom = fm.bottom; - } - if (j == 0) { - if (trackPad) { - this.mTopPadding = top - above; + }).set('minLines', { + setter(v, value, attrBinder) { + v.setMinLines(attrBinder.parseInt(value, v.getMinLines())); + }, + getter(v) { + return v.getMinLines(); + } + }).set('minHeight', { + setter(v, value, attrBinder) { + v.setMinHeight(attrBinder.parseNumberPixelSize(value, v.getMinHeight())); + }, + getter(v) { + return v.getMinHeight(); + } + }).set('maxEms', { + setter(v, value, attrBinder) { + v.setMaxEms(attrBinder.parseInt(value, v.getMaxEms())); + }, + getter(v) { + return v.getMaxEms(); + } + }).set('maxWidth', { + setter(v, value, attrBinder) { + v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.getMaxWidth())); + }, + getter(v) { + return v.getMaxWidth(); + } + }).set('ems', { + setter(v, value, attrBinder) { + let ems = attrBinder.parseInt(value, null); + if (ems != null) + v.setEms(ems); + }, + getter(v) { + if (v.getMinEms() === v.getMaxEms()) + return v.getMaxEms(); + return null; } - if (includePad) { - above = top; + }).set('width', { + setter(v, value, attrBinder) { + value = attrBinder.parseNumberPixelSize(value, -1); + if (value >= 0) + v.setWidth(value); + }, + getter(v) { + if (v.getMinWidth() === v.getMaxWidth()) + return v.getMinWidth(); + return null; } - } - if (end == bufEnd) { - if (trackPad) { - this.mBottomPadding = bottom - below; + }).set('minEms', { + setter(v, value, attrBinder) { + v.setMinEms(attrBinder.parseInt(value, v.getMinEms())); + }, + getter(v) { + return v.getMinEms(); + } + }).set('minWidth', { + setter(v, value, attrBinder) { + v.setMinWidth(attrBinder.parseNumberPixelSize(value, v.getMinWidth())); + }, + getter(v) { + return v.getMinWidth(); + } + }).set('gravity', { + setter(v, value, attrBinder) { + v.setGravity(attrBinder.parseGravity(value, v.mGravity)); + }, + getter(v) { + return v.mGravity; + } + }).set('hint', { + setter(v, value, attrBinder) { + v.setHint(attrBinder.parseString(value)); + }, + getter(v) { + return v.getHint(); + } + }).set('text', { + setter(v, value, attrBinder) { + v.setText(attrBinder.parseString(value)); + }, + getter(v) { + return v.getText(); + } + }).set('scrollHorizontally', { + setter(v, value, attrBinder) { + v.setHorizontallyScrolling(attrBinder.parseBoolean(value, false)); + } + }).set('singleLine', { + setter(v, value, attrBinder) { + v.setSingleLine(attrBinder.parseBoolean(value, false)); + } + }).set('ellipsize', { + setter(v, value, attrBinder) { + let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()]; + if (ellipsize) + v.setEllipsize(ellipsize); + } + }).set('marqueeRepeatLimit', { + setter(v, value, attrBinder) { + let marqueeRepeatLimit = attrBinder.parseInt(value, -1); + if (marqueeRepeatLimit >= 0) + v.setMarqueeRepeatLimit(marqueeRepeatLimit); + } + }).set('includeFontPadding', { + setter(v, value, attrBinder) { + v.setIncludeFontPadding(attrBinder.parseBoolean(value, false)); + } + }).set('enabled', { + setter(v, value, attrBinder) { + v.setEnabled(attrBinder.parseBoolean(value, v.isEnabled())); + }, + getter(v) { + return v.isEnabled(); + } + }).set('lineSpacingExtra', { + setter(v, value, attrBinder) { + v.setLineSpacing(attrBinder.parseNumberPixelSize(value, v.mSpacingAdd), v.mSpacingMult); + }, + getter(v) { + return v.mSpacingAdd; + } + }).set('lineSpacingMultiplier', { + setter(v, value, attrBinder) { + v.setLineSpacing(v.mSpacingAdd, attrBinder.parseFloat(value, v.mSpacingMult)); + }, + getter(v) { + return v.mSpacingMult; } - if (includePad) { - below = bottom; + }); + } + setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex) { + } + setRelativeDrawablesIfNeeded(start, end) { + let hasRelativeDrawables = (start != null) || (end != null); + if (hasRelativeDrawables) { + let dr = this.mDrawables; + if (dr == null) { + this.mDrawables = dr = new TextView.Drawables(); } - } - let extra; - if (needMultiply) { - let ex = (below - above) * (spacingmult - 1) + spacingadd; - if (ex >= 0) { - extra = Math.floor((ex + StaticLayout.EXTRA_ROUNDING)); + this.mDrawables.mOverride = true; + const compoundRect = dr.mCompoundRect; + let state = this.getDrawableState(); + if (start != null) { + start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight()); + start.setState(state); + start.copyBounds(compoundRect); + start.setCallback(this); + dr.mDrawableStart = start; + dr.mDrawableSizeStart = compoundRect.width(); + dr.mDrawableHeightStart = compoundRect.height(); } else { - extra = -Math.floor((-ex + StaticLayout.EXTRA_ROUNDING)); + dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; } - } - else { - extra = 0; - } - lines[off + StaticLayout.START] = start; - lines[off + StaticLayout.TOP] = v; - lines[off + StaticLayout.DESCENT] = below + extra; - v += (below - above) + extra; - lines[off + this.mColumns + StaticLayout.START] = end; - lines[off + this.mColumns + StaticLayout.TOP] = v; - if (hasTabOrEmoji) - lines[off + StaticLayout.TAB] |= StaticLayout.TAB_MASK; - lines[off + StaticLayout.DIR] |= dir << StaticLayout.DIR_SHIFT; - let linedirs = StaticLayout.DIRS_ALL_LEFT_TO_RIGHT; - this.mLineDirections[j] = linedirs; - if (ellipsize != null) { - let firstLine = (j == 0); - let currentLineIsTheLastVisibleOne = (j + 1 == this.mMaximumVisibleLineCount); - let forceEllipsis = moreChars && (this.mLineCount + 1 == this.mMaximumVisibleLineCount); - let doEllipsis = (((this.mMaximumVisibleLineCount == 1 && moreChars) || (firstLine && !moreChars)) && ellipsize != TextUtils.TruncateAt.MARQUEE) || (!firstLine && (currentLineIsTheLastVisibleOne || !moreChars) && ellipsize == TextUtils.TruncateAt.END); - if (doEllipsis) { - this.calculateEllipsis(start, end, widths, widthStart, ellipsisWidth, ellipsize, j, textWidth, paint, forceEllipsis); + if (end != null) { + end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight()); + end.setState(state); + end.copyBounds(compoundRect); + end.setCallback(this); + dr.mDrawableEnd = end; + dr.mDrawableSizeEnd = compoundRect.width(); + dr.mDrawableHeightEnd = compoundRect.height(); + } + else { + dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; } + this.resetResolvedDrawables(); + this.resolveDrawables(); } - this.mLineCount++; - return v; } - calculateEllipsis(lineStart, lineEnd, widths, widthStart, avail, where, line, textWidth, paint, forceEllipsis) { - if (textWidth <= avail && !forceEllipsis) { - this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = 0; - this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = 0; + setEnabled(enabled) { + if (enabled == this.isEnabled()) { return; } - let ellipsisWidth = paint.measureText((where == TextUtils.TruncateAt.END_SMALL) ? StaticLayout.ELLIPSIS_TWO_DOTS[0] : StaticLayout.ELLIPSIS_NORMAL[0], 0, 1); - let ellipsisStart = 0; - let ellipsisCount = 0; - let len = lineEnd - lineStart; - if (where == TextUtils.TruncateAt.START) { - if (this.mMaximumVisibleLineCount == 1) { - let sum = 0; - let i; - for (i = len; i >= 0; i--) { - let w = widths[i - 1 + lineStart - widthStart]; - if (w + sum + ellipsisWidth > avail) { - break; - } - sum += w; - } - ellipsisStart = 0; - ellipsisCount = i; - } - else { + super.setEnabled(enabled); + } + setTypeface(tf, style) { + } + getDefaultEditable() { + return false; + } + getDefaultMovementMethod() { + return null; + } + getText() { + return this.mText; + } + length() { + return this.mText.length; + } + getEditableText() { + return null; + } + getLineHeight() { + return Math.round(this.mTextPaint.getFontMetricsInt(null) * this.mSpacingMult + this.mSpacingAdd); + } + getLayout() { + return this.mLayout; + } + getHintLayout() { + return this.mHintLayout; + } + getUndoManager() { + return null; + } + setUndoManager(undoManager, tag) { + } + getKeyListener() { + return null; + } + setKeyListener(input) { + } + setKeyListenerOnly(input) { + } + getMovementMethod() { + return this.mMovement; + } + setMovementMethod(movement) { + if (this.mMovement != movement) { + this.mMovement = movement; + if (movement != null && !Spannable.isImpl(this.mText)) { + this.setText(this.mText); } + this.fixFocusableAndClickableSettings(); } - else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE || where == TextUtils.TruncateAt.END_SMALL) { - let sum = 0; - let i; - for (i = 0; i < len; i++) { - let w = widths[i + lineStart - widthStart]; - if (w + sum + ellipsisWidth > avail) { - break; - } - sum += w; - } - ellipsisStart = i; - ellipsisCount = len - i; - if (forceEllipsis && ellipsisCount == 0 && len > 0) { - ellipsisStart = len - 1; - ellipsisCount = 1; - } + } + fixFocusableAndClickableSettings() { + if (this.mMovement != null) { + this.setFocusable(true); + this.setClickable(true); + this.setLongClickable(true); } else { - if (this.mMaximumVisibleLineCount == 1) { - let lsum = 0, rsum = 0; - let left = 0, right = len; - let ravail = (avail - ellipsisWidth) / 2; - for (right = len; right >= 0; right--) { - let w = widths[right - 1 + lineStart - widthStart]; - if (w + rsum > ravail) { - break; - } - rsum += w; - } - let lavail = avail - ellipsisWidth - rsum; - for (left = 0; left < right; left++) { - let w = widths[left + lineStart - widthStart]; - if (w + lsum > lavail) { - break; - } - lsum += w; - } - ellipsisStart = left; - ellipsisCount = right - left; - } - else { - } + this.setFocusable(false); + this.setClickable(false); + this.setLongClickable(false); } - this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START] = ellipsisStart; - this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT] = ellipsisCount; } - getLineForVertical(vertical) { - let high = this.mLineCount; - let low = -1; - let guess; - let lines = this.mLines; - while (high - low > 1) { - guess = (high + low) >> 1; - if (lines[this.mColumns * guess + StaticLayout.TOP] > vertical) { - high = guess; - } - else { - low = guess; + getTransformationMethod() { + return this.mTransformation; + } + setTransformationMethod(method) { + if (method == this.mTransformation) { + return; + } + if (this.mTransformation != null) { + if (Spannable.isImpl(this.mText)) { + this.mText.removeSpan(this.mTransformation); } } - if (low < 0) { - return 0; + this.mTransformation = method; + if (TransformationMethod2.isImpl(method)) { + let method2 = method; + this.mAllowTransformationLengthChange = !this.isTextSelectable(); + method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange); } else { - return low; - } - } - getLineCount() { - return this.mLineCount; - } - getLineTop(line) { - let top = this.mLines[this.mColumns * line + StaticLayout.TOP]; - if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount && line != this.mLineCount) { - top += this.getBottomPadding(); + this.mAllowTransformationLengthChange = false; } - return top; + this.setText(this.mText); } - getLineDescent(line) { - let descent = this.mLines[this.mColumns * line + StaticLayout.DESCENT]; - if (this.mMaximumVisibleLineCount > 0 && line >= this.mMaximumVisibleLineCount - 1 && line != this.mLineCount) { - descent += this.getBottomPadding(); + getCompoundPaddingTop() { + const dr = this.mDrawables; + if (dr == null || dr.mDrawableTop == null) { + return this.mPaddingTop; + } + else { + return this.mPaddingTop + dr.mDrawablePadding + dr.mDrawableSizeTop; } - return descent; - } - getLineStart(line) { - return this.mLines[this.mColumns * line + StaticLayout.START] & StaticLayout.START_MASK; - } - getParagraphDirection(line) { - return this.mLines[this.mColumns * line + StaticLayout.DIR] >> StaticLayout.DIR_SHIFT; - } - getLineContainsTab(line) { - return (this.mLines[this.mColumns * line + StaticLayout.TAB] & StaticLayout.TAB_MASK) != 0; - } - getLineDirections(line) { - return this.mLineDirections[line]; - } - getTopPadding() { - return this.mTopPadding; - } - getBottomPadding() { - return this.mBottomPadding; } - getEllipsisCount(line) { - if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) { - return 0; + getCompoundPaddingBottom() { + const dr = this.mDrawables; + if (dr == null || dr.mDrawableBottom == null) { + return this.mPaddingBottom; + } + else { + return this.mPaddingBottom + dr.mDrawablePadding + dr.mDrawableSizeBottom; } - return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_COUNT]; } - getEllipsisStart(line) { - if (this.mColumns < StaticLayout.COLUMNS_ELLIPSIZE) { - return 0; + getCompoundPaddingLeft() { + const dr = this.mDrawables; + if (dr == null || dr.mDrawableLeft == null) { + return this.mPaddingLeft; + } + else { + return this.mPaddingLeft + dr.mDrawablePadding + dr.mDrawableSizeLeft; } - return this.mLines[this.mColumns * line + StaticLayout.ELLIPSIS_START]; } - getEllipsizedWidth() { - return this.mEllipsizedWidth; + getCompoundPaddingRight() { + const dr = this.mDrawables; + if (dr == null || dr.mDrawableRight == null) { + return this.mPaddingRight; + } + else { + return this.mPaddingRight + dr.mDrawablePadding + dr.mDrawableSizeRight; + } } - prepare() { - this.mMeasured = MeasuredText.obtain(); + getCompoundPaddingStart() { + this.resolveDrawables(); + return this.getCompoundPaddingLeft(); } - finish() { - this.mMeasured = MeasuredText.recycle(this.mMeasured); + getCompoundPaddingEnd() { + this.resolveDrawables(); + return this.getCompoundPaddingRight(); } - } - StaticLayout.TAG = "StaticLayout"; - StaticLayout.COLUMNS_NORMAL = 3; - StaticLayout.COLUMNS_ELLIPSIZE = 5; - StaticLayout.START = 0; - StaticLayout.DIR = StaticLayout.START; - StaticLayout.TAB = StaticLayout.START; - StaticLayout.TOP = 1; - StaticLayout.DESCENT = 2; - StaticLayout.ELLIPSIS_START = 3; - StaticLayout.ELLIPSIS_COUNT = 4; - StaticLayout.START_MASK = 0x1FFFFFFF; - StaticLayout.DIR_SHIFT = 30; - StaticLayout.TAB_MASK = 0x20000000; - StaticLayout.CHAR_FIRST_CJK = '⺀'; - StaticLayout.CHAR_NEW_LINE = '\n'; - StaticLayout.CHAR_TAB = '\t'; - StaticLayout.CHAR_SPACE = ' '; - StaticLayout.CHAR_SLASH = '/'; - StaticLayout.CHAR_HYPHEN = '-'; - StaticLayout.CHAR_ZWSP = '​'; - StaticLayout.EXTRA_ROUNDING = 0.5; - StaticLayout.CHAR_FIRST_HIGH_SURROGATE = 0xD800; - StaticLayout.CHAR_LAST_LOW_SURROGATE = 0xDFFF; - text_10.StaticLayout = StaticLayout; - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text_11) { - var Paint = android.graphics.Paint; - var System = java.lang.System; - var Layout = android.text.Layout; - var PackedIntVector = android.text.PackedIntVector; - var PackedObjectVector = android.text.PackedObjectVector; - var Spanned = android.text.Spanned; - var StaticLayout = android.text.StaticLayout; - class DynamicLayout extends Layout { - constructor(base, display, paint, width, align, textDir, spacingmult, spacingadd, includepad, ellipsize = null, ellipsizedWidth = 0) { - super((ellipsize == null) ? display : (Spanned.isImplements(display)) ? new Layout.SpannedEllipsizer(display) : new Layout.Ellipsizer(display), paint, width, align, textDir, spacingmult, spacingadd); - this.mEllipsizedWidth = 0; - this.mNumberOfBlocks = 0; - this.mIndexFirstChangedBlock = 0; - this.mTopPadding = 0; - this.mBottomPadding = 0; - this.mBase = base; - this.mDisplay = display; - if (ellipsize != null) { - this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE); - this.mEllipsizedWidth = ellipsizedWidth; - this.mEllipsizeAt = ellipsize; + getExtendedPaddingTop() { + if (this.mMaxMode != TextView.LINES) { + return this.getCompoundPaddingTop(); } - else { - this.mInts = new PackedIntVector(DynamicLayout.COLUMNS_NORMAL); - this.mEllipsizedWidth = width; - this.mEllipsizeAt = null; + if (this.mLayout.getLineCount() <= this.mMaximum) { + return this.getCompoundPaddingTop(); } - this.mObjects = new PackedObjectVector(1); - this.mIncludePad = includepad; - if (ellipsize != null) { - let e = this.getText(); - e.mLayout = this; - e.mWidth = ellipsizedWidth; - e.mMethod = ellipsize; - this.mEllipsize = true; + let top = this.getCompoundPaddingTop(); + let bottom = this.getCompoundPaddingBottom(); + let viewht = this.getHeight() - top - bottom; + let layoutht = this.mLayout.getLineTop(this.mMaximum); + if (layoutht >= viewht) { + return top; } - let start; - if (ellipsize != null) { - start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE); - start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED; + const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + if (gravity == Gravity.TOP) { + return top; + } + else if (gravity == Gravity.BOTTOM) { + return top + viewht - layoutht; } else { - start = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL); + return top + (viewht - layoutht) / 2; } - let dirs = [DynamicLayout.DIRS_ALL_LEFT_TO_RIGHT]; - let fm = new Paint.FontMetricsInt(); - paint.getFontMetricsInt(fm); - let asc = fm.ascent; - let desc = fm.descent; - start[DynamicLayout.DIR] = DynamicLayout.DIR_LEFT_TO_RIGHT << DynamicLayout.DIR_SHIFT; - start[DynamicLayout.TOP] = 0; - start[DynamicLayout.DESCENT] = desc; - this.mInts.insertAt(0, start); - start[DynamicLayout.TOP] = desc - asc; - this.mInts.insertAt(1, start); - this.mObjects.insertAt(0, dirs); - this.reflow(base, 0, 0, base.length); } - reflow(s, where, before, after) { - if (s != this.mBase) - return; - let text = this.mDisplay; - let len = text.length; - let find = text.lastIndexOf('\n', where - 1); - if (find < 0) - find = 0; - else - find = find + 1; - { - let diff = where - find; - before += diff; - after += diff; - where -= diff; + getExtendedPaddingBottom() { + if (this.mMaxMode != TextView.LINES) { + return this.getCompoundPaddingBottom(); } - let look = text.indexOf('\n', where + after); - if (look < 0) - look = len; - else - look++; - let change = look - (where + after); - before += change; - after += change; - let startline = this.getLineForOffset(where); - let startv = this.getLineTop(startline); - let endline = this.getLineForOffset(where + before); - if (where + after == len) - endline = this.getLineCount(); - let endv = this.getLineTop(endline); - let islast = (endline == this.getLineCount()); - let reflowed; - { - reflowed = DynamicLayout.sStaticLayout; - DynamicLayout.sStaticLayout = null; + if (this.mLayout.getLineCount() <= this.mMaximum) { + return this.getCompoundPaddingBottom(); } - if (reflowed == null) { - reflowed = new StaticLayout(null, 0, 0, null, 0, null, null, 0, 1, true); + let top = this.getCompoundPaddingTop(); + let bottom = this.getCompoundPaddingBottom(); + let viewht = this.getHeight() - top - bottom; + let layoutht = this.mLayout.getLineTop(this.mMaximum); + if (layoutht >= viewht) { + return bottom; } - else { - reflowed.prepare(); + const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + if (gravity == Gravity.TOP) { + return bottom + viewht - layoutht; } - reflowed.generate(text, where, where + after, this.getPaint(), this.getWidth(), this.getTextDirectionHeuristic(), this.getSpacingMultiplier(), this.getSpacingAdd(), false, true, this.mEllipsizedWidth, this.mEllipsizeAt); - let n = reflowed.getLineCount(); - if (where + after != len && reflowed.getLineStart(n - 1) == where + after) - n--; - this.mInts.deleteAt(startline, endline - startline); - this.mObjects.deleteAt(startline, endline - startline); - let ht = reflowed.getLineTop(n); - let toppad = 0, botpad = 0; - if (this.mIncludePad && startline == 0) { - toppad = reflowed.getTopPadding(); - this.mTopPadding = toppad; - ht -= toppad; + else if (gravity == Gravity.BOTTOM) { + return bottom; } - if (this.mIncludePad && islast) { - botpad = reflowed.getBottomPadding(); - this.mBottomPadding = botpad; - ht += botpad; + else { + return bottom + (viewht - layoutht) / 2; } - this.mInts.adjustValuesBelow(startline, DynamicLayout.START, after - before); - this.mInts.adjustValuesBelow(startline, DynamicLayout.TOP, startv - endv + ht); - let ints; - if (this.mEllipsize) { - ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_ELLIPSIZE); - ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED; + } + getTotalPaddingLeft() { + return this.getCompoundPaddingLeft(); + } + getTotalPaddingRight() { + return this.getCompoundPaddingRight(); + } + getTotalPaddingStart() { + return this.getCompoundPaddingStart(); + } + getTotalPaddingEnd() { + return this.getCompoundPaddingEnd(); + } + getTotalPaddingTop() { + return this.getExtendedPaddingTop() + this.getVerticalOffset(true); + } + getTotalPaddingBottom() { + return this.getExtendedPaddingBottom() + this.getBottomVerticalOffset(true); + } + setCompoundDrawables(left, top, right, bottom) { + let dr = this.mDrawables; + const drawables = left != null || top != null || right != null || bottom != null; + if (!drawables) { + if (dr != null) { + if (dr.mDrawablePadding == 0) { + this.mDrawables = null; + } + else { + if (dr.mDrawableLeft != null) { + dr.mDrawableLeft.setCallback(null); + } + dr.mDrawableLeft = null; + if (dr.mDrawableTop != null) { + dr.mDrawableTop.setCallback(null); + } + dr.mDrawableTop = null; + if (dr.mDrawableRight != null) { + dr.mDrawableRight.setCallback(null); + } + dr.mDrawableRight = null; + if (dr.mDrawableBottom != null) { + dr.mDrawableBottom.setCallback(null); + } + dr.mDrawableBottom = null; + dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0; + dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0; + dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; + } + } } else { - ints = androidui.util.ArrayCreator.newNumberArray(DynamicLayout.COLUMNS_NORMAL); - } - let objects = new Array(1); - for (let i = 0; i < n; i++) { - ints[DynamicLayout.START] = reflowed.getLineStart(i) | (reflowed.getParagraphDirection(i) << DynamicLayout.DIR_SHIFT) | (reflowed.getLineContainsTab(i) ? DynamicLayout.TAB_MASK : 0); - let top = reflowed.getLineTop(i) + startv; - if (i > 0) - top -= toppad; - ints[DynamicLayout.TOP] = top; - let desc = reflowed.getLineDescent(i); - if (i == n - 1) - desc += botpad; - ints[DynamicLayout.DESCENT] = desc; - objects[0] = reflowed.getLineDirections(i); - if (this.mEllipsize) { - ints[DynamicLayout.ELLIPSIS_START] = reflowed.getEllipsisStart(i); - ints[DynamicLayout.ELLIPSIS_COUNT] = reflowed.getEllipsisCount(i); + if (dr == null) { + this.mDrawables = dr = new TextView.Drawables(); + } + this.mDrawables.mOverride = false; + if (dr.mDrawableLeft != left && dr.mDrawableLeft != null) { + dr.mDrawableLeft.setCallback(null); + } + dr.mDrawableLeft = left; + if (dr.mDrawableTop != top && dr.mDrawableTop != null) { + dr.mDrawableTop.setCallback(null); + } + dr.mDrawableTop = top; + if (dr.mDrawableRight != right && dr.mDrawableRight != null) { + dr.mDrawableRight.setCallback(null); + } + dr.mDrawableRight = right; + if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) { + dr.mDrawableBottom.setCallback(null); + } + dr.mDrawableBottom = bottom; + const compoundRect = dr.mCompoundRect; + let state; + state = this.getDrawableState(); + if (left != null) { + left.setState(state); + left.copyBounds(compoundRect); + left.setCallback(this); + dr.mDrawableSizeLeft = compoundRect.width(); + dr.mDrawableHeightLeft = compoundRect.height(); + } + else { + dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0; + } + if (right != null) { + right.setState(state); + right.copyBounds(compoundRect); + right.setCallback(this); + dr.mDrawableSizeRight = compoundRect.width(); + dr.mDrawableHeightRight = compoundRect.height(); + } + else { + dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0; + } + if (top != null) { + top.setState(state); + top.copyBounds(compoundRect); + top.setCallback(this); + dr.mDrawableSizeTop = compoundRect.height(); + dr.mDrawableWidthTop = compoundRect.width(); + } + else { + dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + } + if (bottom != null) { + bottom.setState(state); + bottom.copyBounds(compoundRect); + bottom.setCallback(this); + dr.mDrawableSizeBottom = compoundRect.height(); + dr.mDrawableWidthBottom = compoundRect.width(); + } + else { + dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; } - this.mInts.insertAt(startline + i, ints); - this.mObjects.insertAt(startline + i, objects); } - this.updateBlocks(startline, endline - 1, n); - { - DynamicLayout.sStaticLayout = reflowed; - reflowed.finish(); + if (dr != null) { + dr.mDrawableLeftInitial = left; + dr.mDrawableRightInitial = right; } + this.resetResolvedDrawables(); + this.resolveDrawables(); + this.invalidate(); + this.requestLayout(); } - createBlocks() { - let offset = DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH; - this.mNumberOfBlocks = 0; - const text = this.mDisplay; - while (true) { - offset = text.indexOf('\n', offset); - if (offset < 0) { - this.addBlockAtOffset(text.length); - break; + setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom) { + if (left != null) { + left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight()); + } + if (right != null) { + right.setBounds(0, 0, right.getIntrinsicWidth(), right.getIntrinsicHeight()); + } + if (top != null) { + top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight()); + } + if (bottom != null) { + bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight()); + } + this.setCompoundDrawables(left, top, right, bottom); + } + setCompoundDrawablesRelative(start, top, end, bottom) { + let dr = this.mDrawables; + const drawables = start != null || top != null || end != null || bottom != null; + if (!drawables) { + if (dr != null) { + if (dr.mDrawablePadding == 0) { + this.mDrawables = null; + } + else { + if (dr.mDrawableStart != null) { + dr.mDrawableStart.setCallback(null); + } + dr.mDrawableStart = null; + if (dr.mDrawableTop != null) { + dr.mDrawableTop.setCallback(null); + } + dr.mDrawableTop = null; + if (dr.mDrawableEnd != null) { + dr.mDrawableEnd.setCallback(null); + } + dr.mDrawableEnd = null; + if (dr.mDrawableBottom != null) { + dr.mDrawableBottom.setCallback(null); + } + dr.mDrawableBottom = null; + dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; + dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; + dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; + } + } + } + else { + if (dr == null) { + this.mDrawables = dr = new TextView.Drawables(); + } + this.mDrawables.mOverride = true; + if (dr.mDrawableStart != start && dr.mDrawableStart != null) { + dr.mDrawableStart.setCallback(null); + } + dr.mDrawableStart = start; + if (dr.mDrawableTop != top && dr.mDrawableTop != null) { + dr.mDrawableTop.setCallback(null); + } + dr.mDrawableTop = top; + if (dr.mDrawableEnd != end && dr.mDrawableEnd != null) { + dr.mDrawableEnd.setCallback(null); + } + dr.mDrawableEnd = end; + if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) { + dr.mDrawableBottom.setCallback(null); + } + dr.mDrawableBottom = bottom; + const compoundRect = dr.mCompoundRect; + let state; + state = this.getDrawableState(); + if (start != null) { + start.setState(state); + start.copyBounds(compoundRect); + start.setCallback(this); + dr.mDrawableSizeStart = compoundRect.width(); + dr.mDrawableHeightStart = compoundRect.height(); } else { - this.addBlockAtOffset(offset); - offset += DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH; + dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; + } + if (end != null) { + end.setState(state); + end.copyBounds(compoundRect); + end.setCallback(this); + dr.mDrawableSizeEnd = compoundRect.width(); + dr.mDrawableHeightEnd = compoundRect.height(); + } + else { + dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; + } + if (top != null) { + top.setState(state); + top.copyBounds(compoundRect); + top.setCallback(this); + dr.mDrawableSizeTop = compoundRect.height(); + dr.mDrawableWidthTop = compoundRect.width(); + } + else { + dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + } + if (bottom != null) { + bottom.setState(state); + bottom.copyBounds(compoundRect); + bottom.setCallback(this); + dr.mDrawableSizeBottom = compoundRect.height(); + dr.mDrawableWidthBottom = compoundRect.width(); + } + else { + dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; } } - this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(this.mBlockEndLines.length); - for (let i = 0; i < this.mBlockEndLines.length; i++) { - this.mBlockIndices[i] = DynamicLayout.INVALID_BLOCK_INDEX; - } + this.resetResolvedDrawables(); + this.resolveDrawables(); + this.invalidate(); + this.requestLayout(); } - addBlockAtOffset(offset) { - const line = this.getLineForOffset(offset); - if (this.mBlockEndLines == null) { - this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray((1)); - this.mBlockEndLines[this.mNumberOfBlocks] = line; - this.mNumberOfBlocks++; - return; + setCompoundDrawablesRelativeWithIntrinsicBounds(start, top, end, bottom) { + if (start != null) { + start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight()); } - const previousBlockEndLine = this.mBlockEndLines[this.mNumberOfBlocks - 1]; - if (line > previousBlockEndLine) { - if (this.mNumberOfBlocks == this.mBlockEndLines.length) { - let blockEndLines = androidui.util.ArrayCreator.newNumberArray((this.mNumberOfBlocks + 1)); - System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, this.mNumberOfBlocks); - this.mBlockEndLines = blockEndLines; - } - this.mBlockEndLines[this.mNumberOfBlocks] = line; - this.mNumberOfBlocks++; + if (end != null) { + end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight()); } - } - updateBlocks(startLine, endLine, newLineCount) { - if (this.mBlockEndLines == null) { - this.createBlocks(); - return; + if (top != null) { + top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight()); } - let firstBlock = -1; - let lastBlock = -1; - for (let i = 0; i < this.mNumberOfBlocks; i++) { - if (this.mBlockEndLines[i] >= startLine) { - firstBlock = i; - break; - } + if (bottom != null) { + bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight()); } - for (let i = firstBlock; i < this.mNumberOfBlocks; i++) { - if (this.mBlockEndLines[i] >= endLine) { - lastBlock = i; - break; - } + this.setCompoundDrawablesRelative(start, top, end, bottom); + } + getCompoundDrawables() { + const dr = this.mDrawables; + if (dr != null) { + return [dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom]; } - const lastBlockEndLine = this.mBlockEndLines[lastBlock]; - let createBlockBefore = startLine > (firstBlock == 0 ? 0 : this.mBlockEndLines[firstBlock - 1] + 1); - let createBlock = newLineCount > 0; - let createBlockAfter = endLine < this.mBlockEndLines[lastBlock]; - let numAddedBlocks = 0; - if (createBlockBefore) - numAddedBlocks++; - if (createBlock) - numAddedBlocks++; - if (createBlockAfter) - numAddedBlocks++; - const numRemovedBlocks = lastBlock - firstBlock + 1; - const newNumberOfBlocks = this.mNumberOfBlocks + numAddedBlocks - numRemovedBlocks; - if (newNumberOfBlocks == 0) { - this.mBlockEndLines[0] = 0; - this.mBlockIndices[0] = DynamicLayout.INVALID_BLOCK_INDEX; - this.mNumberOfBlocks = 1; - return; + else { + return [null, null, null, null]; } - if (newNumberOfBlocks > this.mBlockEndLines.length) { - const newSize = (newNumberOfBlocks); - let blockEndLines = androidui.util.ArrayCreator.newNumberArray(newSize); - let blockIndices = androidui.util.ArrayCreator.newNumberArray(newSize); - System.arraycopy(this.mBlockEndLines, 0, blockEndLines, 0, firstBlock); - System.arraycopy(this.mBlockIndices, 0, blockIndices, 0, firstBlock); - System.arraycopy(this.mBlockEndLines, lastBlock + 1, blockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); - System.arraycopy(this.mBlockIndices, lastBlock + 1, blockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); - this.mBlockEndLines = blockEndLines; - this.mBlockIndices = blockIndices; + } + getCompoundDrawablesRelative() { + const dr = this.mDrawables; + if (dr != null) { + return [dr.mDrawableStart, dr.mDrawableTop, dr.mDrawableEnd, dr.mDrawableBottom]; } else { - System.arraycopy(this.mBlockEndLines, lastBlock + 1, this.mBlockEndLines, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); - System.arraycopy(this.mBlockIndices, lastBlock + 1, this.mBlockIndices, firstBlock + numAddedBlocks, this.mNumberOfBlocks - lastBlock - 1); + return [null, null, null, null]; } - this.mNumberOfBlocks = newNumberOfBlocks; - let newFirstChangedBlock; - const deltaLines = newLineCount - (endLine - startLine + 1); - if (deltaLines != 0) { - newFirstChangedBlock = firstBlock + numAddedBlocks; - for (let i = newFirstChangedBlock; i < this.mNumberOfBlocks; i++) { - this.mBlockEndLines[i] += deltaLines; + } + setCompoundDrawablePadding(pad) { + let dr = this.mDrawables; + if (pad == 0) { + if (dr != null) { + dr.mDrawablePadding = pad; } } else { - newFirstChangedBlock = this.mNumberOfBlocks; + if (dr == null) { + this.mDrawables = dr = new TextView.Drawables(); + } + dr.mDrawablePadding = pad; } - this.mIndexFirstChangedBlock = Math.min(this.mIndexFirstChangedBlock, newFirstChangedBlock); - let blockIndex = firstBlock; - if (createBlockBefore) { - this.mBlockEndLines[blockIndex] = startLine - 1; - this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; - blockIndex++; + this.invalidate(); + this.requestLayout(); + } + getCompoundDrawablePadding() { + const dr = this.mDrawables; + return dr != null ? dr.mDrawablePadding : 0; + } + setPadding(left, top, right, bottom) { + if (left != this.mPaddingLeft || right != this.mPaddingRight || top != this.mPaddingTop || bottom != this.mPaddingBottom) { + this.nullLayouts(); } - if (createBlock) { - this.mBlockEndLines[blockIndex] = startLine + newLineCount - 1; - this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; - blockIndex++; + super.setPadding(left, top, right, bottom); + this.invalidate(); + } + getAutoLinkMask() { + return this.mAutoLinkMask; + } + getTextLocale() { + return null; + } + setTextLocale(locale) { + } + getTextSize() { + return this.mTextPaint.getTextSize(); + } + setTextSize(...args) { + if (args.length == 1) { + this.setTextSize(TypedValue.COMPLEX_UNIT_SP, args[0]); + return; } - if (createBlockAfter) { - this.mBlockEndLines[blockIndex] = lastBlockEndLine + deltaLines; - this.mBlockIndices[blockIndex] = DynamicLayout.INVALID_BLOCK_INDEX; + let [unit, size] = args; + this.setRawTextSize(TypedValue.applyDimension(unit, size, this.getResources().getDisplayMetrics())); + } + setRawTextSize(size) { + if (size != this.mTextPaint.getTextSize()) { + this.mTextPaint.setTextSize(size); + if (this.mLayout != null) { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); + } } } - setBlocksDataForTest(blockEndLines, blockIndices, numberOfBlocks) { - this.mBlockEndLines = androidui.util.ArrayCreator.newNumberArray(blockEndLines.length); - this.mBlockIndices = androidui.util.ArrayCreator.newNumberArray(blockIndices.length); - System.arraycopy(blockEndLines, 0, this.mBlockEndLines, 0, blockEndLines.length); - System.arraycopy(blockIndices, 0, this.mBlockIndices, 0, blockIndices.length); - this.mNumberOfBlocks = numberOfBlocks; + getTextScaleX() { + return 1; } - getBlockEndLines() { - return this.mBlockEndLines; + setTextScaleX(size) { } - getBlockIndices() { - return this.mBlockIndices; + getTypeface() { + return null; } - getNumberOfBlocks() { - return this.mNumberOfBlocks; + setTextColor(colors) { + if (typeof colors === 'number') { + colors = ColorStateList.valueOf(colors); + } + if (colors == null) { + throw Error(`new NullPointerException()`); + } + this.mTextColor = colors; + this.updateTextColors(); } - getIndexFirstChangedBlock() { - return this.mIndexFirstChangedBlock; + getTextColors() { + return this.mTextColor; } - setIndexFirstChangedBlock(i) { - this.mIndexFirstChangedBlock = i; + getCurrentTextColor() { + return this.mCurTextColor; } - getLineCount() { - return this.mInts.size() - 1; + setHighlightColor(color) { + if (this.mHighlightColor != color) { + this.mHighlightColor = color; + this.invalidate(); + } } - getLineTop(line) { - return this.mInts.getValue(line, DynamicLayout.TOP); + getHighlightColor() { + return this.mHighlightColor; } - getLineDescent(line) { - return this.mInts.getValue(line, DynamicLayout.DESCENT); + setShowSoftInputOnFocus(show) { + this.createEditorIfNeeded(); } - getLineStart(line) { - return this.mInts.getValue(line, DynamicLayout.START) & DynamicLayout.START_MASK; + getShowSoftInputOnFocus() { + return false; } - getLineContainsTab(line) { - return (this.mInts.getValue(line, DynamicLayout.TAB) & DynamicLayout.TAB_MASK) != 0; + setShadowLayer(radius, dx, dy, color) { + this.mTextPaint.setShadowLayer(radius, dx, dy, color); + this.mShadowRadius = radius; + this.mShadowDx = dx; + this.mShadowDy = dy; + this.invalidate(); } - getParagraphDirection(line) { - return this.mInts.getValue(line, DynamicLayout.DIR) >> DynamicLayout.DIR_SHIFT; + getShadowRadius() { + return this.mShadowRadius; } - getLineDirections(line) { - return this.mObjects.getValue(line, 0); + getShadowDx() { + return this.mShadowDx; } - getTopPadding() { - return this.mTopPadding; + getShadowDy() { + return this.mShadowDy; } - getBottomPadding() { - return this.mBottomPadding; + getShadowColor() { + return this.mTextPaint.shadowColor; } - getEllipsizedWidth() { - return this.mEllipsizedWidth; + getPaint() { + return this.mTextPaint; } - getEllipsisStart(line) { - if (this.mEllipsizeAt == null) { - return 0; - } - return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_START); + setAutoLinkMask(mask) { + this.mAutoLinkMask = mask; } - getEllipsisCount(line) { - if (this.mEllipsizeAt == null) { - return 0; - } - return this.mInts.getValue(line, DynamicLayout.ELLIPSIS_COUNT); + setLinksClickable(whether) { + this.mLinksClickable = whether; } - } - DynamicLayout.PRIORITY = 128; - DynamicLayout.BLOCK_MINIMUM_CHARACTER_LENGTH = 400; - DynamicLayout.INVALID_BLOCK_INDEX = -1; - DynamicLayout.sStaticLayout = new StaticLayout(null, 0, 0, null, 0, null, null, 1, 0, true); - DynamicLayout.sLock = new Array(0); - DynamicLayout.START = 0; - DynamicLayout.DIR = DynamicLayout.START; - DynamicLayout.TAB = DynamicLayout.START; - DynamicLayout.TOP = 1; - DynamicLayout.DESCENT = 2; - DynamicLayout.COLUMNS_NORMAL = 3; - DynamicLayout.ELLIPSIS_START = 3; - DynamicLayout.ELLIPSIS_COUNT = 4; - DynamicLayout.COLUMNS_ELLIPSIZE = 5; - DynamicLayout.START_MASK = 0x1FFFFFFF; - DynamicLayout.DIR_SHIFT = 30; - DynamicLayout.TAB_MASK = 0x20000000; - DynamicLayout.ELLIPSIS_UNDEFINED = 0x80000000; - text_11.DynamicLayout = DynamicLayout; - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var method; - (function (method) { - var TransformationMethod; - (function (TransformationMethod) { - function isImpl(obj) { - return obj && obj['getTransformation'] && obj['onFocusChanged']; - } - TransformationMethod.isImpl = isImpl; - })(TransformationMethod = method.TransformationMethod || (method.TransformationMethod = {})); - })(method = text.method || (text.method = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var method; - (function (method) { - var TransformationMethod = android.text.method.TransformationMethod; - var TransformationMethod2; - (function (TransformationMethod2) { - function isImpl(obj) { - return TransformationMethod.isImpl(obj) && obj['setLengthChangesAllowed']; - } - TransformationMethod2.isImpl = isImpl; - })(TransformationMethod2 = method.TransformationMethod2 || (method.TransformationMethod2 = {})); - })(method = text.method || (text.method = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var method; - (function (method) { - var Log = android.util.Log; - class AllCapsTransformationMethod { - constructor(context) { - } - getTransformation(source, view) { - if (this.mEnabled) { - return source != null ? source.toLocaleUpperCase() : null; - } - Log.w(AllCapsTransformationMethod.TAG, "Caller did not enable length changes; not transforming text"); - return source; - } - onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) { - } - setLengthChangesAllowed(allowLengthChanges) { - this.mEnabled = allowLengthChanges; - } + getLinksClickable() { + return this.mLinksClickable; } - AllCapsTransformationMethod.TAG = "AllCapsTransformationMethod"; - method.AllCapsTransformationMethod = AllCapsTransformationMethod; - })(method = text.method || (text.method = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var method; - (function (method) { - class ReplacementTransformationMethod { - getTransformation(source, v) { - let original = this.getOriginal(); - let replacement = this.getReplacement(); - let doNothing = true; - let n = original.length; - for (let i = 0; i < n; i++) { - if (source.indexOf(original[i]) >= 0) { - doNothing = false; - break; - } - } - if (doNothing) { - return source; - } - return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement).toString(); - return new ReplacementTransformationMethod.ReplacementCharSequence(source, original, replacement); - } - onFocusChanged(view, sourceText, focused, direction, previouslyFocusedRect) { - } + getUrls() { + return new Array(0); } - method.ReplacementTransformationMethod = ReplacementTransformationMethod; - (function (ReplacementTransformationMethod) { - class ReplacementCharSequence extends String { - constructor(source, original, replacement) { - super(source); - this.mSource = source; - this.mOriginal = original; - this.mReplacement = replacement; - } - charAt(i) { - let c = this.mSource.charAt(i); - let n = this.mOriginal.length; - for (let j = 0; j < n; j++) { - if (c == this.mOriginal[j]) { - c = this.mReplacement[j]; - } - } - return c; - } - toString() { - return this.startReplace(0, this.length); - } - substr(from, length) { - return this.startReplace(from, from + length); - } - substring(start, end) { - return this.startReplace(start, end); - } - startReplace(start, end) { - let dest = this.mSource.substring(start, end).split(''); - let offend = end - start; - let n = this.mOriginal.length; - for (let i = 0; i < offend; i++) { - let c = dest[i]; - for (let j = 0; j < n; j++) { - if (c == this.mOriginal[j]) { - dest[i] = this.mReplacement[j]; - } - } - } - return dest.join(''); - } - } - ReplacementTransformationMethod.ReplacementCharSequence = ReplacementCharSequence; - })(ReplacementTransformationMethod = method.ReplacementTransformationMethod || (method.ReplacementTransformationMethod = {})); - })(method = text.method || (text.method = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var text; - (function (text) { - var method; - (function (method) { - var ReplacementTransformationMethod = android.text.method.ReplacementTransformationMethod; - class SingleLineTransformationMethod extends ReplacementTransformationMethod { - getOriginal() { - return SingleLineTransformationMethod.ORIGINAL; - } - getReplacement() { - return SingleLineTransformationMethod.REPLACEMENT; - } - static getInstance() { - if (SingleLineTransformationMethod.sInstance != null) - return SingleLineTransformationMethod.sInstance; - SingleLineTransformationMethod.sInstance = new SingleLineTransformationMethod(); - return SingleLineTransformationMethod.sInstance; + setHintTextColor(colors) { + if (typeof colors === 'number') { + colors = ColorStateList.valueOf(colors); } + this.mHintTextColor = colors; + this.updateTextColors(); } - SingleLineTransformationMethod.ORIGINAL = ['\n', '\r']; - SingleLineTransformationMethod.REPLACEMENT = [' ', '']; - method.SingleLineTransformationMethod = SingleLineTransformationMethod; - })(method = text.method || (text.method = {})); - })(text = android.text || (android.text = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var ColorStateList = android.content.res.ColorStateList; - var Paint = android.graphics.Paint; - var Path = android.graphics.Path; - var Rect = android.graphics.Rect; - var Color = android.graphics.Color; - var RectF = android.graphics.RectF; - var Handler = android.os.Handler; - var BoringLayout = android.text.BoringLayout; - var DynamicLayout = android.text.DynamicLayout; - var Layout = android.text.Layout; - var Spannable = android.text.Spannable; - var Spanned = android.text.Spanned; - var StaticLayout = android.text.StaticLayout; - var TextDirectionHeuristics = android.text.TextDirectionHeuristics; - var TextPaint = android.text.TextPaint; - var TextUtils = android.text.TextUtils; - var TruncateAt = android.text.TextUtils.TruncateAt; - var AllCapsTransformationMethod = android.text.method.AllCapsTransformationMethod; - var SingleLineTransformationMethod = android.text.method.SingleLineTransformationMethod; - var TransformationMethod2 = android.text.method.TransformationMethod2; - var Log = android.util.Log; - var TypedValue = android.util.TypedValue; - var Gravity = android.view.Gravity; - var HapticFeedbackConstants = android.view.HapticFeedbackConstants; - var MotionEvent = android.view.MotionEvent; - var View = android.view.View; - var LayoutParams = android.view.ViewGroup.LayoutParams; - var AnimationUtils = android.view.animation.AnimationUtils; - var WeakReference = java.lang.ref.WeakReference; - var ArrayList = java.util.ArrayList; - var Integer = java.lang.Integer; - var System = java.lang.System; - var AttrBinder = androidui.attr.AttrBinder; - class TextView extends View { - constructor(context, bindElement, defStyle = android.R.attr.textViewStyle) { - super(context, bindElement, null); - this.mTextColor = ColorStateList.valueOf(Color.BLACK); - this.mCurTextColor = 0; - this.mCurHintTextColor = 0; - this.mSpannableFactory = Spannable.Factory.getInstance(); - this.mShadowRadius = 0; - this.mShadowDx = 0; - this.mShadowDy = 0; - this.mMarqueeRepeatLimit = 3; - this.mLastLayoutDirection = -1; - this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL; - this.mBufferType = TextView.BufferType.NORMAL; - this.mGravity = Gravity.TOP | Gravity.LEFT; - this.mAutoLinkMask = 0; - this.mLinksClickable = true; - this.mSpacingMult = 1.0; - this.mSpacingAdd = 0.0; - this.mMaximum = Integer.MAX_VALUE; - this.mMaxMode = TextView.LINES; - this.mMinimum = 0; - this.mMinMode = TextView.LINES; - this.mOldMaximum = this.mMaximum; - this.mOldMaxMode = this.mMaxMode; - this.mMaxWidthValue = Integer.MAX_VALUE; - this.mMaxWidthMode = TextView.PIXELS; - this.mMinWidthValue = 0; - this.mMinWidthMode = TextView.PIXELS; - this.mDesiredHeightAtMeasure = -1; - this.mIncludePad = true; - this.mDeferScroll = -1; - this.mLastScroll = 0; - this.mFilters = TextView.NO_FILTERS; - this.mHighlightColor = 0x6633B5E5; - this.mHighlightPathBogus = true; - this.mCursorDrawableRes = 0; - this.mTextSelectHandleLeftRes = 0; - this.mTextSelectHandleRightRes = 0; - this.mTextSelectHandleRes = 0; - this.mTextEditSuggestionItemLayout = 0; - this.mSkipDrawText = false; - this.mText = ""; - const res = this.getResources(); - this.mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - this.mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - this.mMovement = this.getDefaultMovementMethod(); - this.mTransformation = null; - this.setTextSize(14); - if (defStyle) - this.applyDefaultAttributes(defStyle); - let text = this.mText || this.bindElement.innerText.trim(); - this.bindElement.innerHTML = ''; - this.setText(text, this.mBufferType); + getHintTextColors() { + return this.mHintTextColor; + } + getCurrentHintTextColor() { + return this.mHintTextColor != null ? this.mCurHintTextColor : this.mCurTextColor; + } + setLinkTextColor(colors) { + if (typeof colors === 'number') { + colors = ColorStateList.valueOf(colors); + } + this.mLinkTextColor = colors; + this.updateTextColors(); } - initBindAttr() { - super.initBindAttr(); - if (!TextView.TextViewClassAttrBind) { - TextView.TextViewClassAttrBind = new AttrBinder.ClassBinderMap(); - TextView.TextViewClassAttrBind.set('textColorHighlight', { - setter(v, value) { - v.setHighlightColor(v._attrBinder.parseColor(value, v.mHighlightColor)); - }, - getter(v) { - return v.getHighlightColor(); - } - }).set('textColor', { - setter(v, value) { - let color = v._attrBinder.parseColorList(value); - if (color) - v.setTextColor(color); - }, - getter(v) { - return v.mTextColor; - } - }).set('textColorHint', { - setter(v, value) { - let color = v._attrBinder.parseColorList(value); - if (color) - v.setHintTextColor(color); - }, - getter(v) { - return v.mHintTextColor; - } - }).set('textSize', { - setter(v, value) { - let size = v._attrBinder.parseNumberPixelSize(value, v.mTextPaint.getTextSize()); - v.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); - }, - getter(v) { - return v.mTextPaint.getTextSize(); - } - }).set('textAllCaps', { - setter(v, value) { - v.setAllCaps(v._attrBinder.parseBoolean(value, true)); - } - }).set('shadowColor', { - setter(v, value) { - v.setShadowLayer(v.mShadowRadius, v.mShadowDx, v.mShadowDy, v._attrBinder.parseColor(value, v.mTextPaint.shadowColor)); - }, - getter(v) { - return v.getShadowColor(); - } - }).set('shadowDx', { - setter(v, value) { - let dx = v._attrBinder.parseNumberPixelSize(value, v.mShadowDx); - v.setShadowLayer(v.mShadowRadius, dx, v.mShadowDy, v.mTextPaint.shadowColor); - }, - getter(v) { - return v.getShadowDx(); - } - }).set('shadowDy', { - setter(v, value) { - let dy = v._attrBinder.parseNumberPixelSize(value, v.mShadowDy); - v.setShadowLayer(v.mShadowRadius, v.mShadowDx, dy, v.mTextPaint.shadowColor); - }, - getter(v) { - return v.getShadowDy(); - } - }).set('shadowRadius', { - setter(v, value) { - let radius = v._attrBinder.parseNumberPixelSize(value, v.mShadowRadius); - v.setShadowLayer(radius, v.mShadowDx, v.mShadowDy, v.mTextPaint.shadowColor); - }, - getter(v) { - return v.getShadowRadius(); - } - }).set('drawableLeft', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom); - }, - getter(v) { - return v.getCompoundDrawables()[0]; - } - }).set('drawableStart', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom); - }, - getter(v) { - return v.getCompoundDrawables()[0]; - } - }).set('drawableTop', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom); - }, - getter(v) { - return v.getCompoundDrawables()[1]; - } - }).set('drawableRight', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom); - }, - getter(v) { - return v.getCompoundDrawables()[2]; - } - }).set('drawableEnd', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom); - }, - getter(v) { - return v.getCompoundDrawables()[2]; - } - }).set('drawableBottom', { - setter(v, value) { - let dr = v.mDrawables || {}; - let drawable = v._attrBinder.parseDrawable(value); - v.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable); - }, - getter(v) { - return v.getCompoundDrawables()[3]; - } - }).set('drawablePadding', { - setter(v, value) { - v.setCompoundDrawablePadding(v._attrBinder.parseNumberPixelSize(value)); - }, - getter(v) { - return v.getCompoundDrawablePadding(); - } - }).set('maxLines', { - setter(v, value) { - value = Number.parseInt(value); - if (Number.isInteger(value)) - v.setMaxLines(value); - }, - getter(v) { - return v.getMaxLines(); - } - }).set('maxHeight', { - setter(v, value) { - v.setMaxHeight(v._attrBinder.parseNumberPixelSize(value, v.getMaxHeight())); - }, - getter(v) { - return v.getMaxHeight(); - } - }).set('lines', { - setter(v, value) { - value = Number.parseInt(value); - if (Number.isInteger(value)) - v.setLines(value); - }, - getter(v) { - if (v.getMaxLines() === v.getMinLines()) - return v.getMaxLines(); - return null; - } - }).set('height', { - setter(v, value) { - value = v._attrBinder.parseNumberPixelSize(value, -1); - if (value >= 0) - v.setHeight(value); - }, - getter(v) { - if (v.getMaxHeight() === v.getMinimumHeight()) - return v.getMaxHeight(); - return null; - } - }).set('minLines', { - setter(v, value) { - v.setMinLines(v._attrBinder.parseInt(value, v.getMinLines())); - }, - getter(v) { - return v.getMinLines(); - } - }).set('minHeight', { - setter(v, value) { - v.setMinHeight(v._attrBinder.parseNumberPixelSize(value, v.getMinHeight())); - }, - getter(v) { - return v.getMinHeight(); - } - }).set('maxEms', { - setter(v, value) { - v.setMaxEms(v._attrBinder.parseInt(value, v.getMaxEms())); - }, - getter(v) { - return v.getMaxEms(); - } - }).set('maxWidth', { - setter(v, value) { - v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value, v.getMaxWidth())); - }, - getter(v) { - return v.getMaxWidth(); - } - }).set('ems', { - setter(v, value) { - let ems = v._attrBinder.parseInt(value, null); - if (ems != null) - v.setEms(ems); - }, - getter(v) { - if (v.getMinEms() === v.getMaxEms()) - return v.getMaxEms(); - return null; - } - }).set('width', { - setter(v, value) { - value = v._attrBinder.parseNumberPixelSize(value, -1); - if (value >= 0) - v.setWidth(value); - }, - getter(v) { - if (v.getMinWidth() === v.getMaxWidth()) - return v.getMinWidth(); - return null; - } - }).set('minEms', { - setter(v, value) { - v.setMinEms(v._attrBinder.parseInt(value, v.getMinEms())); - }, - getter(v) { - return v.getMinEms(); - } - }).set('minWidth', { - setter(v, value) { - v.setMinWidth(v._attrBinder.parseNumberPixelSize(value, v.getMinWidth())); - }, - getter(v) { - return v.getMinWidth(); - } - }).set('gravity', { - setter(v, value) { - v.setGravity(v._attrBinder.parseGravity(value, v.mGravity)); - }, - getter(v) { - return v.mGravity; - } - }).set('hint', { - setter(v, value) { - v.setHint(v._attrBinder.parseString(value)); - }, - getter(v) { - return v.getHint(); - } - }).set('text', { - setter(v, value) { - v.setText(v._attrBinder.parseString(value)); - }, - getter(v) { - return v.getText(); - } - }).set('scrollHorizontally', { - setter(v, value) { - v.setHorizontallyScrolling(v._attrBinder.parseBoolean(value, false)); - } - }).set('singleLine', { - setter(v, value) { - v.setSingleLine(v._attrBinder.parseBoolean(value, false)); - } - }).set('ellipsize', { - setter(v, value) { - let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()]; - if (ellipsize) - v.setEllipsize(ellipsize); - } - }).set('marqueeRepeatLimit', { - setter(v, value) { - let marqueeRepeatLimit = v._attrBinder.parseInt(value, -1); - if (marqueeRepeatLimit >= 0) - v.setMarqueeRepeatLimit(marqueeRepeatLimit); - } - }).set('includeFontPadding', { - setter(v, value) { - v.setIncludeFontPadding(v._attrBinder.parseBoolean(value, false)); - } - }).set('enabled', { - setter(v, value) { - v.setEnabled(v._attrBinder.parseBoolean(value, v.isEnabled())); - }, - getter(v) { - return v.isEnabled(); - } - }).set('lineSpacingExtra', { - setter(v, value) { - v.setLineSpacing(v._attrBinder.parseNumberPixelSize(value, v.mSpacingAdd), v.mSpacingMult); - }, - getter(v) { - return v.mSpacingAdd; - } - }).set('lineSpacingMultiplier', { - setter(v, value) { - v.setLineSpacing(v.mSpacingAdd, v._attrBinder.parseFloat(value, v.mSpacingMult)); - }, - getter(v) { - return v.mSpacingMult; - } - }); + getLinkTextColors() { + return this.mLinkTextColor; + } + setGravity(gravity) { + if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { + gravity |= Gravity.LEFT; + } + if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { + gravity |= Gravity.TOP; + } + let newLayout = false; + if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) != (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK)) { + newLayout = true; + } + if (gravity != this.mGravity) { + this.invalidate(); + } + this.mGravity = gravity; + if (this.mLayout != null && newLayout) { + let want = this.mLayout.getWidth(); + let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth(); + this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), true); } - this._attrBinder.addClassAttrBind(TextView.TextViewClassAttrBind); } - setTypefaceFromAttrs(familyName, typefaceIndex, styleIndex) { + getGravity() { + return this.mGravity; } - setRelativeDrawablesIfNeeded(start, end) { - let hasRelativeDrawables = (start != null) || (end != null); - if (hasRelativeDrawables) { - let dr = this.mDrawables; - if (dr == null) { - this.mDrawables = dr = new TextView.Drawables(); - } - this.mDrawables.mOverride = true; - const compoundRect = dr.mCompoundRect; - let state = this.getDrawableState(); - if (start != null) { - start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight()); - start.setState(state); - start.copyBounds(compoundRect); - start.setCallback(this); - dr.mDrawableStart = start; - dr.mDrawableSizeStart = compoundRect.width(); - dr.mDrawableHeightStart = compoundRect.height(); - } - else { - dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; - } - if (end != null) { - end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight()); - end.setState(state); - end.copyBounds(compoundRect); - end.setCallback(this); - dr.mDrawableEnd = end; - dr.mDrawableSizeEnd = compoundRect.width(); - dr.mDrawableHeightEnd = compoundRect.height(); - } - else { - dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; + getPaintFlags() { + return this.mTextPaint.getFlags(); + } + setPaintFlags(flags) { + if (this.mTextPaint.getFlags() != flags) { + this.mTextPaint.setFlags(flags); + if (this.mLayout != null) { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); } - this.resetResolvedDrawables(); - this.resolveDrawables(); } } - setEnabled(enabled) { - if (enabled == this.isEnabled()) { - return; + setHorizontallyScrolling(whether) { + if (this.mHorizontallyScrolling != whether) { + this.mHorizontallyScrolling = whether; + if (this.mLayout != null) { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); + } } - super.setEnabled(enabled); } - setTypeface(tf, style) { + getHorizontallyScrolling() { + return this.mHorizontallyScrolling; } - getDefaultEditable() { - return false; + setMinLines(minlines) { + this.mMinimum = minlines; + this.mMinMode = TextView.LINES; + this.requestLayout(); + this.invalidate(); } - getDefaultMovementMethod() { - return null; + getMinLines() { + return this.mMinMode == TextView.LINES ? this.mMinimum : -1; } - getText() { - return this.mText; + setMinHeight(minHeight) { + this.mMinimum = minHeight; + this.mMinMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); } - length() { - return this.mText.length; + getMinHeight() { + return this.mMinMode == TextView.PIXELS ? this.mMinimum : -1; } - getEditableText() { - return null; + setMaxLines(maxlines) { + this.mMaximum = maxlines; + this.mMaxMode = TextView.LINES; + this.requestLayout(); + this.invalidate(); } - getLineHeight() { - return Math.round(this.mTextPaint.getFontMetricsInt(null) * this.mSpacingMult + this.mSpacingAdd); + getMaxLines() { + return this.mMaxMode == TextView.LINES ? this.mMaximum : -1; } - getLayout() { - return this.mLayout; + setMaxHeight(maxHeight) { + this.mMaximum = maxHeight; + this.mMaxMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); } - getHintLayout() { - return this.mHintLayout; + getMaxHeight() { + return this.mMaxMode == TextView.PIXELS ? this.mMaximum : -1; } - getUndoManager() { - return null; + setLines(lines) { + this.mMaximum = this.mMinimum = lines; + this.mMaxMode = this.mMinMode = TextView.LINES; + this.requestLayout(); + this.invalidate(); } - setUndoManager(undoManager, tag) { + setHeight(pixels) { + this.mMaximum = this.mMinimum = pixels; + this.mMaxMode = this.mMinMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); } - getKeyListener() { - return null; + setMinEms(minems) { + this.mMinWidthValue = minems; + this.mMinWidthMode = TextView.EMS; + this.requestLayout(); + this.invalidate(); } - setKeyListener(input) { + getMinEms() { + return this.mMinWidthMode == TextView.EMS ? this.mMinWidthValue : -1; } - setKeyListenerOnly(input) { + setMinWidth(minpixels) { + this.mMinWidthValue = minpixels; + this.mMinWidthMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); } - getMovementMethod() { - return this.mMovement; + getMinWidth() { + return this.mMinWidthMode == TextView.PIXELS ? this.mMinWidthValue : -1; } - setMovementMethod(movement) { - if (this.mMovement != movement) { - this.mMovement = movement; - if (movement != null && !Spannable.isImpl(this.mText)) { - this.setText(this.mText); + setMaxEms(maxems) { + this.mMaxWidthValue = maxems; + this.mMaxWidthMode = TextView.EMS; + this.requestLayout(); + this.invalidate(); + } + getMaxEms() { + return this.mMaxWidthMode == TextView.EMS ? this.mMaxWidthValue : -1; + } + setMaxWidth(maxpixels) { + this.mMaxWidthValue = maxpixels; + this.mMaxWidthMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); + } + getMaxWidth() { + return this.mMaxWidthMode == TextView.PIXELS ? this.mMaxWidthValue : -1; + } + setEms(ems) { + this.mMaxWidthValue = this.mMinWidthValue = ems; + this.mMaxWidthMode = this.mMinWidthMode = TextView.EMS; + this.requestLayout(); + this.invalidate(); + } + setWidth(pixels) { + this.mMaxWidthValue = this.mMinWidthValue = pixels; + this.mMaxWidthMode = this.mMinWidthMode = TextView.PIXELS; + this.requestLayout(); + this.invalidate(); + } + setLineSpacing(add, mult) { + if (this.mSpacingAdd != add || this.mSpacingMult != mult) { + this.mSpacingAdd = add; + this.mSpacingMult = mult; + if (this.mLayout != null) { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); } - this.fixFocusableAndClickableSettings(); } } - fixFocusableAndClickableSettings() { - if (this.mMovement != null) { - this.setFocusable(true); - this.setClickable(true); - this.setLongClickable(true); - } - else { - this.setFocusable(false); - this.setClickable(false); - this.setLongClickable(false); - } + getLineSpacingMultiplier() { + return this.mSpacingMult; } - getTransformationMethod() { - return this.mTransformation; + getLineSpacingExtra() { + return this.mSpacingAdd; } - setTransformationMethod(method) { - if (method == this.mTransformation) { - return; + updateTextColors() { + let inval = false; + let color = this.mTextColor.getColorForState(this.getDrawableState(), 0); + if (color != this.mCurTextColor) { + this.mCurTextColor = color; + inval = true; } - if (this.mTransformation != null) { - if (Spannable.isImpl(this.mText)) { - this.mText.removeSpan(this.mTransformation); + if (this.mLinkTextColor != null) { + color = this.mLinkTextColor.getColorForState(this.getDrawableState(), 0); + if (color != this.mTextPaint.linkColor) { + this.mTextPaint.linkColor = color; + inval = true; } } - this.mTransformation = method; - if (TransformationMethod2.isImpl(method)) { - let method2 = method; - this.mAllowTransformationLengthChange = !this.isTextSelectable(); - method2.setLengthChangesAllowed(this.mAllowTransformationLengthChange); + if (this.mHintTextColor != null) { + color = this.mHintTextColor.getColorForState(this.getDrawableState(), 0); + if (color != this.mCurHintTextColor && this.mText.length == 0) { + this.mCurHintTextColor = color; + inval = true; + } } - else { - this.mAllowTransformationLengthChange = false; + if (inval) { + this.invalidate(); } - this.setText(this.mText); } - getCompoundPaddingTop() { - const dr = this.mDrawables; - if (dr == null || dr.mDrawableTop == null) { - return this.mPaddingTop; + drawableStateChanged() { + super.drawableStateChanged(); + if (this.mTextColor != null && this.mTextColor.isStateful() || (this.mHintTextColor != null && this.mHintTextColor.isStateful()) || (this.mLinkTextColor != null && this.mLinkTextColor.isStateful())) { + this.updateTextColors(); } - else { - return this.mPaddingTop + dr.mDrawablePadding + dr.mDrawableSizeTop; + const dr = this.mDrawables; + if (dr != null) { + let state = this.getDrawableState(); + if (dr.mDrawableTop != null && dr.mDrawableTop.isStateful()) { + dr.mDrawableTop.setState(state); + } + if (dr.mDrawableBottom != null && dr.mDrawableBottom.isStateful()) { + dr.mDrawableBottom.setState(state); + } + if (dr.mDrawableLeft != null && dr.mDrawableLeft.isStateful()) { + dr.mDrawableLeft.setState(state); + } + if (dr.mDrawableRight != null && dr.mDrawableRight.isStateful()) { + dr.mDrawableRight.setState(state); + } + if (dr.mDrawableStart != null && dr.mDrawableStart.isStateful()) { + dr.mDrawableStart.setState(state); + } + if (dr.mDrawableEnd != null && dr.mDrawableEnd.isStateful()) { + dr.mDrawableEnd.setState(state); + } } } - getCompoundPaddingBottom() { - const dr = this.mDrawables; - if (dr == null || dr.mDrawableBottom == null) { - return this.mPaddingBottom; + removeMisspelledSpans(spannable) { + } + setFreezesText(freezesText) { + this.mFreezesText = freezesText; + } + getFreezesText() { + return this.mFreezesText; + } + setSpannableFactory(factory) { + this.mSpannableFactory = factory; + this.setText(this.mText); + } + setText(text, type = this.mBufferType, notifyBefore = true, oldlen = 0) { + if (text == null) { + text = ""; } - else { - return this.mPaddingBottom + dr.mDrawablePadding + dr.mDrawableSizeBottom; + if (!this.isSuggestionsEnabled()) { + text = this.removeSuggestionSpans(text); } - } - getCompoundPaddingLeft() { - const dr = this.mDrawables; - if (dr == null || dr.mDrawableLeft == null) { - return this.mPaddingLeft; + if (Spanned.isImplements(text) && text.getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) { + this.setHorizontalFadingEdgeEnabled(true); + this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL; + this.setEllipsize(TextUtils.TruncateAt.MARQUEE); + } + if (notifyBefore) { + if (this.mText != null) { + oldlen = this.mText.length; + this.sendBeforeTextChanged(this.mText, 0, oldlen, text.length); + } + else { + this.sendBeforeTextChanged("", 0, 0, text.length); + } + } + let needEditableForNotification = false; + if (this.mListeners != null && this.mListeners.size() != 0) { + needEditableForNotification = true; + } + if (type == TextView.BufferType.SPANNABLE || this.mMovement != null) { + text = this.mSpannableFactory.newSpannable(text); + } + this.mBufferType = type; + this.mText = text; + if (this.mTransformation == null) { + this.mTransformed = text; } else { - return this.mPaddingLeft + dr.mDrawablePadding + dr.mDrawableSizeLeft; + this.mTransformed = this.mTransformation.getTransformation(text, this); } + const textLength = text.length; + if (this.mLayout != null) { + this.checkForRelayout(); + } + this.sendOnTextChanged(text, 0, oldlen, textLength); + this.onTextChanged(text, 0, oldlen, textLength); } - getCompoundPaddingRight() { - const dr = this.mDrawables; - if (dr == null || dr.mDrawableRight == null) { - return this.mPaddingRight; + setHint(hint) { + this.mHint = hint; + if (this.mLayout != null) { + this.checkForRelayout(); } - else { - return this.mPaddingRight + dr.mDrawablePadding + dr.mDrawableSizeRight; + if (this.mText.length == 0) { + this.invalidate(); } } - getCompoundPaddingStart() { - this.resolveDrawables(); - return this.getCompoundPaddingLeft(); + getHint() { + return this.mHint; } - getCompoundPaddingEnd() { - this.resolveDrawables(); - return this.getCompoundPaddingRight(); + isSingleLine() { + return this.mSingleLine; } - getExtendedPaddingTop() { - if (this.mMaxMode != TextView.LINES) { - return this.getCompoundPaddingTop(); + static isMultilineInputType(type) { + return true; + } + removeSuggestionSpans(text) { + return text; + } + hasPasswordTransformationMethod() { + return false; + } + static isPasswordInputType(inputType) { + return false; + } + static isVisiblePasswordInputType(inputType) { + return true; + } + setRawInputType(type) { + } + setInputType(type, direct = false) { + } + getInputType() { + return 0; + } + setImeOptions(imeOptions) { + } + getImeOptions() { + return -1; + } + setImeActionLabel(label, actionId) { + this.createEditorIfNeeded(); + } + getImeActionLabel() { + return ''; + } + getImeActionId() { + return 0; + } + setOnEditorActionListener(l) { + this.createEditorIfNeeded(); + } + setFrame(l, t, r, b) { + let result = super.setFrame(l, t, r, b); + this.restartMarqueeIfNeeded(); + return result; + } + restartMarqueeIfNeeded() { + if (this.mRestartMarquee && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { + this.mRestartMarquee = false; + this.startMarquee(); } - if (this.mLayout.getLineCount() <= this.mMaximum) { - return this.getCompoundPaddingTop(); + } + setFilters(...args) { + } + getFilters() { + return this.mFilters; + } + getBoxHeight(l) { + let padding = (l == this.mHintLayout) ? this.getCompoundPaddingTop() + this.getCompoundPaddingBottom() : this.getExtendedPaddingTop() + this.getExtendedPaddingBottom(); + return this.getMeasuredHeight() - padding; + } + getVerticalOffset(forceNormal) { + let voffset = 0; + const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; + let l = this.mLayout; + if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) { + l = this.mHintLayout; } - let top = this.getCompoundPaddingTop(); - let bottom = this.getCompoundPaddingBottom(); - let viewht = this.getHeight() - top - bottom; - let layoutht = this.mLayout.getLineTop(this.mMaximum); - if (layoutht >= viewht) { - return top; + if (gravity != Gravity.TOP) { + let boxht = this.getBoxHeight(l); + let textht = l.getHeight(); + if (textht < boxht) { + if (gravity == Gravity.BOTTOM) + voffset = boxht - textht; + else + voffset = (boxht - textht) >> 1; + } } + return voffset; + } + getBottomVerticalOffset(forceNormal) { + let voffset = 0; const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - if (gravity == Gravity.TOP) { - return top; - } - else if (gravity == Gravity.BOTTOM) { - return top + viewht - layoutht; + let l = this.mLayout; + if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) { + l = this.mHintLayout; } - else { - return top + (viewht - layoutht) / 2; + if (gravity != Gravity.BOTTOM) { + let boxht = this.getBoxHeight(l); + let textht = l.getHeight(); + if (textht < boxht) { + if (gravity == Gravity.TOP) + voffset = boxht - textht; + else + voffset = (boxht - textht) >> 1; + } } + return voffset; } - getExtendedPaddingBottom() { - if (this.mMaxMode != TextView.LINES) { - return this.getCompoundPaddingBottom(); + invalidateRegion(start, end, invalidateCursor) { + if (this.mLayout == null) { + this.invalidate(); } - if (this.mLayout.getLineCount() <= this.mMaximum) { - return this.getCompoundPaddingBottom(); + else { + let lineStart = this.mLayout.getLineForOffset(start); + let top = this.mLayout.getLineTop(lineStart); + if (lineStart > 0) { + top -= this.mLayout.getLineDescent(lineStart - 1); + } + let lineEnd; + if (start == end) + lineEnd = lineStart; + else + lineEnd = this.mLayout.getLineForOffset(end); + let bottom = this.mLayout.getLineBottom(lineEnd); + const compoundPaddingLeft = this.getCompoundPaddingLeft(); + const verticalPadding = this.getExtendedPaddingTop() + this.getVerticalOffset(true); + let left, right; + if (lineStart == lineEnd && !invalidateCursor) { + left = Math.floor(this.mLayout.getPrimaryHorizontal(start)); + right = Math.floor((this.mLayout.getPrimaryHorizontal(end) + 1.0)); + left += compoundPaddingLeft; + right += compoundPaddingLeft; + } + else { + left = compoundPaddingLeft; + right = this.getWidth() - this.getCompoundPaddingRight(); + } + this.invalidate(this.mScrollX + left, verticalPadding + top, this.mScrollX + right, verticalPadding + bottom); } - let top = this.getCompoundPaddingTop(); - let bottom = this.getCompoundPaddingBottom(); - let viewht = this.getHeight() - top - bottom; - let layoutht = this.mLayout.getLineTop(this.mMaximum); - if (layoutht >= viewht) { - return bottom; + } + registerForPreDraw() { + if (!this.mPreDrawRegistered) { + this.getViewTreeObserver().addOnPreDrawListener(this); + this.mPreDrawRegistered = true; } - const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - if (gravity == Gravity.TOP) { - return bottom + viewht - layoutht; + } + onPreDraw() { + if (this.mLayout == null) { + this.assumeLayout(); } - else if (gravity == Gravity.BOTTOM) { - return bottom; + if (this.mMovement != null) { + let curs = this.getSelectionEnd(); + if (curs < 0 && (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { + curs = this.mText.length; + } + if (curs >= 0) { + this.bringPointIntoView(curs); + } } else { - return bottom + (viewht - layoutht) / 2; + this.bringTextIntoView(); } + this.getViewTreeObserver().removeOnPreDrawListener(this); + this.mPreDrawRegistered = false; + return true; } - getTotalPaddingLeft() { - return this.getCompoundPaddingLeft(); + onAttachedToWindow() { + super.onAttachedToWindow(); + this.mTemporaryDetach = false; } - getTotalPaddingRight() { - return this.getCompoundPaddingRight(); + onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (this.mPreDrawRegistered) { + this.getViewTreeObserver().removeOnPreDrawListener(this); + this.mPreDrawRegistered = false; + } + this.resetResolvedDrawables(); } - getTotalPaddingStart() { - return this.getCompoundPaddingStart(); + isPaddingOffsetRequired() { + return this.mShadowRadius != 0 || this.mDrawables != null; } - getTotalPaddingEnd() { - return this.getCompoundPaddingEnd(); + getLeftPaddingOffset() { + return this.getCompoundPaddingLeft() - this.mPaddingLeft + Math.floor(Math.min(0, this.mShadowDx - this.mShadowRadius)); } - getTotalPaddingTop() { - return this.getExtendedPaddingTop() + this.getVerticalOffset(true); + getTopPaddingOffset() { + return Math.floor(Math.min(0, this.mShadowDy - this.mShadowRadius)); } - getTotalPaddingBottom() { - return this.getExtendedPaddingBottom() + this.getBottomVerticalOffset(true); + getBottomPaddingOffset() { + return Math.floor(Math.max(0, this.mShadowDy + this.mShadowRadius)); } - setCompoundDrawables(left, top, right, bottom) { - let dr = this.mDrawables; - const drawables = left != null || top != null || right != null || bottom != null; - if (!drawables) { - if (dr != null) { - if (dr.mDrawablePadding == 0) { - this.mDrawables = null; - } - else { - if (dr.mDrawableLeft != null) { - dr.mDrawableLeft.setCallback(null); - } - dr.mDrawableLeft = null; - if (dr.mDrawableTop != null) { - dr.mDrawableTop.setCallback(null); - } - dr.mDrawableTop = null; - if (dr.mDrawableRight != null) { - dr.mDrawableRight.setCallback(null); - } - dr.mDrawableRight = null; - if (dr.mDrawableBottom != null) { - dr.mDrawableBottom.setCallback(null); - } - dr.mDrawableBottom = null; - dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0; - dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0; - dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; - dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; - } - } + getRightPaddingOffset() { + return -(this.getCompoundPaddingRight() - this.mPaddingRight) + Math.floor(Math.max(0, this.mShadowDx + this.mShadowRadius)); + } + verifyDrawable(who) { + const verified = super.verifyDrawable(who); + if (!verified && this.mDrawables != null) { + return who == this.mDrawables.mDrawableLeft || who == this.mDrawables.mDrawableTop || who == this.mDrawables.mDrawableRight || who == this.mDrawables.mDrawableBottom || who == this.mDrawables.mDrawableStart || who == this.mDrawables.mDrawableEnd; } - else { - if (dr == null) { - this.mDrawables = dr = new TextView.Drawables(); - } - this.mDrawables.mOverride = false; - if (dr.mDrawableLeft != left && dr.mDrawableLeft != null) { - dr.mDrawableLeft.setCallback(null); - } - dr.mDrawableLeft = left; - if (dr.mDrawableTop != top && dr.mDrawableTop != null) { - dr.mDrawableTop.setCallback(null); - } - dr.mDrawableTop = top; - if (dr.mDrawableRight != right && dr.mDrawableRight != null) { - dr.mDrawableRight.setCallback(null); - } - dr.mDrawableRight = right; - if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) { - dr.mDrawableBottom.setCallback(null); - } - dr.mDrawableBottom = bottom; - const compoundRect = dr.mCompoundRect; - let state; - state = this.getDrawableState(); - if (left != null) { - left.setState(state); - left.copyBounds(compoundRect); - left.setCallback(this); - dr.mDrawableSizeLeft = compoundRect.width(); - dr.mDrawableHeightLeft = compoundRect.height(); - } - else { - dr.mDrawableSizeLeft = dr.mDrawableHeightLeft = 0; - } - if (right != null) { - right.setState(state); - right.copyBounds(compoundRect); - right.setCallback(this); - dr.mDrawableSizeRight = compoundRect.width(); - dr.mDrawableHeightRight = compoundRect.height(); + return verified; + } + jumpDrawablesToCurrentState() { + super.jumpDrawablesToCurrentState(); + if (this.mDrawables != null) { + if (this.mDrawables.mDrawableLeft != null) { + this.mDrawables.mDrawableLeft.jumpToCurrentState(); } - else { - dr.mDrawableSizeRight = dr.mDrawableHeightRight = 0; + if (this.mDrawables.mDrawableTop != null) { + this.mDrawables.mDrawableTop.jumpToCurrentState(); } - if (top != null) { - top.setState(state); - top.copyBounds(compoundRect); - top.setCallback(this); - dr.mDrawableSizeTop = compoundRect.height(); - dr.mDrawableWidthTop = compoundRect.width(); + if (this.mDrawables.mDrawableRight != null) { + this.mDrawables.mDrawableRight.jumpToCurrentState(); } - else { - dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + if (this.mDrawables.mDrawableBottom != null) { + this.mDrawables.mDrawableBottom.jumpToCurrentState(); } - if (bottom != null) { - bottom.setState(state); - bottom.copyBounds(compoundRect); - bottom.setCallback(this); - dr.mDrawableSizeBottom = compoundRect.height(); - dr.mDrawableWidthBottom = compoundRect.width(); + if (this.mDrawables.mDrawableStart != null) { + this.mDrawables.mDrawableStart.jumpToCurrentState(); } - else { - dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; + if (this.mDrawables.mDrawableEnd != null) { + this.mDrawables.mDrawableEnd.jumpToCurrentState(); } } - if (dr != null) { - dr.mDrawableLeftInitial = left; - dr.mDrawableRightInitial = right; - } - this.resetResolvedDrawables(); - this.resolveDrawables(); - this.invalidate(); - this.requestLayout(); } - setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom) { - if (left != null) { - left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight()); - } - if (right != null) { - right.setBounds(0, 0, right.getIntrinsicWidth(), right.getIntrinsicHeight()); - } - if (top != null) { - top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight()); + drawableSizeChange(d) { + const drawables = this.mDrawables; + const isCompoundDrawable = drawables != null && (d == drawables.mDrawableLeft || d == drawables.mDrawableTop + || d == drawables.mDrawableRight || d == drawables.mDrawableBottom || d == drawables.mDrawableStart || d == drawables.mDrawableEnd); + if (isCompoundDrawable) { + d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); + this.setCompoundDrawables(drawables.mDrawableLeft, drawables.mDrawableTop, drawables.mDrawableRight, drawables.mDrawableBottom); } - if (bottom != null) { - bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight()); + else { + super.drawableSizeChange(d); } - this.setCompoundDrawables(left, top, right, bottom); } - setCompoundDrawablesRelative(start, top, end, bottom) { - let dr = this.mDrawables; - const drawables = start != null || top != null || end != null || bottom != null; - if (!drawables) { - if (dr != null) { - if (dr.mDrawablePadding == 0) { - this.mDrawables = null; + invalidateDrawable(drawable) { + if (this.verifyDrawable(drawable)) { + const dirty = drawable.getBounds(); + let scrollX = this.mScrollX; + let scrollY = this.mScrollY; + const drawables = this.mDrawables; + if (drawables != null) { + if (drawable == drawables.mDrawableLeft) { + const compoundPaddingTop = this.getCompoundPaddingTop(); + const compoundPaddingBottom = this.getCompoundPaddingBottom(); + const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; + scrollX += this.mPaddingLeft; + scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2; } - else { - if (dr.mDrawableStart != null) { - dr.mDrawableStart.setCallback(null); - } - dr.mDrawableStart = null; - if (dr.mDrawableTop != null) { - dr.mDrawableTop.setCallback(null); - } - dr.mDrawableTop = null; - if (dr.mDrawableEnd != null) { - dr.mDrawableEnd.setCallback(null); - } - dr.mDrawableEnd = null; - if (dr.mDrawableBottom != null) { - dr.mDrawableBottom.setCallback(null); - } - dr.mDrawableBottom = null; - dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; - dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; - dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; - dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; + else if (drawable == drawables.mDrawableRight) { + const compoundPaddingTop = this.getCompoundPaddingTop(); + const compoundPaddingBottom = this.getCompoundPaddingBottom(); + const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; + scrollX += (this.mRight - this.mLeft - this.mPaddingRight - drawables.mDrawableSizeRight); + scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2; + } + else if (drawable == drawables.mDrawableTop) { + const compoundPaddingLeft = this.getCompoundPaddingLeft(); + const compoundPaddingRight = this.getCompoundPaddingRight(); + const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft; + scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2; + scrollY += this.mPaddingTop; + } + else if (drawable == drawables.mDrawableBottom) { + const compoundPaddingLeft = this.getCompoundPaddingLeft(); + const compoundPaddingRight = this.getCompoundPaddingRight(); + const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft; + scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2; + scrollY += (this.mBottom - this.mTop - this.mPaddingBottom - drawables.mDrawableSizeBottom); } } + this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY); + } + } + isTextSelectable() { + return false; + } + setTextIsSelectable(selectable) { + } + onCreateDrawableState(extraSpace) { + let drawableState; + if (this.mSingleLine) { + drawableState = super.onCreateDrawableState(extraSpace); } else { - if (dr == null) { - this.mDrawables = dr = new TextView.Drawables(); - } - this.mDrawables.mOverride = true; - if (dr.mDrawableStart != start && dr.mDrawableStart != null) { - dr.mDrawableStart.setCallback(null); - } - dr.mDrawableStart = start; - if (dr.mDrawableTop != top && dr.mDrawableTop != null) { - dr.mDrawableTop.setCallback(null); - } - dr.mDrawableTop = top; - if (dr.mDrawableEnd != end && dr.mDrawableEnd != null) { - dr.mDrawableEnd.setCallback(null); - } - dr.mDrawableEnd = end; - if (dr.mDrawableBottom != bottom && dr.mDrawableBottom != null) { - dr.mDrawableBottom.setCallback(null); + drawableState = super.onCreateDrawableState(extraSpace + 1); + TextView.mergeDrawableStates(drawableState, TextView.MULTILINE_STATE_SET); + } + if (this.isTextSelectable()) { + const length = drawableState.length; + for (let i = 0; i < length; i++) { + if (drawableState[i] == View.VIEW_STATE_PRESSED) { + const nonPressedState = androidui.util.ArrayCreator.newNumberArray(length - 1); + System.arraycopy(drawableState, 0, nonPressedState, 0, i); + System.arraycopy(drawableState, i + 1, nonPressedState, i, length - i - 1); + return nonPressedState; + } } - dr.mDrawableBottom = bottom; - const compoundRect = dr.mCompoundRect; - let state; - state = this.getDrawableState(); - if (start != null) { - start.setState(state); - start.copyBounds(compoundRect); - start.setCallback(this); - dr.mDrawableSizeStart = compoundRect.width(); - dr.mDrawableHeightStart = compoundRect.height(); + } + return drawableState; + } + getUpdatedHighlightPath() { + let highlight = null; + let highlightPaint = this.mHighlightPaint; + const selStart = this.getSelectionStart(); + const selEnd = this.getSelectionEnd(); + if (this.mMovement != null && (this.isFocused() || this.isPressed()) && selStart >= 0) { + if (selStart == selEnd) { } else { - dr.mDrawableSizeStart = dr.mDrawableHeightStart = 0; - } - if (end != null) { - end.setState(state); - end.copyBounds(compoundRect); - end.setCallback(this); - dr.mDrawableSizeEnd = compoundRect.width(); - dr.mDrawableHeightEnd = compoundRect.height(); + if (this.mHighlightPathBogus) { + if (this.mHighlightPath == null) + this.mHighlightPath = new Path(); + this.mHighlightPath.reset(); + this.mLayout.getSelectionPath(selStart, selEnd, this.mHighlightPath); + this.mHighlightPathBogus = false; + } + highlightPaint.setColor(this.mHighlightColor); + highlightPaint.setStyle(Paint.Style.FILL); + highlight = this.mHighlightPath; } - else { - dr.mDrawableSizeEnd = dr.mDrawableHeightEnd = 0; + } + return highlight; + } + getHorizontalOffsetForDrawables() { + return 0; + } + onDraw(canvas) { + this.restartMarqueeIfNeeded(); + super.onDraw(canvas); + const compoundPaddingLeft = this.getCompoundPaddingLeft(); + const compoundPaddingTop = this.getCompoundPaddingTop(); + const compoundPaddingRight = this.getCompoundPaddingRight(); + const compoundPaddingBottom = this.getCompoundPaddingBottom(); + const scrollX = this.mScrollX; + const scrollY = this.mScrollY; + const right = this.mRight; + const left = this.mLeft; + const bottom = this.mBottom; + const top = this.mTop; + const isLayoutRtl = this.isLayoutRtl(); + const offset = this.getHorizontalOffsetForDrawables(); + const leftOffset = isLayoutRtl ? 0 : offset; + const rightOffset = isLayoutRtl ? offset : 0; + const dr = this.mDrawables; + if (dr != null) { + let vspace = bottom - top - compoundPaddingBottom - compoundPaddingTop; + let hspace = right - left - compoundPaddingRight - compoundPaddingLeft; + if (dr.mDrawableLeft != null) { + canvas.save(); + canvas.translate(scrollX + this.mPaddingLeft + leftOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightLeft) / 2); + dr.mDrawableLeft.draw(canvas); + canvas.restore(); } - if (top != null) { - top.setState(state); - top.copyBounds(compoundRect); - top.setCallback(this); - dr.mDrawableSizeTop = compoundRect.height(); - dr.mDrawableWidthTop = compoundRect.width(); + if (dr.mDrawableRight != null) { + canvas.save(); + canvas.translate(scrollX + right - left - this.mPaddingRight - dr.mDrawableSizeRight - rightOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightRight) / 2); + dr.mDrawableRight.draw(canvas); + canvas.restore(); } - else { - dr.mDrawableSizeTop = dr.mDrawableWidthTop = 0; + if (dr.mDrawableTop != null) { + canvas.save(); + canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthTop) / 2, scrollY + this.mPaddingTop); + dr.mDrawableTop.draw(canvas); + canvas.restore(); } - if (bottom != null) { - bottom.setState(state); - bottom.copyBounds(compoundRect); - bottom.setCallback(this); - dr.mDrawableSizeBottom = compoundRect.height(); - dr.mDrawableWidthBottom = compoundRect.width(); + if (dr.mDrawableBottom != null) { + canvas.save(); + canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthBottom) / 2, scrollY + bottom - top - this.mPaddingBottom - dr.mDrawableSizeBottom); + dr.mDrawableBottom.draw(canvas); + canvas.restore(); } - else { - dr.mDrawableSizeBottom = dr.mDrawableWidthBottom = 0; + } + let color = this.mCurTextColor; + if (this.mLayout == null) { + this.assumeLayout(); + } + let layout = this.mLayout; + if (this.mHint != null && this.mText.length == 0) { + if (this.mHintTextColor != null) { + color = this.mCurHintTextColor; } + layout = this.mHintLayout; } - this.resetResolvedDrawables(); - this.resolveDrawables(); - this.invalidate(); - this.requestLayout(); - } - setCompoundDrawablesRelativeWithIntrinsicBounds(start, top, end, bottom) { - if (start != null) { - start.setBounds(0, 0, start.getIntrinsicWidth(), start.getIntrinsicHeight()); + this.mTextPaint.setColor(color); + this.mTextPaint.drawableState = this.getDrawableState(); + if (this.mSkipDrawText) + return; + canvas.save(); + let extendedPaddingTop = this.getExtendedPaddingTop(); + let extendedPaddingBottom = this.getExtendedPaddingBottom(); + const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; + const maxScrollY = this.mLayout.getHeight() - vspace; + let clipLeft = compoundPaddingLeft + scrollX; + let clipTop = (scrollY == 0) ? 0 : extendedPaddingTop + scrollY; + let clipRight = right - left - compoundPaddingRight + scrollX; + let clipBottom = bottom - top + scrollY - ((scrollY == maxScrollY) ? 0 : extendedPaddingBottom); + if (this.mShadowRadius != 0) { + clipLeft += Math.min(0, this.mShadowDx - this.mShadowRadius); + clipRight += Math.max(0, this.mShadowDx + this.mShadowRadius); + clipTop += Math.min(0, this.mShadowDy - this.mShadowRadius); + clipBottom += Math.max(0, this.mShadowDy + this.mShadowRadius); } - if (end != null) { - end.setBounds(0, 0, end.getIntrinsicWidth(), end.getIntrinsicHeight()); + canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom); + let voffsetText = 0; + let voffsetCursor = 0; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + voffsetText = this.getVerticalOffset(false); + voffsetCursor = this.getVerticalOffset(true); } - if (top != null) { - top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight()); + canvas.translate(compoundPaddingLeft, extendedPaddingTop + voffsetText); + const absoluteGravity = this.mGravity; + if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { + if (!this.mSingleLine && this.getLineCount() == 1 && this.canMarquee() && (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != Gravity.LEFT) { + const width = this.mRight - this.mLeft; + const padding = this.getCompoundPaddingLeft() + this.getCompoundPaddingRight(); + const dx = this.mLayout.getLineRight(0) - (width - padding); + canvas.translate(isLayoutRtl ? -dx : +dx, 0.0); + } + if (this.mMarquee != null && this.mMarquee.isRunning()) { + const dx = -this.mMarquee.getScroll(); + canvas.translate(isLayoutRtl ? -dx : +dx, 0.0); + } } - if (bottom != null) { - bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight()); + const cursorOffsetVertical = voffsetCursor - voffsetText; + let highlight = this.getUpdatedHighlightPath(); + layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical); + if (this.mMarquee != null && this.mMarquee.shouldDrawGhost()) { + const dx = Math.floor(this.mMarquee.getGhostOffset()); + canvas.translate(isLayoutRtl ? -dx : dx, 0.0); + layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical); } - this.setCompoundDrawablesRelative(start, top, end, bottom); + canvas.restore(); } - getCompoundDrawables() { - const dr = this.mDrawables; - if (dr != null) { - return [dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom]; + getFocusedRect(r) { + if (this.mLayout == null) { + super.getFocusedRect(r); + return; } - else { - return [null, null, null, null]; + let selEnd = this.getSelectionEnd(); + if (selEnd < 0) { + super.getFocusedRect(r); + return; } } - getCompoundDrawablesRelative() { - const dr = this.mDrawables; - if (dr != null) { - return [dr.mDrawableStart, dr.mDrawableTop, dr.mDrawableEnd, dr.mDrawableBottom]; - } - else { - return [null, null, null, null]; - } + getLineCount() { + return this.mLayout != null ? this.mLayout.getLineCount() : 0; } - setCompoundDrawablePadding(pad) { - let dr = this.mDrawables; - if (pad == 0) { - if (dr != null) { - dr.mDrawablePadding = pad; + getLineBounds(line, bounds) { + if (this.mLayout == null) { + if (bounds != null) { + bounds.set(0, 0, 0, 0); } + return 0; } else { - if (dr == null) { - this.mDrawables = dr = new TextView.Drawables(); + let baseline = this.mLayout.getLineBounds(line, bounds); + let voffset = this.getExtendedPaddingTop(); + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + voffset += this.getVerticalOffset(true); } - dr.mDrawablePadding = pad; + if (bounds != null) { + bounds.offset(this.getCompoundPaddingLeft(), voffset); + } + return baseline + voffset; } - this.invalidate(); - this.requestLayout(); - } - getCompoundDrawablePadding() { - const dr = this.mDrawables; - return dr != null ? dr.mDrawablePadding : 0; } - setPadding(left, top, right, bottom) { - if (left != this.mPaddingLeft || right != this.mPaddingRight || top != this.mPaddingTop || bottom != this.mPaddingBottom) { - this.nullLayouts(); + getBaseline() { + if (this.mLayout == null) { + return super.getBaseline(); } - super.setPadding(left, top, right, bottom); - this.invalidate(); - } - getAutoLinkMask() { - return this.mAutoLinkMask; - } - getTextLocale() { - return null; - } - setTextLocale(locale) { - } - getTextSize() { - return this.mTextPaint.getTextSize(); - } - setTextSize(...args) { - if (args.length == 1) { - this.setTextSize(TypedValue.COMPLEX_UNIT_SP, args[0]); - return; + let voffset = 0; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + voffset = this.getVerticalOffset(true); } - let [unit, size] = args; - this.setRawTextSize(TypedValue.applyDimension(unit, size, this.getResources().getDisplayMetrics())); + return this.getExtendedPaddingTop() + voffset + this.mLayout.getLineBaseline(0); } - setRawTextSize(size) { - if (size != this.mTextPaint.getTextSize()) { - this.mTextPaint.setTextSize(size); - if (this.mLayout != null) { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); - } + getFadeTop(offsetRequired) { + if (this.mLayout == null) + return 0; + let voffset = 0; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + voffset = this.getVerticalOffset(true); } + if (offsetRequired) + voffset += this.getTopPaddingOffset(); + return this.getExtendedPaddingTop() + voffset; } - getTextScaleX() { - return 1; - } - setTextScaleX(size) { - } - getTypeface() { - return null; + getFadeHeight(offsetRequired) { + return this.mLayout != null ? this.mLayout.getHeight() : 0; } - setTextColor(colors) { - if (typeof colors === 'number') { - colors = ColorStateList.valueOf(colors); - } - if (colors == null) { - throw Error(`new NullPointerException()`); + onKeyDown(keyCode, event) { + let which = this.doKeyDown(keyCode, event, null); + if (which == 0) { + return super.onKeyDown(keyCode, event); } - this.mTextColor = colors; - this.updateTextColors(); - } - getTextColors() { - return this.mTextColor; - } - getCurrentTextColor() { - return this.mCurTextColor; + return true; } - setHighlightColor(color) { - if (this.mHighlightColor != color) { - this.mHighlightColor = color; - this.invalidate(); + shouldAdvanceFocusOnEnter() { + if (this.getKeyListener() == null) { + return false; + } + if (this.mSingleLine) { + return true; } - } - getHighlightColor() { - return this.mHighlightColor; - } - setShowSoftInputOnFocus(show) { - this.createEditorIfNeeded(); - } - getShowSoftInputOnFocus() { return false; } - setShadowLayer(radius, dx, dy, color) { - this.mTextPaint.setShadowLayer(radius, dx, dy, color); - this.mShadowRadius = radius; - this.mShadowDx = dx; - this.mShadowDy = dy; - this.invalidate(); - } - getShadowRadius() { - return this.mShadowRadius; - } - getShadowDx() { - return this.mShadowDx; - } - getShadowDy() { - return this.mShadowDy; - } - getShadowColor() { - return this.mTextPaint.shadowColor; + shouldAdvanceFocusOnTab() { + return true; } - getPaint() { - return this.mTextPaint; + doKeyDown(keyCode, event, otherEvent) { + return 0; } - setAutoLinkMask(mask) { - this.mAutoLinkMask = mask; + resetErrorChangedFlag() { } - setLinksClickable(whether) { - this.mLinksClickable = whether; + hideErrorIfUnchanged() { } - getLinksClickable() { - return this.mLinksClickable; + onKeyUp(keyCode, event) { + return super.onKeyUp(keyCode, event); } - getUrls() { - return new Array(0); + onCheckIsTextEditor() { + return false; } - setHintTextColor(colors) { - if (typeof colors === 'number') { - colors = ColorStateList.valueOf(colors); + nullLayouts() { + if (this.mLayout instanceof BoringLayout && this.mSavedLayout == null) { + this.mSavedLayout = this.mLayout; } - this.mHintTextColor = colors; - this.updateTextColors(); + if (this.mHintLayout instanceof BoringLayout && this.mSavedHintLayout == null) { + this.mSavedHintLayout = this.mHintLayout; + } + this.mSavedMarqueeModeLayout = this.mLayout = this.mHintLayout = null; + this.mBoring = this.mHintBoring = null; } - getHintTextColors() { - return this.mHintTextColor; + assumeLayout() { + let width = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); + if (width < 1) { + width = 0; + } + let physicalWidth = width; + if (this.mHorizontallyScrolling) { + width = TextView.VERY_WIDE; + } + this.makeNewLayout(width, physicalWidth, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, physicalWidth, false); } - getCurrentHintTextColor() { - return this.mHintTextColor != null ? this.mCurHintTextColor : this.mCurTextColor; + getLayoutAlignment() { + let alignment; + switch (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.LEFT: + alignment = Layout.Alignment.ALIGN_LEFT; + break; + case Gravity.RIGHT: + alignment = Layout.Alignment.ALIGN_RIGHT; + break; + case Gravity.CENTER_HORIZONTAL: + alignment = Layout.Alignment.ALIGN_CENTER; + break; + default: + alignment = Layout.Alignment.ALIGN_NORMAL; + break; + } + return alignment; } - setGravity(gravity) { - if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { - gravity |= Gravity.LEFT; + makeNewLayout(wantWidth, hintWidth, boring, hintBoring, ellipsisWidth, bringIntoView) { + this.stopMarquee(); + this.mOldMaximum = this.mMaximum; + this.mOldMaxMode = this.mMaxMode; + this.mHighlightPathBogus = true; + if (wantWidth < 0) { + wantWidth = 0; } - if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { - gravity |= Gravity.TOP; + if (hintWidth < 0) { + hintWidth = 0; } - let newLayout = false; - if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) != (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK)) { - newLayout = true; + let alignment = this.getLayoutAlignment(); + const testDirChange = this.mSingleLine && this.mLayout != null && (alignment == Layout.Alignment.ALIGN_NORMAL || alignment == Layout.Alignment.ALIGN_OPPOSITE); + let oldDir = 0; + if (testDirChange) + oldDir = this.mLayout.getParagraphDirection(0); + let shouldEllipsize = this.mEllipsize != null && this.getKeyListener() == null; + const switchEllipsize = this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL; + let effectiveEllipsize = this.mEllipsize; + if (this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { + effectiveEllipsize = TruncateAt.END_SMALL; } - if (gravity != this.mGravity) { - this.invalidate(); + if (this.mTextDir == null) { + this.mTextDir = this.getTextDirectionHeuristic(); } - this.mGravity = gravity; - if (this.mLayout != null && newLayout) { - let want = this.mLayout.getWidth(); - let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth(); - this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), true); + this.mLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, effectiveEllipsize == this.mEllipsize); + if (switchEllipsize) { + let oppositeEllipsize = effectiveEllipsize == TruncateAt.MARQUEE ? TruncateAt.END : TruncateAt.MARQUEE; + this.mSavedMarqueeModeLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, oppositeEllipsize, effectiveEllipsize != this.mEllipsize); } - } - getGravity() { - return this.mGravity; - } - getPaintFlags() { - return this.mTextPaint.getFlags(); - } - setPaintFlags(flags) { - if (this.mTextPaint.getFlags() != flags) { - this.mTextPaint.setFlags(flags); - if (this.mLayout != null) { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); + shouldEllipsize = this.mEllipsize != null; + this.mHintLayout = null; + if (this.mHint != null) { + if (shouldEllipsize) + hintWidth = wantWidth; + if (hintBoring == TextView.UNKNOWN_BORING) { + hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring); + if (hintBoring != null) { + this.mHintBoring = hintBoring; + } + } + if (hintBoring != null) { + if (hintBoring.width <= hintWidth && (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) { + if (this.mSavedHintLayout != null) { + this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad); + } + else { + this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad); + } + this.mSavedHintLayout = this.mHintLayout; + } + else if (shouldEllipsize && hintBoring.width <= hintWidth) { + if (this.mSavedHintLayout != null) { + this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth); + } + else { + this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth); + } + } + else if (shouldEllipsize) { + this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); + } + else { + this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); + } + } + else if (shouldEllipsize) { + this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); + } + else { + this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); } } - } - setHorizontallyScrolling(whether) { - if (this.mHorizontallyScrolling != whether) { - this.mHorizontallyScrolling = whether; - if (this.mLayout != null) { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); + if (bringIntoView || (testDirChange && oldDir != this.mLayout.getParagraphDirection(0))) { + this.registerForPreDraw(); + } + if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { + if (!this.compressText(ellipsisWidth)) { + const height = this.mLayoutParams.height; + if (height != LayoutParams.WRAP_CONTENT && height != LayoutParams.MATCH_PARENT) { + this.startMarquee(); + } + else { + this.mRestartMarquee = true; + } } } } - getHorizontallyScrolling() { - return this.mHorizontallyScrolling; - } - setMinLines(minlines) { - this.mMinimum = minlines; - this.mMinMode = TextView.LINES; - this.requestLayout(); - this.invalidate(); - } - getMinLines() { - return this.mMinMode == TextView.LINES ? this.mMinimum : -1; - } - setMinHeight(minHeight) { - this.mMinimum = minHeight; - this.mMinMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); - } - getMinHeight() { - return this.mMinMode == TextView.PIXELS ? this.mMinimum : -1; - } - setMaxLines(maxlines) { - this.mMaximum = maxlines; - this.mMaxMode = TextView.LINES; - this.requestLayout(); - this.invalidate(); - } - getMaxLines() { - return this.mMaxMode == TextView.LINES ? this.mMaximum : -1; - } - setMaxHeight(maxHeight) { - this.mMaximum = maxHeight; - this.mMaxMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); - } - getMaxHeight() { - return this.mMaxMode == TextView.PIXELS ? this.mMaximum : -1; - } - setLines(lines) { - this.mMaximum = this.mMinimum = lines; - this.mMaxMode = this.mMinMode = TextView.LINES; - this.requestLayout(); - this.invalidate(); - } - setHeight(pixels) { - this.mMaximum = this.mMinimum = pixels; - this.mMaxMode = this.mMinMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); - } - setMinEms(minems) { - this.mMinWidthValue = minems; - this.mMinWidthMode = TextView.EMS; - this.requestLayout(); - this.invalidate(); - } - getMinEms() { - return this.mMinWidthMode == TextView.EMS ? this.mMinWidthValue : -1; - } - setMinWidth(minpixels) { - this.mMinWidthValue = minpixels; - this.mMinWidthMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); - } - getMinWidth() { - return this.mMinWidthMode == TextView.PIXELS ? this.mMinWidthValue : -1; - } - setMaxEms(maxems) { - this.mMaxWidthValue = maxems; - this.mMaxWidthMode = TextView.EMS; - this.requestLayout(); - this.invalidate(); - } - getMaxEms() { - return this.mMaxWidthMode == TextView.EMS ? this.mMaxWidthValue : -1; - } - setMaxWidth(maxpixels) { - this.mMaxWidthValue = maxpixels; - this.mMaxWidthMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); - } - getMaxWidth() { - return this.mMaxWidthMode == TextView.PIXELS ? this.mMaxWidthValue : -1; - } - setEms(ems) { - this.mMaxWidthValue = this.mMinWidthValue = ems; - this.mMaxWidthMode = this.mMinWidthMode = TextView.EMS; - this.requestLayout(); - this.invalidate(); + makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, useSaved) { + let result = null; + if (Spannable.isImpl(this.mText)) { + result = new DynamicLayout(this.mText, this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.getKeyListener() == null ? effectiveEllipsize : null, ellipsisWidth); + } + else { + if (boring == TextView.UNKNOWN_BORING) { + boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring); + if (boring != null) { + this.mBoring = boring; + } + } + if (boring != null) { + if (boring.width <= wantWidth && (effectiveEllipsize == null || boring.width <= ellipsisWidth)) { + if (useSaved && this.mSavedLayout != null) { + result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad); + } + else { + result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad); + } + if (useSaved) { + this.mSavedLayout = result; + } + } + else if (shouldEllipsize && boring.width <= wantWidth) { + if (useSaved && this.mSavedLayout != null) { + result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth); + } + else { + result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth); + } + } + else if (shouldEllipsize) { + result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); + } + else { + result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); + } + } + else if (shouldEllipsize) { + result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); + } + else { + result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); + } + } + return result; } - setWidth(pixels) { - this.mMaxWidthValue = this.mMinWidthValue = pixels; - this.mMaxWidthMode = this.mMinWidthMode = TextView.PIXELS; - this.requestLayout(); - this.invalidate(); + compressText(width) { + if (this.isHardwareAccelerated()) + return false; + if (width > 0.0 && this.mLayout != null && this.getLineCount() == 1 && !this.mUserSetTextScaleX && this.mTextPaint.getTextScaleX() == 1.0) { + const textWidth = this.mLayout.getLineWidth(0); + const overflow = (textWidth + 1.0 - width) / width; + if (overflow > 0.0 && overflow <= TextView.Marquee.MARQUEE_DELTA_MAX) { + this.mTextPaint.setTextScaleX(1.0 - overflow - 0.005); + this.post((() => { + const inner_this = this; + class _Inner { + run() { + inner_this.requestLayout(); + } + } + return new _Inner(); + })()); + return true; + } + } + return false; } - setLineSpacing(add, mult) { - if (this.mSpacingAdd != add || this.mSpacingMult != mult) { - this.mSpacingAdd = add; - this.mSpacingMult = mult; + static desired(layout) { + let n = layout.getLineCount(); + let text = layout.getText(); + let max = 0; + for (let i = 0; i < n - 1; i++) { + if (text.charAt(layout.getLineEnd(i) - 1) != '\n') + return -1; + } + for (let i = 0; i < n; i++) { + max = Math.max(max, layout.getLineWidth(i)); + } + return Math.floor(Math.ceil(max)); + } + setIncludeFontPadding(includepad) { + if (this.mIncludePad != includepad) { + this.mIncludePad = includepad; if (this.mLayout != null) { this.nullLayouts(); this.requestLayout(); @@ -33606,8055 +34093,8348 @@ var android; } } } - getLineSpacingMultiplier() { - return this.mSpacingMult; - } - getLineSpacingExtra() { - return this.mSpacingAdd; + getIncludeFontPadding() { + return this.mIncludePad; } - updateTextColors() { - let inval = false; - let color = this.mTextColor.getColorForState(this.getDrawableState(), 0); - if (color != this.mCurTextColor) { - this.mCurTextColor = color; - inval = true; + onMeasure(widthMeasureSpec, heightMeasureSpec) { + let widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + let heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + let widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + let heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + let width; + let height; + let boring = TextView.UNKNOWN_BORING; + let hintBoring = TextView.UNKNOWN_BORING; + if (this.mTextDir == null) { + this.mTextDir = this.getTextDirectionHeuristic(); } - if (this.mLinkTextColor != null) { - color = this.mLinkTextColor.getColorForState(this.getDrawableState(), 0); - if (color != this.mTextPaint.linkColor) { - this.mTextPaint.linkColor = color; - inval = true; + let des = -1; + let fromexisting = false; + if (widthMode == View.MeasureSpec.EXACTLY) { + width = widthSize; + } + else { + if (this.mLayout != null && this.mEllipsize == null) { + des = TextView.desired(this.mLayout); + } + if (des < 0) { + boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring); + if (boring != null) { + this.mBoring = boring; + } + } + else { + fromexisting = true; + } + if (boring == null || boring == TextView.UNKNOWN_BORING) { + if (des < 0) { + des = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed, this.mTextPaint))); + } + width = des; + } + else { + width = boring.width; + } + const dr = this.mDrawables; + if (dr != null) { + width = Math.max(width, dr.mDrawableWidthTop); + width = Math.max(width, dr.mDrawableWidthBottom); + } + if (this.mHint != null) { + let hintDes = -1; + let hintWidth; + if (this.mHintLayout != null && this.mEllipsize == null) { + hintDes = TextView.desired(this.mHintLayout); + } + if (hintDes < 0) { + hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring); + if (hintBoring != null) { + this.mHintBoring = hintBoring; + } + } + if (hintBoring == null || hintBoring == TextView.UNKNOWN_BORING) { + if (hintDes < 0) { + hintDes = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint, this.mTextPaint))); + } + hintWidth = hintDes; + } + else { + hintWidth = hintBoring.width; + } + if (hintWidth > width) { + width = hintWidth; + } + } + width += this.getCompoundPaddingLeft() + this.getCompoundPaddingRight(); + if (this.mMaxWidthMode == TextView.EMS) { + width = Math.min(width, this.mMaxWidthValue * this.getLineHeight()); + } + else { + width = Math.min(width, this.mMaxWidthValue); + } + if (this.mMinWidthMode == TextView.EMS) { + width = Math.max(width, this.mMinWidthValue * this.getLineHeight()); + } + else { + width = Math.max(width, this.mMinWidthValue); + } + width = Math.max(width, this.getSuggestedMinimumWidth()); + if (widthMode == View.MeasureSpec.AT_MOST) { + width = Math.min(widthSize, width); } } - if (this.mHintTextColor != null) { - color = this.mHintTextColor.getColorForState(this.getDrawableState(), 0); - if (color != this.mCurHintTextColor && this.mText.length == 0) { - this.mCurHintTextColor = color; - inval = true; + let want = width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); + let unpaddedWidth = want; + if (this.mHorizontallyScrolling) + want = TextView.VERY_WIDE; + let hintWant = want; + let hintWidth = (this.mHintLayout == null) ? hintWant : this.mHintLayout.getWidth(); + if (this.mLayout == null) { + this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); + } + else { + const layoutChanged = (this.mLayout.getWidth() != want) || (hintWidth != hintWant) || (this.mLayout.getEllipsizedWidth() != width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight()); + const widthChanged = (this.mHint == null) && (this.mEllipsize == null) && (want > this.mLayout.getWidth()) && (this.mLayout instanceof BoringLayout || (fromexisting && des >= 0 && des <= want)); + const maximumChanged = (this.mMaxMode != this.mOldMaxMode) || (this.mMaximum != this.mOldMaximum); + if (layoutChanged || maximumChanged) { + if (!maximumChanged && widthChanged) { + this.mLayout.increaseWidthTo(want); + } + else { + this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); + } + } + else { } } - if (inval) { - this.invalidate(); + if (heightMode == View.MeasureSpec.EXACTLY) { + height = heightSize; + this.mDesiredHeightAtMeasure = -1; + } + else { + let desired = this.getDesiredHeight(); + height = desired; + this.mDesiredHeightAtMeasure = desired; + if (heightMode == View.MeasureSpec.AT_MOST) { + height = Math.min(desired, heightSize); + } + } + let unpaddedHeight = height - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom(); + if (this.mMaxMode == TextView.LINES && this.mLayout.getLineCount() > this.mMaximum) { + unpaddedHeight = Math.min(unpaddedHeight, this.mLayout.getLineTop(this.mMaximum)); + } + if (this.mMovement != null || this.mLayout.getWidth() > unpaddedWidth || this.mLayout.getHeight() > unpaddedHeight) { + this.registerForPreDraw(); } + else { + this.scrollTo(0, 0); + } + this.setMeasuredDimension(width, height); } - drawableStateChanged() { - super.drawableStateChanged(); - if (this.mTextColor != null && this.mTextColor.isStateful() || (this.mHintTextColor != null && this.mHintTextColor.isStateful()) || (this.mLinkTextColor != null && this.mLinkTextColor.isStateful())) { - this.updateTextColors(); + getDesiredHeight(layout, cap = true) { + if (arguments.length === 0) { + return Math.max(this.getDesiredHeight(this.mLayout, true), this.getDesiredHeight(this.mHintLayout, this.mEllipsize != null)); + } + if (layout == null) { + return 0; } + let linecount = layout.getLineCount(); + let pad = this.getCompoundPaddingTop() + this.getCompoundPaddingBottom(); + let desired = layout.getLineTop(linecount); const dr = this.mDrawables; if (dr != null) { - let state = this.getDrawableState(); - if (dr.mDrawableTop != null && dr.mDrawableTop.isStateful()) { - dr.mDrawableTop.setState(state); - } - if (dr.mDrawableBottom != null && dr.mDrawableBottom.isStateful()) { - dr.mDrawableBottom.setState(state); + desired = Math.max(desired, dr.mDrawableHeightLeft); + desired = Math.max(desired, dr.mDrawableHeightRight); + } + desired += pad; + if (this.mMaxMode == TextView.LINES) { + if (cap) { + if (linecount > this.mMaximum) { + desired = layout.getLineTop(this.mMaximum); + if (dr != null) { + desired = Math.max(desired, dr.mDrawableHeightLeft); + desired = Math.max(desired, dr.mDrawableHeightRight); + } + desired += pad; + linecount = this.mMaximum; + } } - if (dr.mDrawableLeft != null && dr.mDrawableLeft.isStateful()) { - dr.mDrawableLeft.setState(state); + } + else { + desired = Math.min(desired, this.mMaximum); + } + if (this.mMinMode == TextView.LINES) { + if (linecount < this.mMinimum) { + desired += this.getLineHeight() * (this.mMinimum - linecount); } - if (dr.mDrawableRight != null && dr.mDrawableRight.isStateful()) { - dr.mDrawableRight.setState(state); + } + else { + desired = Math.max(desired, this.mMinimum); + } + desired = Math.max(desired, this.getSuggestedMinimumHeight()); + return desired; + } + checkForResize() { + let sizeChanged = false; + if (this.mLayout != null) { + if (this.mLayoutParams.width == LayoutParams.WRAP_CONTENT) { + sizeChanged = true; + this.invalidate(); } - if (dr.mDrawableStart != null && dr.mDrawableStart.isStateful()) { - dr.mDrawableStart.setState(state); + if (this.mLayoutParams.height == LayoutParams.WRAP_CONTENT) { + let desiredHeight = this.getDesiredHeight(); + if (desiredHeight != this.getHeight()) { + sizeChanged = true; + } } - if (dr.mDrawableEnd != null && dr.mDrawableEnd.isStateful()) { - dr.mDrawableEnd.setState(state); + else if (this.mLayoutParams.height == LayoutParams.MATCH_PARENT) { + if (this.mDesiredHeightAtMeasure >= 0) { + let desiredHeight = this.getDesiredHeight(); + if (desiredHeight != this.mDesiredHeightAtMeasure) { + sizeChanged = true; + } + } } } + if (sizeChanged) { + this.requestLayout(); + } } - removeMisspelledSpans(spannable) { - } - setFreezesText(freezesText) { - this.mFreezesText = freezesText; + checkForRelayout() { + if ((this.mLayoutParams.width != LayoutParams.WRAP_CONTENT || (this.mMaxWidthMode == this.mMinWidthMode && this.mMaxWidthValue == this.mMinWidthValue)) && (this.mHint == null || this.mHintLayout != null) && (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() > 0)) { + let oldht = this.mLayout.getHeight(); + let want = this.mLayout.getWidth(); + let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth(); + this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); + if (this.mEllipsize != TextUtils.TruncateAt.MARQUEE) { + if (this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) { + this.invalidate(); + return; + } + if (this.mLayout.getHeight() == oldht && (this.mHintLayout == null || this.mHintLayout.getHeight() == oldht)) { + this.invalidate(); + return; + } + } + this.requestLayout(); + this.invalidate(); + } + else { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); + } } - getFreezesText() { - return this.mFreezesText; + onLayout(changed, left, top, right, bottom) { + super.onLayout(changed, left, top, right, bottom); + if (this.mDeferScroll >= 0) { + let curs = this.mDeferScroll; + this.mDeferScroll = -1; + this.bringPointIntoView(Math.min(curs, this.mText.length)); + } } - setSpannableFactory(factory) { - this.mSpannableFactory = factory; - this.setText(this.mText); + isShowingHint() { + return TextUtils.isEmpty(this.mText) && !TextUtils.isEmpty(this.mHint); } - setText(text, type = this.mBufferType, notifyBefore = true, oldlen = 0) { - if (text == null) { - text = ""; + bringTextIntoView() { + let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout; + let line = 0; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { + line = layout.getLineCount() - 1; } - if (!this.isSuggestionsEnabled()) { - text = this.removeSuggestionSpans(text); + let a = layout.getParagraphAlignment(line); + let dir = layout.getParagraphDirection(line); + let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); + let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom(); + let ht = layout.getHeight(); + let scrollx, scrolly; + if (a == Layout.Alignment.ALIGN_NORMAL) { + a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_LEFT : Layout.Alignment.ALIGN_RIGHT; } - if (Spanned.isImplements(text) && text.getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) { - this.setHorizontalFadingEdgeEnabled(true); - this.mMarqueeFadeMode = TextView.MARQUEE_FADE_NORMAL; - this.setEllipsize(TextUtils.TruncateAt.MARQUEE); + else if (a == Layout.Alignment.ALIGN_OPPOSITE) { + a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_RIGHT : Layout.Alignment.ALIGN_LEFT; } - if (notifyBefore) { - if (this.mText != null) { - oldlen = this.mText.length; - this.sendBeforeTextChanged(this.mText, 0, oldlen, text.length); + if (a == Layout.Alignment.ALIGN_CENTER) { + let left = Math.floor(Math.floor(layout.getLineLeft(line))); + let right = Math.floor(Math.ceil(layout.getLineRight(line))); + if (right - left < hspace) { + scrollx = (right + left) / 2 - hspace / 2; } else { - this.sendBeforeTextChanged("", 0, 0, text.length); + if (dir < 0) { + scrollx = right - hspace; + } + else { + scrollx = left; + } } } - let needEditableForNotification = false; - if (this.mListeners != null && this.mListeners.size() != 0) { - needEditableForNotification = true; + else if (a == Layout.Alignment.ALIGN_RIGHT) { + let right = Math.floor(Math.ceil(layout.getLineRight(line))); + scrollx = right - hspace; } - if (type == TextView.BufferType.SPANNABLE || this.mMovement != null) { - text = this.mSpannableFactory.newSpannable(text); + else { + scrollx = Math.floor(Math.floor(layout.getLineLeft(line))); } - this.mBufferType = type; - this.mText = text; - if (this.mTransformation == null) { - this.mTransformed = text; + if (ht < vspace) { + scrolly = 0; } else { - this.mTransformed = this.mTransformation.getTransformation(text, this); + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { + scrolly = ht - vspace; + } + else { + scrolly = 0; + } } - const textLength = text.length; - if (this.mLayout != null) { - this.checkForRelayout(); + if (scrollx != this.mScrollX || scrolly != this.mScrollY) { + this.scrollTo(scrollx, scrolly); + return true; + } + else { + return false; } - this.sendOnTextChanged(text, 0, oldlen, textLength); - this.onTextChanged(text, 0, oldlen, textLength); } - setHint(hint) { - this.mHint = hint; - if (this.mLayout != null) { - this.checkForRelayout(); + bringPointIntoView(offset) { + if (this.isLayoutRequested()) { + this.mDeferScroll = offset; + return false; + } + let changed = false; + let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout; + if (layout == null) + return changed; + let line = layout.getLineForOffset(offset); + let grav; + switch (layout.getParagraphAlignment(line)) { + case Layout.Alignment.ALIGN_LEFT: + grav = 1; + break; + case Layout.Alignment.ALIGN_RIGHT: + grav = -1; + break; + case Layout.Alignment.ALIGN_NORMAL: + grav = layout.getParagraphDirection(line); + break; + case Layout.Alignment.ALIGN_OPPOSITE: + grav = -layout.getParagraphDirection(line); + break; + case Layout.Alignment.ALIGN_CENTER: + default: + grav = 0; + break; + } + const clamped = grav > 0; + const x = Math.floor(layout.getPrimaryHorizontal(offset, clamped)); + const top = layout.getLineTop(line); + const bottom = layout.getLineTop(line + 1); + let left = Math.floor(Math.floor(layout.getLineLeft(line))); + let right = Math.floor(Math.ceil(layout.getLineRight(line))); + let ht = layout.getHeight(); + let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); + let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom(); + if (!this.mHorizontallyScrolling && right - left > hspace && right > x) { + right = Math.max(x, left + hspace); + } + let hslack = (bottom - top) / 2; + let vslack = hslack; + if (vslack > vspace / 4) + vslack = vspace / 4; + if (hslack > hspace / 4) + hslack = hspace / 4; + let hs = this.mScrollX; + let vs = this.mScrollY; + if (top - vs < vslack) + vs = top - vslack; + if (bottom - vs > vspace - vslack) + vs = bottom - (vspace - vslack); + if (ht - vs < vspace) + vs = ht - vspace; + if (0 - vs > 0) + vs = 0; + if (grav != 0) { + if (x - hs < hslack) { + hs = x - hslack; + } + if (x - hs > hspace - hslack) { + hs = x - (hspace - hslack); + } + } + if (grav < 0) { + if (left - hs > 0) + hs = left; + if (right - hs < hspace) + hs = right - hspace; + } + else if (grav > 0) { + if (right - hs < hspace) + hs = right - hspace; + if (left - hs > 0) + hs = left; + } + else { + if (right - left <= hspace) { + hs = left - (hspace - (right - left)) / 2; + } + else if (x > right - hslack) { + hs = right - hspace; + } + else if (x < left + hslack) { + hs = left; + } + else if (left > hs) { + hs = left; + } + else if (right < hs + hspace) { + hs = right - hspace; + } + else { + if (x - hs < hslack) { + hs = x - hslack; + } + if (x - hs > hspace - hslack) { + hs = x - (hspace - hslack); + } + } + } + if (hs != this.mScrollX || vs != this.mScrollY) { + if (this.mScroller == null) { + this.scrollTo(hs, vs); + } + else { + let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll; + let dx = hs - this.mScrollX; + let dy = vs - this.mScrollY; + if (duration > TextView.ANIMATED_SCROLL_GAP) { + this.mScroller.startScroll(this.mScrollX, this.mScrollY, dx, dy); + this.awakenScrollBars(this.mScroller.getDuration()); + this.invalidate(); + } + else { + if (!this.mScroller.isFinished()) { + this.mScroller.abortAnimation(); + } + this.scrollBy(dx, dy); + } + this.mLastScroll = AnimationUtils.currentAnimationTimeMillis(); + } + changed = true; } - if (this.mText.length == 0) { - this.invalidate(); + if (this.isFocused()) { + if (this.mTempRect == null) + this.mTempRect = new Rect(); + this.mTempRect.set(x - 2, top, x + 2, bottom); + this.getInterestingRect(this.mTempRect, line); + this.mTempRect.offset(this.mScrollX, this.mScrollY); } + return changed; } - getHint() { - return this.mHint; - } - isSingleLine() { - return this.mSingleLine; - } - static isMultilineInputType(type) { - return true; - } - removeSuggestionSpans(text) { - return text; - } - hasPasswordTransformationMethod() { - return false; - } - static isPasswordInputType(inputType) { + moveCursorToVisibleOffset() { return false; } - static isVisiblePasswordInputType(inputType) { - return true; + computeScroll() { + if (this.mScroller != null) { + if (this.mScroller.computeScrollOffset()) { + this.mScrollX = this.mScroller.getCurrX(); + this.mScrollY = this.mScroller.getCurrY(); + this.invalidateParentCaches(); + this.postInvalidate(); + } + } } - setRawInputType(type) { + getInterestingRect(r, line) { + this.convertFromViewportToContentCoordinates(r); + if (line == 0) + r.top -= this.getExtendedPaddingTop(); + if (line == this.mLayout.getLineCount() - 1) + r.bottom += this.getExtendedPaddingBottom(); } - setInputType(type, direct = false) { + convertFromViewportToContentCoordinates(r) { + const horizontalOffset = this.viewportToContentHorizontalOffset(); + r.left += horizontalOffset; + r.right += horizontalOffset; + const verticalOffset = this.viewportToContentVerticalOffset(); + r.top += verticalOffset; + r.bottom += verticalOffset; } - getInputType() { - return 0; + viewportToContentHorizontalOffset() { + return this.getCompoundPaddingLeft() - this.mScrollX; } - setImeOptions(imeOptions) { + viewportToContentVerticalOffset() { + let offset = this.getExtendedPaddingTop() - this.mScrollY; + if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { + offset += this.getVerticalOffset(false); + } + return offset; } - getImeOptions() { + getSelectionStart() { return -1; } - setImeActionLabel(label, actionId) { - this.createEditorIfNeeded(); - } - getImeActionLabel() { - return ''; - } - getImeActionId() { - return 0; - } - setOnEditorActionListener(l) { - this.createEditorIfNeeded(); + getSelectionEnd() { + return -1; } - setFrame(l, t, r, b) { - let result = super.setFrame(l, t, r, b); - this.restartMarqueeIfNeeded(); - return result; + hasSelection() { + const selectionStart = this.getSelectionStart(); + const selectionEnd = this.getSelectionEnd(); + return selectionStart >= 0 && selectionStart != selectionEnd; } - restartMarqueeIfNeeded() { - if (this.mRestartMarquee && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { - this.mRestartMarquee = false; - this.startMarquee(); + setAllCaps(allCaps) { + if (allCaps) { + this.setTransformationMethod(new AllCapsTransformationMethod()); + } + else { + this.setTransformationMethod(null); } } - setFilters(...args) { - } - getFilters() { - return this.mFilters; - } - getBoxHeight(l) { - let padding = (l == this.mHintLayout) ? this.getCompoundPaddingTop() + this.getCompoundPaddingBottom() : this.getExtendedPaddingTop() + this.getExtendedPaddingBottom(); - return this.getMeasuredHeight() - padding; + setSingleLine(singleLine = true) { + if (this.mSingleLine == singleLine) + return; + this.setInputTypeSingleLine(singleLine); + this.applySingleLine(singleLine, true, true); } - getVerticalOffset(forceNormal) { - let voffset = 0; - const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - let l = this.mLayout; - if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) { - l = this.mHintLayout; - } - if (gravity != Gravity.TOP) { - let boxht = this.getBoxHeight(l); - let textht = l.getHeight(); - if (textht < boxht) { - if (gravity == Gravity.BOTTOM) - voffset = boxht - textht; - else - voffset = (boxht - textht) >> 1; - } - } - return voffset; + setInputTypeSingleLine(singleLine) { } - getBottomVerticalOffset(forceNormal) { - let voffset = 0; - const gravity = this.mGravity & Gravity.VERTICAL_GRAVITY_MASK; - let l = this.mLayout; - if (!forceNormal && this.mText.length == 0 && this.mHintLayout != null) { - l = this.mHintLayout; - } - if (gravity != Gravity.BOTTOM) { - let boxht = this.getBoxHeight(l); - let textht = l.getHeight(); - if (textht < boxht) { - if (gravity == Gravity.TOP) - voffset = boxht - textht; - else - voffset = (boxht - textht) >> 1; + applySingleLine(singleLine, applyTransformation, changeMaxLines) { + this.mSingleLine = singleLine; + if (singleLine) { + this.setLines(1); + this.setHorizontallyScrolling(true); + if (applyTransformation) { + this.setTransformationMethod(SingleLineTransformationMethod.getInstance()); } } - return voffset; - } - invalidateRegion(start, end, invalidateCursor) { - if (this.mLayout == null) { - this.invalidate(); - } else { - let lineStart = this.mLayout.getLineForOffset(start); - let top = this.mLayout.getLineTop(lineStart); - if (lineStart > 0) { - top -= this.mLayout.getLineDescent(lineStart - 1); - } - let lineEnd; - if (start == end) - lineEnd = lineStart; - else - lineEnd = this.mLayout.getLineForOffset(end); - let bottom = this.mLayout.getLineBottom(lineEnd); - const compoundPaddingLeft = this.getCompoundPaddingLeft(); - const verticalPadding = this.getExtendedPaddingTop() + this.getVerticalOffset(true); - let left, right; - if (lineStart == lineEnd && !invalidateCursor) { - left = Math.floor(this.mLayout.getPrimaryHorizontal(start)); - right = Math.floor((this.mLayout.getPrimaryHorizontal(end) + 1.0)); - left += compoundPaddingLeft; - right += compoundPaddingLeft; + if (changeMaxLines) { + this.setMaxLines(Integer.MAX_VALUE); } - else { - left = compoundPaddingLeft; - right = this.getWidth() - this.getCompoundPaddingRight(); + this.setHorizontallyScrolling(false); + if (applyTransformation) { + this.setTransformationMethod(null); } - this.invalidate(this.mScrollX + left, verticalPadding + top, this.mScrollX + right, verticalPadding + bottom); - } - } - registerForPreDraw() { - if (!this.mPreDrawRegistered) { - this.getViewTreeObserver().addOnPreDrawListener(this); - this.mPreDrawRegistered = true; } } - onPreDraw() { - if (this.mLayout == null) { - this.assumeLayout(); - } - if (this.mMovement != null) { - let curs = this.getSelectionEnd(); - if (curs < 0 && (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { - curs = this.mText.length; - } - if (curs >= 0) { - this.bringPointIntoView(curs); + setEllipsize(where) { + if (this.mEllipsize != where) { + this.mEllipsize = where; + if (this.mLayout != null) { + this.nullLayouts(); + this.requestLayout(); + this.invalidate(); } } - else { - this.bringTextIntoView(); - } - this.getViewTreeObserver().removeOnPreDrawListener(this); - this.mPreDrawRegistered = false; - return true; } - onAttachedToWindow() { - super.onAttachedToWindow(); - this.mTemporaryDetach = false; + setMarqueeRepeatLimit(marqueeLimit) { + this.mMarqueeRepeatLimit = marqueeLimit; } - onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (this.mPreDrawRegistered) { - this.getViewTreeObserver().removeOnPreDrawListener(this); - this.mPreDrawRegistered = false; - } - this.resetResolvedDrawables(); + getMarqueeRepeatLimit() { + return this.mMarqueeRepeatLimit; } - isPaddingOffsetRequired() { - return this.mShadowRadius != 0 || this.mDrawables != null; + getEllipsize() { + return this.mEllipsize; } - getLeftPaddingOffset() { - return this.getCompoundPaddingLeft() - this.mPaddingLeft + Math.floor(Math.min(0, this.mShadowDx - this.mShadowRadius)); + setSelectAllOnFocus(selectAllOnFocus) { + this.createEditorIfNeeded(); + this.mEditor.mSelectAllOnFocus = selectAllOnFocus; + if (selectAllOnFocus && !Spannable.isImpl(this.mText)) { + this.setText(this.mText, TextView.BufferType.SPANNABLE); + } } - getTopPaddingOffset() { - return Math.floor(Math.min(0, this.mShadowDy - this.mShadowRadius)); + setCursorVisible(visible) { } - getBottomPaddingOffset() { - return Math.floor(Math.max(0, this.mShadowDy + this.mShadowRadius)); + isCursorVisible() { + return null; } - getRightPaddingOffset() { - return -(this.getCompoundPaddingRight() - this.mPaddingRight) + Math.floor(Math.max(0, this.mShadowDx + this.mShadowRadius)); + canMarquee() { + let width = (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight()); + return width > 0 && (this.mLayout.getLineWidth(0) > width || (this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL && this.mSavedMarqueeModeLayout != null && this.mSavedMarqueeModeLayout.getLineWidth(0) > width)); } - verifyDrawable(who) { - const verified = super.verifyDrawable(who); - if (!verified && this.mDrawables != null) { - return who == this.mDrawables.mDrawableLeft || who == this.mDrawables.mDrawableTop || who == this.mDrawables.mDrawableRight || who == this.mDrawables.mDrawableBottom || who == this.mDrawables.mDrawableStart || who == this.mDrawables.mDrawableEnd; + startMarquee() { + if (this.getKeyListener() != null) + return; + if (this.compressText(this.getWidth() - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) { + return; } - return verified; - } - jumpDrawablesToCurrentState() { - super.jumpDrawablesToCurrentState(); - if (this.mDrawables != null) { - if (this.mDrawables.mDrawableLeft != null) { - this.mDrawables.mDrawableLeft.jumpToCurrentState(); - } - if (this.mDrawables.mDrawableTop != null) { - this.mDrawables.mDrawableTop.jumpToCurrentState(); - } - if (this.mDrawables.mDrawableRight != null) { - this.mDrawables.mDrawableRight.jumpToCurrentState(); - } - if (this.mDrawables.mDrawableBottom != null) { - this.mDrawables.mDrawableBottom.jumpToCurrentState(); - } - if (this.mDrawables.mDrawableStart != null) { - this.mDrawables.mDrawableStart.jumpToCurrentState(); - } - if (this.mDrawables.mDrawableEnd != null) { - this.mDrawables.mDrawableEnd.jumpToCurrentState(); + if ((this.mMarquee == null || this.mMarquee.isStopped()) && (this.isFocused() || this.isSelected()) && this.getLineCount() == 1 && this.canMarquee()) { + if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { + this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_FADE; + const tmp = this.mLayout; + this.mLayout = this.mSavedMarqueeModeLayout; + this.mSavedMarqueeModeLayout = tmp; + this.setHorizontalFadingEdgeEnabled(true); + this.requestLayout(); + this.invalidate(); } + if (this.mMarquee == null) + this.mMarquee = new TextView.Marquee(this); + this.mMarquee.start(this.mMarqueeRepeatLimit); } } - drawableSizeChange(d) { - const drawables = this.mDrawables; - const isCompoundDrawable = drawables != null && (d == drawables.mDrawableLeft || d == drawables.mDrawableTop - || d == drawables.mDrawableRight || d == drawables.mDrawableBottom || d == drawables.mDrawableStart || d == drawables.mDrawableEnd); - if (isCompoundDrawable) { - d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); - this.setCompoundDrawables(drawables.mDrawableLeft, drawables.mDrawableTop, drawables.mDrawableRight, drawables.mDrawableBottom); + stopMarquee() { + if (this.mMarquee != null && !this.mMarquee.isStopped()) { + this.mMarquee.stop(); } - else { - super.drawableSizeChange(d); + if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_FADE) { + this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS; + const tmp = this.mSavedMarqueeModeLayout; + this.mSavedMarqueeModeLayout = this.mLayout; + this.mLayout = tmp; + this.setHorizontalFadingEdgeEnabled(false); + this.requestLayout(); + this.invalidate(); } } - invalidateDrawable(drawable) { - if (this.verifyDrawable(drawable)) { - const dirty = drawable.getBounds(); - let scrollX = this.mScrollX; - let scrollY = this.mScrollY; - const drawables = this.mDrawables; - if (drawables != null) { - if (drawable == drawables.mDrawableLeft) { - const compoundPaddingTop = this.getCompoundPaddingTop(); - const compoundPaddingBottom = this.getCompoundPaddingBottom(); - const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; - scrollX += this.mPaddingLeft; - scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2; - } - else if (drawable == drawables.mDrawableRight) { - const compoundPaddingTop = this.getCompoundPaddingTop(); - const compoundPaddingBottom = this.getCompoundPaddingBottom(); - const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; - scrollX += (this.mRight - this.mLeft - this.mPaddingRight - drawables.mDrawableSizeRight); - scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2; - } - else if (drawable == drawables.mDrawableTop) { - const compoundPaddingLeft = this.getCompoundPaddingLeft(); - const compoundPaddingRight = this.getCompoundPaddingRight(); - const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft; - scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2; - scrollY += this.mPaddingTop; - } - else if (drawable == drawables.mDrawableBottom) { - const compoundPaddingLeft = this.getCompoundPaddingLeft(); - const compoundPaddingRight = this.getCompoundPaddingRight(); - const hspace = this.mRight - this.mLeft - compoundPaddingRight - compoundPaddingLeft; - scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2; - scrollY += (this.mBottom - this.mTop - this.mPaddingBottom - drawables.mDrawableSizeBottom); - } + startStopMarquee(start) { + if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { + if (start) { + this.startMarquee(); + } + else { + this.stopMarquee(); } - this.invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY); } } - isTextSelectable() { - return false; + onTextChanged(text, start, lengthBefore, lengthAfter) { } - setTextIsSelectable(selectable) { + onSelectionChanged(selStart, selEnd) { } - onCreateDrawableState(extraSpace) { - let drawableState; - if (this.mSingleLine) { - drawableState = super.onCreateDrawableState(extraSpace); - } - else { - drawableState = super.onCreateDrawableState(extraSpace + 1); - TextView.mergeDrawableStates(drawableState, TextView.MULTILINE_STATE_SET); - } - if (this.isTextSelectable()) { - const length = drawableState.length; - for (let i = 0; i < length; i++) { - if (drawableState[i] == View.VIEW_STATE_PRESSED) { - const nonPressedState = androidui.util.ArrayCreator.newNumberArray(length - 1); - System.arraycopy(drawableState, 0, nonPressedState, 0, i); - System.arraycopy(drawableState, i + 1, nonPressedState, i, length - i - 1); - return nonPressedState; - } - } + addTextChangedListener(watcher) { + if (this.mListeners == null) { + this.mListeners = new ArrayList(); } - return drawableState; + this.mListeners.add(watcher); } - getUpdatedHighlightPath() { - let highlight = null; - let highlightPaint = this.mHighlightPaint; - const selStart = this.getSelectionStart(); - const selEnd = this.getSelectionEnd(); - if (this.mMovement != null && (this.isFocused() || this.isPressed()) && selStart >= 0) { - if (selStart == selEnd) { - } - else { - if (this.mHighlightPathBogus) { - if (this.mHighlightPath == null) - this.mHighlightPath = new Path(); - this.mHighlightPath.reset(); - this.mLayout.getSelectionPath(selStart, selEnd, this.mHighlightPath); - this.mHighlightPathBogus = false; - } - highlightPaint.setColor(this.mHighlightColor); - highlightPaint.setStyle(Paint.Style.FILL); - highlight = this.mHighlightPath; + removeTextChangedListener(watcher) { + if (this.mListeners != null) { + let i = this.mListeners.indexOf(watcher); + if (i >= 0) { + this.mListeners.remove(i); } } - return highlight; - } - getHorizontalOffsetForDrawables() { - return 0; } - onDraw(canvas) { - this.restartMarqueeIfNeeded(); - super.onDraw(canvas); - const compoundPaddingLeft = this.getCompoundPaddingLeft(); - const compoundPaddingTop = this.getCompoundPaddingTop(); - const compoundPaddingRight = this.getCompoundPaddingRight(); - const compoundPaddingBottom = this.getCompoundPaddingBottom(); - const scrollX = this.mScrollX; - const scrollY = this.mScrollY; - const right = this.mRight; - const left = this.mLeft; - const bottom = this.mBottom; - const top = this.mTop; - const isLayoutRtl = this.isLayoutRtl(); - const offset = this.getHorizontalOffsetForDrawables(); - const leftOffset = isLayoutRtl ? 0 : offset; - const rightOffset = isLayoutRtl ? offset : 0; - const dr = this.mDrawables; - if (dr != null) { - let vspace = bottom - top - compoundPaddingBottom - compoundPaddingTop; - let hspace = right - left - compoundPaddingRight - compoundPaddingLeft; - if (dr.mDrawableLeft != null) { - canvas.save(); - canvas.translate(scrollX + this.mPaddingLeft + leftOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightLeft) / 2); - dr.mDrawableLeft.draw(canvas); - canvas.restore(); - } - if (dr.mDrawableRight != null) { - canvas.save(); - canvas.translate(scrollX + right - left - this.mPaddingRight - dr.mDrawableSizeRight - rightOffset, scrollY + compoundPaddingTop + (vspace - dr.mDrawableHeightRight) / 2); - dr.mDrawableRight.draw(canvas); - canvas.restore(); - } - if (dr.mDrawableTop != null) { - canvas.save(); - canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthTop) / 2, scrollY + this.mPaddingTop); - dr.mDrawableTop.draw(canvas); - canvas.restore(); - } - if (dr.mDrawableBottom != null) { - canvas.save(); - canvas.translate(scrollX + compoundPaddingLeft + (hspace - dr.mDrawableWidthBottom) / 2, scrollY + bottom - top - this.mPaddingBottom - dr.mDrawableSizeBottom); - dr.mDrawableBottom.draw(canvas); - canvas.restore(); - } - } - let color = this.mCurTextColor; - if (this.mLayout == null) { - this.assumeLayout(); - } - let layout = this.mLayout; - if (this.mHint != null && this.mText.length == 0) { - if (this.mHintTextColor != null) { - color = this.mCurHintTextColor; - } - layout = this.mHintLayout; - } - this.mTextPaint.setColor(color); - this.mTextPaint.drawableState = this.getDrawableState(); - if (this.mSkipDrawText) - return; - canvas.save(); - let extendedPaddingTop = this.getExtendedPaddingTop(); - let extendedPaddingBottom = this.getExtendedPaddingBottom(); - const vspace = this.mBottom - this.mTop - compoundPaddingBottom - compoundPaddingTop; - const maxScrollY = this.mLayout.getHeight() - vspace; - let clipLeft = compoundPaddingLeft + scrollX; - let clipTop = (scrollY == 0) ? 0 : extendedPaddingTop + scrollY; - let clipRight = right - left - compoundPaddingRight + scrollX; - let clipBottom = bottom - top + scrollY - ((scrollY == maxScrollY) ? 0 : extendedPaddingBottom); - if (this.mShadowRadius != 0) { - clipLeft += Math.min(0, this.mShadowDx - this.mShadowRadius); - clipRight += Math.max(0, this.mShadowDx + this.mShadowRadius); - clipTop += Math.min(0, this.mShadowDy - this.mShadowRadius); - clipBottom += Math.max(0, this.mShadowDy + this.mShadowRadius); - } - canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom); - let voffsetText = 0; - let voffsetCursor = 0; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - voffsetText = this.getVerticalOffset(false); - voffsetCursor = this.getVerticalOffset(true); - } - canvas.translate(compoundPaddingLeft, extendedPaddingTop + voffsetText); - const absoluteGravity = this.mGravity; - if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { - if (!this.mSingleLine && this.getLineCount() == 1 && this.canMarquee() && (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) != Gravity.LEFT) { - const width = this.mRight - this.mLeft; - const padding = this.getCompoundPaddingLeft() + this.getCompoundPaddingRight(); - const dx = this.mLayout.getLineRight(0) - (width - padding); - canvas.translate(isLayoutRtl ? -dx : +dx, 0.0); + sendBeforeTextChanged(text, start, before, after) { + if (this.mListeners != null) { + const list = this.mListeners; + const count = list.size(); + for (let i = 0; i < count; i++) { + list.get(i).beforeTextChanged(text, start, before, after); } - if (this.mMarquee != null && this.mMarquee.isRunning()) { - const dx = -this.mMarquee.getScroll(); - canvas.translate(isLayoutRtl ? -dx : +dx, 0.0); + } + } + removeAdjacentSuggestionSpans(pos) { + } + sendOnTextChanged(text, start, before, after) { + if (this.mListeners != null) { + const list = this.mListeners; + const count = list.size(); + for (let i = 0; i < count; i++) { + list.get(i).onTextChanged(text, start, before, after); } } - const cursorOffsetVertical = voffsetCursor - voffsetText; - let highlight = this.getUpdatedHighlightPath(); - layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical); - if (this.mMarquee != null && this.mMarquee.shouldDrawGhost()) { - const dx = Math.floor(this.mMarquee.getGhostOffset()); - canvas.translate(isLayoutRtl ? -dx : dx, 0.0); - layout.draw(canvas, highlight, this.mHighlightPaint, cursorOffsetVertical); + } + sendAfterTextChanged(text) { + if (this.mListeners != null) { + const list = this.mListeners; + const count = list.size(); + for (let i = 0; i < count; i++) { + list.get(i).afterTextChanged(text + ''); + } } - canvas.restore(); } - getFocusedRect(r) { - if (this.mLayout == null) { - super.getFocusedRect(r); - return; + updateAfterEdit() { + this.invalidate(); + let curs = this.getSelectionStart(); + if (curs >= 0 || (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { + this.registerForPreDraw(); } - let selEnd = this.getSelectionEnd(); - if (selEnd < 0) { - super.getFocusedRect(r); + this.checkForResize(); + if (curs >= 0) { + this.mHighlightPathBogus = true; + this.bringPointIntoView(curs); + } + } + handleTextChanged(buffer, start, before, after) { + this.updateAfterEdit(); + this.sendOnTextChanged(buffer, start, before, after); + this.onTextChanged(buffer, start, before, after); + } + spanChange(buf, what, oldStart, newStart, oldEnd, newEnd) { + let selChanged = false; + let newSelStart = -1, newSelEnd = -1; + this.invalidate(); + this.mHighlightPathBogus = true; + this.checkForResize(); + } + dispatchFinishTemporaryDetach() { + this.mDispatchTemporaryDetach = true; + super.dispatchFinishTemporaryDetach(); + this.mDispatchTemporaryDetach = false; + } + onStartTemporaryDetach() { + super.onStartTemporaryDetach(); + if (!this.mDispatchTemporaryDetach) + this.mTemporaryDetach = true; + } + onFinishTemporaryDetach() { + super.onFinishTemporaryDetach(); + if (!this.mDispatchTemporaryDetach) + this.mTemporaryDetach = false; + } + onFocusChanged(focused, direction, previouslyFocusedRect) { + if (this.mTemporaryDetach) { + super.onFocusChanged(focused, direction, previouslyFocusedRect); return; } + this.startStopMarquee(focused); + if (this.mTransformation != null) { + this.mTransformation.onFocusChanged(this, this.mText, focused, direction, previouslyFocusedRect); + } + super.onFocusChanged(focused, direction, previouslyFocusedRect); } - getLineCount() { - return this.mLayout != null ? this.mLayout.getLineCount() : 0; + onWindowFocusChanged(hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + this.startStopMarquee(hasWindowFocus); } - getLineBounds(line, bounds) { - if (this.mLayout == null) { - if (bounds != null) { - bounds.set(0, 0, 0, 0); + onVisibilityChanged(changedView, visibility) { + super.onVisibilityChanged(changedView, visibility); + } + clearComposingText() { + } + setSelected(selected) { + let wasSelected = this.isSelected(); + super.setSelected(selected); + if (selected != wasSelected && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { + if (selected) { + this.startMarquee(); + } + else { + this.stopMarquee(); } - return 0; } - else { - let baseline = this.mLayout.getLineBounds(line, bounds); - let voffset = this.getExtendedPaddingTop(); - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - voffset += this.getVerticalOffset(true); + } + onTouchEvent(event) { + const action = event.getActionMasked(); + const superResult = super.onTouchEvent(event); + const touchIsFinished = (action == MotionEvent.ACTION_UP) + && this.isFocused(); + if ((this.mMovement != null || this.onCheckIsTextEditor()) && this.isEnabled() && Spannable.isImpl(this.mText) && this.mLayout != null) { + let handled = false; + if (this.mMovement != null) { + handled = this.mMovement.onTouchEvent(this, this.mText, event) || handled; } - if (bounds != null) { - bounds.offset(this.getCompoundPaddingLeft(), voffset); + if (handled) { + return true; + } + } + return superResult; + } + onGenericMotionEvent(event) { + if (this.mMovement != null && Spannable.isImpl(this.mText) && this.mLayout != null) { + try { + if (this.mMovement.onGenericMotionEvent(this, this.mText, event)) { + return true; + } + } + catch (e) { } - return baseline + voffset; } + return super.onGenericMotionEvent(event); } - getBaseline() { - if (this.mLayout == null) { - return super.getBaseline(); + isTextEditable() { + return false; + } + didTouchFocusSelect() { + return false; + } + cancelLongPress() { + super.cancelLongPress(); + } + setScroller(s) { + this.mScroller = s; + } + getLeftFadingEdgeStrength() { + if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { + if (this.mMarquee != null && !this.mMarquee.isStopped()) { + const marquee = this.mMarquee; + if (marquee.shouldDrawLeftFade()) { + const scroll = marquee.getScroll(); + return scroll / this.getHorizontalFadingEdgeLength(); + } + else { + return 0.0; + } + } + else if (this.getLineCount() == 1) { + const absoluteGravity = this.mGravity; + switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.LEFT: + return 0.0; + case Gravity.RIGHT: + return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength(); + case Gravity.CENTER_HORIZONTAL: + case Gravity.FILL_HORIZONTAL: + const textDirection = this.mLayout.getParagraphDirection(0); + if (textDirection == Layout.DIR_LEFT_TO_RIGHT) { + return 0.0; + } + else { + return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength(); + } + } + } } - let voffset = 0; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - voffset = this.getVerticalOffset(true); + return super.getLeftFadingEdgeStrength(); + } + getRightFadingEdgeStrength() { + if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { + if (this.mMarquee != null && !this.mMarquee.isStopped()) { + const marquee = this.mMarquee; + const maxFadeScroll = marquee.getMaxFadeScroll(); + const scroll = marquee.getScroll(); + return (maxFadeScroll - scroll) / this.getHorizontalFadingEdgeLength(); + } + else if (this.getLineCount() == 1) { + const absoluteGravity = this.mGravity; + switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { + case Gravity.LEFT: + const textWidth = (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); + const lineWidth = this.mLayout.getLineWidth(0); + return (lineWidth - textWidth) / this.getHorizontalFadingEdgeLength(); + case Gravity.RIGHT: + return 0.0; + case Gravity.CENTER_HORIZONTAL: + case Gravity.FILL_HORIZONTAL: + const textDirection = this.mLayout.getParagraphDirection(0); + if (textDirection == Layout.DIR_RIGHT_TO_LEFT) { + return 0.0; + } + else { + return (this.mLayout.getLineWidth(0) - ((this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) / this.getHorizontalFadingEdgeLength(); + } + } + } } - return this.getExtendedPaddingTop() + voffset + this.mLayout.getLineBaseline(0); + return super.getRightFadingEdgeStrength(); } - getFadeTop(offsetRequired) { - if (this.mLayout == null) - return 0; - let voffset = 0; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - voffset = this.getVerticalOffset(true); + computeHorizontalScrollRange() { + if (this.mLayout != null) { + return this.mSingleLine && (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT ? Math.floor(this.mLayout.getLineWidth(0)) : this.mLayout.getWidth(); } - if (offsetRequired) - voffset += this.getTopPaddingOffset(); - return this.getExtendedPaddingTop() + voffset; + return super.computeHorizontalScrollRange(); } - getFadeHeight(offsetRequired) { - return this.mLayout != null ? this.mLayout.getHeight() : 0; + computeVerticalScrollRange() { + if (this.mLayout != null) + return this.mLayout.getHeight(); + return super.computeVerticalScrollRange(); } - onKeyDown(keyCode, event) { - let which = this.doKeyDown(keyCode, event, null); - if (which == 0) { - return super.onKeyDown(keyCode, event); + computeVerticalScrollExtent() { + return this.getHeight() - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom(); + } + static getTextColors() { + return android.R.color.textView_textColor; + } + static getTextColor(def) { + let colors = this.getTextColors(); + if (colors == null) { + return def; + } + else { + return colors.getDefaultColor(); } - return true; } - shouldAdvanceFocusOnEnter() { - if (this.getKeyListener() == null) { - return false; + canSelectText() { + return false; + } + textCanBeSelected() { + return false; + } + getTransformedText(start, end) { + return this.removeSuggestionSpans(this.mTransformed.substring(start, end)); + } + performLongClick() { + let handled = false; + if (super.performLongClick()) { + handled = true; } - if (this.mSingleLine) { - return true; + if (handled) { + this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } + return handled; + } + isSuggestionsEnabled() { return false; } - shouldAdvanceFocusOnTab() { + setCustomSelectionActionModeCallback(actionModeCallback) { + this.createEditorIfNeeded(); + } + getCustomSelectionActionModeCallback() { + return null; + } + stopSelectionActionMode() { + } + canCut() { + return false; + } + canCopy() { return true; } - doKeyDown(keyCode, event, otherEvent) { - return 0; + canPaste() { + return false; } - resetErrorChangedFlag() { + selectAllText() { + return false; } - hideErrorIfUnchanged() { + getOffsetForPosition(x, y) { + if (this.getLayout() == null) + return -1; + const line = this.getLineAtCoordinate(y); + const offset = this.getOffsetAtCoordinate(line, x); + return offset; } - onKeyUp(keyCode, event) { - return super.onKeyUp(keyCode, event); + convertToLocalHorizontalCoordinate(x) { + x -= this.getTotalPaddingLeft(); + x = Math.max(0.0, x); + x = Math.min(this.getWidth() - this.getTotalPaddingRight() - 1, x); + x += this.getScrollX(); + return x; } - onCheckIsTextEditor() { + getLineAtCoordinate(y) { + y -= this.getTotalPaddingTop(); + y = Math.max(0.0, y); + y = Math.min(this.getHeight() - this.getTotalPaddingBottom() - 1, y); + y += this.getScrollY(); + return this.getLayout().getLineForVertical(Math.floor(y)); + } + getOffsetAtCoordinate(line, x) { + x = this.convertToLocalHorizontalCoordinate(x); + return this.getLayout().getOffsetForHorizontal(line, x); + } + isInBatchEditMode() { return false; } - nullLayouts() { - if (this.mLayout instanceof BoringLayout && this.mSavedLayout == null) { - this.mSavedLayout = this.mLayout; - } - if (this.mHintLayout instanceof BoringLayout && this.mSavedHintLayout == null) { - this.mSavedHintLayout = this.mHintLayout; - } - this.mSavedMarqueeModeLayout = this.mLayout = this.mHintLayout = null; - this.mBoring = this.mHintBoring = null; + getTextDirectionHeuristic() { + return TextDirectionHeuristics.LTR; } - assumeLayout() { - let width = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); - if (width < 1) { - width = 0; + onResolveDrawables(layoutDirection) { + if (this.mLastLayoutDirection == layoutDirection) { + return; } - let physicalWidth = width; - if (this.mHorizontallyScrolling) { - width = TextView.VERY_WIDE; + this.mLastLayoutDirection = layoutDirection; + if (this.mDrawables != null) { + this.mDrawables.resolveWithLayoutDirection(layoutDirection); } - this.makeNewLayout(width, physicalWidth, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, physicalWidth, false); } - getLayoutAlignment() { - let alignment; - switch (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { - case Gravity.LEFT: - alignment = Layout.Alignment.ALIGN_LEFT; - break; - case Gravity.RIGHT: - alignment = Layout.Alignment.ALIGN_RIGHT; - break; - case Gravity.CENTER_HORIZONTAL: - alignment = Layout.Alignment.ALIGN_CENTER; - break; - default: - alignment = Layout.Alignment.ALIGN_NORMAL; - break; - } - return alignment; + resetResolvedDrawables() { + this.mLastLayoutDirection = -1; } - makeNewLayout(wantWidth, hintWidth, boring, hintBoring, ellipsisWidth, bringIntoView) { - this.stopMarquee(); - this.mOldMaximum = this.mMaximum; - this.mOldMaxMode = this.mMaxMode; - this.mHighlightPathBogus = true; - if (wantWidth < 0) { - wantWidth = 0; - } - if (hintWidth < 0) { - hintWidth = 0; - } - let alignment = this.getLayoutAlignment(); - const testDirChange = this.mSingleLine && this.mLayout != null && (alignment == Layout.Alignment.ALIGN_NORMAL || alignment == Layout.Alignment.ALIGN_OPPOSITE); - let oldDir = 0; - if (testDirChange) - oldDir = this.mLayout.getParagraphDirection(0); - let shouldEllipsize = this.mEllipsize != null && this.getKeyListener() == null; - const switchEllipsize = this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL; - let effectiveEllipsize = this.mEllipsize; - if (this.mEllipsize == TruncateAt.MARQUEE && this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { - effectiveEllipsize = TruncateAt.END_SMALL; - } - if (this.mTextDir == null) { - this.mTextDir = this.getTextDirectionHeuristic(); - } - this.mLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, effectiveEllipsize == this.mEllipsize); - if (switchEllipsize) { - let oppositeEllipsize = effectiveEllipsize == TruncateAt.MARQUEE ? TruncateAt.END : TruncateAt.MARQUEE; - this.mSavedMarqueeModeLayout = this.makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, oppositeEllipsize, effectiveEllipsize != this.mEllipsize); - } - shouldEllipsize = this.mEllipsize != null; - this.mHintLayout = null; - if (this.mHint != null) { - if (shouldEllipsize) - hintWidth = wantWidth; - if (hintBoring == TextView.UNKNOWN_BORING) { - hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring); - if (hintBoring != null) { - this.mHintBoring = hintBoring; - } - } - if (hintBoring != null) { - if (hintBoring.width <= hintWidth && (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) { - if (this.mSavedHintLayout != null) { - this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad); - } - else { - this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad); - } - this.mSavedHintLayout = this.mHintLayout; - } - else if (shouldEllipsize && hintBoring.width <= hintWidth) { - if (this.mSavedHintLayout != null) { - this.mHintLayout = this.mSavedHintLayout.replaceOrMake(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth); - } - else { - this.mHintLayout = BoringLayout.make(this.mHint, this.mTextPaint, hintWidth, alignment, this.mSpacingMult, this.mSpacingAdd, hintBoring, this.mIncludePad, this.mEllipsize, ellipsisWidth); - } - } - else if (shouldEllipsize) { - this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); - } - else { - this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); - } - } - else if (shouldEllipsize) { - this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.mEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); - } - else { - this.mHintLayout = new StaticLayout(this.mHint, 0, this.mHint.length, this.mTextPaint, hintWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); - } - } - if (bringIntoView || (testDirChange && oldDir != this.mLayout.getParagraphDirection(0))) { - this.registerForPreDraw(); + deleteText_internal(start, end) { + } + replaceText_internal(start, end, text) { + } + setSpan_internal(span, start, end, flags) { + } + setCursorPosition_internal(start, end) { + } + createEditorIfNeeded() { + } + } + TextView.LOG_TAG = "TextView"; + TextView.DEBUG_EXTRACT = false; + TextView.SANS = 1; + TextView.SERIF = 2; + TextView.MONOSPACE = 3; + TextView.SIGNED = 2; + TextView.DECIMAL = 4; + TextView.MARQUEE_FADE_NORMAL = 0; + TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS = 1; + TextView.MARQUEE_FADE_SWITCH_SHOW_FADE = 2; + TextView.LINES = 1; + TextView.EMS = TextView.LINES; + TextView.PIXELS = 2; + TextView.TEMP_RECTF = new RectF(); + TextView.VERY_WIDE = 1024 * 1024; + TextView.ANIMATED_SCROLL_GAP = 250; + TextView.NO_FILTERS = new Array(0); + TextView.CHANGE_WATCHER_PRIORITY = 100; + TextView.MULTILINE_STATE_SET = [View.VIEW_STATE_MULTILINE]; + TextView.LAST_CUT_OR_COPY_TIME = 0; + TextView.UNKNOWN_BORING = new BoringLayout.Metrics(); + widget.TextView = TextView; + (function (TextView) { + class Drawables { + constructor(context) { + this.mCompoundRect = new Rect(); + this.mDrawableSizeTop = 0; + this.mDrawableSizeBottom = 0; + this.mDrawableSizeLeft = 0; + this.mDrawableSizeRight = 0; + this.mDrawableSizeStart = 0; + this.mDrawableSizeEnd = 0; + this.mDrawableSizeError = 0; + this.mDrawableSizeTemp = 0; + this.mDrawableWidthTop = 0; + this.mDrawableWidthBottom = 0; + this.mDrawableHeightLeft = 0; + this.mDrawableHeightRight = 0; + this.mDrawableHeightStart = 0; + this.mDrawableHeightEnd = 0; + this.mDrawableHeightError = 0; + this.mDrawableHeightTemp = 0; + this.mDrawablePadding = 0; + this.mDrawableSaved = Drawables.DRAWABLE_NONE; + this.mIsRtlCompatibilityMode = false; + this.mOverride = false; } - if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { - if (!this.compressText(ellipsisWidth)) { - const height = this.mLayoutParams.height; - if (height != LayoutParams.WRAP_CONTENT && height != LayoutParams.MATCH_PARENT) { - this.startMarquee(); - } - else { - this.mRestartMarquee = true; - } + resolveWithLayoutDirection(layoutDirection) { + this.mDrawableLeft = this.mDrawableLeftInitial; + this.mDrawableRight = this.mDrawableRightInitial; + if (this.mOverride) { + this.mDrawableLeft = this.mDrawableStart; + this.mDrawableSizeLeft = this.mDrawableSizeStart; + this.mDrawableHeightLeft = this.mDrawableHeightStart; + this.mDrawableRight = this.mDrawableEnd; + this.mDrawableSizeRight = this.mDrawableSizeEnd; + this.mDrawableHeightRight = this.mDrawableHeightEnd; } + this.applyErrorDrawableIfNeeded(layoutDirection); + this.updateDrawablesLayoutDirection(layoutDirection); } - } - makeSingleLayout(wantWidth, boring, ellipsisWidth, alignment, shouldEllipsize, effectiveEllipsize, useSaved) { - let result = null; - if (Spannable.isImpl(this.mText)) { - result = new DynamicLayout(this.mText, this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, this.getKeyListener() == null ? effectiveEllipsize : null, ellipsisWidth); + updateDrawablesLayoutDirection(layoutDirection) { } - else { - if (boring == TextView.UNKNOWN_BORING) { - boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring); - if (boring != null) { - this.mBoring = boring; - } - } - if (boring != null) { - if (boring.width <= wantWidth && (effectiveEllipsize == null || boring.width <= ellipsisWidth)) { - if (useSaved && this.mSavedLayout != null) { - result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad); - } - else { - result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad); - } - if (useSaved) { - this.mSavedLayout = result; - } - } - else if (shouldEllipsize && boring.width <= wantWidth) { - if (useSaved && this.mSavedLayout != null) { - result = this.mSavedLayout.replaceOrMake(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth); - } - else { - result = BoringLayout.make(this.mTransformed, this.mTextPaint, wantWidth, alignment, this.mSpacingMult, this.mSpacingAdd, boring, this.mIncludePad, effectiveEllipsize, ellipsisWidth); - } - } - else if (shouldEllipsize) { - result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); - } - else { - result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); - } + setErrorDrawable(dr, tv) { + if (this.mDrawableError != dr && this.mDrawableError != null) { + this.mDrawableError.setCallback(null); } - else if (shouldEllipsize) { - result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad, effectiveEllipsize, ellipsisWidth, this.mMaxMode == TextView.LINES ? this.mMaximum : Integer.MAX_VALUE); + this.mDrawableError = dr; + const compoundRect = this.mCompoundRect; + let state = tv.getDrawableState(); + if (this.mDrawableError != null) { + this.mDrawableError.setState(state); + this.mDrawableError.copyBounds(compoundRect); + this.mDrawableError.setCallback(tv); + this.mDrawableSizeError = compoundRect.width(); + this.mDrawableHeightError = compoundRect.height(); } else { - result = new StaticLayout(this.mTransformed, 0, this.mTransformed.length, this.mTextPaint, wantWidth, alignment, this.mTextDir, this.mSpacingMult, this.mSpacingAdd, this.mIncludePad); + this.mDrawableSizeError = this.mDrawableHeightError = 0; } } - return result; - } - compressText(width) { - if (this.isHardwareAccelerated()) - return false; - if (width > 0.0 && this.mLayout != null && this.getLineCount() == 1 && !this.mUserSetTextScaleX && this.mTextPaint.getTextScaleX() == 1.0) { - const textWidth = this.mLayout.getLineWidth(0); - const overflow = (textWidth + 1.0 - width) / width; - if (overflow > 0.0 && overflow <= TextView.Marquee.MARQUEE_DELTA_MAX) { - this.mTextPaint.setTextScaleX(1.0 - overflow - 0.005); - this.post((() => { - const _this = this; - class _Inner { - run() { - _this.requestLayout(); - } - } - return new _Inner(); - })()); - return true; + applyErrorDrawableIfNeeded(layoutDirection) { + switch (this.mDrawableSaved) { + case Drawables.DRAWABLE_LEFT: + this.mDrawableLeft = this.mDrawableTemp; + this.mDrawableSizeLeft = this.mDrawableSizeTemp; + this.mDrawableHeightLeft = this.mDrawableHeightTemp; + break; + case Drawables.DRAWABLE_RIGHT: + this.mDrawableRight = this.mDrawableTemp; + this.mDrawableSizeRight = this.mDrawableSizeTemp; + this.mDrawableHeightRight = this.mDrawableHeightTemp; + break; + case Drawables.DRAWABLE_NONE: + default: } + this.mDrawableSaved = Drawables.DRAWABLE_RIGHT; + this.mDrawableTemp = this.mDrawableRight; + this.mDrawableSizeTemp = this.mDrawableSizeRight; + this.mDrawableHeightTemp = this.mDrawableHeightRight; + this.mDrawableRight = this.mDrawableError; + this.mDrawableSizeRight = this.mDrawableSizeError; + this.mDrawableHeightRight = this.mDrawableHeightError; } - return false; } - static desired(layout) { - let n = layout.getLineCount(); - let text = layout.getText(); - let max = 0; - for (let i = 0; i < n - 1; i++) { - if (text.charAt(layout.getLineEnd(i) - 1) != '\n') - return -1; - } - for (let i = 0; i < n; i++) { - max = Math.max(max, layout.getLineWidth(i)); + Drawables.DRAWABLE_NONE = -1; + Drawables.DRAWABLE_RIGHT = 0; + Drawables.DRAWABLE_LEFT = 1; + TextView.Drawables = Drawables; + class Marquee extends Handler { + constructor(v) { + super(); + this.mStatus = Marquee.MARQUEE_STOPPED; + this.mScrollUnit = 0; + this.mMaxScroll = 0; + this.mMaxFadeScroll = 0; + this.mGhostStart = 0; + this.mGhostOffset = 0; + this.mFadeStop = 0; + this.mRepeatLimit = 0; + this.mScroll = 0; + const density = v.getResources().getDisplayMetrics().density; + this.mScrollUnit = (Marquee.MARQUEE_PIXELS_PER_SECOND * density) / Marquee.MARQUEE_RESOLUTION; + this.mView = new WeakReference(v); } - return Math.floor(Math.ceil(max)); - } - setIncludeFontPadding(includepad) { - if (this.mIncludePad != includepad) { - this.mIncludePad = includepad; - if (this.mLayout != null) { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); + handleMessage(msg) { + switch (msg.what) { + case Marquee.MESSAGE_START: + this.mStatus = Marquee.MARQUEE_RUNNING; + this.tick(); + break; + case Marquee.MESSAGE_TICK: + this.tick(); + break; + case Marquee.MESSAGE_RESTART: + if (this.mStatus == Marquee.MARQUEE_RUNNING) { + if (this.mRepeatLimit >= 0) { + this.mRepeatLimit--; + } + this.start(this.mRepeatLimit); + } + break; } } - } - getIncludeFontPadding() { - return this.mIncludePad; - } - onMeasure(widthMeasureSpec, heightMeasureSpec) { - let widthMode = TextView.MeasureSpec.getMode(widthMeasureSpec); - let heightMode = TextView.MeasureSpec.getMode(heightMeasureSpec); - let widthSize = TextView.MeasureSpec.getSize(widthMeasureSpec); - let heightSize = TextView.MeasureSpec.getSize(heightMeasureSpec); - let width; - let height; - let boring = TextView.UNKNOWN_BORING; - let hintBoring = TextView.UNKNOWN_BORING; - if (this.mTextDir == null) { - this.mTextDir = this.getTextDirectionHeuristic(); - } - let des = -1; - let fromexisting = false; - if (widthMode == TextView.MeasureSpec.EXACTLY) { - width = widthSize; - } - else { - if (this.mLayout != null && this.mEllipsize == null) { - des = TextView.desired(this.mLayout); - } - if (des < 0) { - boring = BoringLayout.isBoring(this.mTransformed, this.mTextPaint, this.mTextDir, this.mBoring); - if (boring != null) { - this.mBoring = boring; - } - } - else { - fromexisting = true; - } - if (boring == null || boring == TextView.UNKNOWN_BORING) { - if (des < 0) { - des = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mTransformed, this.mTextPaint))); - } - width = des; - } - else { - width = boring.width; - } - const dr = this.mDrawables; - if (dr != null) { - width = Math.max(width, dr.mDrawableWidthTop); - width = Math.max(width, dr.mDrawableWidthBottom); + tick() { + if (this.mStatus != Marquee.MARQUEE_RUNNING) { + return; } - if (this.mHint != null) { - let hintDes = -1; - let hintWidth; - if (this.mHintLayout != null && this.mEllipsize == null) { - hintDes = TextView.desired(this.mHintLayout); - } - if (hintDes < 0) { - hintBoring = BoringLayout.isBoring(this.mHint, this.mTextPaint, this.mTextDir, this.mHintBoring); - if (hintBoring != null) { - this.mHintBoring = hintBoring; - } - } - if (hintBoring == null || hintBoring == TextView.UNKNOWN_BORING) { - if (hintDes < 0) { - hintDes = Math.floor(Math.ceil(Layout.getDesiredWidth(this.mHint, this.mTextPaint))); - } - hintWidth = hintDes; + this.removeMessages(Marquee.MESSAGE_TICK); + const textView = this.mView.get(); + if (textView != null && (textView.isFocused() || textView.isSelected())) { + this.mScroll += this.mScrollUnit; + if (this.mScroll > this.mMaxScroll) { + this.mScroll = this.mMaxScroll; + this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART, Marquee.MARQUEE_RESTART_DELAY); } else { - hintWidth = hintBoring.width; - } - if (hintWidth > width) { - width = hintWidth; + this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK, Marquee.MARQUEE_RESOLUTION); } - } - width += this.getCompoundPaddingLeft() + this.getCompoundPaddingRight(); - if (this.mMaxWidthMode == TextView.EMS) { - width = Math.min(width, this.mMaxWidthValue * this.getLineHeight()); - } - else { - width = Math.min(width, this.mMaxWidthValue); - } - if (this.mMinWidthMode == TextView.EMS) { - width = Math.max(width, this.mMinWidthValue * this.getLineHeight()); - } - else { - width = Math.max(width, this.mMinWidthValue); - } - width = Math.max(width, this.getSuggestedMinimumWidth()); - if (widthMode == TextView.MeasureSpec.AT_MOST) { - width = Math.min(widthSize, width); + textView.invalidate(); } } - let want = width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); - let unpaddedWidth = want; - if (this.mHorizontallyScrolling) - want = TextView.VERY_WIDE; - let hintWant = want; - let hintWidth = (this.mHintLayout == null) ? hintWant : this.mHintLayout.getWidth(); - if (this.mLayout == null) { - this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); + stop() { + this.mStatus = Marquee.MARQUEE_STOPPED; + this.removeMessages(Marquee.MESSAGE_START); + this.removeMessages(Marquee.MESSAGE_RESTART); + this.removeMessages(Marquee.MESSAGE_TICK); + this.resetScroll(); } - else { - const layoutChanged = (this.mLayout.getWidth() != want) || (hintWidth != hintWant) || (this.mLayout.getEllipsizedWidth() != width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight()); - const widthChanged = (this.mHint == null) && (this.mEllipsize == null) && (want > this.mLayout.getWidth()) && (this.mLayout instanceof BoringLayout || (fromexisting && des >= 0 && des <= want)); - const maximumChanged = (this.mMaxMode != this.mOldMaxMode) || (this.mMaximum != this.mOldMaximum); - if (layoutChanged || maximumChanged) { - if (!maximumChanged && widthChanged) { - this.mLayout.increaseWidthTo(want); - } - else { - this.makeNewLayout(want, hintWant, boring, hintBoring, width - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); - } + resetScroll() { + this.mScroll = 0.0; + const textView = this.mView.get(); + if (textView != null) + textView.invalidate(); + } + start(repeatLimit) { + if (repeatLimit == 0) { + this.stop(); + return; } - else { + this.mRepeatLimit = repeatLimit; + const textView = this.mView.get(); + if (textView != null && textView.mLayout != null) { + this.mStatus = Marquee.MARQUEE_STARTING; + this.mScroll = 0.0; + const textWidth = textView.getWidth() - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight(); + const lineWidth = textView.mLayout.getLineWidth(0); + const gap = textWidth / 3.0; + this.mGhostStart = lineWidth - textWidth + gap; + this.mMaxScroll = this.mGhostStart + textWidth; + this.mGhostOffset = lineWidth + gap; + this.mFadeStop = lineWidth + textWidth / 6.0; + this.mMaxFadeScroll = this.mGhostStart + lineWidth + lineWidth; + textView.invalidate(); + this.sendEmptyMessageDelayed(Marquee.MESSAGE_START, Marquee.MARQUEE_DELAY); } } - if (heightMode == TextView.MeasureSpec.EXACTLY) { - height = heightSize; - this.mDesiredHeightAtMeasure = -1; + getGhostOffset() { + return this.mGhostOffset; } - else { - let desired = this.getDesiredHeight(); - height = desired; - this.mDesiredHeightAtMeasure = desired; - if (heightMode == TextView.MeasureSpec.AT_MOST) { - height = Math.min(desired, heightSize); - } + getScroll() { + return this.mScroll; } - let unpaddedHeight = height - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom(); - if (this.mMaxMode == TextView.LINES && this.mLayout.getLineCount() > this.mMaximum) { - unpaddedHeight = Math.min(unpaddedHeight, this.mLayout.getLineTop(this.mMaximum)); + getMaxFadeScroll() { + return this.mMaxFadeScroll; } - if (this.mMovement != null || this.mLayout.getWidth() > unpaddedWidth || this.mLayout.getHeight() > unpaddedHeight) { - this.registerForPreDraw(); + shouldDrawLeftFade() { + return this.mScroll <= this.mFadeStop; } - else { - this.scrollTo(0, 0); + shouldDrawGhost() { + return this.mStatus == Marquee.MARQUEE_RUNNING && this.mScroll > this.mGhostStart; + } + isRunning() { + return this.mStatus == Marquee.MARQUEE_RUNNING; + } + isStopped() { + return this.mStatus == Marquee.MARQUEE_STOPPED; } - this.setMeasuredDimension(width, height); } - getDesiredHeight(layout, cap = true) { - if (arguments.length === 0) { - return Math.max(this.getDesiredHeight(this.mLayout, true), this.getDesiredHeight(this.mHintLayout, this.mEllipsize != null)); + Marquee.MARQUEE_DELTA_MAX = 0.07; + Marquee.MARQUEE_DELAY = 1200; + Marquee.MARQUEE_RESTART_DELAY = 1200; + Marquee.MARQUEE_RESOLUTION = 1000 / 30; + Marquee.MARQUEE_PIXELS_PER_SECOND = 30; + Marquee.MARQUEE_STOPPED = 0x0; + Marquee.MARQUEE_STARTING = 0x1; + Marquee.MARQUEE_RUNNING = 0x2; + Marquee.MESSAGE_START = 0x1; + Marquee.MESSAGE_TICK = 0x2; + Marquee.MESSAGE_RESTART = 0x3; + TextView.Marquee = Marquee; + class ChangeWatcher { + constructor(arg) { + this._TextView_this = arg; } - if (layout == null) { - return 0; + beforeTextChanged(buffer, start, before, after) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "beforeTextChanged start=" + start + " before=" + before + " after=" + after + ": " + buffer); + this._TextView_this.sendBeforeTextChanged(buffer, start, before, after); } - let linecount = layout.getLineCount(); - let pad = this.getCompoundPaddingTop() + this.getCompoundPaddingBottom(); - let desired = layout.getLineTop(linecount); - const dr = this.mDrawables; - if (dr != null) { - desired = Math.max(desired, dr.mDrawableHeightLeft); - desired = Math.max(desired, dr.mDrawableHeightRight); + onTextChanged(buffer, start, before, after) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "onTextChanged start=" + start + " before=" + before + " after=" + after + ": " + buffer); + this._TextView_this.handleTextChanged(buffer, start, before, after); } - desired += pad; - if (this.mMaxMode == TextView.LINES) { - if (cap) { - if (linecount > this.mMaximum) { - desired = layout.getLineTop(this.mMaximum); - if (dr != null) { - desired = Math.max(desired, dr.mDrawableHeightLeft); - desired = Math.max(desired, dr.mDrawableHeightRight); - } - desired += pad; - linecount = this.mMaximum; - } - } + afterTextChanged(buffer) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "afterTextChanged: " + buffer); + this._TextView_this.sendAfterTextChanged(buffer); } - else { - desired = Math.min(desired, this.mMaximum); + onSpanChanged(buf, what, s, e, st, en) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "onSpanChanged s=" + s + " e=" + e + " st=" + st + " en=" + en + " what=" + what + ": " + buf); + this._TextView_this.spanChange(buf, what, s, st, e, en); + } + onSpanAdded(buf, what, s, e) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "onSpanAdded s=" + s + " e=" + e + " what=" + what + ": " + buf); + this._TextView_this.spanChange(buf, what, -1, s, -1, e); + } + onSpanRemoved(buf, what, s, e) { + if (TextView.DEBUG_EXTRACT) + Log.v(TextView.LOG_TAG, "onSpanRemoved s=" + s + " e=" + e + " what=" + what + ": " + buf); + this._TextView_this.spanChange(buf, what, s, -1, e, -1); + } + } + TextView.ChangeWatcher = ChangeWatcher; + var BufferType; + (function (BufferType) { + BufferType[BufferType["NORMAL"] = 0] = "NORMAL"; + BufferType[BufferType["SPANNABLE"] = 1] = "SPANNABLE"; + BufferType[BufferType["EDITABLE"] = 2] = "EDITABLE"; + })(BufferType = TextView.BufferType || (TextView.BufferType = {})); + })(TextView = widget.TextView || (widget.TextView = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + class Button extends widget.TextView { + constructor(context, bindElement, defStyle = android.R.attr.buttonStyle) { + super(context, bindElement, defStyle); + } + } + widget.Button = Button; + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var ListAdapter; + (function (ListAdapter) { + function isImpl(obj) { + return obj && obj['areAllItemsEnabled'] && obj['isEnabled']; + } + ListAdapter.isImpl = isImpl; + })(ListAdapter = widget.ListAdapter || (widget.ListAdapter = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var Rect = android.graphics.Rect; + var Log = android.util.Log; + var LongSparseArray = android.util.LongSparseArray; + var SparseArray = android.util.SparseArray; + var SparseBooleanArray = android.util.SparseBooleanArray; + var StateSet = android.util.StateSet; + var HapticFeedbackConstants = android.view.HapticFeedbackConstants; + var KeyEvent = android.view.KeyEvent; + var MotionEvent = android.view.MotionEvent; + var VelocityTracker = android.view.VelocityTracker; + var View = android.view.View; + var ViewConfiguration = android.view.ViewConfiguration; + var ViewGroup = android.view.ViewGroup; + var LinearInterpolator = android.view.animation.LinearInterpolator; + var ArrayList = java.util.ArrayList; + var Integer = java.lang.Integer; + var System = java.lang.System; + var AdapterView = android.widget.AdapterView; + var OverScroller = android.widget.OverScroller; + class AbsListView extends AdapterView { + constructor(context, bindElement, defStyle) { + super(context, bindElement, defStyle); + this.mChoiceMode = AbsListView.CHOICE_MODE_NONE; + this.mCheckedItemCount = 0; + this.mDeferNotifyDataSetChanged = false; + this.mDrawSelectorOnTop = false; + this.mSelectorPosition = AbsListView.INVALID_POSITION; + this.mSelectorRect = new Rect(); + this.mRecycler = new AbsListView.RecycleBin(this); + this.mSelectionLeftPadding = 0; + this.mSelectionTopPadding = 0; + this.mSelectionRightPadding = 0; + this.mSelectionBottomPadding = 0; + this.mListPadding = new Rect(); + this.mWidthMeasureSpec = 0; + this.mMotionPosition = 0; + this.mMotionViewOriginalTop = 0; + this.mMotionViewNewTop = 0; + this.mMotionX = 0; + this.mMotionY = 0; + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.mLastY = 0; + this.mMotionCorrection = 0; + this.mSelectedTop = 0; + this.mSmoothScrollbarEnabled = true; + this.mResurrectToPosition = AbsListView.INVALID_POSITION; + this.mOverscrollMax = 0; + this.mLastTouchMode = AbsListView.TOUCH_MODE_UNKNOWN; + this.mScrollProfilingStarted = false; + this.mFlingProfilingStarted = false; + this.mTranscriptMode = 0; + this.mCacheColorHint = 0; + this.mLastScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE; + this.mDensityScale = 0; + this.mMinimumVelocity = 0; + this.mMaximumVelocity = 0; + this.mVelocityScale = 1.0; + this.mIsScrap = new Array(1); + this.mActivePointerId = AbsListView.INVALID_POINTER; + this.mOverscrollDistance = 0; + this._mOverflingDistance = 0; + this.mFirstPositionDistanceGuess = 0; + this.mLastPositionDistanceGuess = 0; + this.mDirection = 0; + this.mGlowPaddingLeft = 0; + this.mGlowPaddingRight = 0; + this.mLastHandledItemCount = 0; + this.initAbsListView(); + let a = context.obtainStyledAttributes(bindElement, defStyle); + let d = a.getDrawable('listSelector'); + if (d != null) { + this.setSelector(d); + } + this.mDrawSelectorOnTop = a.getBoolean('drawSelectorOnTop', false); + let stackFromBottom = a.getBoolean('stackFromBottom', false); + this.setStackFromBottom(stackFromBottom); + let scrollingCacheEnabled = a.getBoolean('scrollingCache', true); + this.setScrollingCacheEnabled(scrollingCacheEnabled); + let useTextFilter = a.getBoolean('textFilterEnabled', false); + this.setTextFilterEnabled(useTextFilter); + let transcriptModeValue = a.getAttrValue('transcriptMode'); + let transcriptMode = AbsListView.TRANSCRIPT_MODE_DISABLED; + if (transcriptModeValue === "disabled") + transcriptMode = AbsListView.TRANSCRIPT_MODE_DISABLED; + else if (transcriptModeValue === "normal") + transcriptMode = AbsListView.TRANSCRIPT_MODE_NORMAL; + else if (transcriptModeValue === "alwaysScroll") + transcriptMode = AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL; + this.setTranscriptMode(transcriptMode); + let color = a.getColor('cacheColorHint', 0); + this.setCacheColorHint(color); + let enableFastScroll = a.getBoolean('fastScrollEnabled', false); + this.setFastScrollEnabled(enableFastScroll); + let smoothScrollbar = a.getBoolean('smoothScrollbar', true); + this.setSmoothScrollbarEnabled(smoothScrollbar); + let choiceModeValue = a.getAttrValue('choiceMode'); + let choiceMode = AbsListView.CHOICE_MODE_NONE; + if (choiceModeValue === "none") + choiceMode = AbsListView.CHOICE_MODE_NONE; + else if (choiceModeValue === "singleChoice") + choiceMode = AbsListView.CHOICE_MODE_SINGLE; + else if (choiceModeValue === "multipleChoice") + choiceMode = AbsListView.CHOICE_MODE_MULTIPLE; + this.setChoiceMode(choiceMode); + this.setFastScrollAlwaysVisible(a.getBoolean('fastScrollAlwaysVisible', false)); + a.recycle(); + } + get mOverflingDistance() { + if (this.mScrollY <= 0) { + if (this.mScrollY < -this._mOverflingDistance) + return -this.mScrollY; + return this._mOverflingDistance; } - if (this.mMinMode == TextView.LINES) { - if (linecount < this.mMinimum) { - desired += this.getLineHeight() * (this.mMinimum - linecount); + let overDistance = this.mScrollY; + if (overDistance > this._mOverflingDistance) + return overDistance; + return this._mOverflingDistance; + } + set mOverflingDistance(value) { + this._mOverflingDistance = value; + } + initAbsListView() { + this.setClickable(true); + this.setFocusableInTouchMode(true); + this.setWillNotDraw(false); + this.setAlwaysDrawnWithCacheEnabled(false); + this.setScrollingCacheEnabled(true); + const configuration = ViewConfiguration.get(); + this.mTouchSlop = configuration.getScaledTouchSlop(); + this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); + this.mOverscrollDistance = configuration.getScaledOverscrollDistance(); + this.mOverflingDistance = configuration.getScaledOverflingDistance(); + this.mDensityScale = android.content.res.Resources.getDisplayMetrics().density; + this.mLayoutMode = AbsListView.LAYOUT_NORMAL; + } + createClassAttrBinder() { + return super.createClassAttrBinder() + .set('listSelector', { + setter(v, value, attrBinder) { + let d = attrBinder.parseDrawable(value); + if (d) + v.setSelector(d); + }, getter(v) { + return v.getSelector(); + } + }) + .set('drawSelectorOnTop', { + setter(v, value, attrBinder) { + v.setDrawSelectorOnTop(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.mDrawSelectorOnTop; + } + }) + .set('stackFromBottom', { + setter(v, value, attrBinder) { + v.setStackFromBottom(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.isStackFromBottom(); + } + }) + .set('scrollingCache', { + setter(v, value, attrBinder) { + v.setScrollingCacheEnabled(attrBinder.parseBoolean(value, true)); + }, getter(v) { + return v.isScrollingCacheEnabled(); + } + }) + .set('transcriptMode', { + setter(v, value, attrBinder) { + v.setTranscriptMode(attrBinder.parseEnum(value, new Map() + .set("disabled", AbsListView.TRANSCRIPT_MODE_DISABLED) + .set("normal", AbsListView.TRANSCRIPT_MODE_NORMAL) + .set("alwaysScroll", AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL), AbsListView.TRANSCRIPT_MODE_DISABLED)); + }, getter(v) { + return v.getTranscriptMode(); + } + }) + .set('cacheColorHint', { + setter(v, value, attrBinder) { + let color = attrBinder.parseColor(value, 0); + v.setCacheColorHint(color); + }, getter(v) { + return v.getCacheColorHint(); + } + }) + .set('fastScrollEnabled', { + setter(v, value, attrBinder) { + let enableFastScroll = attrBinder.parseBoolean(value, false); + v.setFastScrollEnabled(enableFastScroll); + }, getter(v) { + return v.isFastScrollEnabled(); + } + }) + .set('fastScrollAlwaysVisible', { + setter(v, value, attrBinder) { + let fastScrollAlwaysVisible = attrBinder.parseBoolean(value, false); + v.setFastScrollAlwaysVisible(fastScrollAlwaysVisible); + }, getter(v) { + return v.isFastScrollAlwaysVisible(); + } + }) + .set('smoothScrollbar', { + setter(v, value, attrBinder) { + let smoothScrollbar = attrBinder.parseBoolean(value, true); + v.setSmoothScrollbarEnabled(smoothScrollbar); + }, getter(v) { + return v.isSmoothScrollbarEnabled(); + } + }) + .set('choiceMode', { + setter(v, value, attrBinder) { + v.setChoiceMode(attrBinder.parseEnum(value, new Map() + .set("none", AbsListView.CHOICE_MODE_NONE) + .set("singleChoice", AbsListView.CHOICE_MODE_SINGLE) + .set("multipleChoice", AbsListView.CHOICE_MODE_MULTIPLE), AbsListView.CHOICE_MODE_NONE)); + }, getter(v) { + return v.getChoiceMode(); } + }); + } + setOverScrollMode(mode) { + if (mode != AbsListView.OVER_SCROLL_NEVER) { } else { - desired = Math.max(desired, this.mMinimum); } - desired = Math.max(desired, this.getSuggestedMinimumHeight()); - return desired; + super.setOverScrollMode(mode); } - checkForResize() { - let sizeChanged = false; - if (this.mLayout != null) { - if (this.mLayoutParams.width == LayoutParams.WRAP_CONTENT) { - sizeChanged = true; - this.invalidate(); - } - if (this.mLayoutParams.height == LayoutParams.WRAP_CONTENT) { - let desiredHeight = this.getDesiredHeight(); - if (desiredHeight != this.getHeight()) { - sizeChanged = true; - } - } - else if (this.mLayoutParams.height == LayoutParams.MATCH_PARENT) { - if (this.mDesiredHeightAtMeasure >= 0) { - let desiredHeight = this.getDesiredHeight(); - if (desiredHeight != this.mDesiredHeightAtMeasure) { - sizeChanged = true; - } - } + setAdapter(adapter) { + if (adapter != null) { + this.mAdapterHasStableIds = this.mAdapter.hasStableIds(); + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapterHasStableIds && this.mCheckedIdStates == null) { + this.mCheckedIdStates = new LongSparseArray(); } } - if (sizeChanged) { - this.requestLayout(); + if (this.mCheckStates != null) { + this.mCheckStates.clear(); + } + if (this.mCheckedIdStates != null) { + this.mCheckedIdStates.clear(); } } - checkForRelayout() { - if ((this.mLayoutParams.width != LayoutParams.WRAP_CONTENT || (this.mMaxWidthMode == this.mMinWidthMode && this.mMaxWidthValue == this.mMinWidthValue)) && (this.mHint == null || this.mHintLayout != null) && (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() > 0)) { - let oldht = this.mLayout.getHeight(); - let want = this.mLayout.getWidth(); - let hintWant = this.mHintLayout == null ? 0 : this.mHintLayout.getWidth(); - this.makeNewLayout(want, hintWant, TextView.UNKNOWN_BORING, TextView.UNKNOWN_BORING, this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(), false); - if (this.mEllipsize != TextUtils.TruncateAt.MARQUEE) { - if (this.mLayoutParams.height != LayoutParams.WRAP_CONTENT && this.mLayoutParams.height != LayoutParams.MATCH_PARENT) { - this.invalidate(); - return; - } - if (this.mLayout.getHeight() == oldht && (this.mHintLayout == null || this.mHintLayout.getHeight() == oldht)) { - this.invalidate(); - return; - } - } - this.requestLayout(); - this.invalidate(); + getCheckedItemCount() { + return this.mCheckedItemCount; + } + isItemChecked(position) { + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mCheckStates != null) { + return this.mCheckStates.get(position); } - else { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); + return false; + } + getCheckedItemPosition() { + if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE && this.mCheckStates != null && this.mCheckStates.size() == 1) { + return this.mCheckStates.keyAt(0); } + return AbsListView.INVALID_POSITION; } - onLayout(changed, left, top, right, bottom) { - super.onLayout(changed, left, top, right, bottom); - if (this.mDeferScroll >= 0) { - let curs = this.mDeferScroll; - this.mDeferScroll = -1; - this.bringPointIntoView(Math.min(curs, this.mText.length)); + getCheckedItemPositions() { + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { + return this.mCheckStates; } + return null; } - isShowingHint() { - return TextUtils.isEmpty(this.mText) && !TextUtils.isEmpty(this.mHint); + getCheckedItemIds() { + if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE || this.mCheckedIdStates == null || this.mAdapter == null) { + return [0]; + } + const idStates = this.mCheckedIdStates; + const count = idStates.size(); + const ids = [count]; + for (let i = 0; i < count; i++) { + ids[i] = idStates.keyAt(i); + } + return ids; } - bringTextIntoView() { - let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout; - let line = 0; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { - line = layout.getLineCount() - 1; + clearChoices() { + if (this.mCheckStates != null) { + this.mCheckStates.clear(); } - let a = layout.getParagraphAlignment(line); - let dir = layout.getParagraphDirection(line); - let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); - let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom(); - let ht = layout.getHeight(); - let scrollx, scrolly; - if (a == Layout.Alignment.ALIGN_NORMAL) { - a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_LEFT : Layout.Alignment.ALIGN_RIGHT; + if (this.mCheckedIdStates != null) { + this.mCheckedIdStates.clear(); } - else if (a == Layout.Alignment.ALIGN_OPPOSITE) { - a = dir == Layout.DIR_LEFT_TO_RIGHT ? Layout.Alignment.ALIGN_RIGHT : Layout.Alignment.ALIGN_LEFT; + this.mCheckedItemCount = 0; + } + setItemChecked(position, value) { + if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE) { + return; } - if (a == Layout.Alignment.ALIGN_CENTER) { - let left = Math.floor(Math.floor(layout.getLineLeft(line))); - let right = Math.floor(Math.ceil(layout.getLineRight(line))); - if (right - left < hspace) { - scrollx = (right + left) / 2 - hspace / 2; + if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) { + let oldValue = this.mCheckStates.get(position); + this.mCheckStates.put(position, value); + if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { + if (value) { + this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + } + else { + this.mCheckedIdStates.delete(this.mAdapter.getItemId(position)); + } } - else { - if (dir < 0) { - scrollx = right - hspace; + if (oldValue != value) { + if (value) { + this.mCheckedItemCount++; } else { - scrollx = left; + this.mCheckedItemCount--; } } } - else if (a == Layout.Alignment.ALIGN_RIGHT) { - let right = Math.floor(Math.ceil(layout.getLineRight(line))); - scrollx = right - hspace; - } - else { - scrollx = Math.floor(Math.floor(layout.getLineLeft(line))); - } - if (ht < vspace) { - scrolly = 0; - } else { - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { - scrolly = ht - vspace; - } - else { - scrolly = 0; + let updateIds = this.mCheckedIdStates != null && this.mAdapter.hasStableIds(); + if (value || this.isItemChecked(position)) { + this.mCheckStates.clear(); + if (updateIds) { + this.mCheckedIdStates.clear(); + } } - } - if (scrollx != this.mScrollX || scrolly != this.mScrollY) { - this.scrollTo(scrollx, scrolly); - return true; - } - else { - return false; - } - } - bringPointIntoView(offset) { - if (this.isLayoutRequested()) { - this.mDeferScroll = offset; - return false; - } - let changed = false; - let layout = this.isShowingHint() ? this.mHintLayout : this.mLayout; - if (layout == null) - return changed; - let line = layout.getLineForOffset(offset); - let grav; - switch (layout.getParagraphAlignment(line)) { - case Layout.Alignment.ALIGN_LEFT: - grav = 1; - break; - case Layout.Alignment.ALIGN_RIGHT: - grav = -1; - break; - case Layout.Alignment.ALIGN_NORMAL: - grav = layout.getParagraphDirection(line); - break; - case Layout.Alignment.ALIGN_OPPOSITE: - grav = -layout.getParagraphDirection(line); - break; - case Layout.Alignment.ALIGN_CENTER: - default: - grav = 0; - break; - } - const clamped = grav > 0; - const x = Math.floor(layout.getPrimaryHorizontal(offset, clamped)); - const top = layout.getLineTop(line); - const bottom = layout.getLineTop(line + 1); - let left = Math.floor(Math.floor(layout.getLineLeft(line))); - let right = Math.floor(Math.ceil(layout.getLineRight(line))); - let ht = layout.getHeight(); - let hspace = this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); - let vspace = this.mBottom - this.mTop - this.getExtendedPaddingTop() - this.getExtendedPaddingBottom(); - if (!this.mHorizontallyScrolling && right - left > hspace && right > x) { - right = Math.max(x, left + hspace); - } - let hslack = (bottom - top) / 2; - let vslack = hslack; - if (vslack > vspace / 4) - vslack = vspace / 4; - if (hslack > hspace / 4) - hslack = hspace / 4; - let hs = this.mScrollX; - let vs = this.mScrollY; - if (top - vs < vslack) - vs = top - vslack; - if (bottom - vs > vspace - vslack) - vs = bottom - (vspace - vslack); - if (ht - vs < vspace) - vs = ht - vspace; - if (0 - vs > 0) - vs = 0; - if (grav != 0) { - if (x - hs < hslack) { - hs = x - hslack; + if (value) { + this.mCheckStates.put(position, true); + if (updateIds) { + this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + } + this.mCheckedItemCount = 1; } - if (x - hs > hspace - hslack) { - hs = x - (hspace - hslack); + else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) { + this.mCheckedItemCount = 0; } } - if (grav < 0) { - if (left - hs > 0) - hs = left; - if (right - hs < hspace) - hs = right - hspace; - } - else if (grav > 0) { - if (right - hs < hspace) - hs = right - hspace; - if (left - hs > 0) - hs = left; + if (!this.mInLayout && !this.mBlockLayoutRequests) { + this.mDataChanged = true; + this.rememberSyncState(); + this.requestLayout(); } - else { - if (right - left <= hspace) { - hs = left - (hspace - (right - left)) / 2; - } - else if (x > right - hslack) { - hs = right - hspace; - } - else if (x < left + hslack) { - hs = left; - } - else if (left > hs) { - hs = left; - } - else if (right < hs + hspace) { - hs = right - hspace; - } - else { - if (x - hs < hslack) { - hs = x - hslack; - } - if (x - hs > hspace - hslack) { - hs = x - (hspace - hslack); + } + performItemClick(view, position, id) { + let handled = false; + let dispatchItemClick = true; + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { + handled = true; + let checkedStateChanged = false; + if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL && this.mChoiceActionMode != null)) { + let checked = !this.mCheckStates.get(position, false); + this.mCheckStates.put(position, checked); + if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { + if (checked) { + this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + } + else { + this.mCheckedIdStates.delete(this.mAdapter.getItemId(position)); + } } - } - } - if (hs != this.mScrollX || vs != this.mScrollY) { - if (this.mScroller == null) { - this.scrollTo(hs, vs); - } - else { - let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll; - let dx = hs - this.mScrollX; - let dy = vs - this.mScrollY; - if (duration > TextView.ANIMATED_SCROLL_GAP) { - this.mScroller.startScroll(this.mScrollX, this.mScrollY, dx, dy); - this.awakenScrollBars(this.mScroller.getDuration()); - this.invalidate(); + if (checked) { + this.mCheckedItemCount++; } else { - if (!this.mScroller.isFinished()) { - this.mScroller.abortAnimation(); + this.mCheckedItemCount--; + } + checkedStateChanged = true; + } + else if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE) { + let checked = !this.mCheckStates.get(position, false); + if (checked) { + this.mCheckStates.clear(); + this.mCheckStates.put(position, true); + if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { + this.mCheckedIdStates.clear(); + this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); } - this.scrollBy(dx, dy); + this.mCheckedItemCount = 1; } - this.mLastScroll = AnimationUtils.currentAnimationTimeMillis(); + else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) { + this.mCheckedItemCount = 0; + } + checkedStateChanged = true; + } + if (checkedStateChanged) { + this.updateOnScreenCheckedViews(); } - changed = true; } - if (this.isFocused()) { - if (this.mTempRect == null) - this.mTempRect = new Rect(); - this.mTempRect.set(x - 2, top, x + 2, bottom); - this.getInterestingRect(this.mTempRect, line); - this.mTempRect.offset(this.mScrollX, this.mScrollY); + if (dispatchItemClick) { + handled = super.performItemClick(view, position, id) || handled; } - return changed; - } - moveCursorToVisibleOffset() { - return false; + return handled; } - computeScroll() { - if (this.mScroller != null) { - if (this.mScroller.computeScrollOffset()) { - this.mScrollX = this.mScroller.getCurrX(); - this.mScrollY = this.mScroller.getCurrY(); - this.invalidateParentCaches(); - this.postInvalidate(); + updateOnScreenCheckedViews() { + const firstPos = this.mFirstPosition; + const count = this.getChildCount(); + const useActivated = true; + for (let i = 0; i < count; i++) { + const child = this.getChildAt(i); + const position = firstPos + i; + if (child['setChecked']) { + child.setChecked(this.mCheckStates.get(position)); + } + else if (useActivated) { + child.setActivated(this.mCheckStates.get(position)); } } } - getInterestingRect(r, line) { - this.convertFromViewportToContentCoordinates(r); - if (line == 0) - r.top -= this.getExtendedPaddingTop(); - if (line == this.mLayout.getLineCount() - 1) - r.bottom += this.getExtendedPaddingBottom(); + getChoiceMode() { + return this.mChoiceMode; } - convertFromViewportToContentCoordinates(r) { - const horizontalOffset = this.viewportToContentHorizontalOffset(); - r.left += horizontalOffset; - r.right += horizontalOffset; - const verticalOffset = this.viewportToContentVerticalOffset(); - r.top += verticalOffset; - r.bottom += verticalOffset; + setChoiceMode(choiceMode) { + this.mChoiceMode = choiceMode; + if (this.mChoiceActionMode != null) { + this.mChoiceActionMode.finish(); + this.mChoiceActionMode = null; + } + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { + if (this.mCheckStates == null) { + this.mCheckStates = new SparseBooleanArray(0); + } + if (this.mCheckedIdStates == null && this.mAdapter != null && this.mAdapter.hasStableIds()) { + this.mCheckedIdStates = new LongSparseArray(0); + } + if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) { + this.clearChoices(); + this.setLongClickable(true); + } + } } - viewportToContentHorizontalOffset() { - return this.getCompoundPaddingLeft() - this.mScrollX; + contentFits() { + const childCount = this.getChildCount(); + if (childCount == 0) + return true; + if (childCount != this.mItemCount) + return false; + return this.getChildAt(0).getTop() >= this.mListPadding.top && this.getChildAt(childCount - 1).getBottom() <= this.getHeight() - this.mListPadding.bottom; } - viewportToContentVerticalOffset() { - let offset = this.getExtendedPaddingTop() - this.mScrollY; - if ((this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) { - offset += this.getVerticalOffset(false); + setFastScrollEnabled(enabled) { + if (this.mFastScrollEnabled != enabled) { + this.mFastScrollEnabled = enabled; + this.setFastScrollerEnabledUiThread(enabled); } - return offset; } - getSelectionStart() { - return -1; + setFastScrollerEnabledUiThread(enabled) { } - getSelectionEnd() { - return -1; + setFastScrollAlwaysVisible(alwaysShow) { + if (this.mFastScrollAlwaysVisible != alwaysShow) { + if (alwaysShow && !this.mFastScrollEnabled) { + this.setFastScrollEnabled(true); + } + this.mFastScrollAlwaysVisible = alwaysShow; + this.setFastScrollerAlwaysVisibleUiThread(alwaysShow); + } } - hasSelection() { - const selectionStart = this.getSelectionStart(); - const selectionEnd = this.getSelectionEnd(); - return selectionStart >= 0 && selectionStart != selectionEnd; + setFastScrollerAlwaysVisibleUiThread(alwaysShow) { } - setAllCaps(allCaps) { - if (allCaps) { - this.setTransformationMethod(new AllCapsTransformationMethod()); - } - else { - this.setTransformationMethod(null); - } + isOwnerThread() { + return true; } - setSingleLine(singleLine = true) { - if (this.mSingleLine == singleLine) - return; - this.setInputTypeSingleLine(singleLine); - this.applySingleLine(singleLine, true, true); + isFastScrollAlwaysVisible() { + return false; } - setInputTypeSingleLine(singleLine) { + getVerticalScrollbarWidth() { + return super.getVerticalScrollbarWidth(); } - applySingleLine(singleLine, applyTransformation, changeMaxLines) { - this.mSingleLine = singleLine; - if (singleLine) { - this.setLines(1); - this.setHorizontallyScrolling(true); - if (applyTransformation) { - this.setTransformationMethod(SingleLineTransformationMethod.getInstance()); - } - } - else { - if (changeMaxLines) { - this.setMaxLines(Integer.MAX_VALUE); - } - this.setHorizontallyScrolling(false); - if (applyTransformation) { - this.setTransformationMethod(null); - } - } + isFastScrollEnabled() { + return false; } - setEllipsize(where) { - if (this.mEllipsize != where) { - this.mEllipsize = where; - if (this.mLayout != null) { - this.nullLayouts(); - this.requestLayout(); - this.invalidate(); - } - } + setVerticalScrollbarPosition(position) { + super.setVerticalScrollbarPosition(position); } - setMarqueeRepeatLimit(marqueeLimit) { - this.mMarqueeRepeatLimit = marqueeLimit; + setScrollBarStyle(style) { + super.setScrollBarStyle(style); } - getMarqueeRepeatLimit() { - return this.mMarqueeRepeatLimit; + isVerticalScrollBarHidden() { + return this.isFastScrollEnabled(); } - getEllipsize() { - return this.mEllipsize; + setSmoothScrollbarEnabled(enabled) { + this.mSmoothScrollbarEnabled = enabled; } - setSelectAllOnFocus(selectAllOnFocus) { - this.createEditorIfNeeded(); - this.mEditor.mSelectAllOnFocus = selectAllOnFocus; - if (selectAllOnFocus && !Spannable.isImpl(this.mText)) { - this.setText(this.mText, TextView.BufferType.SPANNABLE); + isSmoothScrollbarEnabled() { + return this.mSmoothScrollbarEnabled; + } + setOnScrollListener(l) { + this.mOnScrollListener = l; + this.invokeOnItemScrollListener(); + } + invokeOnItemScrollListener() { + if (this.mOnScrollListener != null) { + this.mOnScrollListener.onScroll(this, this.mFirstPosition, this.getChildCount(), this.mItemCount); } + this.onScrollChanged(0, 0, 0, 0); } - setCursorVisible(visible) { + isScrollingCacheEnabled() { + return this.mScrollingCacheEnabled; } - isCursorVisible() { - return null; + setScrollingCacheEnabled(enabled) { + if (this.mScrollingCacheEnabled && !enabled) { + this.clearScrollingCache(); + } + this.mScrollingCacheEnabled = enabled; } - canMarquee() { - let width = (this.mRight - this.mLeft - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight()); - return width > 0 && (this.mLayout.getLineWidth(0) > width || (this.mMarqueeFadeMode != TextView.MARQUEE_FADE_NORMAL && this.mSavedMarqueeModeLayout != null && this.mSavedMarqueeModeLayout.getLineWidth(0) > width)); + setTextFilterEnabled(textFilterEnabled) { + this.mTextFilterEnabled = textFilterEnabled; } - startMarquee() { - if (this.getKeyListener() != null) - return; - if (this.compressText(this.getWidth() - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) { - return; + isTextFilterEnabled() { + return this.mTextFilterEnabled; + } + getFocusedRect(r) { + let view = this.getSelectedView(); + if (view != null && view.getParent() == this) { + view.getFocusedRect(r); + this.offsetDescendantRectToMyCoords(view, r); } - if ((this.mMarquee == null || this.mMarquee.isStopped()) && (this.isFocused() || this.isSelected()) && this.getLineCount() == 1 && this.canMarquee()) { - if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { - this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_FADE; - const tmp = this.mLayout; - this.mLayout = this.mSavedMarqueeModeLayout; - this.mSavedMarqueeModeLayout = tmp; - this.setHorizontalFadingEdgeEnabled(true); - this.requestLayout(); - this.invalidate(); - } - if (this.mMarquee == null) - this.mMarquee = new TextView.Marquee(this); - this.mMarquee.start(this.mMarqueeRepeatLimit); + else { + super.getFocusedRect(r); } } - stopMarquee() { - if (this.mMarquee != null && !this.mMarquee.isStopped()) { - this.mMarquee.stop(); + useDefaultSelector() { + this.setSelector(android.R.drawable.list_selector_background); + } + isStackFromBottom() { + return this.mStackFromBottom; + } + setStackFromBottom(stackFromBottom) { + if (this.mStackFromBottom != stackFromBottom) { + this.mStackFromBottom = stackFromBottom; + this.requestLayoutIfNecessary(); } - if (this.mMarqueeFadeMode == TextView.MARQUEE_FADE_SWITCH_SHOW_FADE) { - this.mMarqueeFadeMode = TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS; - const tmp = this.mSavedMarqueeModeLayout; - this.mSavedMarqueeModeLayout = this.mLayout; - this.mLayout = tmp; - this.setHorizontalFadingEdgeEnabled(false); + } + requestLayoutIfNecessary() { + if (this.getChildCount() > 0) { + this.resetList(); this.requestLayout(); this.invalidate(); } } - startStopMarquee(start) { - if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { - if (start) { - this.startMarquee(); - } - else { - this.stopMarquee(); + onFocusChanged(gainFocus, direction, previouslyFocusedRect) { + super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); + if (gainFocus && this.mSelectedPosition < 0 && !this.isInTouchMode()) { + if (!this.isAttachedToWindow() && this.mAdapter != null) { + this.mDataChanged = true; + this.mOldItemCount = this.mItemCount; + this.mItemCount = this.mAdapter.getCount(); } + this.resurrectSelection(); } } - onTextChanged(text, start, lengthBefore, lengthAfter) { + requestLayout() { + if (!this.mBlockLayoutRequests && !this.mInLayout) { + super.requestLayout(); + } } - onSelectionChanged(selStart, selEnd) { + resetList() { + this.removeAllViewsInLayout(); + this.mFirstPosition = 0; + this.mDataChanged = false; + this.mPositionScrollAfterLayout = null; + this.mNeedSync = false; + this.mPendingSync = null; + this.mOldSelectedPosition = AbsListView.INVALID_POSITION; + this.mOldSelectedRowId = AbsListView.INVALID_ROW_ID; + this.setSelectedPositionInt(AbsListView.INVALID_POSITION); + this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION); + this.mSelectedTop = 0; + this.mSelectorPosition = AbsListView.INVALID_POSITION; + this.mSelectorRect.setEmpty(); + this.invalidate(); } - addTextChangedListener(watcher) { - if (this.mListeners == null) { - this.mListeners = new ArrayList(); + computeVerticalScrollExtent() { + const count = this.getChildCount(); + if (count > 0) { + if (this.mSmoothScrollbarEnabled) { + let extent = count * 100; + let view = this.getChildAt(0); + const top = view.getTop(); + let height = view.getHeight(); + if (height > 0) { + extent += (top * 100) / height; + } + view = this.getChildAt(count - 1); + const bottom = view.getBottom(); + height = view.getHeight(); + if (height > 0) { + extent -= ((bottom - this.getHeight()) * 100) / height; + } + return extent; + } + else { + return 1; + } } - this.mListeners.add(watcher); + return 0; } - removeTextChangedListener(watcher) { - if (this.mListeners != null) { - let i = this.mListeners.indexOf(watcher); - if (i >= 0) { - this.mListeners.remove(i); + computeVerticalScrollOffset() { + const firstPosition = this.mFirstPosition; + const childCount = this.getChildCount(); + if (firstPosition >= 0 && childCount > 0) { + if (this.mSmoothScrollbarEnabled) { + const view = this.getChildAt(0); + const top = view.getTop(); + let height = view.getHeight(); + if (height > 0) { + return Math.max(firstPosition * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)), 0); + } + } + else { + let index; + const count = this.mItemCount; + if (firstPosition == 0) { + index = 0; + } + else if (firstPosition + childCount == count) { + index = count; + } + else { + index = firstPosition + childCount / 2; + } + return Math.floor((firstPosition + childCount * (index / count))); } } + return 0; } - sendBeforeTextChanged(text, start, before, after) { - if (this.mListeners != null) { - const list = this.mListeners; - const count = list.size(); - for (let i = 0; i < count; i++) { - list.get(i).beforeTextChanged(text, start, before, after); + computeVerticalScrollRange() { + let result; + if (this.mSmoothScrollbarEnabled) { + result = Math.max(this.mItemCount * 100, 0); + if (this.mScrollY != 0) { + result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100))); } } + else { + result = this.mItemCount; + } + return result; } - removeAdjacentSuggestionSpans(pos) { - } - sendOnTextChanged(text, start, before, after) { - if (this.mListeners != null) { - const list = this.mListeners; - const count = list.size(); - for (let i = 0; i < count; i++) { - list.get(i).onTextChanged(text, start, before, after); + getTopFadingEdgeStrength() { + const count = this.getChildCount(); + const fadeEdge = super.getTopFadingEdgeStrength(); + if (count == 0) { + return fadeEdge; + } + else { + if (this.mFirstPosition > 0) { + return 1.0; } + const top = this.getChildAt(0).getTop(); + const fadeLength = this.getVerticalFadingEdgeLength(); + return top < this.mPaddingTop ? -(top - this.mPaddingTop) / fadeLength : fadeEdge; } } - sendAfterTextChanged(text) { - if (this.mListeners != null) { - const list = this.mListeners; - const count = list.size(); - for (let i = 0; i < count; i++) { - list.get(i).afterTextChanged(text + ''); + getBottomFadingEdgeStrength() { + const count = this.getChildCount(); + const fadeEdge = super.getBottomFadingEdgeStrength(); + if (count == 0) { + return fadeEdge; + } + else { + if (this.mFirstPosition + count - 1 < this.mItemCount - 1) { + return 1.0; } + const bottom = this.getChildAt(count - 1).getBottom(); + const height = this.getHeight(); + const fadeLength = this.getVerticalFadingEdgeLength(); + return bottom > height - this.mPaddingBottom ? (bottom - height + this.mPaddingBottom) / fadeLength : fadeEdge; } } - updateAfterEdit() { - this.invalidate(); - let curs = this.getSelectionStart(); - if (curs >= 0 || (this.mGravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { - this.registerForPreDraw(); + onMeasure(widthMeasureSpec, heightMeasureSpec) { + if (this.mSelector == null) { + this.useDefaultSelector(); } - this.checkForResize(); - if (curs >= 0) { - this.mHighlightPathBogus = true; - this.bringPointIntoView(curs); + const listPadding = this.mListPadding; + listPadding.left = this.mSelectionLeftPadding + this.mPaddingLeft; + listPadding.top = this.mSelectionTopPadding + this.mPaddingTop; + listPadding.right = this.mSelectionRightPadding + this.mPaddingRight; + listPadding.bottom = this.mSelectionBottomPadding + this.mPaddingBottom; + if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) { + const childCount = this.getChildCount(); + const listBottom = this.getHeight() - this.getPaddingBottom(); + const lastChild = this.getChildAt(childCount - 1); + const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom; + this.mForceTranscriptScroll = this.mFirstPosition + childCount >= this.mLastHandledItemCount && lastBottom <= listBottom; } } - handleTextChanged(buffer, start, before, after) { - this.updateAfterEdit(); - this.sendOnTextChanged(buffer, start, before, after); - this.onTextChanged(buffer, start, before, after); - } - spanChange(buf, what, oldStart, newStart, oldEnd, newEnd) { - let selChanged = false; - let newSelStart = -1, newSelEnd = -1; - this.invalidate(); - this.mHighlightPathBogus = true; - this.checkForResize(); + onLayout(changed, l, t, r, b) { + super.onLayout(changed, l, t, r, b); + this.mInLayout = true; + if (changed) { + let childCount = this.getChildCount(); + for (let i = 0; i < childCount; i++) { + this.getChildAt(i).forceLayout(); + } + this.mRecycler.markChildrenDirty(); + } + this.layoutChildren(); + this.mInLayout = false; + this.mOverscrollMax = (b - t) / AbsListView.OVERSCROLL_LIMIT_DIVISOR; } - dispatchFinishTemporaryDetach() { - this.mDispatchTemporaryDetach = true; - super.dispatchFinishTemporaryDetach(); - this.mDispatchTemporaryDetach = false; + setFrame(left, top, right, bottom) { + const changed = super.setFrame(left, top, right, bottom); + if (changed) { + const visible = this.getWindowVisibility() == View.VISIBLE; + } + return changed; } - onStartTemporaryDetach() { - super.onStartTemporaryDetach(); - if (!this.mDispatchTemporaryDetach) - this.mTemporaryDetach = true; + layoutChildren() { } - onFinishTemporaryDetach() { - super.onFinishTemporaryDetach(); - if (!this.mDispatchTemporaryDetach) - this.mTemporaryDetach = false; + updateScrollIndicators() { + if (this.mScrollUp != null) { + let canScrollUp; + canScrollUp = this.mFirstPosition > 0; + if (!canScrollUp) { + if (this.getChildCount() > 0) { + let child = this.getChildAt(0); + canScrollUp = child.getTop() < this.mListPadding.top; + } + } + this.mScrollUp.setVisibility(canScrollUp ? View.VISIBLE : View.INVISIBLE); + } + if (this.mScrollDown != null) { + let canScrollDown; + let count = this.getChildCount(); + canScrollDown = (this.mFirstPosition + count) < this.mItemCount; + if (!canScrollDown && count > 0) { + let child = this.getChildAt(count - 1); + canScrollDown = child.getBottom() > this.mBottom - this.mListPadding.bottom; + } + this.mScrollDown.setVisibility(canScrollDown ? View.VISIBLE : View.INVISIBLE); + } } - onFocusChanged(focused, direction, previouslyFocusedRect) { - if (this.mTemporaryDetach) { - super.onFocusChanged(focused, direction, previouslyFocusedRect); - return; + getSelectedView() { + if (this.mItemCount > 0 && this.mSelectedPosition >= 0) { + return this.getChildAt(this.mSelectedPosition - this.mFirstPosition); } - this.startStopMarquee(focused); - if (this.mTransformation != null) { - this.mTransformation.onFocusChanged(this, this.mText, focused, direction, previouslyFocusedRect); + else { + return null; } - super.onFocusChanged(focused, direction, previouslyFocusedRect); } - onWindowFocusChanged(hasWindowFocus) { - super.onWindowFocusChanged(hasWindowFocus); - this.startStopMarquee(hasWindowFocus); + getListPaddingTop() { + return this.mListPadding.top; } - onVisibilityChanged(changedView, visibility) { - super.onVisibilityChanged(changedView, visibility); + getListPaddingBottom() { + return this.mListPadding.bottom; } - clearComposingText() { + getListPaddingLeft() { + return this.mListPadding.left; } - setSelected(selected) { - let wasSelected = this.isSelected(); - super.setSelected(selected); - if (selected != wasSelected && this.mEllipsize == TextUtils.TruncateAt.MARQUEE) { - if (selected) { - this.startMarquee(); + getListPaddingRight() { + return this.mListPadding.right; + } + obtainView(position, isScrap) { + isScrap[0] = false; + let scrapView; + scrapView = this.mRecycler.getTransientStateView(position); + if (scrapView == null) { + scrapView = this.mRecycler.getScrapView(position); + } + let child; + if (scrapView != null) { + child = this.mAdapter.getView(position, scrapView, this); + if (child != scrapView) { + this.mRecycler.addScrapView(scrapView, position); + if (this.mCacheColorHint != 0) { + child.setDrawingCacheBackgroundColor(this.mCacheColorHint); + } } else { - this.stopMarquee(); + isScrap[0] = true; + child.dispatchFinishTemporaryDetach(); } } - } - onTouchEvent(event) { - const action = event.getActionMasked(); - const superResult = super.onTouchEvent(event); - const touchIsFinished = (action == MotionEvent.ACTION_UP) - && this.isFocused(); - if ((this.mMovement != null || this.onCheckIsTextEditor()) && this.isEnabled() && Spannable.isImpl(this.mText) && this.mLayout != null) { - let handled = false; - if (this.mMovement != null) { - handled = this.mMovement.onTouchEvent(this, this.mText, event) || handled; - } - if (handled) { - return true; + else { + child = this.mAdapter.getView(position, null, this); + if (this.mCacheColorHint != 0) { + child.setDrawingCacheBackgroundColor(this.mCacheColorHint); } } - return superResult; - } - onGenericMotionEvent(event) { - if (this.mMovement != null && Spannable.isImpl(this.mText) && this.mLayout != null) { - try { - if (this.mMovement.onGenericMotionEvent(this, this.mText, event)) { - return true; - } - } - catch (e) { + if (this.mAdapterHasStableIds) { + const vlp = child.getLayoutParams(); + let lp; + if (vlp == null) { + lp = this.generateDefaultLayoutParams(); } - } - return super.onGenericMotionEvent(event); - } - isTextEditable() { - return false; - } - didTouchFocusSelect() { - return false; - } - cancelLongPress() { - super.cancelLongPress(); - } - setScroller(s) { - this.mScroller = s; - } - getLeftFadingEdgeStrength() { - if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { - if (this.mMarquee != null && !this.mMarquee.isStopped()) { - const marquee = this.mMarquee; - if (marquee.shouldDrawLeftFade()) { - const scroll = marquee.getScroll(); - return scroll / this.getHorizontalFadingEdgeLength(); - } - else { - return 0.0; - } + else if (!this.checkLayoutParams(vlp)) { + lp = this.generateLayoutParams(vlp); } - else if (this.getLineCount() == 1) { - const absoluteGravity = this.mGravity; - switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { - case Gravity.LEFT: - return 0.0; - case Gravity.RIGHT: - return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength(); - case Gravity.CENTER_HORIZONTAL: - case Gravity.FILL_HORIZONTAL: - const textDirection = this.mLayout.getParagraphDirection(0); - if (textDirection == Layout.DIR_LEFT_TO_RIGHT) { - return 0.0; - } - else { - return (this.mLayout.getLineRight(0) - (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight() - this.mLayout.getLineLeft(0)) / this.getHorizontalFadingEdgeLength(); - } - } + else { + lp = vlp; } + lp.itemId = this.mAdapter.getItemId(position); + child.setLayoutParams(lp); } - return super.getLeftFadingEdgeStrength(); + return child; } - getRightFadingEdgeStrength() { - if (this.mEllipsize == TextUtils.TruncateAt.MARQUEE && this.mMarqueeFadeMode != TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { - if (this.mMarquee != null && !this.mMarquee.isStopped()) { - const marquee = this.mMarquee; - const maxFadeScroll = marquee.getMaxFadeScroll(); - const scroll = marquee.getScroll(); - return (maxFadeScroll - scroll) / this.getHorizontalFadingEdgeLength(); - } - else if (this.getLineCount() == 1) { - const absoluteGravity = this.mGravity; - switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { - case Gravity.LEFT: - const textWidth = (this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight(); - const lineWidth = this.mLayout.getLineWidth(0); - return (lineWidth - textWidth) / this.getHorizontalFadingEdgeLength(); - case Gravity.RIGHT: - return 0.0; - case Gravity.CENTER_HORIZONTAL: - case Gravity.FILL_HORIZONTAL: - const textDirection = this.mLayout.getParagraphDirection(0); - if (textDirection == Layout.DIR_RIGHT_TO_LEFT) { - return 0.0; - } - else { - return (this.mLayout.getLineWidth(0) - ((this.mRight - this.mLeft) - this.getCompoundPaddingLeft() - this.getCompoundPaddingRight())) / this.getHorizontalFadingEdgeLength(); - } + positionSelector(...args) { + if (args.length === 4) { + let [l, t, r, b] = args; + this.mSelectorRect.set(l - this.mSelectionLeftPadding, t - this.mSelectionTopPadding, r + this.mSelectionRightPadding, b + this.mSelectionBottomPadding); + } + else { + let position = args[0]; + let sel = args[1]; + if (position != AbsListView.INVALID_POSITION) { + this.mSelectorPosition = position; + } + const selectorRect = this.mSelectorRect; + selectorRect.set(sel.getLeft(), sel.getTop(), sel.getRight(), sel.getBottom()); + if (sel['adjustListItemSelectionBounds']) { + sel.adjustListItemSelectionBounds(selectorRect); + } + this.positionSelector(selectorRect.left, selectorRect.top, selectorRect.right, selectorRect.bottom); + const isChildViewEnabled = this.mIsChildViewEnabled; + if (sel.isEnabled() != isChildViewEnabled) { + this.mIsChildViewEnabled = !isChildViewEnabled; + if (this.getSelectedItemPosition() != AbsListView.INVALID_POSITION) { + this.refreshDrawableState(); } } } - return super.getRightFadingEdgeStrength(); - } - computeHorizontalScrollRange() { - if (this.mLayout != null) { - return this.mSingleLine && (this.mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT ? Math.floor(this.mLayout.getLineWidth(0)) : this.mLayout.getWidth(); - } - return super.computeHorizontalScrollRange(); - } - computeVerticalScrollRange() { - if (this.mLayout != null) - return this.mLayout.getHeight(); - return super.computeVerticalScrollRange(); - } - computeVerticalScrollExtent() { - return this.getHeight() - this.getCompoundPaddingTop() - this.getCompoundPaddingBottom(); } - static getTextColors() { - return android.R.attr.textViewStyle.textColor; - } - static getTextColor(def) { - let colors = this.getTextColors(); - if (colors == null) { - return def; + dispatchDraw(canvas) { + let saveCount = 0; + const clipToPadding = (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK; + if (clipToPadding) { + saveCount = canvas.save(); + const scrollX = this.mScrollX; + const scrollY = this.mScrollY; + canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom); + this.mGroupFlags &= ~AbsListView.CLIP_TO_PADDING_MASK; } - else { - return colors.getDefaultColor(); + const drawSelectorOnTop = this.mDrawSelectorOnTop; + if (!drawSelectorOnTop) { + this.drawSelector(canvas); } - } - canSelectText() { - return false; - } - textCanBeSelected() { - return false; - } - getTransformedText(start, end) { - return this.removeSuggestionSpans(this.mTransformed.substring(start, end)); - } - performLongClick() { - let handled = false; - if (super.performLongClick()) { - handled = true; + super.dispatchDraw(canvas); + if (drawSelectorOnTop) { + this.drawSelector(canvas); } - if (handled) { - this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + if (clipToPadding) { + canvas.restoreToCount(saveCount); + this.mGroupFlags |= AbsListView.CLIP_TO_PADDING_MASK; } - return handled; - } - isSuggestionsEnabled() { - return false; - } - setCustomSelectionActionModeCallback(actionModeCallback) { - this.createEditorIfNeeded(); } - getCustomSelectionActionModeCallback() { - return null; + isPaddingOffsetRequired() { + return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) != AbsListView.CLIP_TO_PADDING_MASK; } - stopSelectionActionMode() { + getLeftPaddingOffset() { + return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingLeft; } - canCut() { - return false; + getTopPaddingOffset() { + return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingTop; } - canCopy() { - return true; + getRightPaddingOffset() { + return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingRight; } - canPaste() { - return false; + getBottomPaddingOffset() { + return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingBottom; } - selectAllText() { - return false; + onSizeChanged(w, h, oldw, oldh) { + if (this.getChildCount() > 0) { + this.mDataChanged = true; + this.rememberSyncState(); + } } - getOffsetForPosition(x, y) { - if (this.getLayout() == null) - return -1; - const line = this.getLineAtCoordinate(y); - const offset = this.getOffsetAtCoordinate(line, x); - return offset; + touchModeDrawsInPressedState() { + switch (this.mTouchMode) { + case AbsListView.TOUCH_MODE_TAP: + case AbsListView.TOUCH_MODE_DONE_WAITING: + return true; + default: + return false; + } } - convertToLocalHorizontalCoordinate(x) { - x -= this.getTotalPaddingLeft(); - x = Math.max(0.0, x); - x = Math.min(this.getWidth() - this.getTotalPaddingRight() - 1, x); - x += this.getScrollX(); - return x; + shouldShowSelector() { + return (!this.isInTouchMode()) || (this.touchModeDrawsInPressedState() && this.isPressed()); } - getLineAtCoordinate(y) { - y -= this.getTotalPaddingTop(); - y = Math.max(0.0, y); - y = Math.min(this.getHeight() - this.getTotalPaddingBottom() - 1, y); - y += this.getScrollY(); - return this.getLayout().getLineForVertical(Math.floor(y)); + drawSelector(canvas) { + if (!this.mSelectorRect.isEmpty()) { + const selector = this.mSelector; + selector.setBounds(this.mSelectorRect); + selector.draw(canvas); + } } - getOffsetAtCoordinate(line, x) { - x = this.convertToLocalHorizontalCoordinate(x); - return this.getLayout().getOffsetForHorizontal(line, x); + setDrawSelectorOnTop(onTop) { + this.mDrawSelectorOnTop = onTop; } - isInBatchEditMode() { - return false; + setSelector(sel) { + if (this.mSelector != null) { + this.mSelector.setCallback(null); + this.unscheduleDrawable(this.mSelector); + } + this.mSelector = sel; + let padding = new Rect(); + sel.getPadding(padding); + this.mSelectionLeftPadding = padding.left; + this.mSelectionTopPadding = padding.top; + this.mSelectionRightPadding = padding.right; + this.mSelectionBottomPadding = padding.bottom; + sel.setCallback(this); + this.updateSelectorState(); } - getTextDirectionHeuristic() { - return TextDirectionHeuristics.LTR; + getSelector() { + return this.mSelector; } - onResolveDrawables(layoutDirection) { - if (this.mLastLayoutDirection == layoutDirection) { + keyPressed() { + if (!this.isEnabled() || !this.isClickable()) { return; } - this.mLastLayoutDirection = layoutDirection; - if (this.mDrawables != null) { - this.mDrawables.resolveWithLayoutDirection(layoutDirection); + let selector = this.mSelector; + let selectorRect = this.mSelectorRect; + if (selector != null && (this.isFocused() || this.touchModeDrawsInPressedState()) && !selectorRect.isEmpty()) { + const v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); + if (v != null) { + if (v.hasFocusable()) + return; + v.setPressed(true); + } + this.setPressed(true); + const longClickable = this.isLongClickable(); + let d = selector.getCurrent(); + if (longClickable && !this.mDataChanged) { + if (this.mPendingCheckForKeyLongPress == null) { + this.mPendingCheckForKeyLongPress = new AbsListView.CheckForKeyLongPress(this); + } + this.mPendingCheckForKeyLongPress.rememberWindowAttachCount(); + this.postDelayed(this.mPendingCheckForKeyLongPress, ViewConfiguration.getLongPressTimeout()); + } } } - resetResolvedDrawables() { - this.mLastLayoutDirection = -1; - } - deleteText_internal(start, end) { - } - replaceText_internal(start, end, text) { - } - setSpan_internal(span, start, end, flags) { - } - setCursorPosition_internal(start, end) { - } - createEditorIfNeeded() { + setScrollIndicators(up, down) { + this.mScrollUp = up; + this.mScrollDown = down; } - } - TextView.LOG_TAG = "TextView"; - TextView.DEBUG_EXTRACT = false; - TextView.SANS = 1; - TextView.SERIF = 2; - TextView.MONOSPACE = 3; - TextView.SIGNED = 2; - TextView.DECIMAL = 4; - TextView.MARQUEE_FADE_NORMAL = 0; - TextView.MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS = 1; - TextView.MARQUEE_FADE_SWITCH_SHOW_FADE = 2; - TextView.LINES = 1; - TextView.EMS = TextView.LINES; - TextView.PIXELS = 2; - TextView.TEMP_RECTF = new RectF(); - TextView.VERY_WIDE = 1024 * 1024; - TextView.ANIMATED_SCROLL_GAP = 250; - TextView.NO_FILTERS = new Array(0); - TextView.CHANGE_WATCHER_PRIORITY = 100; - TextView.MULTILINE_STATE_SET = [View.VIEW_STATE_MULTILINE]; - TextView.LAST_CUT_OR_COPY_TIME = 0; - TextView.UNKNOWN_BORING = new BoringLayout.Metrics(); - widget.TextView = TextView; - (function (TextView) { - class Drawables { - constructor(context) { - this.mCompoundRect = new Rect(); - this.mDrawableSizeTop = 0; - this.mDrawableSizeBottom = 0; - this.mDrawableSizeLeft = 0; - this.mDrawableSizeRight = 0; - this.mDrawableSizeStart = 0; - this.mDrawableSizeEnd = 0; - this.mDrawableSizeError = 0; - this.mDrawableSizeTemp = 0; - this.mDrawableWidthTop = 0; - this.mDrawableWidthBottom = 0; - this.mDrawableHeightLeft = 0; - this.mDrawableHeightRight = 0; - this.mDrawableHeightStart = 0; - this.mDrawableHeightEnd = 0; - this.mDrawableHeightError = 0; - this.mDrawableHeightTemp = 0; - this.mDrawablePadding = 0; - this.mDrawableSaved = Drawables.DRAWABLE_NONE; - this.mIsRtlCompatibilityMode = false; - this.mOverride = false; - } - resolveWithLayoutDirection(layoutDirection) { - this.mDrawableLeft = this.mDrawableLeftInitial; - this.mDrawableRight = this.mDrawableRightInitial; - if (this.mOverride) { - this.mDrawableLeft = this.mDrawableStart; - this.mDrawableSizeLeft = this.mDrawableSizeStart; - this.mDrawableHeightLeft = this.mDrawableHeightStart; - this.mDrawableRight = this.mDrawableEnd; - this.mDrawableSizeRight = this.mDrawableSizeEnd; - this.mDrawableHeightRight = this.mDrawableHeightEnd; - } - this.applyErrorDrawableIfNeeded(layoutDirection); - this.updateDrawablesLayoutDirection(layoutDirection); - } - updateDrawablesLayoutDirection(layoutDirection) { - } - setErrorDrawable(dr, tv) { - if (this.mDrawableError != dr && this.mDrawableError != null) { - this.mDrawableError.setCallback(null); - } - this.mDrawableError = dr; - const compoundRect = this.mCompoundRect; - let state = tv.getDrawableState(); - if (this.mDrawableError != null) { - this.mDrawableError.setState(state); - this.mDrawableError.copyBounds(compoundRect); - this.mDrawableError.setCallback(tv); - this.mDrawableSizeError = compoundRect.width(); - this.mDrawableHeightError = compoundRect.height(); + updateSelectorState() { + if (this.mSelector != null) { + if (this.shouldShowSelector()) { + this.mSelector.setState(this.getDrawableState()); } else { - this.mDrawableSizeError = this.mDrawableHeightError = 0; - } - } - applyErrorDrawableIfNeeded(layoutDirection) { - switch (this.mDrawableSaved) { - case Drawables.DRAWABLE_LEFT: - this.mDrawableLeft = this.mDrawableTemp; - this.mDrawableSizeLeft = this.mDrawableSizeTemp; - this.mDrawableHeightLeft = this.mDrawableHeightTemp; - break; - case Drawables.DRAWABLE_RIGHT: - this.mDrawableRight = this.mDrawableTemp; - this.mDrawableSizeRight = this.mDrawableSizeTemp; - this.mDrawableHeightRight = this.mDrawableHeightTemp; - break; - case Drawables.DRAWABLE_NONE: - default: + this.mSelector.setState(StateSet.NOTHING); } - this.mDrawableSaved = Drawables.DRAWABLE_RIGHT; - this.mDrawableTemp = this.mDrawableRight; - this.mDrawableSizeTemp = this.mDrawableSizeRight; - this.mDrawableHeightTemp = this.mDrawableHeightRight; - this.mDrawableRight = this.mDrawableError; - this.mDrawableSizeRight = this.mDrawableSizeError; - this.mDrawableHeightRight = this.mDrawableHeightError; } } - Drawables.DRAWABLE_NONE = -1; - Drawables.DRAWABLE_RIGHT = 0; - Drawables.DRAWABLE_LEFT = 1; - TextView.Drawables = Drawables; - class Marquee extends Handler { - constructor(v) { - super(); - this.mStatus = Marquee.MARQUEE_STOPPED; - this.mScrollUnit = 0; - this.mMaxScroll = 0; - this.mMaxFadeScroll = 0; - this.mGhostStart = 0; - this.mGhostOffset = 0; - this.mFadeStop = 0; - this.mRepeatLimit = 0; - this.mScroll = 0; - const density = v.getResources().getDisplayMetrics().density; - this.mScrollUnit = (Marquee.MARQUEE_PIXELS_PER_SECOND * density) / Marquee.MARQUEE_RESOLUTION; - this.mView = new WeakReference(v); - } - handleMessage(msg) { - switch (msg.what) { - case Marquee.MESSAGE_START: - this.mStatus = Marquee.MARQUEE_RUNNING; - this.tick(); - break; - case Marquee.MESSAGE_TICK: - this.tick(); - break; - case Marquee.MESSAGE_RESTART: - if (this.mStatus == Marquee.MARQUEE_RUNNING) { - if (this.mRepeatLimit >= 0) { - this.mRepeatLimit--; - } - this.start(this.mRepeatLimit); - } - break; - } + drawableStateChanged() { + super.drawableStateChanged(); + this.updateSelectorState(); + } + onCreateDrawableState(extraSpace) { + if (this.mIsChildViewEnabled) { + return super.onCreateDrawableState(extraSpace); } - tick() { - if (this.mStatus != Marquee.MARQUEE_RUNNING) { - return; - } - this.removeMessages(Marquee.MESSAGE_TICK); - const textView = this.mView.get(); - if (textView != null && (textView.isFocused() || textView.isSelected())) { - this.mScroll += this.mScrollUnit; - if (this.mScroll > this.mMaxScroll) { - this.mScroll = this.mMaxScroll; - this.sendEmptyMessageDelayed(Marquee.MESSAGE_RESTART, Marquee.MARQUEE_RESTART_DELAY); - } - else { - this.sendEmptyMessageDelayed(Marquee.MESSAGE_TICK, Marquee.MARQUEE_RESOLUTION); - } - textView.invalidate(); + const enabledState = AbsListView.ENABLED_STATE_SET[0]; + let state = super.onCreateDrawableState(extraSpace + 1); + let enabledPos = -1; + for (let i = state.length - 1; i >= 0; i--) { + if (state[i] == enabledState) { + enabledPos = i; + break; } } - stop() { - this.mStatus = Marquee.MARQUEE_STOPPED; - this.removeMessages(Marquee.MESSAGE_START); - this.removeMessages(Marquee.MESSAGE_RESTART); - this.removeMessages(Marquee.MESSAGE_TICK); - this.resetScroll(); - } - resetScroll() { - this.mScroll = 0.0; - const textView = this.mView.get(); - if (textView != null) - textView.invalidate(); - } - start(repeatLimit) { - if (repeatLimit == 0) { - this.stop(); - return; - } - this.mRepeatLimit = repeatLimit; - const textView = this.mView.get(); - if (textView != null && textView.mLayout != null) { - this.mStatus = Marquee.MARQUEE_STARTING; - this.mScroll = 0.0; - const textWidth = textView.getWidth() - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight(); - const lineWidth = textView.mLayout.getLineWidth(0); - const gap = textWidth / 3.0; - this.mGhostStart = lineWidth - textWidth + gap; - this.mMaxScroll = this.mGhostStart + textWidth; - this.mGhostOffset = lineWidth + gap; - this.mFadeStop = lineWidth + textWidth / 6.0; - this.mMaxFadeScroll = this.mGhostStart + lineWidth + lineWidth; - textView.invalidate(); - this.sendEmptyMessageDelayed(Marquee.MESSAGE_START, Marquee.MARQUEE_DELAY); - } + if (enabledPos >= 0) { + System.arraycopy(state, enabledPos + 1, state, enabledPos, state.length - enabledPos - 1); } - getGhostOffset() { - return this.mGhostOffset; + return state; + } + verifyDrawable(dr) { + return this.mSelector == dr || super.verifyDrawable(dr); + } + jumpDrawablesToCurrentState() { + super.jumpDrawablesToCurrentState(); + if (this.mSelector != null) + this.mSelector.jumpToCurrentState(); + } + onAttachedToWindow() { + super.onAttachedToWindow(); + const treeObserver = this.getViewTreeObserver(); + treeObserver.addOnTouchModeChangeListener(this); + if (this.mAdapter != null && this.mDataSetObserver == null) { + this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this); + this.mAdapter.registerDataSetObserver(this.mDataSetObserver); + this.mDataChanged = true; + this.mOldItemCount = this.mItemCount; + this.mItemCount = this.mAdapter.getCount(); } - getScroll() { - return this.mScroll; + } + onDetachedFromWindow() { + super.onDetachedFromWindow(); + this.dismissPopup(); + this.mRecycler.clear(); + const treeObserver = this.getViewTreeObserver(); + treeObserver.removeOnTouchModeChangeListener(this); + if (this.mAdapter != null && this.mDataSetObserver != null) { + this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver); + this.mDataSetObserver = null; } - getMaxFadeScroll() { - return this.mMaxFadeScroll; + if (this.mFlingRunnable != null) { + this.removeCallbacks(this.mFlingRunnable); } - shouldDrawLeftFade() { - return this.mScroll <= this.mFadeStop; + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } - shouldDrawGhost() { - return this.mStatus == Marquee.MARQUEE_RUNNING && this.mScroll > this.mGhostStart; + if (this.mClearScrollingCache != null) { + this.removeCallbacks(this.mClearScrollingCache); } - isRunning() { - return this.mStatus == Marquee.MARQUEE_RUNNING; + if (this.mPerformClick_ != null) { + this.removeCallbacks(this.mPerformClick_); } - isStopped() { - return this.mStatus == Marquee.MARQUEE_STOPPED; + if (this.mTouchModeReset != null) { + this.removeCallbacks(this.mTouchModeReset); + this.mTouchModeReset.run(); } } - Marquee.MARQUEE_DELTA_MAX = 0.07; - Marquee.MARQUEE_DELAY = 1200; - Marquee.MARQUEE_RESTART_DELAY = 1200; - Marquee.MARQUEE_RESOLUTION = 1000 / 30; - Marquee.MARQUEE_PIXELS_PER_SECOND = 30; - Marquee.MARQUEE_STOPPED = 0x0; - Marquee.MARQUEE_STARTING = 0x1; - Marquee.MARQUEE_RUNNING = 0x2; - Marquee.MESSAGE_START = 0x1; - Marquee.MESSAGE_TICK = 0x2; - Marquee.MESSAGE_RESTART = 0x3; - TextView.Marquee = Marquee; - class ChangeWatcher { - constructor(arg) { - this._TextView_this = arg; + onWindowFocusChanged(hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + const touchMode = this.isInTouchMode() ? AbsListView.TOUCH_MODE_ON : AbsListView.TOUCH_MODE_OFF; + if (!hasWindowFocus) { + this.setChildrenDrawingCacheEnabled(false); + if (this.mFlingRunnable != null) { + this.removeCallbacks(this.mFlingRunnable); + this.mFlingRunnable.endFling(); + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); + } + if (this.mScrollY != 0) { + this.mScrollY = 0; + this.invalidateParentCaches(); + this.finishGlows(); + this.invalidate(); + } + } + this.dismissPopup(); + if (touchMode == AbsListView.TOUCH_MODE_OFF) { + this.mResurrectToPosition = this.mSelectedPosition; + } + } + else { + if (this.mFiltered && !this.mPopupHidden) { + this.showPopup(); + } + if (touchMode != this.mLastTouchMode && this.mLastTouchMode != AbsListView.TOUCH_MODE_UNKNOWN) { + if (touchMode == AbsListView.TOUCH_MODE_OFF) { + this.resurrectSelection(); + } + else { + this.hideSelector(); + this.mLayoutMode = AbsListView.LAYOUT_NORMAL; + this.layoutChildren(); + } + } } - beforeTextChanged(buffer, start, before, after) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "beforeTextChanged start=" + start + " before=" + before + " after=" + after + ": " + buffer); - this._TextView_this.sendBeforeTextChanged(buffer, start, before, after); + this.mLastTouchMode = touchMode; + } + onCancelPendingInputEvents() { + super.onCancelPendingInputEvents(); + if (this.mPerformClick_ != null) { + this.removeCallbacks(this.mPerformClick_); } - onTextChanged(buffer, start, before, after) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "onTextChanged start=" + start + " before=" + before + " after=" + after + ": " + buffer); - this._TextView_this.handleTextChanged(buffer, start, before, after); + if (this.mPendingCheckForTap_ != null) { + this.removeCallbacks(this.mPendingCheckForTap_); } - afterTextChanged(buffer) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "afterTextChanged: " + buffer); - this._TextView_this.sendAfterTextChanged(buffer); + if (this.mPendingCheckForLongPress_List != null) { + this.removeCallbacks(this.mPendingCheckForLongPress_List); } - onSpanChanged(buf, what, s, e, st, en) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "onSpanChanged s=" + s + " e=" + e + " st=" + st + " en=" + en + " what=" + what + ": " + buf); - this._TextView_this.spanChange(buf, what, s, st, e, en); + if (this.mPendingCheckForKeyLongPress != null) { + this.removeCallbacks(this.mPendingCheckForKeyLongPress); } - onSpanAdded(buf, what, s, e) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "onSpanAdded s=" + s + " e=" + e + " what=" + what + ": " + buf); - this._TextView_this.spanChange(buf, what, -1, s, -1, e); + } + performLongPress(child, longPressPosition, longPressId) { + let handled = false; + if (this.mOnItemLongClickListener != null) { + handled = this.mOnItemLongClickListener.onItemLongClick(this, child, longPressPosition, longPressId); } - onSpanRemoved(buf, what, s, e) { - if (TextView.DEBUG_EXTRACT) - Log.v(TextView.LOG_TAG, "onSpanRemoved s=" + s + " e=" + e + " what=" + what + ": " + buf); - this._TextView_this.spanChange(buf, what, s, -1, e, -1); + if (handled) { + this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } + return handled; } - TextView.ChangeWatcher = ChangeWatcher; - (function (BufferType) { - BufferType[BufferType["NORMAL"] = 0] = "NORMAL"; - BufferType[BufferType["SPANNABLE"] = 1] = "SPANNABLE"; - BufferType[BufferType["EDITABLE"] = 2] = "EDITABLE"; - })(TextView.BufferType || (TextView.BufferType = {})); - var BufferType = TextView.BufferType; - })(TextView = widget.TextView || (widget.TextView = {})); - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - class Button extends widget.TextView { - constructor(context, bindElement, defStyle = android.R.attr.buttonStyle) { - super(context, bindElement, defStyle); - } - } - widget.Button = Button; - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var ListAdapter; - (function (ListAdapter) { - function isImpl(obj) { - return obj && obj['areAllItemsEnabled'] && obj['isEnabled']; - } - ListAdapter.isImpl = isImpl; - })(ListAdapter = widget.ListAdapter || (widget.ListAdapter = {})); - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var Rect = android.graphics.Rect; - var Log = android.util.Log; - var LongSparseArray = android.util.LongSparseArray; - var SparseArray = android.util.SparseArray; - var SparseBooleanArray = android.util.SparseBooleanArray; - var StateSet = android.util.StateSet; - var HapticFeedbackConstants = android.view.HapticFeedbackConstants; - var KeyEvent = android.view.KeyEvent; - var MotionEvent = android.view.MotionEvent; - var VelocityTracker = android.view.VelocityTracker; - var View = android.view.View; - var ViewConfiguration = android.view.ViewConfiguration; - var ViewGroup = android.view.ViewGroup; - var LinearInterpolator = android.view.animation.LinearInterpolator; - var ArrayList = java.util.ArrayList; - var Integer = java.lang.Integer; - var System = java.lang.System; - var AdapterView = android.widget.AdapterView; - var OverScroller = android.widget.OverScroller; - class AbsListView extends AdapterView { - constructor(context, bindElement, defStyle) { - super(context, bindElement, defStyle); - this.mChoiceMode = AbsListView.CHOICE_MODE_NONE; - this.mCheckedItemCount = 0; - this.mDeferNotifyDataSetChanged = false; - this.mDrawSelectorOnTop = false; - this.mSelectorPosition = AbsListView.INVALID_POSITION; - this.mSelectorRect = new Rect(); - this.mRecycler = new AbsListView.RecycleBin(this); - this.mSelectionLeftPadding = 0; - this.mSelectionTopPadding = 0; - this.mSelectionRightPadding = 0; - this.mSelectionBottomPadding = 0; - this.mListPadding = new Rect(); - this.mWidthMeasureSpec = 0; - this.mMotionPosition = 0; - this.mMotionViewOriginalTop = 0; - this.mMotionViewNewTop = 0; - this.mMotionX = 0; - this.mMotionY = 0; - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.mLastY = 0; - this.mMotionCorrection = 0; - this.mSelectedTop = 0; - this.mSmoothScrollbarEnabled = true; - this.mResurrectToPosition = AbsListView.INVALID_POSITION; - this.mOverscrollMax = 0; - this.mLastTouchMode = AbsListView.TOUCH_MODE_UNKNOWN; - this.mScrollProfilingStarted = false; - this.mFlingProfilingStarted = false; - this.mTranscriptMode = 0; - this.mCacheColorHint = 0; - this.mLastScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE; - this.mDensityScale = 0; - this.mMinimumVelocity = 0; - this.mMaximumVelocity = 0; - this.mVelocityScale = 1.0; - this.mIsScrap = new Array(1); - this.mActivePointerId = AbsListView.INVALID_POINTER; - this.mOverscrollDistance = 0; - this._mOverflingDistance = 0; - this.mFirstPositionDistanceGuess = 0; - this.mLastPositionDistanceGuess = 0; - this.mDirection = 0; - this.mGlowPaddingLeft = 0; - this.mGlowPaddingRight = 0; - this.mLastHandledItemCount = 0; - this.initAbsListView(); - this.setVerticalScrollBarEnabled(true); - this.initializeScrollbars(); - this._attrBinder.addAttr('listSelector', (value) => { - let d = this._attrBinder.parseDrawable(value); - if (d) - this.setSelector(d); - }); - this._attrBinder.addAttr('drawSelectorOnTop', (value) => { - this.mDrawSelectorOnTop = this._attrBinder.parseBoolean(value, false); - }); - this._attrBinder.addAttr('stackFromBottom', (value) => { - this.setStackFromBottom(this._attrBinder.parseBoolean(value, false)); - }); - this._attrBinder.addAttr('scrollingCache', (value) => { - this.setScrollingCacheEnabled(this._attrBinder.parseBoolean(value, true)); - }); - this._attrBinder.addAttr('transcriptMode', (value) => { - this.setTranscriptMode(this._attrBinder.parseEnum(value, new Map() - .set("disabled", AbsListView.TRANSCRIPT_MODE_DISABLED) - .set("normal", AbsListView.TRANSCRIPT_MODE_NORMAL) - .set("alwaysScroll", AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL), AbsListView.TRANSCRIPT_MODE_DISABLED)); - }); - this._attrBinder.addAttr('cacheColorHint', (value) => { - let color = this._attrBinder.parseColor(value, 0); - this.setCacheColorHint(color); - }); - this._attrBinder.addAttr('fastScrollEnabled', (value) => { - let enableFastScroll = this._attrBinder.parseBoolean(value, false); - this.setFastScrollEnabled(enableFastScroll); - }); - this._attrBinder.addAttr('fastScrollAlwaysVisible', (value) => { - let fastScrollAlwaysVisible = this._attrBinder.parseBoolean(value, false); - this.setFastScrollAlwaysVisible(fastScrollAlwaysVisible); - }); - this._attrBinder.addAttr('smoothScrollbar', (value) => { - let smoothScrollbar = this._attrBinder.parseBoolean(value, true); - this.setSmoothScrollbarEnabled(smoothScrollbar); - }); - this._attrBinder.addAttr('choiceMode', (value) => { - this.setChoiceMode(this._attrBinder.parseEnum(value, new Map() - .set("none", AbsListView.CHOICE_MODE_NONE) - .set("singleChoice", AbsListView.CHOICE_MODE_SINGLE) - .set("multipleChoice", AbsListView.CHOICE_MODE_MULTIPLE), AbsListView.CHOICE_MODE_NONE)); - }); + onKeyDown(keyCode, event) { + return false; } - get mOverflingDistance() { - if (this.mScrollY <= 0) { - if (this.mScrollY < -this._mOverflingDistance) - return -this.mScrollY; - return this._mOverflingDistance; + onKeyUp(keyCode, event) { + if (KeyEvent.isConfirmKey(keyCode)) { + if (!this.isEnabled()) { + return true; + } + if (this.isClickable() && this.isPressed() && this.mSelectedPosition >= 0 + && this.mAdapter != null && this.mSelectedPosition < this.mAdapter.getCount()) { + const view = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); + if (view != null) { + this.performItemClick(view, this.mSelectedPosition, this.mSelectedRowId); + view.setPressed(false); + } + this.setPressed(false); + return true; + } } - let overDistance = this.mScrollY; - if (overDistance > this._mOverflingDistance) - return overDistance; - return this._mOverflingDistance; - } - set mOverflingDistance(value) { - this._mOverflingDistance = value; + return super.onKeyUp(keyCode, event); } - initAbsListView() { - this.setClickable(true); - this.setFocusableInTouchMode(true); - this.setWillNotDraw(false); - this.setAlwaysDrawnWithCacheEnabled(false); - this.setScrollingCacheEnabled(true); - const configuration = ViewConfiguration.get(); - this.mTouchSlop = configuration.getScaledTouchSlop(); - this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); - this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); - this.mOverscrollDistance = configuration.getScaledOverscrollDistance(); - this.mOverflingDistance = configuration.getScaledOverflingDistance(); - this.mDensityScale = android.content.res.Resources.getDisplayMetrics().density; - this.mLayoutMode = AbsListView.LAYOUT_NORMAL; + dispatchSetPressed(pressed) { } - setOverScrollMode(mode) { - if (mode != AbsListView.OVER_SCROLL_NEVER) { - } - else { + pointToPosition(x, y) { + let frame = this.mTouchFrame; + if (frame == null) { + this.mTouchFrame = new Rect(); + frame = this.mTouchFrame; } - super.setOverScrollMode(mode); - } - setAdapter(adapter) { - if (adapter != null) { - this.mAdapterHasStableIds = this.mAdapter.hasStableIds(); - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapterHasStableIds && this.mCheckedIdStates == null) { - this.mCheckedIdStates = new LongSparseArray(); + const count = this.getChildCount(); + for (let i = count - 1; i >= 0; i--) { + const child = this.getChildAt(i); + if (child.getVisibility() == View.VISIBLE) { + child.getHitRect(frame); + if (frame.contains(x, y)) { + return this.mFirstPosition + i; + } } } - if (this.mCheckStates != null) { - this.mCheckStates.clear(); - } - if (this.mCheckedIdStates != null) { - this.mCheckedIdStates.clear(); + return AbsListView.INVALID_POSITION; + } + pointToRowId(x, y) { + let position = this.pointToPosition(x, y); + if (position >= 0) { + return this.mAdapter.getItemId(position); } + return AbsListView.INVALID_ROW_ID; } - getCheckedItemCount() { - return this.mCheckedItemCount; + checkOverScrollStartScrollIfNeeded() { + return this.mScrollY != 0; } - isItemChecked(position) { - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mCheckStates != null) { - return this.mCheckStates.get(position); + startScrollIfNeeded(y) { + const deltaY = y - this.mMotionY; + const distance = Math.abs(deltaY); + const overscroll = this.checkOverScrollStartScrollIfNeeded(); + if (overscroll || distance > this.mTouchSlop) { + this.createScrollingCache(); + if (this.mScrollY != 0) { + this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; + this.mMotionCorrection = 0; + } + else { + this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; + this.mMotionCorrection = deltaY > 0 ? this.mTouchSlop : -this.mTouchSlop; + } + this.removeCallbacks(this.mPendingCheckForLongPress_List); + this.setPressed(false); + const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); + if (motionView != null) { + motionView.setPressed(false); + } + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL); + const parent = this.getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + this.scrollIfNeeded(y); + return true; } return false; } - getCheckedItemPosition() { - if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE && this.mCheckStates != null && this.mCheckStates.size() == 1) { - return this.mCheckStates.keyAt(0); + scrollIfNeeded(y) { + const rawDeltaY = y - this.mMotionY; + const deltaY = rawDeltaY - this.mMotionCorrection; + let incrementalDeltaY = this.mLastY != Integer.MIN_VALUE ? y - this.mLastY : deltaY; + if (this.mTouchMode == AbsListView.TOUCH_MODE_SCROLL) { + if (AbsListView.PROFILE_SCROLLING) { + if (!this.mScrollProfilingStarted) { + this.mScrollProfilingStarted = true; + } + } + if (y != this.mLastY) { + if ((this.mGroupFlags & AbsListView.FLAG_DISALLOW_INTERCEPT) == 0 && Math.abs(rawDeltaY) > this.mTouchSlop) { + const parent = this.getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + } + let motionIndex; + if (this.mMotionPosition >= 0) { + motionIndex = this.mMotionPosition - this.mFirstPosition; + } + else { + motionIndex = this.getChildCount() / 2; + } + let motionViewPrevTop = 0; + let motionView = this.getChildAt(motionIndex); + if (motionView != null) { + motionViewPrevTop = motionView.getTop(); + } + let atEdge = false; + if (incrementalDeltaY != 0) { + atEdge = this.trackMotionScroll(deltaY, incrementalDeltaY); + } + motionView = this.getChildAt(motionIndex); + if (motionView != null) { + const motionViewRealTop = motionView.getTop(); + if (atEdge) { + let overscroll = -incrementalDeltaY - (motionViewRealTop - motionViewPrevTop); + this.overScrollBy(0, overscroll, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true); + if (Math.abs(this.mOverscrollDistance) == Math.abs(this.mScrollY)) { + if (this.mVelocityTracker != null) { + this.mVelocityTracker.clear(); + } + } + const overscrollMode = this.getOverScrollMode(); + if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this.contentFits())) { + this.mDirection = 0; + this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; + if (rawDeltaY > 0) { + } + else if (rawDeltaY < 0) { + } + } + } + this.mMotionY = y; + } + this.mLastY = y; + } } - return AbsListView.INVALID_POSITION; - } - getCheckedItemPositions() { - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { - return this.mCheckStates; + else if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERSCROLL) { + if (y != this.mLastY) { + const oldScroll = this.mScrollY; + const newScroll = oldScroll - incrementalDeltaY; + let newDirection = y > this.mLastY ? 1 : -1; + if (this.mDirection == 0) { + this.mDirection = newDirection; + } + let overScrollDistance = -incrementalDeltaY; + if ((newScroll < 0 && oldScroll >= 0) || (newScroll > 0 && oldScroll <= 0)) { + overScrollDistance = -oldScroll; + incrementalDeltaY += overScrollDistance; + } + else { + incrementalDeltaY = 0; + } + if (overScrollDistance != 0) { + this.overScrollBy(0, overScrollDistance, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true); + } + if (incrementalDeltaY != 0) { + if (this.mScrollY != 0) { + this.mScrollY = 0; + this.invalidateParentIfNeeded(); + } + this.trackMotionScroll(incrementalDeltaY, incrementalDeltaY); + this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; + const motionPosition = this.findClosestMotionRow(y); + this.mMotionCorrection = 0; + let motionView = this.getChildAt(motionPosition - this.mFirstPosition); + this.mMotionViewOriginalTop = motionView != null ? motionView.getTop() : 0; + this.mMotionY = y; + this.mMotionPosition = motionPosition; + } + this.mLastY = y; + this.mDirection = newDirection; + } } - return null; } - getCheckedItemIds() { - if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE || this.mCheckedIdStates == null || this.mAdapter == null) { - return [0]; + onTouchModeChanged(isInTouchMode) { + if (isInTouchMode) { + this.hideSelector(); + if (this.getHeight() > 0 && this.getChildCount() > 0) { + this.layoutChildren(); + } + this.updateSelectorState(); } - const idStates = this.mCheckedIdStates; - const count = idStates.size(); - const ids = [count]; - for (let i = 0; i < count; i++) { - ids[i] = idStates.keyAt(i); + else { + let touchMode = this.mTouchMode; + if (touchMode == AbsListView.TOUCH_MODE_OVERSCROLL || touchMode == AbsListView.TOUCH_MODE_OVERFLING) { + if (this.mFlingRunnable != null) { + this.mFlingRunnable.endFling(); + } + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); + } + if (this.mScrollY != 0) { + this.mScrollY = 0; + this.invalidateParentCaches(); + this.finishGlows(); + this.invalidate(); + } + } } - return ids; } - clearChoices() { - if (this.mCheckStates != null) { - this.mCheckStates.clear(); + onTouchEvent(ev) { + if (!this.isEnabled()) { + return this.isClickable() || this.isLongClickable(); } - if (this.mCheckedIdStates != null) { - this.mCheckedIdStates.clear(); + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } - this.mCheckedItemCount = 0; - } - setItemChecked(position, value) { - if (this.mChoiceMode == AbsListView.CHOICE_MODE_NONE) { - return; + if (!this.isAttachedToWindow()) { + return false; } - if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) { - let oldValue = this.mCheckStates.get(position); - this.mCheckStates.put(position, value); - if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { - if (value) { - this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + this.initVelocityTrackerIfNotExists(); + this.mVelocityTracker.addMovement(ev); + const actionMasked = ev.getActionMasked(); + switch (actionMasked) { + case MotionEvent.ACTION_DOWN: + { + this.onTouchDown(ev); + break; } - else { - this.mCheckedIdStates.delete(this.mAdapter.getItemId(position)); + case MotionEvent.ACTION_MOVE: + { + this.onTouchMove(ev); + break; } - } - if (oldValue != value) { - if (value) { - this.mCheckedItemCount++; + case MotionEvent.ACTION_UP: + { + this.onTouchUp(ev); + break; } - else { - this.mCheckedItemCount--; + case MotionEvent.ACTION_CANCEL: + { + this.onTouchCancel(); + break; + } + case MotionEvent.ACTION_POINTER_UP: + { + this.onSecondaryPointerUp(ev); + const x = this.mMotionX; + const y = this.mMotionY; + const motionPosition = this.pointToPosition(x, y); + if (motionPosition >= 0) { + const child = this.getChildAt(motionPosition - this.mFirstPosition); + this.mMotionViewOriginalTop = child.getTop(); + this.mMotionPosition = motionPosition; + } + this.mLastY = y; + break; + } + case MotionEvent.ACTION_POINTER_DOWN: + { + const index = ev.getActionIndex(); + const id = ev.getPointerId(index); + const x = Math.floor(ev.getX(index)); + const y = Math.floor(ev.getY(index)); + this.mMotionCorrection = 0; + this.mActivePointerId = id; + this.mMotionX = x; + this.mMotionY = y; + const motionPosition = this.pointToPosition(x, y); + if (motionPosition >= 0) { + const child = this.getChildAt(motionPosition - this.mFirstPosition); + this.mMotionViewOriginalTop = child.getTop(); + this.mMotionPosition = motionPosition; + } + this.mLastY = y; + break; } + } + return true; + } + onTouchDown(ev) { + this.mActivePointerId = ev.getPointerId(0); + if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERFLING) { + this.mFlingRunnable.endFling(); + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } + this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; + this.mMotionX = Math.floor(ev.getX()); + this.mMotionY = Math.floor(ev.getY()); + this.mLastY = this.mMotionY; + this.mMotionCorrection = 0; + this.mDirection = 0; } else { - let updateIds = this.mCheckedIdStates != null && this.mAdapter.hasStableIds(); - if (value || this.isItemChecked(position)) { - this.mCheckStates.clear(); - if (updateIds) { - this.mCheckedIdStates.clear(); + const x = Math.floor(ev.getX()); + const y = Math.floor(ev.getY()); + let motionPosition = this.pointToPosition(x, y); + if (!this.mDataChanged) { + if (this.mTouchMode == AbsListView.TOUCH_MODE_FLING) { + this.createScrollingCache(); + this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; + this.mMotionCorrection = 0; + motionPosition = this.findMotionRow(y); + this.mFlingRunnable.flywheelTouch(); } - } - if (value) { - this.mCheckStates.put(position, true); - if (updateIds) { - this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + else if ((motionPosition >= 0) && this.getAdapter().isEnabled(motionPosition)) { + this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; + if (this.mPendingCheckForTap_ == null) { + this.mPendingCheckForTap_ = new AbsListView.CheckForTap(this); + } + this.postDelayed(this.mPendingCheckForTap_, ViewConfiguration.getTapTimeout()); + } + else if (motionPosition < 0) { + this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; } - this.mCheckedItemCount = 1; } - else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) { - this.mCheckedItemCount = 0; + if (motionPosition >= 0) { + const v = this.getChildAt(motionPosition - this.mFirstPosition); + this.mMotionViewOriginalTop = v.getTop(); } + this.mMotionX = x; + this.mMotionY = y; + this.mMotionPosition = motionPosition; + this.mLastY = Integer.MIN_VALUE; } - if (!this.mInLayout && !this.mBlockLayoutRequests) { - this.mDataChanged = true; - this.rememberSyncState(); - this.requestLayout(); + if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN && this.mMotionPosition != AbsListView.INVALID_POSITION + && this.performButtonActionOnTouchDown(ev)) { + this.removeCallbacks(this.mPendingCheckForTap_); } } - performItemClick(view, position, id) { - let handled = false; - let dispatchItemClick = true; - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { - handled = true; - let checkedStateChanged = false; - if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL && this.mChoiceActionMode != null)) { - let checked = !this.mCheckStates.get(position, false); - this.mCheckStates.put(position, checked); - if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { - if (checked) { - this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); + onTouchMove(ev) { + let pointerIndex = ev.findPointerIndex(this.mActivePointerId); + if (pointerIndex == -1) { + pointerIndex = 0; + this.mActivePointerId = ev.getPointerId(pointerIndex); + } + if (this.mDataChanged) { + this.layoutChildren(); + } + const y = Math.floor(ev.getY(pointerIndex)); + switch (this.mTouchMode) { + case AbsListView.TOUCH_MODE_DOWN: + case AbsListView.TOUCH_MODE_TAP: + case AbsListView.TOUCH_MODE_DONE_WAITING: + if (this.startScrollIfNeeded(y)) { + break; + } + const x = ev.getX(pointerIndex); + if (!this.pointInView(x, y, this.mTouchSlop)) { + this.setPressed(false); + const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); + if (motionView != null) { + motionView.setPressed(false); } - else { - this.mCheckedIdStates.delete(this.mAdapter.getItemId(position)); + this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List); + this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; + this.updateSelectorState(); + } + break; + case AbsListView.TOUCH_MODE_SCROLL: + case AbsListView.TOUCH_MODE_OVERSCROLL: + this.scrollIfNeeded(y); + break; + } + } + onTouchUp(ev) { + switch (this.mTouchMode) { + case AbsListView.TOUCH_MODE_DOWN: + case AbsListView.TOUCH_MODE_TAP: + case AbsListView.TOUCH_MODE_DONE_WAITING: + const motionPosition = this.mMotionPosition; + const child = this.getChildAt(motionPosition - this.mFirstPosition); + if (child != null) { + if (this.mTouchMode != AbsListView.TOUCH_MODE_DOWN) { + child.setPressed(false); + } + const x = ev.getX(); + const inList = x > this.mListPadding.left && x < this.getWidth() - this.mListPadding.right; + if (inList && !child.hasFocusable()) { + if (this.mPerformClick_ == null) { + this.mPerformClick_ = new AbsListView.PerformClick(this); + } + const performClick = this.mPerformClick_; + performClick.mClickMotionPosition = motionPosition; + performClick.rememberWindowAttachCount(); + this.mResurrectToPosition = motionPosition; + if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN || this.mTouchMode == AbsListView.TOUCH_MODE_TAP) { + this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List); + this.mLayoutMode = AbsListView.LAYOUT_NORMAL; + if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) { + this.mTouchMode = AbsListView.TOUCH_MODE_TAP; + this.setSelectedPositionInt(this.mMotionPosition); + this.layoutChildren(); + child.setPressed(true); + this.positionSelector(this.mMotionPosition, child); + this.setPressed(true); + if (this.mSelector != null) { + let d = this.mSelector.getCurrent(); + } + if (this.mTouchModeReset != null) { + this.removeCallbacks(this.mTouchModeReset); + } + this.mTouchModeReset = (() => { + const inner_this = this; + class _Inner { + run() { + inner_this.mTouchModeReset = null; + inner_this.mTouchMode = AbsListView.TOUCH_MODE_REST; + child.setPressed(false); + inner_this.setPressed(false); + if (!inner_this.mDataChanged && inner_this.isAttachedToWindow()) { + performClick.run(); + } + } + } + return new _Inner(); + })(); + this.postDelayed(this.mTouchModeReset, ViewConfiguration.getPressedStateDuration()); + } + else { + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.updateSelectorState(); + } + return; + } + else if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) { + performClick.run(); + } } } - if (checked) { - this.mCheckedItemCount++; + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.updateSelectorState(); + break; + case AbsListView.TOUCH_MODE_SCROLL: + const childCount = this.getChildCount(); + if (childCount > 0) { + const firstChildTop = this.getChildAt(0).getTop(); + const lastChildBottom = this.getChildAt(childCount - 1).getBottom(); + const contentTop = this.mListPadding.top; + const contentBottom = this.getHeight() - this.mListPadding.bottom; + if (this.mFirstPosition == 0 && firstChildTop >= contentTop && this.mFirstPosition + childCount < this.mItemCount + && lastChildBottom <= this.getHeight() - contentBottom) { + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + } + else { + const velocityTracker = this.mVelocityTracker; + velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); + const initialVelocity = Math.floor((velocityTracker.getYVelocity(this.mActivePointerId) * this.mVelocityScale)); + if (Math.abs(initialVelocity) > this.mMinimumVelocity + && !((this.mFirstPosition == 0 && firstChildTop == contentTop - this.mOverscrollDistance) + || (this.mFirstPosition + childCount == this.mItemCount + && lastChildBottom == contentBottom + this.mOverscrollDistance))) { + if (this.mFlingRunnable == null) { + this.mFlingRunnable = new AbsListView.FlingRunnable(this); + } + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); + this.mFlingRunnable.start(-initialVelocity); + } + else { + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + if (this.mFlingRunnable != null) { + this.mFlingRunnable.endFling(); + } + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); + } + } + } } else { - this.mCheckedItemCount--; + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); } - checkedStateChanged = true; - } - else if (this.mChoiceMode == AbsListView.CHOICE_MODE_SINGLE) { - let checked = !this.mCheckStates.get(position, false); - if (checked) { - this.mCheckStates.clear(); - this.mCheckStates.put(position, true); - if (this.mCheckedIdStates != null && this.mAdapter.hasStableIds()) { - this.mCheckedIdStates.clear(); - this.mCheckedIdStates.put(this.mAdapter.getItemId(position), position); - } - this.mCheckedItemCount = 1; + break; + case AbsListView.TOUCH_MODE_OVERSCROLL: + if (this.mFlingRunnable == null) { + this.mFlingRunnable = new AbsListView.FlingRunnable(this); } - else if (this.mCheckStates.size() == 0 || !this.mCheckStates.valueAt(0)) { - this.mCheckedItemCount = 0; + const velocityTracker = this.mVelocityTracker; + velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); + const initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId)); + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); + if (Math.abs(initialVelocity) > this.mMinimumVelocity) { + this.mFlingRunnable.startOverfling(-initialVelocity); } - checkedStateChanged = true; - } - if (checkedStateChanged) { - this.updateOnScreenCheckedViews(); - } - } - if (dispatchItemClick) { - handled = super.performItemClick(view, position, id) || handled; + else { + this.mFlingRunnable.startSpringback(); + } + break; } - return handled; - } - updateOnScreenCheckedViews() { - const firstPos = this.mFirstPosition; - const count = this.getChildCount(); - const useActivated = true; - for (let i = 0; i < count; i++) { - const child = this.getChildAt(i); - const position = firstPos + i; - if (child['setChecked']) { - child.setChecked(this.mCheckStates.get(position)); - } - else if (useActivated) { - child.setActivated(this.mCheckStates.get(position)); + this.setPressed(false); + this.invalidate(); + this.removeCallbacks(this.mPendingCheckForLongPress_List); + this.recycleVelocityTracker(); + this.mActivePointerId = AbsListView.INVALID_POINTER; + if (AbsListView.PROFILE_SCROLLING) { + if (this.mScrollProfilingStarted) { + this.mScrollProfilingStarted = false; } } } - getChoiceMode() { - return this.mChoiceMode; - } - setChoiceMode(choiceMode) { - this.mChoiceMode = choiceMode; - if (this.mChoiceActionMode != null) { - this.mChoiceActionMode.finish(); - this.mChoiceActionMode = null; - } - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE) { - if (this.mCheckStates == null) { - this.mCheckStates = new SparseBooleanArray(0); - } - if (this.mCheckedIdStates == null && this.mAdapter != null && this.mAdapter.hasStableIds()) { - this.mCheckedIdStates = new LongSparseArray(0); - } - if (this.mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) { - this.clearChoices(); - this.setLongClickable(true); - } + onTouchCancel() { + switch (this.mTouchMode) { + case AbsListView.TOUCH_MODE_OVERSCROLL: + if (this.mFlingRunnable == null) { + this.mFlingRunnable = new AbsListView.FlingRunnable(this); + } + this.mFlingRunnable.startSpringback(); + break; + case AbsListView.TOUCH_MODE_OVERFLING: + break; + default: + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.setPressed(false); + const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); + if (motionView != null) { + motionView.setPressed(false); + } + this.clearScrollingCache(); + this.removeCallbacks(this.mPendingCheckForLongPress_List); + this.recycleVelocityTracker(); } + this.mActivePointerId = AbsListView.INVALID_POINTER; } - contentFits() { - const childCount = this.getChildCount(); - if (childCount == 0) - return true; - if (childCount != this.mItemCount) - return false; - return this.getChildAt(0).getTop() >= this.mListPadding.top && this.getChildAt(childCount - 1).getBottom() <= this.getHeight() - this.mListPadding.bottom; - } - setFastScrollEnabled(enabled) { - if (this.mFastScrollEnabled != enabled) { - this.mFastScrollEnabled = enabled; - this.setFastScrollerEnabledUiThread(enabled); + onOverScrolled(scrollX, scrollY, clampedX, clampedY) { + if (this.mScrollY != scrollY) { + this.onScrollChanged(this.mScrollX, scrollY, this.mScrollX, this.mScrollY); + this.mScrollY = scrollY; + this.invalidateParentIfNeeded(); + this.awakenScrollBars(); } } - setFastScrollerEnabledUiThread(enabled) { - } - setFastScrollAlwaysVisible(alwaysShow) { - if (this.mFastScrollAlwaysVisible != alwaysShow) { - if (alwaysShow && !this.mFastScrollEnabled) { - this.setFastScrollEnabled(true); + onGenericMotionEvent(event) { + if (event.isPointerEvent()) { + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: + { + if (this.mTouchMode == AbsListView.TOUCH_MODE_REST) { + const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); + if (vscroll != 0) { + const delta = Math.floor((vscroll * this.getVerticalScrollFactor())); + if (!this.trackMotionScroll(delta, delta)) { + return true; + } + } + } + } } - this.mFastScrollAlwaysVisible = alwaysShow; - this.setFastScrollerAlwaysVisibleUiThread(alwaysShow); - } - } - setFastScrollerAlwaysVisibleUiThread(alwaysShow) { - } - isOwnerThread() { - return true; - } - isFastScrollAlwaysVisible() { - return false; - } - getVerticalScrollbarWidth() { - return super.getVerticalScrollbarWidth(); - } - isFastScrollEnabled() { - return false; - } - setVerticalScrollbarPosition(position) { - super.setVerticalScrollbarPosition(position); - } - setScrollBarStyle(style) { - super.setScrollBarStyle(style); - } - isVerticalScrollBarHidden() { - return this.isFastScrollEnabled(); - } - setSmoothScrollbarEnabled(enabled) { - this.mSmoothScrollbarEnabled = enabled; - } - isSmoothScrollbarEnabled() { - return this.mSmoothScrollbarEnabled; - } - setOnScrollListener(l) { - this.mOnScrollListener = l; - this.invokeOnItemScrollListener(); - } - invokeOnItemScrollListener() { - if (this.mOnScrollListener != null) { - this.mOnScrollListener.onScroll(this, this.mFirstPosition, this.getChildCount(), this.mItemCount); - } - this.onScrollChanged(0, 0, 0, 0); - } - isScrollingCacheEnabled() { - return this.mScrollingCacheEnabled; - } - setScrollingCacheEnabled(enabled) { - if (this.mScrollingCacheEnabled && !enabled) { - this.clearScrollingCache(); } - this.mScrollingCacheEnabled = enabled; + return super.onGenericMotionEvent(event); } - setTextFilterEnabled(textFilterEnabled) { - this.mTextFilterEnabled = textFilterEnabled; + draw(canvas) { + super.draw(canvas); } - isTextFilterEnabled() { - return this.mTextFilterEnabled; + setOverScrollEffectPadding(leftPadding, rightPadding) { + this.mGlowPaddingLeft = leftPadding; + this.mGlowPaddingRight = rightPadding; } - getFocusedRect(r) { - let view = this.getSelectedView(); - if (view != null && view.getParent() == this) { - view.getFocusedRect(r); - this.offsetDescendantRectToMyCoords(view, r); + initOrResetVelocityTracker() { + if (this.mVelocityTracker == null) { + this.mVelocityTracker = VelocityTracker.obtain(); } else { - super.getFocusedRect(r); + this.mVelocityTracker.clear(); } } - useDefaultSelector() { - this.setSelector(android.R.drawable.list_selector_background); - } - isStackFromBottom() { - return this.mStackFromBottom; - } - setStackFromBottom(stackFromBottom) { - if (this.mStackFromBottom != stackFromBottom) { - this.mStackFromBottom = stackFromBottom; - this.requestLayoutIfNecessary(); + initVelocityTrackerIfNotExists() { + if (this.mVelocityTracker == null) { + this.mVelocityTracker = VelocityTracker.obtain(); } } - requestLayoutIfNecessary() { - if (this.getChildCount() > 0) { - this.resetList(); - this.requestLayout(); - this.invalidate(); + recycleVelocityTracker() { + if (this.mVelocityTracker != null) { + this.mVelocityTracker.recycle(); + this.mVelocityTracker = null; } } - onFocusChanged(gainFocus, direction, previouslyFocusedRect) { - super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); - if (gainFocus && this.mSelectedPosition < 0 && !this.isInTouchMode()) { - if (!this.isAttachedToWindow() && this.mAdapter != null) { - this.mDataChanged = true; - this.mOldItemCount = this.mItemCount; - this.mItemCount = this.mAdapter.getCount(); - } - this.resurrectSelection(); + requestDisallowInterceptTouchEvent(disallowIntercept) { + if (disallowIntercept) { + this.recycleVelocityTracker(); } + super.requestDisallowInterceptTouchEvent(disallowIntercept); } - requestLayout() { - if (!this.mBlockLayoutRequests && !this.mInLayout) { - super.requestLayout(); + onInterceptTouchEvent(ev) { + let action = ev.getAction(); + let v; + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } - } - resetList() { - this.removeAllViewsInLayout(); - this.mFirstPosition = 0; - this.mDataChanged = false; - this.mPositionScrollAfterLayout = null; - this.mNeedSync = false; - this.mPendingSync = null; - this.mOldSelectedPosition = AbsListView.INVALID_POSITION; - this.mOldSelectedRowId = AbsListView.INVALID_ROW_ID; - this.setSelectedPositionInt(AbsListView.INVALID_POSITION); - this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION); - this.mSelectedTop = 0; - this.mSelectorPosition = AbsListView.INVALID_POSITION; - this.mSelectorRect.setEmpty(); - this.invalidate(); - } - computeVerticalScrollExtent() { - const count = this.getChildCount(); - if (count > 0) { - if (this.mSmoothScrollbarEnabled) { - let extent = count * 100; - let view = this.getChildAt(0); - const top = view.getTop(); - let height = view.getHeight(); - if (height > 0) { - extent += (top * 100) / height; - } - view = this.getChildAt(count - 1); - const bottom = view.getBottom(); - height = view.getHeight(); - if (height > 0) { - extent -= ((bottom - this.getHeight()) * 100) / height; - } - return extent; - } - else { - return 1; - } + if (!this.isAttachedToWindow()) { + return false; } - return 0; - } - computeVerticalScrollOffset() { - const firstPosition = this.mFirstPosition; - const childCount = this.getChildCount(); - if (firstPosition >= 0 && childCount > 0) { - if (this.mSmoothScrollbarEnabled) { - const view = this.getChildAt(0); - const top = view.getTop(); - let height = view.getHeight(); - if (height > 0) { - return Math.max(firstPosition * 100 - (top * 100) / height + Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100)), 0); + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + { + let touchMode = this.mTouchMode; + if (touchMode == AbsListView.TOUCH_MODE_OVERFLING || touchMode == AbsListView.TOUCH_MODE_OVERSCROLL) { + this.mMotionCorrection = 0; + return true; + } + const x = Math.floor(ev.getX()); + const y = Math.floor(ev.getY()); + this.mActivePointerId = ev.getPointerId(0); + let motionPosition = this.findMotionRow(y); + if (touchMode != AbsListView.TOUCH_MODE_FLING && motionPosition >= 0) { + v = this.getChildAt(motionPosition - this.mFirstPosition); + this.mMotionViewOriginalTop = v.getTop(); + this.mMotionX = x; + this.mMotionY = y; + this.mMotionPosition = motionPosition; + this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; + this.clearScrollingCache(); + } + this.mLastY = Integer.MIN_VALUE; + this.initOrResetVelocityTracker(); + this.mVelocityTracker.addMovement(ev); + if (touchMode == AbsListView.TOUCH_MODE_FLING) { + return true; + } + break; } - } - else { - let index; - const count = this.mItemCount; - if (firstPosition == 0) { - index = 0; + case MotionEvent.ACTION_MOVE: + { + switch (this.mTouchMode) { + case AbsListView.TOUCH_MODE_DOWN: + let pointerIndex = ev.findPointerIndex(this.mActivePointerId); + if (pointerIndex == -1) { + pointerIndex = 0; + this.mActivePointerId = ev.getPointerId(pointerIndex); + } + const y = Math.floor(ev.getY(pointerIndex)); + this.initVelocityTrackerIfNotExists(); + this.mVelocityTracker.addMovement(ev); + if (this.startScrollIfNeeded(y)) { + return true; + } + break; + } + break; } - else if (firstPosition + childCount == count) { - index = count; + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + { + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.mActivePointerId = AbsListView.INVALID_POINTER; + this.recycleVelocityTracker(); + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + break; } - else { - index = firstPosition + childCount / 2; + case MotionEvent.ACTION_POINTER_UP: + { + this.onSecondaryPointerUp(ev); + break; } - return Math.floor((firstPosition + childCount * (index / count))); - } } - return 0; + return false; } - computeVerticalScrollRange() { - let result; - if (this.mSmoothScrollbarEnabled) { - result = Math.max(this.mItemCount * 100, 0); - if (this.mScrollY != 0) { - result += Math.abs(Math.floor((this.mScrollY / this.getHeight() * this.mItemCount * 100))); - } - } - else { - result = this.mItemCount; + onSecondaryPointerUp(ev) { + const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + const pointerId = ev.getPointerId(pointerIndex); + if (pointerId == this.mActivePointerId) { + const newPointerIndex = pointerIndex == 0 ? 1 : 0; + this.mMotionX = Math.floor(ev.getX(newPointerIndex)); + this.mMotionY = Math.floor(ev.getY(newPointerIndex)); + this.mMotionCorrection = 0; + this.mActivePointerId = ev.getPointerId(newPointerIndex); } - return result; } - getTopFadingEdgeStrength() { + addTouchables(views) { const count = this.getChildCount(); - const fadeEdge = super.getTopFadingEdgeStrength(); - if (count == 0) { - return fadeEdge; + const firstPosition = this.mFirstPosition; + const adapter = this.mAdapter; + if (adapter == null) { + return; } - else { - if (this.mFirstPosition > 0) { - return 1.0; + for (let i = 0; i < count; i++) { + const child = this.getChildAt(i); + if (adapter.isEnabled(firstPosition + i)) { + views.add(child); } - const top = this.getChildAt(0).getTop(); - const fadeLength = this.getVerticalFadingEdgeLength(); - return top < this.mPaddingTop ? -(top - this.mPaddingTop) / fadeLength : fadeEdge; + child.addTouchables(views); } } - getBottomFadingEdgeStrength() { - const count = this.getChildCount(); - const fadeEdge = super.getBottomFadingEdgeStrength(); - if (count == 0) { - return fadeEdge; - } - else { - if (this.mFirstPosition + count - 1 < this.mItemCount - 1) { - return 1.0; + reportScrollStateChange(newState) { + if (newState != this.mLastScrollState) { + if (this.mOnScrollListener != null) { + this.mLastScrollState = newState; + this.mOnScrollListener.onScrollStateChanged(this, newState); } - const bottom = this.getChildAt(count - 1).getBottom(); - const height = this.getHeight(); - const fadeLength = this.getVerticalFadingEdgeLength(); - return bottom > height - this.mPaddingBottom ? (bottom - height + this.mPaddingBottom) / fadeLength : fadeEdge; } } - onMeasure(widthMeasureSpec, heightMeasureSpec) { - if (this.mSelector == null) { - this.useDefaultSelector(); - } - const listPadding = this.mListPadding; - listPadding.left = this.mSelectionLeftPadding + this.mPaddingLeft; - listPadding.top = this.mSelectionTopPadding + this.mPaddingTop; - listPadding.right = this.mSelectionRightPadding + this.mPaddingRight; - listPadding.bottom = this.mSelectionBottomPadding + this.mPaddingBottom; - if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) { - const childCount = this.getChildCount(); - const listBottom = this.getHeight() - this.getPaddingBottom(); - const lastChild = this.getChildAt(childCount - 1); - const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom; - this.mForceTranscriptScroll = this.mFirstPosition + childCount >= this.mLastHandledItemCount && lastBottom <= listBottom; + setFriction(friction) { + if (this.mFlingRunnable == null) { + this.mFlingRunnable = new AbsListView.FlingRunnable(this); } + this.mFlingRunnable.mScroller.setFriction(friction); } - onLayout(changed, l, t, r, b) { - super.onLayout(changed, l, t, r, b); - this.mInLayout = true; - if (changed) { - let childCount = this.getChildCount(); - for (let i = 0; i < childCount; i++) { - this.getChildAt(i).forceLayout(); - } - this.mRecycler.markChildrenDirty(); - } - this.layoutChildren(); - this.mInLayout = false; - this.mOverscrollMax = (b - t) / AbsListView.OVERSCROLL_LIMIT_DIVISOR; + setVelocityScale(scale) { + this.mVelocityScale = scale; } - setFrame(left, top, right, bottom) { - const changed = super.setFrame(left, top, right, bottom); - if (changed) { - const visible = this.getWindowVisibility() == View.VISIBLE; + smoothScrollToPositionFromTop(position, offset, duration) { + if (this.mPositionScroller == null) { + this.mPositionScroller = new AbsListView.PositionScroller(this); } - return changed; + this.mPositionScroller.startWithOffset(position, offset, duration); } - layoutChildren() { + smoothScrollToPosition(position, boundPosition) { + if (this.mPositionScroller == null) { + this.mPositionScroller = new AbsListView.PositionScroller(this); + } + this.mPositionScroller.start(position, boundPosition); } - updateScrollIndicators() { - if (this.mScrollUp != null) { - let canScrollUp; - canScrollUp = this.mFirstPosition > 0; - if (!canScrollUp) { - if (this.getChildCount() > 0) { - let child = this.getChildAt(0); - canScrollUp = child.getTop() < this.mListPadding.top; - } - } - this.mScrollUp.setVisibility(canScrollUp ? View.VISIBLE : View.INVISIBLE); + smoothScrollBy(distance, duration, linear = false) { + if (this.mFlingRunnable == null) { + this.mFlingRunnable = new AbsListView.FlingRunnable(this); } - if (this.mScrollDown != null) { - let canScrollDown; - let count = this.getChildCount(); - canScrollDown = (this.mFirstPosition + count) < this.mItemCount; - if (!canScrollDown && count > 0) { - let child = this.getChildAt(count - 1); - canScrollDown = child.getBottom() > this.mBottom - this.mListPadding.bottom; + const firstPos = this.mFirstPosition; + const childCount = this.getChildCount(); + const lastPos = firstPos + childCount; + const topLimit = this.getPaddingTop(); + const bottomLimit = this.getHeight() - this.getPaddingBottom(); + if (distance == 0 || this.mItemCount == 0 || childCount == 0 + || (firstPos == 0 && this.getChildAt(0).getTop() == topLimit && distance < 0) + || (lastPos == this.mItemCount && this.getChildAt(childCount - 1).getBottom() == bottomLimit && distance > 0)) { + this.mFlingRunnable.endFling(); + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } - this.mScrollDown.setVisibility(canScrollDown ? View.VISIBLE : View.INVISIBLE); - } - } - getSelectedView() { - if (this.mItemCount > 0 && this.mSelectedPosition >= 0) { - return this.getChildAt(this.mSelectedPosition - this.mFirstPosition); } else { - return null; + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); + this.mFlingRunnable.startScroll(distance, duration, linear); } } - getListPaddingTop() { - return this.mListPadding.top; - } - getListPaddingBottom() { - return this.mListPadding.bottom; - } - getListPaddingLeft() { - return this.mListPadding.left; - } - getListPaddingRight() { - return this.mListPadding.right; - } - obtainView(position, isScrap) { - isScrap[0] = false; - let scrapView; - scrapView = this.mRecycler.getTransientStateView(position); - if (scrapView == null) { - scrapView = this.mRecycler.getScrapView(position); + smoothScrollByOffset(position) { + let index = -1; + if (position < 0) { + index = this.getFirstVisiblePosition(); } - let child; - if (scrapView != null) { - child = this.mAdapter.getView(position, scrapView, this); - if (child != scrapView) { - this.mRecycler.addScrapView(scrapView, position); - if (this.mCacheColorHint != 0) { - child.setDrawingCacheBackgroundColor(this.mCacheColorHint); + else if (position > 0) { + index = this.getLastVisiblePosition(); + } + if (index > -1) { + let child = this.getChildAt(index - this.getFirstVisiblePosition()); + if (child != null) { + let visibleRect = new Rect(); + if (child.getGlobalVisibleRect(visibleRect)) { + let childRectArea = child.getWidth() * child.getHeight(); + let visibleRectArea = visibleRect.width() * visibleRect.height(); + let visibleArea = (visibleRectArea / childRectArea); + const visibleThreshold = 0.75; + if ((position < 0) && (visibleArea < visibleThreshold)) { + ++index; + } + else if ((position > 0) && (visibleArea < visibleThreshold)) { + --index; + } } - } - else { - isScrap[0] = true; - child.dispatchFinishTemporaryDetach(); + this.smoothScrollToPosition(Math.max(0, Math.min(this.getCount(), index + position))); } } - else { - child = this.mAdapter.getView(position, null, this); - if (this.mCacheColorHint != 0) { - child.setDrawingCacheBackgroundColor(this.mCacheColorHint); - } + } + createScrollingCache() { + if (this.mScrollingCacheEnabled && !this.mCachingStarted && !this.isHardwareAccelerated()) { + this.setChildrenDrawnWithCacheEnabled(true); + this.setChildrenDrawingCacheEnabled(true); + this.mCachingStarted = this.mCachingActive = true; } - if (this.mAdapterHasStableIds) { - const vlp = child.getLayoutParams(); - let lp; - if (vlp == null) { - lp = this.generateDefaultLayoutParams(); - } - else if (!this.checkLayoutParams(vlp)) { - lp = this.generateLayoutParams(vlp); - } - else { - lp = vlp; + } + clearScrollingCache() { + if (!this.isHardwareAccelerated()) { + if (this.mClearScrollingCache == null) { + this.mClearScrollingCache = (() => { + const inner_this = this; + class _Inner { + run() { + if (inner_this.mCachingStarted) { + inner_this.mCachingStarted = inner_this.mCachingActive = false; + inner_this.setChildrenDrawnWithCacheEnabled(false); + if ((inner_this.mPersistentDrawingCache & AbsListView.PERSISTENT_SCROLLING_CACHE) == 0) { + inner_this.setChildrenDrawingCacheEnabled(false); + } + if (!inner_this.isAlwaysDrawnWithCacheEnabled()) { + inner_this.invalidate(); + } + } + } + } + return new _Inner(); + })(); } - lp.itemId = this.mAdapter.getItemId(position); - child.setLayoutParams(lp); + this.post(this.mClearScrollingCache); } - return child; } - positionSelector(...args) { - if (args.length === 4) { - let [l, t, r, b] = args; - this.mSelectorRect.set(l - this.mSelectionLeftPadding, t - this.mSelectionTopPadding, r + this.mSelectionRightPadding, b + this.mSelectionBottomPadding); + scrollListBy(y) { + this.trackMotionScroll(-y, -y); + } + canScrollList(direction) { + const childCount = this.getChildCount(); + if (childCount == 0) { + return false; + } + const firstPosition = this.mFirstPosition; + const listPadding = this.mListPadding; + if (direction > 0) { + const lastBottom = this.getChildAt(childCount - 1).getBottom(); + const lastPosition = firstPosition + childCount; + return lastPosition < this.mItemCount || lastBottom > this.getHeight() - listPadding.bottom; } else { - let position = args[0]; - let sel = args[1]; - if (position != AbsListView.INVALID_POSITION) { - this.mSelectorPosition = position; - } - const selectorRect = this.mSelectorRect; - selectorRect.set(sel.getLeft(), sel.getTop(), sel.getRight(), sel.getBottom()); - if (sel['adjustListItemSelectionBounds']) { - sel.adjustListItemSelectionBounds(selectorRect); - } - this.positionSelector(selectorRect.left, selectorRect.top, selectorRect.right, selectorRect.bottom); - const isChildViewEnabled = this.mIsChildViewEnabled; - if (sel.isEnabled() != isChildViewEnabled) { - this.mIsChildViewEnabled = !isChildViewEnabled; - if (this.getSelectedItemPosition() != AbsListView.INVALID_POSITION) { - this.refreshDrawableState(); - } - } + const firstTop = this.getChildAt(0).getTop(); + return firstPosition > 0 || firstTop < listPadding.top; } } - dispatchDraw(canvas) { - let saveCount = 0; - const clipToPadding = (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK; - if (clipToPadding) { - saveCount = canvas.save(); - const scrollX = this.mScrollX; - const scrollY = this.mScrollY; - canvas.clipRect(scrollX + this.mPaddingLeft, scrollY + this.mPaddingTop, scrollX + this.mRight - this.mLeft - this.mPaddingRight, scrollY + this.mBottom - this.mTop - this.mPaddingBottom); - this.mGroupFlags &= ~AbsListView.CLIP_TO_PADDING_MASK; + trackMotionScroll(deltaY, incrementalDeltaY) { + const childCount = this.getChildCount(); + if (childCount == 0) { + return true; } - const drawSelectorOnTop = this.mDrawSelectorOnTop; - if (!drawSelectorOnTop) { - this.drawSelector(canvas); + const firstTop = this.getChildAt(0).getTop(); + const lastBottom = this.getChildAt(childCount - 1).getBottom(); + const listPadding = this.mListPadding; + let effectivePaddingTop = 0; + let effectivePaddingBottom = 0; + if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { + effectivePaddingTop = listPadding.top; + effectivePaddingBottom = listPadding.bottom; } - super.dispatchDraw(canvas); - if (drawSelectorOnTop) { - this.drawSelector(canvas); + const spaceAbove = effectivePaddingTop - firstTop; + const end = this.getHeight() - effectivePaddingBottom; + const spaceBelow = lastBottom - end; + const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; + if (deltaY < 0) { + deltaY = Math.max(-(height - 1), deltaY); } - if (clipToPadding) { - canvas.restoreToCount(saveCount); - this.mGroupFlags |= AbsListView.CLIP_TO_PADDING_MASK; + else { + deltaY = Math.min(height - 1, deltaY); } - } - isPaddingOffsetRequired() { - return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) != AbsListView.CLIP_TO_PADDING_MASK; - } - getLeftPaddingOffset() { - return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingLeft; - } - getTopPaddingOffset() { - return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : -this.mPaddingTop; - } - getRightPaddingOffset() { - return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingRight; - } - getBottomPaddingOffset() { - return (this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK ? 0 : this.mPaddingBottom; - } - onSizeChanged(w, h, oldw, oldh) { - if (this.getChildCount() > 0) { - this.mDataChanged = true; - this.rememberSyncState(); + if (incrementalDeltaY < 0) { + incrementalDeltaY = Math.max(-(height - 1), incrementalDeltaY); } - } - touchModeDrawsInPressedState() { - switch (this.mTouchMode) { - case AbsListView.TOUCH_MODE_TAP: - case AbsListView.TOUCH_MODE_DONE_WAITING: - return true; - default: - return false; + else { + incrementalDeltaY = Math.min(height - 1, incrementalDeltaY); } - } - shouldShowSelector() { - return (!this.isInTouchMode()) || (this.touchModeDrawsInPressedState() && this.isPressed()); - } - drawSelector(canvas) { - if (!this.mSelectorRect.isEmpty()) { - const selector = this.mSelector; - selector.setBounds(this.mSelectorRect); - selector.draw(canvas); + const firstPosition = this.mFirstPosition; + if (firstPosition == 0) { + this.mFirstPositionDistanceGuess = firstTop - listPadding.top; } - } - setDrawSelectorOnTop(onTop) { - this.mDrawSelectorOnTop = onTop; - } - setSelector(sel) { - if (this.mSelector != null) { - this.mSelector.setCallback(null); - this.unscheduleDrawable(this.mSelector); + else { + this.mFirstPositionDistanceGuess += incrementalDeltaY; } - this.mSelector = sel; - let padding = new Rect(); - sel.getPadding(padding); - this.mSelectionLeftPadding = padding.left; - this.mSelectionTopPadding = padding.top; - this.mSelectionRightPadding = padding.right; - this.mSelectionBottomPadding = padding.bottom; - sel.setCallback(this); - this.updateSelectorState(); - } - getSelector() { - return this.mSelector; - } - keyPressed() { - if (!this.isEnabled() || !this.isClickable()) { - return; + if (firstPosition + childCount == this.mItemCount) { + this.mLastPositionDistanceGuess = lastBottom + listPadding.bottom; } - let selector = this.mSelector; - let selectorRect = this.mSelectorRect; - if (selector != null && (this.isFocused() || this.touchModeDrawsInPressedState()) && !selectorRect.isEmpty()) { - const v = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); - if (v != null) { - if (v.hasFocusable()) - return; - v.setPressed(true); + else { + this.mLastPositionDistanceGuess += incrementalDeltaY; + } + const cannotScrollDown = (firstPosition == 0 && firstTop >= listPadding.top && incrementalDeltaY >= 0); + const cannotScrollUp = (firstPosition + childCount == this.mItemCount && lastBottom <= this.getHeight() - listPadding.bottom && incrementalDeltaY <= 0); + if (cannotScrollDown || cannotScrollUp) { + return incrementalDeltaY != 0; + } + const down = incrementalDeltaY < 0; + const inTouchMode = this.isInTouchMode(); + if (inTouchMode) { + this.hideSelector(); + } + const headerViewsCount = this.getHeaderViewsCount(); + const footerViewsStart = this.mItemCount - this.getFooterViewsCount(); + let start = 0; + let count = 0; + if (down) { + let top = -incrementalDeltaY; + if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { + top += listPadding.top; } - this.setPressed(true); - const longClickable = this.isLongClickable(); - let d = selector.getCurrent(); - if (longClickable && !this.mDataChanged) { - if (this.mPendingCheckForKeyLongPress == null) { - this.mPendingCheckForKeyLongPress = new AbsListView.CheckForKeyLongPress(this); + for (let i = 0; i < childCount; i++) { + const child = this.getChildAt(i); + if (child.getBottom() >= top) { + break; + } + else { + count++; + let position = firstPosition + i; + if (position >= headerViewsCount && position < footerViewsStart) { + this.mRecycler.addScrapView(child, position); + } + } + } + } + else { + let bottom = this.getHeight() - incrementalDeltaY; + if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { + bottom -= listPadding.bottom; + } + for (let i = childCount - 1; i >= 0; i--) { + const child = this.getChildAt(i); + if (child.getTop() <= bottom) { + break; + } + else { + start = i; + count++; + let position = firstPosition + i; + if (position >= headerViewsCount && position < footerViewsStart) { + this.mRecycler.addScrapView(child, position); + } } - this.mPendingCheckForKeyLongPress.rememberWindowAttachCount(); - this.postDelayed(this.mPendingCheckForKeyLongPress, ViewConfiguration.getLongPressTimeout()); } } - } - setScrollIndicators(up, down) { - this.mScrollUp = up; - this.mScrollDown = down; - } - updateSelectorState() { - if (this.mSelector != null) { - if (this.shouldShowSelector()) { - this.mSelector.setState(this.getDrawableState()); + this.mMotionViewNewTop = this.mMotionViewOriginalTop + deltaY; + this.mBlockLayoutRequests = true; + if (count > 0) { + this.detachViewsFromParent(start, count); + this.mRecycler.removeSkippedScrap(); + } + if (!this.awakenScrollBars()) { + this.invalidate(); + } + this.offsetChildrenTopAndBottom(incrementalDeltaY); + if (down) { + this.mFirstPosition += count; + } + const absIncrementalDeltaY = Math.abs(incrementalDeltaY); + if (spaceAbove < absIncrementalDeltaY || spaceBelow < absIncrementalDeltaY) { + this.fillGap(down); + } + if (!inTouchMode && this.mSelectedPosition != AbsListView.INVALID_POSITION) { + const childIndex = this.mSelectedPosition - this.mFirstPosition; + if (childIndex >= 0 && childIndex < this.getChildCount()) { + this.positionSelector(this.mSelectedPosition, this.getChildAt(childIndex)); } - else { - this.mSelector.setState(StateSet.NOTHING); + } + else if (this.mSelectorPosition != AbsListView.INVALID_POSITION) { + const childIndex = this.mSelectorPosition - this.mFirstPosition; + if (childIndex >= 0 && childIndex < this.getChildCount()) { + this.positionSelector(AbsListView.INVALID_POSITION, this.getChildAt(childIndex)); } } + else { + this.mSelectorRect.setEmpty(); + } + this.mBlockLayoutRequests = false; + this.invokeOnItemScrollListener(); + return false; } - drawableStateChanged() { - super.drawableStateChanged(); - this.updateSelectorState(); + getHeaderViewsCount() { + return 0; } - onCreateDrawableState(extraSpace) { - if (this.mIsChildViewEnabled) { - return super.onCreateDrawableState(extraSpace); - } - const enabledState = AbsListView.ENABLED_STATE_SET[0]; - let state = super.onCreateDrawableState(extraSpace + 1); - let enabledPos = -1; - for (let i = state.length - 1; i >= 0; i--) { - if (state[i] == enabledState) { - enabledPos = i; - break; + getFooterViewsCount() { + return 0; + } + hideSelector() { + if (this.mSelectedPosition != AbsListView.INVALID_POSITION) { + if (this.mLayoutMode != AbsListView.LAYOUT_SPECIFIC) { + this.mResurrectToPosition = this.mSelectedPosition; + } + if (this.mNextSelectedPosition >= 0 && this.mNextSelectedPosition != this.mSelectedPosition) { + this.mResurrectToPosition = this.mNextSelectedPosition; } + this.setSelectedPositionInt(AbsListView.INVALID_POSITION); + this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION); + this.mSelectedTop = 0; } - if (enabledPos >= 0) { - System.arraycopy(state, enabledPos + 1, state, enabledPos, state.length - enabledPos - 1); + } + reconcileSelectedPosition() { + let position = this.mSelectedPosition; + if (position < 0) { + position = this.mResurrectToPosition; } - return state; + position = Math.max(0, position); + position = Math.min(position, this.mItemCount - 1); + return position; } - verifyDrawable(dr) { - return this.mSelector == dr || super.verifyDrawable(dr); + findClosestMotionRow(y) { + const childCount = this.getChildCount(); + if (childCount == 0) { + return AbsListView.INVALID_POSITION; + } + const motionRow = this.findMotionRow(y); + return motionRow != AbsListView.INVALID_POSITION ? motionRow : this.mFirstPosition + childCount - 1; } - jumpDrawablesToCurrentState() { - super.jumpDrawablesToCurrentState(); - if (this.mSelector != null) - this.mSelector.jumpToCurrentState(); + invalidateViews() { + this.mDataChanged = true; + this.rememberSyncState(); + this.requestLayout(); + this.invalidate(); } - onAttachedToWindow() { - super.onAttachedToWindow(); - const treeObserver = this.getViewTreeObserver(); - treeObserver.addOnTouchModeChangeListener(this); - if (this.mAdapter != null && this.mDataSetObserver == null) { - this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this); - this.mAdapter.registerDataSetObserver(this.mDataSetObserver); - this.mDataChanged = true; - this.mOldItemCount = this.mItemCount; - this.mItemCount = this.mAdapter.getCount(); + resurrectSelectionIfNeeded() { + if (this.mSelectedPosition < 0 && this.resurrectSelection()) { + this.updateSelectorState(); + return true; } + return false; } - onDetachedFromWindow() { - super.onDetachedFromWindow(); - this.dismissPopup(); - this.mRecycler.clear(); - const treeObserver = this.getViewTreeObserver(); - treeObserver.removeOnTouchModeChangeListener(this); - if (this.mAdapter != null && this.mDataSetObserver != null) { - this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver); - this.mDataSetObserver = null; + resurrectSelection() { + const childCount = this.getChildCount(); + if (childCount <= 0) { + return false; } - if (this.mFlingRunnable != null) { - this.removeCallbacks(this.mFlingRunnable); + let selectedTop = 0; + let selectedPos; + let childrenTop = this.mListPadding.top; + let childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom; + const firstPosition = this.mFirstPosition; + const toPosition = this.mResurrectToPosition; + let down = true; + if (toPosition >= firstPosition && toPosition < firstPosition + childCount) { + selectedPos = toPosition; + const selected = this.getChildAt(selectedPos - this.mFirstPosition); + selectedTop = selected.getTop(); + let selectedBottom = selected.getBottom(); + if (selectedTop < childrenTop) { + selectedTop = childrenTop + this.getVerticalFadingEdgeLength(); + } + else if (selectedBottom > childrenBottom) { + selectedTop = childrenBottom - selected.getMeasuredHeight() - this.getVerticalFadingEdgeLength(); + } + } + else { + if (toPosition < firstPosition) { + selectedPos = firstPosition; + for (let i = 0; i < childCount; i++) { + const v = this.getChildAt(i); + const top = v.getTop(); + if (i == 0) { + selectedTop = top; + if (firstPosition > 0 || top < childrenTop) { + childrenTop += this.getVerticalFadingEdgeLength(); + } + } + if (top >= childrenTop) { + selectedPos = firstPosition + i; + selectedTop = top; + break; + } + } + } + else { + const itemCount = this.mItemCount; + down = false; + selectedPos = firstPosition + childCount - 1; + for (let i = childCount - 1; i >= 0; i--) { + const v = this.getChildAt(i); + const top = v.getTop(); + const bottom = v.getBottom(); + if (i == childCount - 1) { + selectedTop = top; + if (firstPosition + childCount < itemCount || bottom > childrenBottom) { + childrenBottom -= this.getVerticalFadingEdgeLength(); + } + } + if (bottom <= childrenBottom) { + selectedPos = firstPosition + i; + selectedTop = top; + break; + } + } + } } + this.mResurrectToPosition = AbsListView.INVALID_POSITION; + this.removeCallbacks(this.mFlingRunnable); if (this.mPositionScroller != null) { this.mPositionScroller.stop(); } - if (this.mClearScrollingCache != null) { - this.removeCallbacks(this.mClearScrollingCache); - } - if (this.mPerformClick_ != null) { - this.removeCallbacks(this.mPerformClick_); + this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this.clearScrollingCache(); + this.mSpecificTop = selectedTop; + selectedPos = this.lookForSelectablePosition(selectedPos, down); + if (selectedPos >= firstPosition && selectedPos <= this.getLastVisiblePosition()) { + this.mLayoutMode = AbsListView.LAYOUT_SPECIFIC; + this.updateSelectorState(); + this.setSelectionInt(selectedPos); + this.invokeOnItemScrollListener(); } - if (this.mTouchModeReset != null) { - this.removeCallbacks(this.mTouchModeReset); - this.mTouchModeReset.run(); + else { + selectedPos = AbsListView.INVALID_POSITION; } + this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + return selectedPos >= 0; } - onWindowFocusChanged(hasWindowFocus) { - super.onWindowFocusChanged(hasWindowFocus); - const touchMode = this.isInTouchMode() ? AbsListView.TOUCH_MODE_ON : AbsListView.TOUCH_MODE_OFF; - if (!hasWindowFocus) { - this.setChildrenDrawingCacheEnabled(false); - if (this.mFlingRunnable != null) { - this.removeCallbacks(this.mFlingRunnable); - this.mFlingRunnable.endFling(); - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + confirmCheckedPositionsById() { + this.mCheckStates.clear(); + let checkedCountChanged = false; + for (let checkedIndex = 0; checkedIndex < this.mCheckedIdStates.size(); checkedIndex++) { + const id = this.mCheckedIdStates.keyAt(checkedIndex); + const lastPos = this.mCheckedIdStates.valueAt(checkedIndex); + const lastPosId = this.mAdapter.getItemId(lastPos); + if (id != lastPosId) { + const start = Math.max(0, lastPos - AbsListView.CHECK_POSITION_SEARCH_DISTANCE); + const end = Math.min(lastPos + AbsListView.CHECK_POSITION_SEARCH_DISTANCE, this.mItemCount); + let found = false; + for (let searchPos = start; searchPos < end; searchPos++) { + const searchId = this.mAdapter.getItemId(searchPos); + if (id == searchId) { + found = true; + this.mCheckStates.put(searchPos, true); + this.mCheckedIdStates.setValueAt(checkedIndex, searchPos); + break; + } } - if (this.mScrollY != 0) { - this.mScrollY = 0; - this.invalidateParentCaches(); - this.finishGlows(); - this.invalidate(); + if (!found) { + this.mCheckedIdStates.delete(id); + checkedIndex--; + this.mCheckedItemCount--; + checkedCountChanged = true; } } - this.dismissPopup(); - if (touchMode == AbsListView.TOUCH_MODE_OFF) { - this.mResurrectToPosition = this.mSelectedPosition; + else { + this.mCheckStates.put(lastPos, true); } } - else { - if (this.mFiltered && !this.mPopupHidden) { - this.showPopup(); + if (checkedCountChanged && this.mChoiceActionMode != null) { + this.mChoiceActionMode.invalidate(); + } + } + handleDataChanged() { + let count = this.mItemCount; + let lastHandledItemCount = this.mLastHandledItemCount; + this.mLastHandledItemCount = this.mItemCount; + if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapter != null && this.mAdapter.hasStableIds()) { + this.confirmCheckedPositionsById(); + } + this.mRecycler.clearTransientStateViews(); + if (count > 0) { + let newPos; + let selectablePos; + if (this.mNeedSync) { + this.mNeedSync = false; + this.mPendingSync = null; + if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL) { + this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; + return; + } + else if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) { + if (this.mForceTranscriptScroll) { + this.mForceTranscriptScroll = false; + this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; + return; + } + const childCount = this.getChildCount(); + const listBottom = this.getHeight() - this.getPaddingBottom(); + const lastChild = this.getChildAt(childCount - 1); + const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom; + if (this.mFirstPosition + childCount >= lastHandledItemCount && lastBottom <= listBottom) { + this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; + return; + } + this.awakenScrollBars(); + } + switch (this.mSyncMode) { + case AbsListView.SYNC_SELECTED_POSITION: + if (this.isInTouchMode()) { + this.mLayoutMode = AbsListView.LAYOUT_SYNC; + this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1); + return; + } + else { + newPos = this.findSyncPosition(); + if (newPos >= 0) { + selectablePos = this.lookForSelectablePosition(newPos, true); + if (selectablePos == newPos) { + this.mSyncPosition = newPos; + if (this.mSyncHeight == this.getHeight()) { + this.mLayoutMode = AbsListView.LAYOUT_SYNC; + } + else { + this.mLayoutMode = AbsListView.LAYOUT_SET_SELECTION; + } + this.setNextSelectedPositionInt(newPos); + return; + } + } + } + break; + case AbsListView.SYNC_FIRST_POSITION: + this.mLayoutMode = AbsListView.LAYOUT_SYNC; + this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1); + return; + } } - if (touchMode != this.mLastTouchMode && this.mLastTouchMode != AbsListView.TOUCH_MODE_UNKNOWN) { - if (touchMode == AbsListView.TOUCH_MODE_OFF) { - this.resurrectSelection(); + if (!this.isInTouchMode()) { + newPos = this.getSelectedItemPosition(); + if (newPos >= count) { + newPos = count - 1; + } + if (newPos < 0) { + newPos = 0; + } + selectablePos = this.lookForSelectablePosition(newPos, true); + if (selectablePos >= 0) { + this.setNextSelectedPositionInt(selectablePos); + return; } else { - this.hideSelector(); - this.mLayoutMode = AbsListView.LAYOUT_NORMAL; - this.layoutChildren(); + selectablePos = this.lookForSelectablePosition(newPos, false); + if (selectablePos >= 0) { + this.setNextSelectedPositionInt(selectablePos); + return; + } + } + } + else { + if (this.mResurrectToPosition >= 0) { + return; } } } - this.mLastTouchMode = touchMode; + this.mLayoutMode = this.mStackFromBottom ? AbsListView.LAYOUT_FORCE_BOTTOM : AbsListView.LAYOUT_FORCE_TOP; + this.mSelectedPosition = AbsListView.INVALID_POSITION; + this.mSelectedRowId = AbsListView.INVALID_ROW_ID; + this.mNextSelectedPosition = AbsListView.INVALID_POSITION; + this.mNextSelectedRowId = AbsListView.INVALID_ROW_ID; + this.mNeedSync = false; + this.mPendingSync = null; + this.mSelectorPosition = AbsListView.INVALID_POSITION; + this.checkSelectionChanged(); } - onCancelPendingInputEvents() { - super.onCancelPendingInputEvents(); - if (this.mPerformClick_ != null) { - this.removeCallbacks(this.mPerformClick_); - } - if (this.mPendingCheckForTap_ != null) { - this.removeCallbacks(this.mPendingCheckForTap_); - } - if (this.mPendingCheckForLongPress_List != null) { - this.removeCallbacks(this.mPendingCheckForLongPress_List); - } - if (this.mPendingCheckForKeyLongPress != null) { - this.removeCallbacks(this.mPendingCheckForKeyLongPress); + onDisplayHint(hint) { + super.onDisplayHint(hint); + this.mPopupHidden = hint == AbsListView.INVISIBLE; + } + dismissPopup() { + } + showPopup() { + } + positionPopup() { + } + static getDistance(source, dest, direction) { + let sX, sY; + let dX, dY; + switch (direction) { + case View.FOCUS_RIGHT: + sX = source.right; + sY = source.top + source.height() / 2; + dX = dest.left; + dY = dest.top + dest.height() / 2; + break; + case View.FOCUS_DOWN: + sX = source.left + source.width() / 2; + sY = source.bottom; + dX = dest.left + dest.width() / 2; + dY = dest.top; + break; + case View.FOCUS_LEFT: + sX = source.left; + sY = source.top + source.height() / 2; + dX = dest.right; + dY = dest.top + dest.height() / 2; + break; + case View.FOCUS_UP: + sX = source.left + source.width() / 2; + sY = source.top; + dX = dest.left + dest.width() / 2; + dY = dest.bottom; + break; + case View.FOCUS_FORWARD: + case View.FOCUS_BACKWARD: + sX = source.right + source.width() / 2; + sY = source.top + source.height() / 2; + dX = dest.left + dest.width() / 2; + dY = dest.top + dest.height() / 2; + break; + default: + throw Error(`new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")`); } + let deltaX = dX - sX; + let deltaY = dY - sY; + return deltaY * deltaY + deltaX * deltaX; } - performLongPress(child, longPressPosition, longPressId) { - let handled = false; - if (this.mOnItemLongClickListener != null) { - handled = this.mOnItemLongClickListener.onItemLongClick(this, child, longPressPosition, longPressId); + isInFilterMode() { + return this.mFiltered; + } + hasTextFilter() { + return this.mFiltered; + } + onGlobalLayout() { + if (this.isShown()) { } - if (handled) { - this.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + else { } - return handled; } - onKeyDown(keyCode, event) { - return false; + generateDefaultLayoutParams() { + return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0); } - onKeyUp(keyCode, event) { - if (KeyEvent.isConfirmKey(keyCode)) { - if (!this.isEnabled()) { - return true; - } - if (this.isClickable() && this.isPressed() && this.mSelectedPosition >= 0 - && this.mAdapter != null && this.mSelectedPosition < this.mAdapter.getCount()) { - const view = this.getChildAt(this.mSelectedPosition - this.mFirstPosition); - if (view != null) { - this.performItemClick(view, this.mSelectedPosition, this.mSelectedRowId); - view.setPressed(false); - } - this.setPressed(false); - return true; - } - } - return super.onKeyUp(keyCode, event); + generateLayoutParams(p) { + return new AbsListView.LayoutParams(p); } - dispatchSetPressed(pressed) { + generateLayoutParamsFromAttr(attrs) { + return new AbsListView.LayoutParams(this.getContext(), attrs); } - pointToPosition(x, y) { - let frame = this.mTouchFrame; - if (frame == null) { - this.mTouchFrame = new Rect(); - frame = this.mTouchFrame; + checkLayoutParams(p) { + return p instanceof AbsListView.LayoutParams; + } + setTranscriptMode(mode) { + this.mTranscriptMode = mode; + } + getTranscriptMode() { + return this.mTranscriptMode; + } + getSolidColor() { + return this.mCacheColorHint; + } + setCacheColorHint(color) { + if (color != this.mCacheColorHint) { + this.mCacheColorHint = color; + let count = this.getChildCount(); + for (let i = 0; i < count; i++) { + this.getChildAt(i).setDrawingCacheBackgroundColor(color); + } + this.mRecycler.setCacheColorHint(color); } - const count = this.getChildCount(); - for (let i = count - 1; i >= 0; i--) { - const child = this.getChildAt(i); - if (child.getVisibility() == View.VISIBLE) { - child.getHitRect(frame); - if (frame.contains(x, y)) { - return this.mFirstPosition + i; + } + getCacheColorHint() { + return this.mCacheColorHint; + } + reclaimViews(views) { + let childCount = this.getChildCount(); + let listener = this.mRecycler.mRecyclerListener; + for (let i = 0; i < childCount; i++) { + let child = this.getChildAt(i); + let lp = child.getLayoutParams(); + if (lp != null && this.mRecycler.shouldRecycleViewType(lp.viewType)) { + views.add(child); + if (listener != null) { + listener.onMovedToScrapHeap(child); } } } - return AbsListView.INVALID_POSITION; + this.mRecycler.reclaimScrapViews(views); + this.removeAllViewsInLayout(); } - pointToRowId(x, y) { - let position = this.pointToPosition(x, y); - if (position >= 0) { - return this.mAdapter.getItemId(position); - } - return AbsListView.INVALID_ROW_ID; + finishGlows() { } - checkOverScrollStartScrollIfNeeded() { - return this.mScrollY != 0; + setVisibleRangeHint(start, end) { } - startScrollIfNeeded(y) { - const deltaY = y - this.mMotionY; - const distance = Math.abs(deltaY); - const overscroll = this.checkOverScrollStartScrollIfNeeded(); - if (overscroll || distance > this.mTouchSlop) { - this.createScrollingCache(); - if (this.mScrollY != 0) { - this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; - this.mMotionCorrection = 0; - } - else { - this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; - this.mMotionCorrection = deltaY > 0 ? this.mTouchSlop : -this.mTouchSlop; - } - this.removeCallbacks(this.mPendingCheckForLongPress_List); - this.setPressed(false); - const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); - if (motionView != null) { - motionView.setPressed(false); - } - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL); - const parent = this.getParent(); - if (parent != null) { - parent.requestDisallowInterceptTouchEvent(true); - } - this.scrollIfNeeded(y); - return true; - } - return false; + setRecyclerListener(listener) { + this.mRecycler.mRecyclerListener = listener; } - scrollIfNeeded(y) { - const rawDeltaY = y - this.mMotionY; - const deltaY = rawDeltaY - this.mMotionCorrection; - let incrementalDeltaY = this.mLastY != Integer.MIN_VALUE ? y - this.mLastY : deltaY; - if (this.mTouchMode == AbsListView.TOUCH_MODE_SCROLL) { - if (AbsListView.PROFILE_SCROLLING) { - if (!this.mScrollProfilingStarted) { - this.mScrollProfilingStarted = true; + static retrieveFromScrap(scrapViews, position) { + let size = scrapViews.size(); + if (size > 0) { + for (let i = 0; i < size; i++) { + let view = scrapViews.get(i); + if (view.getLayoutParams().scrappedFromPosition == position) { + scrapViews.remove(i); + return view; } } - if (y != this.mLastY) { - if ((this.mGroupFlags & AbsListView.FLAG_DISALLOW_INTERCEPT) == 0 && Math.abs(rawDeltaY) > this.mTouchSlop) { - const parent = this.getParent(); - if (parent != null) { - parent.requestDisallowInterceptTouchEvent(true); - } - } - let motionIndex; - if (this.mMotionPosition >= 0) { - motionIndex = this.mMotionPosition - this.mFirstPosition; - } - else { - motionIndex = this.getChildCount() / 2; - } - let motionViewPrevTop = 0; - let motionView = this.getChildAt(motionIndex); - if (motionView != null) { - motionViewPrevTop = motionView.getTop(); - } - let atEdge = false; - if (incrementalDeltaY != 0) { - atEdge = this.trackMotionScroll(deltaY, incrementalDeltaY); - } - motionView = this.getChildAt(motionIndex); - if (motionView != null) { - const motionViewRealTop = motionView.getTop(); - if (atEdge) { - let overscroll = -incrementalDeltaY - (motionViewRealTop - motionViewPrevTop); - this.overScrollBy(0, overscroll, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true); - if (Math.abs(this.mOverscrollDistance) == Math.abs(this.mScrollY)) { - if (this.mVelocityTracker != null) { - this.mVelocityTracker.clear(); - } - } - const overscrollMode = this.getOverScrollMode(); - if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this.contentFits())) { - this.mDirection = 0; - this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; - if (rawDeltaY > 0) { - } - else if (rawDeltaY < 0) { - } - } - } - this.mMotionY = y; + return scrapViews.remove(size - 1); + } + else { + return null; + } + } + } + AbsListView.TAG_AbsListView = "AbsListView"; + AbsListView.TRANSCRIPT_MODE_DISABLED = 0; + AbsListView.TRANSCRIPT_MODE_NORMAL = 1; + AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL = 2; + AbsListView.TOUCH_MODE_REST = -1; + AbsListView.TOUCH_MODE_DOWN = 0; + AbsListView.TOUCH_MODE_TAP = 1; + AbsListView.TOUCH_MODE_DONE_WAITING = 2; + AbsListView.TOUCH_MODE_SCROLL = 3; + AbsListView.TOUCH_MODE_FLING = 4; + AbsListView.TOUCH_MODE_OVERSCROLL = 5; + AbsListView.TOUCH_MODE_OVERFLING = 6; + AbsListView.LAYOUT_NORMAL = 0; + AbsListView.LAYOUT_FORCE_TOP = 1; + AbsListView.LAYOUT_SET_SELECTION = 2; + AbsListView.LAYOUT_FORCE_BOTTOM = 3; + AbsListView.LAYOUT_SPECIFIC = 4; + AbsListView.LAYOUT_SYNC = 5; + AbsListView.LAYOUT_MOVE_SELECTION = 6; + AbsListView.CHOICE_MODE_NONE = 0; + AbsListView.CHOICE_MODE_SINGLE = 1; + AbsListView.CHOICE_MODE_MULTIPLE = 2; + AbsListView.CHOICE_MODE_MULTIPLE_MODAL = 3; + AbsListView.OVERSCROLL_LIMIT_DIVISOR = 3; + AbsListView.CHECK_POSITION_SEARCH_DISTANCE = 20; + AbsListView.TOUCH_MODE_UNKNOWN = -1; + AbsListView.TOUCH_MODE_ON = 0; + AbsListView.TOUCH_MODE_OFF = 1; + AbsListView.PROFILE_SCROLLING = false; + AbsListView.PROFILE_FLINGING = false; + AbsListView.INVALID_POINTER = -1; + AbsListView.sLinearInterpolator = new LinearInterpolator(); + widget.AbsListView = AbsListView; + (function (AbsListView) { + var OnScrollListener; + (function (OnScrollListener) { + OnScrollListener.SCROLL_STATE_IDLE = 0; + OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1; + OnScrollListener.SCROLL_STATE_FLING = 2; + })(OnScrollListener = AbsListView.OnScrollListener || (AbsListView.OnScrollListener = {})); + class WindowRunnnable { + constructor(arg) { + this._AbsListView_this = arg; + } + rememberWindowAttachCount() { + this.mOriginalAttachCount = this._AbsListView_this.getWindowAttachCount(); + } + sameWindow() { + return this._AbsListView_this.getWindowAttachCount() == this.mOriginalAttachCount; + } + } + AbsListView.WindowRunnnable = WindowRunnnable; + class PerformClick extends AbsListView.WindowRunnnable { + constructor(arg) { + super(arg); + this.mClickMotionPosition = 0; + this._AbsListView_this = arg; + } + run() { + if (this._AbsListView_this.mDataChanged) + return; + const adapter = this._AbsListView_this.mAdapter; + const motionPosition = this.mClickMotionPosition; + if (adapter != null && this._AbsListView_this.mItemCount > 0 && motionPosition != AbsListView.INVALID_POSITION + && motionPosition < adapter.getCount() && this.sameWindow()) { + const view = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition); + if (view != null) { + this._AbsListView_this.performItemClick(view, motionPosition, adapter.getItemId(motionPosition)); } - this.mLastY = y; } } - else if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERSCROLL) { - if (y != this.mLastY) { - const oldScroll = this.mScrollY; - const newScroll = oldScroll - incrementalDeltaY; - let newDirection = y > this.mLastY ? 1 : -1; - if (this.mDirection == 0) { - this.mDirection = newDirection; + } + AbsListView.PerformClick = PerformClick; + class CheckForLongPress extends AbsListView.WindowRunnnable { + constructor(arg) { + super(arg); + this._AbsListView_this = arg; + } + run() { + const motionPosition = this._AbsListView_this.mMotionPosition; + const child = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition); + if (child != null) { + const longPressPosition = this._AbsListView_this.mMotionPosition; + const longPressId = this._AbsListView_this.mAdapter.getItemId(this._AbsListView_this.mMotionPosition); + let handled = false; + if (this.sameWindow() && !this._AbsListView_this.mDataChanged) { + handled = this._AbsListView_this.performLongPress(child, longPressPosition, longPressId); } - let overScrollDistance = -incrementalDeltaY; - if ((newScroll < 0 && oldScroll >= 0) || (newScroll > 0 && oldScroll <= 0)) { - overScrollDistance = -oldScroll; - incrementalDeltaY += overScrollDistance; + if (handled) { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this._AbsListView_this.setPressed(false); + child.setPressed(false); } else { - incrementalDeltaY = 0; - } - if (overScrollDistance != 0) { - this.overScrollBy(0, overScrollDistance, 0, this.mScrollY, 0, 0, 0, this.mOverscrollDistance, true); - } - if (incrementalDeltaY != 0) { - if (this.mScrollY != 0) { - this.mScrollY = 0; - this.invalidateParentIfNeeded(); - } - this.trackMotionScroll(incrementalDeltaY, incrementalDeltaY); - this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; - const motionPosition = this.findClosestMotionRow(y); - this.mMotionCorrection = 0; - let motionView = this.getChildAt(motionPosition - this.mFirstPosition); - this.mMotionViewOriginalTop = motionView != null ? motionView.getTop() : 0; - this.mMotionY = y; - this.mMotionPosition = motionPosition; + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; } - this.mLastY = y; - this.mDirection = newDirection; } } } - onTouchModeChanged(isInTouchMode) { - if (isInTouchMode) { - this.hideSelector(); - if (this.getHeight() > 0 && this.getChildCount() > 0) { - this.layoutChildren(); - } - this.updateSelectorState(); + AbsListView.CheckForLongPress = CheckForLongPress; + class CheckForKeyLongPress extends AbsListView.WindowRunnnable { + constructor(arg) { + super(arg); + this._AbsListView_this = arg; } - else { - let touchMode = this.mTouchMode; - if (touchMode == AbsListView.TOUCH_MODE_OVERSCROLL || touchMode == AbsListView.TOUCH_MODE_OVERFLING) { - if (this.mFlingRunnable != null) { - this.mFlingRunnable.endFling(); - } - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + run() { + if (this._AbsListView_this.isPressed() && this._AbsListView_this.mSelectedPosition >= 0) { + let index = this._AbsListView_this.mSelectedPosition - this._AbsListView_this.mFirstPosition; + let v = this._AbsListView_this.getChildAt(index); + if (!this._AbsListView_this.mDataChanged) { + let handled = false; + if (this.sameWindow()) { + handled = this._AbsListView_this.performLongPress(v, this._AbsListView_this.mSelectedPosition, this._AbsListView_this.mSelectedRowId); + } + if (handled) { + this._AbsListView_this.setPressed(false); + v.setPressed(false); + } } - if (this.mScrollY != 0) { - this.mScrollY = 0; - this.invalidateParentCaches(); - this.finishGlows(); - this.invalidate(); + else { + this._AbsListView_this.setPressed(false); + if (v != null) + v.setPressed(false); } } } } - onTouchEvent(ev) { - if (!this.isEnabled()) { - return this.isClickable() || this.isLongClickable(); - } - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); - } - if (!this.isAttachedToWindow()) { - return false; + AbsListView.CheckForKeyLongPress = CheckForKeyLongPress; + class CheckForTap { + constructor(arg) { + this._AbsListView_this = arg; } - this.initVelocityTrackerIfNotExists(); - this.mVelocityTracker.addMovement(ev); - const actionMasked = ev.getActionMasked(); - switch (actionMasked) { - case MotionEvent.ACTION_DOWN: - { - this.onTouchDown(ev); - break; - } - case MotionEvent.ACTION_MOVE: - { - this.onTouchMove(ev); - break; - } - case MotionEvent.ACTION_UP: - { - this.onTouchUp(ev); - break; - } - case MotionEvent.ACTION_CANCEL: - { - this.onTouchCancel(); - break; - } - case MotionEvent.ACTION_POINTER_UP: - { - this.onSecondaryPointerUp(ev); - const x = this.mMotionX; - const y = this.mMotionY; - const motionPosition = this.pointToPosition(x, y); - if (motionPosition >= 0) { - const child = this.getChildAt(motionPosition - this.mFirstPosition); - this.mMotionViewOriginalTop = child.getTop(); - this.mMotionPosition = motionPosition; + run() { + if (this._AbsListView_this.mTouchMode == AbsListView.TOUCH_MODE_DOWN) { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_TAP; + const child = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition); + if (child != null && !child.hasFocusable()) { + this._AbsListView_this.mLayoutMode = AbsListView.LAYOUT_NORMAL; + if (!this._AbsListView_this.mDataChanged) { + child.setPressed(true); + this._AbsListView_this.setPressed(true); + this._AbsListView_this.layoutChildren(); + this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition, child); + this._AbsListView_this.refreshDrawableState(); + const longPressTimeout = ViewConfiguration.getLongPressTimeout(); + const longClickable = this._AbsListView_this.isLongClickable(); + if (this._AbsListView_this.mSelector != null) { + let d = this._AbsListView_this.mSelector.getCurrent(); + } + if (longClickable) { + if (this._AbsListView_this.mPendingCheckForLongPress_List == null) { + this._AbsListView_this.mPendingCheckForLongPress_List = new AbsListView.CheckForLongPress(this._AbsListView_this); + } + this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount(); + this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List, longPressTimeout); + } + else { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; + } } - this.mLastY = y; - break; - } - case MotionEvent.ACTION_POINTER_DOWN: - { - const index = ev.getActionIndex(); - const id = ev.getPointerId(index); - const x = Math.floor(ev.getX(index)); - const y = Math.floor(ev.getY(index)); - this.mMotionCorrection = 0; - this.mActivePointerId = id; - this.mMotionX = x; - this.mMotionY = y; - const motionPosition = this.pointToPosition(x, y); - if (motionPosition >= 0) { - const child = this.getChildAt(motionPosition - this.mFirstPosition); - this.mMotionViewOriginalTop = child.getTop(); - this.mMotionPosition = motionPosition; + else { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; } - this.mLastY = y; - break; } - } - return true; - } - onTouchDown(ev) { - this.mActivePointerId = ev.getPointerId(0); - if (this.mTouchMode == AbsListView.TOUCH_MODE_OVERFLING) { - this.mFlingRunnable.endFling(); - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); } - this.mTouchMode = AbsListView.TOUCH_MODE_OVERSCROLL; - this.mMotionX = Math.floor(ev.getX()); - this.mMotionY = Math.floor(ev.getY()); - this.mLastY = this.mMotionY; - this.mMotionCorrection = 0; - this.mDirection = 0; } - else { - const x = Math.floor(ev.getX()); - const y = Math.floor(ev.getY()); - let motionPosition = this.pointToPosition(x, y); - if (!this.mDataChanged) { - if (this.mTouchMode == AbsListView.TOUCH_MODE_FLING) { - this.createScrollingCache(); - this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; - this.mMotionCorrection = 0; - motionPosition = this.findMotionRow(y); - this.mFlingRunnable.flywheelTouch(); - } - else if ((motionPosition >= 0) && this.getAdapter().isEnabled(motionPosition)) { - this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; - if (this.mPendingCheckForTap_ == null) { - this.mPendingCheckForTap_ = new AbsListView.CheckForTap(this); + } + AbsListView.CheckForTap = CheckForTap; + class FlingRunnable { + constructor(arg) { + this.mLastFlingY = 0; + this.mCheckFlywheel = (() => { + const inner_this = this; + class _Inner { + run() { + const activeId = inner_this._AbsListView_this.mActivePointerId; + const vt = inner_this._AbsListView_this.mVelocityTracker; + const scroller = inner_this.mScroller; + if (vt == null || activeId == AbsListView.INVALID_POINTER) { + return; + } + vt.computeCurrentVelocity(1000, inner_this._AbsListView_this.mMaximumVelocity); + const yvel = -vt.getYVelocity(activeId); + if (Math.abs(yvel) >= inner_this._AbsListView_this.mMinimumVelocity && scroller.isScrollingInDirection(0, yvel)) { + inner_this._AbsListView_this.postDelayed(inner_this, FlingRunnable.FLYWHEEL_TIMEOUT); + } + else { + inner_this.endFling(); + inner_this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; + inner_this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL); + } } - this.postDelayed(this.mPendingCheckForTap_, ViewConfiguration.getTapTimeout()); } - else if (motionPosition < 0) { - this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; + return new _Inner(); + })(); + this._AbsListView_this = arg; + this.mScroller = new OverScroller(); + } + start(initialVelocity) { + let initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0; + this.mLastFlingY = initialY; + this.mScroller.setInterpolator(null); + this.mScroller.fling(0, initialY, 0, initialVelocity, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE); + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING; + this._AbsListView_this.postOnAnimation(this); + if (AbsListView.PROFILE_FLINGING) { + if (!this._AbsListView_this.mFlingProfilingStarted) { + this._AbsListView_this.mFlingProfilingStarted = true; } } - if (motionPosition >= 0) { - const v = this.getChildAt(motionPosition - this.mFirstPosition); - this.mMotionViewOriginalTop = v.getTop(); - } - this.mMotionX = x; - this.mMotionY = y; - this.mMotionPosition = motionPosition; - this.mLastY = Integer.MIN_VALUE; - } - if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN && this.mMotionPosition != AbsListView.INVALID_POSITION - && this.performButtonActionOnTouchDown(ev)) { - this.removeCallbacks(this.mPendingCheckForTap_); } - } - onTouchMove(ev) { - let pointerIndex = ev.findPointerIndex(this.mActivePointerId); - if (pointerIndex == -1) { - pointerIndex = 0; - this.mActivePointerId = ev.getPointerId(pointerIndex); + startSpringback() { + if (this.mScroller.springBack(0, this._AbsListView_this.mScrollY, 0, 0, 0, 0)) { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; + this._AbsListView_this.invalidate(); + this._AbsListView_this.postOnAnimation(this); + } + else { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE); + } } - if (this.mDataChanged) { - this.layoutChildren(); + startOverfling(initialVelocity) { + this.mScroller.setInterpolator(null); + let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE; + if (this._AbsListView_this.mScrollY < 0) + minY = 0; + else if (this._AbsListView_this.mScrollY > 0) + maxY = 0; + this.mScroller.fling(0, this._AbsListView_this.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, this._AbsListView_this.getHeight()); + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; + this._AbsListView_this.invalidate(); + this._AbsListView_this.postOnAnimation(this); } - const y = Math.floor(ev.getY(pointerIndex)); - switch (this.mTouchMode) { - case AbsListView.TOUCH_MODE_DOWN: - case AbsListView.TOUCH_MODE_TAP: - case AbsListView.TOUCH_MODE_DONE_WAITING: - if (this.startScrollIfNeeded(y)) { - break; - } - const x = ev.getX(pointerIndex); - if (!this.pointInView(x, y, this.mTouchSlop)) { - this.setPressed(false); - const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); - if (motionView != null) { - motionView.setPressed(false); - } - this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List); - this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; - this.updateSelectorState(); + edgeReached(delta) { + this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY, 0, this._AbsListView_this.mOverflingDistance); + const overscrollMode = this._AbsListView_this.getOverScrollMode(); + if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this._AbsListView_this.contentFits())) { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; + } + else { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; + if (this._AbsListView_this.mPositionScroller != null) { + this._AbsListView_this.mPositionScroller.stop(); } - break; - case AbsListView.TOUCH_MODE_SCROLL: - case AbsListView.TOUCH_MODE_OVERSCROLL: - this.scrollIfNeeded(y); - break; + } + this._AbsListView_this.invalidate(); + this._AbsListView_this.postOnAnimation(this); } - } - onTouchUp(ev) { - switch (this.mTouchMode) { - case AbsListView.TOUCH_MODE_DOWN: - case AbsListView.TOUCH_MODE_TAP: - case AbsListView.TOUCH_MODE_DONE_WAITING: - const motionPosition = this.mMotionPosition; - const child = this.getChildAt(motionPosition - this.mFirstPosition); - if (child != null) { - if (this.mTouchMode != AbsListView.TOUCH_MODE_DOWN) { - child.setPressed(false); + startScroll(distance, duration, linear) { + let initialY = distance < 0 ? Integer.MAX_VALUE : 0; + this.mLastFlingY = initialY; + this.mScroller.setInterpolator(linear ? AbsListView.sLinearInterpolator : null); + this.mScroller.startScroll(0, initialY, 0, distance, duration); + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING; + this._AbsListView_this.postOnAnimation(this); + } + endFling() { + this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; + this._AbsListView_this.removeCallbacks(this); + this._AbsListView_this.removeCallbacks(this.mCheckFlywheel); + this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE); + this._AbsListView_this.clearScrollingCache(); + this.mScroller.abortAnimation(); + } + flywheelTouch() { + this._AbsListView_this.postDelayed(this.mCheckFlywheel, FlingRunnable.FLYWHEEL_TIMEOUT); + } + run() { + switch (this._AbsListView_this.mTouchMode) { + default: + this.endFling(); + return; + case AbsListView.TOUCH_MODE_SCROLL: + if (this.mScroller.isFinished()) { + return; } - const x = ev.getX(); - const inList = x > this.mListPadding.left && x < this.getWidth() - this.mListPadding.right; - if (inList && !child.hasFocusable()) { - if (this.mPerformClick_ == null) { - this.mPerformClick_ = new AbsListView.PerformClick(this); + case AbsListView.TOUCH_MODE_FLING: + { + if (this._AbsListView_this.mDataChanged) { + this._AbsListView_this.layoutChildren(); } - const performClick = this.mPerformClick_; - performClick.mClickMotionPosition = motionPosition; - performClick.rememberWindowAttachCount(); - this.mResurrectToPosition = motionPosition; - if (this.mTouchMode == AbsListView.TOUCH_MODE_DOWN || this.mTouchMode == AbsListView.TOUCH_MODE_TAP) { - this.removeCallbacks(this.mTouchMode == AbsListView.TOUCH_MODE_DOWN ? this.mPendingCheckForTap_ : this.mPendingCheckForLongPress_List); - this.mLayoutMode = AbsListView.LAYOUT_NORMAL; - if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) { - this.mTouchMode = AbsListView.TOUCH_MODE_TAP; - this.setSelectedPositionInt(this.mMotionPosition); - this.layoutChildren(); - child.setPressed(true); - this.positionSelector(this.mMotionPosition, child); - this.setPressed(true); - if (this.mSelector != null) { - let d = this.mSelector.getCurrent(); - } - if (this.mTouchModeReset != null) { - this.removeCallbacks(this.mTouchModeReset); - } - this.mTouchModeReset = (() => { - const _this = this; - class _Inner { - run() { - _this.mTouchModeReset = null; - _this.mTouchMode = AbsListView.TOUCH_MODE_REST; - child.setPressed(false); - _this.setPressed(false); - if (!_this.mDataChanged && _this.isAttachedToWindow()) { - performClick.run(); - } - } - } - return new _Inner(); - })(); - this.postDelayed(this.mTouchModeReset, ViewConfiguration.getPressedStateDuration()); - } - else { - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.updateSelectorState(); - } + if (this._AbsListView_this.mItemCount == 0 || this._AbsListView_this.getChildCount() == 0) { + this.endFling(); return; } - else if (!this.mDataChanged && this.mAdapter.isEnabled(motionPosition)) { - performClick.run(); + const scroller = this.mScroller; + let more = scroller.computeScrollOffset(); + const y = scroller.getCurrY(); + let delta = this.mLastFlingY - y; + if (delta > 0) { + this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition; + const firstView = this._AbsListView_this.getChildAt(0); + this._AbsListView_this.mMotionViewOriginalTop = firstView.getTop(); + delta = Math.min(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1, delta); } - } - } - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.updateSelectorState(); - break; - case AbsListView.TOUCH_MODE_SCROLL: - const childCount = this.getChildCount(); - if (childCount > 0) { - const firstChildTop = this.getChildAt(0).getTop(); - const lastChildBottom = this.getChildAt(childCount - 1).getBottom(); - const contentTop = this.mListPadding.top; - const contentBottom = this.getHeight() - this.mListPadding.bottom; - if (this.mFirstPosition == 0 && firstChildTop >= contentTop && this.mFirstPosition + childCount < this.mItemCount - && lastChildBottom <= this.getHeight() - contentBottom) { - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); - } - else { - const velocityTracker = this.mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); - const initialVelocity = Math.floor((velocityTracker.getYVelocity(this.mActivePointerId) * this.mVelocityScale)); - if (Math.abs(initialVelocity) > this.mMinimumVelocity - && !((this.mFirstPosition == 0 && firstChildTop == contentTop - this.mOverscrollDistance) - || (this.mFirstPosition + childCount == this.mItemCount - && lastChildBottom == contentBottom + this.mOverscrollDistance))) { - if (this.mFlingRunnable == null) { - this.mFlingRunnable = new AbsListView.FlingRunnable(this); + else { + let offsetToLast = this._AbsListView_this.getChildCount() - 1; + this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition + offsetToLast; + const lastView = this._AbsListView_this.getChildAt(offsetToLast); + this._AbsListView_this.mMotionViewOriginalTop = lastView.getTop(); + delta = Math.max(-(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1), delta); + } + let motionView = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition); + let oldTop = 0; + if (motionView != null) { + oldTop = motionView.getTop(); + } + const atEdge = this._AbsListView_this.trackMotionScroll(delta, delta); + const atEnd = atEdge && (delta != 0); + if (atEnd) { + if (motionView != null) { + let overshoot = -(delta - (motionView.getTop() - oldTop)); + this._AbsListView_this.overScrollBy(0, overshoot, 0, this._AbsListView_this.mScrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false); } - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); - this.mFlingRunnable.start(-initialVelocity); + if (more) { + this.edgeReached(delta); + } + break; + } + if (more && !atEnd) { + if (atEdge) + this._AbsListView_this.invalidate(); + this.mLastFlingY = y; + this._AbsListView_this.postOnAnimation(this); } else { - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); - if (this.mFlingRunnable != null) { - this.mFlingRunnable.endFling(); + this.endFling(); + if (AbsListView.PROFILE_FLINGING) { + if (this._AbsListView_this.mFlingProfilingStarted) { + this._AbsListView_this.mFlingProfilingStarted = false; + } } - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + } + break; + } + case AbsListView.TOUCH_MODE_OVERFLING: + { + const scroller = this.mScroller; + if (scroller.computeScrollOffset()) { + const scrollY = this._AbsListView_this.mScrollY; + const currY = scroller.getCurrY(); + let deltaY = currY - scrollY; + const crossDown = scrollY <= 0 && currY > 0; + const crossUp = scrollY >= 0 && currY < 0; + if (crossDown || crossUp) { + let velocity = Math.floor(scroller.getCurrVelocity()); + if (crossUp) + velocity = -velocity; + scroller.abortAnimation(); + this.start(velocity); + deltaY = -scrollY; + } + if (this._AbsListView_this.overScrollBy(0, deltaY, 0, scrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false)) { + this.startSpringback(); + } + else { + this._AbsListView_this.invalidate(); + this._AbsListView_this.postOnAnimation(this); } } + else { + this.endFling(); + } + break; + } + } + } + } + FlingRunnable.FLYWHEEL_TIMEOUT = 40; + AbsListView.FlingRunnable = FlingRunnable; + class PositionScroller { + constructor(arg) { + this.mMode = 0; + this.mTargetPos = 0; + this.mBoundPos = 0; + this.mLastSeenPos = 0; + this.mScrollDuration = 0; + this.mExtraScroll = 0; + this.mOffsetFromTop = 0; + this._AbsListView_this = arg; + this.mExtraScroll = ViewConfiguration.get().getScaledFadingEdgeLength(); + } + start(position, boundPosition) { + if (boundPosition == null) + this._start_1(position); + else + this._start_2(position, boundPosition); + } + _start_1(position) { + this.stop(); + if (this._AbsListView_this.mDataChanged) { + this._AbsListView_this.mPositionScrollAfterLayout = (() => { + const inner_this = this; + class _Inner { + run() { + inner_this.start(position); + } + } + return new _Inner(); + })(); + return; + } + const childCount = this._AbsListView_this.getChildCount(); + if (childCount == 0) { + return; + } + const firstPos = this._AbsListView_this.mFirstPosition; + const lastPos = firstPos + childCount - 1; + let viewTravelCount; + let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); + if (clampedPosition < firstPos) { + viewTravelCount = firstPos - clampedPosition + 1; + this.mMode = PositionScroller.MOVE_UP_POS; + } + else if (clampedPosition > lastPos) { + viewTravelCount = clampedPosition - lastPos + 1; + this.mMode = PositionScroller.MOVE_DOWN_POS; + } + else { + this.scrollToVisible(clampedPosition, AbsListView.INVALID_POSITION, PositionScroller.SCROLL_DURATION); + return; + } + if (viewTravelCount > 0) { + this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount; + } + else { + this.mScrollDuration = PositionScroller.SCROLL_DURATION; + } + this.mTargetPos = clampedPosition; + this.mBoundPos = AbsListView.INVALID_POSITION; + this.mLastSeenPos = AbsListView.INVALID_POSITION; + this._AbsListView_this.postOnAnimation(this); + } + _start_2(position, boundPosition) { + this.stop(); + if (boundPosition == AbsListView.INVALID_POSITION) { + this.start(position); + return; + } + if (this._AbsListView_this.mDataChanged) { + this._AbsListView_this.mPositionScrollAfterLayout = (() => { + const inner_this = this; + class _Inner { + run() { + inner_this.start(position, boundPosition); + } } + return new _Inner(); + })(); + return; + } + const childCount = this._AbsListView_this.getChildCount(); + if (childCount == 0) { + return; + } + const firstPos = this._AbsListView_this.mFirstPosition; + const lastPos = firstPos + childCount - 1; + let viewTravelCount; + let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); + if (clampedPosition < firstPos) { + const boundPosFromLast = lastPos - boundPosition; + if (boundPosFromLast < 1) { + return; + } + const posTravel = firstPos - clampedPosition + 1; + const boundTravel = boundPosFromLast - 1; + if (boundTravel < posTravel) { + viewTravelCount = boundTravel; + this.mMode = PositionScroller.MOVE_UP_BOUND; } else { - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + viewTravelCount = posTravel; + this.mMode = PositionScroller.MOVE_UP_POS; } - break; - case AbsListView.TOUCH_MODE_OVERSCROLL: - if (this.mFlingRunnable == null) { - this.mFlingRunnable = new AbsListView.FlingRunnable(this); + } + else if (clampedPosition > lastPos) { + const boundPosFromFirst = boundPosition - firstPos; + if (boundPosFromFirst < 1) { + return; } - const velocityTracker = this.mVelocityTracker; - velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); - const initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId)); - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); - if (Math.abs(initialVelocity) > this.mMinimumVelocity) { - this.mFlingRunnable.startOverfling(-initialVelocity); + const posTravel = clampedPosition - lastPos + 1; + const boundTravel = boundPosFromFirst - 1; + if (boundTravel < posTravel) { + viewTravelCount = boundTravel; + this.mMode = PositionScroller.MOVE_DOWN_BOUND; } else { - this.mFlingRunnable.startSpringback(); + viewTravelCount = posTravel; + this.mMode = PositionScroller.MOVE_DOWN_POS; } - break; + } + else { + this.scrollToVisible(clampedPosition, boundPosition, PositionScroller.SCROLL_DURATION); + return; + } + if (viewTravelCount > 0) { + this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount; + } + else { + this.mScrollDuration = PositionScroller.SCROLL_DURATION; + } + this.mTargetPos = clampedPosition; + this.mBoundPos = boundPosition; + this.mLastSeenPos = AbsListView.INVALID_POSITION; + this._AbsListView_this.postOnAnimation(this); } - this.setPressed(false); - this.invalidate(); - this.removeCallbacks(this.mPendingCheckForLongPress_List); - this.recycleVelocityTracker(); - this.mActivePointerId = AbsListView.INVALID_POINTER; - if (AbsListView.PROFILE_SCROLLING) { - if (this.mScrollProfilingStarted) { - this.mScrollProfilingStarted = false; + startWithOffset(position, offset, duration = PositionScroller.SCROLL_DURATION) { + this.stop(); + if (this._AbsListView_this.mDataChanged) { + const postOffset = offset; + this._AbsListView_this.mPositionScrollAfterLayout = (() => { + const inner_this = this; + class _Inner { + run() { + inner_this.startWithOffset(position, postOffset, duration); + } + } + return new _Inner(); + })(); + return; + } + const childCount = this._AbsListView_this.getChildCount(); + if (childCount == 0) { + return; + } + offset += this._AbsListView_this.getPaddingTop(); + this.mTargetPos = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); + this.mOffsetFromTop = offset; + this.mBoundPos = AbsListView.INVALID_POSITION; + this.mLastSeenPos = AbsListView.INVALID_POSITION; + this.mMode = PositionScroller.MOVE_OFFSET; + const firstPos = this._AbsListView_this.mFirstPosition; + const lastPos = firstPos + childCount - 1; + let viewTravelCount; + if (this.mTargetPos < firstPos) { + viewTravelCount = firstPos - this.mTargetPos; + } + else if (this.mTargetPos > lastPos) { + viewTravelCount = this.mTargetPos - lastPos; + } + else { + const targetTop = this._AbsListView_this.getChildAt(this.mTargetPos - firstPos).getTop(); + this._AbsListView_this.smoothScrollBy(targetTop - offset, duration, true); + return; } + const screenTravelCount = viewTravelCount / childCount; + this.mScrollDuration = screenTravelCount < 1 ? duration : Math.floor((duration / screenTravelCount)); + this.mLastSeenPos = AbsListView.INVALID_POSITION; + this._AbsListView_this.postOnAnimation(this); } - } - onTouchCancel() { - switch (this.mTouchMode) { - case AbsListView.TOUCH_MODE_OVERSCROLL: - if (this.mFlingRunnable == null) { - this.mFlingRunnable = new AbsListView.FlingRunnable(this); + scrollToVisible(targetPos, boundPos, duration) { + const firstPos = this._AbsListView_this.mFirstPosition; + const childCount = this._AbsListView_this.getChildCount(); + const lastPos = firstPos + childCount - 1; + const paddedTop = this._AbsListView_this.mListPadding.top; + const paddedBottom = this._AbsListView_this.getHeight() - this._AbsListView_this.mListPadding.bottom; + if (targetPos < firstPos || targetPos > lastPos) { + Log.w(AbsListView.TAG_AbsListView, "scrollToVisible called with targetPos " + targetPos + " not visible [" + firstPos + ", " + lastPos + "]"); + } + if (boundPos < firstPos || boundPos > lastPos) { + boundPos = AbsListView.INVALID_POSITION; + } + const targetChild = this._AbsListView_this.getChildAt(targetPos - firstPos); + const targetTop = targetChild.getTop(); + const targetBottom = targetChild.getBottom(); + let scrollBy = 0; + if (targetBottom > paddedBottom) { + scrollBy = targetBottom - paddedBottom; + } + if (targetTop < paddedTop) { + scrollBy = targetTop - paddedTop; + } + if (scrollBy == 0) { + return; + } + if (boundPos >= 0) { + const boundChild = this._AbsListView_this.getChildAt(boundPos - firstPos); + const boundTop = boundChild.getTop(); + const boundBottom = boundChild.getBottom(); + const absScroll = Math.abs(scrollBy); + if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) { + scrollBy = Math.max(0, boundBottom - paddedBottom); } - this.mFlingRunnable.startSpringback(); - break; - case AbsListView.TOUCH_MODE_OVERFLING: - break; - default: - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.setPressed(false); - const motionView = this.getChildAt(this.mMotionPosition - this.mFirstPosition); - if (motionView != null) { - motionView.setPressed(false); + else if (scrollBy > 0 && boundTop - absScroll < paddedTop) { + scrollBy = Math.min(0, boundTop - paddedTop); } - this.clearScrollingCache(); - this.removeCallbacks(this.mPendingCheckForLongPress_List); - this.recycleVelocityTracker(); + } + this._AbsListView_this.smoothScrollBy(scrollBy, duration); } - this.mActivePointerId = AbsListView.INVALID_POINTER; - } - onOverScrolled(scrollX, scrollY, clampedX, clampedY) { - if (this.mScrollY != scrollY) { - this.onScrollChanged(this.mScrollX, scrollY, this.mScrollX, this.mScrollY); - this.mScrollY = scrollY; - this.invalidateParentIfNeeded(); - this.awakenScrollBars(); + stop() { + this._AbsListView_this.removeCallbacks(this); } - } - onGenericMotionEvent(event) { - if (event.isPointerEvent()) { - switch (event.getAction()) { - case MotionEvent.ACTION_SCROLL: + run() { + const listHeight = this._AbsListView_this.getHeight(); + const firstPos = this._AbsListView_this.mFirstPosition; + switch (this.mMode) { + case PositionScroller.MOVE_DOWN_POS: + { + const lastViewIndex = this._AbsListView_this.getChildCount() - 1; + const lastPos = firstPos + lastViewIndex; + if (lastViewIndex < 0) { + return; + } + if (lastPos == this.mLastSeenPos) { + this._AbsListView_this.postOnAnimation(this); + return; + } + const lastView = this._AbsListView_this.getChildAt(lastViewIndex); + const lastViewHeight = lastView.getHeight(); + const lastViewTop = lastView.getTop(); + const lastViewPixelsShowing = listHeight - lastViewTop; + const extraScroll = lastPos < this._AbsListView_this.mItemCount - 1 ? Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll) : this._AbsListView_this.mListPadding.bottom; + const scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll; + this._AbsListView_this.smoothScrollBy(scrollBy, this.mScrollDuration, true); + this.mLastSeenPos = lastPos; + if (lastPos < this.mTargetPos) { + this._AbsListView_this.postOnAnimation(this); + } + break; + } + case PositionScroller.MOVE_DOWN_BOUND: + { + const nextViewIndex = 1; + const childCount = this._AbsListView_this.getChildCount(); + if (firstPos == this.mBoundPos || childCount <= nextViewIndex || firstPos + childCount >= this._AbsListView_this.mItemCount) { + return; + } + const nextPos = firstPos + nextViewIndex; + if (nextPos == this.mLastSeenPos) { + this._AbsListView_this.postOnAnimation(this); + return; + } + const nextView = this._AbsListView_this.getChildAt(nextViewIndex); + const nextViewHeight = nextView.getHeight(); + const nextViewTop = nextView.getTop(); + const extraScroll = Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll); + if (nextPos < this.mBoundPos) { + this._AbsListView_this.smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll), this.mScrollDuration, true); + this.mLastSeenPos = nextPos; + this._AbsListView_this.postOnAnimation(this); + } + else { + if (nextViewTop > extraScroll) { + this._AbsListView_this.smoothScrollBy(nextViewTop - extraScroll, this.mScrollDuration, true); + } + } + break; + } + case PositionScroller.MOVE_UP_POS: { - if (this.mTouchMode == AbsListView.TOUCH_MODE_REST) { - const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); - if (vscroll != 0) { - const delta = Math.floor((vscroll * this.getVerticalScrollFactor())); - if (!this.trackMotionScroll(delta, delta)) { - return true; - } + if (firstPos == this.mLastSeenPos) { + this._AbsListView_this.postOnAnimation(this); + return; + } + const firstView = this._AbsListView_this.getChildAt(0); + if (firstView == null) { + return; + } + const firstViewTop = firstView.getTop(); + const extraScroll = firstPos > 0 ? Math.max(this.mExtraScroll, this._AbsListView_this.mListPadding.top) : this._AbsListView_this.mListPadding.top; + this._AbsListView_this.smoothScrollBy(firstViewTop - extraScroll, this.mScrollDuration, true); + this.mLastSeenPos = firstPos; + if (firstPos > this.mTargetPos) { + this._AbsListView_this.postOnAnimation(this); + } + break; + } + case PositionScroller.MOVE_UP_BOUND: + { + const lastViewIndex = this._AbsListView_this.getChildCount() - 2; + if (lastViewIndex < 0) { + return; + } + const lastPos = firstPos + lastViewIndex; + if (lastPos == this.mLastSeenPos) { + this._AbsListView_this.postOnAnimation(this); + return; + } + const lastView = this._AbsListView_this.getChildAt(lastViewIndex); + const lastViewHeight = lastView.getHeight(); + const lastViewTop = lastView.getTop(); + const lastViewPixelsShowing = listHeight - lastViewTop; + const extraScroll = Math.max(this._AbsListView_this.mListPadding.top, this.mExtraScroll); + this.mLastSeenPos = lastPos; + if (lastPos > this.mBoundPos) { + this._AbsListView_this.smoothScrollBy(-(lastViewPixelsShowing - extraScroll), this.mScrollDuration, true); + this._AbsListView_this.postOnAnimation(this); + } + else { + const bottom = listHeight - extraScroll; + const lastViewBottom = lastViewTop + lastViewHeight; + if (bottom > lastViewBottom) { + this._AbsListView_this.smoothScrollBy(-(bottom - lastViewBottom), this.mScrollDuration, true); } } + break; + } + case PositionScroller.MOVE_OFFSET: + { + if (this.mLastSeenPos == firstPos) { + this._AbsListView_this.postOnAnimation(this); + return; + } + this.mLastSeenPos = firstPos; + const childCount = this._AbsListView_this.getChildCount(); + const position = this.mTargetPos; + const lastPos = firstPos + childCount - 1; + let viewTravelCount = 0; + if (position < firstPos) { + viewTravelCount = firstPos - position + 1; + } + else if (position > lastPos) { + viewTravelCount = position - lastPos; + } + const screenTravelCount = viewTravelCount / childCount; + const modifier = Math.min(Math.abs(screenTravelCount), 1.); + if (position < firstPos) { + const distance = Math.floor((-this._AbsListView_this.getHeight() * modifier)); + const duration = Math.floor((this.mScrollDuration * modifier)); + this._AbsListView_this.smoothScrollBy(distance, duration, true); + this._AbsListView_this.postOnAnimation(this); + } + else if (position > lastPos) { + const distance = Math.floor((this._AbsListView_this.getHeight() * modifier)); + const duration = Math.floor((this.mScrollDuration * modifier)); + this._AbsListView_this.smoothScrollBy(distance, duration, true); + this._AbsListView_this.postOnAnimation(this); + } + else { + const targetTop = this._AbsListView_this.getChildAt(position - firstPos).getTop(); + const distance = targetTop - this.mOffsetFromTop; + const duration = Math.floor((this.mScrollDuration * (Math.abs(distance) / this._AbsListView_this.getHeight()))); + this._AbsListView_this.smoothScrollBy(distance, duration, true); + } + break; } + default: + break; } } - return super.onGenericMotionEvent(event); - } - draw(canvas) { - super.draw(canvas); - } - setOverScrollEffectPadding(leftPadding, rightPadding) { - this.mGlowPaddingLeft = leftPadding; - this.mGlowPaddingRight = rightPadding; } - initOrResetVelocityTracker() { - if (this.mVelocityTracker == null) { - this.mVelocityTracker = VelocityTracker.obtain(); - } - else { - this.mVelocityTracker.clear(); + PositionScroller.SCROLL_DURATION = 200; + PositionScroller.MOVE_DOWN_POS = 1; + PositionScroller.MOVE_UP_POS = 2; + PositionScroller.MOVE_DOWN_BOUND = 3; + PositionScroller.MOVE_UP_BOUND = 4; + PositionScroller.MOVE_OFFSET = 5; + AbsListView.PositionScroller = PositionScroller; + class AdapterDataSetObserver extends AdapterView.AdapterDataSetObserver { + constructor(arg) { + super(arg); + this._AbsListView_this = arg; } - } - initVelocityTrackerIfNotExists() { - if (this.mVelocityTracker == null) { - this.mVelocityTracker = VelocityTracker.obtain(); + onChanged() { + super.onChanged(); } - } - recycleVelocityTracker() { - if (this.mVelocityTracker != null) { - this.mVelocityTracker.recycle(); - this.mVelocityTracker = null; + onInvalidated() { + super.onInvalidated(); } } - requestDisallowInterceptTouchEvent(disallowIntercept) { - if (disallowIntercept) { - this.recycleVelocityTracker(); + AbsListView.AdapterDataSetObserver = AdapterDataSetObserver; + class LayoutParams extends ViewGroup.LayoutParams { + constructor(...args) { + super(...(() => { + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); + this.viewType = 0; + this.scrappedFromPosition = 0; + this.itemId = -1; + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) { + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') { + this.viewType = args[2]; + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + } + else if (args[0] instanceof ViewGroup.LayoutParams) { + } } - super.requestDisallowInterceptTouchEvent(disallowIntercept); } - onInterceptTouchEvent(ev) { - let action = ev.getAction(); - let v; - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + AbsListView.LayoutParams = LayoutParams; + class RecycleBin { + constructor(arg) { + this.mFirstActivePosition = 0; + this.mActiveViews = []; + this.mViewTypeCount = 0; + this._AbsListView_this = arg; } - if (!this.isAttachedToWindow()) { - return false; + setViewTypeCount(viewTypeCount) { + if (viewTypeCount < 1) { + throw Error(`new IllegalArgumentException("Can't have a viewTypeCount < 1")`); + } + let scrapViews = new Array(viewTypeCount); + for (let i = 0; i < viewTypeCount; i++) { + scrapViews[i] = new ArrayList(); + } + this.mViewTypeCount = viewTypeCount; + this.mCurrentScrap = scrapViews[0]; + this.mScrapViews = scrapViews; } - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: - { - let touchMode = this.mTouchMode; - if (touchMode == AbsListView.TOUCH_MODE_OVERFLING || touchMode == AbsListView.TOUCH_MODE_OVERSCROLL) { - this.mMotionCorrection = 0; - return true; - } - const x = Math.floor(ev.getX()); - const y = Math.floor(ev.getY()); - this.mActivePointerId = ev.getPointerId(0); - let motionPosition = this.findMotionRow(y); - if (touchMode != AbsListView.TOUCH_MODE_FLING && motionPosition >= 0) { - v = this.getChildAt(motionPosition - this.mFirstPosition); - this.mMotionViewOriginalTop = v.getTop(); - this.mMotionX = x; - this.mMotionY = y; - this.mMotionPosition = motionPosition; - this.mTouchMode = AbsListView.TOUCH_MODE_DOWN; - this.clearScrollingCache(); - } - this.mLastY = Integer.MIN_VALUE; - this.initOrResetVelocityTracker(); - this.mVelocityTracker.addMovement(ev); - if (touchMode == AbsListView.TOUCH_MODE_FLING) { - return true; - } - break; + markChildrenDirty() { + if (this.mViewTypeCount == 1) { + const scrap = this.mCurrentScrap; + const scrapCount = scrap.size(); + for (let i = 0; i < scrapCount; i++) { + scrap.get(i).forceLayout(); } - case MotionEvent.ACTION_MOVE: - { - switch (this.mTouchMode) { - case AbsListView.TOUCH_MODE_DOWN: - let pointerIndex = ev.findPointerIndex(this.mActivePointerId); - if (pointerIndex == -1) { - pointerIndex = 0; - this.mActivePointerId = ev.getPointerId(pointerIndex); - } - const y = Math.floor(ev.getY(pointerIndex)); - this.initVelocityTrackerIfNotExists(); - this.mVelocityTracker.addMovement(ev); - if (this.startScrollIfNeeded(y)) { - return true; - } - break; + } + else { + const typeCount = this.mViewTypeCount; + for (let i = 0; i < typeCount; i++) { + const scrap = this.mScrapViews[i]; + const scrapCount = scrap.size(); + for (let j = 0; j < scrapCount; j++) { + scrap.get(j).forceLayout(); } - break; } - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - { - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.mActivePointerId = AbsListView.INVALID_POINTER; - this.recycleVelocityTracker(); - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); - break; + } + if (this.mTransientStateViews != null) { + const count = this.mTransientStateViews.size(); + for (let i = 0; i < count; i++) { + this.mTransientStateViews.valueAt(i).forceLayout(); } - case MotionEvent.ACTION_POINTER_UP: - { - this.onSecondaryPointerUp(ev); - break; + } + if (this.mTransientStateViewsById != null) { + const count = this.mTransientStateViewsById.size(); + for (let i = 0; i < count; i++) { + this.mTransientStateViewsById.valueAt(i).forceLayout(); } + } } - return false; - } - onSecondaryPointerUp(ev) { - const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; - const pointerId = ev.getPointerId(pointerIndex); - if (pointerId == this.mActivePointerId) { - const newPointerIndex = pointerIndex == 0 ? 1 : 0; - this.mMotionX = Math.floor(ev.getX(newPointerIndex)); - this.mMotionY = Math.floor(ev.getY(newPointerIndex)); - this.mMotionCorrection = 0; - this.mActivePointerId = ev.getPointerId(newPointerIndex); - } - } - addTouchables(views) { - const count = this.getChildCount(); - const firstPosition = this.mFirstPosition; - const adapter = this.mAdapter; - if (adapter == null) { - return; + shouldRecycleViewType(viewType) { + return viewType >= 0; } - for (let i = 0; i < count; i++) { - const child = this.getChildAt(i); - if (adapter.isEnabled(firstPosition + i)) { - views.add(child); + clear() { + if (this.mViewTypeCount == 1) { + const scrap = this.mCurrentScrap; + const scrapCount = scrap.size(); + for (let i = 0; i < scrapCount; i++) { + this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - i), false); + } } - child.addTouchables(views); - } - } - reportScrollStateChange(newState) { - if (newState != this.mLastScrollState) { - if (this.mOnScrollListener != null) { - this.mLastScrollState = newState; - this.mOnScrollListener.onScrollStateChanged(this, newState); + else { + const typeCount = this.mViewTypeCount; + for (let i = 0; i < typeCount; i++) { + const scrap = this.mScrapViews[i]; + const scrapCount = scrap.size(); + for (let j = 0; j < scrapCount; j++) { + this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - j), false); + } + } + } + if (this.mTransientStateViews != null) { + this.mTransientStateViews.clear(); + } + if (this.mTransientStateViewsById != null) { + this.mTransientStateViewsById.clear(); } } - } - setFriction(friction) { - if (this.mFlingRunnable == null) { - this.mFlingRunnable = new AbsListView.FlingRunnable(this); - } - this.mFlingRunnable.mScroller.setFriction(friction); - } - setVelocityScale(scale) { - this.mVelocityScale = scale; - } - smoothScrollToPositionFromTop(position, offset, duration) { - if (this.mPositionScroller == null) { - this.mPositionScroller = new AbsListView.PositionScroller(this); - } - this.mPositionScroller.startWithOffset(position, offset, duration); - } - smoothScrollToPosition(position, boundPosition) { - if (this.mPositionScroller == null) { - this.mPositionScroller = new AbsListView.PositionScroller(this); - } - this.mPositionScroller.start(position, boundPosition); - } - smoothScrollBy(distance, duration, linear = false) { - if (this.mFlingRunnable == null) { - this.mFlingRunnable = new AbsListView.FlingRunnable(this); + fillActiveViews(childCount, firstActivePosition) { + if (this.mActiveViews.length < childCount) { + this.mActiveViews = new Array(childCount); + } + this.mFirstActivePosition = firstActivePosition; + const activeViews = this.mActiveViews; + for (let i = 0; i < childCount; i++) { + let child = this._AbsListView_this.getChildAt(i); + let lp = child.getLayoutParams(); + if (lp != null && lp.viewType != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { + activeViews[i] = child; + } + } } - const firstPos = this.mFirstPosition; - const childCount = this.getChildCount(); - const lastPos = firstPos + childCount; - const topLimit = this.getPaddingTop(); - const bottomLimit = this.getHeight() - this.getPaddingBottom(); - if (distance == 0 || this.mItemCount == 0 || childCount == 0 - || (firstPos == 0 && this.getChildAt(0).getTop() == topLimit && distance < 0) - || (lastPos == this.mItemCount && this.getChildAt(childCount - 1).getBottom() == bottomLimit && distance > 0)) { - this.mFlingRunnable.endFling(); - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + getActiveView(position) { + let index = position - this.mFirstActivePosition; + const activeViews = this.mActiveViews; + if (index >= 0 && index < activeViews.length) { + const match = activeViews[index]; + activeViews[index] = null; + return match; } + return null; } - else { - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_FLING); - this.mFlingRunnable.startScroll(distance, duration, linear); + getTransientStateView(position) { + if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds && this.mTransientStateViewsById != null) { + let id = this._AbsListView_this.mAdapter.getItemId(position); + let result = this.mTransientStateViewsById.get(id); + this.mTransientStateViewsById.remove(id); + return result; + } + if (this.mTransientStateViews != null) { + const index = this.mTransientStateViews.indexOfKey(position); + if (index >= 0) { + let result = this.mTransientStateViews.valueAt(index); + this.mTransientStateViews.removeAt(index); + return result; + } + } + return null; } - } - smoothScrollByOffset(position) { - let index = -1; - if (position < 0) { - index = this.getFirstVisiblePosition(); + clearTransientStateViews() { + if (this.mTransientStateViews != null) { + this.mTransientStateViews.clear(); + } + if (this.mTransientStateViewsById != null) { + this.mTransientStateViewsById.clear(); + } } - else if (position > 0) { - index = this.getLastVisiblePosition(); + getScrapView(position) { + if (this.mViewTypeCount == 1) { + return AbsListView.retrieveFromScrap(this.mCurrentScrap, position); + } + else { + let whichScrap = this._AbsListView_this.mAdapter.getItemViewType(position); + if (whichScrap >= 0 && whichScrap < this.mScrapViews.length) { + return AbsListView.retrieveFromScrap(this.mScrapViews[whichScrap], position); + } + } + return null; } - if (index > -1) { - let child = this.getChildAt(index - this.getFirstVisiblePosition()); - if (child != null) { - let visibleRect = new Rect(); - if (child.getGlobalVisibleRect(visibleRect)) { - let childRectArea = child.getWidth() * child.getHeight(); - let visibleRectArea = visibleRect.width() * visibleRect.height(); - let visibleArea = (visibleRectArea / childRectArea); - const visibleThreshold = 0.75; - if ((position < 0) && (visibleArea < visibleThreshold)) { - ++index; + addScrapView(scrap, position) { + const lp = scrap.getLayoutParams(); + if (lp == null) { + return; + } + lp.scrappedFromPosition = position; + const viewType = lp.viewType; + if (!this.shouldRecycleViewType(viewType)) { + return; + } + scrap.dispatchStartTemporaryDetach(); + const scrapHasTransientState = scrap.hasTransientState(); + if (scrapHasTransientState) { + if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) { + if (this.mTransientStateViewsById == null) { + this.mTransientStateViewsById = new LongSparseArray(); } - else if ((position > 0) && (visibleArea < visibleThreshold)) { - --index; + this.mTransientStateViewsById.put(lp.itemId, scrap); + } + else if (!this._AbsListView_this.mDataChanged) { + if (this.mTransientStateViews == null) { + this.mTransientStateViews = new SparseArray(); + } + this.mTransientStateViews.put(position, scrap); + } + else { + if (this.mSkippedScrap == null) { + this.mSkippedScrap = new ArrayList(); } + this.mSkippedScrap.add(scrap); + } + } + else { + if (this.mViewTypeCount == 1) { + this.mCurrentScrap.add(scrap); + } + else { + this.mScrapViews[viewType].add(scrap); + } + if (this.mRecyclerListener != null) { + this.mRecyclerListener.onMovedToScrapHeap(scrap); } - this.smoothScrollToPosition(Math.max(0, Math.min(this.getCount(), index + position))); } } - } - createScrollingCache() { - if (this.mScrollingCacheEnabled && !this.mCachingStarted && !this.isHardwareAccelerated()) { - this.setChildrenDrawnWithCacheEnabled(true); - this.setChildrenDrawingCacheEnabled(true); - this.mCachingStarted = this.mCachingActive = true; + removeSkippedScrap() { + if (this.mSkippedScrap == null) { + return; + } + const count = this.mSkippedScrap.size(); + for (let i = 0; i < count; i++) { + this._AbsListView_this.removeDetachedView(this.mSkippedScrap.get(i), false); + } + this.mSkippedScrap.clear(); } - } - clearScrollingCache() { - if (!this.isHardwareAccelerated()) { - if (this.mClearScrollingCache == null) { - this.mClearScrollingCache = (() => { - const _this = this; - class _Inner { - run() { - if (_this.mCachingStarted) { - _this.mCachingStarted = _this.mCachingActive = false; - _this.setChildrenDrawnWithCacheEnabled(false); - if ((_this.mPersistentDrawingCache & AbsListView.PERSISTENT_SCROLLING_CACHE) == 0) { - _this.setChildrenDrawingCacheEnabled(false); + scrapActiveViews() { + const activeViews = this.mActiveViews; + const hasListener = this.mRecyclerListener != null; + const multipleScraps = this.mViewTypeCount > 1; + let scrapViews = this.mCurrentScrap; + const count = activeViews.length; + for (let i = count - 1; i >= 0; i--) { + const victim = activeViews[i]; + if (victim != null) { + const lp = victim.getLayoutParams(); + let whichScrap = lp.viewType; + activeViews[i] = null; + const scrapHasTransientState = victim.hasTransientState(); + if (!this.shouldRecycleViewType(whichScrap) || scrapHasTransientState) { + if (whichScrap != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER && scrapHasTransientState) { + this._AbsListView_this.removeDetachedView(victim, false); + } + if (scrapHasTransientState) { + if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) { + if (this.mTransientStateViewsById == null) { + this.mTransientStateViewsById = new LongSparseArray(); } - if (!_this.isAlwaysDrawnWithCacheEnabled()) { - _this.invalidate(); + let id = this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition + i); + this.mTransientStateViewsById.put(id, victim); + } + else { + if (this.mTransientStateViews == null) { + this.mTransientStateViews = new SparseArray(); } + this.mTransientStateViews.put(this.mFirstActivePosition + i, victim); } } + continue; } - return new _Inner(); - })(); + if (multipleScraps) { + scrapViews = this.mScrapViews[whichScrap]; + } + victim.dispatchStartTemporaryDetach(); + lp.scrappedFromPosition = this.mFirstActivePosition + i; + scrapViews.add(victim); + if (hasListener) { + this.mRecyclerListener.onMovedToScrapHeap(victim); + } + } } - this.post(this.mClearScrollingCache); - } - } - scrollListBy(y) { - this.trackMotionScroll(-y, -y); - } - canScrollList(direction) { - const childCount = this.getChildCount(); - if (childCount == 0) { - return false; - } - const firstPosition = this.mFirstPosition; - const listPadding = this.mListPadding; - if (direction > 0) { - const lastBottom = this.getChildAt(childCount - 1).getBottom(); - const lastPosition = firstPosition + childCount; - return lastPosition < this.mItemCount || lastBottom > this.getHeight() - listPadding.bottom; - } - else { - const firstTop = this.getChildAt(0).getTop(); - return firstPosition > 0 || firstTop < listPadding.top; - } - } - trackMotionScroll(deltaY, incrementalDeltaY) { - const childCount = this.getChildCount(); - if (childCount == 0) { - return true; - } - const firstTop = this.getChildAt(0).getTop(); - const lastBottom = this.getChildAt(childCount - 1).getBottom(); - const listPadding = this.mListPadding; - let effectivePaddingTop = 0; - let effectivePaddingBottom = 0; - if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { - effectivePaddingTop = listPadding.top; - effectivePaddingBottom = listPadding.bottom; - } - const spaceAbove = effectivePaddingTop - firstTop; - const end = this.getHeight() - effectivePaddingBottom; - const spaceBelow = lastBottom - end; - const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; - if (deltaY < 0) { - deltaY = Math.max(-(height - 1), deltaY); - } - else { - deltaY = Math.min(height - 1, deltaY); - } - if (incrementalDeltaY < 0) { - incrementalDeltaY = Math.max(-(height - 1), incrementalDeltaY); - } - else { - incrementalDeltaY = Math.min(height - 1, incrementalDeltaY); - } - const firstPosition = this.mFirstPosition; - if (firstPosition == 0) { - this.mFirstPositionDistanceGuess = firstTop - listPadding.top; - } - else { - this.mFirstPositionDistanceGuess += incrementalDeltaY; - } - if (firstPosition + childCount == this.mItemCount) { - this.mLastPositionDistanceGuess = lastBottom + listPadding.bottom; - } - else { - this.mLastPositionDistanceGuess += incrementalDeltaY; - } - const cannotScrollDown = (firstPosition == 0 && firstTop >= listPadding.top && incrementalDeltaY >= 0); - const cannotScrollUp = (firstPosition + childCount == this.mItemCount && lastBottom <= this.getHeight() - listPadding.bottom && incrementalDeltaY <= 0); - if (cannotScrollDown || cannotScrollUp) { - return incrementalDeltaY != 0; - } - const down = incrementalDeltaY < 0; - const inTouchMode = this.isInTouchMode(); - if (inTouchMode) { - this.hideSelector(); + this.pruneScrapViews(); } - const headerViewsCount = this.getHeaderViewsCount(); - const footerViewsStart = this.mItemCount - this.getFooterViewsCount(); - let start = 0; - let count = 0; - if (down) { - let top = -incrementalDeltaY; - if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { - top += listPadding.top; + pruneScrapViews() { + const maxViews = this.mActiveViews.length; + const viewTypeCount = this.mViewTypeCount; + const scrapViews = this.mScrapViews; + for (let i = 0; i < viewTypeCount; ++i) { + const scrapPile = scrapViews[i]; + let size = scrapPile.size(); + const extras = size - maxViews; + size--; + for (let j = 0; j < extras; j++) { + this._AbsListView_this.removeDetachedView(scrapPile.remove(size--), false); + } } - for (let i = 0; i < childCount; i++) { - const child = this.getChildAt(i); - if (child.getBottom() >= top) { - break; + if (this.mTransientStateViews != null) { + for (let i = 0; i < this.mTransientStateViews.size(); i++) { + const v = this.mTransientStateViews.valueAt(i); + if (!v.hasTransientState()) { + this.mTransientStateViews.removeAt(i); + i--; + } } - else { - count++; - let position = firstPosition + i; - if (position >= headerViewsCount && position < footerViewsStart) { - this.mRecycler.addScrapView(child, position); + } + if (this.mTransientStateViewsById != null) { + for (let i = 0; i < this.mTransientStateViewsById.size(); i++) { + const v = this.mTransientStateViewsById.valueAt(i); + if (!v.hasTransientState()) { + this.mTransientStateViewsById.removeAt(i); + i--; } } } } - else { - let bottom = this.getHeight() - incrementalDeltaY; - if ((this.mGroupFlags & AbsListView.CLIP_TO_PADDING_MASK) == AbsListView.CLIP_TO_PADDING_MASK) { - bottom -= listPadding.bottom; + reclaimScrapViews(views) { + if (this.mViewTypeCount == 1) { + views.addAll(this.mCurrentScrap); } - for (let i = childCount - 1; i >= 0; i--) { - const child = this.getChildAt(i); - if (child.getTop() <= bottom) { - break; + else { + const viewTypeCount = this.mViewTypeCount; + const scrapViews = this.mScrapViews; + for (let i = 0; i < viewTypeCount; ++i) { + const scrapPile = scrapViews[i]; + views.addAll(scrapPile); } - else { - start = i; - count++; - let position = firstPosition + i; - if (position >= headerViewsCount && position < footerViewsStart) { - this.mRecycler.addScrapView(child, position); + } + } + setCacheColorHint(color) { + if (this.mViewTypeCount == 1) { + const scrap = this.mCurrentScrap; + const scrapCount = scrap.size(); + for (let i = 0; i < scrapCount; i++) { + scrap.get(i).setDrawingCacheBackgroundColor(color); + } + } + else { + const typeCount = this.mViewTypeCount; + for (let i = 0; i < typeCount; i++) { + const scrap = this.mScrapViews[i]; + const scrapCount = scrap.size(); + for (let j = 0; j < scrapCount; j++) { + scrap.get(j).setDrawingCacheBackgroundColor(color); } } } + const activeViews = this.mActiveViews; + const count = activeViews.length; + for (let i = 0; i < count; ++i) { + const victim = activeViews[i]; + if (victim != null) { + victim.setDrawingCacheBackgroundColor(color); + } + } } - this.mMotionViewNewTop = this.mMotionViewOriginalTop + deltaY; - this.mBlockLayoutRequests = true; - if (count > 0) { - this.detachViewsFromParent(start, count); - this.mRecycler.removeSkippedScrap(); - } - if (!this.awakenScrollBars()) { - this.invalidate(); - } - this.offsetChildrenTopAndBottom(incrementalDeltaY); - if (down) { - this.mFirstPosition += count; - } - const absIncrementalDeltaY = Math.abs(incrementalDeltaY); - if (spaceAbove < absIncrementalDeltaY || spaceBelow < absIncrementalDeltaY) { - this.fillGap(down); + } + AbsListView.RecycleBin = RecycleBin; + })(AbsListView = widget.AbsListView || (widget.AbsListView = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var ArrayList = java.util.ArrayList; + var AdapterView = android.widget.AdapterView; + class HeaderViewListAdapter { + constructor(headerViewInfos, footerViewInfos, adapter) { + this.mAdapter = adapter; + this.mIsFilterable = false; + if (headerViewInfos == null) { + this.mHeaderViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST; } - if (!inTouchMode && this.mSelectedPosition != AbsListView.INVALID_POSITION) { - const childIndex = this.mSelectedPosition - this.mFirstPosition; - if (childIndex >= 0 && childIndex < this.getChildCount()) { - this.positionSelector(this.mSelectedPosition, this.getChildAt(childIndex)); - } + else { + this.mHeaderViewInfos = headerViewInfos; } - else if (this.mSelectorPosition != AbsListView.INVALID_POSITION) { - const childIndex = this.mSelectorPosition - this.mFirstPosition; - if (childIndex >= 0 && childIndex < this.getChildCount()) { - this.positionSelector(AbsListView.INVALID_POSITION, this.getChildAt(childIndex)); - } + if (footerViewInfos == null) { + this.mFooterViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST; } else { - this.mSelectorRect.setEmpty(); + this.mFooterViewInfos = footerViewInfos; } - this.mBlockLayoutRequests = false; - this.invokeOnItemScrollListener(); - return false; + this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); } - getHeaderViewsCount() { - return 0; + getHeadersCount() { + return this.mHeaderViewInfos.size(); } - getFooterViewsCount() { - return 0; + getFootersCount() { + return this.mFooterViewInfos.size(); } - hideSelector() { - if (this.mSelectedPosition != AbsListView.INVALID_POSITION) { - if (this.mLayoutMode != AbsListView.LAYOUT_SPECIFIC) { - this.mResurrectToPosition = this.mSelectedPosition; - } - if (this.mNextSelectedPosition >= 0 && this.mNextSelectedPosition != this.mSelectedPosition) { - this.mResurrectToPosition = this.mNextSelectedPosition; - } - this.setSelectedPositionInt(AbsListView.INVALID_POSITION); - this.setNextSelectedPositionInt(AbsListView.INVALID_POSITION); - this.mSelectedTop = 0; - } + isEmpty() { + return this.mAdapter == null || this.mAdapter.isEmpty(); } - reconcileSelectedPosition() { - let position = this.mSelectedPosition; - if (position < 0) { - position = this.mResurrectToPosition; + areAllListInfosSelectable(infos) { + if (infos != null) { + for (let info of infos.array) { + if (!info.isSelectable) { + return false; + } + } } - position = Math.max(0, position); - position = Math.min(position, this.mItemCount - 1); - return position; + return true; } - findClosestMotionRow(y) { - const childCount = this.getChildCount(); - if (childCount == 0) { - return AbsListView.INVALID_POSITION; + removeHeader(v) { + for (let i = 0; i < this.mHeaderViewInfos.size(); i++) { + let info = this.mHeaderViewInfos.get(i); + if (info.view == v) { + this.mHeaderViewInfos.remove(i); + this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); + return true; + } } - const motionRow = this.findMotionRow(y); - return motionRow != AbsListView.INVALID_POSITION ? motionRow : this.mFirstPosition + childCount - 1; - } - invalidateViews() { - this.mDataChanged = true; - this.rememberSyncState(); - this.requestLayout(); - this.invalidate(); + return false; } - resurrectSelectionIfNeeded() { - if (this.mSelectedPosition < 0 && this.resurrectSelection()) { - this.updateSelectorState(); - return true; + removeFooter(v) { + for (let i = 0; i < this.mFooterViewInfos.size(); i++) { + let info = this.mFooterViewInfos.get(i); + if (info.view == v) { + this.mFooterViewInfos.remove(i); + this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); + return true; + } } return false; } - resurrectSelection() { - const childCount = this.getChildCount(); - if (childCount <= 0) { - return false; - } - let selectedTop = 0; - let selectedPos; - let childrenTop = this.mListPadding.top; - let childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom; - const firstPosition = this.mFirstPosition; - const toPosition = this.mResurrectToPosition; - let down = true; - if (toPosition >= firstPosition && toPosition < firstPosition + childCount) { - selectedPos = toPosition; - const selected = this.getChildAt(selectedPos - this.mFirstPosition); - selectedTop = selected.getTop(); - let selectedBottom = selected.getBottom(); - if (selectedTop < childrenTop) { - selectedTop = childrenTop + this.getVerticalFadingEdgeLength(); - } - else if (selectedBottom > childrenBottom) { - selectedTop = childrenBottom - selected.getMeasuredHeight() - this.getVerticalFadingEdgeLength(); - } + getCount() { + if (this.mAdapter != null) { + return this.getFootersCount() + this.getHeadersCount() + this.mAdapter.getCount(); } else { - if (toPosition < firstPosition) { - selectedPos = firstPosition; - for (let i = 0; i < childCount; i++) { - const v = this.getChildAt(i); - const top = v.getTop(); - if (i == 0) { - selectedTop = top; - if (firstPosition > 0 || top < childrenTop) { - childrenTop += this.getVerticalFadingEdgeLength(); - } - } - if (top >= childrenTop) { - selectedPos = firstPosition + i; - selectedTop = top; - break; - } - } - } - else { - const itemCount = this.mItemCount; - down = false; - selectedPos = firstPosition + childCount - 1; - for (let i = childCount - 1; i >= 0; i--) { - const v = this.getChildAt(i); - const top = v.getTop(); - const bottom = v.getBottom(); - if (i == childCount - 1) { - selectedTop = top; - if (firstPosition + childCount < itemCount || bottom > childrenBottom) { - childrenBottom -= this.getVerticalFadingEdgeLength(); - } - } - if (bottom <= childrenBottom) { - selectedPos = firstPosition + i; - selectedTop = top; - break; - } - } - } - } - this.mResurrectToPosition = AbsListView.INVALID_POSITION; - this.removeCallbacks(this.mFlingRunnable); - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); + return this.getFootersCount() + this.getHeadersCount(); } - this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this.clearScrollingCache(); - this.mSpecificTop = selectedTop; - selectedPos = this.lookForSelectablePosition(selectedPos, down); - if (selectedPos >= firstPosition && selectedPos <= this.getLastVisiblePosition()) { - this.mLayoutMode = AbsListView.LAYOUT_SPECIFIC; - this.updateSelectorState(); - this.setSelectionInt(selectedPos); - this.invokeOnItemScrollListener(); + } + areAllItemsEnabled() { + if (this.mAdapter != null) { + return this.mAreAllFixedViewsSelectable && this.mAdapter.areAllItemsEnabled(); } else { - selectedPos = AbsListView.INVALID_POSITION; + return true; } - this.reportScrollStateChange(AbsListView.OnScrollListener.SCROLL_STATE_IDLE); - return selectedPos >= 0; } - confirmCheckedPositionsById() { - this.mCheckStates.clear(); - let checkedCountChanged = false; - for (let checkedIndex = 0; checkedIndex < this.mCheckedIdStates.size(); checkedIndex++) { - const id = this.mCheckedIdStates.keyAt(checkedIndex); - const lastPos = this.mCheckedIdStates.valueAt(checkedIndex); - const lastPosId = this.mAdapter.getItemId(lastPos); - if (id != lastPosId) { - const start = Math.max(0, lastPos - AbsListView.CHECK_POSITION_SEARCH_DISTANCE); - const end = Math.min(lastPos + AbsListView.CHECK_POSITION_SEARCH_DISTANCE, this.mItemCount); - let found = false; - for (let searchPos = start; searchPos < end; searchPos++) { - const searchId = this.mAdapter.getItemId(searchPos); - if (id == searchId) { - found = true; - this.mCheckStates.put(searchPos, true); - this.mCheckedIdStates.setValueAt(checkedIndex, searchPos); - break; - } - } - if (!found) { - this.mCheckedIdStates.delete(id); - checkedIndex--; - this.mCheckedItemCount--; - checkedCountChanged = true; - } - } - else { - this.mCheckStates.put(lastPos, true); - } - } - if (checkedCountChanged && this.mChoiceActionMode != null) { - this.mChoiceActionMode.invalidate(); + isEnabled(position) { + let numHeaders = this.getHeadersCount(); + if (position < numHeaders) { + return this.mHeaderViewInfos.get(position).isSelectable; } - } - handleDataChanged() { - let count = this.mItemCount; - let lastHandledItemCount = this.mLastHandledItemCount; - this.mLastHandledItemCount = this.mItemCount; - if (this.mChoiceMode != AbsListView.CHOICE_MODE_NONE && this.mAdapter != null && this.mAdapter.hasStableIds()) { - this.confirmCheckedPositionsById(); + const adjPosition = position - numHeaders; + let adapterCount = 0; + if (this.mAdapter != null) { + adapterCount = this.mAdapter.getCount(); + if (adjPosition < adapterCount) { + return this.mAdapter.isEnabled(adjPosition); + } } - this.mRecycler.clearTransientStateViews(); - if (count > 0) { - let newPos; - let selectablePos; - if (this.mNeedSync) { - this.mNeedSync = false; - this.mPendingSync = null; - if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL) { - this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; - return; - } - else if (this.mTranscriptMode == AbsListView.TRANSCRIPT_MODE_NORMAL) { - if (this.mForceTranscriptScroll) { - this.mForceTranscriptScroll = false; - this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; - return; - } - const childCount = this.getChildCount(); - const listBottom = this.getHeight() - this.getPaddingBottom(); - const lastChild = this.getChildAt(childCount - 1); - const lastBottom = lastChild != null ? lastChild.getBottom() : listBottom; - if (this.mFirstPosition + childCount >= lastHandledItemCount && lastBottom <= listBottom) { - this.mLayoutMode = AbsListView.LAYOUT_FORCE_BOTTOM; - return; - } - this.awakenScrollBars(); - } - switch (this.mSyncMode) { - case AbsListView.SYNC_SELECTED_POSITION: - if (this.isInTouchMode()) { - this.mLayoutMode = AbsListView.LAYOUT_SYNC; - this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1); - return; - } - else { - newPos = this.findSyncPosition(); - if (newPos >= 0) { - selectablePos = this.lookForSelectablePosition(newPos, true); - if (selectablePos == newPos) { - this.mSyncPosition = newPos; - if (this.mSyncHeight == this.getHeight()) { - this.mLayoutMode = AbsListView.LAYOUT_SYNC; - } - else { - this.mLayoutMode = AbsListView.LAYOUT_SET_SELECTION; - } - this.setNextSelectedPositionInt(newPos); - return; - } - } - } - break; - case AbsListView.SYNC_FIRST_POSITION: - this.mLayoutMode = AbsListView.LAYOUT_SYNC; - this.mSyncPosition = Math.min(Math.max(0, this.mSyncPosition), count - 1); - return; - } + return this.mFooterViewInfos.get(adjPosition - adapterCount).isSelectable; + } + getItem(position) { + let numHeaders = this.getHeadersCount(); + if (position < numHeaders) { + return this.mHeaderViewInfos.get(position).data; + } + const adjPosition = position - numHeaders; + let adapterCount = 0; + if (this.mAdapter != null) { + adapterCount = this.mAdapter.getCount(); + if (adjPosition < adapterCount) { + return this.mAdapter.getItem(adjPosition); } - if (!this.isInTouchMode()) { - newPos = this.getSelectedItemPosition(); - if (newPos >= count) { - newPos = count - 1; - } - if (newPos < 0) { - newPos = 0; - } - selectablePos = this.lookForSelectablePosition(newPos, true); - if (selectablePos >= 0) { - this.setNextSelectedPositionInt(selectablePos); - return; - } - else { - selectablePos = this.lookForSelectablePosition(newPos, false); - if (selectablePos >= 0) { - this.setNextSelectedPositionInt(selectablePos); - return; - } - } + } + return this.mFooterViewInfos.get(adjPosition - adapterCount).data; + } + getItemId(position) { + let numHeaders = this.getHeadersCount(); + if (this.mAdapter != null && position >= numHeaders) { + let adjPosition = position - numHeaders; + let adapterCount = this.mAdapter.getCount(); + if (adjPosition < adapterCount) { + return this.mAdapter.getItemId(adjPosition); } - else { - if (this.mResurrectToPosition >= 0) { - return; - } + } + return -1; + } + hasStableIds() { + if (this.mAdapter != null) { + return this.mAdapter.hasStableIds(); + } + return false; + } + getView(position, convertView, parent) { + let numHeaders = this.getHeadersCount(); + if (position < numHeaders) { + return this.mHeaderViewInfos.get(position).view; + } + const adjPosition = position - numHeaders; + let adapterCount = 0; + if (this.mAdapter != null) { + adapterCount = this.mAdapter.getCount(); + if (adjPosition < adapterCount) { + return this.mAdapter.getView(adjPosition, convertView, parent); } } - this.mLayoutMode = this.mStackFromBottom ? AbsListView.LAYOUT_FORCE_BOTTOM : AbsListView.LAYOUT_FORCE_TOP; - this.mSelectedPosition = AbsListView.INVALID_POSITION; - this.mSelectedRowId = AbsListView.INVALID_ROW_ID; - this.mNextSelectedPosition = AbsListView.INVALID_POSITION; - this.mNextSelectedRowId = AbsListView.INVALID_ROW_ID; - this.mNeedSync = false; - this.mPendingSync = null; - this.mSelectorPosition = AbsListView.INVALID_POSITION; - this.checkSelectionChanged(); + return this.mFooterViewInfos.get(adjPosition - adapterCount).view; } - onDisplayHint(hint) { - super.onDisplayHint(hint); - this.mPopupHidden = hint == AbsListView.INVISIBLE; + getItemViewType(position) { + let numHeaders = this.getHeadersCount(); + if (this.mAdapter != null && position >= numHeaders) { + let adjPosition = position - numHeaders; + let adapterCount = this.mAdapter.getCount(); + if (adjPosition < adapterCount) { + return this.mAdapter.getItemViewType(adjPosition); + } + } + return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER; } - dismissPopup() { + getViewTypeCount() { + if (this.mAdapter != null) { + return this.mAdapter.getViewTypeCount(); + } + return 1; } - showPopup() { + registerDataSetObserver(observer) { + if (this.mAdapter != null) { + this.mAdapter.registerDataSetObserver(observer); + } } - positionPopup() { + unregisterDataSetObserver(observer) { + if (this.mAdapter != null) { + this.mAdapter.unregisterDataSetObserver(observer); + } } - static getDistance(source, dest, direction) { - let sX, sY; - let dX, dY; - switch (direction) { - case View.FOCUS_RIGHT: - sX = source.right; - sY = source.top + source.height() / 2; - dX = dest.left; - dY = dest.top + dest.height() / 2; - break; - case View.FOCUS_DOWN: - sX = source.left + source.width() / 2; - sY = source.bottom; - dX = dest.left + dest.width() / 2; - dY = dest.top; - break; - case View.FOCUS_LEFT: - sX = source.left; - sY = source.top + source.height() / 2; - dX = dest.right; - dY = dest.top + dest.height() / 2; - break; - case View.FOCUS_UP: - sX = source.left + source.width() / 2; - sY = source.top; - dX = dest.left + dest.width() / 2; - dY = dest.bottom; - break; - case View.FOCUS_FORWARD: - case View.FOCUS_BACKWARD: - sX = source.right + source.width() / 2; - sY = source.top + source.height() / 2; - dX = dest.left + dest.width() / 2; - dY = dest.top + dest.height() / 2; - break; - default: - throw Error(`new IllegalArgumentException("direction must be one of " + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, " + "FOCUS_FORWARD, FOCUS_BACKWARD}.")`); + getFilter() { + return null; + } + getWrappedAdapter() { + return this.mAdapter; + } + } + HeaderViewListAdapter.EMPTY_INFO_LIST = new ArrayList(); + widget.HeaderViewListAdapter = HeaderViewListAdapter; + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var database; + (function (database) { + var ArrayList = java.util.ArrayList; + class Observable { + constructor() { + this.mObservers = new ArrayList(); + } + registerObserver(observer) { + if (observer == null) { + throw new Error("The observer is null."); } - let deltaX = dX - sX; - let deltaY = dY - sY; - return deltaY * deltaY + deltaX * deltaX; + if (this.mObservers.contains(observer)) { + throw new Error("Observer " + observer + " is already registered."); + } + this.mObservers.add(observer); } - isInFilterMode() { - return this.mFiltered; + unregisterObserver(observer) { + if (observer == null) { + throw new Error("The observer is null."); + } + let index = this.mObservers.indexOf(observer); + if (index == -1) { + throw new Error("Observer " + observer + " was not registered."); + } + this.mObservers.remove(index); } - hasTextFilter() { - return this.mFiltered; + unregisterAll() { + this.mObservers.clear(); } - onGlobalLayout() { - if (this.isShown()) { + } + database.Observable = Observable; + })(database = android.database || (android.database = {})); +})(android || (android = {})); +var android; +(function (android) { + var database; + (function (database) { + var Observable = android.database.Observable; + class DataSetObservable extends Observable { + notifyChanged() { + for (let i = this.mObservers.size() - 1; i >= 0; i--) { + this.mObservers.get(i).onChanged(); } - else { + } + notifyInvalidated() { + for (let i = this.mObservers.size() - 1; i >= 0; i--) { + this.mObservers.get(i).onInvalidated(); } } - generateDefaultLayoutParams() { - return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0); + } + database.DataSetObservable = DataSetObservable; + })(database = android.database || (android.database = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var DataSetObservable = android.database.DataSetObservable; + class BaseAdapter { + constructor() { + this.mDataSetObservable = new DataSetObservable(); } - generateLayoutParams(p) { - return new AbsListView.LayoutParams(p); + hasStableIds() { + return false; } - checkLayoutParams(p) { - return p instanceof AbsListView.LayoutParams; + registerDataSetObserver(observer) { + this.mDataSetObservable.registerObserver(observer); } - setTranscriptMode(mode) { - this.mTranscriptMode = mode; + unregisterDataSetObserver(observer) { + this.mDataSetObservable.unregisterObserver(observer); } - getTranscriptMode() { - return this.mTranscriptMode; + notifyDataSetChanged() { + this.mDataSetObservable.notifyChanged(); } - getSolidColor() { - return this.mCacheColorHint; + notifyDataSetInvalidated() { + this.mDataSetObservable.notifyInvalidated(); } - setCacheColorHint(color) { - if (color != this.mCacheColorHint) { - this.mCacheColorHint = color; - let count = this.getChildCount(); - for (let i = 0; i < count; i++) { - this.getChildAt(i).setDrawingCacheBackgroundColor(color); + areAllItemsEnabled() { + return true; + } + isEnabled(position) { + return true; + } + getDropDownView(position, convertView, parent) { + return this.getView(position, convertView, parent); + } + getItemViewType(position) { + return 0; + } + getViewTypeCount() { + return 1; + } + isEmpty() { + return this.getCount() == 0; + } + } + widget.BaseAdapter = BaseAdapter; + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var Paint = android.graphics.Paint; + var PixelFormat = android.graphics.PixelFormat; + var Rect = android.graphics.Rect; + var MathUtils = android.util.MathUtils; + var FocusFinder = android.view.FocusFinder; + var KeyEvent = android.view.KeyEvent; + var SoundEffectConstants = android.view.SoundEffectConstants; + var View = android.view.View; + var ViewGroup = android.view.ViewGroup; + var Trace = android.os.Trace; + var ArrayList = java.util.ArrayList; + var Integer = java.lang.Integer; + var System = java.lang.System; + var AbsListView = android.widget.AbsListView; + var AdapterView = android.widget.AdapterView; + var HeaderViewListAdapter = android.widget.HeaderViewListAdapter; + class ListView extends AbsListView { + constructor(context, bindElement, defStyle = android.R.attr.listViewStyle) { + super(context, bindElement, defStyle); + this.mHeaderViewInfos = new ArrayList(); + this.mFooterViewInfos = new ArrayList(); + this.mDividerHeight = 0; + this.mIsCacheColorOpaque = false; + this.mDividerIsOpaque = false; + this.mHeaderDividersEnabled = true; + this.mFooterDividersEnabled = true; + this.mAreAllItemsSelectable = true; + this.mItemsCanFocus = false; + this.mTempRect = new Rect(); + this.mArrowScrollFocusResult = new ListView.ArrowScrollFocusResult(); + let a = context.obtainStyledAttributes(bindElement, defStyle); + const d = a.getDrawable('divider'); + if (d != null) { + this.setDivider(d); + } + const osHeader = a.getDrawable('overScrollHeader'); + if (osHeader != null) { + this.setOverscrollHeader(osHeader); + } + const osFooter = a.getDrawable('overScrollFooter'); + if (osFooter != null) { + this.setOverscrollFooter(osFooter); + } + const dividerHeight = a.getDimensionPixelSize('dividerHeight', 0); + if (dividerHeight != 0) { + this.setDividerHeight(dividerHeight); + } + this.mHeaderDividersEnabled = a.getBoolean('headerDividersEnabled', true); + this.mFooterDividersEnabled = a.getBoolean('footerDividersEnabled', true); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('divider', { + setter(v, value, attrBinder) { + let divider = attrBinder.parseDrawable(value); + if (divider) + v.setDivider(divider); + }, getter(v) { + return v.mDivider; + } + }).set('overScrollHeader', { + setter(v, value, attrBinder) { + let header = attrBinder.parseDrawable(value); + if (header) + v.setOverscrollHeader(header); + }, getter(v) { + return v.getOverscrollHeader(); + } + }).set('overScrollFooter', { + setter(v, value, attrBinder) { + let footer = attrBinder.parseDrawable(value); + if (footer) + v.setOverscrollFooter(footer); + }, getter(v) { + return v.getOverscrollFooter(); + } + }).set('dividerHeight', { + setter(v, value, attrBinder) { + v.setDividerHeight(attrBinder.parseNumberPixelSize(value, v.getDividerHeight())); + }, getter(v) { + return v.getDividerHeight(); + } + }).set('headerDividersEnabled', { + setter(v, value, attrBinder) { + v.setHeaderDividersEnabled(attrBinder.parseBoolean(value, v.mHeaderDividersEnabled)); + }, getter(v) { + return v.mHeaderDividersEnabled; + } + }).set('dividerHeight', { + setter(v, value, attrBinder) { + v.setFooterDividersEnabled(attrBinder.parseBoolean(value, v.mFooterDividersEnabled)); + }, getter(v) { + return v.mFooterDividersEnabled; + } + }); + } + getMaxScrollAmount() { + return Math.floor((ListView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop))); + } + adjustViewsUpOrDown() { + const childCount = this.getChildCount(); + let delta; + if (childCount > 0) { + let child; + if (!this.mStackFromBottom) { + child = this.getChildAt(0); + delta = child.getTop() - this.mListPadding.top; + if (this.mFirstPosition != 0) { + delta -= this.mDividerHeight; + } + if (delta < 0) { + delta = 0; + } + } + else { + child = this.getChildAt(childCount - 1); + delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom); + if (this.mFirstPosition + childCount < this.mItemCount) { + delta += this.mDividerHeight; + } + if (delta > 0) { + delta = 0; + } + } + if (delta != 0) { + this.offsetChildrenTopAndBottom(-delta); } - this.mRecycler.setCacheColorHint(color); } } - getCacheColorHint() { - return this.mCacheColorHint; + addHeaderView(v, data = null, isSelectable = true) { + const info = new ListView.FixedViewInfo(this); + info.view = v; + info.data = data; + info.isSelectable = isSelectable; + this.mHeaderViewInfos.add(info); + if (this.mAdapter != null) { + if (!(this.mAdapter instanceof HeaderViewListAdapter)) { + this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter); + } + if (this.mDataSetObserver != null) { + this.mDataSetObserver.onChanged(); + } + } } - reclaimViews(views) { - let childCount = this.getChildCount(); - let listener = this.mRecycler.mRecyclerListener; - for (let i = 0; i < childCount; i++) { - let child = this.getChildAt(i); - let lp = child.getLayoutParams(); - if (lp != null && this.mRecycler.shouldRecycleViewType(lp.viewType)) { - views.add(child); - if (listener != null) { - listener.onMovedToScrapHeap(child); + getHeaderViewsCount() { + return this.mHeaderViewInfos.size(); + } + removeHeaderView(v) { + if (this.mHeaderViewInfos.size() > 0) { + let result = false; + if (this.mAdapter != null && this.mAdapter.removeHeader(v)) { + if (this.mDataSetObserver != null) { + this.mDataSetObserver.onChanged(); } + result = true; } + this.removeFixedViewInfo(v, this.mHeaderViewInfos); + return result; } - this.mRecycler.reclaimScrapViews(views); - this.removeAllViewsInLayout(); + return false; } - finishGlows() { + removeFixedViewInfo(v, where) { + let len = where.size(); + for (let i = 0; i < len; ++i) { + let info = where.get(i); + if (info.view == v) { + where.remove(i); + break; + } + } } - setVisibleRangeHint(start, end) { + addFooterView(v, data = null, isSelectable = true) { + const info = new ListView.FixedViewInfo(this); + info.view = v; + info.data = data; + info.isSelectable = isSelectable; + this.mFooterViewInfos.add(info); + if (this.mAdapter != null) { + if (!(this.mAdapter instanceof HeaderViewListAdapter)) { + this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter); + } + if (this.mDataSetObserver != null) { + this.mDataSetObserver.onChanged(); + } + } } - setRecyclerListener(listener) { - this.mRecycler.mRecyclerListener = listener; + getFooterViewsCount() { + return this.mFooterViewInfos.size(); } - static retrieveFromScrap(scrapViews, position) { - let size = scrapViews.size(); - if (size > 0) { - for (let i = 0; i < size; i++) { - let view = scrapViews.get(i); - if (view.getLayoutParams().scrappedFromPosition == position) { - scrapViews.remove(i); - return view; + removeFooterView(v) { + if (this.mFooterViewInfos.size() > 0) { + let result = false; + if (this.mAdapter != null && this.mAdapter.removeFooter(v)) { + if (this.mDataSetObserver != null) { + this.mDataSetObserver.onChanged(); } + result = true; } - return scrapViews.remove(size - 1); - } - else { - return null; + this.removeFixedViewInfo(v, this.mFooterViewInfos); + return result; } + return false; } - } - AbsListView.TAG_AbsListView = "AbsListView"; - AbsListView.TRANSCRIPT_MODE_DISABLED = 0; - AbsListView.TRANSCRIPT_MODE_NORMAL = 1; - AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL = 2; - AbsListView.TOUCH_MODE_REST = -1; - AbsListView.TOUCH_MODE_DOWN = 0; - AbsListView.TOUCH_MODE_TAP = 1; - AbsListView.TOUCH_MODE_DONE_WAITING = 2; - AbsListView.TOUCH_MODE_SCROLL = 3; - AbsListView.TOUCH_MODE_FLING = 4; - AbsListView.TOUCH_MODE_OVERSCROLL = 5; - AbsListView.TOUCH_MODE_OVERFLING = 6; - AbsListView.LAYOUT_NORMAL = 0; - AbsListView.LAYOUT_FORCE_TOP = 1; - AbsListView.LAYOUT_SET_SELECTION = 2; - AbsListView.LAYOUT_FORCE_BOTTOM = 3; - AbsListView.LAYOUT_SPECIFIC = 4; - AbsListView.LAYOUT_SYNC = 5; - AbsListView.LAYOUT_MOVE_SELECTION = 6; - AbsListView.CHOICE_MODE_NONE = 0; - AbsListView.CHOICE_MODE_SINGLE = 1; - AbsListView.CHOICE_MODE_MULTIPLE = 2; - AbsListView.CHOICE_MODE_MULTIPLE_MODAL = 3; - AbsListView.OVERSCROLL_LIMIT_DIVISOR = 3; - AbsListView.CHECK_POSITION_SEARCH_DISTANCE = 20; - AbsListView.TOUCH_MODE_UNKNOWN = -1; - AbsListView.TOUCH_MODE_ON = 0; - AbsListView.TOUCH_MODE_OFF = 1; - AbsListView.PROFILE_SCROLLING = false; - AbsListView.PROFILE_FLINGING = false; - AbsListView.INVALID_POINTER = -1; - AbsListView.sLinearInterpolator = new LinearInterpolator(); - widget.AbsListView = AbsListView; - (function (AbsListView) { - var OnScrollListener; - (function (OnScrollListener) { - OnScrollListener.SCROLL_STATE_IDLE = 0; - OnScrollListener.SCROLL_STATE_TOUCH_SCROLL = 1; - OnScrollListener.SCROLL_STATE_FLING = 2; - })(OnScrollListener = AbsListView.OnScrollListener || (AbsListView.OnScrollListener = {})); - class WindowRunnnable { - constructor(arg) { - this._AbsListView_this = arg; + getAdapter() { + return this.mAdapter; + } + setAdapter(adapter) { + if (this.mAdapter != null && this.mDataSetObserver != null) { + this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver); } - rememberWindowAttachCount() { - this.mOriginalAttachCount = this._AbsListView_this.getWindowAttachCount(); + this.resetList(); + this.mRecycler.clear(); + if (this.mHeaderViewInfos.size() > 0 || this.mFooterViewInfos.size() > 0) { + this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, adapter); + } + else { + this.mAdapter = adapter; + } + this.mOldSelectedPosition = ListView.INVALID_POSITION; + this.mOldSelectedRowId = ListView.INVALID_ROW_ID; + super.setAdapter(adapter); + if (this.mAdapter != null) { + this.mAreAllItemsSelectable = this.mAdapter.areAllItemsEnabled(); + this.mOldItemCount = this.mItemCount; + this.mItemCount = this.mAdapter.getCount(); + this.checkFocus(); + this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this); + this.mAdapter.registerDataSetObserver(this.mDataSetObserver); + this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount()); + let position; + if (this.mStackFromBottom) { + position = this.lookForSelectablePosition(this.mItemCount - 1, false); + } + else { + position = this.lookForSelectablePosition(0, true); + } + this.setSelectedPositionInt(position); + this.setNextSelectedPositionInt(position); + if (this.mItemCount == 0) { + this.checkSelectionChanged(); + } } - sameWindow() { - return this._AbsListView_this.getWindowAttachCount() == this.mOriginalAttachCount; + else { + this.mAreAllItemsSelectable = true; + this.checkFocus(); + this.checkSelectionChanged(); } + this.requestLayout(); } - AbsListView.WindowRunnnable = WindowRunnnable; - class PerformClick extends AbsListView.WindowRunnnable { - constructor(arg) { - super(arg); - this.mClickMotionPosition = 0; - this._AbsListView_this = arg; - } - run() { - if (this._AbsListView_this.mDataChanged) - return; - const adapter = this._AbsListView_this.mAdapter; - const motionPosition = this.mClickMotionPosition; - if (adapter != null && this._AbsListView_this.mItemCount > 0 && motionPosition != AbsListView.INVALID_POSITION - && motionPosition < adapter.getCount() && this.sameWindow()) { - const view = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition); - if (view != null) { - this._AbsListView_this.performItemClick(view, motionPosition, adapter.getItemId(motionPosition)); + resetList() { + this.clearRecycledState(this.mHeaderViewInfos); + this.clearRecycledState(this.mFooterViewInfos); + super.resetList(); + this.mLayoutMode = ListView.LAYOUT_NORMAL; + } + clearRecycledState(infos) { + if (infos != null) { + const count = infos.size(); + for (let i = 0; i < count; i++) { + const child = infos.get(i).view; + const p = child.getLayoutParams(); + if (p != null) { + p.recycledHeaderFooter = false; } } } } - AbsListView.PerformClick = PerformClick; - class CheckForLongPress extends AbsListView.WindowRunnnable { - constructor(arg) { - super(arg); - this._AbsListView_this = arg; + showingTopFadingEdge() { + const listTop = this.mScrollY + this.mListPadding.top; + return (this.mFirstPosition > 0) || (this.getChildAt(0).getTop() > listTop); + } + showingBottomFadingEdge() { + const childCount = this.getChildCount(); + const bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom(); + const lastVisiblePosition = this.mFirstPosition + childCount - 1; + const listBottom = this.mScrollY + this.getHeight() - this.mListPadding.bottom; + return (lastVisiblePosition < this.mItemCount - 1) || (bottomOfBottomChild < listBottom); + } + requestChildRectangleOnScreen(child, rect, immediate) { + let rectTopWithinChild = rect.top; + rect.offset(child.getLeft(), child.getTop()); + rect.offset(-child.getScrollX(), -child.getScrollY()); + const height = this.getHeight(); + let listUnfadedTop = this.getScrollY(); + let listUnfadedBottom = listUnfadedTop + height; + const fadingEdge = this.getVerticalFadingEdgeLength(); + if (this.showingTopFadingEdge()) { + if ((this.mSelectedPosition > 0) || (rectTopWithinChild > fadingEdge)) { + listUnfadedTop += fadingEdge; + } } - run() { - const motionPosition = this._AbsListView_this.mMotionPosition; - const child = this._AbsListView_this.getChildAt(motionPosition - this._AbsListView_this.mFirstPosition); - if (child != null) { - const longPressPosition = this._AbsListView_this.mMotionPosition; - const longPressId = this._AbsListView_this.mAdapter.getItemId(this._AbsListView_this.mMotionPosition); - let handled = false; - if (this.sameWindow() && !this._AbsListView_this.mDataChanged) { - handled = this._AbsListView_this.performLongPress(child, longPressPosition, longPressId); - } - if (handled) { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this._AbsListView_this.setPressed(false); - child.setPressed(false); - } - else { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; - } + let childCount = this.getChildCount(); + let bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom(); + if (this.showingBottomFadingEdge()) { + if ((this.mSelectedPosition < this.mItemCount - 1) || (rect.bottom < (bottomOfBottomChild - fadingEdge))) { + listUnfadedBottom -= fadingEdge; } } - } - AbsListView.CheckForLongPress = CheckForLongPress; - class CheckForKeyLongPress extends AbsListView.WindowRunnnable { - constructor(arg) { - super(arg); - this._AbsListView_this = arg; + let scrollYDelta = 0; + if (rect.bottom > listUnfadedBottom && rect.top > listUnfadedTop) { + if (rect.height() > height) { + scrollYDelta += (rect.top - listUnfadedTop); + } + else { + scrollYDelta += (rect.bottom - listUnfadedBottom); + } + let distanceToBottom = bottomOfBottomChild - listUnfadedBottom; + scrollYDelta = Math.min(scrollYDelta, distanceToBottom); } - run() { - if (this._AbsListView_this.isPressed() && this._AbsListView_this.mSelectedPosition >= 0) { - let index = this._AbsListView_this.mSelectedPosition - this._AbsListView_this.mFirstPosition; - let v = this._AbsListView_this.getChildAt(index); - if (!this._AbsListView_this.mDataChanged) { - let handled = false; - if (this.sameWindow()) { - handled = this._AbsListView_this.performLongPress(v, this._AbsListView_this.mSelectedPosition, this._AbsListView_this.mSelectedRowId); - } - if (handled) { - this._AbsListView_this.setPressed(false); - v.setPressed(false); - } - } - else { - this._AbsListView_this.setPressed(false); - if (v != null) - v.setPressed(false); - } + else if (rect.top < listUnfadedTop && rect.bottom < listUnfadedBottom) { + if (rect.height() > height) { + scrollYDelta -= (listUnfadedBottom - rect.bottom); } + else { + scrollYDelta -= (listUnfadedTop - rect.top); + } + let top = this.getChildAt(0).getTop(); + let deltaToTop = top - listUnfadedTop; + scrollYDelta = Math.max(scrollYDelta, deltaToTop); + } + const scroll = scrollYDelta != 0; + if (scroll) { + this.scrollListItemsBy(-scrollYDelta); + this.positionSelector(ListView.INVALID_POSITION, child); + this.mSelectedTop = child.getTop(); + this.invalidate(); } + return scroll; } - AbsListView.CheckForKeyLongPress = CheckForKeyLongPress; - class CheckForTap { - constructor(arg) { - this._AbsListView_this = arg; + fillGap(down) { + const count = this.getChildCount(); + if (down) { + let paddingTop = 0; + if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { + paddingTop = this.getListPaddingTop(); + } + const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + this.mDividerHeight : paddingTop; + this.fillDown(this.mFirstPosition + count, startOffset); + this.correctTooHigh(this.getChildCount()); } - run() { - if (this._AbsListView_this.mTouchMode == AbsListView.TOUCH_MODE_DOWN) { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_TAP; - const child = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition); - if (child != null && !child.hasFocusable()) { - this._AbsListView_this.mLayoutMode = AbsListView.LAYOUT_NORMAL; - if (!this._AbsListView_this.mDataChanged) { - child.setPressed(true); - this._AbsListView_this.setPressed(true); - this._AbsListView_this.layoutChildren(); - this._AbsListView_this.positionSelector(this._AbsListView_this.mMotionPosition, child); - this._AbsListView_this.refreshDrawableState(); - const longPressTimeout = ViewConfiguration.getLongPressTimeout(); - const longClickable = this._AbsListView_this.isLongClickable(); - if (this._AbsListView_this.mSelector != null) { - let d = this._AbsListView_this.mSelector.getCurrent(); - } - if (longClickable) { - if (this._AbsListView_this.mPendingCheckForLongPress_List == null) { - this._AbsListView_this.mPendingCheckForLongPress_List = new AbsListView.CheckForLongPress(this._AbsListView_this); - } - this._AbsListView_this.mPendingCheckForLongPress_List.rememberWindowAttachCount(); - this._AbsListView_this.postDelayed(this._AbsListView_this.mPendingCheckForLongPress_List, longPressTimeout); - } - else { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; - } - } - else { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_DONE_WAITING; - } - } + else { + let paddingBottom = 0; + if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { + paddingBottom = this.getListPaddingBottom(); } + const startOffset = count > 0 ? this.getChildAt(0).getTop() - this.mDividerHeight : this.getHeight() - paddingBottom; + this.fillUp(this.mFirstPosition - 1, startOffset); + this.correctTooLow(this.getChildCount()); } } - AbsListView.CheckForTap = CheckForTap; - class FlingRunnable { - constructor(arg) { - this.mLastFlingY = 0; - this.mCheckFlywheel = (() => { - const _this = this; - class _Inner { - run() { - const activeId = _this._AbsListView_this.mActivePointerId; - const vt = _this._AbsListView_this.mVelocityTracker; - const scroller = _this.mScroller; - if (vt == null || activeId == AbsListView.INVALID_POINTER) { - return; - } - vt.computeCurrentVelocity(1000, _this._AbsListView_this.mMaximumVelocity); - const yvel = -vt.getYVelocity(activeId); - if (Math.abs(yvel) >= _this._AbsListView_this.mMinimumVelocity && scroller.isScrollingInDirection(0, yvel)) { - _this._AbsListView_this.postDelayed(_this, FlingRunnable.FLYWHEEL_TIMEOUT); - } - else { - _this.endFling(); - _this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_SCROLL; - _this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL); - } - } - } - return new _Inner(); - })(); - this._AbsListView_this = arg; - this.mScroller = new OverScroller(); + fillDown(pos, nextTop) { + let selectedView = null; + let end = (this.mBottom - this.mTop); + if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { + end -= this.mListPadding.bottom; } - start(initialVelocity) { - let initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0; - this.mLastFlingY = initialY; - this.mScroller.setInterpolator(null); - this.mScroller.fling(0, initialY, 0, initialVelocity, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE); - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING; - this._AbsListView_this.postOnAnimation(this); - if (AbsListView.PROFILE_FLINGING) { - if (!this._AbsListView_this.mFlingProfilingStarted) { - this._AbsListView_this.mFlingProfilingStarted = true; - } + while (nextTop < end && pos < this.mItemCount) { + let selected = pos == this.mSelectedPosition; + let child = this.makeAndAddView(pos, nextTop, true, this.mListPadding.left, selected); + nextTop = child.getBottom() + this.mDividerHeight; + if (selected) { + selectedView = child; } + pos++; } - startSpringback() { - if (this.mScroller.springBack(0, this._AbsListView_this.mScrollY, 0, 0, 0, 0)) { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; - this._AbsListView_this.invalidate(); - this._AbsListView_this.postOnAnimation(this); - } - else { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE); + this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1); + return selectedView; + } + fillUp(pos, nextBottom) { + let selectedView = null; + let end = 0; + if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { + end = this.mListPadding.top; + } + while (nextBottom > end && pos >= 0) { + let selected = pos == this.mSelectedPosition; + let child = this.makeAndAddView(pos, nextBottom, false, this.mListPadding.left, selected); + nextBottom = child.getTop() - this.mDividerHeight; + if (selected) { + selectedView = child; } + pos--; } - startOverfling(initialVelocity) { - this.mScroller.setInterpolator(null); - let minY = Integer.MIN_VALUE, maxY = Integer.MAX_VALUE; - if (this._AbsListView_this.mScrollY < 0) - minY = 0; - else if (this._AbsListView_this.mScrollY > 0) - maxY = 0; - this.mScroller.fling(0, this._AbsListView_this.mScrollY, 0, initialVelocity, 0, 0, minY, maxY, 0, this._AbsListView_this.getHeight()); - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; - this._AbsListView_this.invalidate(); - this._AbsListView_this.postOnAnimation(this); + this.mFirstPosition = pos + 1; + this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1); + return selectedView; + } + fillFromTop(nextTop) { + this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition); + this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1); + if (this.mFirstPosition < 0) { + this.mFirstPosition = 0; } - edgeReached(delta) { - this.mScroller.notifyVerticalEdgeReached(this._AbsListView_this.mScrollY, 0, this._AbsListView_this.mOverflingDistance); - const overscrollMode = this._AbsListView_this.getOverScrollMode(); - if (overscrollMode == AbsListView.OVER_SCROLL_ALWAYS || (overscrollMode == AbsListView.OVER_SCROLL_IF_CONTENT_SCROLLS && !this._AbsListView_this.contentFits())) { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_OVERFLING; - } - else { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; - if (this._AbsListView_this.mPositionScroller != null) { - this._AbsListView_this.mPositionScroller.stop(); - } - } - this._AbsListView_this.invalidate(); - this._AbsListView_this.postOnAnimation(this); + return this.fillDown(this.mFirstPosition, nextTop); + } + fillFromMiddle(childrenTop, childrenBottom) { + let height = childrenBottom - childrenTop; + let position = this.reconcileSelectedPosition(); + let sel = this.makeAndAddView(position, childrenTop, true, this.mListPadding.left, true); + this.mFirstPosition = position; + let selHeight = sel.getMeasuredHeight(); + if (selHeight <= height) { + sel.offsetTopAndBottom((height - selHeight) / 2); } - startScroll(distance, duration, linear) { - let initialY = distance < 0 ? Integer.MAX_VALUE : 0; - this.mLastFlingY = initialY; - this.mScroller.setInterpolator(linear ? AbsListView.sLinearInterpolator : null); - this.mScroller.startScroll(0, initialY, 0, distance, duration); - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_FLING; - this._AbsListView_this.postOnAnimation(this); + this.fillAboveAndBelow(sel, position); + if (!this.mStackFromBottom) { + this.correctTooHigh(this.getChildCount()); } - endFling() { - this._AbsListView_this.mTouchMode = AbsListView.TOUCH_MODE_REST; - this._AbsListView_this.removeCallbacks(this); - this._AbsListView_this.removeCallbacks(this.mCheckFlywheel); - this._AbsListView_this.reportScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE); - this._AbsListView_this.clearScrollingCache(); - this.mScroller.abortAnimation(); + else { + this.correctTooLow(this.getChildCount()); } - flywheelTouch() { - this._AbsListView_this.postDelayed(this.mCheckFlywheel, FlingRunnable.FLYWHEEL_TIMEOUT); + return sel; + } + fillAboveAndBelow(sel, position) { + const dividerHeight = this.mDividerHeight; + if (!this.mStackFromBottom) { + this.fillUp(position - 1, sel.getTop() - dividerHeight); + this.adjustViewsUpOrDown(); + this.fillDown(position + 1, sel.getBottom() + dividerHeight); } - run() { - switch (this._AbsListView_this.mTouchMode) { - default: - this.endFling(); - return; - case AbsListView.TOUCH_MODE_SCROLL: - if (this.mScroller.isFinished()) { - return; - } - case AbsListView.TOUCH_MODE_FLING: - { - if (this._AbsListView_this.mDataChanged) { - this._AbsListView_this.layoutChildren(); - } - if (this._AbsListView_this.mItemCount == 0 || this._AbsListView_this.getChildCount() == 0) { - this.endFling(); - return; - } - const scroller = this.mScroller; - let more = scroller.computeScrollOffset(); - const y = scroller.getCurrY(); - let delta = this.mLastFlingY - y; - if (delta > 0) { - this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition; - const firstView = this._AbsListView_this.getChildAt(0); - this._AbsListView_this.mMotionViewOriginalTop = firstView.getTop(); - delta = Math.min(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1, delta); - } - else { - let offsetToLast = this._AbsListView_this.getChildCount() - 1; - this._AbsListView_this.mMotionPosition = this._AbsListView_this.mFirstPosition + offsetToLast; - const lastView = this._AbsListView_this.getChildAt(offsetToLast); - this._AbsListView_this.mMotionViewOriginalTop = lastView.getTop(); - delta = Math.max(-(this._AbsListView_this.getHeight() - this._AbsListView_this.mPaddingBottom - this._AbsListView_this.mPaddingTop - 1), delta); - } - let motionView = this._AbsListView_this.getChildAt(this._AbsListView_this.mMotionPosition - this._AbsListView_this.mFirstPosition); - let oldTop = 0; - if (motionView != null) { - oldTop = motionView.getTop(); - } - const atEdge = this._AbsListView_this.trackMotionScroll(delta, delta); - const atEnd = atEdge && (delta != 0); - if (atEnd) { - if (motionView != null) { - let overshoot = -(delta - (motionView.getTop() - oldTop)); - this._AbsListView_this.overScrollBy(0, overshoot, 0, this._AbsListView_this.mScrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false); - } - if (more) { - this.edgeReached(delta); - } - break; - } - if (more && !atEnd) { - if (atEdge) - this._AbsListView_this.invalidate(); - this.mLastFlingY = y; - this._AbsListView_this.postOnAnimation(this); - } - else { - this.endFling(); - if (AbsListView.PROFILE_FLINGING) { - if (this._AbsListView_this.mFlingProfilingStarted) { - this._AbsListView_this.mFlingProfilingStarted = false; - } - } - } - break; - } - case AbsListView.TOUCH_MODE_OVERFLING: - { - const scroller = this.mScroller; - if (scroller.computeScrollOffset()) { - const scrollY = this._AbsListView_this.mScrollY; - const currY = scroller.getCurrY(); - let deltaY = currY - scrollY; - const crossDown = scrollY <= 0 && currY > 0; - const crossUp = scrollY >= 0 && currY < 0; - if (crossDown || crossUp) { - let velocity = Math.floor(scroller.getCurrVelocity()); - if (crossUp) - velocity = -velocity; - scroller.abortAnimation(); - this.start(velocity); - deltaY = -scrollY; - } - if (this._AbsListView_this.overScrollBy(0, deltaY, 0, scrollY, 0, 0, 0, this._AbsListView_this.mOverflingDistance, false)) { - this.startSpringback(); - } - else { - this._AbsListView_this.invalidate(); - this._AbsListView_this.postOnAnimation(this); - } - } - else { - this.endFling(); - } - break; - } - } + else { + this.fillDown(position + 1, sel.getBottom() + dividerHeight); + this.adjustViewsUpOrDown(); + this.fillUp(position - 1, sel.getTop() - dividerHeight); } } - FlingRunnable.FLYWHEEL_TIMEOUT = 40; - AbsListView.FlingRunnable = FlingRunnable; - class PositionScroller { - constructor(arg) { - this.mMode = 0; - this.mTargetPos = 0; - this.mBoundPos = 0; - this.mLastSeenPos = 0; - this.mScrollDuration = 0; - this.mExtraScroll = 0; - this.mOffsetFromTop = 0; - this._AbsListView_this = arg; - this.mExtraScroll = ViewConfiguration.get().getScaledFadingEdgeLength(); + fillFromSelection(selectedTop, childrenTop, childrenBottom) { + let fadingEdgeLength = this.getVerticalFadingEdgeLength(); + const selectedPosition = this.mSelectedPosition; + let sel; + const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); + const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition); + sel = this.makeAndAddView(selectedPosition, selectedTop, true, this.mListPadding.left, true); + if (sel.getBottom() > bottomSelectionPixel) { + const spaceAbove = sel.getTop() - topSelectionPixel; + const spaceBelow = sel.getBottom() - bottomSelectionPixel; + const offset = Math.min(spaceAbove, spaceBelow); + sel.offsetTopAndBottom(-offset); } - start(position, boundPosition) { - if (boundPosition == null) - this._start_1(position); - else - this._start_2(position, boundPosition); + else if (sel.getTop() < topSelectionPixel) { + const spaceAbove = topSelectionPixel - sel.getTop(); + const spaceBelow = bottomSelectionPixel - sel.getBottom(); + const offset = Math.min(spaceAbove, spaceBelow); + sel.offsetTopAndBottom(offset); } - _start_1(position) { - this.stop(); - if (this._AbsListView_this.mDataChanged) { - this._AbsListView_this.mPositionScrollAfterLayout = (() => { - const _this = this; - class _Inner { - run() { - _this.start(position); - } - } - return new _Inner(); - })(); - return; - } - const childCount = this._AbsListView_this.getChildCount(); - if (childCount == 0) { - return; - } - const firstPos = this._AbsListView_this.mFirstPosition; - const lastPos = firstPos + childCount - 1; - let viewTravelCount; - let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); - if (clampedPosition < firstPos) { - viewTravelCount = firstPos - clampedPosition + 1; - this.mMode = PositionScroller.MOVE_UP_POS; - } - else if (clampedPosition > lastPos) { - viewTravelCount = clampedPosition - lastPos + 1; - this.mMode = PositionScroller.MOVE_DOWN_POS; - } - else { - this.scrollToVisible(clampedPosition, AbsListView.INVALID_POSITION, PositionScroller.SCROLL_DURATION); - return; + this.fillAboveAndBelow(sel, selectedPosition); + if (!this.mStackFromBottom) { + this.correctTooHigh(this.getChildCount()); + } + else { + this.correctTooLow(this.getChildCount()); + } + return sel; + } + getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition) { + let bottomSelectionPixel = childrenBottom; + if (selectedPosition != this.mItemCount - 1) { + bottomSelectionPixel -= fadingEdgeLength; + } + return bottomSelectionPixel; + } + getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition) { + let topSelectionPixel = childrenTop; + if (selectedPosition > 0) { + topSelectionPixel += fadingEdgeLength; + } + return topSelectionPixel; + } + smoothScrollToPosition(position, boundPosition) { + super.smoothScrollToPosition(position, boundPosition); + } + smoothScrollByOffset(offset) { + super.smoothScrollByOffset(offset); + } + moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom) { + let fadingEdgeLength = this.getVerticalFadingEdgeLength(); + const selectedPosition = this.mSelectedPosition; + let sel; + const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); + const bottomSelectionPixel = this.getBottomSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); + if (delta > 0) { + oldSel = this.makeAndAddView(selectedPosition - 1, oldSel.getTop(), true, this.mListPadding.left, false); + const dividerHeight = this.mDividerHeight; + sel = this.makeAndAddView(selectedPosition, oldSel.getBottom() + dividerHeight, true, this.mListPadding.left, true); + if (sel.getBottom() > bottomSelectionPixel) { + let spaceAbove = sel.getTop() - topSelectionPixel; + let spaceBelow = sel.getBottom() - bottomSelectionPixel; + let halfVerticalSpace = (childrenBottom - childrenTop) / 2; + let offset = Math.min(spaceAbove, spaceBelow); + offset = Math.min(offset, halfVerticalSpace); + oldSel.offsetTopAndBottom(-offset); + sel.offsetTopAndBottom(-offset); } - if (viewTravelCount > 0) { - this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount; + if (!this.mStackFromBottom) { + this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight); + this.adjustViewsUpOrDown(); + this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight); } else { - this.mScrollDuration = PositionScroller.SCROLL_DURATION; + this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight); + this.adjustViewsUpOrDown(); + this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight); } - this.mTargetPos = clampedPosition; - this.mBoundPos = AbsListView.INVALID_POSITION; - this.mLastSeenPos = AbsListView.INVALID_POSITION; - this._AbsListView_this.postOnAnimation(this); } - _start_2(position, boundPosition) { - this.stop(); - if (boundPosition == AbsListView.INVALID_POSITION) { - this.start(position); - return; + else if (delta < 0) { + if (newSel != null) { + sel = this.makeAndAddView(selectedPosition, newSel.getTop(), true, this.mListPadding.left, true); } - if (this._AbsListView_this.mDataChanged) { - this._AbsListView_this.mPositionScrollAfterLayout = (() => { - const _this = this; - class _Inner { - run() { - _this.start(position, boundPosition); - } - } - return new _Inner(); - })(); - return; + else { + sel = this.makeAndAddView(selectedPosition, oldSel.getTop(), false, this.mListPadding.left, true); } - const childCount = this._AbsListView_this.getChildCount(); - if (childCount == 0) { - return; + if (sel.getTop() < topSelectionPixel) { + let spaceAbove = topSelectionPixel - sel.getTop(); + let spaceBelow = bottomSelectionPixel - sel.getBottom(); + let halfVerticalSpace = (childrenBottom - childrenTop) / 2; + let offset = Math.min(spaceAbove, spaceBelow); + offset = Math.min(offset, halfVerticalSpace); + sel.offsetTopAndBottom(offset); } - const firstPos = this._AbsListView_this.mFirstPosition; - const lastPos = firstPos + childCount - 1; - let viewTravelCount; - let clampedPosition = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); - if (clampedPosition < firstPos) { - const boundPosFromLast = lastPos - boundPosition; - if (boundPosFromLast < 1) { - return; - } - const posTravel = firstPos - clampedPosition + 1; - const boundTravel = boundPosFromLast - 1; - if (boundTravel < posTravel) { - viewTravelCount = boundTravel; - this.mMode = PositionScroller.MOVE_UP_BOUND; - } - else { - viewTravelCount = posTravel; - this.mMode = PositionScroller.MOVE_UP_POS; + this.fillAboveAndBelow(sel, selectedPosition); + } + else { + let oldTop = oldSel.getTop(); + sel = this.makeAndAddView(selectedPosition, oldTop, true, this.mListPadding.left, true); + if (oldTop < childrenTop) { + let newBottom = sel.getBottom(); + if (newBottom < childrenTop + 20) { + sel.offsetTopAndBottom(childrenTop - sel.getTop()); } } - else if (clampedPosition > lastPos) { - const boundPosFromFirst = boundPosition - firstPos; - if (boundPosFromFirst < 1) { - return; - } - const posTravel = clampedPosition - lastPos + 1; - const boundTravel = boundPosFromFirst - 1; - if (boundTravel < posTravel) { - viewTravelCount = boundTravel; - this.mMode = PositionScroller.MOVE_DOWN_BOUND; - } - else { - viewTravelCount = posTravel; - this.mMode = PositionScroller.MOVE_DOWN_POS; + this.fillAboveAndBelow(sel, selectedPosition); + } + return sel; + } + onSizeChanged(w, h, oldw, oldh) { + if (this.getChildCount() > 0) { + let focusedChild = this.getFocusedChild(); + if (focusedChild != null) { + const childPosition = this.mFirstPosition + this.indexOfChild(focusedChild); + const childBottom = focusedChild.getBottom(); + const offset = Math.max(0, childBottom - (h - this.mPaddingTop)); + const top = focusedChild.getTop() - offset; + if (this.mFocusSelector == null) { + this.mFocusSelector = new ListView.FocusSelector(this); } + this.post(this.mFocusSelector.setup(childPosition, top)); } - else { - this.scrollToVisible(clampedPosition, boundPosition, PositionScroller.SCROLL_DURATION); - return; - } - if (viewTravelCount > 0) { - this.mScrollDuration = PositionScroller.SCROLL_DURATION / viewTravelCount; - } - else { - this.mScrollDuration = PositionScroller.SCROLL_DURATION; - } - this.mTargetPos = clampedPosition; - this.mBoundPos = boundPosition; - this.mLastSeenPos = AbsListView.INVALID_POSITION; - this._AbsListView_this.postOnAnimation(this); } - startWithOffset(position, offset, duration = PositionScroller.SCROLL_DURATION) { - this.stop(); - if (this._AbsListView_this.mDataChanged) { - const postOffset = offset; - this._AbsListView_this.mPositionScrollAfterLayout = (() => { - const _this = this; - class _Inner { - run() { - _this.startWithOffset(position, postOffset, duration); - } - } - return new _Inner(); - })(); - return; - } - const childCount = this._AbsListView_this.getChildCount(); - if (childCount == 0) { - return; - } - offset += this._AbsListView_this.getPaddingTop(); - this.mTargetPos = Math.max(0, Math.min(this._AbsListView_this.getCount() - 1, position)); - this.mOffsetFromTop = offset; - this.mBoundPos = AbsListView.INVALID_POSITION; - this.mLastSeenPos = AbsListView.INVALID_POSITION; - this.mMode = PositionScroller.MOVE_OFFSET; - const firstPos = this._AbsListView_this.mFirstPosition; - const lastPos = firstPos + childCount - 1; - let viewTravelCount; - if (this.mTargetPos < firstPos) { - viewTravelCount = firstPos - this.mTargetPos; - } - else if (this.mTargetPos > lastPos) { - viewTravelCount = this.mTargetPos - lastPos; - } - else { - const targetTop = this._AbsListView_this.getChildAt(this.mTargetPos - firstPos).getTop(); - this._AbsListView_this.smoothScrollBy(targetTop - offset, duration, true); - return; + super.onSizeChanged(w, h, oldw, oldh); + } + onMeasure(widthMeasureSpec, heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + let widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + let heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + let widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + let heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + let childWidth = 0; + let childHeight = 0; + let childState = 0; + this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount(); + if (this.mItemCount > 0 && (widthMode == View.MeasureSpec.UNSPECIFIED || heightMode == View.MeasureSpec.UNSPECIFIED)) { + const child = this.obtainView(0, this.mIsScrap); + this.measureScrapChild(child, 0, widthMeasureSpec); + childWidth = child.getMeasuredWidth(); + childHeight = child.getMeasuredHeight(); + childState = ListView.combineMeasuredStates(childState, child.getMeasuredState()); + if (this.recycleOnMeasure() && this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)) { + this.mRecycler.addScrapView(child, -1); } - const screenTravelCount = viewTravelCount / childCount; - this.mScrollDuration = screenTravelCount < 1 ? duration : Math.floor((duration / screenTravelCount)); - this.mLastSeenPos = AbsListView.INVALID_POSITION; - this._AbsListView_this.postOnAnimation(this); } - scrollToVisible(targetPos, boundPos, duration) { - const firstPos = this._AbsListView_this.mFirstPosition; - const childCount = this._AbsListView_this.getChildCount(); - const lastPos = firstPos + childCount - 1; - const paddedTop = this._AbsListView_this.mListPadding.top; - const paddedBottom = this._AbsListView_this.getHeight() - this._AbsListView_this.mListPadding.bottom; - if (targetPos < firstPos || targetPos > lastPos) { - Log.w(AbsListView.TAG_AbsListView, "scrollToVisible called with targetPos " + targetPos + " not visible [" + firstPos + ", " + lastPos + "]"); - } - if (boundPos < firstPos || boundPos > lastPos) { - boundPos = AbsListView.INVALID_POSITION; - } - const targetChild = this._AbsListView_this.getChildAt(targetPos - firstPos); - const targetTop = targetChild.getTop(); - const targetBottom = targetChild.getBottom(); - let scrollBy = 0; - if (targetBottom > paddedBottom) { - scrollBy = targetBottom - paddedBottom; - } - if (targetTop < paddedTop) { - scrollBy = targetTop - paddedTop; - } - if (scrollBy == 0) { - return; - } - if (boundPos >= 0) { - const boundChild = this._AbsListView_this.getChildAt(boundPos - firstPos); - const boundTop = boundChild.getTop(); - const boundBottom = boundChild.getBottom(); - const absScroll = Math.abs(scrollBy); - if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) { - scrollBy = Math.max(0, boundBottom - paddedBottom); - } - else if (scrollBy > 0 && boundTop - absScroll < paddedTop) { - scrollBy = Math.min(0, boundTop - paddedTop); - } - } - this._AbsListView_this.smoothScrollBy(scrollBy, duration); + if (widthMode == View.MeasureSpec.UNSPECIFIED) { + widthSize = this.mListPadding.left + this.mListPadding.right + childWidth + this.getVerticalScrollbarWidth(); } - stop() { - this._AbsListView_this.removeCallbacks(this); + else { + widthSize |= (childState & ListView.MEASURED_STATE_MASK); } - run() { - const listHeight = this._AbsListView_this.getHeight(); - const firstPos = this._AbsListView_this.mFirstPosition; - switch (this.mMode) { - case PositionScroller.MOVE_DOWN_POS: - { - const lastViewIndex = this._AbsListView_this.getChildCount() - 1; - const lastPos = firstPos + lastViewIndex; - if (lastViewIndex < 0) { - return; - } - if (lastPos == this.mLastSeenPos) { - this._AbsListView_this.postOnAnimation(this); - return; - } - const lastView = this._AbsListView_this.getChildAt(lastViewIndex); - const lastViewHeight = lastView.getHeight(); - const lastViewTop = lastView.getTop(); - const lastViewPixelsShowing = listHeight - lastViewTop; - const extraScroll = lastPos < this._AbsListView_this.mItemCount - 1 ? Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll) : this._AbsListView_this.mListPadding.bottom; - const scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll; - this._AbsListView_this.smoothScrollBy(scrollBy, this.mScrollDuration, true); - this.mLastSeenPos = lastPos; - if (lastPos < this.mTargetPos) { - this._AbsListView_this.postOnAnimation(this); - } - break; - } - case PositionScroller.MOVE_DOWN_BOUND: - { - const nextViewIndex = 1; - const childCount = this._AbsListView_this.getChildCount(); - if (firstPos == this.mBoundPos || childCount <= nextViewIndex || firstPos + childCount >= this._AbsListView_this.mItemCount) { - return; - } - const nextPos = firstPos + nextViewIndex; - if (nextPos == this.mLastSeenPos) { - this._AbsListView_this.postOnAnimation(this); - return; - } - const nextView = this._AbsListView_this.getChildAt(nextViewIndex); - const nextViewHeight = nextView.getHeight(); - const nextViewTop = nextView.getTop(); - const extraScroll = Math.max(this._AbsListView_this.mListPadding.bottom, this.mExtraScroll); - if (nextPos < this.mBoundPos) { - this._AbsListView_this.smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll), this.mScrollDuration, true); - this.mLastSeenPos = nextPos; - this._AbsListView_this.postOnAnimation(this); - } - else { - if (nextViewTop > extraScroll) { - this._AbsListView_this.smoothScrollBy(nextViewTop - extraScroll, this.mScrollDuration, true); - } - } - break; - } - case PositionScroller.MOVE_UP_POS: - { - if (firstPos == this.mLastSeenPos) { - this._AbsListView_this.postOnAnimation(this); - return; - } - const firstView = this._AbsListView_this.getChildAt(0); - if (firstView == null) { - return; - } - const firstViewTop = firstView.getTop(); - const extraScroll = firstPos > 0 ? Math.max(this.mExtraScroll, this._AbsListView_this.mListPadding.top) : this._AbsListView_this.mListPadding.top; - this._AbsListView_this.smoothScrollBy(firstViewTop - extraScroll, this.mScrollDuration, true); - this.mLastSeenPos = firstPos; - if (firstPos > this.mTargetPos) { - this._AbsListView_this.postOnAnimation(this); - } - break; - } - case PositionScroller.MOVE_UP_BOUND: - { - const lastViewIndex = this._AbsListView_this.getChildCount() - 2; - if (lastViewIndex < 0) { - return; - } - const lastPos = firstPos + lastViewIndex; - if (lastPos == this.mLastSeenPos) { - this._AbsListView_this.postOnAnimation(this); - return; - } - const lastView = this._AbsListView_this.getChildAt(lastViewIndex); - const lastViewHeight = lastView.getHeight(); - const lastViewTop = lastView.getTop(); - const lastViewPixelsShowing = listHeight - lastViewTop; - const extraScroll = Math.max(this._AbsListView_this.mListPadding.top, this.mExtraScroll); - this.mLastSeenPos = lastPos; - if (lastPos > this.mBoundPos) { - this._AbsListView_this.smoothScrollBy(-(lastViewPixelsShowing - extraScroll), this.mScrollDuration, true); - this._AbsListView_this.postOnAnimation(this); - } - else { - const bottom = listHeight - extraScroll; - const lastViewBottom = lastViewTop + lastViewHeight; - if (bottom > lastViewBottom) { - this._AbsListView_this.smoothScrollBy(-(bottom - lastViewBottom), this.mScrollDuration, true); - } - } - break; - } - case PositionScroller.MOVE_OFFSET: - { - if (this.mLastSeenPos == firstPos) { - this._AbsListView_this.postOnAnimation(this); - return; - } - this.mLastSeenPos = firstPos; - const childCount = this._AbsListView_this.getChildCount(); - const position = this.mTargetPos; - const lastPos = firstPos + childCount - 1; - let viewTravelCount = 0; - if (position < firstPos) { - viewTravelCount = firstPos - position + 1; - } - else if (position > lastPos) { - viewTravelCount = position - lastPos; - } - const screenTravelCount = viewTravelCount / childCount; - const modifier = Math.min(Math.abs(screenTravelCount), 1.); - if (position < firstPos) { - const distance = Math.floor((-this._AbsListView_this.getHeight() * modifier)); - const duration = Math.floor((this.mScrollDuration * modifier)); - this._AbsListView_this.smoothScrollBy(distance, duration, true); - this._AbsListView_this.postOnAnimation(this); - } - else if (position > lastPos) { - const distance = Math.floor((this._AbsListView_this.getHeight() * modifier)); - const duration = Math.floor((this.mScrollDuration * modifier)); - this._AbsListView_this.smoothScrollBy(distance, duration, true); - this._AbsListView_this.postOnAnimation(this); - } - else { - const targetTop = this._AbsListView_this.getChildAt(position - firstPos).getTop(); - const distance = targetTop - this.mOffsetFromTop; - const duration = Math.floor((this.mScrollDuration * (Math.abs(distance) / this._AbsListView_this.getHeight()))); - this._AbsListView_this.smoothScrollBy(distance, duration, true); - } - break; - } - default: - break; - } + if (heightMode == View.MeasureSpec.UNSPECIFIED) { + heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2; + } + if (heightMode == View.MeasureSpec.AT_MOST) { + heightSize = this.measureHeightOfChildren(widthMeasureSpec, 0, ListView.NO_POSITION, heightSize, -1); } + this.setMeasuredDimension(widthSize, heightSize); + this.mWidthMeasureSpec = widthMeasureSpec; } - PositionScroller.SCROLL_DURATION = 200; - PositionScroller.MOVE_DOWN_POS = 1; - PositionScroller.MOVE_UP_POS = 2; - PositionScroller.MOVE_DOWN_BOUND = 3; - PositionScroller.MOVE_UP_BOUND = 4; - PositionScroller.MOVE_OFFSET = 5; - AbsListView.PositionScroller = PositionScroller; - class AdapterDataSetObserver extends AdapterView.AdapterDataSetObserver { - constructor(arg) { - super(arg); - this._AbsListView_this = arg; + measureScrapChild(child, position, widthMeasureSpec) { + let p = child.getLayoutParams(); + if (p == null) { + p = this.generateDefaultLayoutParams(); + child.setLayoutParams(p); } - onChanged() { - super.onChanged(); + p.viewType = this.mAdapter.getItemViewType(position); + p.forceAdd = true; + let childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); + let lpHeight = p.height; + let childHeightSpec; + if (lpHeight > 0) { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY); } - onInvalidated() { - super.onInvalidated(); + else { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); } + child.measure(childWidthSpec, childHeightSpec); } - AbsListView.AdapterDataSetObserver = AdapterDataSetObserver; - class LayoutParams extends ViewGroup.LayoutParams { - constructor(...args) { - super(...(args.length == 3 ? [args[0], args[1]] : args)); - this.viewType = 0; - this.scrappedFromPosition = 0; - this.itemId = -1; - if (args.length === 3) { - this.viewType = args[2]; - } - } + recycleOnMeasure() { + return true; } - AbsListView.LayoutParams = LayoutParams; - class RecycleBin { - constructor(arg) { - this.mFirstActivePosition = 0; - this.mActiveViews = []; - this.mViewTypeCount = 0; - this._AbsListView_this = arg; - } - setViewTypeCount(viewTypeCount) { - if (viewTypeCount < 1) { - throw Error(`new IllegalArgumentException("Can't have a viewTypeCount < 1")`); - } - let scrapViews = new Array(viewTypeCount); - for (let i = 0; i < viewTypeCount; i++) { - scrapViews[i] = new ArrayList(); - } - this.mViewTypeCount = viewTypeCount; - this.mCurrentScrap = scrapViews[0]; - this.mScrapViews = scrapViews; + measureHeightOfChildren(widthMeasureSpec, startPosition, endPosition, maxHeight, disallowPartialChildPosition) { + const adapter = this.mAdapter; + if (adapter == null) { + return this.mListPadding.top + this.mListPadding.bottom; } - markChildrenDirty() { - if (this.mViewTypeCount == 1) { - const scrap = this.mCurrentScrap; - const scrapCount = scrap.size(); - for (let i = 0; i < scrapCount; i++) { - scrap.get(i).forceLayout(); - } - } - else { - const typeCount = this.mViewTypeCount; - for (let i = 0; i < typeCount; i++) { - const scrap = this.mScrapViews[i]; - const scrapCount = scrap.size(); - for (let j = 0; j < scrapCount; j++) { - scrap.get(j).forceLayout(); - } - } + let returnedHeight = this.mListPadding.top + this.mListPadding.bottom; + const dividerHeight = ((this.mDividerHeight > 0) && this.mDivider != null) ? this.mDividerHeight : 0; + let prevHeightWithoutPartialChild = 0; + let i; + let child; + endPosition = (endPosition == ListView.NO_POSITION) ? adapter.getCount() - 1 : endPosition; + const recycleBin = this.mRecycler; + const recyle = this.recycleOnMeasure(); + const isScrap = this.mIsScrap; + for (i = startPosition; i <= endPosition; ++i) { + child = this.obtainView(i, isScrap); + this.measureScrapChild(child, i, widthMeasureSpec); + if (i > 0) { + returnedHeight += dividerHeight; } - if (this.mTransientStateViews != null) { - const count = this.mTransientStateViews.size(); - for (let i = 0; i < count; i++) { - this.mTransientStateViews.valueAt(i).forceLayout(); - } + if (recyle && recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)) { + recycleBin.addScrapView(child, -1); } - if (this.mTransientStateViewsById != null) { - const count = this.mTransientStateViewsById.size(); - for (let i = 0; i < count; i++) { - this.mTransientStateViewsById.valueAt(i).forceLayout(); - } + returnedHeight += child.getMeasuredHeight(); + if (returnedHeight >= maxHeight) { + return (disallowPartialChildPosition >= 0) && + (i > disallowPartialChildPosition) && + (prevHeightWithoutPartialChild > 0) && + (returnedHeight != maxHeight) ? prevHeightWithoutPartialChild : maxHeight; + } + if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) { + prevHeightWithoutPartialChild = returnedHeight; } } - shouldRecycleViewType(viewType) { - return viewType >= 0; - } - clear() { - if (this.mViewTypeCount == 1) { - const scrap = this.mCurrentScrap; - const scrapCount = scrap.size(); - for (let i = 0; i < scrapCount; i++) { - this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - i), false); + return returnedHeight; + } + findMotionRow(y) { + let childCount = this.getChildCount(); + if (childCount > 0) { + if (!this.mStackFromBottom) { + for (let i = 0; i < childCount; i++) { + let v = this.getChildAt(i); + if (y <= v.getBottom()) { + return this.mFirstPosition + i; + } } } else { - const typeCount = this.mViewTypeCount; - for (let i = 0; i < typeCount; i++) { - const scrap = this.mScrapViews[i]; - const scrapCount = scrap.size(); - for (let j = 0; j < scrapCount; j++) { - this._AbsListView_this.removeDetachedView(scrap.remove(scrapCount - 1 - j), false); + for (let i = childCount - 1; i >= 0; i--) { + let v = this.getChildAt(i); + if (y >= v.getTop()) { + return this.mFirstPosition + i; } } } - if (this.mTransientStateViews != null) { - this.mTransientStateViews.clear(); - } - if (this.mTransientStateViewsById != null) { - this.mTransientStateViewsById.clear(); - } } - fillActiveViews(childCount, firstActivePosition) { - if (this.mActiveViews.length < childCount) { - this.mActiveViews = new Array(childCount); - } - this.mFirstActivePosition = firstActivePosition; - const activeViews = this.mActiveViews; - for (let i = 0; i < childCount; i++) { - let child = this._AbsListView_this.getChildAt(i); - let lp = child.getLayoutParams(); - if (lp != null && lp.viewType != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { - activeViews[i] = child; - } + return ListView.INVALID_POSITION; + } + fillSpecific(position, top) { + let tempIsSelected = position == this.mSelectedPosition; + let temp = this.makeAndAddView(position, top, true, this.mListPadding.left, tempIsSelected); + this.mFirstPosition = position; + let above; + let below; + const dividerHeight = this.mDividerHeight; + if (!this.mStackFromBottom) { + above = this.fillUp(position - 1, temp.getTop() - dividerHeight); + this.adjustViewsUpOrDown(); + below = this.fillDown(position + 1, temp.getBottom() + dividerHeight); + let childCount = this.getChildCount(); + if (childCount > 0) { + this.correctTooHigh(childCount); } } - getActiveView(position) { - let index = position - this.mFirstActivePosition; - const activeViews = this.mActiveViews; - if (index >= 0 && index < activeViews.length) { - const match = activeViews[index]; - activeViews[index] = null; - return match; + else { + below = this.fillDown(position + 1, temp.getBottom() + dividerHeight); + this.adjustViewsUpOrDown(); + above = this.fillUp(position - 1, temp.getTop() - dividerHeight); + let childCount = this.getChildCount(); + if (childCount > 0) { + this.correctTooLow(childCount); } - return null; } - getTransientStateView(position) { - if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds && this.mTransientStateViewsById != null) { - let id = this._AbsListView_this.mAdapter.getItemId(position); - let result = this.mTransientStateViewsById.get(id); - this.mTransientStateViewsById.remove(id); - return result; - } - if (this.mTransientStateViews != null) { - const index = this.mTransientStateViews.indexOfKey(position); - if (index >= 0) { - let result = this.mTransientStateViews.valueAt(index); - this.mTransientStateViews.removeAt(index); - return result; - } - } - return null; + if (tempIsSelected) { + return temp; } - clearTransientStateViews() { - if (this.mTransientStateViews != null) { - this.mTransientStateViews.clear(); - } - if (this.mTransientStateViewsById != null) { - this.mTransientStateViewsById.clear(); - } + else if (above != null) { + return above; } - getScrapView(position) { - if (this.mViewTypeCount == 1) { - return AbsListView.retrieveFromScrap(this.mCurrentScrap, position); - } - else { - let whichScrap = this._AbsListView_this.mAdapter.getItemViewType(position); - if (whichScrap >= 0 && whichScrap < this.mScrapViews.length) { - return AbsListView.retrieveFromScrap(this.mScrapViews[whichScrap], position); + else { + return below; + } + } + correctTooHigh(childCount) { + let lastPosition = this.mFirstPosition + childCount - 1; + if (lastPosition == this.mItemCount - 1 && childCount > 0) { + const lastChild = this.getChildAt(childCount - 1); + const lastBottom = lastChild.getBottom(); + const end = (this.mBottom - this.mTop) - this.mListPadding.bottom; + let bottomOffset = end - lastBottom; + let firstChild = this.getChildAt(0); + const firstTop = firstChild.getTop(); + if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) { + if (this.mFirstPosition == 0) { + bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop); + } + this.offsetChildrenTopAndBottom(bottomOffset); + if (this.mFirstPosition > 0) { + this.fillUp(this.mFirstPosition - 1, firstChild.getTop() - this.mDividerHeight); + this.adjustViewsUpOrDown(); } } - return null; } - addScrapView(scrap, position) { - const lp = scrap.getLayoutParams(); - if (lp == null) { - return; + } + correctTooLow(childCount) { + if (this.mFirstPosition == 0 && childCount > 0) { + const firstChild = this.getChildAt(0); + const firstTop = firstChild.getTop(); + const start = this.mListPadding.top; + const end = (this.mBottom - this.mTop) - this.mListPadding.bottom; + let topOffset = firstTop - start; + let lastChild = this.getChildAt(childCount - 1); + const lastBottom = lastChild.getBottom(); + let lastPosition = this.mFirstPosition + childCount - 1; + if (topOffset > 0) { + if (lastPosition < this.mItemCount - 1 || lastBottom > end) { + if (lastPosition == this.mItemCount - 1) { + topOffset = Math.min(topOffset, lastBottom - end); + } + this.offsetChildrenTopAndBottom(-topOffset); + if (lastPosition < this.mItemCount - 1) { + this.fillDown(lastPosition + 1, lastChild.getBottom() + this.mDividerHeight); + this.adjustViewsUpOrDown(); + } + } + else if (lastPosition == this.mItemCount - 1) { + this.adjustViewsUpOrDown(); + } } - lp.scrappedFromPosition = position; - const viewType = lp.viewType; - if (!this.shouldRecycleViewType(viewType)) { + } + } + layoutChildren() { + const blockLayoutRequests = this.mBlockLayoutRequests; + if (blockLayoutRequests) { + return; + } + this.mBlockLayoutRequests = true; + try { + super.layoutChildren(); + this.invalidate(); + if (this.mAdapter == null) { + this.resetList(); + this.invokeOnItemScrollListener(); return; } - scrap.dispatchStartTemporaryDetach(); - const scrapHasTransientState = scrap.hasTransientState(); - if (scrapHasTransientState) { - if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) { - if (this.mTransientStateViewsById == null) { - this.mTransientStateViewsById = new LongSparseArray(); + const childrenTop = this.mListPadding.top; + const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom; + const childCount = this.getChildCount(); + let index = 0; + let delta = 0; + let sel; + let oldSel = null; + let oldFirst = null; + let newSel = null; + switch (this.mLayoutMode) { + case ListView.LAYOUT_SET_SELECTION: + index = this.mNextSelectedPosition - this.mFirstPosition; + if (index >= 0 && index < childCount) { + newSel = this.getChildAt(index); } - this.mTransientStateViewsById.put(lp.itemId, scrap); - } - else if (!this._AbsListView_this.mDataChanged) { - if (this.mTransientStateViews == null) { - this.mTransientStateViews = new SparseArray(); + break; + case ListView.LAYOUT_FORCE_TOP: + case ListView.LAYOUT_FORCE_BOTTOM: + case ListView.LAYOUT_SPECIFIC: + case ListView.LAYOUT_SYNC: + break; + case ListView.LAYOUT_MOVE_SELECTION: + default: + index = this.mSelectedPosition - this.mFirstPosition; + if (index >= 0 && index < childCount) { + oldSel = this.getChildAt(index); } - this.mTransientStateViews.put(position, scrap); - } - else { - if (this.mSkippedScrap == null) { - this.mSkippedScrap = new ArrayList(); + oldFirst = this.getChildAt(0); + if (this.mNextSelectedPosition >= 0) { + delta = this.mNextSelectedPosition - this.mSelectedPosition; } - this.mSkippedScrap.add(scrap); - } + newSel = this.getChildAt(index + delta); } - else { - if (this.mViewTypeCount == 1) { - this.mCurrentScrap.add(scrap); - } - else { - this.mScrapViews[viewType].add(scrap); - } - if (this.mRecyclerListener != null) { - this.mRecyclerListener.onMovedToScrapHeap(scrap); - } + let dataChanged = this.mDataChanged; + if (dataChanged) { + this.handleDataChanged(); } - } - removeSkippedScrap() { - if (this.mSkippedScrap == null) { + if (this.mItemCount == 0) { + this.resetList(); + this.invokeOnItemScrollListener(); return; } - const count = this.mSkippedScrap.size(); - for (let i = 0; i < count; i++) { - this._AbsListView_this.removeDetachedView(this.mSkippedScrap.get(i), false); + else if (this.mItemCount != this.mAdapter.getCount()) { + throw Error(`IllegalStateException("The content of the adapter has changed but + ListView did not receive a notification. Make sure the content of + your adapter is not modified from a background thread, but only from + the UI thread. Make sure your adapter calls notifyDataSetChanged() + when its content changes. [in ListView(${this.getId()},${this.constructor.name}) + with Adapter(${this.mAdapter.constructor.name})]")`); } - this.mSkippedScrap.clear(); - } - scrapActiveViews() { - const activeViews = this.mActiveViews; - const hasListener = this.mRecyclerListener != null; - const multipleScraps = this.mViewTypeCount > 1; - let scrapViews = this.mCurrentScrap; - const count = activeViews.length; - for (let i = count - 1; i >= 0; i--) { - const victim = activeViews[i]; - if (victim != null) { - const lp = victim.getLayoutParams(); - let whichScrap = lp.viewType; - activeViews[i] = null; - const scrapHasTransientState = victim.hasTransientState(); - if (!this.shouldRecycleViewType(whichScrap) || scrapHasTransientState) { - if (whichScrap != AbsListView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER && scrapHasTransientState) { - this._AbsListView_this.removeDetachedView(victim, false); + this.setSelectedPositionInt(this.mNextSelectedPosition); + const accessFocusedChild = null; + const focusedChild = this.getFocusedChild(); + if (focusedChild != null) { + focusedChild.setHasTransientState(true); + } + const firstPosition = this.mFirstPosition; + const recycleBin = this.mRecycler; + if (dataChanged) { + for (let i = 0; i < childCount; i++) { + recycleBin.addScrapView(this.getChildAt(i), firstPosition + i); + } + } + else { + recycleBin.fillActiveViews(childCount, firstPosition); + } + this.detachAllViewsFromParent(); + recycleBin.removeSkippedScrap(); + switch (this.mLayoutMode) { + case ListView.LAYOUT_SET_SELECTION: + if (newSel != null) { + sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom); + } + else { + sel = this.fillFromMiddle(childrenTop, childrenBottom); + } + break; + case ListView.LAYOUT_SYNC: + sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop); + break; + case ListView.LAYOUT_FORCE_BOTTOM: + sel = this.fillUp(this.mItemCount - 1, childrenBottom); + this.adjustViewsUpOrDown(); + break; + case ListView.LAYOUT_FORCE_TOP: + this.mFirstPosition = 0; + sel = this.fillFromTop(childrenTop); + this.adjustViewsUpOrDown(); + break; + case ListView.LAYOUT_SPECIFIC: + sel = this.fillSpecific(this.reconcileSelectedPosition(), this.mSpecificTop); + break; + case ListView.LAYOUT_MOVE_SELECTION: + sel = this.moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom); + break; + default: + if (childCount == 0) { + if (!this.mStackFromBottom) { + const position = this.lookForSelectablePosition(0, true); + this.setSelectedPositionInt(position); + sel = this.fillFromTop(childrenTop); } - if (scrapHasTransientState) { - if (this._AbsListView_this.mAdapter != null && this._AbsListView_this.mAdapterHasStableIds) { - if (this.mTransientStateViewsById == null) { - this.mTransientStateViewsById = new LongSparseArray(); - } - let id = this._AbsListView_this.mAdapter.getItemId(this.mFirstActivePosition + i); - this.mTransientStateViewsById.put(id, victim); - } - else { - if (this.mTransientStateViews == null) { - this.mTransientStateViews = new SparseArray(); - } - this.mTransientStateViews.put(this.mFirstActivePosition + i, victim); - } + else { + const position = this.lookForSelectablePosition(this.mItemCount - 1, false); + this.setSelectedPositionInt(position); + sel = this.fillUp(this.mItemCount - 1, childrenBottom); } - continue; } - if (multipleScraps) { - scrapViews = this.mScrapViews[whichScrap]; + else { + if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) { + sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop()); + } + else if (this.mFirstPosition < this.mItemCount) { + sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop()); + } + else { + sel = this.fillSpecific(0, childrenTop); + } } - victim.dispatchStartTemporaryDetach(); - lp.scrappedFromPosition = this.mFirstActivePosition + i; - scrapViews.add(victim); - if (hasListener) { - this.mRecyclerListener.onMovedToScrapHeap(victim); + break; + } + recycleBin.scrapActiveViews(); + if (sel != null) { + const shouldPlaceFocus = this.mItemsCanFocus && this.hasFocus(); + const maintainedFocus = focusedChild != null && focusedChild.hasFocus(); + if (shouldPlaceFocus && !maintainedFocus && !sel.hasFocus()) { + if (sel.requestFocus()) { + sel.setSelected(false); + this.mSelectorRect.setEmpty(); + } + else { + const focused = this.getFocusedChild(); + if (focused != null) { + focused.clearFocus(); + } + this.positionSelector(ListView.INVALID_POSITION, sel); } } - } - this.pruneScrapViews(); - } - pruneScrapViews() { - const maxViews = this.mActiveViews.length; - const viewTypeCount = this.mViewTypeCount; - const scrapViews = this.mScrapViews; - for (let i = 0; i < viewTypeCount; ++i) { - const scrapPile = scrapViews[i]; - let size = scrapPile.size(); - const extras = size - maxViews; - size--; - for (let j = 0; j < extras; j++) { - this._AbsListView_this.removeDetachedView(scrapPile.remove(size--), false); + else { + this.positionSelector(ListView.INVALID_POSITION, sel); } + this.mSelectedTop = sel.getTop(); } - if (this.mTransientStateViews != null) { - for (let i = 0; i < this.mTransientStateViews.size(); i++) { - const v = this.mTransientStateViews.valueAt(i); - if (!v.hasTransientState()) { - this.mTransientStateViews.removeAt(i); - i--; + else { + if (this.mTouchMode == ListView.TOUCH_MODE_TAP || this.mTouchMode == ListView.TOUCH_MODE_DONE_WAITING) { + const child = this.getChildAt(this.mMotionPosition - this.mFirstPosition); + if (child != null) { + this.positionSelector(this.mMotionPosition, child); } } - } - if (this.mTransientStateViewsById != null) { - for (let i = 0; i < this.mTransientStateViewsById.size(); i++) { - const v = this.mTransientStateViewsById.valueAt(i); - if (!v.hasTransientState()) { - this.mTransientStateViewsById.removeAt(i); - i--; - } + else { + this.mSelectedTop = 0; + this.mSelectorRect.setEmpty(); } } - } - reclaimScrapViews(views) { - if (this.mViewTypeCount == 1) { - views.addAll(this.mCurrentScrap); + if (accessFocusedChild != null) { + accessFocusedChild.setHasTransientState(false); } - else { - const viewTypeCount = this.mViewTypeCount; - const scrapViews = this.mScrapViews; - for (let i = 0; i < viewTypeCount; ++i) { - const scrapPile = scrapViews[i]; - views.addAll(scrapPile); - } + if (focusedChild != null) { + focusedChild.setHasTransientState(false); } - } - setCacheColorHint(color) { - if (this.mViewTypeCount == 1) { - const scrap = this.mCurrentScrap; - const scrapCount = scrap.size(); - for (let i = 0; i < scrapCount; i++) { - scrap.get(i).setDrawingCacheBackgroundColor(color); - } + this.mLayoutMode = ListView.LAYOUT_NORMAL; + this.mDataChanged = false; + if (this.mPositionScrollAfterLayout != null) { + this.post(this.mPositionScrollAfterLayout); + this.mPositionScrollAfterLayout = null; } - else { - const typeCount = this.mViewTypeCount; - for (let i = 0; i < typeCount; i++) { - const scrap = this.mScrapViews[i]; - const scrapCount = scrap.size(); - for (let j = 0; j < scrapCount; j++) { - scrap.get(j).setDrawingCacheBackgroundColor(color); - } - } + this.mNeedSync = false; + this.setNextSelectedPositionInt(this.mSelectedPosition); + this.updateScrollIndicators(); + if (this.mItemCount > 0) { + this.checkSelectionChanged(); } - const activeViews = this.mActiveViews; - const count = activeViews.length; - for (let i = 0; i < count; ++i) { - const victim = activeViews[i]; - if (victim != null) { - victim.setDrawingCacheBackgroundColor(color); - } + this.invokeOnItemScrollListener(); + } + finally { + if (!blockLayoutRequests) { + this.mBlockLayoutRequests = false; } } } - AbsListView.RecycleBin = RecycleBin; - })(AbsListView = widget.AbsListView || (widget.AbsListView = {})); - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var ArrayList = java.util.ArrayList; - var AdapterView = android.widget.AdapterView; - class HeaderViewListAdapter { - constructor(headerViewInfos, footerViewInfos, adapter) { - this.mAdapter = adapter; - this.mIsFilterable = false; - if (headerViewInfos == null) { - this.mHeaderViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST; + makeAndAddView(position, y, flow, childrenLeft, selected) { + let child; + if (!this.mDataChanged) { + child = this.mRecycler.getActiveView(position); + if (child != null) { + this.setupChild(child, position, y, flow, childrenLeft, selected, true); + return child; + } + } + child = this.obtainView(position, this.mIsScrap); + this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0]); + return child; + } + setupChild(child, position, y, flowDown, childrenLeft, selected, recycled) { + Trace.traceBegin(Trace.TRACE_TAG_VIEW, "setupListItem"); + const isSelected = selected && this.shouldShowSelector(); + const updateChildSelected = isSelected != child.isSelected(); + const mode = this.mTouchMode; + const isPressed = mode > ListView.TOUCH_MODE_DOWN && mode < ListView.TOUCH_MODE_SCROLL && this.mMotionPosition == position; + const updateChildPressed = isPressed != child.isPressed(); + const needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested(); + let p = child.getLayoutParams(); + if (p == null) { + p = this.generateDefaultLayoutParams(); } - else { - this.mHeaderViewInfos = headerViewInfos; + if (!(p instanceof AbsListView.LayoutParams)) { + const name = p instanceof Function ? p.constructor.name : p + ''; + throw Error('ClassCaseException(' + name + ' can\'t case to AbsListView.LayoutParams)'); } - if (footerViewInfos == null) { - this.mFooterViewInfos = HeaderViewListAdapter.EMPTY_INFO_LIST; + p.viewType = this.mAdapter.getItemViewType(position); + if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) { + this.attachViewToParent(child, flowDown ? -1 : 0, p); } else { - this.mFooterViewInfos = footerViewInfos; - } - this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); - } - getHeadersCount() { - return this.mHeaderViewInfos.size(); - } - getFootersCount() { - return this.mFooterViewInfos.size(); - } - isEmpty() { - return this.mAdapter == null || this.mAdapter.isEmpty(); - } - areAllListInfosSelectable(infos) { - if (infos != null) { - for (let info of infos.array) { - if (!info.isSelectable) { - return false; - } + p.forceAdd = false; + if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { + p.recycledHeaderFooter = true; } + this.addViewInLayout(child, flowDown ? -1 : 0, p, true); } - return true; - } - removeHeader(v) { - for (let i = 0; i < this.mHeaderViewInfos.size(); i++) { - let info = this.mHeaderViewInfos.get(i); - if (info.view == v) { - this.mHeaderViewInfos.remove(i); - this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); - return true; - } + if (updateChildSelected) { + child.setSelected(isSelected); } - return false; - } - removeFooter(v) { - for (let i = 0; i < this.mFooterViewInfos.size(); i++) { - let info = this.mFooterViewInfos.get(i); - if (info.view == v) { - this.mFooterViewInfos.remove(i); - this.mAreAllFixedViewsSelectable = this.areAllListInfosSelectable(this.mHeaderViewInfos) && this.areAllListInfosSelectable(this.mFooterViewInfos); - return true; + if (updateChildPressed) { + child.setPressed(isPressed); + } + if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null) { + if (child['setChecked']) { + child.setChecked(this.mCheckStates.get(position)); + } + else { + child.setActivated(this.mCheckStates.get(position)); } } - return false; - } - getCount() { - if (this.mAdapter != null) { - return this.getFootersCount() + this.getHeadersCount() + this.mAdapter.getCount(); + if (needToMeasure) { + let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); + let lpHeight = p.height; + let childHeightSpec; + if (lpHeight > 0) { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY); + } + else { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + } + child.measure(childWidthSpec, childHeightSpec); } else { - return this.getFootersCount() + this.getHeadersCount(); + this.cleanupLayoutState(child); } - } - areAllItemsEnabled() { - if (this.mAdapter != null) { - return this.mAreAllFixedViewsSelectable && this.mAdapter.areAllItemsEnabled(); + const w = child.getMeasuredWidth(); + const h = child.getMeasuredHeight(); + const childTop = flowDown ? y : y - h; + if (needToMeasure) { + const childRight = childrenLeft + w; + const childBottom = childTop + h; + child.layout(childrenLeft, childTop, childRight, childBottom); } else { - return true; + child.offsetLeftAndRight(childrenLeft - child.getLeft()); + child.offsetTopAndBottom(childTop - child.getTop()); + } + if (this.mCachingStarted && !child.isDrawingCacheEnabled()) { + child.setDrawingCacheEnabled(true); } + if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) { + child.jumpDrawablesToCurrentState(); + } + Trace.traceEnd(Trace.TRACE_TAG_VIEW); } - isEnabled(position) { - let numHeaders = this.getHeadersCount(); - if (position < numHeaders) { - return this.mHeaderViewInfos.get(position).isSelectable; + canAnimate() { + return super.canAnimate() && this.mItemCount > 0; + } + setSelection(position) { + this.setSelectionFromTop(position, 0); + } + setSelectionFromTop(position, y) { + if (this.mAdapter == null) { + return; } - const adjPosition = position - numHeaders; - let adapterCount = 0; - if (this.mAdapter != null) { - adapterCount = this.mAdapter.getCount(); - if (adjPosition < adapterCount) { - return this.mAdapter.isEnabled(adjPosition); + if (!this.isInTouchMode()) { + position = this.lookForSelectablePosition(position, true); + if (position >= 0) { + this.setNextSelectedPositionInt(position); } } - return this.mFooterViewInfos.get(adjPosition - adapterCount).isSelectable; - } - getItem(position) { - let numHeaders = this.getHeadersCount(); - if (position < numHeaders) { - return this.mHeaderViewInfos.get(position).data; + else { + this.mResurrectToPosition = position; } - const adjPosition = position - numHeaders; - let adapterCount = 0; - if (this.mAdapter != null) { - adapterCount = this.mAdapter.getCount(); - if (adjPosition < adapterCount) { - return this.mAdapter.getItem(adjPosition); + if (position >= 0) { + this.mLayoutMode = ListView.LAYOUT_SPECIFIC; + this.mSpecificTop = this.mListPadding.top + y; + if (this.mNeedSync) { + this.mSyncPosition = position; + this.mSyncRowId = this.mAdapter.getItemId(position); + } + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); } + this.requestLayout(); } - return this.mFooterViewInfos.get(adjPosition - adapterCount).data; } - getItemId(position) { - let numHeaders = this.getHeadersCount(); - if (this.mAdapter != null && position >= numHeaders) { - let adjPosition = position - numHeaders; - let adapterCount = this.mAdapter.getCount(); - if (adjPosition < adapterCount) { - return this.mAdapter.getItemId(adjPosition); + setSelectionInt(position) { + this.setNextSelectedPositionInt(position); + let awakeScrollbars = false; + const selectedPosition = this.mSelectedPosition; + if (selectedPosition >= 0) { + if (position == selectedPosition - 1) { + awakeScrollbars = true; + } + else if (position == selectedPosition + 1) { + awakeScrollbars = true; } } - return -1; - } - hasStableIds() { - if (this.mAdapter != null) { - return this.mAdapter.hasStableIds(); + if (this.mPositionScroller != null) { + this.mPositionScroller.stop(); + } + this.layoutChildren(); + if (awakeScrollbars) { + this.awakenScrollBars(); } - return false; } - getView(position, convertView, parent) { - let numHeaders = this.getHeadersCount(); - if (position < numHeaders) { - return this.mHeaderViewInfos.get(position).view; + lookForSelectablePosition(position, lookDown) { + const adapter = this.mAdapter; + if (adapter == null || this.isInTouchMode()) { + return ListView.INVALID_POSITION; } - const adjPosition = position - numHeaders; - let adapterCount = 0; - if (this.mAdapter != null) { - adapterCount = this.mAdapter.getCount(); - if (adjPosition < adapterCount) { - return this.mAdapter.getView(adjPosition, convertView, parent); + const count = adapter.getCount(); + if (!this.mAreAllItemsSelectable) { + if (lookDown) { + position = Math.max(0, position); + while (position < count && !adapter.isEnabled(position)) { + position++; + } } - } - return this.mFooterViewInfos.get(adjPosition - adapterCount).view; - } - getItemViewType(position) { - let numHeaders = this.getHeadersCount(); - if (this.mAdapter != null && position >= numHeaders) { - let adjPosition = position - numHeaders; - let adapterCount = this.mAdapter.getCount(); - if (adjPosition < adapterCount) { - return this.mAdapter.getItemViewType(adjPosition); + else { + position = Math.min(position, count - 1); + while (position >= 0 && !adapter.isEnabled(position)) { + position--; + } } } - return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER; - } - getViewTypeCount() { - if (this.mAdapter != null) { - return this.mAdapter.getViewTypeCount(); + if (position < 0 || position >= count) { + return ListView.INVALID_POSITION; } - return 1; + return position; } - registerDataSetObserver(observer) { - if (this.mAdapter != null) { - this.mAdapter.registerDataSetObserver(observer); + lookForSelectablePositionAfter(current, position, lookDown) { + const adapter = this.mAdapter; + if (adapter == null || this.isInTouchMode()) { + return ListView.INVALID_POSITION; } - } - unregisterDataSetObserver(observer) { - if (this.mAdapter != null) { - this.mAdapter.unregisterDataSetObserver(observer); + const after = this.lookForSelectablePosition(position, lookDown); + if (after != ListView.INVALID_POSITION) { + return after; } - } - getFilter() { - return null; - } - getWrappedAdapter() { - return this.mAdapter; - } - } - HeaderViewListAdapter.EMPTY_INFO_LIST = new ArrayList(); - widget.HeaderViewListAdapter = HeaderViewListAdapter; - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var database; - (function (database) { - var ArrayList = java.util.ArrayList; - class Observable { - constructor() { - this.mObservers = new ArrayList(); - } - registerObserver(observer) { - if (observer == null) { - throw new Error("The observer is null."); + const count = adapter.getCount(); + current = MathUtils.constrain(current, -1, count - 1); + if (lookDown) { + position = Math.min(position - 1, count - 1); + while ((position > current) && !adapter.isEnabled(position)) { + position--; + } + if (position <= current) { + return ListView.INVALID_POSITION; + } } - if (this.mObservers.contains(observer)) { - throw new Error("Observer " + observer + " is already registered."); + else { + position = Math.max(0, position + 1); + while ((position < current) && !adapter.isEnabled(position)) { + position++; + } + if (position >= current) { + return ListView.INVALID_POSITION; + } } - this.mObservers.add(observer); + return position; } - unregisterObserver(observer) { - if (observer == null) { - throw new Error("The observer is null."); + setSelectionAfterHeaderView() { + const count = this.mHeaderViewInfos.size(); + if (count > 0) { + this.mNextSelectedPosition = 0; + return; } - let index = this.mObservers.indexOf(observer); - if (index == -1) { - throw new Error("Observer " + observer + " was not registered."); + if (this.mAdapter != null) { + this.setSelection(count); } - this.mObservers.remove(index); - } - unregisterAll() { - this.mObservers.clear(); - } - } - database.Observable = Observable; - })(database = android.database || (android.database = {})); -})(android || (android = {})); -var android; -(function (android) { - var database; - (function (database) { - var Observable = android.database.Observable; - class DataSetObservable extends Observable { - notifyChanged() { - for (let i = this.mObservers.size() - 1; i >= 0; i--) { - this.mObservers.get(i).onChanged(); + else { + this.mNextSelectedPosition = count; + this.mLayoutMode = ListView.LAYOUT_SET_SELECTION; } } - notifyInvalidated() { - for (let i = this.mObservers.size() - 1; i >= 0; i--) { - this.mObservers.get(i).onInvalidated(); + dispatchKeyEvent(event) { + let handled = super.dispatchKeyEvent(event); + if (!handled) { + let focused = this.getFocusedChild(); + if (focused != null && event.getAction() == KeyEvent.ACTION_DOWN) { + handled = this.onKeyDown(event.getKeyCode(), event); + } } + return handled; } - } - database.DataSetObservable = DataSetObservable; - })(database = android.database || (android.database = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var DataSetObservable = android.database.DataSetObservable; - class BaseAdapter { - constructor() { - this.mDataSetObservable = new DataSetObservable(); - } - hasStableIds() { - return false; - } - registerDataSetObserver(observer) { - this.mDataSetObservable.registerObserver(observer); - } - unregisterDataSetObserver(observer) { - this.mDataSetObservable.unregisterObserver(observer); - } - notifyDataSetChanged() { - this.mDataSetObservable.notifyChanged(); - } - notifyDataSetInvalidated() { - this.mDataSetObservable.notifyInvalidated(); - } - areAllItemsEnabled() { - return true; - } - isEnabled(position) { - return true; - } - getDropDownView(position, convertView, parent) { - return this.getView(position, convertView, parent); - } - getItemViewType(position) { - return 0; + onKeyDown(keyCode, event) { + return this.commonKey(keyCode, 1, event); } - getViewTypeCount() { - return 1; + onKeyMultiple(keyCode, repeatCount, event) { + return this.commonKey(keyCode, repeatCount, event); } - isEmpty() { - return this.getCount() == 0; + onKeyUp(keyCode, event) { + return this.commonKey(keyCode, 1, event); } - } - widget.BaseAdapter = BaseAdapter; - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; -(function (android) { - var widget; - (function (widget) { - var Paint = android.graphics.Paint; - var PixelFormat = android.graphics.PixelFormat; - var Rect = android.graphics.Rect; - var MathUtils = android.util.MathUtils; - var FocusFinder = android.view.FocusFinder; - var KeyEvent = android.view.KeyEvent; - var SoundEffectConstants = android.view.SoundEffectConstants; - var View = android.view.View; - var ViewGroup = android.view.ViewGroup; - var Trace = android.os.Trace; - var ArrayList = java.util.ArrayList; - var Integer = java.lang.Integer; - var System = java.lang.System; - var AbsListView = android.widget.AbsListView; - var AdapterView = android.widget.AdapterView; - var HeaderViewListAdapter = android.widget.HeaderViewListAdapter; - class ListView extends AbsListView { - constructor(context, bindElement, defStyle = android.R.attr.listViewStyle) { - super(context, bindElement, null); - this.mHeaderViewInfos = new ArrayList(); - this.mFooterViewInfos = new ArrayList(); - this.mDividerHeight = 0; - this.mIsCacheColorOpaque = false; - this.mDividerIsOpaque = false; - this.mHeaderDividersEnabled = true; - this.mFooterDividersEnabled = true; - this.mAreAllItemsSelectable = true; - this.mItemsCanFocus = false; - this.mTempRect = new Rect(); - this.mArrowScrollFocusResult = new ListView.ArrowScrollFocusResult(); - this._attrBinder.addAttr('divider', (value) => { - let divider = this._attrBinder.parseDrawable(value); - if (divider) - this.setDivider(divider); - }); - this._attrBinder.addAttr('overScrollHeader', (value) => { - let header = this._attrBinder.parseDrawable(value); - if (header) - this.setOverscrollHeader(header); - }); - this._attrBinder.addAttr('overScrollFooter', (value) => { - let footer = this._attrBinder.parseDrawable(value); - if (footer) - this.setOverscrollFooter(footer); - }); - this._attrBinder.addAttr('dividerHeight', (value) => { - let dividerHeight = this._attrBinder.parseNumberPixelSize(value, -1); - if (dividerHeight >= 0) { - this.setDividerHeight(dividerHeight); + commonKey(keyCode, count, event) { + if (this.mAdapter == null || !this.isAttachedToWindow()) { + return false; + } + if (this.mDataChanged) { + this.layoutChildren(); + } + let handled = false; + let action = event.getAction(); + if (action != KeyEvent.ACTION_UP) { + switch (keyCode) { + case KeyEvent.KEYCODE_DPAD_UP: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded(); + if (!handled) { + while (count-- > 0) { + if (this.arrowScroll(ListView.FOCUS_UP)) { + handled = true; + } + else { + break; + } + } + } + } + else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + } + break; + case KeyEvent.KEYCODE_DPAD_DOWN: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded(); + if (!handled) { + while (count-- > 0) { + if (this.arrowScroll(ListView.FOCUS_DOWN)) { + handled = true; + } + else { + break; + } + } + } + } + else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + } + break; + case KeyEvent.KEYCODE_DPAD_LEFT: + if (event.hasNoModifiers()) { + handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT); + } + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + if (event.hasNoModifiers()) { + handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT); + } + break; + case KeyEvent.KEYCODE_DPAD_CENTER: + case KeyEvent.KEYCODE_ENTER: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded(); + if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) { + this.keyPressed(); + handled = true; + } + } + break; + case KeyEvent.KEYCODE_SPACE: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN); + } + else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { + handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP); + } + handled = true; + break; + case KeyEvent.KEYCODE_PAGE_UP: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP); + } + else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + } + break; + case KeyEvent.KEYCODE_PAGE_DOWN: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN); + } + else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + } + break; + case KeyEvent.KEYCODE_MOVE_HOME: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + } + break; + case KeyEvent.KEYCODE_MOVE_END: + if (event.hasNoModifiers()) { + handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + } + break; + case KeyEvent.KEYCODE_TAB: + break; } - }); - this._attrBinder.addAttr('headerDividersEnabled', (value) => { - this.setHeaderDividersEnabled(this._attrBinder.parseBoolean(value, true)); - }); - this._attrBinder.addAttr('footerDividersEnabled', (value) => { - this.setFooterDividersEnabled(this._attrBinder.parseBoolean(value, true)); - }); - if (defStyle) - this.applyDefaultAttributes(defStyle); - } - getMaxScrollAmount() { - return Math.floor((ListView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop))); + } + if (handled) { + return true; + } + switch (action) { + case KeyEvent.ACTION_DOWN: + return super.onKeyDown(keyCode, event); + case KeyEvent.ACTION_UP: + return super.onKeyUp(keyCode, event); + default: + return false; + } } - adjustViewsUpOrDown() { - const childCount = this.getChildCount(); - let delta; - if (childCount > 0) { - let child; - if (!this.mStackFromBottom) { - child = this.getChildAt(0); - delta = child.getTop() - this.mListPadding.top; - if (this.mFirstPosition != 0) { - delta -= this.mDividerHeight; - } - if (delta < 0) { - delta = 0; + pageScroll(direction) { + let nextPage; + let down; + if (direction == ListView.FOCUS_UP) { + nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount() - 1); + down = false; + } + else if (direction == ListView.FOCUS_DOWN) { + nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount() - 1); + down = true; + } + else { + return false; + } + if (nextPage >= 0) { + const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, nextPage, down); + if (position >= 0) { + this.mLayoutMode = ListView.LAYOUT_SPECIFIC; + this.mSpecificTop = this.mPaddingTop + this.getVerticalFadingEdgeLength(); + if (down && (position > (this.mItemCount - this.getChildCount()))) { + this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM; } - } - else { - child = this.getChildAt(childCount - 1); - delta = child.getBottom() - (this.getHeight() - this.mListPadding.bottom); - if (this.mFirstPosition + childCount < this.mItemCount) { - delta += this.mDividerHeight; + if (!down && (position < this.getChildCount())) { + this.mLayoutMode = ListView.LAYOUT_FORCE_TOP; } - if (delta > 0) { - delta = 0; + this.setSelectionInt(position); + this.invokeOnItemScrollListener(); + if (!this.awakenScrollBars()) { + this.invalidate(); } - } - if (delta != 0) { - this.offsetChildrenTopAndBottom(-delta); + return true; } } + return false; } - addHeaderView(v, data = null, isSelectable = true) { - const info = new ListView.FixedViewInfo(this); - info.view = v; - info.data = data; - info.isSelectable = isSelectable; - this.mHeaderViewInfos.add(info); - if (this.mAdapter != null) { - if (!(this.mAdapter instanceof HeaderViewListAdapter)) { - this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter); - } - if (this.mDataSetObserver != null) { - this.mDataSetObserver.onChanged(); + fullScroll(direction) { + let moved = false; + if (direction == ListView.FOCUS_UP) { + if (this.mSelectedPosition != 0) { + const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, 0, true); + if (position >= 0) { + this.mLayoutMode = ListView.LAYOUT_FORCE_TOP; + this.setSelectionInt(position); + this.invokeOnItemScrollListener(); + } + moved = true; } } - } - getHeaderViewsCount() { - return this.mHeaderViewInfos.size(); - } - removeHeaderView(v) { - if (this.mHeaderViewInfos.size() > 0) { - let result = false; - if (this.mAdapter != null && this.mAdapter.removeHeader(v)) { - if (this.mDataSetObserver != null) { - this.mDataSetObserver.onChanged(); + else if (direction == ListView.FOCUS_DOWN) { + const lastItem = (this.mItemCount - 1); + if (this.mSelectedPosition < lastItem) { + const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, lastItem, false); + if (position >= 0) { + this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM; + this.setSelectionInt(position); + this.invokeOnItemScrollListener(); } - result = true; + moved = true; } - this.removeFixedViewInfo(v, this.mHeaderViewInfos); - return result; } - return false; - } - removeFixedViewInfo(v, where) { - let len = where.size(); - for (let i = 0; i < len; ++i) { - let info = where.get(i); - if (info.view == v) { - where.remove(i); - break; - } + if (moved && !this.awakenScrollBars()) { + this.awakenScrollBars(); + this.invalidate(); } + return moved; } - addFooterView(v, data = null, isSelectable = true) { - const info = new ListView.FixedViewInfo(this); - info.view = v; - info.data = data; - info.isSelectable = isSelectable; - this.mFooterViewInfos.add(info); - if (this.mAdapter != null) { - if (!(this.mAdapter instanceof HeaderViewListAdapter)) { - this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, this.mAdapter); - } - if (this.mDataSetObserver != null) { - this.mDataSetObserver.onChanged(); - } + handleHorizontalFocusWithinListItem(direction) { + if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT) { + throw Error(`new IllegalArgumentException("direction must be one of" + " {View.FOCUS_LEFT, View.FOCUS_RIGHT}")`); } - } - getFooterViewsCount() { - return this.mFooterViewInfos.size(); - } - removeFooterView(v) { - if (this.mFooterViewInfos.size() > 0) { - let result = false; - if (this.mAdapter != null && this.mAdapter.removeFooter(v)) { - if (this.mDataSetObserver != null) { - this.mDataSetObserver.onChanged(); + const numChildren = this.getChildCount(); + if (this.mItemsCanFocus && numChildren > 0 && this.mSelectedPosition != ListView.INVALID_POSITION) { + const selectedView = this.getSelectedView(); + if (selectedView != null && selectedView.hasFocus() && selectedView instanceof ViewGroup) { + const currentFocus = selectedView.findFocus(); + const nextFocus = FocusFinder.getInstance().findNextFocus(selectedView, currentFocus, direction); + if (nextFocus != null) { + currentFocus.getFocusedRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(currentFocus, this.mTempRect); + this.offsetRectIntoDescendantCoords(nextFocus, this.mTempRect); + if (nextFocus.requestFocus(direction, this.mTempRect)) { + return true; + } + } + const globalNextFocus = FocusFinder.getInstance().findNextFocus(this.getRootView(), currentFocus, direction); + if (globalNextFocus != null) { + return this.isViewAncestorOf(globalNextFocus, this); } - result = true; } - this.removeFixedViewInfo(v, this.mFooterViewInfos); - return result; } return false; } - getAdapter() { - return this.mAdapter; - } - setAdapter(adapter) { - if (this.mAdapter != null && this.mDataSetObserver != null) { - this.mAdapter.unregisterDataSetObserver(this.mDataSetObserver); - } - this.resetList(); - this.mRecycler.clear(); - if (this.mHeaderViewInfos.size() > 0 || this.mFooterViewInfos.size() > 0) { - this.mAdapter = new HeaderViewListAdapter(this.mHeaderViewInfos, this.mFooterViewInfos, adapter); - } - else { - this.mAdapter = adapter; - } - this.mOldSelectedPosition = ListView.INVALID_POSITION; - this.mOldSelectedRowId = ListView.INVALID_ROW_ID; - super.setAdapter(adapter); - if (this.mAdapter != null) { - this.mAreAllItemsSelectable = this.mAdapter.areAllItemsEnabled(); - this.mOldItemCount = this.mItemCount; - this.mItemCount = this.mAdapter.getCount(); - this.checkFocus(); - this.mDataSetObserver = new AbsListView.AdapterDataSetObserver(this); - this.mAdapter.registerDataSetObserver(this.mDataSetObserver); - this.mRecycler.setViewTypeCount(this.mAdapter.getViewTypeCount()); - let position; - if (this.mStackFromBottom) { - position = this.lookForSelectablePosition(this.mItemCount - 1, false); - } - else { - position = this.lookForSelectablePosition(0, true); - } - this.setSelectedPositionInt(position); - this.setNextSelectedPositionInt(position); - if (this.mItemCount == 0) { - this.checkSelectionChanged(); + arrowScroll(direction) { + try { + this.mInLayout = true; + const handled = this.arrowScrollImpl(direction); + if (handled) { + this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction)); } + return handled; } - else { - this.mAreAllItemsSelectable = true; - this.checkFocus(); - this.checkSelectionChanged(); - } - this.requestLayout(); - } - resetList() { - this.clearRecycledState(this.mHeaderViewInfos); - this.clearRecycledState(this.mFooterViewInfos); - super.resetList(); - this.mLayoutMode = ListView.LAYOUT_NORMAL; - } - clearRecycledState(infos) { - if (infos != null) { - const count = infos.size(); - for (let i = 0; i < count; i++) { - const child = infos.get(i).view; - const p = child.getLayoutParams(); - if (p != null) { - p.recycledHeaderFooter = false; - } - } + finally { + this.mInLayout = false; } } - showingTopFadingEdge() { - const listTop = this.mScrollY + this.mListPadding.top; - return (this.mFirstPosition > 0) || (this.getChildAt(0).getTop() > listTop); - } - showingBottomFadingEdge() { - const childCount = this.getChildCount(); - const bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom(); - const lastVisiblePosition = this.mFirstPosition + childCount - 1; - const listBottom = this.mScrollY + this.getHeight() - this.mListPadding.bottom; - return (lastVisiblePosition < this.mItemCount - 1) || (bottomOfBottomChild < listBottom); - } - requestChildRectangleOnScreen(child, rect, immediate) { - let rectTopWithinChild = rect.top; - rect.offset(child.getLeft(), child.getTop()); - rect.offset(-child.getScrollX(), -child.getScrollY()); - const height = this.getHeight(); - let listUnfadedTop = this.getScrollY(); - let listUnfadedBottom = listUnfadedTop + height; - const fadingEdge = this.getVerticalFadingEdgeLength(); - if (this.showingTopFadingEdge()) { - if ((this.mSelectedPosition > 0) || (rectTopWithinChild > fadingEdge)) { - listUnfadedTop += fadingEdge; - } - } - let childCount = this.getChildCount(); - let bottomOfBottomChild = this.getChildAt(childCount - 1).getBottom(); - if (this.showingBottomFadingEdge()) { - if ((this.mSelectedPosition < this.mItemCount - 1) || (rect.bottom < (bottomOfBottomChild - fadingEdge))) { - listUnfadedBottom -= fadingEdge; - } - } - let scrollYDelta = 0; - if (rect.bottom > listUnfadedBottom && rect.top > listUnfadedTop) { - if (rect.height() > height) { - scrollYDelta += (rect.top - listUnfadedTop); + nextSelectedPositionForDirection(selectedView, selectedPos, direction) { + let nextSelected; + if (direction == View.FOCUS_DOWN) { + const listBottom = this.getHeight() - this.mListPadding.bottom; + if (selectedView != null && selectedView.getBottom() <= listBottom) { + nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos >= this.mFirstPosition ? selectedPos + 1 : this.mFirstPosition; } else { - scrollYDelta += (rect.bottom - listUnfadedBottom); + return ListView.INVALID_POSITION; } - let distanceToBottom = bottomOfBottomChild - listUnfadedBottom; - scrollYDelta = Math.min(scrollYDelta, distanceToBottom); } - else if (rect.top < listUnfadedTop && rect.bottom < listUnfadedBottom) { - if (rect.height() > height) { - scrollYDelta -= (listUnfadedBottom - rect.bottom); + else { + const listTop = this.mListPadding.top; + if (selectedView != null && selectedView.getTop() >= listTop) { + const lastPos = this.mFirstPosition + this.getChildCount() - 1; + nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos <= lastPos ? selectedPos - 1 : lastPos; } else { - scrollYDelta -= (listUnfadedTop - rect.top); + return ListView.INVALID_POSITION; } - let top = this.getChildAt(0).getTop(); - let deltaToTop = top - listUnfadedTop; - scrollYDelta = Math.max(scrollYDelta, deltaToTop); } - const scroll = scrollYDelta != 0; - if (scroll) { - this.scrollListItemsBy(-scrollYDelta); - this.positionSelector(ListView.INVALID_POSITION, child); - this.mSelectedTop = child.getTop(); - this.invalidate(); + if (nextSelected < 0 || nextSelected >= this.mAdapter.getCount()) { + return ListView.INVALID_POSITION; } - return scroll; + return this.lookForSelectablePosition(nextSelected, direction == View.FOCUS_DOWN); } - fillGap(down) { - const count = this.getChildCount(); - if (down) { - let paddingTop = 0; - if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { - paddingTop = this.getListPaddingTop(); - } - const startOffset = count > 0 ? this.getChildAt(count - 1).getBottom() + this.mDividerHeight : paddingTop; - this.fillDown(this.mFirstPosition + count, startOffset); - this.correctTooHigh(this.getChildCount()); + arrowScrollImpl(direction) { + if (this.getChildCount() <= 0) { + return false; } - else { - let paddingBottom = 0; - if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { - paddingBottom = this.getListPaddingBottom(); + let selectedView = this.getSelectedView(); + let selectedPos = this.mSelectedPosition; + let nextSelectedPosition = this.nextSelectedPositionForDirection(selectedView, selectedPos, direction); + let amountToScroll = this.amountToScroll(direction, nextSelectedPosition); + const focusResult = this.mItemsCanFocus ? this.arrowScrollFocused(direction) : null; + if (focusResult != null) { + nextSelectedPosition = focusResult.getSelectedPosition(); + amountToScroll = focusResult.getAmountToScroll(); + } + let needToRedraw = focusResult != null; + if (nextSelectedPosition != ListView.INVALID_POSITION) { + this.handleNewSelectionChange(selectedView, direction, nextSelectedPosition, focusResult != null); + this.setSelectedPositionInt(nextSelectedPosition); + this.setNextSelectedPositionInt(nextSelectedPosition); + selectedView = this.getSelectedView(); + selectedPos = nextSelectedPosition; + if (this.mItemsCanFocus && focusResult == null) { + const focused = this.getFocusedChild(); + if (focused != null) { + focused.clearFocus(); + } } - const startOffset = count > 0 ? this.getChildAt(0).getTop() - this.mDividerHeight : this.getHeight() - paddingBottom; - this.fillUp(this.mFirstPosition - 1, startOffset); - this.correctTooLow(this.getChildCount()); + needToRedraw = true; + this.checkSelectionChanged(); } - } - fillDown(pos, nextTop) { - let selectedView = null; - let end = (this.mBottom - this.mTop); - if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { - end -= this.mListPadding.bottom; + if (amountToScroll > 0) { + this.scrollListItemsBy((direction == View.FOCUS_UP) ? amountToScroll : -amountToScroll); + needToRedraw = true; } - while (nextTop < end && pos < this.mItemCount) { - let selected = pos == this.mSelectedPosition; - let child = this.makeAndAddView(pos, nextTop, true, this.mListPadding.left, selected); - nextTop = child.getBottom() + this.mDividerHeight; - if (selected) { - selectedView = child; + if (this.mItemsCanFocus && (focusResult == null) && selectedView != null && selectedView.hasFocus()) { + const focused = selectedView.findFocus(); + if (!this.isViewAncestorOf(focused, this) || this.distanceToView(focused) > 0) { + focused.clearFocus(); } - pos++; } - this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1); - return selectedView; - } - fillUp(pos, nextBottom) { - let selectedView = null; - let end = 0; - if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { - end = this.mListPadding.top; + if (nextSelectedPosition == ListView.INVALID_POSITION && selectedView != null && !this.isViewAncestorOf(selectedView, this)) { + selectedView = null; + this.hideSelector(); + this.mResurrectToPosition = ListView.INVALID_POSITION; } - while (nextBottom > end && pos >= 0) { - let selected = pos == this.mSelectedPosition; - let child = this.makeAndAddView(pos, nextBottom, false, this.mListPadding.left, selected); - nextBottom = child.getTop() - this.mDividerHeight; - if (selected) { - selectedView = child; + if (needToRedraw) { + if (selectedView != null) { + this.positionSelector(selectedPos, selectedView); + this.mSelectedTop = selectedView.getTop(); } - pos--; - } - this.mFirstPosition = pos + 1; - this.setVisibleRangeHint(this.mFirstPosition, this.mFirstPosition + this.getChildCount() - 1); - return selectedView; - } - fillFromTop(nextTop) { - this.mFirstPosition = Math.min(this.mFirstPosition, this.mSelectedPosition); - this.mFirstPosition = Math.min(this.mFirstPosition, this.mItemCount - 1); - if (this.mFirstPosition < 0) { - this.mFirstPosition = 0; + if (!this.awakenScrollBars()) { + this.invalidate(); + } + this.invokeOnItemScrollListener(); + return true; } - return this.fillDown(this.mFirstPosition, nextTop); + return false; } - fillFromMiddle(childrenTop, childrenBottom) { - let height = childrenBottom - childrenTop; - let position = this.reconcileSelectedPosition(); - let sel = this.makeAndAddView(position, childrenTop, true, this.mListPadding.left, true); - this.mFirstPosition = position; - let selHeight = sel.getMeasuredHeight(); - if (selHeight <= height) { - sel.offsetTopAndBottom((height - selHeight) / 2); + handleNewSelectionChange(selectedView, direction, newSelectedPosition, newFocusAssigned) { + if (newSelectedPosition == ListView.INVALID_POSITION) { + throw Error(`new IllegalArgumentException("newSelectedPosition needs to be valid")`); } - this.fillAboveAndBelow(sel, position); - if (!this.mStackFromBottom) { - this.correctTooHigh(this.getChildCount()); + let topView; + let bottomView; + let topViewIndex, bottomViewIndex; + let topSelected = false; + const selectedIndex = this.mSelectedPosition - this.mFirstPosition; + const nextSelectedIndex = newSelectedPosition - this.mFirstPosition; + if (direction == View.FOCUS_UP) { + topViewIndex = nextSelectedIndex; + bottomViewIndex = selectedIndex; + topView = this.getChildAt(topViewIndex); + bottomView = selectedView; + topSelected = true; } else { - this.correctTooLow(this.getChildCount()); + topViewIndex = selectedIndex; + bottomViewIndex = nextSelectedIndex; + topView = selectedView; + bottomView = this.getChildAt(bottomViewIndex); } - return sel; - } - fillAboveAndBelow(sel, position) { - const dividerHeight = this.mDividerHeight; - if (!this.mStackFromBottom) { - this.fillUp(position - 1, sel.getTop() - dividerHeight); - this.adjustViewsUpOrDown(); - this.fillDown(position + 1, sel.getBottom() + dividerHeight); + const numChildren = this.getChildCount(); + if (topView != null) { + topView.setSelected(!newFocusAssigned && topSelected); + this.measureAndAdjustDown(topView, topViewIndex, numChildren); } - else { - this.fillDown(position + 1, sel.getBottom() + dividerHeight); - this.adjustViewsUpOrDown(); - this.fillUp(position - 1, sel.getTop() - dividerHeight); + if (bottomView != null) { + bottomView.setSelected(!newFocusAssigned && !topSelected); + this.measureAndAdjustDown(bottomView, bottomViewIndex, numChildren); } } - fillFromSelection(selectedTop, childrenTop, childrenBottom) { - let fadingEdgeLength = this.getVerticalFadingEdgeLength(); - const selectedPosition = this.mSelectedPosition; - let sel; - const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); - const bottomSelectionPixel = this.getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition); - sel = this.makeAndAddView(selectedPosition, selectedTop, true, this.mListPadding.left, true); - if (sel.getBottom() > bottomSelectionPixel) { - const spaceAbove = sel.getTop() - topSelectionPixel; - const spaceBelow = sel.getBottom() - bottomSelectionPixel; - const offset = Math.min(spaceAbove, spaceBelow); - sel.offsetTopAndBottom(-offset); - } - else if (sel.getTop() < topSelectionPixel) { - const spaceAbove = topSelectionPixel - sel.getTop(); - const spaceBelow = bottomSelectionPixel - sel.getBottom(); - const offset = Math.min(spaceAbove, spaceBelow); - sel.offsetTopAndBottom(offset); - } - this.fillAboveAndBelow(sel, selectedPosition); - if (!this.mStackFromBottom) { - this.correctTooHigh(this.getChildCount()); - } - else { - this.correctTooLow(this.getChildCount()); + measureAndAdjustDown(child, childIndex, numChildren) { + let oldHeight = child.getHeight(); + this.measureItem(child); + if (child.getMeasuredHeight() != oldHeight) { + this.relayoutMeasuredItem(child); + const heightDelta = child.getMeasuredHeight() - oldHeight; + for (let i = childIndex + 1; i < numChildren; i++) { + this.getChildAt(i).offsetTopAndBottom(heightDelta); + } } - return sel; } - getBottomSelectionPixel(childrenBottom, fadingEdgeLength, selectedPosition) { - let bottomSelectionPixel = childrenBottom; - if (selectedPosition != this.mItemCount - 1) { - bottomSelectionPixel -= fadingEdgeLength; + measureItem(child) { + let p = child.getLayoutParams(); + if (p == null) { + p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } - return bottomSelectionPixel; - } - getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition) { - let topSelectionPixel = childrenTop; - if (selectedPosition > 0) { - topSelectionPixel += fadingEdgeLength; + let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); + let lpHeight = p.height; + let childHeightSpec; + if (lpHeight > 0) { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY); } - return topSelectionPixel; + else { + childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + } + child.measure(childWidthSpec, childHeightSpec); } - smoothScrollToPosition(position, boundPosition) { - super.smoothScrollToPosition(position, boundPosition); + relayoutMeasuredItem(child) { + const w = child.getMeasuredWidth(); + const h = child.getMeasuredHeight(); + const childLeft = this.mListPadding.left; + const childRight = childLeft + w; + const childTop = child.getTop(); + const childBottom = childTop + h; + child.layout(childLeft, childTop, childRight, childBottom); } - smoothScrollByOffset(offset) { - super.smoothScrollByOffset(offset); + getArrowScrollPreviewLength() { + return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS, this.getVerticalFadingEdgeLength()); } - moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom) { - let fadingEdgeLength = this.getVerticalFadingEdgeLength(); - const selectedPosition = this.mSelectedPosition; - let sel; - const topSelectionPixel = this.getTopSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); - const bottomSelectionPixel = this.getBottomSelectionPixel(childrenTop, fadingEdgeLength, selectedPosition); - if (delta > 0) { - oldSel = this.makeAndAddView(selectedPosition - 1, oldSel.getTop(), true, this.mListPadding.left, false); - const dividerHeight = this.mDividerHeight; - sel = this.makeAndAddView(selectedPosition, oldSel.getBottom() + dividerHeight, true, this.mListPadding.left, true); - if (sel.getBottom() > bottomSelectionPixel) { - let spaceAbove = sel.getTop() - topSelectionPixel; - let spaceBelow = sel.getBottom() - bottomSelectionPixel; - let halfVerticalSpace = (childrenBottom - childrenTop) / 2; - let offset = Math.min(spaceAbove, spaceBelow); - offset = Math.min(offset, halfVerticalSpace); - oldSel.offsetTopAndBottom(-offset); - sel.offsetTopAndBottom(-offset); + amountToScroll(direction, nextSelectedPosition) { + const listBottom = this.getHeight() - this.mListPadding.bottom; + const listTop = this.mListPadding.top; + let numChildren = this.getChildCount(); + if (direction == View.FOCUS_DOWN) { + let indexToMakeVisible = numChildren - 1; + if (nextSelectedPosition != ListView.INVALID_POSITION) { + indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; } - if (!this.mStackFromBottom) { - this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight); - this.adjustViewsUpOrDown(); - this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight); + while (numChildren <= indexToMakeVisible) { + this.addViewBelow(this.getChildAt(numChildren - 1), this.mFirstPosition + numChildren - 1); + numChildren++; } - else { - this.fillDown(this.mSelectedPosition + 1, sel.getBottom() + dividerHeight); - this.adjustViewsUpOrDown(); - this.fillUp(this.mSelectedPosition - 2, sel.getTop() - dividerHeight); + const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible; + const viewToMakeVisible = this.getChildAt(indexToMakeVisible); + let goalBottom = listBottom; + if (positionToMakeVisible < this.mItemCount - 1) { + goalBottom -= this.getArrowScrollPreviewLength(); } + if (viewToMakeVisible.getBottom() <= goalBottom) { + return 0; + } + if (nextSelectedPosition != ListView.INVALID_POSITION && (goalBottom - viewToMakeVisible.getTop()) >= this.getMaxScrollAmount()) { + return 0; + } + let amountToScroll = (viewToMakeVisible.getBottom() - goalBottom); + if ((this.mFirstPosition + numChildren) == this.mItemCount) { + const max = this.getChildAt(numChildren - 1).getBottom() - listBottom; + amountToScroll = Math.min(amountToScroll, max); + } + return Math.min(amountToScroll, this.getMaxScrollAmount()); } - else if (delta < 0) { - if (newSel != null) { - sel = this.makeAndAddView(selectedPosition, newSel.getTop(), true, this.mListPadding.left, true); + else { + let indexToMakeVisible = 0; + if (nextSelectedPosition != ListView.INVALID_POSITION) { + indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; } - else { - sel = this.makeAndAddView(selectedPosition, oldSel.getTop(), false, this.mListPadding.left, true); + while (indexToMakeVisible < 0) { + this.addViewAbove(this.getChildAt(0), this.mFirstPosition); + this.mFirstPosition--; + indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; } - if (sel.getTop() < topSelectionPixel) { - let spaceAbove = topSelectionPixel - sel.getTop(); - let spaceBelow = bottomSelectionPixel - sel.getBottom(); - let halfVerticalSpace = (childrenBottom - childrenTop) / 2; - let offset = Math.min(spaceAbove, spaceBelow); - offset = Math.min(offset, halfVerticalSpace); - sel.offsetTopAndBottom(offset); + const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible; + const viewToMakeVisible = this.getChildAt(indexToMakeVisible); + let goalTop = listTop; + if (positionToMakeVisible > 0) { + goalTop += this.getArrowScrollPreviewLength(); + } + if (viewToMakeVisible.getTop() >= goalTop) { + return 0; + } + if (nextSelectedPosition != ListView.INVALID_POSITION && (viewToMakeVisible.getBottom() - goalTop) >= this.getMaxScrollAmount()) { + return 0; + } + let amountToScroll = (goalTop - viewToMakeVisible.getTop()); + if (this.mFirstPosition == 0) { + const max = listTop - this.getChildAt(0).getTop(); + amountToScroll = Math.min(amountToScroll, max); + } + return Math.min(amountToScroll, this.getMaxScrollAmount()); + } + } + lookForSelectablePositionOnScreen(direction) { + const firstPosition = this.mFirstPosition; + if (direction == View.FOCUS_DOWN) { + let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition + 1 : firstPosition; + if (startPos >= this.mAdapter.getCount()) { + return ListView.INVALID_POSITION; + } + if (startPos < firstPosition) { + startPos = firstPosition; + } + const lastVisiblePos = this.getLastVisiblePosition(); + const adapter = this.getAdapter(); + for (let pos = startPos; pos <= lastVisiblePos; pos++) { + if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) { + return pos; + } } - this.fillAboveAndBelow(sel, selectedPosition); } else { - let oldTop = oldSel.getTop(); - sel = this.makeAndAddView(selectedPosition, oldTop, true, this.mListPadding.left, true); - if (oldTop < childrenTop) { - let newBottom = sel.getBottom(); - if (newBottom < childrenTop + 20) { - sel.offsetTopAndBottom(childrenTop - sel.getTop()); + let last = firstPosition + this.getChildCount() - 1; + let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition - 1 : firstPosition + this.getChildCount() - 1; + if (startPos < 0 || startPos >= this.mAdapter.getCount()) { + return ListView.INVALID_POSITION; + } + if (startPos > last) { + startPos = last; + } + const adapter = this.getAdapter(); + for (let pos = startPos; pos >= firstPosition; pos--) { + if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) { + return pos; } } - this.fillAboveAndBelow(sel, selectedPosition); } - return sel; + return ListView.INVALID_POSITION; } - onSizeChanged(w, h, oldw, oldh) { - if (this.getChildCount() > 0) { - let focusedChild = this.getFocusedChild(); - if (focusedChild != null) { - const childPosition = this.mFirstPosition + this.indexOfChild(focusedChild); - const childBottom = focusedChild.getBottom(); - const offset = Math.max(0, childBottom - (h - this.mPaddingTop)); - const top = focusedChild.getTop() - offset; - if (this.mFocusSelector == null) { - this.mFocusSelector = new ListView.FocusSelector(this); + arrowScrollFocused(direction) { + const selectedView = this.getSelectedView(); + let newFocus; + if (selectedView != null && selectedView.hasFocus()) { + let oldFocus = selectedView.findFocus(); + newFocus = FocusFinder.getInstance().findNextFocus(this, oldFocus, direction); + } + else { + if (direction == View.FOCUS_DOWN) { + const topFadingEdgeShowing = (this.mFirstPosition > 0); + const listTop = this.mListPadding.top + (topFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0); + const ySearchPoint = (selectedView != null && selectedView.getTop() > listTop) ? selectedView.getTop() : listTop; + this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint); + } + else { + const bottomFadingEdgeShowing = (this.mFirstPosition + this.getChildCount() - 1) < this.mItemCount; + const listBottom = this.getHeight() - this.mListPadding.bottom - (bottomFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0); + const ySearchPoint = (selectedView != null && selectedView.getBottom() < listBottom) ? selectedView.getBottom() : listBottom; + this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint); + } + newFocus = FocusFinder.getInstance().findNextFocusFromRect(this, this.mTempRect, direction); + } + if (newFocus != null) { + const positionOfNewFocus = this.positionOfNewFocus(newFocus); + if (this.mSelectedPosition != ListView.INVALID_POSITION && positionOfNewFocus != this.mSelectedPosition) { + const selectablePosition = this.lookForSelectablePositionOnScreen(direction); + if (selectablePosition != ListView.INVALID_POSITION && ((direction == View.FOCUS_DOWN && selectablePosition < positionOfNewFocus) || (direction == View.FOCUS_UP && selectablePosition > positionOfNewFocus))) { + return null; } - this.post(this.mFocusSelector.setup(childPosition, top)); + } + let focusScroll = this.amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus); + const maxScrollAmount = this.getMaxScrollAmount(); + if (focusScroll < maxScrollAmount) { + newFocus.requestFocus(direction); + this.mArrowScrollFocusResult.populate(positionOfNewFocus, focusScroll); + return this.mArrowScrollFocusResult; + } + else if (this.distanceToView(newFocus) < maxScrollAmount) { + newFocus.requestFocus(direction); + this.mArrowScrollFocusResult.populate(positionOfNewFocus, maxScrollAmount); + return this.mArrowScrollFocusResult; } } - super.onSizeChanged(w, h, oldw, oldh); + return null; } - onMeasure(widthMeasureSpec, heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - let widthMode = ListView.MeasureSpec.getMode(widthMeasureSpec); - let heightMode = ListView.MeasureSpec.getMode(heightMeasureSpec); - let widthSize = ListView.MeasureSpec.getSize(widthMeasureSpec); - let heightSize = ListView.MeasureSpec.getSize(heightMeasureSpec); - let childWidth = 0; - let childHeight = 0; - let childState = 0; - this.mItemCount = this.mAdapter == null ? 0 : this.mAdapter.getCount(); - if (this.mItemCount > 0 && (widthMode == ListView.MeasureSpec.UNSPECIFIED || heightMode == ListView.MeasureSpec.UNSPECIFIED)) { - const child = this.obtainView(0, this.mIsScrap); - this.measureScrapChild(child, 0, widthMeasureSpec); - childWidth = child.getMeasuredWidth(); - childHeight = child.getMeasuredHeight(); - childState = ListView.combineMeasuredStates(childState, child.getMeasuredState()); - if (this.recycleOnMeasure() && this.mRecycler.shouldRecycleViewType(child.getLayoutParams().viewType)) { - this.mRecycler.addScrapView(child, -1); + positionOfNewFocus(newFocus) { + const numChildren = this.getChildCount(); + for (let i = 0; i < numChildren; i++) { + const child = this.getChildAt(i); + if (this.isViewAncestorOf(newFocus, child)) { + return this.mFirstPosition + i; } } - if (widthMode == ListView.MeasureSpec.UNSPECIFIED) { - widthSize = this.mListPadding.left + this.mListPadding.right + childWidth + this.getVerticalScrollbarWidth(); + throw Error(`new IllegalArgumentException("newFocus is not a child of any of the" + " children of the list!")`); + } + isViewAncestorOf(child, parent) { + if (child == parent) { + return true; + } + const theParent = child.getParent(); + return (theParent instanceof ViewGroup) && this.isViewAncestorOf(theParent, parent); + } + amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus) { + let amountToScroll = 0; + newFocus.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(newFocus, this.mTempRect); + if (direction == View.FOCUS_UP) { + if (this.mTempRect.top < this.mListPadding.top) { + amountToScroll = this.mListPadding.top - this.mTempRect.top; + if (positionOfNewFocus > 0) { + amountToScroll += this.getArrowScrollPreviewLength(); + } + } } else { - widthSize |= (childState & ListView.MEASURED_STATE_MASK); + const listBottom = this.getHeight() - this.mListPadding.bottom; + if (this.mTempRect.bottom > listBottom) { + amountToScroll = this.mTempRect.bottom - listBottom; + if (positionOfNewFocus < this.mItemCount - 1) { + amountToScroll += this.getArrowScrollPreviewLength(); + } + } } - if (heightMode == ListView.MeasureSpec.UNSPECIFIED) { - heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2; + return amountToScroll; + } + distanceToView(descendant) { + let distance = 0; + descendant.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(descendant, this.mTempRect); + const listBottom = this.mBottom - this.mTop - this.mListPadding.bottom; + if (this.mTempRect.bottom < this.mListPadding.top) { + distance = this.mListPadding.top - this.mTempRect.bottom; } - if (heightMode == ListView.MeasureSpec.AT_MOST) { - heightSize = this.measureHeightOfChildren(widthMeasureSpec, 0, ListView.NO_POSITION, heightSize, -1); + else if (this.mTempRect.top > listBottom) { + distance = this.mTempRect.top - listBottom; } - this.setMeasuredDimension(widthSize, heightSize); - this.mWidthMeasureSpec = widthMeasureSpec; + return distance; } - measureScrapChild(child, position, widthMeasureSpec) { - let p = child.getLayoutParams(); - if (p == null) { - p = this.generateDefaultLayoutParams(); - child.setLayoutParams(p); - } - p.viewType = this.mAdapter.getItemViewType(position); - p.forceAdd = true; - let childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); - let lpHeight = p.height; - let childHeightSpec; - if (lpHeight > 0) { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY); + scrollListItemsBy(amount) { + this.offsetChildrenTopAndBottom(amount); + const listBottom = this.getHeight() - this.mListPadding.bottom; + const listTop = this.mListPadding.top; + const recycleBin = this.mRecycler; + if (amount < 0) { + let numChildren = this.getChildCount(); + let last = this.getChildAt(numChildren - 1); + while (last.getBottom() < listBottom) { + const lastVisiblePosition = this.mFirstPosition + numChildren - 1; + if (lastVisiblePosition < this.mItemCount - 1) { + last = this.addViewBelow(last, lastVisiblePosition); + numChildren++; + } + else { + break; + } + } + if (last.getBottom() < listBottom) { + this.offsetChildrenTopAndBottom(listBottom - last.getBottom()); + } + let first = this.getChildAt(0); + while (first.getBottom() < listTop) { + let layoutParams = first.getLayoutParams(); + if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { + recycleBin.addScrapView(first, this.mFirstPosition); + } + this.detachViewFromParent(first); + first = this.getChildAt(0); + this.mFirstPosition++; + } } else { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED); + let first = this.getChildAt(0); + while ((first.getTop() > listTop) && (this.mFirstPosition > 0)) { + first = this.addViewAbove(first, this.mFirstPosition); + this.mFirstPosition--; + } + if (first.getTop() > listTop) { + this.offsetChildrenTopAndBottom(listTop - first.getTop()); + } + let lastIndex = this.getChildCount() - 1; + let last = this.getChildAt(lastIndex); + while (last.getTop() > listBottom) { + let layoutParams = last.getLayoutParams(); + if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { + recycleBin.addScrapView(last, this.mFirstPosition + lastIndex); + } + this.detachViewFromParent(last); + last = this.getChildAt(--lastIndex); + } } - child.measure(childWidthSpec, childHeightSpec); } - recycleOnMeasure() { - return true; + addViewAbove(theView, position) { + let abovePosition = position - 1; + let view = this.obtainView(abovePosition, this.mIsScrap); + let edgeOfNewChild = theView.getTop() - this.mDividerHeight; + this.setupChild(view, abovePosition, edgeOfNewChild, false, this.mListPadding.left, false, this.mIsScrap[0]); + return view; } - measureHeightOfChildren(widthMeasureSpec, startPosition, endPosition, maxHeight, disallowPartialChildPosition) { - const adapter = this.mAdapter; - if (adapter == null) { - return this.mListPadding.top + this.mListPadding.bottom; + addViewBelow(theView, position) { + let belowPosition = position + 1; + let view = this.obtainView(belowPosition, this.mIsScrap); + let edgeOfNewChild = theView.getBottom() + this.mDividerHeight; + this.setupChild(view, belowPosition, edgeOfNewChild, true, this.mListPadding.left, false, this.mIsScrap[0]); + return view; + } + setItemsCanFocus(itemsCanFocus) { + this.mItemsCanFocus = itemsCanFocus; + if (!itemsCanFocus) { + this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); } - let returnedHeight = this.mListPadding.top + this.mListPadding.bottom; - const dividerHeight = ((this.mDividerHeight > 0) && this.mDivider != null) ? this.mDividerHeight : 0; - let prevHeightWithoutPartialChild = 0; - let i; - let child; - endPosition = (endPosition == ListView.NO_POSITION) ? adapter.getCount() - 1 : endPosition; - const recycleBin = this.mRecycler; - const recyle = this.recycleOnMeasure(); - const isScrap = this.mIsScrap; - for (i = startPosition; i <= endPosition; ++i) { - child = this.obtainView(i, isScrap); - this.measureScrapChild(child, i, widthMeasureSpec); - if (i > 0) { - returnedHeight += dividerHeight; - } - if (recyle && recycleBin.shouldRecycleViewType(child.getLayoutParams().viewType)) { - recycleBin.addScrapView(child, -1); + } + getItemsCanFocus() { + return this.mItemsCanFocus; + } + isOpaque() { + let retValue = (this.mCachingActive && this.mIsCacheColorOpaque && this.mDividerIsOpaque && this.hasOpaqueScrollbars()) || super.isOpaque(); + if (retValue) { + const listTop = this.mListPadding != null ? this.mListPadding.top : this.mPaddingTop; + let first = this.getChildAt(0); + if (first == null || first.getTop() > listTop) { + return false; } - returnedHeight += child.getMeasuredHeight(); - if (returnedHeight >= maxHeight) { - return (disallowPartialChildPosition >= 0) && - (i > disallowPartialChildPosition) && - (prevHeightWithoutPartialChild > 0) && - (returnedHeight != maxHeight) ? prevHeightWithoutPartialChild : maxHeight; + const listBottom = this.getHeight() - (this.mListPadding != null ? this.mListPadding.bottom : this.mPaddingBottom); + let last = this.getChildAt(this.getChildCount() - 1); + if (last == null || last.getBottom() < listBottom) { + return false; } - if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) { - prevHeightWithoutPartialChild = returnedHeight; + } + return retValue; + } + setCacheColorHint(color) { + const opaque = (color >>> 24) == 0xFF; + this.mIsCacheColorOpaque = opaque; + if (opaque) { + if (this.mDividerPaint == null) { + this.mDividerPaint = new Paint(); } + this.mDividerPaint.setColor(color); } - return returnedHeight; + super.setCacheColorHint(color); } - findMotionRow(y) { - let childCount = this.getChildCount(); - if (childCount > 0) { + drawOverscrollHeader(canvas, drawable, bounds) { + const height = drawable.getMinimumHeight(); + canvas.save(); + canvas.clipRect(bounds); + const span = bounds.bottom - bounds.top; + if (span < height) { + bounds.top = bounds.bottom - height; + } + drawable.setBounds(bounds); + drawable.draw(canvas); + canvas.restore(); + } + drawOverscrollFooter(canvas, drawable, bounds) { + const height = drawable.getMinimumHeight(); + canvas.save(); + canvas.clipRect(bounds); + const span = bounds.bottom - bounds.top; + if (span < height) { + bounds.bottom = bounds.top + height; + } + drawable.setBounds(bounds); + drawable.draw(canvas); + canvas.restore(); + } + dispatchDraw(canvas) { + if (this.mCachingStarted) { + this.mCachingActive = true; + } + const dividerHeight = this.mDividerHeight; + const overscrollHeader = this.mOverScrollHeader; + const overscrollFooter = this.mOverScrollFooter; + const drawOverscrollHeader = overscrollHeader != null; + const drawOverscrollFooter = overscrollFooter != null; + const drawDividers = dividerHeight > 0 && this.mDivider != null; + if (drawDividers || drawOverscrollHeader || drawOverscrollFooter) { + const bounds = this.mTempRect; + bounds.left = this.mPaddingLeft; + bounds.right = this.mRight - this.mLeft - this.mPaddingRight; + const count = this.getChildCount(); + const headerCount = this.mHeaderViewInfos.size(); + const itemCount = this.mItemCount; + const footerLimit = (itemCount - this.mFooterViewInfos.size()); + const headerDividers = this.mHeaderDividersEnabled; + const footerDividers = this.mFooterDividersEnabled; + const first = this.mFirstPosition; + const areAllItemsSelectable = this.mAreAllItemsSelectable; + const adapter = this.mAdapter; + const fillForMissingDividers = this.isOpaque() && !super.isOpaque(); + if (fillForMissingDividers && this.mDividerPaint == null && this.mIsCacheColorOpaque) { + this.mDividerPaint = new Paint(); + this.mDividerPaint.setColor(this.getCacheColorHint()); + } + const paint = this.mDividerPaint; + let effectivePaddingTop = 0; + let effectivePaddingBottom = 0; + if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { + effectivePaddingTop = this.mListPadding.top; + effectivePaddingBottom = this.mListPadding.bottom; + } + const listBottom = this.mBottom - this.mTop - effectivePaddingBottom + this.mScrollY; if (!this.mStackFromBottom) { - for (let i = 0; i < childCount; i++) { - let v = this.getChildAt(i); - if (y <= v.getBottom()) { - return this.mFirstPosition + i; + let bottom = 0; + const scrollY = this.mScrollY; + if (count > 0 && scrollY < 0) { + if (drawOverscrollHeader) { + bounds.bottom = 0; + bounds.top = scrollY; + this.drawOverscrollHeader(canvas, overscrollHeader, bounds); + } + else if (drawDividers) { + bounds.bottom = 0; + bounds.top = -dividerHeight; + this.drawDivider(canvas, bounds, -1); + } + } + for (let i = 0; i < count; i++) { + const itemIndex = (first + i); + const isHeader = (itemIndex < headerCount); + const isFooter = (itemIndex >= footerLimit); + if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) { + const child = this.getChildAt(i); + bottom = child.getBottom(); + const isLastItem = (i == (count - 1)); + if (drawDividers && (bottom < listBottom) && !(drawOverscrollFooter && isLastItem)) { + const nextIndex = (itemIndex + 1); + if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isLastItem || adapter.isEnabled(nextIndex) || (headerDividers && (nextIndex < headerCount)) || (footerDividers && (nextIndex >= footerLimit))))) { + bounds.top = bottom; + bounds.bottom = bottom + dividerHeight; + this.drawDivider(canvas, bounds, i); + } + else if (fillForMissingDividers) { + bounds.top = bottom; + bounds.bottom = bottom + dividerHeight; + canvas.drawRect(bounds, paint); + } + } } } + const overFooterBottom = this.mBottom + this.mScrollY; + if (drawOverscrollFooter && first + count == itemCount && overFooterBottom > bottom) { + bounds.top = bottom; + bounds.bottom = overFooterBottom; + this.drawOverscrollFooter(canvas, overscrollFooter, bounds); + } } else { - for (let i = childCount - 1; i >= 0; i--) { - let v = this.getChildAt(i); - if (y >= v.getTop()) { - return this.mFirstPosition + i; + let top; + const scrollY = this.mScrollY; + if (count > 0 && drawOverscrollHeader) { + bounds.top = scrollY; + bounds.bottom = this.getChildAt(0).getTop(); + this.drawOverscrollHeader(canvas, overscrollHeader, bounds); + } + const start = drawOverscrollHeader ? 1 : 0; + for (let i = start; i < count; i++) { + const itemIndex = (first + i); + const isHeader = (itemIndex < headerCount); + const isFooter = (itemIndex >= footerLimit); + if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) { + const child = this.getChildAt(i); + top = child.getTop(); + if (drawDividers && (top > effectivePaddingTop)) { + const isFirstItem = (i == start); + const previousIndex = (itemIndex - 1); + if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isFirstItem || adapter.isEnabled(previousIndex) || (headerDividers && (previousIndex < headerCount)) || (footerDividers && (previousIndex >= footerLimit))))) { + bounds.top = top - dividerHeight; + bounds.bottom = top; + this.drawDivider(canvas, bounds, i - 1); + } + else if (fillForMissingDividers) { + bounds.top = top - dividerHeight; + bounds.bottom = top; + canvas.drawRect(bounds, paint); + } + } + } + } + if (count > 0 && scrollY > 0) { + if (drawOverscrollFooter) { + const absListBottom = this.mBottom; + bounds.top = absListBottom; + bounds.bottom = absListBottom + scrollY; + this.drawOverscrollFooter(canvas, overscrollFooter, bounds); + } + else if (drawDividers) { + bounds.top = listBottom; + bounds.bottom = listBottom + dividerHeight; + this.drawDivider(canvas, bounds, -1); } } } } - return ListView.INVALID_POSITION; + super.dispatchDraw(canvas); } - fillSpecific(position, top) { - let tempIsSelected = position == this.mSelectedPosition; - let temp = this.makeAndAddView(position, top, true, this.mListPadding.left, tempIsSelected); - this.mFirstPosition = position; - let above; - let below; - const dividerHeight = this.mDividerHeight; - if (!this.mStackFromBottom) { - above = this.fillUp(position - 1, temp.getTop() - dividerHeight); - this.adjustViewsUpOrDown(); - below = this.fillDown(position + 1, temp.getBottom() + dividerHeight); - let childCount = this.getChildCount(); - if (childCount > 0) { - this.correctTooHigh(childCount); - } - } - else { - below = this.fillDown(position + 1, temp.getBottom() + dividerHeight); - this.adjustViewsUpOrDown(); - above = this.fillUp(position - 1, temp.getTop() - dividerHeight); - let childCount = this.getChildCount(); - if (childCount > 0) { - this.correctTooLow(childCount); - } - } - if (tempIsSelected) { - return temp; + drawChild(canvas, child, drawingTime) { + let more = super.drawChild(canvas, child, drawingTime); + if (this.mCachingActive && child.mCachingFailed) { + this.mCachingActive = false; } - else if (above != null) { - return above; + return more; + } + drawDivider(canvas, bounds, childIndex) { + const divider = this.mDivider; + divider.setBounds(bounds); + divider.draw(canvas); + } + getDivider() { + return this.mDivider; + } + setDivider(divider) { + if (divider != null) { + this.mDividerHeight = divider.getIntrinsicHeight(); } else { - return below; + this.mDividerHeight = 0; } + this.mDivider = divider; + this.mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE; + this.requestLayout(); + this.invalidate(); } - correctTooHigh(childCount) { - let lastPosition = this.mFirstPosition + childCount - 1; - if (lastPosition == this.mItemCount - 1 && childCount > 0) { - const lastChild = this.getChildAt(childCount - 1); - const lastBottom = lastChild.getBottom(); - const end = (this.mBottom - this.mTop) - this.mListPadding.bottom; - let bottomOffset = end - lastBottom; - let firstChild = this.getChildAt(0); - const firstTop = firstChild.getTop(); - if (bottomOffset > 0 && (this.mFirstPosition > 0 || firstTop < this.mListPadding.top)) { - if (this.mFirstPosition == 0) { - bottomOffset = Math.min(bottomOffset, this.mListPadding.top - firstTop); - } - this.offsetChildrenTopAndBottom(bottomOffset); - if (this.mFirstPosition > 0) { - this.fillUp(this.mFirstPosition - 1, firstChild.getTop() - this.mDividerHeight); - this.adjustViewsUpOrDown(); - } - } - } + getDividerHeight() { + return this.mDividerHeight; } - correctTooLow(childCount) { - if (this.mFirstPosition == 0 && childCount > 0) { - const firstChild = this.getChildAt(0); - const firstTop = firstChild.getTop(); - const start = this.mListPadding.top; - const end = (this.mBottom - this.mTop) - this.mListPadding.bottom; - let topOffset = firstTop - start; - let lastChild = this.getChildAt(childCount - 1); - const lastBottom = lastChild.getBottom(); - let lastPosition = this.mFirstPosition + childCount - 1; - if (topOffset > 0) { - if (lastPosition < this.mItemCount - 1 || lastBottom > end) { - if (lastPosition == this.mItemCount - 1) { - topOffset = Math.min(topOffset, lastBottom - end); - } - this.offsetChildrenTopAndBottom(-topOffset); - if (lastPosition < this.mItemCount - 1) { - this.fillDown(lastPosition + 1, lastChild.getBottom() + this.mDividerHeight); - this.adjustViewsUpOrDown(); - } - } - else if (lastPosition == this.mItemCount - 1) { - this.adjustViewsUpOrDown(); - } - } - } + setDividerHeight(height) { + this.mDividerHeight = height; + this.requestLayout(); + this.invalidate(); } - layoutChildren() { - const blockLayoutRequests = this.mBlockLayoutRequests; - if (blockLayoutRequests) { - return; - } - this.mBlockLayoutRequests = true; - try { - super.layoutChildren(); + setHeaderDividersEnabled(headerDividersEnabled) { + this.mHeaderDividersEnabled = headerDividersEnabled; + this.invalidate(); + } + areHeaderDividersEnabled() { + return this.mHeaderDividersEnabled; + } + setFooterDividersEnabled(footerDividersEnabled) { + this.mFooterDividersEnabled = footerDividersEnabled; + this.invalidate(); + } + areFooterDividersEnabled() { + return this.mFooterDividersEnabled; + } + setOverscrollHeader(header) { + this.mOverScrollHeader = header; + if (this.mScrollY < 0) { this.invalidate(); - if (this.mAdapter == null) { - this.resetList(); - this.invokeOnItemScrollListener(); - return; + } + } + getOverscrollHeader() { + return this.mOverScrollHeader; + } + setOverscrollFooter(footer) { + this.mOverScrollFooter = footer; + this.invalidate(); + } + getOverscrollFooter() { + return this.mOverScrollFooter; + } + onFocusChanged(gainFocus, direction, previouslyFocusedRect) { + super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); + const adapter = this.mAdapter; + let closetChildIndex = -1; + let closestChildTop = 0; + if (adapter != null && gainFocus && previouslyFocusedRect != null) { + previouslyFocusedRect.offset(this.mScrollX, this.mScrollY); + if (adapter.getCount() < this.getChildCount() + this.mFirstPosition) { + this.mLayoutMode = ListView.LAYOUT_NORMAL; + this.layoutChildren(); } - const childrenTop = this.mListPadding.top; - const childrenBottom = this.mBottom - this.mTop - this.mListPadding.bottom; + let otherRect = this.mTempRect; + let minDistance = Integer.MAX_VALUE; const childCount = this.getChildCount(); - let index = 0; - let delta = 0; - let sel; - let oldSel = null; - let oldFirst = null; - let newSel = null; - switch (this.mLayoutMode) { - case ListView.LAYOUT_SET_SELECTION: - index = this.mNextSelectedPosition - this.mFirstPosition; - if (index >= 0 && index < childCount) { - newSel = this.getChildAt(index); - } - break; - case ListView.LAYOUT_FORCE_TOP: - case ListView.LAYOUT_FORCE_BOTTOM: - case ListView.LAYOUT_SPECIFIC: - case ListView.LAYOUT_SYNC: - break; - case ListView.LAYOUT_MOVE_SELECTION: - default: - index = this.mSelectedPosition - this.mFirstPosition; - if (index >= 0 && index < childCount) { - oldSel = this.getChildAt(index); - } - oldFirst = this.getChildAt(0); - if (this.mNextSelectedPosition >= 0) { - delta = this.mNextSelectedPosition - this.mSelectedPosition; - } - newSel = this.getChildAt(index + delta); - } - let dataChanged = this.mDataChanged; - if (dataChanged) { - this.handleDataChanged(); - } - if (this.mItemCount == 0) { - this.resetList(); - this.invokeOnItemScrollListener(); - return; - } - else if (this.mItemCount != this.mAdapter.getCount()) { - throw Error(`IllegalStateException("The content of the adapter has changed but - ListView did not receive a notification. Make sure the content of - your adapter is not modified from a background thread, but only from - the UI thread. Make sure your adapter calls notifyDataSetChanged() - when its content changes. [in ListView(${this.getId()},${this.constructor.name}) - with Adapter(${this.mAdapter.constructor.name})]")`); - } - this.setSelectedPositionInt(this.mNextSelectedPosition); - const accessFocusedChild = null; - const focusedChild = this.getFocusedChild(); - if (focusedChild != null) { - focusedChild.setHasTransientState(true); - } const firstPosition = this.mFirstPosition; - const recycleBin = this.mRecycler; - if (dataChanged) { - for (let i = 0; i < childCount; i++) { - recycleBin.addScrapView(this.getChildAt(i), firstPosition + i); - } - } - else { - recycleBin.fillActiveViews(childCount, firstPosition); - } - this.detachAllViewsFromParent(); - recycleBin.removeSkippedScrap(); - switch (this.mLayoutMode) { - case ListView.LAYOUT_SET_SELECTION: - if (newSel != null) { - sel = this.fillFromSelection(newSel.getTop(), childrenTop, childrenBottom); - } - else { - sel = this.fillFromMiddle(childrenTop, childrenBottom); - } - break; - case ListView.LAYOUT_SYNC: - sel = this.fillSpecific(this.mSyncPosition, this.mSpecificTop); - break; - case ListView.LAYOUT_FORCE_BOTTOM: - sel = this.fillUp(this.mItemCount - 1, childrenBottom); - this.adjustViewsUpOrDown(); - break; - case ListView.LAYOUT_FORCE_TOP: - this.mFirstPosition = 0; - sel = this.fillFromTop(childrenTop); - this.adjustViewsUpOrDown(); - break; - case ListView.LAYOUT_SPECIFIC: - sel = this.fillSpecific(this.reconcileSelectedPosition(), this.mSpecificTop); - break; - case ListView.LAYOUT_MOVE_SELECTION: - sel = this.moveSelection(oldSel, newSel, delta, childrenTop, childrenBottom); - break; - default: - if (childCount == 0) { - if (!this.mStackFromBottom) { - const position = this.lookForSelectablePosition(0, true); - this.setSelectedPositionInt(position); - sel = this.fillFromTop(childrenTop); - } - else { - const position = this.lookForSelectablePosition(this.mItemCount - 1, false); - this.setSelectedPositionInt(position); - sel = this.fillUp(this.mItemCount - 1, childrenBottom); - } - } - else { - if (this.mSelectedPosition >= 0 && this.mSelectedPosition < this.mItemCount) { - sel = this.fillSpecific(this.mSelectedPosition, oldSel == null ? childrenTop : oldSel.getTop()); - } - else if (this.mFirstPosition < this.mItemCount) { - sel = this.fillSpecific(this.mFirstPosition, oldFirst == null ? childrenTop : oldFirst.getTop()); - } - else { - sel = this.fillSpecific(0, childrenTop); - } - } - break; - } - recycleBin.scrapActiveViews(); - if (sel != null) { - const shouldPlaceFocus = this.mItemsCanFocus && this.hasFocus(); - const maintainedFocus = focusedChild != null && focusedChild.hasFocus(); - if (shouldPlaceFocus && !maintainedFocus && !sel.hasFocus()) { - if (sel.requestFocus()) { - sel.setSelected(false); - this.mSelectorRect.setEmpty(); - } - else { - const focused = this.getFocusedChild(); - if (focused != null) { - focused.clearFocus(); - } - this.positionSelector(ListView.INVALID_POSITION, sel); - } - } - else { - this.positionSelector(ListView.INVALID_POSITION, sel); - } - this.mSelectedTop = sel.getTop(); - } - else { - if (this.mTouchMode == ListView.TOUCH_MODE_TAP || this.mTouchMode == ListView.TOUCH_MODE_DONE_WAITING) { - const child = this.getChildAt(this.mMotionPosition - this.mFirstPosition); - if (child != null) { - this.positionSelector(this.mMotionPosition, child); - } + for (let i = 0; i < childCount; i++) { + if (!adapter.isEnabled(firstPosition + i)) { + continue; } - else { - this.mSelectedTop = 0; - this.mSelectorRect.setEmpty(); + let other = this.getChildAt(i); + other.getDrawingRect(otherRect); + this.offsetDescendantRectToMyCoords(other, otherRect); + let distance = ListView.getDistance(previouslyFocusedRect, otherRect, direction); + if (distance < minDistance) { + minDistance = distance; + closetChildIndex = i; + closestChildTop = other.getTop(); } } - if (accessFocusedChild != null) { - accessFocusedChild.setHasTransientState(false); - } - if (focusedChild != null) { - focusedChild.setHasTransientState(false); - } - this.mLayoutMode = ListView.LAYOUT_NORMAL; - this.mDataChanged = false; - if (this.mPositionScrollAfterLayout != null) { - this.post(this.mPositionScrollAfterLayout); - this.mPositionScrollAfterLayout = null; - } - this.mNeedSync = false; - this.setNextSelectedPositionInt(this.mSelectedPosition); - this.updateScrollIndicators(); - if (this.mItemCount > 0) { - this.checkSelectionChanged(); - } - this.invokeOnItemScrollListener(); } - finally { - if (!blockLayoutRequests) { - this.mBlockLayoutRequests = false; - } + if (closetChildIndex >= 0) { + this.setSelectionFromTop(closetChildIndex + this.mFirstPosition, closestChildTop); + } + else { + this.requestLayout(); } } - makeAndAddView(position, y, flow, childrenLeft, selected) { - let child; - if (!this.mDataChanged) { - child = this.mRecycler.getActiveView(position); - if (child != null) { - this.setupChild(child, position, y, flow, childrenLeft, selected, true); - return child; + onFinishInflate() { + super.onFinishInflate(); + let count = this.getChildCount(); + if (count > 0) { + for (let i = 0; i < count; ++i) { + this.addHeaderView(this.getChildAt(i)); } + this.removeAllViews(); } - child = this.obtainView(position, this.mIsScrap); - this.setupChild(child, position, y, flow, childrenLeft, selected, this.mIsScrap[0]); - return child; } - setupChild(child, position, y, flowDown, childrenLeft, selected, recycled) { - Trace.traceBegin(Trace.TRACE_TAG_VIEW, "setupListItem"); - const isSelected = selected && this.shouldShowSelector(); - const updateChildSelected = isSelected != child.isSelected(); - const mode = this.mTouchMode; - const isPressed = mode > ListView.TOUCH_MODE_DOWN && mode < ListView.TOUCH_MODE_SCROLL && this.mMotionPosition == position; - const updateChildPressed = isPressed != child.isPressed(); - const needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested(); - let p = child.getLayoutParams(); - if (p == null) { - p = this.generateDefaultLayoutParams(); - } - if (!(p instanceof AbsListView.LayoutParams)) { - throw Error('ClassCaseException(' + p.constructor.name + ' can\'t case to AbsListView.LayoutParams)'); - } - p.viewType = this.mAdapter.getItemViewType(position); - if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) { - this.attachViewToParent(child, flowDown ? -1 : 0, p); - } - else { - p.forceAdd = false; - if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { - p.recycledHeaderFooter = true; + findViewTraversal(id) { + let v; + v = super.findViewTraversal(id); + if (v == null) { + v = this.findViewInHeadersOrFooters(this.mHeaderViewInfos, id); + if (v != null) { + return v; + } + v = this.findViewInHeadersOrFooters(this.mFooterViewInfos, id); + if (v != null) { + return v; } - this.addViewInLayout(child, flowDown ? -1 : 0, p, true); - } - if (updateChildSelected) { - child.setSelected(isSelected); } - if (updateChildPressed) { - child.setPressed(isPressed); + return v; + } + findViewInHeadersOrFooters(where, id) { + if (where != null) { + let len = where.size(); + let v; + for (let i = 0; i < len; i++) { + v = where.get(i).view; + if (!v.isRootNamespace()) { + v = v.findViewById(id); + if (v != null) { + return v; + } + } + } } - if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null) { - if (child['setChecked']) { - child.setChecked(this.mCheckStates.get(position)); + return null; + } + findViewByPredicateTraversal(predicate, childToSkip) { + let v; + v = super.findViewByPredicateTraversal(predicate, childToSkip); + if (v == null) { + v = this.findViewByPredicateInHeadersOrFooters(this.mHeaderViewInfos, predicate, childToSkip); + if (v != null) { + return v; } - else { - child.setActivated(this.mCheckStates.get(position)); + v = this.findViewByPredicateInHeadersOrFooters(this.mFooterViewInfos, predicate, childToSkip); + if (v != null) { + return v; + } + } + return v; + } + findViewByPredicateInHeadersOrFooters(where, predicate, childToSkip) { + if (where != null) { + let len = where.size(); + let v; + for (let i = 0; i < len; i++) { + v = where.get(i).view; + if (v != childToSkip && !v.isRootNamespace()) { + v = v.findViewByPredicate(predicate); + if (v != null) { + return v; + } + } } } - if (needToMeasure) { - let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); - let lpHeight = p.height; - let childHeightSpec; - if (lpHeight > 0) { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY); + return null; + } + getCheckItemIds() { + if (this.mAdapter != null && this.mAdapter.hasStableIds()) { + return this.getCheckedItemIds(); + } + if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null && this.mAdapter != null) { + const states = this.mCheckStates; + const count = states.size(); + const ids = androidui.util.ArrayCreator.newNumberArray(count); + const adapter = this.mAdapter; + let checkedCount = 0; + for (let i = 0; i < count; i++) { + if (states.valueAt(i)) { + ids[checkedCount++] = adapter.getItemId(states.keyAt(i)); + } + } + if (checkedCount == count) { + return ids; } else { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED); + const result = androidui.util.ArrayCreator.newNumberArray(checkedCount); + System.arraycopy(ids, 0, result, 0, checkedCount); + return result; } - child.measure(childWidthSpec, childHeightSpec); - } - else { - this.cleanupLayoutState(child); } - const w = child.getMeasuredWidth(); - const h = child.getMeasuredHeight(); - const childTop = flowDown ? y : y - h; - if (needToMeasure) { - const childRight = childrenLeft + w; - const childBottom = childTop + h; - child.layout(childrenLeft, childTop, childRight, childBottom); + return androidui.util.ArrayCreator.newNumberArray(0); + } + } + ListView.NO_POSITION = -1; + ListView.MAX_SCROLL_FACTOR = 0.33; + ListView.MIN_SCROLL_PREVIEW_PIXELS = 2; + widget.ListView = ListView; + (function (ListView) { + class FixedViewInfo { + constructor(arg) { + this._ListView_this = arg; } - else { - child.offsetLeftAndRight(childrenLeft - child.getLeft()); - child.offsetTopAndBottom(childTop - child.getTop()); + } + ListView.FixedViewInfo = FixedViewInfo; + class FocusSelector { + constructor(arg) { + this.mPosition = 0; + this.mPositionTop = 0; + this._ListView_this = arg; } - if (this.mCachingStarted && !child.isDrawingCacheEnabled()) { - child.setDrawingCacheEnabled(true); + setup(position, top) { + this.mPosition = position; + this.mPositionTop = top; + return this; } - if (recycled && (child.getLayoutParams().scrappedFromPosition) != position) { - child.jumpDrawablesToCurrentState(); + run() { + this._ListView_this.setSelectionFromTop(this.mPosition, this.mPositionTop); } - Trace.traceEnd(Trace.TRACE_TAG_VIEW); - } - canAnimate() { - return super.canAnimate() && this.mItemCount > 0; - } - setSelection(position) { - this.setSelectionFromTop(position, 0); } - setSelectionFromTop(position, y) { - if (this.mAdapter == null) { - return; + ListView.FocusSelector = FocusSelector; + class ArrowScrollFocusResult { + constructor() { + this.mSelectedPosition = 0; + this.mAmountToScroll = 0; } - if (!this.isInTouchMode()) { - position = this.lookForSelectablePosition(position, true); - if (position >= 0) { - this.setNextSelectedPositionInt(position); - } + populate(selectedPosition, amountToScroll) { + this.mSelectedPosition = selectedPosition; + this.mAmountToScroll = amountToScroll; } - else { - this.mResurrectToPosition = position; + getSelectedPosition() { + return this.mSelectedPosition; } - if (position >= 0) { - this.mLayoutMode = ListView.LAYOUT_SPECIFIC; - this.mSpecificTop = this.mListPadding.top + y; - if (this.mNeedSync) { - this.mSyncPosition = position; - this.mSyncRowId = this.mAdapter.getItemId(position); - } - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); - } - this.requestLayout(); + getAmountToScroll() { + return this.mAmountToScroll; } } - setSelectionInt(position) { - this.setNextSelectedPositionInt(position); - let awakeScrollbars = false; - const selectedPosition = this.mSelectedPosition; - if (selectedPosition >= 0) { - if (position == selectedPosition - 1) { - awakeScrollbars = true; - } - else if (position == selectedPosition + 1) { - awakeScrollbars = true; + ListView.ArrowScrollFocusResult = ArrowScrollFocusResult; + })(ListView = widget.ListView || (widget.ListView = {})); + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + class Scroller extends widget.OverScroller { + } + widget.Scroller = Scroller; + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var widget; + (function (widget) { + var Rect = android.graphics.Rect; + var Log = android.util.Log; + var FocusFinder = android.view.FocusFinder; + var KeyEvent = android.view.KeyEvent; + var MotionEvent = android.view.MotionEvent; + var VelocityTracker = android.view.VelocityTracker; + var View = android.view.View; + var ViewConfiguration = android.view.ViewConfiguration; + var ViewGroup = android.view.ViewGroup; + var AnimationUtils = android.view.animation.AnimationUtils; + var FrameLayout = android.widget.FrameLayout; + var OverScroller = android.widget.OverScroller; + class ScrollView extends FrameLayout { + constructor(context, bindElement, defStyle = android.R.attr.scrollViewStyle) { + super(context, bindElement, defStyle); + this.mLastScroll = 0; + this.mTempRect = new Rect(); + this.mLastMotionY = 0; + this.mIsLayoutDirty = true; + this.mChildToScrollTo = null; + this.mIsBeingDragged = false; + this.mSmoothScrollingEnabled = true; + this.mMinimumVelocity = 0; + this.mMaximumVelocity = 0; + this.mOverscrollDistance = 0; + this.mOverflingDistance = 0; + this.mActivePointerId = ScrollView.INVALID_POINTER; + this.initScrollView(); + const a = context.obtainStyledAttributes(bindElement, defStyle); + this.setFillViewport(a.getBoolean('fillViewport', false)); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('fillViewport', { + setter(v, value, attrBinder) { + v.setFillViewport(attrBinder.parseBoolean(value)); + }, getter(v) { + return v.isFillViewport(); } + }); + } + shouldDelayChildPressedState() { + return true; + } + getTopFadingEdgeStrength() { + if (this.getChildCount() == 0) { + return 0.0; } - if (this.mPositionScroller != null) { - this.mPositionScroller.stop(); - } - this.layoutChildren(); - if (awakeScrollbars) { - this.awakenScrollBars(); + const length = this.getVerticalFadingEdgeLength(); + if (this.mScrollY < length) { + return this.mScrollY / length; } + return 1.0; } - lookForSelectablePosition(position, lookDown) { - const adapter = this.mAdapter; - if (adapter == null || this.isInTouchMode()) { - return ListView.INVALID_POSITION; - } - const count = adapter.getCount(); - if (!this.mAreAllItemsSelectable) { - if (lookDown) { - position = Math.max(0, position); - while (position < count && !adapter.isEnabled(position)) { - position++; - } - } - else { - position = Math.min(position, count - 1); - while (position >= 0 && !adapter.isEnabled(position)) { - position--; - } - } + getBottomFadingEdgeStrength() { + if (this.getChildCount() == 0) { + return 0.0; } - if (position < 0 || position >= count) { - return ListView.INVALID_POSITION; + const length = this.getVerticalFadingEdgeLength(); + const bottomEdge = this.getHeight() - this.mPaddingBottom; + const span = this.getChildAt(0).getBottom() - this.mScrollY - bottomEdge; + if (span < length) { + return span / length; } - return position; + return 1.0; } - lookForSelectablePositionAfter(current, position, lookDown) { - const adapter = this.mAdapter; - if (adapter == null || this.isInTouchMode()) { - return ListView.INVALID_POSITION; - } - const after = this.lookForSelectablePosition(position, lookDown); - if (after != ListView.INVALID_POSITION) { - return after; + getMaxScrollAmount() { + return Math.floor((ScrollView.MAX_SCROLL_FACTOR * (this.mBottom - this.mTop))); + } + initScrollView() { + this.mScroller = new OverScroller(); + this.setFocusable(true); + this.setDescendantFocusability(ScrollView.FOCUS_AFTER_DESCENDANTS); + this.setWillNotDraw(false); + const configuration = ViewConfiguration.get(this.mContext); + this.mTouchSlop = configuration.getScaledTouchSlop(); + this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + this.mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); + this.mOverscrollDistance = configuration.getScaledOverscrollDistance(); + this.mOverflingDistance = configuration.getScaledOverflingDistance(); + } + addView(...args) { + if (this.getChildCount() > 0) { + throw new Error("ScrollView can host only one direct child"); } - const count = adapter.getCount(); - current = MathUtils.constrain(current, -1, count - 1); - if (lookDown) { - position = Math.min(position - 1, count - 1); - while ((position > current) && !adapter.isEnabled(position)) { - position--; - } - if (position <= current) { - return ListView.INVALID_POSITION; - } + return super.addView(...args); + } + canScroll() { + let child = this.getChildAt(0); + if (child != null) { + let childHeight = child.getHeight(); + return this.getHeight() < childHeight + this.mPaddingTop + this.mPaddingBottom; } - else { - position = Math.max(0, position + 1); - while ((position < current) && !adapter.isEnabled(position)) { - position++; - } - if (position >= current) { - return ListView.INVALID_POSITION; - } + return false; + } + isFillViewport() { + return this.mFillViewport; + } + setFillViewport(fillViewport) { + if (fillViewport != this.mFillViewport) { + this.mFillViewport = fillViewport; + this.requestLayout(); } - return position; } - setSelectionAfterHeaderView() { - const count = this.mHeaderViewInfos.size(); - if (count > 0) { - this.mNextSelectedPosition = 0; + isSmoothScrollingEnabled() { + return this.mSmoothScrollingEnabled; + } + setSmoothScrollingEnabled(smoothScrollingEnabled) { + this.mSmoothScrollingEnabled = smoothScrollingEnabled; + } + onMeasure(widthMeasureSpec, heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (!this.mFillViewport) { return; } - if (this.mAdapter != null) { - this.setSelection(count); - } - else { - this.mNextSelectedPosition = count; - this.mLayoutMode = ListView.LAYOUT_SET_SELECTION; + const heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + if (heightMode == View.MeasureSpec.UNSPECIFIED) { + return; } - } - dispatchKeyEvent(event) { - let handled = super.dispatchKeyEvent(event); - if (!handled) { - let focused = this.getFocusedChild(); - if (focused != null && event.getAction() == KeyEvent.ACTION_DOWN) { - handled = this.onKeyDown(event.getKeyCode(), event); + if (this.getChildCount() > 0) { + const child = this.getChildAt(0); + let height = this.getMeasuredHeight(); + if (child.getMeasuredHeight() < height) { + const lp = child.getLayoutParams(); + let childWidthMeasureSpec = ScrollView.getChildMeasureSpec(widthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width); + height -= this.mPaddingTop; + height -= this.mPaddingBottom; + let childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY); + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } } - return handled; - } - onKeyDown(keyCode, event) { - return this.commonKey(keyCode, 1, event); } - onKeyMultiple(keyCode, repeatCount, event) { - return this.commonKey(keyCode, repeatCount, event); - } - onKeyUp(keyCode, event) { - return this.commonKey(keyCode, 1, event); + dispatchKeyEvent(event) { + return super.dispatchKeyEvent(event) || this.executeKeyEvent(event); } - commonKey(keyCode, count, event) { - if (this.mAdapter == null || !this.isAttachedToWindow()) { + executeKeyEvent(event) { + this.mTempRect.setEmpty(); + if (!this.canScroll()) { + if (this.isFocused() && event.getKeyCode() != KeyEvent.KEYCODE_BACK) { + let currentFocused = this.findFocus(); + if (currentFocused == this) + currentFocused = null; + let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, View.FOCUS_DOWN); + return nextFocused != null && nextFocused != this && nextFocused.requestFocus(View.FOCUS_DOWN); + } return false; } - if (this.mDataChanged) { - this.layoutChildren(); - } let handled = false; - let action = event.getAction(); - if (action != KeyEvent.ACTION_UP) { - switch (keyCode) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_UP: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded(); - if (!handled) { - while (count-- > 0) { - if (this.arrowScroll(ListView.FOCUS_UP)) { - handled = true; - } - else { - break; - } - } - } + if (!event.isAltPressed()) { + handled = this.arrowScroll(View.FOCUS_UP); } - else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + else { + handled = this.fullScroll(View.FOCUS_UP); } break; case KeyEvent.KEYCODE_DPAD_DOWN: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded(); - if (!handled) { - while (count-- > 0) { - if (this.arrowScroll(ListView.FOCUS_DOWN)) { - handled = true; - } - else { - break; - } - } - } + if (!event.isAltPressed()) { + handled = this.arrowScroll(View.FOCUS_DOWN); } - else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + else { + handled = this.fullScroll(View.FOCUS_DOWN); } break; - case KeyEvent.KEYCODE_DPAD_LEFT: - if (event.hasNoModifiers()) { - handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_LEFT); - } + case KeyEvent.KEYCODE_SPACE: + this.pageScroll(event.isShiftPressed() ? View.FOCUS_UP : View.FOCUS_DOWN); break; - case KeyEvent.KEYCODE_DPAD_RIGHT: - if (event.hasNoModifiers()) { - handled = this.handleHorizontalFocusWithinListItem(View.FOCUS_RIGHT); - } + } + } + return handled; + } + inChild(x, y) { + if (this.getChildCount() > 0) { + const scrollY = this.mScrollY; + const child = this.getChildAt(0); + return !(y < child.getTop() - scrollY || y >= child.getBottom() - scrollY || x < child.getLeft() || x >= child.getRight()); + } + return false; + } + initOrResetVelocityTracker() { + if (this.mVelocityTracker == null) { + this.mVelocityTracker = VelocityTracker.obtain(); + } + else { + this.mVelocityTracker.clear(); + } + } + initVelocityTrackerIfNotExists() { + if (this.mVelocityTracker == null) { + this.mVelocityTracker = VelocityTracker.obtain(); + } + } + recycleVelocityTracker() { + if (this.mVelocityTracker != null) { + this.mVelocityTracker.recycle(); + this.mVelocityTracker = null; + } + } + requestDisallowInterceptTouchEvent(disallowIntercept) { + if (disallowIntercept) { + this.recycleVelocityTracker(); + } + super.requestDisallowInterceptTouchEvent(disallowIntercept); + } + onInterceptTouchEvent(ev) { + const action = ev.getAction(); + if ((action == MotionEvent.ACTION_MOVE) && (this.mIsBeingDragged)) { + return true; + } + if (this.getScrollY() == 0 && !this.canScrollVertically(1)) { + return false; + } + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_MOVE: { + const activePointerId = this.mActivePointerId; + if (activePointerId == ScrollView.INVALID_POINTER) { break; - case KeyEvent.KEYCODE_DPAD_CENTER: - case KeyEvent.KEYCODE_ENTER: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded(); - if (!handled && event.getRepeatCount() == 0 && this.getChildCount() > 0) { - this.keyPressed(); - handled = true; - } - } + } + const pointerIndex = ev.findPointerIndex(activePointerId); + if (pointerIndex == -1) { + Log.e(ScrollView.TAG, "Invalid pointerId=" + activePointerId + " in onInterceptTouchEvent"); break; - case KeyEvent.KEYCODE_SPACE: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN); - } - else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP); + } + const y = Math.floor(ev.getY(pointerIndex)); + const yDiff = Math.abs(y - this.mLastMotionY); + if (yDiff > this.mTouchSlop) { + this.mIsBeingDragged = true; + this.mLastMotionY = y; + this.initVelocityTrackerIfNotExists(); + this.mVelocityTracker.addMovement(ev); + const parent = this.getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); } - handled = true; + } + break; + } + case MotionEvent.ACTION_DOWN: { + const y = Math.floor(ev.getY()); + if (!this.inChild(Math.floor(ev.getX()), Math.floor(y))) { + this.mIsBeingDragged = false; + this.recycleVelocityTracker(); break; - case KeyEvent.KEYCODE_PAGE_UP: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_UP); - } - else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + } + this.mLastMotionY = y; + this.mActivePointerId = ev.getPointerId(0); + this.initOrResetVelocityTracker(); + this.mVelocityTracker.addMovement(ev); + this.mIsBeingDragged = !this.mScroller.isFinished(); + break; + } + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + this.mIsBeingDragged = false; + this.mActivePointerId = ScrollView.INVALID_POINTER; + this.recycleVelocityTracker(); + if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { + this.postInvalidateOnAnimation(); + } + break; + case MotionEvent.ACTION_POINTER_UP: + this.onSecondaryPointerUp(ev); + break; + } + return this.mIsBeingDragged; + } + onTouchEvent(ev) { + this.initVelocityTrackerIfNotExists(); + this.mVelocityTracker.addMovement(ev); + const action = ev.getAction(); + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: { + if (this.getChildCount() == 0) { + return false; + } + if ((this.mIsBeingDragged = !this.mScroller.isFinished())) { + const parent = this.getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); } + } + if (!this.mScroller.isFinished()) { + this.mScroller.abortAnimation(); + } + this.mLastMotionY = Math.floor(ev.getY()); + this.mActivePointerId = ev.getPointerId(0); + break; + } + case MotionEvent.ACTION_MOVE: + const activePointerIndex = ev.findPointerIndex(this.mActivePointerId); + if (activePointerIndex == -1) { + Log.e(ScrollView.TAG, "Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent"); break; - case KeyEvent.KEYCODE_PAGE_DOWN: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.pageScroll(ListView.FOCUS_DOWN); + } + const y = Math.floor(ev.getY(activePointerIndex)); + let deltaY = this.mLastMotionY - y; + if (!this.mIsBeingDragged && Math.abs(deltaY) > this.mTouchSlop) { + const parent = this.getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); } - else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + this.mIsBeingDragged = true; + if (deltaY > 0) { + deltaY -= this.mTouchSlop; } - break; - case KeyEvent.KEYCODE_MOVE_HOME: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_UP); + else { + deltaY += this.mTouchSlop; } - break; - case KeyEvent.KEYCODE_MOVE_END: - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.fullScroll(ListView.FOCUS_DOWN); + } + if (this.mIsBeingDragged) { + this.mLastMotionY = y; + const oldX = this.mScrollX; + const oldY = this.mScrollY; + const range = this.getScrollRange(); + const overscrollMode = this.getOverScrollMode(); + const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0); + if (this.overScrollBy(0, deltaY, 0, this.mScrollY, 0, range, 0, this.mOverscrollDistance, true)) { + this.mVelocityTracker.clear(); } - break; - case KeyEvent.KEYCODE_TAB: - if (false) { - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(ListView.FOCUS_DOWN); + } + break; + case MotionEvent.ACTION_UP: + if (this.mIsBeingDragged) { + const velocityTracker = this.mVelocityTracker; + velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); + let initialVelocity = Math.floor(velocityTracker.getYVelocity(this.mActivePointerId)); + if (this.getChildCount() > 0) { + const springBack = this.mScrollY < -this.mOverflingDistance || this.mScrollY - this.getScrollRange() > this.mOverflingDistance; + if (!springBack && (Math.abs(initialVelocity) > this.mMinimumVelocity)) { + this.fling(-initialVelocity); } - else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.arrowScroll(ListView.FOCUS_UP); + else { + if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { + this.postInvalidateOnAnimation(); + } } } - break; - } - } - if (handled) { - return true; - } - switch (action) { - case KeyEvent.ACTION_DOWN: - return super.onKeyDown(keyCode, event); - case KeyEvent.ACTION_UP: - return super.onKeyUp(keyCode, event); - default: - return false; - } - } - pageScroll(direction) { - let nextPage; - let down; - if (direction == ListView.FOCUS_UP) { - nextPage = Math.max(0, this.mSelectedPosition - this.getChildCount() - 1); - down = false; - } - else if (direction == ListView.FOCUS_DOWN) { - nextPage = Math.min(this.mItemCount - 1, this.mSelectedPosition + this.getChildCount() - 1); - down = true; - } - else { - return false; - } - if (nextPage >= 0) { - const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, nextPage, down); - if (position >= 0) { - this.mLayoutMode = ListView.LAYOUT_SPECIFIC; - this.mSpecificTop = this.mPaddingTop + this.getVerticalFadingEdgeLength(); - if (down && (position > (this.mItemCount - this.getChildCount()))) { - this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM; - } - if (!down && (position < this.getChildCount())) { - this.mLayoutMode = ListView.LAYOUT_FORCE_TOP; + this.mActivePointerId = ScrollView.INVALID_POINTER; + this.endDrag(); } - this.setSelectionInt(position); - this.invokeOnItemScrollListener(); - if (!this.awakenScrollBars()) { - this.invalidate(); + break; + case MotionEvent.ACTION_CANCEL: + if (this.mIsBeingDragged && this.getChildCount() > 0) { + if (this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange())) { + this.postInvalidateOnAnimation(); + } + this.mActivePointerId = ScrollView.INVALID_POINTER; + this.endDrag(); } - return true; + break; + case MotionEvent.ACTION_POINTER_DOWN: { + const index = ev.getActionIndex(); + this.mLastMotionY = Math.floor(ev.getY(index)); + this.mActivePointerId = ev.getPointerId(index); + break; } + case MotionEvent.ACTION_POINTER_UP: + this.onSecondaryPointerUp(ev); + this.mLastMotionY = Math.floor(ev.getY(ev.findPointerIndex(this.mActivePointerId))); + break; } - return false; + return true; } - fullScroll(direction) { - let moved = false; - if (direction == ListView.FOCUS_UP) { - if (this.mSelectedPosition != 0) { - const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, 0, true); - if (position >= 0) { - this.mLayoutMode = ListView.LAYOUT_FORCE_TOP; - this.setSelectionInt(position); - this.invokeOnItemScrollListener(); - } - moved = true; - } - } - else if (direction == ListView.FOCUS_DOWN) { - const lastItem = (this.mItemCount - 1); - if (this.mSelectedPosition < lastItem) { - const position = this.lookForSelectablePositionAfter(this.mSelectedPosition, lastItem, false); - if (position >= 0) { - this.mLayoutMode = ListView.LAYOUT_FORCE_BOTTOM; - this.setSelectionInt(position); - this.invokeOnItemScrollListener(); - } - moved = true; + onSecondaryPointerUp(ev) { + const pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + const pointerId = ev.getPointerId(pointerIndex); + if (pointerId == this.mActivePointerId) { + const newPointerIndex = pointerIndex == 0 ? 1 : 0; + this.mLastMotionY = Math.floor(ev.getY(newPointerIndex)); + this.mActivePointerId = ev.getPointerId(newPointerIndex); + if (this.mVelocityTracker != null) { + this.mVelocityTracker.clear(); } } - if (moved && !this.awakenScrollBars()) { - this.awakenScrollBars(); - this.invalidate(); - } - return moved; } - handleHorizontalFocusWithinListItem(direction) { - if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT) { - throw Error(`new IllegalArgumentException("direction must be one of" + " {View.FOCUS_LEFT, View.FOCUS_RIGHT}")`); - } - const numChildren = this.getChildCount(); - if (this.mItemsCanFocus && numChildren > 0 && this.mSelectedPosition != ListView.INVALID_POSITION) { - const selectedView = this.getSelectedView(); - if (selectedView != null && selectedView.hasFocus() && selectedView instanceof ViewGroup) { - const currentFocus = selectedView.findFocus(); - const nextFocus = FocusFinder.getInstance().findNextFocus(selectedView, currentFocus, direction); - if (nextFocus != null) { - currentFocus.getFocusedRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(currentFocus, this.mTempRect); - this.offsetRectIntoDescendantCoords(nextFocus, this.mTempRect); - if (nextFocus.requestFocus(direction, this.mTempRect)) { - return true; + onGenericMotionEvent(event) { + if (event.isPointerEvent()) { + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: { + if (!this.mIsBeingDragged) { + const vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); + if (vscroll != 0) { + const delta = Math.floor((vscroll * this.getVerticalScrollFactor())); + const range = this.getScrollRange(); + let oldScrollY = this.mScrollY; + let newScrollY = oldScrollY - delta; + if (newScrollY < 0) { + newScrollY = 0; + } + else if (newScrollY > range) { + newScrollY = range; + } + if (newScrollY != oldScrollY) { + super.scrollTo(this.mScrollX, newScrollY); + return true; + } + } } } - const globalNextFocus = FocusFinder.getInstance().findNextFocus(this.getRootView(), currentFocus, direction); - if (globalNextFocus != null) { - return this.isViewAncestorOf(globalNextFocus, this); - } - } - } - return false; - } - arrowScroll(direction) { - try { - this.mInLayout = true; - const handled = this.arrowScrollImpl(direction); - if (handled) { - this.playSoundEffect(SoundEffectConstants.getContantForFocusDirection(direction)); } - return handled; - } - finally { - this.mInLayout = false; } + return super.onGenericMotionEvent(event); } - nextSelectedPositionForDirection(selectedView, selectedPos, direction) { - let nextSelected; - if (direction == View.FOCUS_DOWN) { - const listBottom = this.getHeight() - this.mListPadding.bottom; - if (selectedView != null && selectedView.getBottom() <= listBottom) { - nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos >= this.mFirstPosition ? selectedPos + 1 : this.mFirstPosition; - } - else { - return ListView.INVALID_POSITION; + onOverScrolled(scrollX, scrollY, clampedX, clampedY) { + if (!this.mScroller.isFinished()) { + const oldX = this.mScrollX; + const oldY = this.mScrollY; + this.mScrollX = scrollX; + this.mScrollY = scrollY; + this.invalidateParentIfNeeded(); + this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY); + if (clampedY) { + this.mScroller.springBack(this.mScrollX, this.mScrollY, 0, 0, 0, this.getScrollRange()); } } else { - const listTop = this.mListPadding.top; - if (selectedView != null && selectedView.getTop() >= listTop) { - const lastPos = this.mFirstPosition + this.getChildCount() - 1; - nextSelected = selectedPos != ListView.INVALID_POSITION && selectedPos <= lastPos ? selectedPos - 1 : lastPos; - } - else { - return ListView.INVALID_POSITION; - } - } - if (nextSelected < 0 || nextSelected >= this.mAdapter.getCount()) { - return ListView.INVALID_POSITION; + super.scrollTo(scrollX, scrollY); } - return this.lookForSelectablePosition(nextSelected, direction == View.FOCUS_DOWN); + this.awakenScrollBars(); } - arrowScrollImpl(direction) { - if (this.getChildCount() <= 0) { - return false; - } - let selectedView = this.getSelectedView(); - let selectedPos = this.mSelectedPosition; - let nextSelectedPosition = this.nextSelectedPositionForDirection(selectedView, selectedPos, direction); - let amountToScroll = this.amountToScroll(direction, nextSelectedPosition); - const focusResult = this.mItemsCanFocus ? this.arrowScrollFocused(direction) : null; - if (focusResult != null) { - nextSelectedPosition = focusResult.getSelectedPosition(); - amountToScroll = focusResult.getAmountToScroll(); + getScrollRange() { + let scrollRange = 0; + if (this.getChildCount() > 0) { + let child = this.getChildAt(0); + scrollRange = Math.max(0, child.getHeight() - (this.getHeight() - this.mPaddingBottom - this.mPaddingTop)); } - let needToRedraw = focusResult != null; - if (nextSelectedPosition != ListView.INVALID_POSITION) { - this.handleNewSelectionChange(selectedView, direction, nextSelectedPosition, focusResult != null); - this.setSelectedPositionInt(nextSelectedPosition); - this.setNextSelectedPositionInt(nextSelectedPosition); - selectedView = this.getSelectedView(); - selectedPos = nextSelectedPosition; - if (this.mItemsCanFocus && focusResult == null) { - const focused = this.getFocusedChild(); - if (focused != null) { - focused.clearFocus(); + return scrollRange; + } + findFocusableViewInBounds(topFocus, top, bottom) { + let focusables = this.getFocusables(View.FOCUS_FORWARD); + let focusCandidate = null; + let foundFullyContainedFocusable = false; + let count = focusables.size(); + for (let i = 0; i < count; i++) { + let view = focusables.get(i); + let viewTop = view.getTop(); + let viewBottom = view.getBottom(); + if (top < viewBottom && viewTop < bottom) { + const viewIsFullyContained = (top < viewTop) && (viewBottom < bottom); + if (focusCandidate == null) { + focusCandidate = view; + foundFullyContainedFocusable = viewIsFullyContained; + } + else { + const viewIsCloserToBoundary = (topFocus && viewTop < focusCandidate.getTop()) || (!topFocus && viewBottom > focusCandidate.getBottom()); + if (foundFullyContainedFocusable) { + if (viewIsFullyContained && viewIsCloserToBoundary) { + focusCandidate = view; + } + } + else { + if (viewIsFullyContained) { + focusCandidate = view; + foundFullyContainedFocusable = true; + } + else if (viewIsCloserToBoundary) { + focusCandidate = view; + } + } } } - needToRedraw = true; - this.checkSelectionChanged(); - } - if (amountToScroll > 0) { - this.scrollListItemsBy((direction == View.FOCUS_UP) ? amountToScroll : -amountToScroll); - needToRedraw = true; - } - if (this.mItemsCanFocus && (focusResult == null) && selectedView != null && selectedView.hasFocus()) { - const focused = selectedView.findFocus(); - if (!this.isViewAncestorOf(focused, this) || this.distanceToView(focused) > 0) { - focused.clearFocus(); - } - } - if (nextSelectedPosition == ListView.INVALID_POSITION && selectedView != null && !this.isViewAncestorOf(selectedView, this)) { - selectedView = null; - this.hideSelector(); - this.mResurrectToPosition = ListView.INVALID_POSITION; - } - if (needToRedraw) { - if (selectedView != null) { - this.positionSelector(selectedPos, selectedView); - this.mSelectedTop = selectedView.getTop(); - } - if (!this.awakenScrollBars()) { - this.invalidate(); - } - this.invokeOnItemScrollListener(); - return true; } - return false; + return focusCandidate; } - handleNewSelectionChange(selectedView, direction, newSelectedPosition, newFocusAssigned) { - if (newSelectedPosition == ListView.INVALID_POSITION) { - throw Error(`new IllegalArgumentException("newSelectedPosition needs to be valid")`); - } - let topView; - let bottomView; - let topViewIndex, bottomViewIndex; - let topSelected = false; - const selectedIndex = this.mSelectedPosition - this.mFirstPosition; - const nextSelectedIndex = newSelectedPosition - this.mFirstPosition; - if (direction == View.FOCUS_UP) { - topViewIndex = nextSelectedIndex; - bottomViewIndex = selectedIndex; - topView = this.getChildAt(topViewIndex); - bottomView = selectedView; - topSelected = true; + pageScroll(direction) { + let down = direction == View.FOCUS_DOWN; + let height = this.getHeight(); + if (down) { + this.mTempRect.top = this.getScrollY() + height; + let count = this.getChildCount(); + if (count > 0) { + let view = this.getChildAt(count - 1); + if (this.mTempRect.top + height > view.getBottom()) { + this.mTempRect.top = view.getBottom() - height; + } + } } else { - topViewIndex = selectedIndex; - bottomViewIndex = nextSelectedIndex; - topView = selectedView; - bottomView = this.getChildAt(bottomViewIndex); - } - const numChildren = this.getChildCount(); - if (topView != null) { - topView.setSelected(!newFocusAssigned && topSelected); - this.measureAndAdjustDown(topView, topViewIndex, numChildren); - } - if (bottomView != null) { - bottomView.setSelected(!newFocusAssigned && !topSelected); - this.measureAndAdjustDown(bottomView, bottomViewIndex, numChildren); + this.mTempRect.top = this.getScrollY() - height; + if (this.mTempRect.top < 0) { + this.mTempRect.top = 0; + } } + this.mTempRect.bottom = this.mTempRect.top + height; + return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom); } - measureAndAdjustDown(child, childIndex, numChildren) { - let oldHeight = child.getHeight(); - this.measureItem(child); - if (child.getMeasuredHeight() != oldHeight) { - this.relayoutMeasuredItem(child); - const heightDelta = child.getMeasuredHeight() - oldHeight; - for (let i = childIndex + 1; i < numChildren; i++) { - this.getChildAt(i).offsetTopAndBottom(heightDelta); + fullScroll(direction) { + let down = direction == View.FOCUS_DOWN; + let height = this.getHeight(); + this.mTempRect.top = 0; + this.mTempRect.bottom = height; + if (down) { + let count = this.getChildCount(); + if (count > 0) { + let view = this.getChildAt(count - 1); + this.mTempRect.bottom = view.getBottom() + this.mPaddingBottom; + this.mTempRect.top = this.mTempRect.bottom - height; } } + return this.scrollAndFocus(direction, this.mTempRect.top, this.mTempRect.bottom); } - measureItem(child) { - let p = child.getLayoutParams(); - if (p == null) { - p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - } - let childWidthSpec = ViewGroup.getChildMeasureSpec(this.mWidthMeasureSpec, this.mListPadding.left + this.mListPadding.right, p.width); - let lpHeight = p.height; - let childHeightSpec; - if (lpHeight > 0) { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(lpHeight, ListView.MeasureSpec.EXACTLY); - } - else { - childHeightSpec = ListView.MeasureSpec.makeMeasureSpec(0, ListView.MeasureSpec.UNSPECIFIED); + scrollAndFocus(direction, top, bottom) { + let handled = true; + let height = this.getHeight(); + let containerTop = this.getScrollY(); + let containerBottom = containerTop + height; + let up = direction == View.FOCUS_UP; + let newFocused = this.findFocusableViewInBounds(up, top, bottom); + if (newFocused == null) { + newFocused = this; } - child.measure(childWidthSpec, childHeightSpec); - } - relayoutMeasuredItem(child) { - const w = child.getMeasuredWidth(); - const h = child.getMeasuredHeight(); - const childLeft = this.mListPadding.left; - const childRight = childLeft + w; - const childTop = child.getTop(); - const childBottom = childTop + h; - child.layout(childLeft, childTop, childRight, childBottom); - } - getArrowScrollPreviewLength() { - return Math.max(ListView.MIN_SCROLL_PREVIEW_PIXELS, this.getVerticalFadingEdgeLength()); - } - amountToScroll(direction, nextSelectedPosition) { - const listBottom = this.getHeight() - this.mListPadding.bottom; - const listTop = this.mListPadding.top; - let numChildren = this.getChildCount(); - if (direction == View.FOCUS_DOWN) { - let indexToMakeVisible = numChildren - 1; - if (nextSelectedPosition != ListView.INVALID_POSITION) { - indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; - } - while (numChildren <= indexToMakeVisible) { - this.addViewBelow(this.getChildAt(numChildren - 1), this.mFirstPosition + numChildren - 1); - numChildren++; - } - const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible; - const viewToMakeVisible = this.getChildAt(indexToMakeVisible); - let goalBottom = listBottom; - if (positionToMakeVisible < this.mItemCount - 1) { - goalBottom -= this.getArrowScrollPreviewLength(); - } - if (viewToMakeVisible.getBottom() <= goalBottom) { - return 0; - } - if (nextSelectedPosition != ListView.INVALID_POSITION && (goalBottom - viewToMakeVisible.getTop()) >= this.getMaxScrollAmount()) { - return 0; - } - let amountToScroll = (viewToMakeVisible.getBottom() - goalBottom); - if ((this.mFirstPosition + numChildren) == this.mItemCount) { - const max = this.getChildAt(numChildren - 1).getBottom() - listBottom; - amountToScroll = Math.min(amountToScroll, max); - } - return Math.min(amountToScroll, this.getMaxScrollAmount()); + if (top >= containerTop && bottom <= containerBottom) { + handled = false; } else { - let indexToMakeVisible = 0; - if (nextSelectedPosition != ListView.INVALID_POSITION) { - indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; - } - while (indexToMakeVisible < 0) { - this.addViewAbove(this.getChildAt(0), this.mFirstPosition); - this.mFirstPosition--; - indexToMakeVisible = nextSelectedPosition - this.mFirstPosition; - } - const positionToMakeVisible = this.mFirstPosition + indexToMakeVisible; - const viewToMakeVisible = this.getChildAt(indexToMakeVisible); - let goalTop = listTop; - if (positionToMakeVisible > 0) { - goalTop += this.getArrowScrollPreviewLength(); - } - if (viewToMakeVisible.getTop() >= goalTop) { - return 0; - } - if (nextSelectedPosition != ListView.INVALID_POSITION && (viewToMakeVisible.getBottom() - goalTop) >= this.getMaxScrollAmount()) { - return 0; - } - let amountToScroll = (goalTop - viewToMakeVisible.getTop()); - if (this.mFirstPosition == 0) { - const max = listTop - this.getChildAt(0).getTop(); - amountToScroll = Math.min(amountToScroll, max); - } - return Math.min(amountToScroll, this.getMaxScrollAmount()); + let delta = up ? (top - containerTop) : (bottom - containerBottom); + this.doScrollY(delta); } + if (newFocused != this.findFocus()) + newFocused.requestFocus(direction); + return handled; } - lookForSelectablePositionOnScreen(direction) { - const firstPosition = this.mFirstPosition; - if (direction == View.FOCUS_DOWN) { - let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition + 1 : firstPosition; - if (startPos >= this.mAdapter.getCount()) { - return ListView.INVALID_POSITION; - } - if (startPos < firstPosition) { - startPos = firstPosition; - } - const lastVisiblePos = this.getLastVisiblePosition(); - const adapter = this.getAdapter(); - for (let pos = startPos; pos <= lastVisiblePos; pos++) { - if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) { - return pos; - } - } + arrowScroll(direction) { + let currentFocused = this.findFocus(); + if (currentFocused == this) + currentFocused = null; + let nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction); + const maxJump = this.getMaxScrollAmount(); + if (nextFocused != null && this.isWithinDeltaOfScreen(nextFocused, maxJump, this.getHeight())) { + nextFocused.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(nextFocused, this.mTempRect); + let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); + this.doScrollY(scrollDelta); + nextFocused.requestFocus(direction); } else { - let last = firstPosition + this.getChildCount() - 1; - let startPos = (this.mSelectedPosition != ListView.INVALID_POSITION) ? this.mSelectedPosition - 1 : firstPosition + this.getChildCount() - 1; - if (startPos < 0 || startPos >= this.mAdapter.getCount()) { - return ListView.INVALID_POSITION; - } - if (startPos > last) { - startPos = last; + let scrollDelta = maxJump; + if (direction == View.FOCUS_UP && this.getScrollY() < scrollDelta) { + scrollDelta = this.getScrollY(); } - const adapter = this.getAdapter(); - for (let pos = startPos; pos >= firstPosition; pos--) { - if (adapter.isEnabled(pos) && this.getChildAt(pos - firstPosition).getVisibility() == View.VISIBLE) { - return pos; + else if (direction == View.FOCUS_DOWN) { + if (this.getChildCount() > 0) { + let daBottom = this.getChildAt(0).getBottom(); + let screenBottom = this.getScrollY() + this.getHeight() - this.mPaddingBottom; + if (daBottom - screenBottom < maxJump) { + scrollDelta = daBottom - screenBottom; + } } } + if (scrollDelta == 0) { + return false; + } + this.doScrollY(direction == View.FOCUS_DOWN ? scrollDelta : -scrollDelta); } - return ListView.INVALID_POSITION; - } - arrowScrollFocused(direction) { - const selectedView = this.getSelectedView(); - let newFocus; - if (selectedView != null && selectedView.hasFocus()) { - let oldFocus = selectedView.findFocus(); - newFocus = FocusFinder.getInstance().findNextFocus(this, oldFocus, direction); + if (currentFocused != null && currentFocused.isFocused() && this.isOffScreen(currentFocused)) { + const descendantFocusability = this.getDescendantFocusability(); + this.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); + this.requestFocus(); + this.setDescendantFocusability(descendantFocusability); } - else { - if (direction == View.FOCUS_DOWN) { - const topFadingEdgeShowing = (this.mFirstPosition > 0); - const listTop = this.mListPadding.top + (topFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0); - const ySearchPoint = (selectedView != null && selectedView.getTop() > listTop) ? selectedView.getTop() : listTop; - this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint); + return true; + } + isOffScreen(descendant) { + return !this.isWithinDeltaOfScreen(descendant, 0, this.getHeight()); + } + isWithinDeltaOfScreen(descendant, delta, height) { + descendant.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(descendant, this.mTempRect); + return (this.mTempRect.bottom + delta) >= this.getScrollY() && (this.mTempRect.top - delta) <= (this.getScrollY() + height); + } + doScrollY(delta) { + if (delta != 0) { + if (this.mSmoothScrollingEnabled) { + this.smoothScrollBy(0, delta); } else { - const bottomFadingEdgeShowing = (this.mFirstPosition + this.getChildCount() - 1) < this.mItemCount; - const listBottom = this.getHeight() - this.mListPadding.bottom - (bottomFadingEdgeShowing ? this.getArrowScrollPreviewLength() : 0); - const ySearchPoint = (selectedView != null && selectedView.getBottom() < listBottom) ? selectedView.getBottom() : listBottom; - this.mTempRect.set(0, ySearchPoint, 0, ySearchPoint); - } - newFocus = FocusFinder.getInstance().findNextFocusFromRect(this, this.mTempRect, direction); - } - if (newFocus != null) { - const positionOfNewFocus = this.positionOfNewFocus(newFocus); - if (this.mSelectedPosition != ListView.INVALID_POSITION && positionOfNewFocus != this.mSelectedPosition) { - const selectablePosition = this.lookForSelectablePositionOnScreen(direction); - if (selectablePosition != ListView.INVALID_POSITION && ((direction == View.FOCUS_DOWN && selectablePosition < positionOfNewFocus) || (direction == View.FOCUS_UP && selectablePosition > positionOfNewFocus))) { - return null; - } - } - let focusScroll = this.amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus); - const maxScrollAmount = this.getMaxScrollAmount(); - if (focusScroll < maxScrollAmount) { - newFocus.requestFocus(direction); - this.mArrowScrollFocusResult.populate(positionOfNewFocus, focusScroll); - return this.mArrowScrollFocusResult; - } - else if (this.distanceToView(newFocus) < maxScrollAmount) { - newFocus.requestFocus(direction); - this.mArrowScrollFocusResult.populate(positionOfNewFocus, maxScrollAmount); - return this.mArrowScrollFocusResult; + this.scrollBy(0, delta); } } - return null; } - positionOfNewFocus(newFocus) { - const numChildren = this.getChildCount(); - for (let i = 0; i < numChildren; i++) { - const child = this.getChildAt(i); - if (this.isViewAncestorOf(newFocus, child)) { - return this.mFirstPosition + i; + smoothScrollBy(dx, dy) { + if (this.getChildCount() == 0) { + return; + } + let duration = AnimationUtils.currentAnimationTimeMillis() - this.mLastScroll; + if (duration > ScrollView.ANIMATED_SCROLL_GAP) { + const height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; + const bottom = this.getChildAt(0).getHeight(); + const maxY = Math.max(0, bottom - height); + const scrollY = this.mScrollY; + dy = Math.max(0, Math.min(scrollY + dy, maxY)) - scrollY; + this.mScroller.startScroll(this.mScrollX, scrollY, 0, dy); + this.postInvalidateOnAnimation(); + } + else { + if (!this.mScroller.isFinished()) { + this.mScroller.abortAnimation(); } + this.scrollBy(dx, dy); } - throw Error(`new IllegalArgumentException("newFocus is not a child of any of the" + " children of the list!")`); + this.mLastScroll = AnimationUtils.currentAnimationTimeMillis(); } - isViewAncestorOf(child, parent) { - if (child == parent) { - return true; + smoothScrollTo(x, y) { + this.smoothScrollBy(x - this.mScrollX, y - this.mScrollY); + } + computeVerticalScrollRange() { + const count = this.getChildCount(); + const contentHeight = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; + if (count == 0) { + return contentHeight; } - const theParent = child.getParent(); - return (theParent instanceof ViewGroup) && this.isViewAncestorOf(theParent, parent); + let scrollRange = this.getChildAt(0).getBottom(); + const scrollY = this.mScrollY; + const overscrollBottom = Math.max(0, scrollRange - contentHeight); + if (scrollY < 0) { + scrollRange -= scrollY; + } + else if (scrollY > overscrollBottom) { + scrollRange += scrollY - overscrollBottom; + } + return scrollRange; } - amountToScrollToNewFocus(direction, newFocus, positionOfNewFocus) { - let amountToScroll = 0; - newFocus.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(newFocus, this.mTempRect); - if (direction == View.FOCUS_UP) { - if (this.mTempRect.top < this.mListPadding.top) { - amountToScroll = this.mListPadding.top - this.mTempRect.top; - if (positionOfNewFocus > 0) { - amountToScroll += this.getArrowScrollPreviewLength(); - } + computeVerticalScrollOffset() { + return Math.max(0, super.computeVerticalScrollOffset()); + } + measureChild(child, parentWidthMeasureSpec, parentHeightMeasureSpec) { + let lp = child.getLayoutParams(); + let childWidthMeasureSpec; + let childHeightMeasureSpec; + childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight, lp.width); + childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); + } + measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) { + const lp = child.getLayoutParams(); + const childWidthMeasureSpec = ScrollView.getChildMeasureSpec(parentWidthMeasureSpec, this.mPaddingLeft + this.mPaddingRight + lp.leftMargin + lp.rightMargin + widthUsed, lp.width); + const childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(lp.topMargin + lp.bottomMargin, View.MeasureSpec.UNSPECIFIED); + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); + } + computeScroll() { + if (this.mScroller.computeScrollOffset()) { + let oldX = this.mScrollX; + let oldY = this.mScrollY; + let x = this.mScroller.getCurrX(); + let y = this.mScroller.getCurrY(); + if (oldX != x || oldY != y) { + const range = this.getScrollRange(); + const overscrollMode = this.getOverScrollMode(); + const canOverscroll = overscrollMode == ScrollView.OVER_SCROLL_ALWAYS || (overscrollMode == ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0); + this.overScrollBy(x - oldX, y - oldY, oldX, oldY, 0, range, 0, this.getHeight() / 2, false); + this.onScrollChanged(this.mScrollX, this.mScrollY, oldX, oldY); + } + if (!this.awakenScrollBars()) { + this.postInvalidateOnAnimation(); } } else { - const listBottom = this.getHeight() - this.mListPadding.bottom; - if (this.mTempRect.bottom > listBottom) { - amountToScroll = this.mTempRect.bottom - listBottom; - if (positionOfNewFocus < this.mItemCount - 1) { - amountToScroll += this.getArrowScrollPreviewLength(); - } - } } - return amountToScroll; } - distanceToView(descendant) { - let distance = 0; - descendant.getDrawingRect(this.mTempRect); - this.offsetDescendantRectToMyCoords(descendant, this.mTempRect); - const listBottom = this.mBottom - this.mTop - this.mListPadding.bottom; - if (this.mTempRect.bottom < this.mListPadding.top) { - distance = this.mListPadding.top - this.mTempRect.bottom; - } - else if (this.mTempRect.top > listBottom) { - distance = this.mTempRect.top - listBottom; + scrollToChild(child) { + child.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(child, this.mTempRect); + let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); + if (scrollDelta != 0) { + this.scrollBy(0, scrollDelta); } - return distance; } - scrollListItemsBy(amount) { - this.offsetChildrenTopAndBottom(amount); - const listBottom = this.getHeight() - this.mListPadding.bottom; - const listTop = this.mListPadding.top; - const recycleBin = this.mRecycler; - if (amount < 0) { - let numChildren = this.getChildCount(); - let last = this.getChildAt(numChildren - 1); - while (last.getBottom() < listBottom) { - const lastVisiblePosition = this.mFirstPosition + numChildren - 1; - if (lastVisiblePosition < this.mItemCount - 1) { - last = this.addViewBelow(last, lastVisiblePosition); - numChildren++; - } - else { - break; - } - } - if (last.getBottom() < listBottom) { - this.offsetChildrenTopAndBottom(listBottom - last.getBottom()); + scrollToChildRect(rect, immediate) { + const delta = this.computeScrollDeltaToGetChildRectOnScreen(rect); + const scroll = delta != 0; + if (scroll) { + if (immediate) { + this.scrollBy(0, delta); } - let first = this.getChildAt(0); - while (first.getBottom() < listTop) { - let layoutParams = first.getLayoutParams(); - if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - recycleBin.addScrapView(first, this.mFirstPosition); - } - this.detachViewFromParent(first); - first = this.getChildAt(0); - this.mFirstPosition++; + else { + this.smoothScrollBy(0, delta); } } - else { - let first = this.getChildAt(0); - while ((first.getTop() > listTop) && (this.mFirstPosition > 0)) { - first = this.addViewAbove(first, this.mFirstPosition); - this.mFirstPosition--; + return scroll; + } + computeScrollDeltaToGetChildRectOnScreen(rect) { + if (this.getChildCount() == 0) + return 0; + let height = this.getHeight(); + let screenTop = this.getScrollY(); + let screenBottom = screenTop + height; + let fadingEdge = this.getVerticalFadingEdgeLength(); + if (rect.top > 0) { + screenTop += fadingEdge; + } + if (rect.bottom < this.getChildAt(0).getHeight()) { + screenBottom -= fadingEdge; + } + let scrollYDelta = 0; + if (rect.bottom > screenBottom && rect.top > screenTop) { + if (rect.height() > height) { + scrollYDelta += (rect.top - screenTop); } - if (first.getTop() > listTop) { - this.offsetChildrenTopAndBottom(listTop - first.getTop()); + else { + scrollYDelta += (rect.bottom - screenBottom); } - let lastIndex = this.getChildCount() - 1; - let last = this.getChildAt(lastIndex); - while (last.getTop() > listBottom) { - let layoutParams = last.getLayoutParams(); - if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) { - recycleBin.addScrapView(last, this.mFirstPosition + lastIndex); - } - this.detachViewFromParent(last); - last = this.getChildAt(--lastIndex); + let bottom = this.getChildAt(0).getBottom(); + let distanceToBottom = bottom - screenBottom; + scrollYDelta = Math.min(scrollYDelta, distanceToBottom); + } + else if (rect.top < screenTop && rect.bottom < screenBottom) { + if (rect.height() > height) { + scrollYDelta -= (screenBottom - rect.bottom); + } + else { + scrollYDelta -= (screenTop - rect.top); } + scrollYDelta = Math.max(scrollYDelta, -this.getScrollY()); } + return scrollYDelta; } - addViewAbove(theView, position) { - let abovePosition = position - 1; - let view = this.obtainView(abovePosition, this.mIsScrap); - let edgeOfNewChild = theView.getTop() - this.mDividerHeight; - this.setupChild(view, abovePosition, edgeOfNewChild, false, this.mListPadding.left, false, this.mIsScrap[0]); - return view; - } - addViewBelow(theView, position) { - let belowPosition = position + 1; - let view = this.obtainView(belowPosition, this.mIsScrap); - let edgeOfNewChild = theView.getBottom() + this.mDividerHeight; - this.setupChild(view, belowPosition, edgeOfNewChild, true, this.mListPadding.left, false, this.mIsScrap[0]); - return view; + requestChildFocus(child, focused) { + if (!this.mIsLayoutDirty) { + this.scrollToChild(focused); + } + else { + this.mChildToScrollTo = focused; + } + super.requestChildFocus(child, focused); } - setItemsCanFocus(itemsCanFocus) { - this.mItemsCanFocus = itemsCanFocus; - if (!itemsCanFocus) { - this.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + onRequestFocusInDescendants(direction, previouslyFocusedRect) { + if (direction == View.FOCUS_FORWARD) { + direction = View.FOCUS_DOWN; } + else if (direction == View.FOCUS_BACKWARD) { + direction = View.FOCUS_UP; + } + const nextFocus = previouslyFocusedRect == null ? FocusFinder.getInstance().findNextFocus(this, null, direction) : FocusFinder.getInstance().findNextFocusFromRect(this, previouslyFocusedRect, direction); + if (nextFocus == null) { + return false; + } + if (this.isOffScreen(nextFocus)) { + return false; + } + return nextFocus.requestFocus(direction, previouslyFocusedRect); } - getItemsCanFocus() { - return this.mItemsCanFocus; + requestChildRectangleOnScreen(child, rectangle, immediate) { + rectangle.offset(child.getLeft() - child.getScrollX(), child.getTop() - child.getScrollY()); + return this.scrollToChildRect(rectangle, immediate); } - isOpaque() { - let retValue = (this.mCachingActive && this.mIsCacheColorOpaque && this.mDividerIsOpaque && this.hasOpaqueScrollbars()) || super.isOpaque(); - if (retValue) { - const listTop = this.mListPadding != null ? this.mListPadding.top : this.mPaddingTop; - let first = this.getChildAt(0); - if (first == null || first.getTop() > listTop) { - return false; + requestLayout() { + this.mIsLayoutDirty = true; + super.requestLayout(); + } + onLayout(changed, l, t, r, b) { + super.onLayout(changed, l, t, r, b); + this.mIsLayoutDirty = false; + if (this.mChildToScrollTo != null && ScrollView.isViewDescendantOf(this.mChildToScrollTo, this)) { + this.scrollToChild(this.mChildToScrollTo); + } + this.mChildToScrollTo = null; + if (!this.isLaidOut()) { + const childHeight = (this.getChildCount() > 0) ? this.getChildAt(0).getMeasuredHeight() : 0; + const scrollRange = Math.max(0, childHeight - (b - t - this.mPaddingBottom - this.mPaddingTop)); + if (this.mScrollY > scrollRange) { + this.mScrollY = scrollRange; } - const listBottom = this.getHeight() - (this.mListPadding != null ? this.mListPadding.bottom : this.mPaddingBottom); - let last = this.getChildAt(this.getChildCount() - 1); - if (last == null || last.getBottom() < listBottom) { - return false; + else if (this.mScrollY < 0) { + this.mScrollY = 0; } } - return retValue; + this.scrollTo(this.mScrollX, this.mScrollY); } - setCacheColorHint(color) { - const opaque = (color >>> 24) == 0xFF; - this.mIsCacheColorOpaque = opaque; - if (opaque) { - if (this.mDividerPaint == null) { - this.mDividerPaint = new Paint(); - } - this.mDividerPaint.setColor(color); + onSizeChanged(w, h, oldw, oldh) { + super.onSizeChanged(w, h, oldw, oldh); + let currentFocused = this.findFocus(); + if (null == currentFocused || this == currentFocused) + return; + if (this.isWithinDeltaOfScreen(currentFocused, 0, oldh)) { + currentFocused.getDrawingRect(this.mTempRect); + this.offsetDescendantRectToMyCoords(currentFocused, this.mTempRect); + let scrollDelta = this.computeScrollDeltaToGetChildRectOnScreen(this.mTempRect); + this.doScrollY(scrollDelta); } - super.setCacheColorHint(color); } - drawOverscrollHeader(canvas, drawable, bounds) { - const height = drawable.getMinimumHeight(); - canvas.save(); - canvas.clipRect(bounds); - const span = bounds.bottom - bounds.top; - if (span < height) { - bounds.top = bounds.bottom - height; + static isViewDescendantOf(child, parent) { + if (child == parent) { + return true; } - drawable.setBounds(bounds); - drawable.draw(canvas); - canvas.restore(); + const theParent = child.getParent(); + return (theParent instanceof ViewGroup) && ScrollView.isViewDescendantOf(theParent, parent); } - drawOverscrollFooter(canvas, drawable, bounds) { - const height = drawable.getMinimumHeight(); - canvas.save(); - canvas.clipRect(bounds); - const span = bounds.bottom - bounds.top; - if (span < height) { - bounds.bottom = bounds.top + height; + fling(velocityY) { + if (this.getChildCount() > 0) { + let height = this.getHeight() - this.mPaddingBottom - this.mPaddingTop; + let bottom = this.getChildAt(0).getHeight(); + this.mScroller.fling(this.mScrollX, this.mScrollY, 0, velocityY, 0, 0, 0, Math.max(0, bottom - height), 0, this.mOverflingDistance); + this.postInvalidateOnAnimation(); } - drawable.setBounds(bounds); - drawable.draw(canvas); - canvas.restore(); } - dispatchDraw(canvas) { - if (this.mCachingStarted) { - this.mCachingActive = true; - } - const dividerHeight = this.mDividerHeight; - const overscrollHeader = this.mOverScrollHeader; - const overscrollFooter = this.mOverScrollFooter; - const drawOverscrollHeader = overscrollHeader != null; - const drawOverscrollFooter = overscrollFooter != null; - const drawDividers = dividerHeight > 0 && this.mDivider != null; - if (drawDividers || drawOverscrollHeader || drawOverscrollFooter) { - const bounds = this.mTempRect; - bounds.left = this.mPaddingLeft; - bounds.right = this.mRight - this.mLeft - this.mPaddingRight; - const count = this.getChildCount(); - const headerCount = this.mHeaderViewInfos.size(); - const itemCount = this.mItemCount; - const footerLimit = (itemCount - this.mFooterViewInfos.size()); - const headerDividers = this.mHeaderDividersEnabled; - const footerDividers = this.mFooterDividersEnabled; - const first = this.mFirstPosition; - const areAllItemsSelectable = this.mAreAllItemsSelectable; - const adapter = this.mAdapter; - const fillForMissingDividers = this.isOpaque() && !super.isOpaque(); - if (fillForMissingDividers && this.mDividerPaint == null && this.mIsCacheColorOpaque) { - this.mDividerPaint = new Paint(); - this.mDividerPaint.setColor(this.getCacheColorHint()); - } - const paint = this.mDividerPaint; - let effectivePaddingTop = 0; - let effectivePaddingBottom = 0; - if ((this.mGroupFlags & ListView.CLIP_TO_PADDING_MASK) == ListView.CLIP_TO_PADDING_MASK) { - effectivePaddingTop = this.mListPadding.top; - effectivePaddingBottom = this.mListPadding.bottom; - } - const listBottom = this.mBottom - this.mTop - effectivePaddingBottom + this.mScrollY; - if (!this.mStackFromBottom) { - let bottom = 0; - const scrollY = this.mScrollY; - if (count > 0 && scrollY < 0) { - if (drawOverscrollHeader) { - bounds.bottom = 0; - bounds.top = scrollY; - this.drawOverscrollHeader(canvas, overscrollHeader, bounds); - } - else if (drawDividers) { - bounds.bottom = 0; - bounds.top = -dividerHeight; - this.drawDivider(canvas, bounds, -1); - } - } - for (let i = 0; i < count; i++) { - const itemIndex = (first + i); - const isHeader = (itemIndex < headerCount); - const isFooter = (itemIndex >= footerLimit); - if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) { - const child = this.getChildAt(i); - bottom = child.getBottom(); - const isLastItem = (i == (count - 1)); - if (drawDividers && (bottom < listBottom) && !(drawOverscrollFooter && isLastItem)) { - const nextIndex = (itemIndex + 1); - if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isLastItem || adapter.isEnabled(nextIndex) || (headerDividers && (nextIndex < headerCount)) || (footerDividers && (nextIndex >= footerLimit))))) { - bounds.top = bottom; - bounds.bottom = bottom + dividerHeight; - this.drawDivider(canvas, bounds, i); - } - else if (fillForMissingDividers) { - bounds.top = bottom; - bounds.bottom = bottom + dividerHeight; - canvas.drawRect(bounds, paint); - } - } - } - } - const overFooterBottom = this.mBottom + this.mScrollY; - if (drawOverscrollFooter && first + count == itemCount && overFooterBottom > bottom) { - bounds.top = bottom; - bounds.bottom = overFooterBottom; - this.drawOverscrollFooter(canvas, overscrollFooter, bounds); - } - } - else { - let top; - const scrollY = this.mScrollY; - if (count > 0 && drawOverscrollHeader) { - bounds.top = scrollY; - bounds.bottom = this.getChildAt(0).getTop(); - this.drawOverscrollHeader(canvas, overscrollHeader, bounds); - } - const start = drawOverscrollHeader ? 1 : 0; - for (let i = start; i < count; i++) { - const itemIndex = (first + i); - const isHeader = (itemIndex < headerCount); - const isFooter = (itemIndex >= footerLimit); - if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) { - const child = this.getChildAt(i); - top = child.getTop(); - if (drawDividers && (top > effectivePaddingTop)) { - const isFirstItem = (i == start); - const previousIndex = (itemIndex - 1); - if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex) || (headerDividers && isHeader) || (footerDividers && isFooter)) && (isFirstItem || adapter.isEnabled(previousIndex) || (headerDividers && (previousIndex < headerCount)) || (footerDividers && (previousIndex >= footerLimit))))) { - bounds.top = top - dividerHeight; - bounds.bottom = top; - this.drawDivider(canvas, bounds, i - 1); - } - else if (fillForMissingDividers) { - bounds.top = top - dividerHeight; - bounds.bottom = top; - canvas.drawRect(bounds, paint); - } - } - } - } - if (count > 0 && scrollY > 0) { - if (drawOverscrollFooter) { - const absListBottom = this.mBottom; - bounds.top = absListBottom; - bounds.bottom = absListBottom + scrollY; - this.drawOverscrollFooter(canvas, overscrollFooter, bounds); - } - else if (drawDividers) { - bounds.top = listBottom; - bounds.bottom = listBottom + dividerHeight; - this.drawDivider(canvas, bounds, -1); - } - } + endDrag() { + this.mIsBeingDragged = false; + this.recycleVelocityTracker(); + } + scrollTo(x, y) { + if (this.getChildCount() > 0) { + let child = this.getChildAt(0); + x = ScrollView.clamp(x, this.getWidth() - this.mPaddingRight - this.mPaddingLeft, child.getWidth()); + y = ScrollView.clamp(y, this.getHeight() - this.mPaddingBottom - this.mPaddingTop, child.getHeight()); + if (x != this.mScrollX || y != this.mScrollY) { + super.scrollTo(x, y); } } - super.dispatchDraw(canvas); } - drawChild(canvas, child, drawingTime) { - let more = super.drawChild(canvas, child, drawingTime); - if (this.mCachingActive && child.mCachingFailed) { - this.mCachingActive = false; + draw(canvas) { + super.draw(canvas); + } + static clamp(n, my, child) { + if (my >= child || n < 0) { + return 0; } - return more; + if ((my + n) > child) { + return child - my; + } + return n; } - drawDivider(canvas, bounds, childIndex) { - const divider = this.mDivider; - divider.setBounds(bounds); - divider.draw(canvas); + } + ScrollView.ANIMATED_SCROLL_GAP = 250; + ScrollView.MAX_SCROLL_FACTOR = 0.5; + ScrollView.TAG = "ScrollView"; + ScrollView.INVALID_POINTER = -1; + widget.ScrollView = ScrollView; + })(widget = android.widget || (android.widget = {})); +})(android || (android = {})); +var android; +(function (android) { + var util; + (function (util) { + class ArrayMap { + constructor(capacity) { + this.map = new Map(); } - getDivider() { - return this.mDivider; + clear() { + this.map.clear(); } - setDivider(divider) { - if (divider != null) { - this.mDividerHeight = divider.getIntrinsicHeight(); - } - else { - this.mDividerHeight = 0; - } - this.mDivider = divider; - this.mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE; - this.requestLayout(); - this.invalidate(); + erase() { + this.map.clear(); } - getDividerHeight() { - return this.mDividerHeight; + ensureCapacity(minimumCapacity) { } - setDividerHeight(height) { - this.mDividerHeight = height; - this.requestLayout(); - this.invalidate(); + containsKey(key) { + return this.map.has(key); } - setHeaderDividersEnabled(headerDividersEnabled) { - this.mHeaderDividersEnabled = headerDividersEnabled; - this.invalidate(); + indexOfValue(value) { + return [...this.map.values()].indexOf(value); } - areHeaderDividersEnabled() { - return this.mHeaderDividersEnabled; + containsValue(value) { + return this.indexOfValue(value) >= 0; } - setFooterDividersEnabled(footerDividersEnabled) { - this.mFooterDividersEnabled = footerDividersEnabled; - this.invalidate(); + get(key) { + return this.map.get(key); } - areFooterDividersEnabled() { - return this.mFooterDividersEnabled; + keyAt(index) { + return [...this.map.keys()][index]; } - setOverscrollHeader(header) { - this.mOverScrollHeader = header; - if (this.mScrollY < 0) { - this.invalidate(); - } + valueAt(index) { + return [...this.map.values()][index]; } - getOverscrollHeader() { - return this.mOverScrollHeader; + setValueAt(index, value) { + let key = this.keyAt(index); + if (key == null) + throw Error('index error'); + let oldV = this.get(key); + this.map.set(key, value); + return oldV; } - setOverscrollFooter(footer) { - this.mOverScrollFooter = footer; - this.invalidate(); + isEmpty() { + return this.map.size <= 0; } - getOverscrollFooter() { - return this.mOverScrollFooter; + put(key, value) { + let oldV = this.get(key); + this.map.set(key, value); + return oldV; } - onFocusChanged(gainFocus, direction, previouslyFocusedRect) { - super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); - const adapter = this.mAdapter; - let closetChildIndex = -1; - let closestChildTop = 0; - if (adapter != null && gainFocus && previouslyFocusedRect != null) { - previouslyFocusedRect.offset(this.mScrollX, this.mScrollY); - if (adapter.getCount() < this.getChildCount() + this.mFirstPosition) { - this.mLayoutMode = ListView.LAYOUT_NORMAL; - this.layoutChildren(); - } - let otherRect = this.mTempRect; - let minDistance = Integer.MAX_VALUE; - const childCount = this.getChildCount(); - const firstPosition = this.mFirstPosition; - for (let i = 0; i < childCount; i++) { - if (!adapter.isEnabled(firstPosition + i)) { - continue; - } - let other = this.getChildAt(i); - other.getDrawingRect(otherRect); - this.offsetDescendantRectToMyCoords(other, otherRect); - let distance = ListView.getDistance(previouslyFocusedRect, otherRect, direction); - if (distance < minDistance) { - minDistance = distance; - closetChildIndex = i; - closestChildTop = other.getTop(); - } - } - } - if (closetChildIndex >= 0) { - this.setSelectionFromTop(closetChildIndex + this.mFirstPosition, closestChildTop); - } - else { - this.requestLayout(); - } + append(key, value) { + this.map.set(key, value); } - onFinishInflate() { - super.onFinishInflate(); - let count = this.getChildCount(); - if (count > 0) { - for (let i = 0; i < count; ++i) { - this.addHeaderView(this.getChildAt(i)); - } - this.removeAllViews(); - } + remove(key) { + let oldV = this.get(key); + this.map.delete(key); + return oldV; } - findViewTraversal(id) { - let v; - v = super.findViewTraversal(id); - if (v == null) { - v = this.findViewInHeadersOrFooters(this.mHeaderViewInfos, id); - if (v != null) { - return v; - } - v = this.findViewInHeadersOrFooters(this.mFooterViewInfos, id); - if (v != null) { - return v; - } - } - return v; + removeAt(index) { + let key = this.keyAt(index); + if (key == null) + throw Error('index error'); + let oldV = this.get(key); + this.map.delete(key); + return oldV; } - findViewInHeadersOrFooters(where, id) { - if (where != null) { - let len = where.size(); - let v; - for (let i = 0; i < len; i++) { - v = where.get(i).view; - if (!v.isRootNamespace()) { - v = v.findViewById(id); - if (v != null) { - return v; - } - } - } - } - return null; + keySet() { + return new Set(this.map.keys()); } - findViewByPredicateTraversal(predicate, childToSkip) { - let v; - v = super.findViewByPredicateTraversal(predicate, childToSkip); - if (v == null) { - v = this.findViewByPredicateInHeadersOrFooters(this.mHeaderViewInfos, predicate, childToSkip); - if (v != null) { - return v; - } - v = this.findViewByPredicateInHeadersOrFooters(this.mFooterViewInfos, predicate, childToSkip); - if (v != null) { - return v; - } - } - return v; + size() { + return this.map.size; } - findViewByPredicateInHeadersOrFooters(where, predicate, childToSkip) { - if (where != null) { - let len = where.size(); - let v; - for (let i = 0; i < len; i++) { - v = where.get(i).view; - if (v != childToSkip && !v.isRootNamespace()) { - v = v.findViewByPredicate(predicate); - if (v != null) { - return v; - } - } + } + util.ArrayMap = ArrayMap; + })(util = android.util || (android.util = {})); +})(android || (android = {})); +var java; +(function (java) { + var util; + (function (util) { + class ArrayDeque extends util.ArrayList { + addFirst(e) { + this.add(0, e); + } + addLast(e) { + this.add(e); + } + offerFirst(e) { + this.addFirst(e); + return true; + } + offerLast(e) { + this.addLast(e); + return true; + } + removeFirst() { + let x = this.pollFirst(); + if (x == null) + throw Error('NoSuchElementException'); + return x; + } + removeLast() { + let x = this.pollLast(); + if (x == null) + throw Error('NoSuchElementException'); + return x; + } + pollFirst() { + return this.array.shift(); + } + pollLast() { + return this.array.splice(this.array.length - 1)[0]; + } + getFirst() { + let x = this.peekFirst(); + if (x == null) + throw Error('NoSuchElementException'); + return x; + } + getLast() { + let x = this.peekLast(); + if (x == null) + throw Error('NoSuchElementException'); + return x; + } + peekFirst() { + return this.array[0]; + } + peekLast() { + return this.array[this.array.length - 1]; + } + removeFirstOccurrence(o) { + if (o == null) + return false; + for (let i = 0, count = this.size(); i < count; i++) { + if (this.array[i] == o) { + this.delete(i); + return true; } } - return null; + return false; } - getCheckItemIds() { - if (this.mAdapter != null && this.mAdapter.hasStableIds()) { - return this.getCheckedItemIds(); - } - if (this.mChoiceMode != ListView.CHOICE_MODE_NONE && this.mCheckStates != null && this.mAdapter != null) { - const states = this.mCheckStates; - const count = states.size(); - const ids = androidui.util.ArrayCreator.newNumberArray(count); - const adapter = this.mAdapter; - let checkedCount = 0; - for (let i = 0; i < count; i++) { - if (states.valueAt(i)) { - ids[checkedCount++] = adapter.getItemId(states.keyAt(i)); - } - } - if (checkedCount == count) { - return ids; - } - else { - const result = androidui.util.ArrayCreator.newNumberArray(checkedCount); - System.arraycopy(ids, 0, result, 0, checkedCount); - return result; + removeLastOccurrence(o) { + if (o == null) + return false; + for (let i = this.size(); i >= 0; i--) { + if (this.array[i] == o) { + this.delete(i); + return true; } } - return androidui.util.ArrayCreator.newNumberArray(0); + return false; } - } - ListView.NO_POSITION = -1; - ListView.MAX_SCROLL_FACTOR = 0.33; - ListView.MIN_SCROLL_PREVIEW_PIXELS = 2; - widget.ListView = ListView; - (function (ListView) { - class FixedViewInfo { - constructor(arg) { - this._ListView_this = arg; - } + offer(e) { + return this.offerLast(e); } - ListView.FixedViewInfo = FixedViewInfo; - class FocusSelector { - constructor(arg) { - this.mPosition = 0; - this.mPositionTop = 0; - this._ListView_this = arg; - } - setup(position, top) { - this.mPosition = position; - this.mPositionTop = top; - return this; - } - run() { - this._ListView_this.setSelectionFromTop(this.mPosition, this.mPositionTop); - } + remove() { + return this.removeFirst(); } - ListView.FocusSelector = FocusSelector; - class ArrowScrollFocusResult { - constructor() { - this.mSelectedPosition = 0; - this.mAmountToScroll = 0; - } - populate(selectedPosition, amountToScroll) { - this.mSelectedPosition = selectedPosition; - this.mAmountToScroll = amountToScroll; - } - getSelectedPosition() { - return this.mSelectedPosition; - } - getAmountToScroll() { - return this.mAmountToScroll; - } + poll() { + return this.pollFirst(); } - ListView.ArrowScrollFocusResult = ArrowScrollFocusResult; - })(ListView = widget.ListView || (widget.ListView = {})); - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); + element() { + return this.getFirst(); + } + peek() { + return this.peekFirst(); + } + push(e) { + this.addFirst(e); + } + pop() { + return this.removeFirst(); + } + delete(i) { + if (i >= this.array.length) + return false; + this.array.splice(i, 1); + return true; + } + } + util.ArrayDeque = ArrayDeque; + })(util = java.util || (java.util = {})); +})(java || (java = {})); var android; (function (android) { var widget; @@ -41688,9 +42468,9 @@ var android; this._mOverflingDistance = 0; this.mActivePointerId = HorizontalScrollView.INVALID_POINTER; this.initScrollView(); - this._attrBinder.addAttr('fillViewport', (value) => { - this.setFillViewport(this._attrBinder.parseBoolean(value)); - }); + let a = context.obtainStyledAttributes(bindElement, defStyle); + this.setFillViewport(a.getBoolean('fillViewport', false)); + a.recycle(); } get mOverflingDistance() { if (this.mScrollX < -this._mOverflingDistance) @@ -41703,6 +42483,15 @@ var android; set mOverflingDistance(value) { this._mOverflingDistance = value; } + createClassAttrBinder() { + return super.createClassAttrBinder().set('', { + setter(v, value, attrBinder) { + v.setFillViewport(attrBinder.parseBoolean(value)); + }, getter(v) { + return v.isFillViewport(); + } + }); + } getLeftFadingEdgeStrength() { if (this.getChildCount() == 0) { return 0.0; @@ -41776,8 +42565,8 @@ var android; if (!this.mFillViewport) { return; } - const widthMode = HorizontalScrollView.MeasureSpec.getMode(widthMeasureSpec); - if (widthMode == HorizontalScrollView.MeasureSpec.UNSPECIFIED) { + const widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + if (widthMode == View.MeasureSpec.UNSPECIFIED) { return; } if (this.getChildCount() > 0) { @@ -41788,7 +42577,7 @@ var android; let childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(heightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height); width -= this.mPaddingLeft; width -= this.mPaddingRight; - let childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(width, HorizontalScrollView.MeasureSpec.EXACTLY); + let childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } } @@ -42307,13 +43096,13 @@ var android; let childWidthMeasureSpec; let childHeightMeasureSpec; childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom, lp.height); - childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(0, HorizontalScrollView.MeasureSpec.UNSPECIFIED); + childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed) { const lp = child.getLayoutParams(); const childHeightMeasureSpec = HorizontalScrollView.getChildMeasureSpec(parentHeightMeasureSpec, this.mPaddingTop + this.mPaddingBottom + lp.topMargin + lp.bottomMargin + heightUsed, lp.height); - const childWidthMeasureSpec = HorizontalScrollView.MeasureSpec.makeMeasureSpec(lp.leftMargin + lp.rightMargin, HorizontalScrollView.MeasureSpec.UNSPECIFIED); + const childWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(lp.leftMargin + lp.rightMargin, View.MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } computeScroll() { @@ -42543,6 +43332,7 @@ var android; var ViewGroup = android.view.ViewGroup; var Integer = java.lang.Integer; var System = java.lang.System; + var Context = android.content.Context; class RelativeLayout extends ViewGroup { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); @@ -42554,14 +43344,29 @@ var android; this.mGraph = new RelativeLayout.DependencyGraph(); this.mAllowBrokenMeasureSpecs = false; this.mMeasureVerticalWithPaddingMargin = false; - this._attrBinder.addAttr('ignoreGravity', (value) => { - this.setIgnoreGravity(value); - }); - this._attrBinder.addAttr('gravity', (value) => { - this.setGravity(this._attrBinder.parseGravity(value, this.mGravity)); - }); + if (bindElement || defStyle) { + const a = context.obtainStyledAttributes(bindElement, defStyle); + this.mIgnoreGravity = a.getResourceId('ignoreGravity', View.NO_ID); + this.mGravity = Gravity.parseGravity(a.getAttrValue('gravity'), this.mGravity); + a.recycle(); + } this.queryCompatibilityModes(); } + createClassAttrBinder() { + return super.createClassAttrBinder().set('ignoreGravity', { + setter(v, value, a) { + v.setIgnoreGravity(value + ''); + }, getter(v) { + return v.mIgnoreGravity; + } + }).set('gravity', { + setter(v, value, a) { + v.setGravity(a.parseGravity(value, v.mGravity)); + }, getter(v) { + return v.mGravity; + } + }); + } queryCompatibilityModes() { this.mAllowBrokenMeasureSpecs = false; this.mMeasureVerticalWithPaddingMargin = true; @@ -42633,20 +43438,20 @@ var android; let myHeight = -1; let width = 0; let height = 0; - const widthMode = RelativeLayout.MeasureSpec.getMode(widthMeasureSpec); - const heightMode = RelativeLayout.MeasureSpec.getMode(heightMeasureSpec); - const widthSize = RelativeLayout.MeasureSpec.getSize(widthMeasureSpec); - const heightSize = RelativeLayout.MeasureSpec.getSize(heightMeasureSpec); - if (widthMode != RelativeLayout.MeasureSpec.UNSPECIFIED) { + const widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + const heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + const widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + const heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + if (widthMode != View.MeasureSpec.UNSPECIFIED) { myWidth = widthSize; } - if (heightMode != RelativeLayout.MeasureSpec.UNSPECIFIED) { + if (heightMode != View.MeasureSpec.UNSPECIFIED) { myHeight = heightSize; } - if (widthMode == RelativeLayout.MeasureSpec.EXACTLY) { + if (widthMode == View.MeasureSpec.EXACTLY) { width = myWidth; } - if (heightMode == RelativeLayout.MeasureSpec.EXACTLY) { + if (heightMode == View.MeasureSpec.EXACTLY) { height = myHeight; } this.mHasBaselineAlignedChild = false; @@ -42664,8 +43469,8 @@ var android; if ((horizontalGravity || verticalGravity) && this.mIgnoreGravity != View.NO_ID) { ignore = this.findViewById(this.mIgnoreGravity); } - const isWrapContentWidth = widthMode != RelativeLayout.MeasureSpec.EXACTLY; - const isWrapContentHeight = heightMode != RelativeLayout.MeasureSpec.EXACTLY; + const isWrapContentWidth = widthMode != View.MeasureSpec.EXACTLY; + const isWrapContentHeight = heightMode != View.MeasureSpec.EXACTLY; const layoutDirection = this.getLayoutDirection(); if (this.isLayoutRtl() && myWidth == -1) { myWidth = RelativeLayout.DEFAULT_WIDTH; @@ -42861,26 +43666,26 @@ var android; let childHeightMeasureSpec; if (myHeight < 0 && !this.mAllowBrokenMeasureSpecs) { if (params.height >= 0) { - childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(params.height, RelativeLayout.MeasureSpec.EXACTLY); + childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(params.height, View.MeasureSpec.EXACTLY); } else { - childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(0, RelativeLayout.MeasureSpec.UNSPECIFIED); + childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); } } else if (params.width == RelativeLayout.LayoutParams.MATCH_PARENT) { - childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight, RelativeLayout.MeasureSpec.EXACTLY); + childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(maxHeight, View.MeasureSpec.EXACTLY); } else { - childHeightMeasureSpec = RelativeLayout.MeasureSpec.makeMeasureSpec(maxHeight, RelativeLayout.MeasureSpec.AT_MOST); + childHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(maxHeight, View.MeasureSpec.AT_MOST); } child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } getChildMeasureSpec(childStart, childEnd, childSize, startMargin, endMargin, startPadding, endPadding, mySize) { if (mySize < 0 && !this.mAllowBrokenMeasureSpecs) { if (childSize >= 0) { - return RelativeLayout.MeasureSpec.makeMeasureSpec(childSize, RelativeLayout.MeasureSpec.EXACTLY); + return View.MeasureSpec.makeMeasureSpec(childSize, View.MeasureSpec.EXACTLY); } - return RelativeLayout.MeasureSpec.makeMeasureSpec(0, RelativeLayout.MeasureSpec.UNSPECIFIED); + return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); } let childSpecMode = 0; let childSpecSize = 0; @@ -42894,12 +43699,12 @@ var android; } let maxAvailable = tempEnd - tempStart; if (childStart >= 0 && childEnd >= 0) { - childSpecMode = RelativeLayout.MeasureSpec.EXACTLY; + childSpecMode = View.MeasureSpec.EXACTLY; childSpecSize = maxAvailable; } else { if (childSize >= 0) { - childSpecMode = RelativeLayout.MeasureSpec.EXACTLY; + childSpecMode = View.MeasureSpec.EXACTLY; if (maxAvailable >= 0) { childSpecSize = Math.min(maxAvailable, childSize); } @@ -42908,21 +43713,21 @@ var android; } } else if (childSize == RelativeLayout.LayoutParams.MATCH_PARENT) { - childSpecMode = RelativeLayout.MeasureSpec.EXACTLY; + childSpecMode = View.MeasureSpec.EXACTLY; childSpecSize = maxAvailable; } else if (childSize == RelativeLayout.LayoutParams.WRAP_CONTENT) { if (maxAvailable >= 0) { - childSpecMode = RelativeLayout.MeasureSpec.AT_MOST; + childSpecMode = View.MeasureSpec.AT_MOST; childSpecSize = maxAvailable; } else { - childSpecMode = RelativeLayout.MeasureSpec.UNSPECIFIED; + childSpecMode = View.MeasureSpec.UNSPECIFIED; childSpecSize = 0; } } } - return RelativeLayout.MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode); + return View.MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode); } positionChildHorizontal(child, params, myWidth, wrapContent) { const layoutDirection = this.getLayoutDirection(); @@ -43134,6 +43939,9 @@ var android; } } } + generateLayoutParamsFromAttr(attrs) { + return new RelativeLayout.LayoutParams(this.getContext(), attrs); + } generateDefaultLayoutParams() { return new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); } @@ -43144,7 +43952,7 @@ var android; return new RelativeLayout.LayoutParams(p); } } - RelativeLayout.TRUE = -1; + RelativeLayout.TRUE = ""; RelativeLayout.LEFT_OF = 0; RelativeLayout.RIGHT_OF = 1; RelativeLayout.ABOVE = 2; @@ -43175,7 +43983,18 @@ var android; (function (RelativeLayout) { class LayoutParams extends ViewGroup.MarginLayoutParams { constructor(...args) { - super(...args); + super(...(() => { + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof RelativeLayout.LayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.MarginLayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); this.mRules = new Array(RelativeLayout.VERB_COUNT); this.mInitialRules = new Array(RelativeLayout.VERB_COUNT); this.mLeft = 0; @@ -43186,91 +44005,254 @@ var android; this.mEnd = LayoutParams.DEFAULT_MARGIN_RELATIVE; this.mRulesChanged = false; this.mIsRtlCompatibilityMode = false; - if (args[0] instanceof LayoutParams) { - let source = args[0]; + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const c = args[0]; + const attrs = args[1]; + let a = c.obtainStyledAttributes(attrs); + this.mIsRtlCompatibilityMode = false; + const rules = this.mRules; + const initialRules = this.mInitialRules; + for (let attr of a.getLowerCaseNoNamespaceAttrNames()) { + switch (attr) { + case 'layout_alignwithparentifmissing': + this.alignWithParent = a.getBoolean(attr, false); + break; + case 'layout_toleftof': + rules[RelativeLayout.LEFT_OF] = a.getResourceId(attr, null); + break; + case 'layout_torightof': + rules[RelativeLayout.RIGHT_OF] = a.getResourceId(attr, null); + break; + case 'layout_above': + rules[RelativeLayout.ABOVE] = a.getResourceId(attr, null); + break; + case 'layout_below': + rules[RelativeLayout.BELOW] = a.getResourceId(attr, null); + break; + case 'layout_alignbaseline': + rules[RelativeLayout.ALIGN_BASELINE] = a.getResourceId(attr, null); + break; + case 'layout_alignleft': + rules[RelativeLayout.ALIGN_LEFT] = a.getResourceId(attr, null); + break; + case 'layout_aligntop': + rules[RelativeLayout.ALIGN_TOP] = a.getResourceId(attr, null); + break; + case 'layout_alignright': + rules[RelativeLayout.ALIGN_RIGHT] = a.getResourceId(attr, null); + break; + case 'layout_alignbottom': + rules[RelativeLayout.ALIGN_BOTTOM] = a.getResourceId(attr, null); + break; + case 'layout_alignparentleft': + rules[RelativeLayout.ALIGN_PARENT_LEFT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_alignparenttop': + rules[RelativeLayout.ALIGN_PARENT_TOP] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_alignparentright': + rules[RelativeLayout.ALIGN_PARENT_RIGHT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_alignparentbottom': + rules[RelativeLayout.ALIGN_PARENT_BOTTOM] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_centerinparent': + rules[RelativeLayout.CENTER_IN_PARENT] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_centerhorizontal': + rules[RelativeLayout.CENTER_HORIZONTAL] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_centervertical': + rules[RelativeLayout.CENTER_VERTICAL] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_tostartof': + rules[RelativeLayout.START_OF] = a.getResourceId(attr, null); + break; + case 'layout_toendof': + rules[RelativeLayout.END_OF] = a.getResourceId(attr, null); + break; + case 'layout_alignstart': + rules[RelativeLayout.ALIGN_START] = a.getResourceId(attr, null); + break; + case 'layout_alignend': + rules[RelativeLayout.ALIGN_END] = a.getResourceId(attr, null); + break; + case 'layout_alignparentstart': + rules[RelativeLayout.ALIGN_PARENT_START] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + case 'layout_alignparentend': + rules[RelativeLayout.ALIGN_PARENT_END] = a.getBoolean(attr, false) ? RelativeLayout.TRUE : null; + break; + } + } + this.mRulesChanged = true; + System.arraycopy(rules, RelativeLayout.LEFT_OF, initialRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT); + a.recycle(); + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + super(args[0], args[1]); + } + else if (args[0] instanceof RelativeLayout.LayoutParams) { + const source = args[0]; this.mIsRtlCompatibilityMode = source.mIsRtlCompatibilityMode; this.mRulesChanged = source.mRulesChanged; this.alignWithParent = source.alignWithParent; System.arraycopy(source.mRules, RelativeLayout.LEFT_OF, this.mRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT); System.arraycopy(source.mInitialRules, RelativeLayout.LEFT_OF, this.mInitialRules, RelativeLayout.LEFT_OF, RelativeLayout.VERB_COUNT); } - this._attrBinder.addAttr('alignWithParentIfMissing', (value) => { - this.alignWithParent = this._attrBinder.parseBoolean(value, false); - }); - this._attrBinder.addAttr('toLeftOf', (value) => { - this.addRule(RelativeLayout.LEFT_OF, value); - }); - this._attrBinder.addAttr('toRightOf', (value) => { - this.addRule(RelativeLayout.RIGHT_OF, value); - }); - this._attrBinder.addAttr('above', (value) => { - this.addRule(RelativeLayout.ABOVE, value); - }); - this._attrBinder.addAttr('below', (value) => { - this.addRule(RelativeLayout.BELOW, value); - }); - this._attrBinder.addAttr('alignBaseline', (value) => { - this.addRule(RelativeLayout.ALIGN_BASELINE, value); - }); - this._attrBinder.addAttr('alignLeft', (value) => { - this.addRule(RelativeLayout.ALIGN_LEFT, value); - }); - this._attrBinder.addAttr('alignTop', (value) => { - this.addRule(RelativeLayout.ALIGN_TOP, value); - }); - this._attrBinder.addAttr('alignRight', (value) => { - this.addRule(RelativeLayout.ALIGN_RIGHT, value); - }); - this._attrBinder.addAttr('alignBottom', (value) => { - this.addRule(RelativeLayout.ALIGN_BOTTOM, value); - }); - this._attrBinder.addAttr('alignParentLeft', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor); - }); - this._attrBinder.addAttr('alignParentTop', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_TOP, anchor); - }); - this._attrBinder.addAttr('alignParentRight', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor); - }); - this._attrBinder.addAttr('alignParentBottom', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, anchor); - }); - this._attrBinder.addAttr('centerInParent', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.CENTER_IN_PARENT, anchor); - }); - this._attrBinder.addAttr('centerHorizontal', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.CENTER_HORIZONTAL, anchor); - }); - this._attrBinder.addAttr('centerVertical', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.CENTER_VERTICAL, anchor); - }); - this._attrBinder.addAttr('toStartOf', (value) => { - this.addRule(RelativeLayout.LEFT_OF, value); - }); - this._attrBinder.addAttr('toEndOf', (value) => { - this.addRule(RelativeLayout.RIGHT_OF, value); - }); - this._attrBinder.addAttr('alignStart', (value) => { - this.addRule(RelativeLayout.ALIGN_LEFT, value); - }); - this._attrBinder.addAttr('alignEnd', (value) => { - this.addRule(RelativeLayout.ALIGN_RIGHT, value); - }); - this._attrBinder.addAttr('alignParentStart', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor); - }); - this._attrBinder.addAttr('alignParentEnd', (value) => { - const anchor = this._attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; - this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor); + else if (args[0] instanceof ViewGroup.MarginLayoutParams) { + } + else if (args[0] instanceof ViewGroup.LayoutParams) { + } + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_alignWithParentIfMissing', { + setter(param, value, attrBinder) { + param.alignWithParent = attrBinder.parseBoolean(value, false); + }, getter(param) { + return param.alignWithParent; + } + }).set('layout_toLeftOf', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.LEFT_OF, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.LEFT_OF]; + } + }).set('layout_toRightOf', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.RIGHT_OF, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.RIGHT_OF]; + } + }).set('layout_above', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ABOVE, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ABOVE]; + } + }).set('layout_below', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.BELOW, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.BELOW]; + } + }).set('layout_alignBaseline', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_BASELINE, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_BASELINE]; + } + }).set('layout_alignLeft', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_LEFT, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_LEFT]; + } + }).set('layout_alignTop', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_TOP, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_TOP]; + } + }).set('layout_alignRight', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_RIGHT, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_RIGHT]; + } + }).set('layout_alignBottom', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_BOTTOM, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_BOTTOM]; + } + }).set('layout_alignParentLeft', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_LEFT]; + } + }).set('layout_alignParentTop', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_TOP, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_TOP]; + } + }).set('layout_alignParentRight', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]; + } + }).set('layout_alignParentBottom', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_BOTTOM]; + } + }).set('layout_centerInParent', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.CENTER_IN_PARENT, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.CENTER_IN_PARENT]; + } + }).set('layout_centerHorizontal', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.CENTER_HORIZONTAL, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.CENTER_HORIZONTAL]; + } + }).set('layout_centerVertical', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.CENTER_VERTICAL, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.CENTER_VERTICAL]; + } + }).set('layout_toStartOf', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.LEFT_OF, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.LEFT_OF]; + } + }).set('layout_toEndOf', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.RIGHT_OF, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.RIGHT_OF]; + } + }).set('layout_alignStart', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_LEFT, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_LEFT]; + } + }).set('layout_alignEnd', { + setter(param, value, attrBinder) { + this.addRule(RelativeLayout.ALIGN_RIGHT, value + ''); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_RIGHT]; + } + }).set('layout_alignParentStart', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_LEFT, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_LEFT]; + } + }).set('layout_alignParentEnd', { + setter(param, value, attrBinder) { + const anchor = attrBinder.parseBoolean(value, false) ? RelativeLayout.TRUE : null; + this.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, anchor); + }, getter(param) { + return param.mRules[RelativeLayout.ALIGN_PARENT_RIGHT]; + } }); } addRule(verb, anchor = RelativeLayout.TRUE) { @@ -43555,62 +44537,36 @@ var android; var Platform = androidui.util.Platform; class EditText extends TextView { constructor(context, bindElement, defStyle = android.R.attr.editTextStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mInputType = InputType.TYPE_NULL; this.mForceDisableDraw = false; this.mMaxLength = Integer.MAX_VALUE; - let a = this._attrBinder; - a.addAttr('inputType', (value) => { - switch (value + '') { - case 'none': - this.setInputType(InputType.TYPE_NULL); - break; - case 'text': - this.setInputType(InputType.TYPE_CLASS_TEXT); - break; - case 'textUri': - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); - break; - case 'textEmailAddress': - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); - break; - case 'textPassword': - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); - break; - case 'textVisiblePassword': - this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); - break; - case 'number': - this.setInputType(InputType.TYPE_CLASS_NUMBER); - break; - case 'numberSigned': - this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); - break; - case 'numberDecimal': - this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); - break; - case 'numberPassword': - this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); - break; - case 'phone': - this.setInputType(InputType.TYPE_CLASS_PHONE); - break; - case 'datetime': - this.setInputType(InputType.TYPE_CLASS_DATETIME); - break; - case 'date': - this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE); - break; - case 'time': - this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME); - break; + const a = context.obtainStyledAttributes(bindElement, defStyle); + const inputTypeS = a.getAttrValue("inputType"); + if (inputTypeS) { + this._setInputType(inputTypeS); + } + this.mMaxLength = a.getInteger('maxLength', this.mMaxLength); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('inputType', { + setter(v, value, attrBinder) { + if (Number.isInteger(Number.parseInt(value))) { + v.setInputType(Number.parseInt(value)); + } + else { + v._setInputType(value + ''); + } + }, getter(v) { + return v.getInputType(); + } + }).set('maxLength', { + setter(v, value, attrBinder) { + v.mMaxLength = attrBinder.parseInt(value, v.mMaxLength); + }, getter(v) { + return v.mMaxLength; } }); - a.addAttr('maxLength', (value) => { - this.mMaxLength = a.parseInt(value, this.mMaxLength); - }); - if (defStyle) - this.applyDefaultAttributes(defStyle); } initBindElement(bindElement) { super.initBindElement(bindElement); @@ -43876,6 +44832,52 @@ var android; } super.setSingleLine(singleLine); } + _setInputType(value) { + switch (value + '') { + case 'none': + this.setInputType(InputType.TYPE_NULL); + break; + case 'text': + this.setInputType(InputType.TYPE_CLASS_TEXT); + break; + case 'textUri': + this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + break; + case 'textEmailAddress': + this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); + break; + case 'textPassword': + this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + break; + case 'textVisiblePassword': + this.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + break; + case 'number': + this.setInputType(InputType.TYPE_CLASS_NUMBER); + break; + case 'numberSigned': + this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); + break; + case 'numberDecimal': + this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + break; + case 'numberPassword': + this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); + break; + case 'phone': + this.setInputType(InputType.TYPE_CLASS_PHONE); + break; + case 'datetime': + this.setInputType(InputType.TYPE_CLASS_DATETIME); + break; + case 'date': + this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE); + break; + case 'time': + this.setInputType(InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME); + break; + } + } setInputType(type) { this.mInputType = type; const typeClass = type & InputType.TYPE_MASK_CLASS; @@ -44033,7 +45035,6 @@ var android; var Integer = java.lang.Integer; var NetDrawable = androidui.image.NetDrawable; var LayoutParams = android.view.ViewGroup.LayoutParams; - var AttrBinder = androidui.attr.AttrBinder; class ImageView extends View { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); @@ -44057,73 +45058,95 @@ var android; this.mBaselineAlignBottom = false; this.mAdjustViewBoundsCompat = false; this.initImageView(); - } - initBindAttr() { - super.initBindAttr(); - if (!ImageView.ImageViewClassAttrBind) { - ImageView.ImageViewClassAttrBind = new AttrBinder.ClassBinderMap(); - ImageView.ImageViewClassAttrBind.set('src', { - setter(v, value) { - let d = v._attrBinder.parseDrawable(value); - if (d) - v.setImageDrawable(d); - else - v.setImageURI(value); - }, getter(v) { - return v.mDrawable; - } - }).set('baselineAlignBottom', { - setter(v, value) { - v.setBaselineAlignBottom(v._attrBinder.parseBoolean(value, v.mBaselineAlignBottom)); - } - }).set('baseline', { - setter(v, value) { - v.setBaseline(v._attrBinder.parseNumberPixelSize(value, v.mBaseline)); - }, getter(v) { - return v.mBaseline; - } - }).set('adjustViewBounds', { - setter(v, value) { - v.setAdjustViewBounds(v._attrBinder.parseBoolean(value, false)); - } - }).set('maxWidth', { - setter(v, value) { - let baseValue = v.getParent() instanceof View ? v.getParent().getWidth() : 0; - v.setMaxWidth(v._attrBinder.parseNumberPixelSize(value, v.mMaxWidth, baseValue)); - }, getter(v) { - return v.mMaxWidth; - } - }).set('maxHeight', { - setter(v, value) { - let baseValue = v.getParent() instanceof View ? v.getParent().getHeight() : 0; - v.setMaxHeight(v._attrBinder.parseNumberPixelSize(value, v.mMaxHeight, baseValue)); - }, getter(v) { - return v.mMaxHeight; - } - }).set('scaleType', { - setter(v, value) { - if (typeof value === 'number') { - v.setScaleType(value); - } - else { - v.setScaleType(ImageView.parseScaleType(value, v.mScaleType)); - } - }, getter(v) { - return v.mScaleType; - } - }).set('drawableAlpha', { - setter(v, value) { - v.setImageAlpha(v._attrBinder.parseInt(value, v.mAlpha)); - }, getter(v) { - return v.mAlpha; + let a = context.obtainStyledAttributes(bindElement, defStyle); + let d = a.getDrawable('src'); + if (d != null) { + this.setImageDrawable(d); + } + this.mBaselineAlignBottom = a.getBoolean('baselineAlignBottom', false); + this.mBaseline = a.getDimensionPixelSize('baseline', -1); + this.setAdjustViewBounds(a.getBoolean('adjustViewBounds', false)); + this.setMaxWidth(a.getDimensionPixelSize('maxWidth', Integer.MAX_VALUE)); + this.setMaxHeight(a.getDimensionPixelSize('maxHeight', Integer.MAX_VALUE)); + let scaleType = ImageView.parseScaleType(a.getString('scaleType'), null); + if (scaleType != null) { + this.setScaleType(scaleType); + } + let alpha = a.getInt('drawableAlpha', 255); + if (alpha != 255) { + this.setAlpha(alpha); + } + this.mCropToPadding = a.getBoolean('cropToPadding', false); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder() + .set('src', { + setter(v, value, attrBinder) { + let d = attrBinder.parseDrawable(value); + if (d) + v.setImageDrawable(d); + else + v.setImageURI(value); + }, getter(v) { + return v.mDrawable; + } + }).set('baselineAlignBottom', { + setter(v, value, attrBinder) { + v.setBaselineAlignBottom(attrBinder.parseBoolean(value, v.mBaselineAlignBottom)); + }, getter(v) { + return v.getBaselineAlignBottom(); + } + }).set('baseline', { + setter(v, value, attrBinder) { + v.setBaseline(attrBinder.parseNumberPixelSize(value, v.mBaseline)); + }, getter(v) { + return v.mBaseline; + } + }).set('adjustViewBounds', { + setter(v, value, attrBinder) { + v.setAdjustViewBounds(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.getAdjustViewBounds(); + } + }).set('maxWidth', { + setter(v, value, attrBinder) { + let baseValue = v.getParent() instanceof View ? v.getParent().getWidth() : 0; + v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.mMaxWidth, baseValue)); + }, getter(v) { + return v.mMaxWidth; + } + }).set('maxHeight', { + setter(v, value, attrBinder) { + let baseValue = v.getParent() instanceof View ? v.getParent().getHeight() : 0; + v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.mMaxHeight, baseValue)); + }, getter(v) { + return v.mMaxHeight; + } + }).set('scaleType', { + setter(v, value, attrBinder) { + if (typeof value === 'number') { + v.setScaleType(value); } - }).set('cropToPadding', { - setter(v, value) { - v.setCropToPadding(v._attrBinder.parseBoolean(value, false)); + else { + v.setScaleType(ImageView.parseScaleType(value, v.mScaleType)); } - }); - } - this._attrBinder.addClassAttrBind(ImageView.ImageViewClassAttrBind); + }, getter(v) { + return v.mScaleType; + } + }).set('drawableAlpha', { + setter(v, value, attrBinder) { + v.setImageAlpha(attrBinder.parseInt(value, v.mAlpha)); + }, getter(v) { + return v.mAlpha; + } + }).set('cropToPadding', { + setter(v, value, attrBinder) { + v.setCropToPadding(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.getCropToPadding(); + } + }); } initImageView() { this.mMatrix = new Matrix(); @@ -44353,8 +45376,8 @@ var android; let desiredAspect = 0.0; let resizeWidth = false; let resizeHeight = false; - const widthSpecMode = ImageView.MeasureSpec.getMode(widthMeasureSpec); - const heightSpecMode = ImageView.MeasureSpec.getMode(heightMeasureSpec); + const widthSpecMode = View.MeasureSpec.getMode(widthMeasureSpec); + const heightSpecMode = View.MeasureSpec.getMode(heightMeasureSpec); if (this.mDrawable == null) { this.mDrawableWidth = -1; this.mDrawableHeight = -1; @@ -44368,8 +45391,8 @@ var android; if (h <= 0) h = 1; if (this.mAdjustViewBounds) { - resizeWidth = widthSpecMode != ImageView.MeasureSpec.EXACTLY; - resizeHeight = heightSpecMode != ImageView.MeasureSpec.EXACTLY; + resizeWidth = widthSpecMode != View.MeasureSpec.EXACTLY; + resizeHeight = heightSpecMode != View.MeasureSpec.EXACTLY; desiredAspect = w / h; } } @@ -44420,16 +45443,16 @@ var android; } resolveAdjustedSize(desiredSize, maxSize, measureSpec) { let result = desiredSize; - let specMode = ImageView.MeasureSpec.getMode(measureSpec); - let specSize = ImageView.MeasureSpec.getSize(measureSpec); + let specMode = View.MeasureSpec.getMode(measureSpec); + let specSize = View.MeasureSpec.getSize(measureSpec); switch (specMode) { - case ImageView.MeasureSpec.UNSPECIFIED: + case View.MeasureSpec.UNSPECIFIED: result = Math.min(desiredSize, maxSize); break; - case ImageView.MeasureSpec.AT_MOST: + case View.MeasureSpec.AT_MOST: result = Math.min(Math.min(desiredSize, specSize), maxSize); break; - case ImageView.MeasureSpec.EXACTLY: + case View.MeasureSpec.EXACTLY: result = specSize; break; } @@ -44629,6 +45652,7 @@ var android; ImageView.sS2FArray = [Matrix.ScaleToFit.FILL, Matrix.ScaleToFit.START, Matrix.ScaleToFit.CENTER, Matrix.ScaleToFit.END]; widget.ImageView = ImageView; (function (ImageView) { + var ScaleType; (function (ScaleType) { ScaleType[ScaleType["MATRIX"] = 0] = "MATRIX"; ScaleType[ScaleType["FIT_XY"] = 1] = "FIT_XY"; @@ -44638,8 +45662,7 @@ var android; ScaleType[ScaleType["CENTER"] = 5] = "CENTER"; ScaleType[ScaleType["CENTER_CROP"] = 6] = "CENTER_CROP"; ScaleType[ScaleType["CENTER_INSIDE"] = 7] = "CENTER_INSIDE"; - })(ImageView.ScaleType || (ImageView.ScaleType = {})); - var ScaleType = ImageView.ScaleType; + })(ScaleType = ImageView.ScaleType || (ImageView.ScaleType = {})); })(ImageView = widget.ImageView || (widget.ImageView = {})); })(widget = android.widget || (android.widget = {})); })(android || (android = {})); @@ -44669,8 +45692,8 @@ var android; var Integer = java.lang.Integer; var AbsListView = android.widget.AbsListView; class GridView extends AbsListView { - constructor(context, bindElement, defStyle = android.R.attr.gridViewStyle) { - super(context, bindElement, null); + constructor(context, attrs, defStyle = android.R.attr.gridViewStyle) { + super(context, attrs, defStyle); this.mNumColumns = GridView.AUTO_FIT; this.mHorizontalSpacing = 0; this.mRequestedHorizontalSpacing = 0; @@ -44683,33 +45706,85 @@ var android; this.mReferenceViewInSelectedRow = null; this.mGravity = Gravity.LEFT; this.mTempRect = new Rect(); - this._attrBinder.addAttr('horizontalSpacing', (value) => { - this.setHorizontalSpacing(this._attrBinder.parseNumberPixelOffset(value, 0)); - }); - this._attrBinder.addAttr('verticalSpacing', (value) => { - this.setVerticalSpacing(this._attrBinder.parseNumberPixelOffset(value, 0)); - }); - this._attrBinder.addAttr('stretchMode', (value) => { - this.setStretchMode(this._attrBinder.parseEnum(value, new Map() - .set("none", GridView.NO_STRETCH) - .set("spacingWidth", GridView.STRETCH_SPACING) - .set("columnWidth", GridView.STRETCH_COLUMN_WIDTH) - .set("spacingWidthUniform", GridView.STRETCH_SPACING_UNIFORM), GridView.STRETCH_COLUMN_WIDTH)); - }); - this._attrBinder.addAttr('columnWidth', (value) => { - let columnWidth = this._attrBinder.parseNumberPixelOffset(value, -1); - if (columnWidth > 0) { - this.setColumnWidth(columnWidth); + let a = context.obtainStyledAttributes(attrs, defStyle); + let hSpacing = a.getDimensionPixelOffset('horizontalSpacing', 0); + this.setHorizontalSpacing(hSpacing); + let vSpacing = a.getDimensionPixelOffset('verticalSpacing', 0); + this.setVerticalSpacing(vSpacing); + let stretchModeS = a.getAttrValue('stretchMode'); + if (stretchModeS) { + switch (stretchModeS) { + case "none": + this.setStretchMode(GridView.NO_STRETCH); + break; + case "spacingWidth": + this.setStretchMode(GridView.STRETCH_SPACING); + break; + case "columnWidth": + this.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); + break; + case "spacingWidthUniform": + this.setStretchMode(GridView.STRETCH_SPACING_UNIFORM); + break; + } + } + let columnWidth = a.getDimensionPixelOffset('columnWidth', -1); + if (columnWidth > 0) { + this.setColumnWidth(columnWidth); + } + let numColumns = a.getInt('numColumns', 1); + this.setNumColumns(numColumns); + let gravityS = a.getAttrValue('gravity'); + if (gravityS) { + this.setGravity(Gravity.parseGravity(gravityS, this.mGravity)); + } + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('horizontalSpacing', { + setter(v, value, attrBinder) { + v.setHorizontalSpacing(attrBinder.parseNumberPixelOffset(value, 0)); + }, getter(v) { + return v.getHorizontalSpacing(); + } + }).set('verticalSpacing', { + setter(v, value, attrBinder) { + v.setVerticalSpacing(attrBinder.parseNumberPixelOffset(value, 0)); + }, getter(v) { + return v.getVerticalSpacing(); + } + }).set('stretchMode', { + setter(v, value, attrBinder) { + v.setStretchMode(attrBinder.parseEnum(value, new Map() + .set("none", GridView.NO_STRETCH) + .set("spacingWidth", GridView.STRETCH_SPACING) + .set("columnWidth", GridView.STRETCH_COLUMN_WIDTH) + .set("spacingWidthUniform", GridView.STRETCH_SPACING_UNIFORM), GridView.STRETCH_COLUMN_WIDTH)); + }, getter(v) { + return v.getStretchMode(); + } + }).set('columnWidth', { + setter(v, value, attrBinder) { + let columnWidth = attrBinder.parseNumberPixelOffset(value, -1); + if (columnWidth > 0) { + this.setColumnWidth(columnWidth); + } + }, getter(v) { + return v.getColumnWidth(); + } + }).set('numColumns', { + setter(v, value, attrBinder) { + v.setNumColumns(attrBinder.parseInt(value, 1)); + }, getter(v) { + return v.getNumColumns(); + } + }).set('gravity', { + setter(v, value, attrBinder) { + v.setGravity(attrBinder.parseGravity(value, v.getGravity())); + }, getter(v) { + return v.getGravity(); } }); - this._attrBinder.addAttr('numColumns', (value) => { - this.setNumColumns(this._attrBinder.parseInt(value, 1)); - }); - this._attrBinder.addAttr('gravity', (value) => { - this.setGravity(this._attrBinder.parseGravity(value, this.mGravity)); - }); - if (defStyle) - this.applyDefaultAttributes(defStyle); } getAdapter() { return this.mAdapter; @@ -45247,11 +46322,11 @@ var android; } onMeasure(widthMeasureSpec, heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - let widthMode = GridView.MeasureSpec.getMode(widthMeasureSpec); - let heightMode = GridView.MeasureSpec.getMode(heightMeasureSpec); - let widthSize = GridView.MeasureSpec.getSize(widthMeasureSpec); - let heightSize = GridView.MeasureSpec.getSize(heightMeasureSpec); - if (widthMode == GridView.MeasureSpec.UNSPECIFIED) { + let widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + let heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + let widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + let heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + if (widthMode == View.MeasureSpec.UNSPECIFIED) { if (this.mColumnWidth > 0) { widthSize = this.mColumnWidth + this.mListPadding.left + this.mListPadding.right; } @@ -45275,8 +46350,8 @@ var android; } p.viewType = this.mAdapter.getItemViewType(0); p.forceAdd = true; - let childHeightSpec = GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(0, GridView.MeasureSpec.UNSPECIFIED), 0, p.height); - let childWidthSpec = GridView.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(this.mColumnWidth, GridView.MeasureSpec.EXACTLY), 0, p.width); + let childHeightSpec = GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 0, p.height); + let childWidthSpec = GridView.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(this.mColumnWidth, View.MeasureSpec.EXACTLY), 0, p.width); child.measure(childWidthSpec, childHeightSpec); childHeight = child.getMeasuredHeight(); childState = GridView.combineMeasuredStates(childState, child.getMeasuredState()); @@ -45284,10 +46359,10 @@ var android; this.mRecycler.addScrapView(child, -1); } } - if (heightMode == GridView.MeasureSpec.UNSPECIFIED) { + if (heightMode == View.MeasureSpec.UNSPECIFIED) { heightSize = this.mListPadding.top + this.mListPadding.bottom + childHeight + this.getVerticalFadingEdgeLength() * 2; } - if (heightMode == GridView.MeasureSpec.AT_MOST) { + if (heightMode == View.MeasureSpec.AT_MOST) { let ourSize = this.mListPadding.top + this.mListPadding.bottom; const numColumns = this.mNumColumns; for (let i = 0; i < count; i += numColumns) { @@ -45302,7 +46377,7 @@ var android; } heightSize = ourSize; } - if (widthMode == GridView.MeasureSpec.AT_MOST && this.mRequestedNumColumns != GridView.AUTO_FIT) { + if (widthMode == View.MeasureSpec.AT_MOST && this.mRequestedNumColumns != GridView.AUTO_FIT) { let ourSize = (this.mRequestedNumColumns * this.mColumnWidth) + ((this.mRequestedNumColumns - 1) * this.mHorizontalSpacing) + this.mListPadding.left + this.mListPadding.right; if (ourSize > widthSize || didNotInitiallyFit) { widthSize |= GridView.MEASURED_STATE_TOO_SMALL; @@ -45516,8 +46591,8 @@ var android; } } if (needToMeasure) { - let childHeightSpec = ViewGroup.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(0, GridView.MeasureSpec.UNSPECIFIED), 0, p.height); - let childWidthSpec = ViewGroup.getChildMeasureSpec(GridView.MeasureSpec.makeMeasureSpec(this.mColumnWidth, GridView.MeasureSpec.EXACTLY), 0, p.width); + let childHeightSpec = ViewGroup.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 0, p.height); + let childWidthSpec = ViewGroup.getChildMeasureSpec(View.MeasureSpec.makeMeasureSpec(this.mColumnWidth, View.MeasureSpec.EXACTLY), 0, p.width); child.measure(childWidthSpec, childHeightSpec); } else { @@ -45678,14 +46753,6 @@ var android; } break; case KeyEvent.KEYCODE_TAB: - if (false) { - if (event.hasNoModifiers()) { - handled = this.resurrectSelectionIfNeeded() || this.sequenceScroll(GridView.FOCUS_FORWARD); - } - else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = this.resurrectSelectionIfNeeded() || this.sequenceScroll(GridView.FOCUS_BACKWARD); - } - } break; } } @@ -46088,17 +47155,18 @@ var android; var Paint = android.graphics.Paint; var Align = android.graphics.Paint.Align; var SparseArray = android.util.SparseArray; + var TypedValue = android.util.TypedValue; var KeyEvent = android.view.KeyEvent; var MotionEvent = android.view.MotionEvent; var VelocityTracker = android.view.VelocityTracker; + var View = android.view.View; var ViewConfiguration = android.view.ViewConfiguration; var DecelerateInterpolator = android.view.animation.DecelerateInterpolator; var Integer = java.lang.Integer; var LinearLayout = android.widget.LinearLayout; var OverScroller = android.widget.OverScroller; - var R = android.R; class NumberPicker extends LinearLayout { - constructor(context, bindElement, defStyle) { + constructor(context, bindElement, defStyle = android.R.attr.numberPickerStyle) { super(context, bindElement, defStyle); this.SELECTOR_WHEEL_ITEM_COUNT = 3; this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2); @@ -46130,68 +47198,36 @@ var android; this.mBottomSelectionDividerBottom = 0; this.mLastHoveredChildVirtualViewId = 0; this.mLastHandledDownDpadKeyCode = -1; + let attributesArray = context.obtainStyledAttributes(bindElement, defStyle); this.mHasSelectorWheel = true; - this._attrBinder.addAttr('solidColor', (value) => { - this.mSolidColor = this._attrBinder.parseColor(value) || 0; - }); - this._attrBinder.addAttr('selectionDivider', (value) => { - this.mSelectionDivider = this._attrBinder.parseDrawable(value); - }); - this._attrBinder.addAttr('selectionDividerHeight', (value) => { - const defSelectionDividerHeight = NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT - * this.getResources().getDisplayMetrics().density; - this.mSelectionDividerHeight = this._attrBinder.parseNumberPixelSize(value, defSelectionDividerHeight); - }); - this._attrBinder.addAttr('selectionDividersDistance', (value) => { - const defSelectionDividerDistance = NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE - * this.getResources().getDisplayMetrics().density; - this.mSelectionDividersDistance = this._attrBinder.parseNumberPixelSize(value, defSelectionDividerDistance); - }); - this._attrBinder.addAttr('internalMinHeight', (value) => { - this.mMinHeight_ = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED); - }); - this._attrBinder.addAttr('internalMaxHeight', (value) => { - this.mMaxHeight = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED); - }); - this._attrBinder.addAttr('internalMinWidth', (value) => { - this.mMinWidth_ = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED); - }); - this._attrBinder.addAttr('internalMaxWidth', (value) => { - this.mMaxWidth = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED); - }); - this._attrBinder.addAttr('internalMaxWidth', (value) => { - this.mMaxWidth = this._attrBinder.parseNumberPixelSize(value, NumberPicker.SIZE_UNSPECIFIED); - }); - this._attrBinder.addAttr('virtualButtonPressedDrawable', (value) => { - this.mVirtualButtonPressedDrawable = this._attrBinder.parseDrawable(value); - }); - this._attrBinder.addAttr('textSize', (value) => { - this.mTextSize = this._attrBinder.parseNumberPixelSize(value, this.mTextSize); - this.mSelectorWheelPaint.setTextSize(this.mTextSize); - }); - this._attrBinder.addAttr('textColor', (value) => { - this.mSelectorWheelPaint.setColor(this._attrBinder.parseColor(value, this.mSelectorWheelPaint.getColor())); - }); - this._attrBinder.addAttr('minValue', (value) => { - this.setMinValue(this._attrBinder.parseInt(value, this.mMinValue)); - }); - this._attrBinder.addAttr('maxValue', (value) => { - this.setMaxValue(this._attrBinder.parseInt(value, this.mMaxValue)); - }); - this._attrBinder.addAttr('itemCount', (value) => { - this.SELECTOR_WHEEL_ITEM_COUNT = this._attrBinder.parseInt(value, this.SELECTOR_WHEEL_ITEM_COUNT); - this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2); - this.mSelectorIndices = androidui.util.ArrayCreator.newNumberArray(this.SELECTOR_WHEEL_ITEM_COUNT); - }); - this.mTextSize = Math.floor(16 * this.getResources().getDisplayMetrics().density); + this.mSolidColor = attributesArray.getColor('solidColor', 0); + this.mSelectionDivider = attributesArray.getDrawable('selectionDivider'); + const defSelectionDividerHeight = Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT, this.getResources().getDisplayMetrics())); + this.mSelectionDividerHeight = attributesArray.getDimensionPixelSize('selectionDividerHeight', defSelectionDividerHeight); + const defSelectionDividerDistance = Math.floor(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE, this.getResources().getDisplayMetrics())); + this.mSelectionDividersDistance = attributesArray.getDimensionPixelSize('selectionDividersDistance', defSelectionDividerDistance); + this.mMinHeight = attributesArray.getDimensionPixelSize('internalMinHeight', NumberPicker.SIZE_UNSPECIFIED); + this.mMaxHeight = attributesArray.getDimensionPixelSize('internalMaxHeight', NumberPicker.SIZE_UNSPECIFIED); + if (this.mMinHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMaxHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMinHeight > this.mMaxHeight) { + throw Error(`new IllegalArgumentException("minHeight > maxHeight")`); + } + this.mMinWidth = attributesArray.getDimensionPixelSize('internalMinWidth', NumberPicker.SIZE_UNSPECIFIED); + this.mMaxWidth = attributesArray.getDimensionPixelSize('internalMaxWidth', NumberPicker.SIZE_UNSPECIFIED); + if (this.mMinWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMaxWidth != NumberPicker.SIZE_UNSPECIFIED && this.mMinWidth > this.mMaxWidth) { + throw Error(`new IllegalArgumentException("minWidth > maxWidth")`); + } + this.mComputeMaxWidth = (this.mMaxWidth == NumberPicker.SIZE_UNSPECIFIED); + this.mVirtualButtonPressedDrawable = attributesArray.getDrawable('virtualButtonPressedDrawable'); + this.mTextSize = attributesArray.getDimensionPixelSize('textSize', Math.floor(16 * this.getResources().getDisplayMetrics().density)); let paint = new Paint(); paint.setAntiAlias(true); paint.setTextAlign(Align.CENTER); paint.setTextSize(this.mTextSize); - paint.setColor(Color.DKGRAY); + paint.setColor(attributesArray.getColor('textColor', Color.DKGRAY)); this.mSelectorWheelPaint = paint; + this.SELECTOR_WHEEL_ITEM_COUNT = attributesArray.getInt('itemCount', this.SELECTOR_WHEEL_ITEM_COUNT); + this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2); this.mSelectorIndices = androidui.util.ArrayCreator.newNumberArray(this.SELECTOR_WHEEL_ITEM_COUNT); - this.applyDefaultAttributes(R.attr.numberPickerStyle); if (this.mMinHeight_ != NumberPicker.SIZE_UNSPECIFIED && this.mMaxHeight != NumberPicker.SIZE_UNSPECIFIED && this.mMinHeight_ > this.mMaxHeight) { throw Error(`new IllegalArgumentException("minHeight > maxHeight")`); } @@ -46199,6 +47235,9 @@ var android; throw Error(`new IllegalArgumentException("minWidth > maxWidth")`); } this.mComputeMaxWidth = (this.mMaxWidth == NumberPicker.SIZE_UNSPECIFIED); + this.setMinValue(attributesArray.getInt('minValue', this.mMinValue)); + this.setMaxValue(attributesArray.getInt('maxValue', this.mMaxValue)); + attributesArray.recycle(); this.mPressedStateHelper = new NumberPicker.PressedStateHelper(this); this.setWillNotDraw(!this.mHasSelectorWheel); let configuration = ViewConfiguration.get(); @@ -46214,6 +47253,72 @@ var android; } return NumberPicker.sTwoDigitFormatter; } + createClassAttrBinder() { + return super.createClassAttrBinder().set('solidColor', { + setter(v, value, attrBinder) { + v.mSolidColor = attrBinder.parseColor(value, v.mSolidColor); + v.invalidate(); + }, getter(v) { + return v.mSolidColor; + } + }).set('selectionDivider', { + setter(v, value, attrBinder) { + v.mSelectionDivider = attrBinder.parseDrawable(value); + v.invalidate(); + }, getter(v) { + return v.mSelectionDivider; + } + }).set('selectionDividerHeight', { + setter(v, value, attrBinder) { + v.mSelectionDividerHeight = attrBinder.parseNumberPixelSize(value, v.mSelectionDividerHeight); + v.invalidate(); + }, getter(v) { + return v.mSelectionDividerHeight; + } + }).set('selectionDividersDistance', { + setter(v, value, attrBinder) { + v.mSelectionDividersDistance = attrBinder.parseNumberPixelSize(value, v.mSelectionDividersDistance); + v.invalidate(); + }, getter(v) { + return v.mSelectionDividersDistance; + } + }).set('internalMinHeight', { + setter(v, value, attrBinder) { + v.mMinHeight_ = attrBinder.parseNumberPixelSize(value, v.mMinHeight_); + v.invalidate(); + }, getter(v) { + return v.mMinHeight_; + } + }).set('internalMaxHeight', { + setter(v, value, attrBinder) { + v.mMaxHeight = attrBinder.parseNumberPixelSize(value, v.mMaxHeight); + v.invalidate(); + }, getter(v) { + return v.mMaxHeight; + } + }).set('internalMinWidth', { + setter(v, value, attrBinder) { + v.mMinWidth_ = attrBinder.parseNumberPixelSize(value, v.mMinWidth_); + v.invalidate(); + }, getter(v) { + return v.mMinWidth_; + } + }).set('internalMaxWidth', { + setter(v, value, attrBinder) { + v.mMaxWidth = attrBinder.parseNumberPixelSize(value, v.mMaxWidth); + v.invalidate(); + }, getter(v) { + return v.mMaxWidth; + } + }).set('virtualButtonPressedDrawable', { + setter(v, value, attrBinder) { + v.mVirtualButtonPressedDrawable = attrBinder.parseDrawable(value); + v.invalidate(); + }, getter(v) { + return v.mVirtualButtonPressedDrawable; + } + }); + } onLayout(changed, left, top, right, bottom) { if (!this.mHasSelectorWheel) { super.onLayout(changed, left, top, right, bottom); @@ -46684,15 +47789,15 @@ var android; if (maxSize == NumberPicker.SIZE_UNSPECIFIED) { return measureSpec; } - const size = NumberPicker.MeasureSpec.getSize(measureSpec); - const mode = NumberPicker.MeasureSpec.getMode(measureSpec); + const size = View.MeasureSpec.getSize(measureSpec); + const mode = View.MeasureSpec.getMode(measureSpec); switch (mode) { - case NumberPicker.MeasureSpec.EXACTLY: + case View.MeasureSpec.EXACTLY: return measureSpec; - case NumberPicker.MeasureSpec.AT_MOST: - return NumberPicker.MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), NumberPicker.MeasureSpec.EXACTLY); - case NumberPicker.MeasureSpec.UNSPECIFIED: - return NumberPicker.MeasureSpec.makeMeasureSpec(maxSize, NumberPicker.MeasureSpec.EXACTLY); + case View.MeasureSpec.AT_MOST: + return View.MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), View.MeasureSpec.EXACTLY); + case View.MeasureSpec.UNSPECIFIED: + return View.MeasureSpec.makeMeasureSpec(maxSize, View.MeasureSpec.EXACTLY); default: throw Error(`new IllegalArgumentException("Unknown measure mode: " + mode)`); } @@ -47302,7 +48407,7 @@ var android; var NetDrawable = androidui.image.NetDrawable; class ProgressBar extends View { constructor(context, bindElement, defStyle = android.R.attr.progressBarStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mMinWidth = 0; this.mMaxWidth = 0; this.mMinHeight = 0; @@ -47315,87 +48420,141 @@ var android; this.mMirrorForRtl = false; this.mRefreshData = new ArrayList(); this.initProgressBar(); - const a = this._attrBinder; - a.addAttr('progressDrawable', (value) => { - let drawable = a.parseDrawable(value); - if (drawable != null) { - drawable = this.tileify(drawable, false); - this.setProgressDrawable(drawable); + let a = context.obtainStyledAttributes(bindElement, defStyle); + this.mNoInvalidate = true; + let drawable = a.getDrawable('progressDrawable'); + if (drawable != null) { + drawable = this.tileify(drawable, false); + this.setProgressDrawable(drawable); + } + this.mDuration = a.getInt('indeterminateDuration', this.mDuration); + this.mMinWidth = a.getDimensionPixelSize('minWidth', this.mMinWidth); + this.mMaxWidth = a.getDimensionPixelSize('maxWidth', this.mMaxWidth); + this.mMinHeight = a.getDimensionPixelSize('minHeight', this.mMinHeight); + this.mMaxHeight = a.getDimensionPixelSize('maxHeight', this.mMaxHeight); + if (a.getAttrValue('indeterminateBehavior') == 'cycle') { + this.mBehavior = Animation.REVERSE; + } + else { + this.mBehavior = Animation.RESTART; + } + this.setMax(a.getInt('max', this.mMax)); + this.setProgress(a.getInt('progress', this.mProgress)); + this.setSecondaryProgress(a.getInt('secondaryProgress', this.mSecondaryProgress)); + drawable = a.getDrawable('indeterminateDrawable'); + if (drawable != null) { + drawable = this.tileifyIndeterminate(drawable); + this.setIndeterminateDrawable(drawable); + } + this.mOnlyIndeterminate = a.getBoolean('indeterminateOnly', this.mOnlyIndeterminate); + this.mNoInvalidate = false; + this.setIndeterminate(this.mOnlyIndeterminate || a.getBoolean('indeterminate', this.mIndeterminate)); + this.mMirrorForRtl = a.getBoolean('mirrorForRtl', this.mMirrorForRtl); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('progressDrawable', { + setter(v, value, a) { + let drawable = a.parseDrawable(value); + if (drawable != null) { + drawable = v.tileify(drawable, false); + v.setProgressDrawable(drawable); + } + }, getter(v) { + return v.getProgressDrawable(); + } + }).set('indeterminateDuration', { + setter(v, value, a) { + v.mDuration = Math.floor(a.parseInt(value, v.mDuration)); + }, getter(v) { + return v.mDuration; + } + }).set('minWidth', { + setter(v, value, a) { + v.mMinWidth = Math.floor(a.parseNumberPixelSize(value, v.mMinWidth)); + }, getter(v) { + return v.mMinWidth; + } + }).set('maxWidth', { + setter(v, value, a) { + v.mMaxWidth = Math.floor(a.parseNumberPixelSize(value, v.mMaxWidth)); + }, getter(v) { + return v.mMaxWidth; + } + }).set('minHeight', { + setter(v, value, a) { + v.mMinHeight = Math.floor(a.parseNumberPixelSize(value, v.mMinHeight)); + }, getter(v) { + return v.mMinHeight; + } + }).set('maxHeight', { + setter(v, value, a) { + v.mMaxHeight = Math.floor(a.parseNumberPixelSize(value, v.mMaxHeight)); + }, getter(v) { + return v.mMaxHeight; + } + }).set('indeterminateBehavior', { + setter(v, value, a) { + if (Number.isInteger(Number.parseInt(value))) { + v.mBehavior = Number.parseInt(value); + } + else { + if (value + ''.toLowerCase() == 'cycle') { + v.mBehavior = Animation.REVERSE; + } + else { + v.mBehavior = Animation.RESTART; + } + } + }, getter(v) { + return v.mBehavior; } - }, () => { - return this.mProgressDrawable; - }); - a.addAttr('indeterminateDuration', (value) => { - this.mDuration = Math.floor(a.parseInt(value, this.mDuration)); - }, () => { - return this.mDuration; - }); - a.addAttr('minWidth', (value) => { - this.mMinWidth = Math.floor(a.parseNumberPixelSize(value, this.mMinWidth)); - }, () => { - return this.mMinWidth; - }); - a.addAttr('maxWidth', (value) => { - this.mMaxWidth = Math.floor(a.parseNumberPixelSize(value, this.mMaxWidth)); - }, () => { - return this.mMaxWidth; - }); - a.addAttr('minHeight', (value) => { - this.mMinHeight = Math.floor(a.parseNumberPixelSize(value, this.mMinHeight)); - }, () => { - return this.mMinHeight; - }); - a.addAttr('maxHeight', (value) => { - this.mMaxHeight = Math.floor(a.parseNumberPixelSize(value, this.mMaxHeight)); - }, () => { - return this.mMaxHeight; - }); - a.addAttr('indeterminateBehavior', (value) => { - if (value + ''.toLowerCase() == 'cycle') { - this.mBehavior = Animation.REVERSE; + }).set('interpolator', { + setter(v, value, a) { + }, getter(v) { } - else { - this.mBehavior = Animation.RESTART; + }).set('max', { + setter(v, value, a) { + v.setMax(a.parseInt(value, v.mMax)); + }, getter(v) { + return v.mMax; } - }); - a.addAttr('interpolator', (value) => { - }); - a.addAttr('max', (value) => { - this.setMax(a.parseInt(value, this.mMax)); - }, () => { - return this.mMax; - }); - a.addAttr('progress', (value) => { - this.setProgress(a.parseInt(value, this.mProgress)); - }, () => { - return this.mProgress; - }); - a.addAttr('secondaryProgress', (value) => { - this.setSecondaryProgress(a.parseInt(value, this.mSecondaryProgress)); - }, () => { - return this.mSecondaryProgress; - }); - a.addAttr('indeterminateDrawable', (value) => { - let drawable = a.parseDrawable(value); - if (drawable != null) { - drawable = this.tileifyIndeterminate(drawable); - this.setIndeterminateDrawable(drawable); + }).set('progress', { + setter(v, value, a) { + v.setProgress(a.parseInt(value, v.mProgress)); + }, getter(v) { + return v.mProgress; + } + }).set('secondaryProgress', { + setter(v, value, a) { + v.setSecondaryProgress(a.parseInt(value, v.mSecondaryProgress)); + }, getter(v) { + return v.mSecondaryProgress; + } + }).set('indeterminateDrawable', { + setter(v, value, a) { + let drawable = a.parseDrawable(value); + if (drawable != null) { + drawable = v.tileifyIndeterminate(drawable); + v.setIndeterminateDrawable(drawable); + } + }, getter(v) { + return v.mIndeterminateDrawable; + } + }).set('indeterminateOnly', { + setter(v, value, a) { + v.mOnlyIndeterminate = a.parseBoolean(value, v.mOnlyIndeterminate); + v.setIndeterminate(v.mOnlyIndeterminate || v.mIndeterminate); + }, getter(v) { + return v.mOnlyIndeterminate; + } + }).set('indeterminate', { + setter(v, value, a) { + v.setIndeterminate(v.mOnlyIndeterminate || a.parseBoolean(value, v.mIndeterminate)); + }, getter(v) { + return v.mIndeterminate; } - }, () => { - return this.mIndeterminateDrawable; - }); - a.addAttr('indeterminateOnly', (value) => { - this.mOnlyIndeterminate = a.parseBoolean(value, this.mOnlyIndeterminate); - this.setIndeterminate(this.mOnlyIndeterminate || this.mIndeterminate); - }); - a.addAttr('indeterminate', (value) => { - this.setIndeterminate(this.mOnlyIndeterminate || a.parseBoolean(value, this.mIndeterminate)); }); - this.mNoInvalidate = true; - if (defStyle) - this.applyDefaultAttributes(defStyle); - this.mNoInvalidate = false; - this.setIndeterminate(this.mOnlyIndeterminate || this.mIndeterminate); } tileify(drawable, clip) { if (drawable instanceof LayerDrawable) { @@ -47871,20 +49030,31 @@ var android; var Button = android.widget.Button; class CompoundButton extends Button { constructor(context, bindElement, defStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mButtonResource = 0; - this._attrBinder.addAttr('button', (value) => { - this.setButtonDrawable(this._attrBinder.parseDrawable(value)); - }, () => { - return this.mButtonDrawable; - }); - this._attrBinder.addAttr('checked', (value) => { - this.setChecked(this._attrBinder.parseBoolean(value, this.isChecked())); - }, () => { - return this.isChecked(); + const a = context.obtainStyledAttributes(bindElement, defStyle); + const d = a.getDrawable('button'); + if (d != null) { + this.setButtonDrawable(d); + } + const checked = a.getBoolean('checked', false); + this.setChecked(checked); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('button', { + setter(v, value, attrBinder) { + v.setButtonDrawable(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mButtonDrawable; + } + }).set('checked', { + setter(v, value, attrBinder) { + v.setChecked(attrBinder.parseBoolean(value, v.isChecked())); + }, getter(v) { + return v.isChecked(); + } }); - if (defStyle != null) - this.applyDefaultAttributes(defStyle); } toggle() { this.setChecked(!this.mChecked); @@ -48054,26 +49224,34 @@ var android; var View = android.view.View; var LinearLayout = android.widget.LinearLayout; var RadioButton = android.widget.RadioButton; - var AttrBinder = androidui.attr.AttrBinder; class RadioGroup extends LinearLayout { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); this.mCheckedId = View.NO_ID; this.mProtectFromCheckedChange = false; - this.setOrientation(RadioGroup.VERTICAL); + let attributes = context.obtainStyledAttributes(bindElement, defStyle); + let value = attributes.getString('checkedButton'); + if (value) { + this.mCheckedId = value; + } + const orientation = attributes.getString('orientation'); + if (orientation === 'horizontal') { + this.setOrientation(RadioGroup.HORIZONTAL); + } + else { + this.setOrientation(RadioGroup.VERTICAL); + } + attributes.recycle(); this.init(); } - initBindAttr() { - super.initBindAttr(); - if (!RadioGroup.RadioGroupClassAttrBind) { - RadioGroup.RadioGroupClassAttrBind = new AttrBinder.ClassBinderMap(); - RadioGroup.RadioGroupClassAttrBind.set('checkedButton', { - setter(v, value) { + createClassAttrBinder() { + return super.createClassAttrBinder().set('checkedButton', { + setter(v, value) { + if (typeof value === 'string' || value == null) { v.setCheckedId(value); } - }); - } - this._attrBinder.addClassAttrBind(RadioGroup.RadioGroupClassAttrBind); + } + }); } init() { this.mChildOnCheckedChangeListener = new RadioGroup.CheckedStateTracker(this); @@ -48140,6 +49318,9 @@ var android; setOnCheckedChangeListener(listener) { this.mOnCheckedChangeListener = listener; } + generateLayoutParamsFromAttr(attrs) { + return new RadioGroup.LayoutParams(this.getContext(), attrs); + } checkLayoutParams(p) { return p instanceof RadioGroup.LayoutParams; } @@ -48150,6 +49331,20 @@ var android; widget.RadioGroup = RadioGroup; (function (RadioGroup) { class LayoutParams extends LinearLayout.LayoutParams { + setBaseAttributes(a, widthAttr, heightAttr) { + if (a.hasValue(widthAttr)) { + this.width = a.getLayoutDimension(widthAttr, LayoutParams.WRAP_CONTENT); + } + else { + this.width = LayoutParams.WRAP_CONTENT; + } + if (a.hasValue(heightAttr)) { + this.height = a.getLayoutDimension(heightAttr, LayoutParams.WRAP_CONTENT); + } + else { + this.height = LayoutParams.WRAP_CONTENT; + } + } } RadioGroup.LayoutParams = LayoutParams; class CheckedStateTracker { @@ -48209,20 +49404,33 @@ var android; var View = android.view.View; class CheckedTextView extends TextView { constructor(context, bindElement, defStyle = android.R.attr.checkedTextViewStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mCheckMarkResource = 0; this.mBasePadding = 0; this.mCheckMarkWidth = 0; - this._attrBinder.addAttr('checkMark', (value) => { - this.setCheckMarkDrawable(this._attrBinder.parseDrawable(value)); - }, () => { - return this.getCheckMarkDrawable(); - }); - this._attrBinder.addAttr('checked', (value) => { - this.setChecked(this._attrBinder.parseBoolean(value, false)); + const a = context.obtainStyledAttributes(bindElement, defStyle); + const d = a.getDrawable('checkMark'); + if (d != null) { + this.setCheckMarkDrawable(d); + } + const checked = a.getBoolean('checked', false); + this.setChecked(checked); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('checkMark', { + setter(v, value, attrBinder) { + v.setCheckMarkDrawable(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.getCheckMarkDrawable(); + } + }).set('checked', { + setter(v, value, attrBinder) { + v.setChecked(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.isChecked(); + } }); - if (defStyle) - this.applyDefaultAttributes(defStyle); } toggle() { this.setChecked(!this.mChecked); @@ -48349,25 +49557,43 @@ var android; var ProgressBar = android.widget.ProgressBar; class AbsSeekBar extends ProgressBar { constructor(context, bindElement, defStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mThumbOffset = 0; this.mTouchProgressOffset = 0; this.mIsUserSeekable = true; this.mKeyProgressIncrement = 1; this.mDisabledAlpha = 0; this.mTouchDownX = 0; - let a = this._attrBinder; - a.addAttr('thumb', (value) => { - this.setThumb(a.parseDrawable(value)); - }, () => this.mThumb); - a.addAttr('thumbOffset', (value) => { - this.setThumbOffset(a.parseNumberPixelOffset(value)); - }, () => this.mThumbOffset); - a.addAttr('disabledAlpha', (value) => { - this.mDisabledAlpha = a.parseFloat(value, 0.5); - }, () => this.mThumbOffset); - if (defStyle) - this.applyDefaultAttributes(defStyle); + let a = context.obtainStyledAttributes(bindElement, defStyle); + const thumb = a.getDrawable('thumb'); + this.setThumb(thumb); + const thumbOffset = a.getDimensionPixelOffset('thumbOffset', this.getThumbOffset()); + this.setThumbOffset(thumbOffset); + a.recycle(); + a = context.obtainStyledAttributes(bindElement, defStyle); + this.mDisabledAlpha = a.getFloat('disabledAlpha', 0.5); + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('thumb', { + setter(v, value, attrBinder) { + v.setThumb(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mThumb; + } + }).set('thumbOffset', { + setter(v, value, attrBinder) { + v.setThumbOffset(attrBinder.parseNumberPixelOffset(value)); + }, getter(v) { + return v.mThumbOffset; + } + }).set('disabledAlpha', { + setter(v, value, attrBinder) { + v.mDisabledAlpha = attrBinder.parseFloat(value, 0.5); + }, getter(v) { + return v.mDisabledAlpha; + } + }); } setThumb(thumb) { let needUpdate; @@ -48689,26 +49915,56 @@ var android; var AbsSeekBar = android.widget.AbsSeekBar; class RatingBar extends AbsSeekBar { constructor(context, bindElement, defStyle = android.R.attr.ratingBarStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mNumStars = 5; this.mProgressOnStartTracking = 0; - const a = this._attrBinder; - a.addAttr('numStars', (value) => { - this.setNumStars(a.parseInt(value, this.mNumStars)); - }, () => this.mNumStars); - a.addAttr('isIndicator', (value) => { - this.setIsIndicator(a.parseBoolean(value, !this.mIsUserSeekable)); - }, () => !this.mIsUserSeekable); - a.addAttr('stepSize', (value) => { - this.setStepSize(a.parseFloat(value, 0.5)); - }, () => this.getStepSize()); - a.addAttr('rating', (value) => { - this.setRating(a.parseFloat(value, this.getRating())); - }, () => this.getRating()); - if (defStyle) - this.applyDefaultAttributes(defStyle); + const a = context.obtainStyledAttributes(bindElement, defStyle); + const numStars = a.getInt('numStars', this.mNumStars); + this.setIsIndicator(a.getBoolean('isIndicator', !this.mIsUserSeekable)); + const rating = a.getFloat('rating', -1); + const stepSize = a.getFloat('stepSize', -1); + a.recycle(); + if (numStars > 0 && numStars != this.mNumStars) { + this.setNumStars(numStars); + } + if (stepSize >= 0) { + this.setStepSize(stepSize); + } + else { + this.setStepSize(0.5); + } + if (rating >= 0) { + this.setRating(rating); + } this.mTouchProgressOffset = 1.1; } + createClassAttrBinder() { + return super.createClassAttrBinder().set('numStars', { + setter(v, value, a) { + v.setNumStars(a.parseInt(value, v.mNumStars)); + }, getter(v) { + return v.mNumStars; + } + }).set('isIndicator', { + setter(v, value, a) { + v.setIsIndicator(a.parseBoolean(value, !v.mIsUserSeekable)); + }, getter(v) { + return v.isIndicator(); + } + }).set('stepSize', { + setter(v, value, a) { + v.setStepSize(a.parseFloat(value, 0.5)); + }, getter(v) { + return v.getStepSize(); + } + }).set('rating', { + setter(v, value, a) { + v.setRating(a.parseFloat(value, v.getRating())); + }, getter(v) { + return v.getRating(); + } + }); + } setOnRatingBarChangeListener(listener) { this.mOnRatingBarChangeListener = listener; } @@ -49409,8 +50665,8 @@ var android; var ListView = android.widget.ListView; var Long = goog.math.Long; class ExpandableListView extends ListView { - constructor(context, bindElement, defStyle = android.R.attr.expandableListViewStyle) { - super(context, bindElement, null); + constructor(context, attrs, defStyle = android.R.attr.expandableListViewStyle) { + super(context, attrs, defStyle); this.mIndicatorLeft = 0; this.mIndicatorRight = 0; this.mIndicatorStart = 0; @@ -49420,49 +50676,77 @@ var android; this.mChildIndicatorStart = 0; this.mChildIndicatorEnd = 0; this.mIndicatorRect = new Rect(); - this._attrBinder.addAttr('groupIndicator', (value) => { - this.setGroupIndicator(this._attrBinder.parseDrawable(value)); - }, () => { - return this.mGroupIndicator; - }); - this._attrBinder.addAttr('childIndicator', (value) => { - this.setChildIndicator(this._attrBinder.parseDrawable(value)); - }, () => { - return this.mChildIndicator; - }); - this._attrBinder.addAttr('indicatorLeft', (value) => { - this.setIndicatorBounds(this._attrBinder.parseNumberPixelOffset(value, 0), this.mIndicatorRight); - }, () => { - return this.mIndicatorLeft; - }); - this._attrBinder.addAttr('indicatorRight', (value) => { - let num = this._attrBinder.parseNumberPixelOffset(value, 0); - if (num == 0 && this.mGroupIndicator != null) { - num = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth(); - } - this.setIndicatorBounds(this.mIndicatorLeft, num); - }, () => { - return this.mIndicatorRight; - }); - this._attrBinder.addAttr('childIndicatorLeft', (value) => { - this.setChildIndicatorBounds(this._attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT), this.mChildIndicatorRight); - }, () => { - return this.mChildIndicatorLeft; - }); - this._attrBinder.addAttr('childIndicatorRight', (value) => { - let num = this._attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT); - if (num == 0 && this.mChildIndicator != null) { - num = this.mChildIndicatorLeft + this.mChildIndicator.getIntrinsicWidth(); - } - this.setIndicatorBounds(this.mChildIndicatorLeft, num); - }, () => { - return this.mChildIndicatorRight; - }); - this._attrBinder.addAttr('childDivider', (value) => { - this.setChildDivider(this._attrBinder.parseDrawable(value)); + let a = context.obtainStyledAttributes(attrs, defStyle); + this.mGroupIndicator = a.getDrawable('groupIndicator'); + this.mChildIndicator = a.getDrawable('childIndicator'); + this.mIndicatorLeft = a.getDimensionPixelSize('indicatorLeft', 0); + this.mIndicatorRight = a.getDimensionPixelSize('indicatorRight', 0); + if (this.mIndicatorRight == 0 && this.mGroupIndicator != null) { + this.mIndicatorRight = this.mIndicatorLeft + this.mGroupIndicator.getIntrinsicWidth(); + } + this.mChildIndicatorLeft = a.getDimensionPixelSize('childIndicatorLeft', ExpandableListView.CHILD_INDICATOR_INHERIT); + this.mChildIndicatorRight = a.getDimensionPixelSize('childIndicatorRight', ExpandableListView.CHILD_INDICATOR_INHERIT); + this.mChildDivider = a.getDrawable('childDivider'); + if (!this.isRtlCompatibilityMode()) { + this.mIndicatorStart = a.getDimensionPixelSize('indicatorStart', ExpandableListView.INDICATOR_UNDEFINED); + this.mIndicatorEnd = a.getDimensionPixelSize('indicatorEnd', ExpandableListView.INDICATOR_UNDEFINED); + this.mChildIndicatorStart = a.getDimensionPixelSize('childIndicatorStart', ExpandableListView.CHILD_INDICATOR_INHERIT); + this.mChildIndicatorEnd = a.getDimensionPixelSize('childIndicatorEnd', ExpandableListView.CHILD_INDICATOR_INHERIT); + } + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('groupIndicator', { + setter(v, value, attrBinder) { + v.setGroupIndicator(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mGroupIndicator; + } + }).set('childIndicator', { + setter(v, value, attrBinder) { + v.setChildIndicator(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mChildIndicator; + } + }).set('indicatorLeft', { + setter(v, value, attrBinder) { + v.setIndicatorBounds(attrBinder.parseNumberPixelOffset(value, 0), v.mIndicatorRight); + }, getter(v) { + return v.mIndicatorLeft; + } + }).set('indicatorRight', { + setter(v, value, attrBinder) { + let num = attrBinder.parseNumberPixelOffset(value, 0); + if (num == 0 && v.mGroupIndicator != null) { + num = v.mIndicatorLeft + v.mGroupIndicator.getIntrinsicWidth(); + } + this.setIndicatorBounds(v.mIndicatorLeft, num); + }, getter(v) { + return v.mIndicatorRight; + } + }).set('childIndicatorLeft', { + setter(v, value, attrBinder) { + v.setChildIndicatorBounds(attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT), v.mChildIndicatorRight); + }, getter(v) { + return v.mChildIndicatorLeft; + } + }).set('childIndicatorRight', { + setter(v, value, attrBinder) { + let num = attrBinder.parseNumberPixelOffset(value, ExpandableListView.CHILD_INDICATOR_INHERIT); + if (num == 0 && v.mChildIndicator != null) { + num = v.mChildIndicatorLeft + v.mChildIndicator.getIntrinsicWidth(); + } + v.setIndicatorBounds(v.mChildIndicatorLeft, num); + }, getter(v) { + return v.mChildIndicatorRight; + } + }).set('childDivider', { + setter(v, value, attrBinder) { + v.setChildDivider(attrBinder.parseDrawable(value)); + }, getter(v) { + return v.mChildDivider; + } }); - if (defStyle) - this.applyDefaultAttributes(defStyle); } isRtlCompatibilityMode() { return !this.hasRtlSupport(); @@ -49900,7 +51184,8 @@ var android; ExpandableListView.EMPTY_STATE_SET, ExpandableListView.GROUP_EXPANDED_STATE_SET, ExpandableListView.GROUP_EMPTY_STATE_SET, - ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET]; + ExpandableListView.GROUP_EXPANDED_EMPTY_STATE_SET + ]; ExpandableListView.CHILD_LAST_STATE_SET = [View.VIEW_STATE_LAST]; widget.ExpandableListView = ExpandableListView; })(widget = android.widget || (android.widget = {})); @@ -49979,10 +51264,10 @@ var android; this.mDuration = 0; this.mHandler = new Handler(); this.mDelayHide = (() => { - const _this = this; + const inner_this = this; return { run() { - _this.mTN.hide(); + inner_this.mTN.hide(); } }; })(); @@ -50062,20 +51347,20 @@ var android; class TN { constructor() { this.mShow = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - _this.handleShow(); + inner_this.handleShow(); } } return new _Inner(); })(); this.mHide = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - _this.handleHide(); - _this.mNextView = null; + inner_this.handleHide(); + inner_this.mNextView = null; } } return new _Inner(); @@ -50188,10 +51473,10 @@ var android; this.mCanceled = false; this.mHandler = new Handler(); this.mDismissAction = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - _this.dismissDialog(); + inner_this.dismissDialog(); } } return new _Inner(); @@ -50504,14 +51789,28 @@ var android; var widget; (function (widget) { var Log = android.util.Log; + var ArrayList = java.util.ArrayList; var Arrays = java.util.Arrays; var Collections = java.util.Collections; var BaseAdapter = android.widget.BaseAdapter; class ArrayAdapter extends BaseAdapter { - constructor(context, resource, textViewResourceId, objects) { + constructor(...args) { super(); this.mNotifyOnChange = true; - this.init(context, resource, textViewResourceId, objects); + if (args.length === 2) { + this.init(args[0], args[1], null, new ArrayList()); + } + else if (args.length === 3) { + if (args[2] instanceof Array) { + this.init(args[0], args[1], null, Arrays.asList(args[2])); + } + else { + this.init(args[0], args[1], args[2], new ArrayList()); + } + } + else if (args.length === 4) { + this.init(args[0], args[1], args[2], args[3]); + } } add(object) { { @@ -50655,23 +51954,23 @@ var android; this.mViewSpacingSpecified = false; this.mCheckedItem = -1; this.mButtonHandler = (() => { - const _this = this; + const inner_this = this; class _Inner { onClick(v) { let m = null; - if (v == _this.mButtonPositive && _this.mButtonPositiveMessage != null) { - m = Message.obtain(_this.mButtonPositiveMessage); + if (v == inner_this.mButtonPositive && inner_this.mButtonPositiveMessage != null) { + m = Message.obtain(inner_this.mButtonPositiveMessage); } - else if (v == _this.mButtonNegative && _this.mButtonNegativeMessage != null) { - m = Message.obtain(_this.mButtonNegativeMessage); + else if (v == inner_this.mButtonNegative && inner_this.mButtonNegativeMessage != null) { + m = Message.obtain(inner_this.mButtonNegativeMessage); } - else if (v == _this.mButtonNeutral && _this.mButtonNeutralMessage != null) { - m = Message.obtain(_this.mButtonNeutralMessage); + else if (v == inner_this.mButtonNeutral && inner_this.mButtonNeutralMessage != null) { + m = Message.obtain(inner_this.mButtonNeutralMessage); } if (m != null) { m.sendToTarget(); } - _this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG, _this.mDialogInterface).sendToTarget(); + inner_this.mHandler.obtainMessage(AlertController.ButtonHandler.MSG_DISMISS_DIALOG, inner_this.mDialogInterface).sendToTarget(); } } return new _Inner(); @@ -51086,12 +52385,12 @@ var android; let adapter; if (this.mIsMultiChoice) { adapter = (() => { - const _this = this; + const inner_this = this; class _Inner extends ArrayAdapter { getView(position, convertView, parent) { let view = super.getView(position, convertView, parent); - if (_this.mCheckedItems != null) { - let isItemChecked = _this.mCheckedItems[position]; + if (inner_this.mCheckedItems != null) { + let isItemChecked = inner_this.mCheckedItems[position]; if (isItemChecked) { listView.setItemChecked(position, true); } @@ -51111,12 +52410,12 @@ var android; } dialog.mAdapter = adapter; dialog.mCheckedItem = this.mCheckedItem; - const _this = this; + const inner_this = this; if (this.mOnClickListener != null) { listView.setOnItemClickListener({ onItemClick(parent, v, position, id) { - _this.mOnClickListener.onClick(dialog.mDialogInterface, position); - if (!_this.mIsSingleChoice) { + inner_this.mOnClickListener.onClick(dialog.mDialogInterface, position); + if (!inner_this.mIsSingleChoice) { dialog.mDialogInterface.dismiss(); } } @@ -51125,10 +52424,10 @@ var android; else if (this.mOnCheckboxClickListener != null) { listView.setOnItemClickListener({ onItemClick(parent, v, position, id) { - if (_this.mCheckedItems != null) { - _this.mCheckedItems[position] = listView.isItemChecked(position); + if (inner_this.mCheckedItems != null) { + inner_this.mCheckedItems[position] = listView.isItemChecked(position); } - _this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface, position, listView.isItemChecked(position)); + inner_this.mOnCheckboxClickListener.onClick(dialog.mDialogInterface, position, listView.isItemChecked(position)); } }); } @@ -51355,7 +52654,7 @@ var android; var ArrayAdapter = android.widget.ArrayAdapter; class AbsSpinner extends AdapterView { constructor(context, bindElement, defStyle) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mHeightMeasureSpec = 0; this.mWidthMeasureSpec = 0; this.mSelectionLeftPadding = 0; @@ -51365,17 +52664,26 @@ var android; this.mSpinnerPadding = new Rect(); this.mRecycler = new AbsSpinner.RecycleBin(this); this.initAbsSpinner(); - let a = this._attrBinder; - a.addAttr('entries', (value) => { - let entries = a.parseStringArray(value); - if (entries != null) { - let adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, null, entries); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - this.setAdapter(adapter); + const a = context.obtainStyledAttributes(bindElement, defStyle); + const entries = a.getTextArray('entries'); + if (entries != null) { + const adapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, entries); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + this.setAdapter(adapter); + } + a.recycle(); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('entries', { + setter(v, value, attrBinder) { + let entries = attrBinder.parseStringArray(value); + if (entries != null) { + let adapter = new ArrayAdapter(v.getContext(), android.R.layout.simple_spinner_item, entries); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + v.setAdapter(adapter); + } } }); - if (defStyle) - this.applyDefaultAttributes(defStyle); } initAbsSpinner() { this.setFocusable(true); @@ -51420,7 +52728,7 @@ var android; this.invalidate(); } onMeasure(widthMeasureSpec, heightMeasureSpec) { - let widthMode = AbsSpinner.MeasureSpec.getMode(widthMeasureSpec); + let widthMode = View.MeasureSpec.getMode(widthMeasureSpec); let widthSize; let heightSize; this.mSpinnerPadding.left = this.mPaddingLeft > this.mSelectionLeftPadding ? this.mPaddingLeft : this.mSelectionLeftPadding; @@ -51454,7 +52762,7 @@ var android; } if (needsMeasuring) { preferredHeight = this.mSpinnerPadding.top + this.mSpinnerPadding.bottom; - if (widthMode == AbsSpinner.MeasureSpec.UNSPECIFIED) { + if (widthMode == View.MeasureSpec.UNSPECIFIED) { preferredWidth = this.mSpinnerPadding.left + this.mSpinnerPadding.right; } } @@ -51593,6 +52901,7 @@ var android; var WindowManager = android.view.WindowManager; var Window = android.view.Window; var WeakReference = java.lang.ref.WeakReference; + var AnimationUtils = android.view.animation.AnimationUtils; class PopupWindow { constructor(...args) { this.mInputMethodMode = PopupWindow.INPUT_METHOD_FROM_FOCUSABLE; @@ -51609,14 +52918,14 @@ var android; this.mDefaultDropdownAboveExitAnimation = R.anim.shrink_fade_out_from_bottom; this.mDefaultDropdownBelowExitAnimation = R.anim.shrink_fade_out; this.mOnScrollChangedListener = (() => { - const _this = this; + const inner_this = this; class _Inner { onScrollChanged() { - let anchor = _this.mAnchor != null ? _this.mAnchor.get() : null; - if (anchor != null && _this.mPopupView != null) { - let p = _this.mPopupView.getLayoutParams(); - _this.updateAboveAnchor(_this.findDropDownPosition(anchor, p, _this.mAnchorXoff, _this.mAnchorYoff, _this.mAnchoredGravity)); - _this.update(p.x, p.y, -1, -1, true); + let anchor = inner_this.mAnchor != null ? inner_this.mAnchor.get() : null; + if (anchor != null && inner_this.mPopupView != null) { + let p = inner_this.mPopupView.getLayoutParams(); + inner_this.updateAboveAnchor(inner_this.findDropDownPosition(anchor, p, inner_this.mAnchorXoff, inner_this.mAnchorYoff, inner_this.mAnchoredGravity)); + inner_this.update(p.x, p.y, -1, -1, true); } } } @@ -51629,9 +52938,10 @@ var android; this.mWindowManager = context.getWindowManager(); this.mPopupWindow = new Window(context); this.mPopupWindow.setCallback(this); - this.mBackground = styleAttr.popupBackground; - this.mEnterAnimation = styleAttr.popupEnterAnimation; - this.mExitAnimation = styleAttr.popupExitAnimation; + let a = context.obtainStyledAttributes(null, styleAttr); + this.mBackground = a.getDrawable('popupBackground'); + this.mEnterAnimation = AnimationUtils.loadAnimation(context, a.getAttrValue('popupEnterAnimation')); + this.mExitAnimation = AnimationUtils.loadAnimation(context, a.getAttrValue('popupExitAnimation')); } else { let [contentView = null, width = 0, height = 0, focusable = false] = args; @@ -52244,15 +53554,6 @@ var android; })(widget = android.widget || (android.widget = {})); })(android || (android = {})); var android; -(function (android) { - var widget; - (function (widget) { - class Scroller extends widget.OverScroller { - } - widget.Scroller = Scroller; - })(widget = android.widget || (android.widget = {})); -})(android || (android = {})); -var android; (function (android) { var widget; (function (widget) { @@ -52664,10 +53965,10 @@ var android; } createDragToOpenListener(src) { return (() => { - const _this = this; + const inner_this = this; class _Inner extends ListPopupWindow.ForwardingListener { getPopup() { - return _this; + return inner_this; } } return new _Inner(src); @@ -52679,12 +53980,12 @@ var android; if (this.mDropDownList == null) { let context = this.mContext; this.mShowDropDownRunnable = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - let view = _this.getAnchorView(); + let view = inner_this.getAnchorView(); if (view != null && view.isAttachedToWindow()) { - _this.show(); + inner_this.show(); } } } @@ -52699,11 +54000,11 @@ var android; this.mDropDownList.setFocusable(true); this.mDropDownList.setFocusableInTouchMode(true); this.mDropDownList.setOnItemSelectedListener((() => { - const _this = this; + const inner_this = this; class _Inner { onItemSelected(parent, view, position, id) { if (position != -1) { - let dropDownList = _this.mDropDownList; + let dropDownList = inner_this.mDropDownList; if (dropDownList != null) { dropDownList.mListSelectionHidden = false; } @@ -53065,6 +54366,7 @@ var android; var Rect = android.graphics.Rect; var Log = android.util.Log; var Gravity = android.view.Gravity; + var View = android.view.View; var ViewGroup = android.view.ViewGroup; var AbsSpinner = android.widget.AbsSpinner; var ListAdapter = android.widget.ListAdapter; @@ -53073,61 +54375,100 @@ var android; var R = android.R; class Spinner extends AbsSpinner { constructor(context, bindElement, defStyle = R.attr.spinnerStyle, mode = Spinner.MODE_THEME) { - super(context, bindElement, null); + super(context, bindElement, defStyle); this.mDropDownWidth = 0; this.mGravity = 0; this.mTempRect = new Rect(); - let a = this._attrBinder; + const a = context.obtainStyledAttributes(bindElement, defStyle); if (mode == Spinner.MODE_THEME) { - mode = Spinner.MODE_DROPDOWN; + if ('dialog' === a.getAttrValue('spinnerMode')) { + mode = Spinner.MODE_DIALOG; + } + else { + mode = Spinner.MODE_DROPDOWN; + } } switch (mode) { - case Spinner.MODE_DIALOG: - { - this.mPopup = new Spinner.DialogPopup(this); - break; + case Spinner.MODE_DIALOG: { + this.mPopup = new Spinner.DialogPopup(this); + break; + } + case Spinner.MODE_DROPDOWN: { + const popup = new Spinner.DropdownPopup(context, defStyle, this); + this.mDropDownWidth = a.getLayoutDimension('dropDownWidth', ViewGroup.LayoutParams.WRAP_CONTENT); + popup.setBackgroundDrawable(a.getDrawable('popupBackground')); + const verticalOffset = a.getDimensionPixelOffset('dropDownVerticalOffset', 0); + if (verticalOffset != 0) { + popup.setVerticalOffset(verticalOffset); } - case Spinner.MODE_DROPDOWN: - { - const popup = new Spinner.DropdownPopup(context, defStyle, this); - a.addAttr('dropDownWidth', (value) => { - this.mDropDownWidth = a.parseNumberPixelSize(value, ViewGroup.LayoutParams.WRAP_CONTENT); - }); - a.addAttr('popupBackground', (value) => { - popup.setBackgroundDrawable(a.parseDrawable(value)); - }); - a.addAttr('dropDownVerticalOffset', (value) => { - const verticalOffset = a.parseNumberPixelSize(value, 0); - if (verticalOffset != 0) { - popup.setVerticalOffset(verticalOffset); - } - }); - a.addAttr('dropDownHorizontalOffset', (value) => { - const horizontalOffset = a.parseNumberPixelSize(value, 0); - if (horizontalOffset != 0) { - popup.setHorizontalOffset(horizontalOffset); - } - }); - this.mPopup = popup; - break; + const horizontalOffset = a.getDimensionPixelOffset('dropDownHorizontalOffset', 0); + if (horizontalOffset != 0) { + popup.setHorizontalOffset(horizontalOffset); } + this.mPopup = popup; + break; + } } - a.addAttr('gravity', (value) => { - this.mGravity = a.parseGravity(value, Gravity.CENTER); - }); - a.addAttr('prompt', (value) => { - this.mPopup.setPromptText(a.parseString(value)); - }); - a.addAttr('disableChildrenWhenDisabled', (value) => { - this.mDisableChildrenWhenDisabled = a.parseBoolean(value, false); - }); - if (defStyle != null) - this.applyDefaultAttributes(defStyle); + this.mGravity = Gravity.parseGravity(a.getAttrValue('gravity'), Gravity.CENTER); + this.mPopup.setPromptText(a.getString('prompt')); + this.mDisableChildrenWhenDisabled = a.getBoolean('disableChildrenWhenDisabled', false); + a.recycle(); if (this.mTempAdapter != null) { this.mPopup.setAdapter(this.mTempAdapter); this.mTempAdapter = null; } } + createClassAttrBinder() { + return super.createClassAttrBinder().set('dropDownWidth', { + setter(v, value, a) { + v.mDropDownWidth = a.parseNumberPixelSize(value, v.mDropDownWidth); + }, getter(v) { + return v.mDropDownWidth; + } + }).set('popupBackground', { + setter(v, value, a) { + v.mPopup.setBackgroundDrawable(a.parseDrawable(value)); + }, getter(v) { + return v.mPopup.getBackground(); + } + }).set('dropDownVerticalOffset', { + setter(v, value, a) { + const verticalOffset = a.parseNumberPixelSize(value, 0); + if (verticalOffset != 0) { + v.mPopup.setVerticalOffset(verticalOffset); + } + }, getter(v) { + return v.mPopup.getVerticalOffset(); + } + }).set('dropDownHorizontalOffset', { + setter(v, value, a) { + const horizontalOffset = a.parseNumberPixelSize(value, 0); + if (horizontalOffset != 0) { + v.mPopup.setHorizontalOffset(horizontalOffset); + } + }, getter(v) { + return v.mPopup.getHorizontalOffset(); + } + }).set('gravity', { + setter(v, value, a) { + v.mGravity = a.parseGravity(value, Gravity.CENTER); + }, getter(v) { + return v.mGravity; + } + }).set('prompt', { + setter(v, value, a) { + v.mPopup.setPromptText(a.parseString(value)); + }, getter(v) { + return v.mPopup.getHintText(); + } + }).set('disableChildrenWhenDisabled', { + setter(v, value, a) { + v.mDisableChildrenWhenDisabled = a.parseBoolean(value, false); + }, getter(v) { + return v.mDisableChildrenWhenDisabled; + } + }); + } setPopupBackgroundDrawable(background) { if (!(this.mPopup instanceof Spinner.DropdownPopup)) { Log.e(Spinner.TAG, "setPopupBackgroundDrawable: incompatible spinner mode; ignoring..."); @@ -53222,9 +54563,9 @@ var android; } onMeasure(widthMeasureSpec, heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (this.mPopup != null && Spinner.MeasureSpec.getMode(widthMeasureSpec) == Spinner.MeasureSpec.AT_MOST) { + if (this.mPopup != null && View.MeasureSpec.getMode(widthMeasureSpec) == View.MeasureSpec.AT_MOST) { const measuredWidth = this.getMeasuredWidth(); - this.setMeasuredDimension(Math.min(Math.max(measuredWidth, this.measureContentWidth(this.getAdapter(), this.getBackground())), Spinner.MeasureSpec.getSize(widthMeasureSpec)), this.getMeasuredHeight()); + this.setMeasuredDimension(Math.min(Math.max(measuredWidth, this.measureContentWidth(this.getAdapter(), this.getBackground())), View.MeasureSpec.getSize(widthMeasureSpec)), this.getMeasuredHeight()); } } onLayout(changed, l, t, r, b) { @@ -53336,8 +54677,8 @@ var android; let width = 0; let itemView = null; let itemType = 0; - const widthMeasureSpec = Spinner.MeasureSpec.makeMeasureSpec(0, Spinner.MeasureSpec.UNSPECIFIED); - const heightMeasureSpec = Spinner.MeasureSpec.makeMeasureSpec(0, Spinner.MeasureSpec.UNSPECIFIED); + const widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + const heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); let start = Math.max(0, this.getSelectedItemPosition()); const end = Math.min(adapter.getCount(), start + Spinner.MAX_ITEMS_MEASURED); const count = end - start; @@ -53502,14 +54843,14 @@ var android; this.setModal(true); this.setPromptPosition(DropdownPopup.POSITION_PROMPT_ABOVE); this.setOnItemClickListener((() => { - const _this = this; + const inner_this = this; class _Inner { onItemClick(parent, v, position, id) { - _this._Spinner_this.setSelection(position); - if (_this._Spinner_this.mOnItemClickListener != null) { - _this._Spinner_this.performItemClick(v, position, _this.mAdapter.getItemId(position)); + inner_this._Spinner_this.setSelection(position); + if (inner_this._Spinner_this.mOnItemClickListener != null) { + inner_this._Spinner_this.performItemClick(v, position, inner_this.mAdapter.getItemId(position)); } - _this.dismiss(); + inner_this.dismiss(); } } return new _Inner(); @@ -53575,15 +54916,15 @@ var android; const vto = this._Spinner_this.getViewTreeObserver(); if (vto != null) { const layoutListener = (() => { - const _this = this; + const inner_this = this; class _Inner { onGlobalLayout() { - if (!_this._Spinner_this.isVisibleToUser()) { - _this.dismiss(); + if (!inner_this._Spinner_this.isVisibleToUser()) { + inner_this.dismiss(); } else { - _this.computeContentWidth(); - _this.show(); + inner_this.computeContentWidth(); + inner_this.show(); } } } @@ -53591,10 +54932,10 @@ var android; })(); vto.addOnGlobalLayoutListener(layoutListener); this.setOnDismissListener((() => { - const _this = this; + const inner_this = this; class _Inner { onDismiss() { - const vto = _this._Spinner_this.getViewTreeObserver(); + const vto = inner_this._Spinner_this.getViewTreeObserver(); if (vto != null) { vto.removeOnGlobalLayoutListener(layoutListener); } @@ -53809,7 +55150,7 @@ var android; var android; (function (android) { var view; - (function (view_7) { + (function (view_6) { class MenuItem { constructor(menu, group, id, categoryOrder, ordering, title) { this.mId = 0; @@ -53899,7 +55240,7 @@ var android; return false; } } - view_7.MenuItem = MenuItem; + view_6.MenuItem = MenuItem; })(view = android.view || (android.view = {})); })(android || (android = {})); var android; @@ -54074,7 +55415,7 @@ var android; var android; (function (android) { var view; - (function (view_8) { + (function (view_7) { var menu; (function (menu_1) { var R = android.R; @@ -54247,7 +55588,7 @@ var android; } MenuPopupHelper.MenuAdapter = MenuAdapter; })(MenuPopupHelper = menu_1.MenuPopupHelper || (menu_1.MenuPopupHelper = {})); - })(menu = view_8.menu || (view_8.menu = {})); + })(menu = view_7.menu || (view_7.menu = {})); })(view = android.view || (android.view = {})); })(android || (android = {})); var android; @@ -54257,7 +55598,7 @@ var android; var v4; (function (v4) { var view; - (function (view_9) { + (function (view_8) { var DataSetObservable = android.database.DataSetObservable; class PagerAdapter { constructor() { @@ -54296,7 +55637,7 @@ var android; } PagerAdapter.POSITION_UNCHANGED = -1; PagerAdapter.POSITION_NONE = -2; - view_9.PagerAdapter = PagerAdapter; + view_8.PagerAdapter = PagerAdapter; })(view = v4.view || (v4.view = {})); })(v4 = support.v4 || (support.v4 = {})); })(support = android.support || (android.support = {})); @@ -54308,7 +55649,7 @@ var android; var v4; (function (v4) { var view; - (function (view_10) { + (function (view_9) { var View = android.view.View; var Gravity = android.view.Gravity; var MeasureSpec = View.MeasureSpec; @@ -56101,6 +57442,9 @@ var android; checkLayoutParams(p) { return p instanceof ViewPager.LayoutParams && super.checkLayoutParams(p); } + generateLayoutParamsFromAttr(attrs) { + return new ViewPager.LayoutParams(this.getContext(), attrs); + } static isImplDecor(view) { return view[SymbolDecor] || view.constructor[SymbolDecor]; } @@ -56139,7 +57483,7 @@ var android; ViewPager.SCROLL_STATE_IDLE = 0; ViewPager.SCROLL_STATE_DRAGGING = 1; ViewPager.SCROLL_STATE_SETTLING = 2; - view_10.ViewPager = ViewPager; + view_9.ViewPager = ViewPager; (function (ViewPager) { class SimpleOnPageChangeListener { onPageScrolled(position, positionOffset, positionOffsetPixels) { @@ -56151,23 +57495,41 @@ var android; } ViewPager.SimpleOnPageChangeListener = SimpleOnPageChangeListener; class LayoutParams extends ViewGroup.LayoutParams { - constructor() { - super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + constructor(...args) { + super(...(() => { + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (args.length === 0) + return [ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT]; + })()); this.isDecor = false; this.gravity = 0; this.widthFactor = 0; this.needsMeasure = false; this.position = 0; this.childIndex = 0; - this._attrBinder.addAttr('gravity', (value) => { - this.gravity = this._attrBinder.parseGravity(value, this.gravity); - }, () => { - return this.gravity; + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) { + const c = args[0]; + const attrs = args[1]; + const a = c.obtainStyledAttributes(attrs); + this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), Gravity.TOP); + a.recycle(); + } + else if (args.length === 0) { + } + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_gravity', { + setter(param, value, attrBinder) { + param.gravity = attrBinder.parseGravity(value, param.gravity); + }, getter(param) { + return param.gravity; + } }); } } ViewPager.LayoutParams = LayoutParams; - })(ViewPager = view_10.ViewPager || (view_10.ViewPager = {})); + })(ViewPager = view_9.ViewPager || (view_9.ViewPager = {})); class ItemInfo { constructor() { this.position = 0; @@ -56217,10 +57579,10 @@ var android; this.mEdgeSize = 0; this.mTrackingEdges = 0; this.mSetIdleRunnable = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - _this.setDragState(ViewDragHelper.STATE_IDLE); + inner_this.setDragState(ViewDragHelper.STATE_IDLE); } } return new _Inner(); @@ -56969,6 +58331,7 @@ var android; var View = android.view.View; var ViewGroup = android.view.ViewGroup; var ViewDragHelper = android.support.v4.widget.ViewDragHelper; + var Context = android.content.Context; class DrawerLayout extends ViewGroup { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); @@ -57201,24 +58564,24 @@ var android; this.mFirstLayout = true; } onMeasure(widthMeasureSpec, heightMeasureSpec) { - let widthMode = DrawerLayout.MeasureSpec.getMode(widthMeasureSpec); - let heightMode = DrawerLayout.MeasureSpec.getMode(heightMeasureSpec); - let widthSize = DrawerLayout.MeasureSpec.getSize(widthMeasureSpec); - let heightSize = DrawerLayout.MeasureSpec.getSize(heightMeasureSpec); - if (widthMode != DrawerLayout.MeasureSpec.EXACTLY || heightMode != DrawerLayout.MeasureSpec.EXACTLY) { + let widthMode = View.MeasureSpec.getMode(widthMeasureSpec); + let heightMode = View.MeasureSpec.getMode(heightMeasureSpec); + let widthSize = View.MeasureSpec.getSize(widthMeasureSpec); + let heightSize = View.MeasureSpec.getSize(heightMeasureSpec); + if (widthMode != View.MeasureSpec.EXACTLY || heightMode != View.MeasureSpec.EXACTLY) { if (this.isInEditMode()) { - if (widthMode == DrawerLayout.MeasureSpec.AT_MOST) { - widthMode = DrawerLayout.MeasureSpec.EXACTLY; + if (widthMode == View.MeasureSpec.AT_MOST) { + widthMode = View.MeasureSpec.EXACTLY; } - else if (widthMode == DrawerLayout.MeasureSpec.UNSPECIFIED) { - widthMode = DrawerLayout.MeasureSpec.EXACTLY; + else if (widthMode == View.MeasureSpec.UNSPECIFIED) { + widthMode = View.MeasureSpec.EXACTLY; widthSize = 300; } - if (heightMode == DrawerLayout.MeasureSpec.AT_MOST) { - heightMode = DrawerLayout.MeasureSpec.EXACTLY; + if (heightMode == View.MeasureSpec.AT_MOST) { + heightMode = View.MeasureSpec.EXACTLY; } - else if (heightMode == DrawerLayout.MeasureSpec.UNSPECIFIED) { - heightMode = DrawerLayout.MeasureSpec.EXACTLY; + else if (heightMode == View.MeasureSpec.UNSPECIFIED) { + heightMode = View.MeasureSpec.EXACTLY; heightSize = 300; } } @@ -57236,8 +58599,8 @@ var android; } const lp = child.getLayoutParams(); if (this.isContentView(child)) { - const contentWidthSpec = DrawerLayout.MeasureSpec.makeMeasureSpec(widthSize - lp.leftMargin - lp.rightMargin, DrawerLayout.MeasureSpec.EXACTLY); - const contentHeightSpec = DrawerLayout.MeasureSpec.makeMeasureSpec(heightSize - lp.topMargin - lp.bottomMargin, DrawerLayout.MeasureSpec.EXACTLY); + const contentWidthSpec = View.MeasureSpec.makeMeasureSpec(widthSize - lp.leftMargin - lp.rightMargin, View.MeasureSpec.EXACTLY); + const contentHeightSpec = View.MeasureSpec.makeMeasureSpec(heightSize - lp.topMargin - lp.bottomMargin, View.MeasureSpec.EXACTLY); child.measure(contentWidthSpec, contentHeightSpec); } else if (this.isDrawerView(child)) { @@ -57659,6 +59022,9 @@ var android; checkLayoutParams(p) { return p instanceof DrawerLayout.LayoutParams && super.checkLayoutParams(p); } + generateLayoutParamsFromAttr(attrs) { + return new DrawerLayout.LayoutParams(this.getContext(), attrs); + } hasVisibleDrawer() { return this.findVisibleDrawer() != null; } @@ -57734,10 +59100,10 @@ var android; super(); this.mAbsGravity = 0; this.mPeekRunnable = (() => { - const _this = this; + const inner_this = this; class _Inner { run() { - _this.peekDrawer(); + inner_this.peekDrawer(); } } return new _Inner(); @@ -57863,11 +59229,50 @@ var android; DrawerLayout.ViewDragCallback = ViewDragCallback; class LayoutParams extends ViewGroup.MarginLayoutParams { constructor(...args) { - super(...(args.length == 3 ? [args[0], args[1]] : args)); + super(...(() => { + if (args[0] instanceof android.content.Context && args[1] instanceof HTMLElement) + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] === 'number') + return [args[0], args[1]]; + else if (typeof args[0] === 'number' && typeof args[1] === 'number') + return [args[0], args[1]]; + else if (args[0] instanceof DrawerLayout.LayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.MarginLayoutParams) + return [args[0]]; + else if (args[0] instanceof ViewGroup.LayoutParams) + return [args[0]]; + })()); this.gravity = Gravity.NO_GRAVITY; this.onScreen = 0; - this._attrBinder.addAttr('gravity', (value) => { - this.gravity = this._attrBinder.parseGravity(value, this.gravity); + if (args[0] instanceof Context && args[1] instanceof HTMLElement) { + const c = args[0]; + const attrs = args[1]; + const a = c.obtainStyledAttributes(attrs); + this.gravity = Gravity.parseGravity(a.getAttrValue('layout_gravity'), Gravity.NO_GRAVITY); + a.recycle(); + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number' && typeof args[2] == 'number') { + this.gravity = args[2]; + } + else if (typeof args[0] === 'number' && typeof args[1] === 'number') { + } + else if (args[0] instanceof DrawerLayout.LayoutParams) { + const source = args[0]; + this.gravity = source.gravity; + } + else if (args[0] instanceof ViewGroup.MarginLayoutParams) { + } + else if (args[0] instanceof ViewGroup.LayoutParams) { + } + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('layout_gravity', { + setter(param, value, attrBinder) { + param.gravity = attrBinder.parseGravity(value, param.gravity); + }, getter(param) { + return param.gravity; + } }); } } @@ -58048,13 +59453,13 @@ var uk; const configuration = ViewConfiguration.get(); this.mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); this.mTouchSlop = configuration.getScaledTouchSlop(); - const _this = this; + const inner_this = this; let scaleListener = { onScale(detector) { let scaleFactor = detector.getScaleFactor(); if (Number.isNaN(scaleFactor) || !Number.isFinite(scaleFactor)) return false; - _this.mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY()); + inner_this.mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; }, onScaleBegin(detector) { @@ -58289,11 +59694,11 @@ var uk; this.mScaleDragDetector = new GestureDetector(); this.mScaleDragDetector.setOnGestureListener(this); this.mGestureDetector = new android.view.GestureDetector((() => { - const _this = this; + const inner_this = this; class _Inner extends android.view.GestureDetector.SimpleOnGestureListener { onLongPress(e) { - if (null != _this.mLongClickListener) { - _this.mLongClickListener.onLongClick(_this.getImageView()); + if (null != inner_this.mLongClickListener) { + inner_this.mLongClickListener.onLongClick(inner_this.getImageView()); } } } @@ -59378,10 +60783,6 @@ var androidui; (function (widget) { var View = android.view.View; var MeasureSpec = View.MeasureSpec; - var ImageView = android.widget.ImageView; - window.addEventListener('AndroidUILoadFinish', () => { - eval('ImageView = android.widget.ImageView;'); - }); class HtmlImageView extends widget.HtmlBaseView { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); @@ -59394,34 +60795,63 @@ var androidui; this.mDrawableHeight = 0; this.mAdjustViewBoundsCompat = false; this.initImageView(); - this._attrBinder.addAttr('src', (value) => { - this.setImageURI(value); - }, () => { - return this.mImgElement.src; - }); - this._attrBinder.addAttr('adjustViewBounds', (value) => { - this.setAdjustViewBounds(this._attrBinder.parseBoolean(value, false)); - }); - this._attrBinder.addAttr('maxWidth', (value) => { - let baseValue = this.getParent() instanceof View ? this.getParent().getWidth() : 0; - this.setMaxWidth(this._attrBinder.parseNumberPixelSize(value, this.mMaxWidth, baseValue)); - }, () => { - return this.mMaxWidth; - }); - this._attrBinder.addAttr('maxHeight', (value) => { - let baseValue = this.getParent() instanceof View ? this.getParent().getHeight() : 0; - this.setMaxHeight(this._attrBinder.parseNumberPixelSize(value, this.mMaxHeight, baseValue)); - }, () => { - return this.mMaxHeight; - }); - this._attrBinder.addAttr('scaleType', (value) => { - this.setScaleType(ImageView.parseScaleType(value, this.mScaleType)); - }, () => { - return this.mScaleType.toString(); + const a = context.obtainStyledAttributes(bindElement, defStyle); + const src = a.getString('src'); + if (src) { + this.setImageURI(src); + } + this.setAdjustViewBounds(a.getBoolean('adjustViewBounds', false)); + this.setMaxWidth(a.getDimensionPixelSize('maxWidth', this.mMaxWidth)); + this.setMaxHeight(a.getDimensionPixelSize('maxHeight', this.mMaxHeight)); + this.setScaleType(android.widget.ImageView.parseScaleType(a.getAttrValue('scaleType'), this.mScaleType)); + this.setImageAlpha(a.getInt('drawableAlpha', this.mAlpha)); + } + createClassAttrBinder() { + return super.createClassAttrBinder().set('src', { + setter(v, value, attrBinder) { + v.setImageURI(value); + }, getter(v) { + return v.mImgElement.src; + } + }).set('adjustViewBounds', { + setter(v, value, attrBinder) { + v.setAdjustViewBounds(attrBinder.parseBoolean(value, false)); + }, getter(v) { + return v.getAdjustViewBounds(); + } + }).set('maxWidth', { + setter(v, value, attrBinder) { + v.setMaxWidth(attrBinder.parseNumberPixelSize(value, v.mMaxWidth)); + }, getter(v) { + return v.mMaxWidth; + } + }).set('maxHeight', { + setter(v, value, attrBinder) { + v.setMaxHeight(attrBinder.parseNumberPixelSize(value, v.mMaxHeight)); + }, getter(v) { + return v.mMaxHeight; + } + }).set('scaleType', { + setter(v, value, attrBinder) { + if (typeof value === 'number') { + v.setScaleType(value); + } + else { + v.setScaleType(android.widget.ImageView.parseScaleType(value, v.mScaleType)); + } + }, getter(v) { + return v.mScaleType; + } + }).set('drawableAlpha', { + setter(v, value, attrBinder) { + v.setImageAlpha(attrBinder.parseInt(value, v.mAlpha)); + }, getter(v) { + return v.mAlpha; + } }); } initImageView() { - this.mScaleType = ImageView.ScaleType.FIT_CENTER; + this.mScaleType = android.widget.ImageView.ScaleType.FIT_CENTER; this.mImgElement = document.createElement('img'); this.mImgElement.style.position = "absolute"; this.mImgElement.onload = (() => { @@ -59443,7 +60873,7 @@ var androidui; setAdjustViewBounds(adjustViewBounds) { this.mAdjustViewBounds = adjustViewBounds; if (adjustViewBounds) { - this.setScaleType(ImageView.ScaleType.FIT_CENTER); + this.setScaleType(android.widget.ImageView.ScaleType.FIT_CENTER); } } getMaxWidth() { @@ -59470,7 +60900,7 @@ var androidui; } if (this.mScaleType != scaleType) { this.mScaleType = scaleType; - this.setWillNotCacheDrawing(scaleType == ImageView.ScaleType.CENTER); + this.setWillNotCacheDrawing(scaleType == android.widget.ImageView.ScaleType.CENTER); this.requestLayout(); this.invalidate(); } @@ -59588,24 +61018,24 @@ var androidui; if (dwidth <= 0 || dheight <= 0) { return; } - if (this.mScaleType === ImageView.ScaleType.FIT_XY) { + if (this.mScaleType === android.widget.ImageView.ScaleType.FIT_XY) { this.mImgElement.style.width = vwidth + 'px'; this.mImgElement.style.height = vheight + 'px'; return; } this.mImgElement.style.width = dwidth + 'px'; this.mImgElement.style.height = dheight + 'px'; - if (ImageView.ScaleType.MATRIX === this.mScaleType) { + if (android.widget.ImageView.ScaleType.MATRIX === this.mScaleType) { } else if (fits) { } - else if (ImageView.ScaleType.CENTER === this.mScaleType) { + else if (android.widget.ImageView.ScaleType.CENTER === this.mScaleType) { let left = Math.round((vwidth - dwidth) * 0.5); let top = Math.round((vheight - dheight) * 0.5); this.mImgElement.style.left = left + 'px'; this.mImgElement.style.top = top + 'px'; } - else if (ImageView.ScaleType.CENTER_CROP === this.mScaleType) { + else if (android.widget.ImageView.ScaleType.CENTER_CROP === this.mScaleType) { let scale; let dx = 0, dy = 0; if (dwidth * vheight > vwidth * dheight) { @@ -59625,7 +61055,7 @@ var androidui; this.mImgElement.style.top = Math.round(dy) + 'px'; } } - else if (ImageView.ScaleType.CENTER_INSIDE === this.mScaleType) { + else if (android.widget.ImageView.ScaleType.CENTER_INSIDE === this.mScaleType) { let scale = 1; if (dwidth <= vwidth && dheight <= vheight) { } @@ -59659,19 +61089,19 @@ var androidui; this.mImgElement.style.height = vheight + 'px'; } let scale = Math.min(wScale, hScale); - if (ImageView.ScaleType.FIT_CENTER === this.mScaleType) { + if (android.widget.ImageView.ScaleType.FIT_CENTER === this.mScaleType) { let dx = Math.round((vwidth - dwidth * scale) * 0.5); let dy = Math.round((vheight - dheight * scale) * 0.5); this.mImgElement.style.left = dx + 'px'; this.mImgElement.style.top = dy + 'px'; } - else if (ImageView.ScaleType.FIT_END === this.mScaleType) { + else if (android.widget.ImageView.ScaleType.FIT_END === this.mScaleType) { let dx = Math.round((vwidth - dwidth * scale)); let dy = Math.round((vheight - dheight * scale)); this.mImgElement.style.left = dx + 'px'; this.mImgElement.style.top = dy + 'px'; } - else if (ImageView.ScaleType.FIT_START === this.mScaleType) { + else if (android.widget.ImageView.ScaleType.FIT_START === this.mScaleType) { } } } @@ -60150,14 +61580,14 @@ var androidui; this.autoLoadScrollAtBottom = true; this.footerViewReadyDistance = 36 * android.content.res.Resources.getDisplayMetrics().density; this.contentOverY = 0; - this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(context)); - this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(context)); - this._attrBinder.addAttr('refreshEnable', (value) => { - this.setRefreshEnable(this._attrBinder.parseBoolean(value, true)); - }); - this._attrBinder.addAttr('loadEnable', (value) => { - this.setLoadEnable(this._attrBinder.parseBoolean(value, true)); - }); + const a = context.obtainStyledAttributes(bindElement, defStyle); + if (a.getBoolean('refreshEnable', true)) { + this.setRefreshEnable(true); + } + if (a.getBoolean('loadEnable', true)) { + this.setLoadEnable(true); + } + a.recycle(); } onViewAdded(child) { super.onViewAdded(child); @@ -60398,7 +61828,7 @@ var androidui; this.overScrollLocker.lockOverScrollTop(0); } else { - this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView()); + this.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(this.getContext())); } } setLoadEnable(enable) { @@ -60412,7 +61842,7 @@ var androidui; this.overScrollLocker.lockOverScrollBottom(0); } else { - this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView()); + this.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(this.getContext())); } } setRefreshLoadListener(refreshLoadListener) { @@ -60449,8 +61879,8 @@ var androidui; widget.PullRefreshLoadLayout = PullRefreshLoadLayout; (function (PullRefreshLoadLayout) { class HeaderView extends FrameLayout { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.state = PullRefreshLoadLayout.State_Header_Normal; this.stateBeforeReady = PullRefreshLoadLayout.State_Header_Normal; } @@ -60458,12 +61888,12 @@ var androidui; const oldState = this.state; this.state = state; this.onStateChange(state, oldState); - const _this = this; + const inner_this = this; switch (state) { case PullRefreshLoadLayout.State_Header_RefreshFail: this.postDelayed({ run() { - if (state === _this.state) { + if (state === inner_this.state) { prll.setHeaderState(PullRefreshLoadLayout.State_Header_Normal); } } @@ -60477,8 +61907,8 @@ var androidui; } PullRefreshLoadLayout.HeaderView = HeaderView; class FooterView extends FrameLayout { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.state = PullRefreshLoadLayout.State_Footer_Normal; this.stateBeforeReady = PullRefreshLoadLayout.State_Footer_Normal; } @@ -60497,14 +61927,14 @@ var androidui; class DefaultHeaderView extends HeaderView { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); - this.progressBar = new ProgressBar(); + this.progressBar = new ProgressBar(context); this.progressBar.setVisibility(View.GONE); - this.textView = new TextView(); + this.textView = new TextView(context); let density = android.content.res.Resources.getDisplayMetrics().density; const pad = 16 * density; this.textView.setPadding(pad / 2, pad, pad / 2, pad); this.textView.setGravity(Gravity.CENTER); - let linear = new LinearLayout(); + let linear = new LinearLayout(context); linear.addView(this.progressBar, 32 * density, 32 * density); linear.addView(this.textView); linear.setGravity(Gravity.CENTER); @@ -60535,14 +61965,14 @@ var androidui; class DefaultFooterView extends FooterView { constructor(context, bindElement, defStyle) { super(context, bindElement, defStyle); - this.progressBar = new ProgressBar(); + this.progressBar = new ProgressBar(context); this.progressBar.setVisibility(View.GONE); - this.textView = new TextView(); + this.textView = new TextView(context); let density = android.content.res.Resources.getDisplayMetrics().density; const pad = 16 * density; this.textView.setPadding(pad / 2, pad, pad / 2, pad); this.textView.setGravity(Gravity.CENTER); - let linear = new LinearLayout(); + let linear = new LinearLayout(context); linear.addView(this.progressBar); linear.addView(this.textView); linear.setGravity(Gravity.CENTER); @@ -60860,8 +62290,8 @@ var androidui; (function (native) { var Rect = android.graphics.Rect; class NativeEditText extends android.widget.EditText { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mRectTmp = new Rect(); } computeTextArea() { @@ -60996,8 +62426,8 @@ var androidui; var HtmlView = androidui.widget.HtmlView; var Rect = android.graphics.Rect; class NativeHtmlView extends HtmlView { - constructor(...args) { - super(...args); + constructor() { + super(...arguments); this.mRectDrawHTMLBoundTmp = new Rect(); } _syncBoundAndScrollToElement() { diff --git a/package.json b/package.json index 41623a9..6c7e500 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "androiduix", - "version": "0.6.7", + "version": "0.7.0", "description": "Framework to make high-performance SPA/WebApp. Render with web canvas.", "keywords": [ "webapp",